@ruleflow-ts/dsl-core 0.1.0 → 0.2.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/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { Workflow } from './workflow';
2
2
  export type { InputMap, ListsMap, WorkflowResult } from './types';
3
3
  export { lex as debugLex, parse as debugParse } from './debug';
4
+ export { AstSerializer } from './visitors/AstSerializer';
5
+ export type { AstWorkflow, AstRuleset, AstRule, AstAction, AstActionParam, AstReturn, } from './visitors/AstSerializer';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,SAAS,GACV,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.debugParse = exports.debugLex = exports.Workflow = void 0;
3
+ exports.AstSerializer = exports.debugParse = exports.debugLex = exports.Workflow = void 0;
4
4
  var workflow_1 = require("./workflow");
5
5
  Object.defineProperty(exports, "Workflow", { enumerable: true, get: function () { return workflow_1.Workflow; } });
6
6
  var debug_1 = require("./debug");
7
7
  Object.defineProperty(exports, "debugLex", { enumerable: true, get: function () { return debug_1.lex; } });
8
8
  Object.defineProperty(exports, "debugParse", { enumerable: true, get: function () { return debug_1.parse; } });
9
+ var AstSerializer_1 = require("./visitors/AstSerializer");
10
+ Object.defineProperty(exports, "AstSerializer", { enumerable: true, get: function () { return AstSerializer_1.AstSerializer; } });
9
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,iCAA+D;AAAtD,iGAAA,GAAG,OAAY;AAAE,mGAAA,KAAK,OAAc"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,iCAA+D;AAAtD,iGAAA,GAAG,OAAY;AAAE,mGAAA,KAAK,OAAc;AAC7C,0DAAyD;AAAhD,8GAAA,aAAa,OAAA"}
@@ -0,0 +1,70 @@
1
+ import type { ParseContext } from '../generated/src/grammar/RuleFlowLanguageParser';
2
+ export interface AstWorkflow {
3
+ type: 'Workflow';
4
+ name: string;
5
+ evaluationMode: 'multi_match' | 'single_match';
6
+ rulesets: AstRuleset[];
7
+ default: {
8
+ result: AstReturn;
9
+ actions: AstAction[];
10
+ };
11
+ }
12
+ export interface AstRuleset {
13
+ type: 'Ruleset';
14
+ name: string;
15
+ condition?: {
16
+ kind: 'expr';
17
+ text: string;
18
+ };
19
+ rules: AstRule[];
20
+ }
21
+ export interface AstRule {
22
+ type: 'Rule';
23
+ name: string;
24
+ predicate: {
25
+ kind: 'expr';
26
+ text: string;
27
+ };
28
+ result: AstReturn;
29
+ actions: AstAction[];
30
+ }
31
+ export interface AstAction {
32
+ type: 'Action';
33
+ name: string;
34
+ params: Record<string, AstActionParam>;
35
+ }
36
+ export type AstActionParam = {
37
+ kind: 'value';
38
+ value: string | number | boolean | null | {
39
+ currentDate: true;
40
+ };
41
+ } | {
42
+ kind: 'property';
43
+ path: string[];
44
+ };
45
+ export type AstReturn = {
46
+ kind: 'state';
47
+ value: string;
48
+ } | {
49
+ kind: 'value';
50
+ value: string | number | boolean | null | {
51
+ currentDate: true;
52
+ };
53
+ } | {
54
+ kind: 'property';
55
+ path: string[];
56
+ } | {
57
+ kind: 'expr';
58
+ text: string;
59
+ };
60
+ export declare class AstSerializer {
61
+ serialize(root: ParseContext): AstWorkflow;
62
+ private serializeRuleset;
63
+ private serializeRule;
64
+ private serializeReturn;
65
+ private serializeActions;
66
+ private resolveActionName;
67
+ private resolveParams;
68
+ private evalActionParamValue;
69
+ }
70
+ //# sourceMappingURL=AstSerializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AstSerializer.d.ts","sourceRoot":"","sources":["../../src/visitors/AstSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAEpF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,aAAa,GAAG,cAAc,CAAC;IAC/C,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzC,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA+DnC,qBAAa,aAAa;IACxB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW;IAuB1C,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,oBAAoB;CAQ7B"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AstSerializer = 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
+ function parseBooleanLiteral(t) {
13
+ const v = t.toLowerCase();
14
+ if (v === 'true')
15
+ return true;
16
+ if (v === 'false')
17
+ return false;
18
+ return undefined;
19
+ }
20
+ function parseNullLiteral(t) {
21
+ const v = t.toLowerCase();
22
+ if (v === 'null')
23
+ return null;
24
+ return undefined;
25
+ }
26
+ function parseCurrentDateLiteral(t) {
27
+ const v = t.toLowerCase();
28
+ if (v === 'currentdate()')
29
+ return { currentDate: true };
30
+ return undefined;
31
+ }
32
+ function parseNumericLiteral(t) {
33
+ if (!t)
34
+ return undefined;
35
+ if (t.startsWith("'"))
36
+ return undefined;
37
+ const n = Number(t);
38
+ if (Number.isFinite(n))
39
+ return n;
40
+ return undefined;
41
+ }
42
+ function parseStringLiteral(t) {
43
+ if (!t)
44
+ return undefined;
45
+ if (t.startsWith("'"))
46
+ return stripQuotes(t);
47
+ return undefined;
48
+ }
49
+ function parseValidValueText(t) {
50
+ const curr = parseCurrentDateLiteral(t);
51
+ if (curr)
52
+ return curr;
53
+ const nul = parseNullLiteral(t);
54
+ if (nul === null)
55
+ return null;
56
+ const b = parseBooleanLiteral(t);
57
+ if (b !== undefined)
58
+ return b;
59
+ const s = parseStringLiteral(t);
60
+ if (s !== undefined)
61
+ return s;
62
+ const n = parseNumericLiteral(t);
63
+ if (n !== undefined)
64
+ return n;
65
+ return stripQuotes(t);
66
+ }
67
+ function parsePropertyPath(text) {
68
+ if (!text)
69
+ return [];
70
+ const s = text.startsWith('.') ? text.slice(1) : text;
71
+ return s.split('.').filter(Boolean);
72
+ }
73
+ class AstSerializer {
74
+ serialize(root) {
75
+ const wf = root.workflow();
76
+ if (!wf)
77
+ throw new Error('No workflow found');
78
+ const workflowName = stripQuotes(wf.workflow_name().text || '');
79
+ const evalMode = wf.configuration?.()?.evaluation_mode?.();
80
+ const multiMatch = !!(evalMode && evalMode.K_MULTI_MATCH?.());
81
+ const rulesets = wf.rulesets().map((rs) => this.serializeRuleset(rs));
82
+ const def = wf.default_clause();
83
+ const result = this.serializeReturn(def.return_result?.());
84
+ const actions = this.serializeActions(def.actions?.());
85
+ return {
86
+ type: 'Workflow',
87
+ name: workflowName,
88
+ evaluationMode: multiMatch ? 'multi_match' : 'single_match',
89
+ rulesets,
90
+ default: { result, actions },
91
+ };
92
+ }
93
+ serializeRuleset(ctx) {
94
+ const name = stripQuotes(ctx.name().text || '');
95
+ const condCtx = ctx.ruleset_condition?.();
96
+ const condition = condCtx ? { kind: 'expr', text: String(condCtx.expr(0).text || '') } : undefined;
97
+ const rules = ctx.rules().map((r) => this.serializeRule(r));
98
+ return { type: 'Ruleset', name, condition, rules };
99
+ }
100
+ serializeRule(ctx) {
101
+ const name = stripQuotes(ctx.name().text || '');
102
+ const body = ctx.rule_body();
103
+ const predicateText = body.expr().text || '';
104
+ const retCtx = body.return_result?.();
105
+ const result = this.serializeReturn(retCtx) || { kind: 'state', value: 'allow' };
106
+ const actions = this.serializeActions(body.actions?.());
107
+ return {
108
+ type: 'Rule',
109
+ name,
110
+ predicate: { kind: 'expr', text: predicateText },
111
+ result,
112
+ actions,
113
+ };
114
+ }
115
+ serializeReturn(ret) {
116
+ if (!ret)
117
+ return { kind: 'state', value: 'allow' };
118
+ const st = ret.state_rule?.();
119
+ if (st)
120
+ return { kind: 'state', value: (st.text || '').trim() };
121
+ const vp = ret.validProperty?.();
122
+ if (vp)
123
+ return { kind: 'property', path: parsePropertyPath(vp.text || '') };
124
+ const vv = ret.validValue?.();
125
+ if (vv)
126
+ return { kind: 'value', value: parseValidValueText(vv.text || '') };
127
+ const expr0 = ret.expr?.(0);
128
+ if (expr0)
129
+ return { kind: 'expr', text: expr0.text || '' };
130
+ return { kind: 'state', value: 'allow' };
131
+ }
132
+ serializeActions(ctx) {
133
+ if (!ctx)
134
+ return [];
135
+ const actions = ctx.action();
136
+ const out = [];
137
+ for (const a of actions) {
138
+ const name = this.resolveActionName(a);
139
+ const params = this.resolveParams(a);
140
+ out.push({ type: 'Action', name, params });
141
+ }
142
+ return out;
143
+ }
144
+ resolveActionName(action) {
145
+ const kAction = action.K_ACTION?.();
146
+ if (kAction) {
147
+ const pv = action._param_value || action.param_value;
148
+ return stripQuotes(pv?.text || '');
149
+ }
150
+ const actionId = action._action_id || action.action_id;
151
+ if (actionId && actionId.text)
152
+ return stripQuotes(actionId.text);
153
+ return '';
154
+ }
155
+ resolveParams(action) {
156
+ const paramsCtx = action.action_params?.();
157
+ if (!paramsCtx)
158
+ return {};
159
+ const pairsCtx = paramsCtx.param_pairs();
160
+ const pairList = pairsCtx.param_pair();
161
+ const out = {};
162
+ for (const p of pairList) {
163
+ const key = stripQuotes(p._field_name?.text || '');
164
+ const value = p._field_value;
165
+ out[key] = this.evalActionParamValue(value);
166
+ }
167
+ return out;
168
+ }
169
+ evalActionParamValue(fieldValue) {
170
+ if (!fieldValue)
171
+ return { kind: 'value', value: '' };
172
+ const vv = fieldValue.validValue?.();
173
+ if (vv)
174
+ return { kind: 'value', value: parseValidValueText(vv.text || '') };
175
+ const vp = fieldValue.validProperty?.();
176
+ if (vp)
177
+ return { kind: 'property', path: parsePropertyPath(vp.text || '') };
178
+ return { kind: 'value', value: '' };
179
+ }
180
+ }
181
+ exports.AstSerializer = AstSerializer;
182
+ //# sourceMappingURL=AstSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AstSerializer.js","sourceRoot":"","sources":["../../src/visitors/AstSerializer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import type { InputMap, ListsMap, WorkflowResult } from './types';
2
+ import type { AstWorkflow } from './visitors/AstSerializer';
2
3
  export declare class Workflow {
3
4
  private tree;
4
5
  constructor(workflow: string);
5
6
  evaluate(request: InputMap, lists?: ListsMap): WorkflowResult;
6
7
  validateAndGetWorkflowName(): string;
8
+ toJSON(): AstWorkflow;
7
9
  private stripQuotes;
8
10
  }
9
11
  //# sourceMappingURL=workflow.d.ts.map
@@ -1 +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"}
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,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,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,MAAM,IAAI,WAAW;IAKrB,OAAO,CAAC,WAAW;CAMpB"}
package/dist/workflow.js CHANGED
@@ -8,6 +8,7 @@ const BailErrorStrategy_1 = require("antlr4ts/BailErrorStrategy");
8
8
  const PredictionMode_1 = require("antlr4ts/atn/PredictionMode");
9
9
  const ErrorListener_1 = require("./listeners/ErrorListener");
10
10
  const RulesetVisitor_1 = require("./visitors/RulesetVisitor");
11
+ const AstSerializer_1 = require("./visitors/AstSerializer");
11
12
  class Workflow {
12
13
  constructor(workflow) {
13
14
  Object.defineProperty(this, "tree", {
@@ -45,6 +46,10 @@ class Workflow {
45
46
  const raw = wf?.workflow_name()?.text ?? '';
46
47
  return this.stripQuotes(raw);
47
48
  }
49
+ toJSON() {
50
+ const serializer = new AstSerializer_1.AstSerializer();
51
+ return serializer.serialize(this.tree);
52
+ }
48
53
  stripQuotes(s) {
49
54
  if ((s.startsWith("'") && s.endsWith("'")) || (s.startsWith('"') && s.endsWith('"'))) {
50
55
  return s.substring(1, s.length - 1);
@@ -1 +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"}
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;AAE3D,4DAAyD;AAGzD,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;IAED,MAAM;QACJ,MAAM,UAAU,GAAG,IAAI,6BAAa,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAoB,CAAC,CAAC;IACzD,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;AA/CD,4BA+CC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ruleflow-ts/dsl-core",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Ruleflow DSL interpreter in TypeScript (isomorphic, SSR+Edge compatible).",
5
5
  "type": "commonjs",
6
6
  "sideEffects": false,
@@ -66,4 +66,4 @@
66
66
  "isomorphic"
67
67
  ],
68
68
  "license": "MIT"
69
- }
69
+ }