import type Datastore from '../Datastore'; import Ajv from 'ajv'; import * as jsonpatch from 'fast-json-patch'; import { MultiQuery } from '../utils'; /** * Type of steps * - fetch * - map * - unset * - validate * - each * - filter * - op * * - parallel * - request * - json_patch */ export declare const STEP_TYPE_FETCH = "fetch"; export declare const STEP_TYPE_JSON_PATCH = "json_patch"; export declare const STEP_TYPE_MAP = "map"; export declare const STEP_TYPE_UNSET = "unset"; export declare const STEP_TYPE_VALIDATE = "validate"; export declare const STEP_TYPE_EACH = "each"; export declare const STEP_TYPE_IF = "if"; export declare const STEP_TYPE_FILTER = "filter"; export declare const STEP_TYPE_OP = "op"; export declare const STEP_TYPE_PERSIST = "persist"; export declare const STEP_TYPE_FROM = "from"; export declare const DEFAULT_STEP_TYPES: readonly string[]; export interface StepDefinition { handler: Function; schema?: object; name?: string; description?: string; } export interface StepMapItem { from: string; to: string; default: any; must_hash?: boolean; json_stringify?: boolean; relative_date_in_seconds?: number; } export interface StepFetch { type: string; name?: string; description?: string; destination?: string; datastore?: string; model: string; source?: MultiQuery['source']; query?: object; headers?: any; map?: StepMapItem[]; timetravel?: string; correlation_field?: string; page?: number; page_size?: number; as_entity?: boolean; must_decrypt?: boolean; default?: any; } export interface StepPersist { type: string; name?: string; description?: string; destination: string; datastore?: string; model: string; correlation_field?: string; payload: any; headers?: any; map?: StepMapItem[]; imperative_version_next?: string; } export interface StepJsonPatch { type: string; name?: string; description?: string; patch: jsonpatch.Operation[]; } export interface StepMap { type: string; name?: string; description?: string; map: StepMapItem[]; } /** * @deprecated in favor of JSON Patch */ export interface StepUnset { type: string; name?: string; description?: string; path: string; } export interface StepValidate { type: string; name?: string; description?: string; schema: object; path?: string; must_throw?: boolean; destination?: string; } export interface StepEach { type: string; name?: string; description?: string; path: string; pipeline: Step[]; destination?: string; } export interface StepIf { type: string; name?: string; description?: string; path: string; schema: object; pipeline: Step[]; destination?: string; repeat_while_true?: boolean; max_iteration_count?: number; } export interface StepFilter { type: string; name?: string; description?: string; path: string; schema: object; destination?: string; map?: StepMapItem[]; as_entity?: boolean; default?: any; } export interface StepOpArg { path: string; default: number; func: string; } export interface StepOp { type: string; name?: string; description?: string; func: string; args: StepOpArg[]; path?: string; destination?: string; default?: any; args_as_array?: boolean; } export interface StepFrom { type: string; name?: string; description?: string; path: string; } export type Step = StepFetch | StepJsonPatch | StepMap | StepUnset | StepValidate | StepEach | StepIf | StepFilter | StepOp | StepFrom; export type Aggregation = { [key: string]: any; }; export default class Aggregator { datastores: Map; steps: Map; logs: { level: string; msg: string; ts: number; context?: any; }[]; static pipelineValidator: Ajv; static ERROR_INVALID_PIPELINE_DEFINITION: Error; static ERROR_INVALID_STEP_TYPE: Error; static ERROR_ENTITY_NOT_FOUND: Error; static ERROR_DESTINATION_UNDEFINED: Error; static ERROR_CONFLICT_STEP_TYPE: Error; static ERROR_CONTRACT_ERROR_STEP_TYPE: Error; static ERROR_VALIDATE_STEP_FAILED: Error; static ERROR_ITERATE_STEP_IS_NOT_ARRAY: Error; static ERROR_OP_STEP_INVALID_VALUE: Error; static ERRORS: Error[]; config: { max_retry: number; }; metrics: { started_at_in_ms?: number; ended_at_in_ms?: number; elapsed_time_in_ms?: number; iteration?: number; }; private _pipelineValidator; constructor(datastores: Map, config?: { max_retry: number; }); static _customizer(objValue: any, srcValue: any): any[] | undefined; get pipelineValidator(): Ajv; log(level: string, msg: string, context?: any): void; addStepType(stepType: string, stepDefinition: StepDefinition): this; removeStepType(stepType: string): this; updateValidator(): void; mergeData(step: StepFetch | StepFilter, data?: Aggregation, results?: object[], destination?: string | undefined): Aggregation; static ok(condition: boolean, message: string): void; static hash(value: any): string; applyPatch(data: Aggregation, patch: jsonpatch.Operation[]): Aggregation; applyMap(source?: object, map?: StepMapItem[], data?: Aggregation | null): object; fetch(step: StepFetch, data?: Aggregation): Promise; getDatastore(datastore: string | undefined): Datastore; persist(step: StepPersist, data?: Aggregation): Promise; runStepFetch(step: StepFetch, data?: Aggregation): Promise; runStepPersist(step: StepPersist, data?: Aggregation): Promise; runStepJsonPatch(step: StepJsonPatch, data?: Aggregation): Promise; runStepMap(step: StepMap, data?: Aggregation): Promise; runStepUnset(step: StepUnset, data?: Aggregation): Promise; runStepValidate(step: StepValidate, data?: Aggregation): Promise; runStepEach(step: StepEach, data?: Aggregation): Promise; runStepIf(step: StepIf, data?: Aggregation, i?: number): Promise; runStepFilter(step: StepFilter, data?: Aggregation): Promise; /** * @alpha */ runStepOp(step: StepOp, data?: Aggregation | null): Promise; runStepFrom(step: StepFrom, data?: Aggregation): Promise; runStep(step: Step, data?: Aggregation): Promise; validate(pipeline: Step[]): void; aggregate(pipeline: Step[], initialData?: Aggregation, iteration?: number): Promise; }