overmind
Version:
Frictionless state management
1 lines • 19.7 kB
Source Map (JSON)
{"version":3,"file":"operator.js","sourceRoot":"","sources":["../src/operator.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventType, Execution, OperatorContextFunction } from './internalTypes'\nimport { IConfiguration, IContext } from './types'\nimport {\n IS_OPERATOR,\n MODE_TEST,\n ORIGINAL_ACTIONS,\n createActionsProxy,\n getFunctionName,\n isPromise,\n} from './utils'\n\nexport function action<T extends OperatorContextFunction<any, any>>(\n operation: T\n): T {\n return createMutationOperator(\n 'action',\n getFunctionName(operation),\n (err, context, value, next) => {\n if (err) next(err, value)\n else {\n const result = operation(context, value) as any\n\n if (isPromise(result)) {\n next(null, result.then((resolvedValue) => resolvedValue))\n } else {\n next(null, result)\n }\n }\n }\n )\n}\n\nexport function operatorStarted(type, arg, context) {\n if (process.env.NODE_ENV === 'production') {\n return\n }\n const name =\n typeof arg === 'function' ? arg.displayName || arg.name : String(arg)\n\n context.execution.isRunning = true\n context.execution.emit(EventType.OPERATOR_START, {\n ...context.execution,\n name,\n type,\n })\n}\n\nexport function operatorStopped(\n context,\n value,\n details: {\n error?: Error\n isIntercepted?: boolean\n isSkipped?: boolean\n } = {}\n) {\n if (process.env.NODE_ENV === 'production') {\n if (value instanceof Promise) {\n context.execution.emit(EventType.OPERATOR_ASYNC, {\n ...context.execution,\n isAsync: true,\n })\n }\n return\n }\n\n const evaluatedDetails = {\n error: details.error ? details.error.message : undefined,\n isIntercepted: Boolean(details.isIntercepted),\n isSkipped: Boolean(details.isSkipped),\n }\n\n if (value instanceof Promise) {\n value\n .then((promiseValue) => {\n context.execution.isRunning = false\n context.execution.emit(EventType.OPERATOR_END, {\n ...context.execution,\n result: promiseValue,\n isAsync: true,\n ...evaluatedDetails,\n })\n })\n .catch(() => {\n // Make sure an error does not cause uncaught\n })\n } else {\n context.execution.isRunning = false\n context.execution.emit(EventType.OPERATOR_END, {\n ...context.execution,\n result: value,\n isAsync: false,\n ...evaluatedDetails,\n })\n }\n}\n\nexport function createContext(context, value, path?) {\n if (process.env.NODE_ENV === 'production') {\n return {\n ...context,\n value,\n }\n }\n\n const newExecution = {\n ...context.execution,\n operatorId: context.execution.getNextOperatorId(),\n path: path || context.execution.path,\n }\n\n const mutationTrees: any[] = []\n return {\n ...context,\n actions: createActionsProxy(\n context.actions[ORIGINAL_ACTIONS] || context.actions,\n (action) => {\n return (value) =>\n action(value, newExecution.isRunning ? newExecution : null)\n }\n ),\n value,\n execution: newExecution,\n effects: context.execution.trackEffects(newExecution),\n flush: context.parentExecution\n ? context.parentExecution.flush\n : (isAsync?: boolean) => {\n return this.proxyStateTree.flush(mutationTrees, isAsync)\n },\n getMutationTree: context.parentExecution\n ? context.parentExecution.getMutationTree\n : () => {\n const mutationTree = this.proxyStateTree.getMutationTree()\n\n mutationTrees.push(mutationTree)\n\n if (this.mode.mode === MODE_TEST) {\n mutationTree.onMutation((mutation) => {\n this.addExecutionMutation(mutation)\n })\n }\n return mutationTree\n },\n }\n}\n\nexport function createNextPath(next) {\n if (process.env.NODE_ENV === 'production') {\n return next\n }\n\n return (err, context) => {\n const newContext = {\n ...context,\n execution: {\n ...context.execution,\n path: context.execution.path.slice(\n 0,\n context.execution.path.length - 1\n ),\n },\n }\n if (err) next(err, newContext)\n else next(null, newContext)\n }\n}\n\nexport function createOperator<ThisConfig extends IConfiguration>(\n type: string,\n name: string,\n cb: (\n err: Error | null,\n context: IContext<ThisConfig> & { execution: Execution },\n value: any,\n next: (\n err: Error | null,\n value: any,\n options?: {\n path?: { name: string; operator: Function }\n isSkipped?: boolean\n }\n ) => void,\n final: (err: Error | null, value: any) => void\n ) => any\n): any {\n const operator = (err, context, next, final) => {\n operatorStarted(type, name, context)\n let nextIsCalled = false\n try {\n cb(\n err,\n {\n state: context.state,\n effects: context.effects,\n actions: context.actions,\n execution: context.execution,\n addFlushListener: context.addFlushListener,\n addMutationListener: context.addMutationListener,\n reaction: context.reaction,\n },\n context.value,\n (err, value, options = {}) => {\n function run(err, value) {\n if (options.path) {\n const newContext = createContext(\n context,\n value,\n context.execution.path &&\n context.execution.path.concat(options.path.name)\n )\n const nextWithPath = createNextPath(next)\n const operatorToRun = options.path.operator[IS_OPERATOR]\n ? options.path.operator\n : action(options.path.operator as any)\n operatorToRun(err, newContext, (...args) => {\n operatorStopped(context, args[1].value)\n nextWithPath(...args)\n })\n } else {\n operatorStopped(context, err || value, {\n isSkipped: err ? true : options.isSkipped,\n })\n next(err, createContext(context, value))\n }\n }\n\n if (value && value instanceof Promise) {\n value\n .then((promiseValue) => run(err, promiseValue))\n .catch((promiseError) => run(promiseError, promiseError))\n } else {\n nextIsCalled = true\n run(err, value)\n }\n },\n (err, value) => {\n nextIsCalled = true\n operatorStopped(context, err || value, {\n isSkipped: Boolean(err),\n isIntercepted: !err,\n })\n final(err, createContext(context, value))\n }\n )\n } catch (error) {\n nextIsCalled = true\n operatorStopped(context, context.value, {\n error,\n })\n next(error, createContext(context, context.value))\n }\n\n if (!nextIsCalled) {\n context.execution.emit(EventType.OPERATOR_ASYNC, {\n ...context.execution,\n isAsync: true,\n })\n }\n }\n\n operator[IS_OPERATOR] = true\n\n return operator\n}\n\nexport function createMutationOperator<ThisConfig extends IConfiguration>(\n type: string,\n name: string,\n cb: (\n err: Error | null,\n context: IContext<ThisConfig> & { execution: Execution },\n value: any,\n next: (\n err: Error | null,\n value: any,\n options?: {\n path?: { name: string; operator: Function }\n isSkipped?: boolean\n }\n ) => void,\n final: (err: Error | null, value: any) => void\n ) => any\n): any {\n const operator = (err, context, next, final) => {\n operatorStarted(type, name, context)\n const mutationTree = context.execution.getMutationTree()\n if (!(process.env.NODE_ENV === 'production')) {\n mutationTree.onMutation((mutation) => {\n context.execution.emit(EventType.MUTATIONS, {\n ...context.execution,\n mutations: [mutation],\n })\n })\n }\n let nextIsCalled = false\n try {\n cb(\n err,\n {\n state: mutationTree.state,\n effects: context.effects,\n actions: context.actions,\n execution: context.execution,\n addFlushListener: context.addFlushListener,\n addMutationListener: context.addMutationListener,\n reaction: context.reaction,\n },\n process.env.NODE_ENV === 'production'\n ? context.value\n : context.execution.scopeValue(context.value, mutationTree),\n (err, value, options = {}) => {\n function run(err, value) {\n operatorStopped(context, err || value, {\n isSkipped: err ? true : options.isSkipped,\n })\n mutationTree.dispose()\n next(err, createContext(context, value))\n }\n\n if (value && value instanceof Promise) {\n value\n .then((promiseValue) => run(err, promiseValue))\n .catch((promiseError) => run(promiseError, promiseError))\n } else {\n nextIsCalled = true\n run(err, value)\n }\n },\n (err, value) => {\n nextIsCalled = true\n operatorStopped(context, err || value, {\n isSkipped: Boolean(err),\n isIntercepted: !err,\n })\n final(err, createContext(context, value))\n }\n )\n\n if (!(process.env.NODE_ENV === 'production')) {\n let pendingFlush\n mutationTree.onMutation(() => {\n if (pendingFlush) {\n clearTimeout(pendingFlush)\n }\n pendingFlush = setTimeout(() => {\n const flushData = context.execution.flush(true)\n\n if (flushData.mutations.length) {\n context.execution.send({\n type: 'flush',\n data: {\n ...context.execution,\n ...flushData,\n mutations: flushData.mutations,\n },\n })\n }\n })\n })\n }\n } catch (error) {\n nextIsCalled = true\n operatorStopped(context, context.value, {\n error,\n })\n next(error, createContext(context, context.value))\n }\n\n if (!nextIsCalled) {\n context.execution.emit(EventType.OPERATOR_ASYNC, {\n ...context.execution,\n isAsync: true,\n })\n }\n }\n\n operator[IS_OPERATOR] = true\n\n return operator\n}\n"]}