@hotmeshio/hotmesh
Version:
Permanent-Memory Workflows & AI Agents
82 lines (81 loc) • 2.77 kB
JavaScript
;
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;