UNPKG

@jplorg/jpl

Version:
90 lines (89 loc) 3.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _library = require("../../../library"); var _utils = require("../utils"); var _opaAssignField = _interopRequireDefault(require("./opaAssignField")); var _opaAssignIter = _interopRequireDefault(require("./opaAssignIter")); var _opaAssignSlice = _interopRequireDefault(require("./opaAssignSlice")); var _opuAddition = _interopRequireDefault(require("./opuAddition")); var _opuDivision = _interopRequireDefault(require("./opuDivision")); var _opuMultiplication = _interopRequireDefault(require("./opuMultiplication")); var _opuNullCoalescence = _interopRequireDefault(require("./opuNullCoalescence")); var _opuRemainder = _interopRequireDefault(require("./opuRemainder")); var _opuSet = _interopRequireDefault(require("./opuSet")); var _opuSubtraction = _interopRequireDefault(require("./opuSubtraction")); var _opuUpdate = _interopRequireDefault(require("./opuUpdate")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var _default = exports.default = { /** { pipe: [op], selectors: [opa], assignment: [opu] } */ op(runtime, input, params, scope, next) { const iter = async (from, value) => { // Call stack decoupling - This is necessary as some browsers (i.e. Safari) have very limited call stack sizes which result in stack overflow exceptions in certain situations. await undefined; scope.signal.checkHealth(); if (from >= (params.selectors?.length ?? 0)) { const { op, params: opParams } = params.assignment ?? {}; const operator = opus[op]; if (!operator) throw new _library.JPLFatalError(`invalid OPU '${op}'`); return operator.op(runtime, input, value, opParams ?? {}, scope, output => [output]); } const { op, params: opParams } = params.selectors[from]; const operator = opasAssign[op]; if (!operator) throw new _library.JPLFatalError(`invalid OPA '${op}' (assignment)`); return operator.op(runtime, input, value, opParams ?? {}, scope, output => iter(from + 1, output)); }; return runtime.executeInstructions(params.pipe ?? [], [input], scope, async output => runtime.muxAll([await iter(0, output)], result => next(result === undefined ? output : result, scope))); }, /** { pipe: function, selectors: [opa], assignment: opu } */ map(runtime, params) { return { pipe: (0, _utils.call)(params.pipe), selectors: runtime.muxOne([params.selectors], ({ op, params: opParams }) => { const operator = opasAssign[op]; if (!operator) throw new _library.JPLFatalError(`invalid OPA '${op}' (assignment)`); return { op: runtime.assertType(op, 'string'), params: operator.map(runtime, opParams) }; }), assignment: (({ op, params: opParams }) => { const operator = opus[op]; if (!operator) throw new _library.JPLFatalError(`invalid OPU '${op}'`); return { op: runtime.assertType(op, 'string'), params: operator.map(runtime, opParams) }; })(params.assignment) }; } }; const opasAssign = { [_library.OPA_FIELD]: _opaAssignField.default, [_library.OPA_ITER]: _opaAssignIter.default, [_library.OPA_SLICE]: _opaAssignSlice.default }; const opus = { [_library.OPU_ADDITION]: _opuAddition.default, [_library.OPU_DIVISION]: _opuDivision.default, [_library.OPU_MULTIPLICATION]: _opuMultiplication.default, [_library.OPU_NULL_COALESCENCE]: _opuNullCoalescence.default, [_library.OPU_REMAINDER]: _opuRemainder.default, [_library.OPU_SET]: _opuSet.default, [_library.OPU_SUBTRACTION]: _opuSubtraction.default, [_library.OPU_UPDATE]: _opuUpdate.default };