@ruleflow-ts/dsl-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +290 -0
- package/dist/debug.d.ts +11 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +30 -0
- package/dist/debug.js.map +1 -0
- package/dist/errors/PropertyNotFoundError.d.ts +5 -0
- package/dist/errors/PropertyNotFoundError.d.ts.map +1 -0
- package/dist/errors/PropertyNotFoundError.js +17 -0
- package/dist/errors/PropertyNotFoundError.js.map +1 -0
- package/dist/evaluator/AggregationEvaluator.d.ts +9 -0
- package/dist/evaluator/AggregationEvaluator.d.ts.map +1 -0
- package/dist/evaluator/AggregationEvaluator.js +74 -0
- package/dist/evaluator/AggregationEvaluator.js.map +1 -0
- package/dist/evaluator/BinaryAndEvaluator.d.ts +6 -0
- package/dist/evaluator/BinaryAndEvaluator.d.ts.map +1 -0
- package/dist/evaluator/BinaryAndEvaluator.js +14 -0
- package/dist/evaluator/BinaryAndEvaluator.js.map +1 -0
- package/dist/evaluator/BinaryOrEvaluator.d.ts +6 -0
- package/dist/evaluator/BinaryOrEvaluator.d.ts.map +1 -0
- package/dist/evaluator/BinaryOrEvaluator.js +14 -0
- package/dist/evaluator/BinaryOrEvaluator.js.map +1 -0
- package/dist/evaluator/ComparatorEvaluator.d.ts +9 -0
- package/dist/evaluator/ComparatorEvaluator.d.ts.map +1 -0
- package/dist/evaluator/ComparatorEvaluator.js +95 -0
- package/dist/evaluator/ComparatorEvaluator.js.map +1 -0
- package/dist/evaluator/ListEvaluator.d.ts +10 -0
- package/dist/evaluator/ListEvaluator.d.ts.map +1 -0
- package/dist/evaluator/ListEvaluator.js +71 -0
- package/dist/evaluator/ListEvaluator.js.map +1 -0
- package/dist/evaluator/MathAddEvaluator.d.ts +5 -0
- package/dist/evaluator/MathAddEvaluator.d.ts.map +1 -0
- package/dist/evaluator/MathAddEvaluator.js +20 -0
- package/dist/evaluator/MathAddEvaluator.js.map +1 -0
- package/dist/evaluator/MathMulEvaluator.d.ts +5 -0
- package/dist/evaluator/MathMulEvaluator.d.ts.map +1 -0
- package/dist/evaluator/MathMulEvaluator.js +23 -0
- package/dist/evaluator/MathMulEvaluator.js.map +1 -0
- package/dist/evaluator/ParenthesisEvaluator.d.ts +5 -0
- package/dist/evaluator/ParenthesisEvaluator.d.ts.map +1 -0
- package/dist/evaluator/ParenthesisEvaluator.js +10 -0
- package/dist/evaluator/ParenthesisEvaluator.js.map +1 -0
- package/dist/evaluator/RegexlikeEvaluator.d.ts +6 -0
- package/dist/evaluator/RegexlikeEvaluator.d.ts.map +1 -0
- package/dist/evaluator/RegexlikeEvaluator.js +23 -0
- package/dist/evaluator/RegexlikeEvaluator.js.map +1 -0
- package/dist/evaluator/TupleListEvaluator.d.ts +11 -0
- package/dist/evaluator/TupleListEvaluator.d.ts.map +1 -0
- package/dist/evaluator/TupleListEvaluator.js +121 -0
- package/dist/evaluator/TupleListEvaluator.js.map +1 -0
- package/dist/evaluator/UnaryEvaluator.d.ts +6 -0
- package/dist/evaluator/UnaryEvaluator.d.ts.map +1 -0
- package/dist/evaluator/UnaryEvaluator.js +12 -0
- package/dist/evaluator/UnaryEvaluator.js.map +1 -0
- package/dist/evaluator/ValidPropertyEvaluator.d.ts +6 -0
- package/dist/evaluator/ValidPropertyEvaluator.d.ts.map +1 -0
- package/dist/evaluator/ValidPropertyEvaluator.js +32 -0
- package/dist/evaluator/ValidPropertyEvaluator.js.map +1 -0
- package/dist/evaluator/ValueEvaluator.d.ts +8 -0
- package/dist/evaluator/ValueEvaluator.d.ts.map +1 -0
- package/dist/evaluator/ValueEvaluator.js +43 -0
- package/dist/evaluator/ValueEvaluator.js.map +1 -0
- package/dist/evaluator/date/DateAddEvaluator.d.ts +7 -0
- package/dist/evaluator/date/DateAddEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/DateAddEvaluator.js +36 -0
- package/dist/evaluator/date/DateAddEvaluator.js.map +1 -0
- package/dist/evaluator/date/DateDiffEvaluator.d.ts +7 -0
- package/dist/evaluator/date/DateDiffEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/DateDiffEvaluator.js +31 -0
- package/dist/evaluator/date/DateDiffEvaluator.js.map +1 -0
- package/dist/evaluator/date/DateOperationEvaluator.d.ts +6 -0
- package/dist/evaluator/date/DateOperationEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/DateOperationEvaluator.js +13 -0
- package/dist/evaluator/date/DateOperationEvaluator.js.map +1 -0
- package/dist/evaluator/date/DateParseExprEvaluator.d.ts +7 -0
- package/dist/evaluator/date/DateParseExprEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/DateParseExprEvaluator.js +44 -0
- package/dist/evaluator/date/DateParseExprEvaluator.js.map +1 -0
- package/dist/evaluator/date/DateSubtractEvaluator.d.ts +7 -0
- package/dist/evaluator/date/DateSubtractEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/DateSubtractEvaluator.js +36 -0
- package/dist/evaluator/date/DateSubtractEvaluator.js.map +1 -0
- package/dist/evaluator/date/DateValueEvaluator.d.ts +7 -0
- package/dist/evaluator/date/DateValueEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/DateValueEvaluator.js +44 -0
- package/dist/evaluator/date/DateValueEvaluator.js.map +1 -0
- package/dist/evaluator/date/DayOfWeekEvaluator.d.ts +7 -0
- package/dist/evaluator/date/DayOfWeekEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/DayOfWeekEvaluator.js +21 -0
- package/dist/evaluator/date/DayOfWeekEvaluator.js.map +1 -0
- package/dist/evaluator/date/NowEvaluator.d.ts +6 -0
- package/dist/evaluator/date/NowEvaluator.d.ts.map +1 -0
- package/dist/evaluator/date/NowEvaluator.js +10 -0
- package/dist/evaluator/date/NowEvaluator.js.map +1 -0
- package/dist/evaluator/geo/DistanceEvaluator.d.ts +6 -0
- package/dist/evaluator/geo/DistanceEvaluator.d.ts.map +1 -0
- package/dist/evaluator/geo/DistanceEvaluator.js +15 -0
- package/dist/evaluator/geo/DistanceEvaluator.js.map +1 -0
- package/dist/evaluator/geo/DistanceGeohashEvaluator.d.ts +6 -0
- package/dist/evaluator/geo/DistanceGeohashEvaluator.d.ts.map +1 -0
- package/dist/evaluator/geo/DistanceGeohashEvaluator.js +15 -0
- package/dist/evaluator/geo/DistanceGeohashEvaluator.js.map +1 -0
- package/dist/evaluator/geo/GeoOperationEvaluator.d.ts +6 -0
- package/dist/evaluator/geo/GeoOperationEvaluator.d.ts.map +1 -0
- package/dist/evaluator/geo/GeoOperationEvaluator.js +11 -0
- package/dist/evaluator/geo/GeoOperationEvaluator.js.map +1 -0
- package/dist/evaluator/geo/GeohashDecodeEvaluator.d.ts +6 -0
- package/dist/evaluator/geo/GeohashDecodeEvaluator.d.ts.map +1 -0
- package/dist/evaluator/geo/GeohashDecodeEvaluator.js +12 -0
- package/dist/evaluator/geo/GeohashDecodeEvaluator.js.map +1 -0
- package/dist/evaluator/geo/GeohashEncodeEvaluator.d.ts +6 -0
- package/dist/evaluator/geo/GeohashEncodeEvaluator.d.ts.map +1 -0
- package/dist/evaluator/geo/GeohashEncodeEvaluator.js +15 -0
- package/dist/evaluator/geo/GeohashEncodeEvaluator.js.map +1 -0
- package/dist/evaluator/geo/WithinRadiusEvaluator.d.ts +6 -0
- package/dist/evaluator/geo/WithinRadiusEvaluator.d.ts.map +1 -0
- package/dist/evaluator/geo/WithinRadiusEvaluator.js +17 -0
- package/dist/evaluator/geo/WithinRadiusEvaluator.js.map +1 -0
- package/dist/evaluator/geo/geohash.d.ts +4 -0
- package/dist/evaluator/geo/geohash.d.ts.map +1 -0
- package/dist/evaluator/geo/geohash.js +91 -0
- package/dist/evaluator/geo/geohash.js.map +1 -0
- package/dist/evaluator/string/PartialRatioEvaluator.d.ts +6 -0
- package/dist/evaluator/string/PartialRatioEvaluator.d.ts.map +1 -0
- package/dist/evaluator/string/PartialRatioEvaluator.js +13 -0
- package/dist/evaluator/string/PartialRatioEvaluator.js.map +1 -0
- package/dist/evaluator/string/StringDistanceEvaluator.d.ts +6 -0
- package/dist/evaluator/string/StringDistanceEvaluator.d.ts.map +1 -0
- package/dist/evaluator/string/StringDistanceEvaluator.js +13 -0
- package/dist/evaluator/string/StringDistanceEvaluator.js.map +1 -0
- package/dist/evaluator/string/StringSimilarityScoreEvaluator.d.ts +6 -0
- package/dist/evaluator/string/StringSimilarityScoreEvaluator.d.ts.map +1 -0
- package/dist/evaluator/string/StringSimilarityScoreEvaluator.js +13 -0
- package/dist/evaluator/string/StringSimilarityScoreEvaluator.js.map +1 -0
- package/dist/evaluator/string/TokenSetRatioEvaluator.d.ts +6 -0
- package/dist/evaluator/string/TokenSetRatioEvaluator.d.ts.map +1 -0
- package/dist/evaluator/string/TokenSetRatioEvaluator.js +15 -0
- package/dist/evaluator/string/TokenSetRatioEvaluator.js.map +1 -0
- package/dist/evaluator/string/TokenSortRatioEvaluator.d.ts +6 -0
- package/dist/evaluator/string/TokenSortRatioEvaluator.d.ts.map +1 -0
- package/dist/evaluator/string/TokenSortRatioEvaluator.js +15 -0
- package/dist/evaluator/string/TokenSortRatioEvaluator.js.map +1 -0
- package/dist/evaluator/string/levenshtein.d.ts +7 -0
- package/dist/evaluator/string/levenshtein.d.ts.map +1 -0
- package/dist/evaluator/string/levenshtein.js +81 -0
- package/dist/evaluator/string/levenshtein.js.map +1 -0
- package/dist/generated/RuleFlowLanguageLexer.d.ts +4 -0
- package/dist/generated/RuleFlowLanguageLexer.d.ts.map +1 -0
- package/dist/generated/RuleFlowLanguageLexer.js +9 -0
- package/dist/generated/RuleFlowLanguageLexer.js.map +1 -0
- package/dist/generated/RuleFlowLanguageParser.d.ts +8 -0
- package/dist/generated/RuleFlowLanguageParser.d.ts.map +1 -0
- package/dist/generated/RuleFlowLanguageParser.js +13 -0
- package/dist/generated/RuleFlowLanguageParser.js.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageLexer.d.ts +106 -0
- package/dist/generated/src/grammar/RuleFlowLanguageLexer.d.ts.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageLexer.js +1128 -0
- package/dist/generated/src/grammar/RuleFlowLanguageLexer.js.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageListener.d.ts +752 -0
- package/dist/generated/src/grammar/RuleFlowLanguageListener.d.ts.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageListener.js +4 -0
- package/dist/generated/src/grammar/RuleFlowLanguageListener.js.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageParser.d.ts +936 -0
- package/dist/generated/src/grammar/RuleFlowLanguageParser.d.ts.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageParser.js +6080 -0
- package/dist/generated/src/grammar/RuleFlowLanguageParser.js.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageVisitor.d.ts +476 -0
- package/dist/generated/src/grammar/RuleFlowLanguageVisitor.d.ts.map +1 -0
- package/dist/generated/src/grammar/RuleFlowLanguageVisitor.js +4 -0
- package/dist/generated/src/grammar/RuleFlowLanguageVisitor.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/listeners/ErrorListener.d.ts +5 -0
- package/dist/listeners/ErrorListener.d.ts.map +1 -0
- package/dist/listeners/ErrorListener.js +10 -0
- package/dist/listeners/ErrorListener.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/visitors/ActionsVisitor.d.ts +12 -0
- package/dist/visitors/ActionsVisitor.d.ts.map +1 -0
- package/dist/visitors/ActionsVisitor.js +82 -0
- package/dist/visitors/ActionsVisitor.js.map +1 -0
- package/dist/visitors/RulesetVisitor.d.ts +18 -0
- package/dist/visitors/RulesetVisitor.d.ts.map +1 -0
- package/dist/visitors/RulesetVisitor.js +190 -0
- package/dist/visitors/RulesetVisitor.js.map +1 -0
- package/dist/visitors/Visitor.d.ts +13 -0
- package/dist/visitors/Visitor.d.ts.map +1 -0
- package/dist/visitors/Visitor.js +169 -0
- package/dist/visitors/Visitor.js.map +1 -0
- package/dist/workflow.d.ts +9 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +56 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActionsVisitorTs = void 0;
|
|
4
|
+
function stripQuotes(s) {
|
|
5
|
+
if (!s)
|
|
6
|
+
return s;
|
|
7
|
+
if ((s.startsWith("'") && s.endsWith("'")) || (s.startsWith('"') && s.endsWith('"'))) {
|
|
8
|
+
return s.substring(1, s.length - 1);
|
|
9
|
+
}
|
|
10
|
+
return s;
|
|
11
|
+
}
|
|
12
|
+
class ActionsVisitorTs {
|
|
13
|
+
constructor(evalVisitor) {
|
|
14
|
+
Object.defineProperty(this, "evalVisitor", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: evalVisitor
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
visit(ctx) {
|
|
22
|
+
if (!ctx)
|
|
23
|
+
return [];
|
|
24
|
+
const actions = ctx.action();
|
|
25
|
+
const result = [];
|
|
26
|
+
for (const a of actions) {
|
|
27
|
+
const name = this.resolveActionName(a);
|
|
28
|
+
const params = this.resolveParams(a);
|
|
29
|
+
result.push({ name, params });
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
resolveActionName(action) {
|
|
34
|
+
// Form 1: action('name', {...})
|
|
35
|
+
const kAction = action.K_ACTION?.();
|
|
36
|
+
if (kAction) {
|
|
37
|
+
const paramValue = action._param_value || action.param_value;
|
|
38
|
+
return stripQuotes(paramValue?.text || '');
|
|
39
|
+
}
|
|
40
|
+
// Form 2: action_id(...)
|
|
41
|
+
const actionId = action._action_id || action.action_id;
|
|
42
|
+
if (actionId && actionId.text) {
|
|
43
|
+
return stripQuotes(actionId.text);
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`Cannot find action name or identifier in ${action.text}`);
|
|
46
|
+
}
|
|
47
|
+
resolveParams(action) {
|
|
48
|
+
const paramsCtx = action.action_params?.();
|
|
49
|
+
if (!paramsCtx)
|
|
50
|
+
return {};
|
|
51
|
+
const pairsCtx = paramsCtx.param_pairs();
|
|
52
|
+
const pairList = pairsCtx.param_pair();
|
|
53
|
+
const out = {};
|
|
54
|
+
for (const p of pairList) {
|
|
55
|
+
const key = stripQuotes(p._field_name?.text || '');
|
|
56
|
+
const value = this.evalActionParamValue(p._field_value);
|
|
57
|
+
out[key] = value;
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
evalActionParamValue(fieldValue) {
|
|
62
|
+
if (!fieldValue)
|
|
63
|
+
return '';
|
|
64
|
+
const vv = fieldValue.validValue?.();
|
|
65
|
+
if (vv) {
|
|
66
|
+
return stripQuotes(vv.text || '');
|
|
67
|
+
}
|
|
68
|
+
const vp = fieldValue.validProperty?.();
|
|
69
|
+
if (vp) {
|
|
70
|
+
try {
|
|
71
|
+
const resolved = this.evalVisitor.visit(vp);
|
|
72
|
+
return resolved != null ? String(resolved) : 'null';
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
throw new Error(`Failed to resolve property '${vp.text}' in action parameter: ${e?.message || e}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
throw new Error(`Unsupported action parameter value type: ${fieldValue.text}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.ActionsVisitorTs = ActionsVisitorTs;
|
|
82
|
+
//# sourceMappingURL=ActionsVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionsVisitor.js","sourceRoot":"","sources":["../../src/visitors/ActionsVisitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ParseContext } from '../generated/src/grammar/RuleFlowLanguageParser';
|
|
2
|
+
import type { InputMap, ListsMap, WorkflowResult } from '../types';
|
|
3
|
+
export declare class RulesetVisitor {
|
|
4
|
+
private readonly data;
|
|
5
|
+
private readonly lists;
|
|
6
|
+
private readonly eval;
|
|
7
|
+
constructor(data: InputMap, lists?: ListsMap);
|
|
8
|
+
visit(root: ParseContext): WorkflowResult;
|
|
9
|
+
private visitWorkflow;
|
|
10
|
+
private resolveRuleResult;
|
|
11
|
+
private resolveReturn;
|
|
12
|
+
private getName;
|
|
13
|
+
private stripQuotes;
|
|
14
|
+
private formatWarning;
|
|
15
|
+
private collectActions;
|
|
16
|
+
private collectDefaultActions;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=RulesetVisitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RulesetVisitor.d.ts","sourceRoot":"","sources":["../../src/visitors/RulesetVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAInE,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAY,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFnE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;gBAEF,IAAI,EAAE,QAAQ,EAAmB,KAAK,GAAE,QAAa;IAIlF,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc;IAMzC,OAAO,CAAC,aAAa;IAmGrB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,qBAAqB;CAS9B"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RulesetVisitor = void 0;
|
|
4
|
+
const Visitor_1 = require("./Visitor");
|
|
5
|
+
const ActionsVisitor_1 = require("./ActionsVisitor");
|
|
6
|
+
class RulesetVisitor {
|
|
7
|
+
constructor(data, lists = {}) {
|
|
8
|
+
Object.defineProperty(this, "data", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: data
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(this, "lists", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: lists
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(this, "eval", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: void 0
|
|
25
|
+
});
|
|
26
|
+
this.eval = new Visitor_1.Visitor(data, lists, data);
|
|
27
|
+
}
|
|
28
|
+
visit(root) {
|
|
29
|
+
const wf = root.workflow();
|
|
30
|
+
if (!wf)
|
|
31
|
+
throw new Error('No workflow found');
|
|
32
|
+
return this.visitWorkflow(wf);
|
|
33
|
+
}
|
|
34
|
+
visitWorkflow(ctx) {
|
|
35
|
+
const workflowName = this.stripQuotes(ctx.workflow_name().text || '');
|
|
36
|
+
const warnings = [];
|
|
37
|
+
const evalMode = ctx.configuration?.()?.evaluation_mode?.();
|
|
38
|
+
const multiMatch = !!(evalMode && evalMode.K_MULTI_MATCH?.());
|
|
39
|
+
const matchedRules = [];
|
|
40
|
+
for (const ruleset of ctx.rulesets()) {
|
|
41
|
+
if (ruleset.ruleset_condition()) {
|
|
42
|
+
const condExpr = ruleset.ruleset_condition().expr(0);
|
|
43
|
+
try {
|
|
44
|
+
const cond = this.eval.visit(condExpr);
|
|
45
|
+
if (!cond)
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
warnings.push(this.formatWarning('Ruleset condition', e));
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
for (const rule of ruleset.rules()) {
|
|
54
|
+
const ruleBody = rule.rule_body();
|
|
55
|
+
const predicate = ruleBody.expr();
|
|
56
|
+
let passed = false;
|
|
57
|
+
try {
|
|
58
|
+
passed = Boolean(this.eval.visit(predicate));
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
warnings.push(this.formatWarning(`Rule predicate ${this.getName(rule.name())}`, e));
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (passed) {
|
|
65
|
+
try {
|
|
66
|
+
const result = this.resolveRuleResult(ruleBody);
|
|
67
|
+
const actions = this.collectActions(ruleBody, warnings);
|
|
68
|
+
if (multiMatch) {
|
|
69
|
+
matchedRules.push({
|
|
70
|
+
ruleSet: this.getName(ruleset.name()),
|
|
71
|
+
rule: this.getName(rule.name()),
|
|
72
|
+
result,
|
|
73
|
+
actions,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return {
|
|
78
|
+
workflow: workflowName,
|
|
79
|
+
ruleSet: this.getName(ruleset.name()),
|
|
80
|
+
rule: this.getName(rule.name()),
|
|
81
|
+
result,
|
|
82
|
+
warnings,
|
|
83
|
+
actions,
|
|
84
|
+
error: false,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
warnings.push(this.formatWarning(`Rule return ${this.getName(rule.name())}`, e));
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (multiMatch && matchedRules.length > 0) {
|
|
96
|
+
const first = matchedRules[0];
|
|
97
|
+
return {
|
|
98
|
+
workflow: workflowName,
|
|
99
|
+
ruleSet: first.ruleSet,
|
|
100
|
+
rule: first.rule,
|
|
101
|
+
result: first.result,
|
|
102
|
+
actions: first.actions,
|
|
103
|
+
matchedRules,
|
|
104
|
+
warnings,
|
|
105
|
+
error: false,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const def = ctx.default_clause();
|
|
109
|
+
let result = 'allow';
|
|
110
|
+
try {
|
|
111
|
+
result = this.resolveReturn(def.return_result());
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
warnings.push(this.formatWarning('Default return', e));
|
|
115
|
+
}
|
|
116
|
+
const defActions = this.collectDefaultActions(def, warnings);
|
|
117
|
+
return {
|
|
118
|
+
workflow: workflowName,
|
|
119
|
+
ruleSet: 'default',
|
|
120
|
+
rule: 'default',
|
|
121
|
+
result,
|
|
122
|
+
warnings,
|
|
123
|
+
actions: defActions,
|
|
124
|
+
matchedRules: multiMatch ? [] : undefined,
|
|
125
|
+
error: false,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
resolveRuleResult(ruleBody) {
|
|
129
|
+
const ret = ruleBody.return_result?.();
|
|
130
|
+
if (ret)
|
|
131
|
+
return this.resolveReturn(ret);
|
|
132
|
+
return 'allow';
|
|
133
|
+
}
|
|
134
|
+
resolveReturn(ret) {
|
|
135
|
+
const st = ret.state_rule?.();
|
|
136
|
+
if (st)
|
|
137
|
+
return (st.text || '').trim();
|
|
138
|
+
const prop = ret.validProperty?.();
|
|
139
|
+
if (prop)
|
|
140
|
+
return String(this.eval.visit(prop));
|
|
141
|
+
const val = ret.validValue?.();
|
|
142
|
+
if (val)
|
|
143
|
+
return this.stripQuotes(val.text || '');
|
|
144
|
+
const expr0 = ret.expr?.(0);
|
|
145
|
+
if (expr0)
|
|
146
|
+
return String(this.eval.visit(expr0));
|
|
147
|
+
throw new Error('No return result found');
|
|
148
|
+
}
|
|
149
|
+
getName(nameCtx) {
|
|
150
|
+
return this.stripQuotes(nameCtx.text || '');
|
|
151
|
+
}
|
|
152
|
+
stripQuotes(s) {
|
|
153
|
+
if ((s.startsWith("'") && s.endsWith("'")) || (s.startsWith('"') && s.endsWith('"'))) {
|
|
154
|
+
return s.substring(1, s.length - 1);
|
|
155
|
+
}
|
|
156
|
+
return s;
|
|
157
|
+
}
|
|
158
|
+
formatWarning(where, e) {
|
|
159
|
+
if (e && typeof e === 'object') {
|
|
160
|
+
if (e.name === 'PropertyNotFoundError') {
|
|
161
|
+
return `${where}: ${e.message}`;
|
|
162
|
+
}
|
|
163
|
+
if (e.message)
|
|
164
|
+
return `${where}: ${e.message}`;
|
|
165
|
+
}
|
|
166
|
+
return `${where}: ${String(e)}`;
|
|
167
|
+
}
|
|
168
|
+
collectActions(ruleBody, warnings) {
|
|
169
|
+
try {
|
|
170
|
+
const actionsCtx = ruleBody.actions?.();
|
|
171
|
+
return new ActionsVisitor_1.ActionsVisitorTs(this.eval).visit(actionsCtx);
|
|
172
|
+
}
|
|
173
|
+
catch (e) {
|
|
174
|
+
warnings.push(this.formatWarning('Actions', e));
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
collectDefaultActions(def, warnings) {
|
|
179
|
+
try {
|
|
180
|
+
const actionsCtx = def.actions?.();
|
|
181
|
+
return new ActionsVisitor_1.ActionsVisitorTs(this.eval).visit(actionsCtx);
|
|
182
|
+
}
|
|
183
|
+
catch (e) {
|
|
184
|
+
warnings.push(this.formatWarning('Default actions', e));
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.RulesetVisitor = RulesetVisitor;
|
|
190
|
+
//# sourceMappingURL=RulesetVisitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RulesetVisitor.js","sourceRoot":"","sources":["../../src/visitors/RulesetVisitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type DataMap = Record<string, unknown>;
|
|
2
|
+
export type ListsMap = Record<string, unknown[]>;
|
|
3
|
+
export declare class Visitor {
|
|
4
|
+
private readonly data;
|
|
5
|
+
private readonly lists;
|
|
6
|
+
private readonly root;
|
|
7
|
+
constructor(data: DataMap, lists?: ListsMap, root?: DataMap);
|
|
8
|
+
visit(tree: any): any;
|
|
9
|
+
getData(): DataMap;
|
|
10
|
+
getLists(): ListsMap;
|
|
11
|
+
getRoot(): DataMap;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Visitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Visitor.d.ts","sourceRoot":"","sources":["../../src/visitors/Visitor.ts"],"names":[],"mappings":"AAmEA,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAEjD,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,IAAI,EAAE,OAAO,EACb,KAAK,GAAE,QAAa,EACpB,IAAI,GAAE,OAAc;IAGvC,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;IAyErB,OAAO;IAIP,QAAQ;IAIR,OAAO;CAGR"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Visitor = void 0;
|
|
4
|
+
const RuleFlowLanguageParser_1 = require("../generated/src/grammar/RuleFlowLanguageParser");
|
|
5
|
+
const ComparatorEvaluator_1 = require("../evaluator/ComparatorEvaluator");
|
|
6
|
+
const MathMulEvaluator_1 = require("../evaluator/MathMulEvaluator");
|
|
7
|
+
const MathAddEvaluator_1 = require("../evaluator/MathAddEvaluator");
|
|
8
|
+
const ParenthesisEvaluator_1 = require("../evaluator/ParenthesisEvaluator");
|
|
9
|
+
const ValueEvaluator_1 = require("../evaluator/ValueEvaluator");
|
|
10
|
+
const ValidPropertyEvaluator_1 = require("../evaluator/ValidPropertyEvaluator");
|
|
11
|
+
const ListEvaluator_1 = require("../evaluator/ListEvaluator");
|
|
12
|
+
const TupleListEvaluator_1 = require("../evaluator/TupleListEvaluator");
|
|
13
|
+
const BinaryAndEvaluator_1 = require("../evaluator/BinaryAndEvaluator");
|
|
14
|
+
const BinaryOrEvaluator_1 = require("../evaluator/BinaryOrEvaluator");
|
|
15
|
+
const UnaryEvaluator_1 = require("../evaluator/UnaryEvaluator");
|
|
16
|
+
const RegexlikeEvaluator_1 = require("../evaluator/RegexlikeEvaluator");
|
|
17
|
+
const DateDiffEvaluator_1 = require("../evaluator/date/DateDiffEvaluator");
|
|
18
|
+
const DayOfWeekEvaluator_1 = require("../evaluator/date/DayOfWeekEvaluator");
|
|
19
|
+
const NowEvaluator_1 = require("../evaluator/date/NowEvaluator");
|
|
20
|
+
const DateAddEvaluator_1 = require("../evaluator/date/DateAddEvaluator");
|
|
21
|
+
const DateSubtractEvaluator_1 = require("../evaluator/date/DateSubtractEvaluator");
|
|
22
|
+
const DateOperationEvaluator_1 = require("../evaluator/date/DateOperationEvaluator");
|
|
23
|
+
const DateParseExprEvaluator_1 = require("../evaluator/date/DateParseExprEvaluator");
|
|
24
|
+
const GeoOperationEvaluator_1 = require("../evaluator/geo/GeoOperationEvaluator");
|
|
25
|
+
const GeohashEncodeEvaluator_1 = require("../evaluator/geo/GeohashEncodeEvaluator");
|
|
26
|
+
const GeohashDecodeEvaluator_1 = require("../evaluator/geo/GeohashDecodeEvaluator");
|
|
27
|
+
const AggregationEvaluator_1 = require("../evaluator/AggregationEvaluator");
|
|
28
|
+
const DistanceGeohashEvaluator_1 = require("../evaluator/geo/DistanceGeohashEvaluator");
|
|
29
|
+
const WithinRadiusEvaluator_1 = require("../evaluator/geo/WithinRadiusEvaluator");
|
|
30
|
+
const DistanceEvaluator_1 = require("../evaluator/geo/DistanceEvaluator");
|
|
31
|
+
const StringDistanceEvaluator_1 = require("../evaluator/string/StringDistanceEvaluator");
|
|
32
|
+
const PartialRatioEvaluator_1 = require("../evaluator/string/PartialRatioEvaluator");
|
|
33
|
+
const TokenSortRatioEvaluator_1 = require("../evaluator/string/TokenSortRatioEvaluator");
|
|
34
|
+
const TokenSetRatioEvaluator_1 = require("../evaluator/string/TokenSetRatioEvaluator");
|
|
35
|
+
const StringSimilarityScoreEvaluator_1 = require("../evaluator/string/StringSimilarityScoreEvaluator");
|
|
36
|
+
class Visitor {
|
|
37
|
+
constructor(data, lists = {}, root = data) {
|
|
38
|
+
Object.defineProperty(this, "data", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
configurable: true,
|
|
41
|
+
writable: true,
|
|
42
|
+
value: data
|
|
43
|
+
});
|
|
44
|
+
Object.defineProperty(this, "lists", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true,
|
|
48
|
+
value: lists
|
|
49
|
+
});
|
|
50
|
+
Object.defineProperty(this, "root", {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: true,
|
|
53
|
+
writable: true,
|
|
54
|
+
value: root
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
visit(tree) {
|
|
58
|
+
const ctx = tree;
|
|
59
|
+
if (ctx instanceof RuleFlowLanguageParser_1.ComparatorContext) {
|
|
60
|
+
return new ComparatorEvaluator_1.ComparatorEvaluator().evaluate(ctx, this);
|
|
61
|
+
}
|
|
62
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.MathMulContext) {
|
|
63
|
+
return new MathMulEvaluator_1.MathMulEvaluator().evaluate(ctx, this);
|
|
64
|
+
}
|
|
65
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.MathAddContext) {
|
|
66
|
+
return new MathAddEvaluator_1.MathAddEvaluator().evaluate(ctx, this);
|
|
67
|
+
}
|
|
68
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.ParenthesisContext) {
|
|
69
|
+
return new ParenthesisEvaluator_1.ParenthesisEvaluator().evaluate(ctx, this);
|
|
70
|
+
}
|
|
71
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.ValueContext) {
|
|
72
|
+
return new ValueEvaluator_1.ValueEvaluator().evaluate(ctx, this);
|
|
73
|
+
}
|
|
74
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.PropertyContext) {
|
|
75
|
+
// delegate to validProperty
|
|
76
|
+
return new ValidPropertyEvaluator_1.ValidPropertyEvaluator().evaluate(ctx.validProperty(), this);
|
|
77
|
+
}
|
|
78
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.ValidPropertyContext) {
|
|
79
|
+
return new ValidPropertyEvaluator_1.ValidPropertyEvaluator().evaluate(ctx, this);
|
|
80
|
+
}
|
|
81
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.ListContext) {
|
|
82
|
+
return new ListEvaluator_1.ListEvaluator().evaluate(ctx, this);
|
|
83
|
+
}
|
|
84
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.TupleListContext) {
|
|
85
|
+
return new TupleListEvaluator_1.TupleListEvaluator().evaluate(ctx, this);
|
|
86
|
+
}
|
|
87
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.BinaryAndContext) {
|
|
88
|
+
return new BinaryAndEvaluator_1.BinaryAndEvaluator().evaluate(ctx, this);
|
|
89
|
+
}
|
|
90
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.BinaryOrContext) {
|
|
91
|
+
return new BinaryOrEvaluator_1.BinaryOrEvaluator().evaluate(ctx, this);
|
|
92
|
+
}
|
|
93
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.UnaryContext) {
|
|
94
|
+
return new UnaryEvaluator_1.UnaryEvaluator().evaluate(ctx, this);
|
|
95
|
+
}
|
|
96
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.RegexlikeContext) {
|
|
97
|
+
return new RegexlikeEvaluator_1.RegexlikeEvaluator().evaluate(ctx, this);
|
|
98
|
+
}
|
|
99
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DateOperationContext) {
|
|
100
|
+
return new DateOperationEvaluator_1.DateOperationEvaluator().evaluate(ctx, this);
|
|
101
|
+
}
|
|
102
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DateDiffContext) {
|
|
103
|
+
return new DateDiffEvaluator_1.DateDiffEvaluator().evaluate(ctx, this);
|
|
104
|
+
}
|
|
105
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DayOfWeekContext) {
|
|
106
|
+
return new DayOfWeekEvaluator_1.DayOfWeekEvaluator().evaluate(ctx, this);
|
|
107
|
+
}
|
|
108
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.NowContext) {
|
|
109
|
+
return new NowEvaluator_1.NowEvaluator().evaluate(ctx, this);
|
|
110
|
+
}
|
|
111
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DateAddContext) {
|
|
112
|
+
return new DateAddEvaluator_1.DateAddEvaluator().evaluate(ctx, this);
|
|
113
|
+
}
|
|
114
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DateSubtractContext) {
|
|
115
|
+
return new DateSubtractEvaluator_1.DateSubtractEvaluator().evaluate(ctx, this);
|
|
116
|
+
}
|
|
117
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DateParseExprContext) {
|
|
118
|
+
return new DateParseExprEvaluator_1.DateParseExprEvaluator().evaluate(ctx, this);
|
|
119
|
+
}
|
|
120
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.AggregationContext) {
|
|
121
|
+
return new AggregationEvaluator_1.AggregationEvaluator().evaluate(ctx, this);
|
|
122
|
+
}
|
|
123
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.GeoOperationContext) {
|
|
124
|
+
return new GeoOperationEvaluator_1.GeoOperationEvaluator().evaluate(ctx, this);
|
|
125
|
+
}
|
|
126
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.GeohashEncodeContext) {
|
|
127
|
+
return new GeohashEncodeEvaluator_1.GeohashEncodeEvaluator().evaluate(ctx, this);
|
|
128
|
+
}
|
|
129
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.GeohashDecodeContext) {
|
|
130
|
+
return new GeohashDecodeEvaluator_1.GeohashDecodeEvaluator().evaluate(ctx, this);
|
|
131
|
+
}
|
|
132
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DistanceContext) {
|
|
133
|
+
return new DistanceEvaluator_1.DistanceEvaluator().evaluate(ctx, this);
|
|
134
|
+
}
|
|
135
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.DistanceGeohashContext) {
|
|
136
|
+
return new DistanceGeohashEvaluator_1.DistanceGeohashEvaluator().evaluate(ctx, this);
|
|
137
|
+
}
|
|
138
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.WithinRadiusContext) {
|
|
139
|
+
return new WithinRadiusEvaluator_1.WithinRadiusEvaluator().evaluate(ctx, this);
|
|
140
|
+
}
|
|
141
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.StringDistanceContext) {
|
|
142
|
+
return new StringDistanceEvaluator_1.StringDistanceEvaluator().evaluate(ctx, this);
|
|
143
|
+
}
|
|
144
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.PartialRatioContext) {
|
|
145
|
+
return new PartialRatioEvaluator_1.PartialRatioEvaluator().evaluate(ctx, this);
|
|
146
|
+
}
|
|
147
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.TokenSortRatioContext) {
|
|
148
|
+
return new TokenSortRatioEvaluator_1.TokenSortRatioEvaluator().evaluate(ctx, this);
|
|
149
|
+
}
|
|
150
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.TokenSetRatioContext) {
|
|
151
|
+
return new TokenSetRatioEvaluator_1.TokenSetRatioEvaluator().evaluate(ctx, this);
|
|
152
|
+
}
|
|
153
|
+
else if (ctx instanceof RuleFlowLanguageParser_1.StringSimilarityScoreContext) {
|
|
154
|
+
return new StringSimilarityScoreEvaluator_1.StringSimilarityScoreEvaluator().evaluate(ctx, this);
|
|
155
|
+
}
|
|
156
|
+
throw new Error(`Operation not supported: ${ctx?.constructor?.name ?? typeof ctx}`);
|
|
157
|
+
}
|
|
158
|
+
getData() {
|
|
159
|
+
return this.data;
|
|
160
|
+
}
|
|
161
|
+
getLists() {
|
|
162
|
+
return this.lists;
|
|
163
|
+
}
|
|
164
|
+
getRoot() {
|
|
165
|
+
return this.root;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.Visitor = Visitor;
|
|
169
|
+
//# sourceMappingURL=Visitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Visitor.js","sourceRoot":"","sources":["../../src/visitors/Visitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InputMap, ListsMap, WorkflowResult } from './types';
|
|
2
|
+
export declare class Workflow {
|
|
3
|
+
private tree;
|
|
4
|
+
constructor(workflow: string);
|
|
5
|
+
evaluate(request: InputMap, lists?: ListsMap): WorkflowResult;
|
|
6
|
+
validateAndGetWorkflowName(): string;
|
|
7
|
+
private stripQuotes;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIlE,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAM;gBAEN,QAAQ,EAAE,MAAM;IAqB5B,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAE,QAAa,GAAG,cAAc;IAKjE,0BAA0B,IAAI,MAAM;IAOpC,OAAO,CAAC,WAAW;CAMpB"}
|
package/dist/workflow.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Workflow = void 0;
|
|
4
|
+
const antlr4ts_1 = require("antlr4ts");
|
|
5
|
+
const RuleFlowLanguageLexer_1 = require("./generated/src/grammar/RuleFlowLanguageLexer");
|
|
6
|
+
const RuleFlowLanguageParser_1 = require("./generated/src/grammar/RuleFlowLanguageParser");
|
|
7
|
+
const BailErrorStrategy_1 = require("antlr4ts/BailErrorStrategy");
|
|
8
|
+
const PredictionMode_1 = require("antlr4ts/atn/PredictionMode");
|
|
9
|
+
const ErrorListener_1 = require("./listeners/ErrorListener");
|
|
10
|
+
const RulesetVisitor_1 = require("./visitors/RulesetVisitor");
|
|
11
|
+
class Workflow {
|
|
12
|
+
constructor(workflow) {
|
|
13
|
+
Object.defineProperty(this, "tree", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: void 0
|
|
18
|
+
});
|
|
19
|
+
const input = antlr4ts_1.CharStreams.fromString(workflow);
|
|
20
|
+
const lexer = new RuleFlowLanguageLexer_1.RuleFlowLanguageLexer(input);
|
|
21
|
+
const tokens = new antlr4ts_1.CommonTokenStream(lexer);
|
|
22
|
+
const parser = new RuleFlowLanguageParser_1.RuleFlowLanguageParser(tokens);
|
|
23
|
+
if (typeof parser.removeErrorListeners === 'function') {
|
|
24
|
+
parser.removeErrorListeners();
|
|
25
|
+
}
|
|
26
|
+
if (typeof parser.addErrorListener === 'function') {
|
|
27
|
+
parser.addErrorListener(new ErrorListener_1.ErrorListener());
|
|
28
|
+
}
|
|
29
|
+
// Avoid inline recovery bugs in antlr4ts by bailing on first syntax error
|
|
30
|
+
parser._errHandler = new BailErrorStrategy_1.BailErrorStrategy();
|
|
31
|
+
// Use LL prediction for stability on left-recursive expr rules
|
|
32
|
+
if (parser.interpreter) {
|
|
33
|
+
parser.interpreter.predictionMode = PredictionMode_1.PredictionMode.LL;
|
|
34
|
+
}
|
|
35
|
+
parser.buildParseTree = true;
|
|
36
|
+
this.tree = typeof parser.parse === 'function' ? parser.parse() : {};
|
|
37
|
+
}
|
|
38
|
+
evaluate(request, lists = {}) {
|
|
39
|
+
const rs = new RulesetVisitor_1.RulesetVisitor(request, lists);
|
|
40
|
+
return rs.visit(this.tree);
|
|
41
|
+
}
|
|
42
|
+
validateAndGetWorkflowName() {
|
|
43
|
+
const root = this.tree;
|
|
44
|
+
const wf = root.workflow?.();
|
|
45
|
+
const raw = wf?.workflow_name()?.text ?? '';
|
|
46
|
+
return this.stripQuotes(raw);
|
|
47
|
+
}
|
|
48
|
+
stripQuotes(s) {
|
|
49
|
+
if ((s.startsWith("'") && s.endsWith("'")) || (s.startsWith('"') && s.endsWith('"'))) {
|
|
50
|
+
return s.substring(1, s.length - 1);
|
|
51
|
+
}
|
|
52
|
+
return s;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.Workflow = Workflow;
|
|
56
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":";;;AAAA,uCAA0D;AAC1D,yFAAsF;AACtF,2FAAwF;AACxF,kEAA+D;AAC/D,gEAA6D;AAC7D,6DAA0D;AAE1D,8DAA2D;AAG3D,MAAa,QAAQ;IAGnB,YAAY,QAAgB;QAFpB;;;;;WAAU;QAGhB,MAAM,KAAK,GAAG,sBAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,6CAAqB,CAAC,KAAY,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,4BAAiB,CAAC,KAAY,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,+CAAsB,CAAC,MAAa,CAAC,CAAC;QACzD,IAAI,OAAQ,MAAc,CAAC,oBAAoB,KAAK,UAAU,EAAE,CAAC;YAC9D,MAAc,CAAC,oBAAoB,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,OAAQ,MAAc,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YAC1D,MAAc,CAAC,gBAAgB,CAAC,IAAI,6BAAa,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,0EAA0E;QACzE,MAAc,CAAC,WAAW,GAAG,IAAI,qCAAiB,EAAE,CAAC;QACtD,+DAA+D;QAC/D,IAAK,MAAc,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAc,CAAC,WAAW,CAAC,cAAc,GAAG,+BAAc,CAAC,EAAE,CAAC;QACjE,CAAC;QACA,MAAc,CAAC,cAAc,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,OAAQ,MAAc,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,MAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,CAAC;IAED,QAAQ,CAAC,OAAiB,EAAE,QAAkB,EAAE;QAC9C,MAAM,EAAE,GAAG,IAAI,+BAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAoB,CAAC,CAAC;IAC7C,CAAC;IAED,0BAA0B;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAoB,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,WAAW,CAAC,CAAS;QAC3B,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrF,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AA1CD,4BA0CC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ruleflow-ts/dsl-core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Ruleflow DSL interpreter in TypeScript (isomorphic, SSR+Edge compatible).",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"require": "./dist/index.js",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"author": "Rodolfo Rivas",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/gatekeeperx/ruleflow-ts.git",
|
|
30
|
+
"directory": "packages/dsl-core"
|
|
31
|
+
},
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/gatekeeperx/ruleflow-ts/issues"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/gatekeeperx/ruleflow-ts/tree/master/packages/dsl-core#readme",
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"generate": "antlr4ts -visitor -long-messages -o src/generated src/grammar/RuleFlowLanguage.g4",
|
|
41
|
+
"build": "tsc -p tsconfig.json",
|
|
42
|
+
"watch": "tsc -p tsconfig.json -w",
|
|
43
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
44
|
+
"clean": "rimraf dist src/generated",
|
|
45
|
+
"prepack": "npm run build",
|
|
46
|
+
"smoke": "node scripts/smoke.js",
|
|
47
|
+
"pack:dry": "npm pack --dry-run",
|
|
48
|
+
"prepublishOnly": "npm run typecheck && npm run build",
|
|
49
|
+
"release:patch": "npm version patch && npm publish --access public",
|
|
50
|
+
"release:minor": "npm version minor && npm publish --access public",
|
|
51
|
+
"release:major": "npm version major && npm publish --access public"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"antlr4ts": "^0.5.0-alpha.4"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"antlr4ts-cli": "^0.5.0-alpha.4",
|
|
58
|
+
"rimraf": "^5.0.0",
|
|
59
|
+
"typescript": "^5.6.2"
|
|
60
|
+
},
|
|
61
|
+
"keywords": [
|
|
62
|
+
"dsl",
|
|
63
|
+
"antlr",
|
|
64
|
+
"parser",
|
|
65
|
+
"interpreter",
|
|
66
|
+
"isomorphic"
|
|
67
|
+
],
|
|
68
|
+
"license": "MIT"
|
|
69
|
+
}
|