UNPKG

@hotmeshio/hotmesh

Version:

Permanent-Memory Workflows & AI Agents

82 lines (81 loc) 2.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MapperService = void 0; const pipe_1 = require("../pipe"); class MapperService { constructor(rules, data) { this.rules = rules; this.data = data; } mapRules() { return this.traverseRules(this.rules); } traverseRules(rules) { if (typeof rules === 'object' && '@pipe' in rules) { return this.pipe(rules['@pipe']); } if (typeof rules === 'object' && rules !== null) { const mappedRules = {}; for (const key in rules) { if (Object.prototype.hasOwnProperty.call(rules, key)) { mappedRules[key] = this.traverseRules(rules[key]); } } return mappedRules; } else { return this.resolve(rules); } } /** * resolves a pipe expression of the form: { @pipe: [["{data.foo.bar}", 2, false, "hello world"]] } * @param value * @returns */ pipe(value) { const pipe = new pipe_1.Pipe(value, this.data); return pipe.process(); } /** * resolves a mapping expression in the form: "{data.foo.bar}" or 2 or false or "hello world" * @param value * @returns */ resolve(value) { const pipe = new pipe_1.Pipe([[value]], this.data); return pipe.process(); } /** * Evaluates a transition rule against the current job state and incoming Stream message * to determine which (if any) transition should be taken. */ static evaluate(transitionRule, context, code) { if (typeof transitionRule === 'boolean') { return transitionRule; } if ((Array.isArray(transitionRule.code) && transitionRule.code.includes(code || 200)) || code.toString() === (transitionRule.code || 200).toString()) { if (!transitionRule.match) { return true; } const orGate = transitionRule.gate === 'or'; let allAreTrue = true; let someAreTrue = false; transitionRule.match.forEach(({ expected, actual }) => { if ((orGate && !someAreTrue) || (!orGate && allAreTrue)) { const result = pipe_1.Pipe.resolve(actual, context) === expected; if (orGate && result) { someAreTrue = true; } else if (!orGate && !result) { allAreTrue = false; } } }); return orGate ? someAreTrue : allAreTrue; } return false; } } exports.MapperService = MapperService;