UNPKG

@jplorg/jpl

Version:
59 lines (58 loc) 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _library = require("../../../library"); var _utils = require("../utils"); var _opcEqual = _interopRequireDefault(require("./opcEqual")); var _opcGreater = _interopRequireDefault(require("./opcGreater")); var _opcGreaterEqual = _interopRequireDefault(require("./opcGreaterEqual")); var _opcLess = _interopRequireDefault(require("./opcLess")); var _opcLessEqual = _interopRequireDefault(require("./opcLessEqual")); var _opcUnequal = _interopRequireDefault(require("./opcUnequal")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var _default = exports.default = { /** { pipe: [op], comparisons: [opc] } */ 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.comparisons?.length ?? 0)) return next(value, scope); const { op, params: opParams } = params.comparisons[from]; const operator = opcs[op]; if (!operator) throw new _library.JPLFatalError(`invalid OPC '${op}'`); return operator.op(runtime, input, value, opParams ?? {}, scope, output => iter(from + 1, output)); }; return runtime.executeInstructions(params.pipe ?? [], [input], scope, output => iter(0, output)); }, /** { pipe: function, comparisons: [opc] } */ map(runtime, params) { return { pipe: (0, _utils.call)(params.pipe), comparisons: runtime.muxOne([params.comparisons], ({ op, params: opParams }) => { const operator = opcs[op]; if (!operator) throw new _library.JPLFatalError(`invalid OPC '${op}'`); return { op: runtime.assertType(op, 'string'), params: operator.map(runtime, opParams) }; }) }; } }; const opcs = { [_library.OPC_EQUAL]: _opcEqual.default, [_library.OPC_GREATER]: _opcGreater.default, [_library.OPC_GREATEREQUAL]: _opcGreaterEqual.default, [_library.OPC_LESS]: _opcLess.default, [_library.OPC_LESSEQUAL]: _opcLessEqual.default, [_library.OPC_UNEQUAL]: _opcUnequal.default };