@acpus/core 0.3.0 → 0.4.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.
@@ -1,11 +1,10 @@
1
- import { parse as parseCel } from "@marcbachmann/cel-js";
2
- export const EXPRESSION_PATTERN = /\$\{\{\s*([\s\S]*?)\s*\}\}/g;
1
+ import { extractReferences } from "./cel-ast.js";
2
+ import { EXPRESSION_PATTERN } from "./expressions-shared.js";
3
+ export { EXPRESSION_PATTERN, toCelParseSource } from "./expressions-shared.js";
3
4
  /** Fields that are evaluated as raw CEL (evaluateExpression), not templates.
4
5
  * Using ${{ }} in these fields causes a runtime CEL parse error. */
5
6
  const RAW_CEL_FIELDS = new Set(["over", "until", "when"]);
6
- const STEP_REFERENCE_PATTERN = /\bsteps\.([A-Za-z_][A-Za-z0-9_-]*)\b/g;
7
- const ROOT_REFERENCE_PATTERN = /(?<![\w.])([A-Za-z_][A-Za-z0-9_]*)\s*(?:\.|\()/g;
8
- export const ALLOWED_ROOTS = new Set(["input", "steps", "loop", "item", "item_id", "item_index", "run_id"]);
7
+ export const ALLOWED_ROOTS = new Set(["input", "steps", "workflow", "loop", "item", "item_id", "item_index", "run_id"]);
9
8
  export const ALLOWED_FUNCTIONS = new Set(["now", "len", "startsWith", "matches", "coalesce", "json"]);
10
9
  export function createExpressionCollector(diagnostics, knownStepIds, stepKinds) {
11
10
  const expressions = [];
@@ -23,29 +22,38 @@ export function createExpressionCollector(diagnostics, knownStepIds, stepKinds)
23
22
  diagnostics.error("EXPR_EMPTY", "Expression cannot be empty.", path);
24
23
  continue;
25
24
  }
26
- try {
27
- parseCel(toCelParseSource(source));
28
- }
29
- catch (error) {
30
- diagnostics.error("EXPR_PARSE", `Invalid CEL expression: ${errorMessage(error)}`, path);
25
+ const { references, functions, parseError } = extractReferences(source);
26
+ if (parseError) {
27
+ diagnostics.error("EXPR_PARSE", `Invalid CEL expression: ${parseError}`, path);
28
+ continue;
31
29
  }
32
- const references = [...source.matchAll(STEP_REFERENCE_PATTERN)].map((reference) => reference[1]);
33
- for (const reference of references) {
34
- if (!knownStepIds.has(reference)) {
35
- diagnostics.error("EXPR_UNKNOWN_STEP", `Expression references unknown step '${reference}'.`, path);
30
+ const stepReferences = [];
31
+ for (const ref of references) {
32
+ // Unknown root (not an allowed context variable). Functions are reported
33
+ // separately below so a function name is never mistaken for a root.
34
+ if (!ALLOWED_ROOTS.has(ref.root)) {
35
+ diagnostics.warning("EXPR_UNKNOWN_ROOT", `Expression root '${ref.root}' is not part of the M1 DSL context.`, path);
36
+ }
37
+ if (ref.root === "steps") {
38
+ const first = ref.segments[0];
39
+ if (first && first.kind === "field") {
40
+ stepReferences.push(first.name);
41
+ if (!knownStepIds.has(first.name)) {
42
+ diagnostics.error("EXPR_UNKNOWN_STEP", `Expression references unknown step '${first.name}'.`, path);
43
+ }
44
+ }
36
45
  }
37
46
  }
38
- for (const root of source.matchAll(ROOT_REFERENCE_PATTERN)) {
39
- const name = root[1];
40
- if (!ALLOWED_ROOTS.has(name) && !ALLOWED_FUNCTIONS.has(name)) {
41
- diagnostics.warning("EXPR_UNKNOWN_ROOT", `Expression root '${name}' is not part of the M1 DSL context.`, path);
47
+ for (const fn of functions) {
48
+ if (!ALLOWED_FUNCTIONS.has(fn)) {
49
+ diagnostics.warning("EXPR_UNKNOWN_ROOT", `Expression function '${fn}' is not part of the M1 DSL context.`, path);
42
50
  }
43
51
  }
44
52
  expressions.push({
45
53
  id: `expr_${expressions.length + 1}`,
46
54
  source,
47
55
  path,
48
- references
56
+ references: stepReferences
49
57
  });
50
58
  }
51
59
  }
@@ -66,12 +74,6 @@ export function createExpressionCollector(diagnostics, knownStepIds, stepKinds)
66
74
  }
67
75
  return { expressions, visit };
68
76
  }
69
- function errorMessage(error) {
70
- return error instanceof Error ? error.message : String(error);
71
- }
72
- export function toCelParseSource(source) {
73
- return source.replace(/\bloop\./g, "loop_ctx.");
74
- }
75
77
  function isRecord(value) {
76
78
  return typeof value === "object" && value !== null;
77
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"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"}
package/dist/hash.d.ts CHANGED
@@ -12,5 +12,8 @@ import type { IrNode } from "./types.js";
12
12
  * two structurally identical Nodes to mismatch only because they live under
13
13
  * different parent paths.
14
14
  */
15
- export declare function hashIrNode(node: IrNode): string;
15
+ export interface IrNodeHashOptions {
16
+ workflow?: unknown;
17
+ }
18
+ export declare function hashIrNode(node: IrNode, options?: IrNodeHashOptions): string;
16
19
  //# sourceMappingURL=hash.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,MAAM,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,MAAM,EAAE,MAAM,YAAY,CAAC;AAInD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAEhF"}
package/dist/hash.js CHANGED
@@ -1,40 +1,100 @@
1
1
  import { createHash } from "node:crypto";
2
- /**
3
- * Compute a stable canonical hash of an IR Node, including its full subtree.
4
- *
5
- * Two Nodes with equal Node Key and equal Node Definition Hash are treated as
6
- * the same Node across Runs by the Forked Run inheritance rule (ADR-0007). The
7
- * hash MUST be stable across re-compiles of the same source IR; it MUST change
8
- * when any compiled IR field of the Node or any of its descendants differs.
9
- *
10
- * The hash explicitly excludes `id`, `nodePath`, and `keyTemplate` because Node
11
- * Key already carries that identity; including them would tautologically force
12
- * two structurally identical Nodes to mismatch only because they live under
13
- * different parent paths.
14
- */
15
- export function hashIrNode(node) {
16
- return sha256(JSON.stringify(canonicalize(nodeShape(node))));
2
+ import { extractReferences } from "./cel-ast.js";
3
+ import { EXPRESSION_PATTERN } from "./expressions-shared.js";
4
+ export function hashIrNode(node, options = {}) {
5
+ return sha256(JSON.stringify(canonicalize(nodeShape(node, options))));
17
6
  }
18
- function nodeShape(node) {
7
+ function nodeShape(node, options) {
19
8
  const shape = {
20
9
  kind: node.kind,
21
10
  metadata: node.metadata
22
11
  };
12
+ if (options.workflow && nodeReferencesWorkflow(node))
13
+ shape.workflow = options.workflow;
23
14
  if (node.outputMerge)
24
15
  shape.outputMerge = node.outputMerge;
25
16
  if (node.children && node.children.length > 0)
26
- shape.children = node.children.map(nodeShape);
17
+ shape.children = node.children.map((child) => nodeShape(child, options));
27
18
  if (node.branches && node.branches.length > 0)
28
- shape.branches = node.branches.map(branchShape);
19
+ shape.branches = node.branches.map((branch) => branchShape(branch, options));
29
20
  return shape;
30
21
  }
31
- function branchShape(branch) {
22
+ function branchShape(branch, options) {
32
23
  return {
33
24
  id: branch.id,
34
25
  when: branch.when,
35
- children: branch.children.map(nodeShape)
26
+ children: branch.children.map((child) => nodeShape(child, options))
36
27
  };
37
28
  }
29
+ function nodeReferencesWorkflow(node) {
30
+ if (metadataReferencesWorkflow(node.kind, node.metadata))
31
+ return true;
32
+ if (node.branches?.some((branch) => rawCelReferencesWorkflow(branch.when) || branch.children.some(nodeReferencesWorkflow)))
33
+ return true;
34
+ return node.children?.some(nodeReferencesWorkflow) ?? false;
35
+ }
36
+ function metadataReferencesWorkflow(kind, metadata) {
37
+ for (const [key, value] of Object.entries(metadata)) {
38
+ if (typeof value === "string") {
39
+ if (templateReferencesWorkflow(value))
40
+ return true;
41
+ if (isRawCelField(kind, key) && rawCelReferencesWorkflow(value))
42
+ return true;
43
+ continue;
44
+ }
45
+ if (Array.isArray(value)) {
46
+ if (value.some((item) => valueReferencesWorkflow(item)))
47
+ return true;
48
+ continue;
49
+ }
50
+ if (value && typeof value === "object") {
51
+ if (valueReferencesWorkflow(value))
52
+ return true;
53
+ }
54
+ }
55
+ return false;
56
+ }
57
+ function valueReferencesWorkflow(value) {
58
+ if (typeof value === "string")
59
+ return templateReferencesWorkflow(value);
60
+ if (Array.isArray(value))
61
+ return value.some(valueReferencesWorkflow);
62
+ if (value && typeof value === "object")
63
+ return Object.values(value).some(valueReferencesWorkflow);
64
+ return false;
65
+ }
66
+ function templateReferencesWorkflow(value) {
67
+ for (const match of value.matchAll(EXPRESSION_PATTERN)) {
68
+ if (expressionReferencesWorkflow(match[1]?.trim() ?? ""))
69
+ return true;
70
+ }
71
+ EXPRESSION_PATTERN.lastIndex = 0;
72
+ return false;
73
+ }
74
+ function rawCelReferencesWorkflow(value) {
75
+ if (typeof value !== "string")
76
+ return false;
77
+ if (EXPRESSION_PATTERN.test(value)) {
78
+ EXPRESSION_PATTERN.lastIndex = 0;
79
+ return templateReferencesWorkflow(value);
80
+ }
81
+ EXPRESSION_PATTERN.lastIndex = 0;
82
+ return expressionReferencesWorkflow(value.trim());
83
+ }
84
+ function expressionReferencesWorkflow(source) {
85
+ if (!source)
86
+ return false;
87
+ const { references, parseError } = extractReferences(source);
88
+ if (parseError)
89
+ return false;
90
+ return references.some((ref) => ref.root === "workflow");
91
+ }
92
+ function isRawCelField(kind, key) {
93
+ return (kind === "fanout" && key === "over")
94
+ || (kind === "loop" && key === "until")
95
+ || (kind === "guard" && key === "when")
96
+ || (kind === "switch" && key === "on");
97
+ }
38
98
  /**
39
99
  * Recursively sort object keys so JSON.stringify is canonical regardless of
40
100
  * source insertion order. Arrays are preserved in order (semantic).
package/dist/hash.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAgBD,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAuB;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;IACF,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC3D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7F,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,MAAgB;IACnC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;KACzC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAU,CAAC,CAAC;QAClD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAmB7D,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,UAA6B,EAAE;IACtE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAiBD,SAAS,SAAS,CAAC,IAAY,EAAE,OAA0B;IACzD,MAAM,KAAK,GAAuB;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;IACF,IAAI,OAAO,CAAC,QAAQ,IAAI,sBAAsB,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACxF,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC3D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACxH,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5H,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,MAAgB,EAAE,OAA0B;IAC/D,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACjC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CACtF;QAAE,OAAO,IAAI,CAAC;IACf,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAoB,EAAE,QAAiC;IACzF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,0BAA0B,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnD,IAAI,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,wBAAwB,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC7E,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrE,SAAS;QACX,CAAC;QACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,uBAAuB,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACrE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC7H,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa;IAC/C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvD,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACxE,CAAC;IACD,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAyB;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC;QACjC,OAAO,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC;IACjC,OAAO,4BAA4B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAc;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,UAAU;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,aAAa,CAAC,IAAoB,EAAE,GAAW;IACtD,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,CAAC;WACvC,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,CAAC;WACpC,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,CAAC;WACpC,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAU,CAAC,CAAC;QAClD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,12 @@ export type { CompileSchemaDslResult, SchemaDslError, CompileSchemaDslOptions }
8
8
  export type { WorkflowSourcePolicy } from "./source-policy.js";
9
9
  export { EXPRESSION_PATTERN, ALLOWED_ROOTS, ALLOWED_FUNCTIONS, toCelParseSource, createExpressionCollector } from "./expressions.js";
10
10
  export type { ExpressionCollector } from "./expressions.js";
11
+ export { extractReferences, referenceToString, isStaticReference } from "./cel-ast.js";
12
+ export type { ExpressionReference, ReferenceSegment, ExtractResult } from "./cel-ast.js";
13
+ export { validateScopedExpressions } from "./expression-scope.js";
14
+ export type { ScopedValidationInput } from "./expression-scope.js";
15
+ export { COMPOSITE_CONTRACTS, outputMergeFor, keyTemplateForKind } from "./composite-contract.js";
16
+ export type { CompositeContract, OutputShapeKind } from "./composite-contract.js";
11
17
  export { parseDurationMs } from "./duration.js";
12
18
  export type { ParseDurationOptions } from "./duration.js";
13
19
  export { hashIrNode } from "./hash.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,iCAAiC,EACjC,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACzG,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EACV,OAAO,EACP,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,iCAAiC,EACjC,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACzG,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvF,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClG,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EACV,OAAO,EACP,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -5,6 +5,9 @@ export { createSchedule } from "./schedule.js";
5
5
  export { createIncludeResolver, globalWorkflowRoot, workflowSourcePolicy } from "./source-policy.js";
6
6
  export { compileSchemaDsl } from "./schema/index.js";
7
7
  export { EXPRESSION_PATTERN, ALLOWED_ROOTS, ALLOWED_FUNCTIONS, toCelParseSource, createExpressionCollector } from "./expressions.js";
8
+ export { extractReferences, referenceToString, isStaticReference } from "./cel-ast.js";
9
+ export { validateScopedExpressions } from "./expression-scope.js";
10
+ export { COMPOSITE_CONTRACTS, outputMergeFor, keyTemplateForKind } from "./composite-contract.js";
8
11
  export { parseDurationMs } from "./duration.js";
9
12
  export { hashIrNode } from "./hash.js";
10
13
  //# 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,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,iCAAiC,EACjC,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,iCAAiC,EACjC,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acpus/core",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Workflow Spec compiler and validation core for Acpus",
5
5
  "keywords": [
6
6
  "acp",