UNPKG

@hotmeshio/hotmesh

Version:

Serverless Workflow

91 lines (80 loc) 2.38 kB
/** * Represents a single cell value in a pipeline row * If the value is a string, the value will be a literal OR mapping expression */ type PipeItem = string | boolean | number | null | object; /** * Array of `PipeItem` types. */ type PipeItems = PipeItem[]; /** * Represents a new nested context in the pipeline. * As the structure is recursive, the nested pipe may contain an * array of `PipeItem[]`, `PipeObject`, OR `ReduceObject` items. */ type PipeObject = { '@pipe': Array<PipeItem[] | PipeObject | ReduceObject> }; /** * Reduce is similar to Pipe in that it represents a new context * and may include an array of `PipeItem[]`, `PipeObject`, or `ReduceObject`. * But it also iterates and produces output. The context variables, * `$input`, `$output`, `$item`, `$key`, and `$index` are available. * @example * * // Example of a reduce expression. The optional object is empty and * // serves as the $output during iteration. The last step in the iteration * // sets $output. if ther are no more iterations, the $output is returned * // and provided to the next step in the pipeline. * * // If data is: * // { response: ['a', 'b', 'c'] } * * // The reduced/transformed expression will be: * // { 'a': 0, 'b': 1, 'c': 2 } * * // Arrays and objects may be iterated over and transformed. * * //YAML * '@pipe': * - ['{data.response}', {}] * - '@reduce': * - '@pipe': * - ['{$output}'] * - '@pipe': * - ['{$item}'] * - '@pipe': * - ['{$index}'] * - ['{@object.set}'] */ type ReduceObject = { '@reduce': Array<PipeItem[] | PipeObject | ReduceObject>; }; /** * Represents a sequence in the pipeline that can include arrays of `PipeItem`, `PipeObject`, or `ReduceObject`. */ type Pipe = (PipeItem[] | PipeObject | ReduceObject)[]; /** * Defines the context of a pipeline operation. */ type PipeContext = { /** * Input of the current iteration. */ $input: unknown[]; /** * Output of the current iteration and the final output for the reducer. */ $output: unknown; /** * Target item in the iterator. */ $item: unknown; /** * Array index as string or object key. */ $key: string; /** * Numeric index of the iterator. */ $index: number; }; export { Pipe, PipeContext, PipeItem, PipeItems, PipeObject, ReduceObject };