UNPKG

map-transform

Version:

Map and transform objects with mapping definitions

45 lines 1.79 kB
import { defToOperation } from '../utils/definitionHelpers.js'; import { noopNext } from '../utils/stateHelpers.js'; const getPipeline = (pipelineId, { pipelines }) => (typeof pipelineId === 'string' || typeof pipelineId === 'symbol') && pipelines ? pipelines[pipelineId] : undefined; function setPipeline(id, operation, options) { if (options.pipelines) { options.pipelines[id] = operation; } } const removeFlip = ({ flip, ...state }) => state; function prepareAndSetPipeline(pipelineId, pipeline, options) { if (typeof pipeline !== 'function' && pipeline) { setPipeline(pipelineId, () => () => noopNext, options); const operation = defToOperation(pipeline, options)(options); setPipeline(pipelineId, () => operation, options); } } export default function apply(pipelineId) { return (options) => { const pipeline = getPipeline(pipelineId, options); if (!pipeline) { const message = pipelineId ? `Failed to apply pipeline '${String(pipelineId)}'. Unknown pipeline` : 'Failed to apply pipeline. No id provided'; throw new Error(message); } prepareAndSetPipeline(pipelineId, pipeline, options); return (next) => { const operation = getPipeline(pipelineId, options); const fn = typeof operation === 'function' ? operation(options)(noopNext) : undefined; if (fn) { setPipeline(pipelineId, () => () => fn, options); } return async (state) => { const nextState = await next(state); return fn ? fn(removeFlip(nextState)) : nextState; }; }; }; } //# sourceMappingURL=apply.js.map