@acpus/core 0.6.0 → 0.7.0-alpha.1
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/README.md +128 -4
- package/dist/.tsbuildinfo +1 -0
- package/dist/graph/builder.d.ts +103 -0
- package/dist/graph/builder.d.ts.map +1 -0
- package/dist/graph/builder.js +209 -0
- package/dist/graph/builder.js.map +1 -0
- package/dist/graph/lowering.d.ts +8 -0
- package/dist/graph/lowering.d.ts.map +1 -0
- package/dist/graph/lowering.js +45 -0
- package/dist/graph/lowering.js.map +1 -0
- package/dist/graph/refs.d.ts +11 -0
- package/dist/graph/refs.d.ts.map +1 -0
- package/dist/graph/refs.js +12 -0
- package/dist/graph/refs.js.map +1 -0
- package/dist/graph/scope.d.ts +21 -0
- package/dist/graph/scope.d.ts.map +1 -0
- package/dist/graph/scope.js +22 -0
- package/dist/graph/scope.js.map +1 -0
- package/dist/index.d.ts +11 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -15
- package/dist/index.js.map +1 -1
- package/dist/internal/symbols.d.ts +9 -0
- package/dist/internal/symbols.d.ts.map +1 -0
- package/dist/internal/symbols.js +9 -0
- package/dist/internal/symbols.js.map +1 -0
- package/dist/internal/type-utils.d.ts +7 -0
- package/dist/internal/type-utils.d.ts.map +1 -0
- package/dist/internal/type-utils.js +8 -0
- package/dist/internal/type-utils.js.map +1 -0
- package/dist/ir/types.d.ts +218 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/ir/validator.d.ts +3 -0
- package/dist/ir/validator.d.ts.map +1 -0
- package/dist/ir/validator.js +671 -0
- package/dist/ir/validator.js.map +1 -0
- package/dist/ir.d.ts +3 -0
- package/dist/ir.d.ts.map +1 -0
- package/dist/ir.js +2 -0
- package/dist/ir.js.map +1 -0
- package/dist/nodes/composite/fanout.d.ts +24 -0
- package/dist/nodes/composite/fanout.d.ts.map +1 -0
- package/dist/nodes/composite/fanout.js +24 -0
- package/dist/nodes/composite/fanout.js.map +1 -0
- package/dist/nodes/composite/if.d.ts +12 -0
- package/dist/nodes/composite/if.d.ts.map +1 -0
- package/dist/nodes/composite/if.js +13 -0
- package/dist/nodes/composite/if.js.map +1 -0
- package/dist/nodes/composite/loop.d.ts +17 -0
- package/dist/nodes/composite/loop.d.ts.map +1 -0
- package/dist/nodes/composite/loop.js +22 -0
- package/dist/nodes/composite/loop.js.map +1 -0
- package/dist/nodes/composite/parallel.d.ts +29 -0
- package/dist/nodes/composite/parallel.d.ts.map +1 -0
- package/dist/nodes/composite/parallel.js +18 -0
- package/dist/nodes/composite/parallel.js.map +1 -0
- package/dist/nodes/composite/shared.d.ts +38 -0
- package/dist/nodes/composite/shared.d.ts.map +1 -0
- package/dist/nodes/composite/shared.js +2 -0
- package/dist/nodes/composite/shared.js.map +1 -0
- package/dist/nodes/composite/switch.d.ts +22 -0
- package/dist/nodes/composite/switch.d.ts.map +1 -0
- package/dist/nodes/composite/switch.js +12 -0
- package/dist/nodes/composite/switch.js.map +1 -0
- package/dist/nodes/control/assert.d.ts +10 -0
- package/dist/nodes/control/assert.d.ts.map +1 -0
- package/dist/nodes/control/assert.js +14 -0
- package/dist/nodes/control/assert.js.map +1 -0
- package/dist/nodes/leaf/agent.d.ts +63 -0
- package/dist/nodes/leaf/agent.d.ts.map +1 -0
- package/dist/nodes/leaf/agent.js +56 -0
- package/dist/nodes/leaf/agent.js.map +1 -0
- package/dist/nodes/leaf/shared.d.ts +11 -0
- package/dist/nodes/leaf/shared.d.ts.map +1 -0
- package/dist/nodes/leaf/shared.js +2 -0
- package/dist/nodes/leaf/shared.js.map +1 -0
- package/dist/nodes/leaf/signal.d.ts +27 -0
- package/dist/nodes/leaf/signal.d.ts.map +1 -0
- package/dist/nodes/leaf/signal.js +18 -0
- package/dist/nodes/leaf/signal.js.map +1 -0
- package/dist/nodes/leaf/task.d.ts +71 -0
- package/dist/nodes/leaf/task.d.ts.map +1 -0
- package/dist/nodes/leaf/task.js +88 -0
- package/dist/nodes/leaf/task.js.map +1 -0
- package/dist/runtime/dollar.d.ts +42 -0
- package/dist/runtime/dollar.d.ts.map +1 -0
- package/dist/runtime/dollar.js +82 -0
- package/dist/runtime/dollar.js.map +1 -0
- package/dist/runtime/secret.d.ts +10 -0
- package/dist/runtime/secret.d.ts.map +1 -0
- package/dist/runtime/secret.js +12 -0
- package/dist/runtime/secret.js.map +1 -0
- package/dist/runtime/task-context.d.ts +28 -0
- package/dist/runtime/task-context.d.ts.map +1 -0
- package/dist/runtime/task-context.js +2 -0
- package/dist/runtime/task-context.js.map +1 -0
- package/dist/runtime.d.ts +5 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +3 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema/index.d.ts +6 -2
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +3 -2
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/lower.d.ts +25 -0
- package/dist/schema/lower.d.ts.map +1 -0
- package/dist/schema/lower.js +198 -0
- package/dist/schema/lower.js.map +1 -0
- package/dist/schema/validate.d.ts +18 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +22 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/schema/zod.d.ts +17 -0
- package/dist/schema/zod.d.ts.map +1 -0
- package/dist/schema/zod.js +15 -0
- package/dist/schema/zod.js.map +1 -0
- package/dist/schema.d.ts +3 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/template/template.d.ts +5 -0
- package/dist/template/template.d.ts.map +1 -0
- package/dist/template/template.js +10 -0
- package/dist/template/template.js.map +1 -0
- package/dist/workflow.d.ts +3 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +2 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +35 -20
- package/dist/agent-overrides.d.ts +0 -33
- package/dist/agent-overrides.d.ts.map +0 -1
- package/dist/agent-overrides.js +0 -178
- package/dist/agent-overrides.js.map +0 -1
- package/dist/cel-ast.d.ts +0 -39
- package/dist/cel-ast.d.ts.map +0 -1
- package/dist/cel-ast.js +0 -157
- package/dist/cel-ast.js.map +0 -1
- package/dist/cel-environment.d.ts +0 -6
- package/dist/cel-environment.d.ts.map +0 -1
- package/dist/cel-environment.js +0 -44
- package/dist/cel-environment.js.map +0 -1
- package/dist/compiler.d.ts +0 -4
- package/dist/compiler.d.ts.map +0 -1
- package/dist/compiler.js +0 -702
- package/dist/compiler.js.map +0 -1
- package/dist/composite-contract.d.ts +0 -46
- package/dist/composite-contract.d.ts.map +0 -1
- package/dist/composite-contract.js +0 -97
- package/dist/composite-contract.js.map +0 -1
- package/dist/diagnostics.d.ts +0 -9
- package/dist/diagnostics.d.ts.map +0 -1
- package/dist/diagnostics.js +0 -16
- package/dist/diagnostics.js.map +0 -1
- package/dist/duration.d.ts +0 -13
- package/dist/duration.d.ts.map +0 -1
- package/dist/duration.js +0 -32
- package/dist/duration.js.map +0 -1
- package/dist/expression-scope.d.ts +0 -23
- package/dist/expression-scope.d.ts.map +0 -1
- package/dist/expression-scope.js +0 -545
- package/dist/expression-scope.js.map +0 -1
- package/dist/expressions-shared.d.ts +0 -19
- package/dist/expressions-shared.d.ts.map +0 -1
- package/dist/expressions-shared.js +0 -27
- package/dist/expressions-shared.js.map +0 -1
- package/dist/expressions.d.ts +0 -9
- package/dist/expressions.d.ts.map +0 -1
- package/dist/expressions.js +0 -95
- package/dist/expressions.js.map +0 -1
- package/dist/hash.d.ts +0 -19
- package/dist/hash.d.ts.map +0 -1
- package/dist/hash.js +0 -120
- package/dist/hash.js.map +0 -1
- package/dist/hook-validation.d.ts +0 -9
- package/dist/hook-validation.d.ts.map +0 -1
- package/dist/hook-validation.js +0 -73
- package/dist/hook-validation.js.map +0 -1
- package/dist/hooks.d.ts +0 -150
- package/dist/hooks.d.ts.map +0 -1
- package/dist/hooks.js +0 -18
- package/dist/hooks.js.map +0 -1
- package/dist/schedule.d.ts +0 -3
- package/dist/schedule.d.ts.map +0 -1
- package/dist/schedule.js +0 -21
- package/dist/schedule.js.map +0 -1
- package/dist/schema/dsl.d.ts +0 -34
- package/dist/schema/dsl.d.ts.map +0 -1
- package/dist/schema/dsl.js +0 -231
- package/dist/schema/dsl.js.map +0 -1
- package/dist/schema/helpers.d.ts +0 -24
- package/dist/schema/helpers.d.ts.map +0 -1
- package/dist/schema/helpers.js +0 -61
- package/dist/schema/helpers.js.map +0 -1
- package/dist/schema-validator.d.ts +0 -29
- package/dist/schema-validator.d.ts.map +0 -1
- package/dist/schema-validator.js +0 -666
- package/dist/schema-validator.js.map +0 -1
- package/dist/source-resolver.d.ts +0 -22
- package/dist/source-resolver.d.ts.map +0 -1
- package/dist/source-resolver.js +0 -43
- package/dist/source-resolver.js.map +0 -1
- package/dist/types.d.ts +0 -126
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/workflow-schema.d.ts +0 -10
- package/dist/workflow-schema.d.ts.map +0 -1
- package/dist/workflow-schema.js +0 -523
- package/dist/workflow-schema.js.map +0 -1
- /package/dist/{types.js → ir/types.js} +0 -0
package/dist/expression-scope.js
DELETED
|
@@ -1,545 +0,0 @@
|
|
|
1
|
-
import { COMPOSITE_CONTRACTS } from "./composite-contract.js";
|
|
2
|
-
import { EXPRESSION_PATTERN } from "./expressions-shared.js";
|
|
3
|
-
import { isRecord } from "./schema/helpers.js";
|
|
4
|
-
import { extractReferences, isStaticReference, referenceToString } from "./cel-ast.js";
|
|
5
|
-
/** Scope-gated local roots: valid only inside the composite that introduces them. */
|
|
6
|
-
const SCOPED_LOCAL_ROOTS = new Set(["loop", "item", "item_id", "item_index"]);
|
|
7
|
-
export function validateScopedExpressions(input) {
|
|
8
|
-
const { root, inputSchema, outputs, agents, allStepIds, diagnostics } = input;
|
|
9
|
-
const globalNodes = new Map();
|
|
10
|
-
indexNodes(root, globalNodes);
|
|
11
|
-
const r = { globalNodes, inputSchema, allStepIds, diagnostics };
|
|
12
|
-
// The implicit root pipeline threads its children sequentially.
|
|
13
|
-
walkChildScope(root, new Set(), [], undefined, r);
|
|
14
|
-
// outputs / agents are top-scope template positions evaluated after the
|
|
15
|
-
// workflow body, so every step id is visible; we keep visibility global there
|
|
16
|
-
// to avoid false positives while still validating field paths.
|
|
17
|
-
const topScope = (path) => ({
|
|
18
|
-
visibleSteps: allStepIds,
|
|
19
|
-
locals: new Set(),
|
|
20
|
-
path,
|
|
21
|
-
isCmd: false,
|
|
22
|
-
rawTemplate: false,
|
|
23
|
-
nativeSingleExpression: false
|
|
24
|
-
});
|
|
25
|
-
visitStrings(outputs, "$.outputs", (source, path) => checkTemplateString(source, { ...topScope(path), nativeSingleExpression: true }, r));
|
|
26
|
-
visitStrings(agents, "$.agents", (source, path) => checkTemplateString(source, topScope(path), r));
|
|
27
|
-
// input defaults are evaluated before any step runs, so no step is visible;
|
|
28
|
-
// an input default referencing a step output is a guaranteed runtime error.
|
|
29
|
-
const inputScope = (path) => ({
|
|
30
|
-
visibleSteps: new Set(),
|
|
31
|
-
locals: new Set(),
|
|
32
|
-
path,
|
|
33
|
-
isCmd: false,
|
|
34
|
-
rawTemplate: false,
|
|
35
|
-
nativeSingleExpression: false
|
|
36
|
-
});
|
|
37
|
-
visitStrings(inputSchema, "$.input", (source, path) => checkTemplateString(source, inputScope(path), r));
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Walk a node's child list, threading step visibility. Visibility rules,
|
|
41
|
-
* deliberately conservative (prefer false negatives over false positives):
|
|
42
|
-
* - Sequential siblings: each child sees the steps declared before it.
|
|
43
|
-
* - When a sibling completes, only its own public step id becomes visible.
|
|
44
|
-
* Descendant ids remain private to the composite/pipeline frame.
|
|
45
|
-
* - Loop `do` bodies compile to a pipeline, so body ordering follows normal
|
|
46
|
-
* pipeline sibling visibility.
|
|
47
|
-
*/
|
|
48
|
-
function walkChildScope(node, inheritedVisible, localsStack, itemSchema, r) {
|
|
49
|
-
const isParallel = node.kind === "parallel";
|
|
50
|
-
const childLists = node.branches
|
|
51
|
-
? node.branches.map((b) => [b.child])
|
|
52
|
-
: node.children
|
|
53
|
-
? [node.children]
|
|
54
|
-
: [];
|
|
55
|
-
// Validate branch `when` (raw CEL, outer scope) before descending.
|
|
56
|
-
if (node.branches) {
|
|
57
|
-
const currentLocals = unionLocals(localsStack);
|
|
58
|
-
for (const branch of node.branches) {
|
|
59
|
-
if (branch.when !== undefined) {
|
|
60
|
-
checkRawCelString(branch.when, { visibleSteps: inheritedVisible, locals: currentLocals, itemSchema, path: branch.whenPath ?? `${node.nodePath.join("/")}.when`, isCmd: false, rawTemplate: false, nativeSingleExpression: false }, r);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
for (const children of childLists) {
|
|
65
|
-
const running = new Set(inheritedVisible);
|
|
66
|
-
for (const child of children) {
|
|
67
|
-
const childVisible = isParallel ? new Set(inheritedVisible) : new Set(running);
|
|
68
|
-
walkNode(child, childVisible, localsStack, itemSchema, r);
|
|
69
|
-
running.add(child.id);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
function walkNode(node, inheritedVisible, localsStack, itemSchema, r) {
|
|
74
|
-
const contract = COMPOSITE_CONTRACTS[node.kind];
|
|
75
|
-
const currentLocals = unionLocals(localsStack);
|
|
76
|
-
const nodePath = node.nodePath.join("/");
|
|
77
|
-
const configVisible = new Set(inheritedVisible);
|
|
78
|
-
for (const cfg of nodeConfigExpressions(node)) {
|
|
79
|
-
const locals = cfg.bodyScoped ? new Set([...currentLocals, ...contract.bodyLocals]) : currentLocals;
|
|
80
|
-
// Body-scoped fanout config (key) sees `item`; resolve its element schema.
|
|
81
|
-
const cfgItemSchema = cfg.bodyScoped && node.kind === "fanout" ? fanoutItemSchema(node, r) : itemSchema;
|
|
82
|
-
const ctx = {
|
|
83
|
-
visibleSteps: configVisible,
|
|
84
|
-
locals,
|
|
85
|
-
itemSchema: cfgItemSchema,
|
|
86
|
-
path: `${nodePath}.${cfg.field}`,
|
|
87
|
-
isCmd: cfg.isCmd === true,
|
|
88
|
-
rawTemplate: false,
|
|
89
|
-
nativeSingleExpression: cfg.nativeSingleExpression === true
|
|
90
|
-
};
|
|
91
|
-
if (cfg.rawCel) {
|
|
92
|
-
checkRawCelString(cfg.source, ctx, r);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
checkTemplateString(cfg.source, ctx, r);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Recurse with this node's body locals added for its children. A fanout binds
|
|
99
|
-
// `item` to the element schema of its `over` array (when statically known).
|
|
100
|
-
const childLocalsStack = contract.bodyLocals.length > 0 ? [...localsStack, contract.bodyLocals] : localsStack;
|
|
101
|
-
const childItemSchema = node.kind === "fanout" ? fanoutItemSchema(node, r) : itemSchema;
|
|
102
|
-
if ((node.children && node.children.length > 0) || (node.branches && node.branches.length > 0)) {
|
|
103
|
-
walkChildScope(node, inheritedVisible, childLocalsStack, childItemSchema, r);
|
|
104
|
-
}
|
|
105
|
-
if (node.kind === "pipeline" && isRecord(node.metadata.outputs)) {
|
|
106
|
-
const outputVisible = new Set(inheritedVisible);
|
|
107
|
-
for (const child of node.children ?? [])
|
|
108
|
-
outputVisible.add(child.id);
|
|
109
|
-
visitStrings(node.metadata.outputs, `${nodePath}.outputs`, (source, path) => checkTemplateString(source, { visibleSteps: outputVisible, locals: currentLocals, itemSchema, path, isCmd: false, rawTemplate: false, nativeSingleExpression: true }, r));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Resolve the element schema bound to `item` inside a fanout body. Only returns
|
|
114
|
-
* a schema when `over` is `steps.<id>.output[...typed array]`; literal arrays and
|
|
115
|
-
* dyn references yield undefined (fail-quiet → item.* not validated).
|
|
116
|
-
*/
|
|
117
|
-
function fanoutItemSchema(node, r) {
|
|
118
|
-
const over = node.metadata.over;
|
|
119
|
-
if (typeof over !== "string")
|
|
120
|
-
return undefined;
|
|
121
|
-
// A coerced literal array (JSON string) has no element schema we can use.
|
|
122
|
-
if (over.trimStart().startsWith("["))
|
|
123
|
-
return undefined;
|
|
124
|
-
const { references, parseError } = extractReferences(over);
|
|
125
|
-
if (parseError || references.length !== 1)
|
|
126
|
-
return undefined;
|
|
127
|
-
const ref = references[0];
|
|
128
|
-
if (ref.root !== "steps")
|
|
129
|
-
return undefined;
|
|
130
|
-
const stepNode = r.globalNodes.get(ref.segments[0]?.name ?? "");
|
|
131
|
-
if (!stepNode)
|
|
132
|
-
return undefined;
|
|
133
|
-
if (COMPOSITE_CONTRACTS[stepNode.kind].outputShape !== "schema")
|
|
134
|
-
return undefined;
|
|
135
|
-
const schema = stepNode.metadata.output;
|
|
136
|
-
if (!isRecord(schema))
|
|
137
|
-
return undefined;
|
|
138
|
-
// Walk to the array referenced by `over`, then return its item schema.
|
|
139
|
-
const arr = resolveSchemaNode(schema, ref.segments, 2);
|
|
140
|
-
if (arr && arr.type === "array" && isRecord(arr.items))
|
|
141
|
-
return arr.items;
|
|
142
|
-
return undefined;
|
|
143
|
-
}
|
|
144
|
-
/** Resolve segments to the declared schema node they point at, or undefined if unknown/open. */
|
|
145
|
-
function resolveSchemaNode(schema, segments, start) {
|
|
146
|
-
let cur = schema;
|
|
147
|
-
for (let i = start; i < segments.length; i++) {
|
|
148
|
-
const rawSeg = segments[i];
|
|
149
|
-
const seg = rawSeg.kind === "bracket" && typeof rawSeg.value === "string" && cur.type === "object"
|
|
150
|
-
? { kind: "field", name: rawSeg.value }
|
|
151
|
-
: rawSeg;
|
|
152
|
-
if (seg.kind === "index" || seg.kind === "bracket") {
|
|
153
|
-
if (cur.type === "array" && (seg.kind === "index" || typeof seg.value === "number") && isRecord(cur.items)) {
|
|
154
|
-
cur = cur.items;
|
|
155
|
-
continue;
|
|
156
|
-
}
|
|
157
|
-
return undefined;
|
|
158
|
-
}
|
|
159
|
-
if (hasDeclaredProperties(cur)) {
|
|
160
|
-
const properties = cur.properties;
|
|
161
|
-
if (Object.prototype.hasOwnProperty.call(properties, seg.name)) {
|
|
162
|
-
cur = properties[seg.name];
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return undefined;
|
|
167
|
-
}
|
|
168
|
-
return cur;
|
|
169
|
-
}
|
|
170
|
-
/** Yield the expression-bearing config strings for a node, by kind. */
|
|
171
|
-
function nodeConfigExpressions(node) {
|
|
172
|
-
const out = [];
|
|
173
|
-
const md = node.metadata;
|
|
174
|
-
const pushTemplate = (value, field, isCmd = false) => {
|
|
175
|
-
if (typeof value === "string")
|
|
176
|
-
out.push({ source: value, field, rawCel: false, isCmd });
|
|
177
|
-
};
|
|
178
|
-
switch (node.kind) {
|
|
179
|
-
case "run.agent":
|
|
180
|
-
pushTemplate(md.prompt, "prompt");
|
|
181
|
-
pushTemplate(md.cwd, "cwd");
|
|
182
|
-
pushTemplate(md.session_key, "session_key");
|
|
183
|
-
break;
|
|
184
|
-
case "run.program":
|
|
185
|
-
if (Array.isArray(md.cmd)) {
|
|
186
|
-
md.cmd.forEach((item, index) => pushTemplate(item, `cmd[${index}]`, true));
|
|
187
|
-
}
|
|
188
|
-
else if (typeof md.cmd === "string") {
|
|
189
|
-
pushTemplate(md.cmd, "cmd", true);
|
|
190
|
-
}
|
|
191
|
-
pushTemplate(md.cwd, "cwd");
|
|
192
|
-
if (isRecord(md.env)) {
|
|
193
|
-
for (const [key, value] of Object.entries(md.env))
|
|
194
|
-
pushTemplate(value, `env.${key}`);
|
|
195
|
-
}
|
|
196
|
-
break;
|
|
197
|
-
case "run.signal":
|
|
198
|
-
pushTemplate(md.prompt, "prompt");
|
|
199
|
-
break;
|
|
200
|
-
case "guard":
|
|
201
|
-
if (typeof md.when === "string")
|
|
202
|
-
out.push({ source: md.when, field: "when", rawCel: true });
|
|
203
|
-
pushTemplate(md.message, "message");
|
|
204
|
-
break;
|
|
205
|
-
case "loop":
|
|
206
|
-
if (typeof md.until === "string")
|
|
207
|
-
out.push({ source: md.until, field: "until", rawCel: true, bodyScoped: true });
|
|
208
|
-
break;
|
|
209
|
-
case "fanout":
|
|
210
|
-
if (typeof md.over === "string")
|
|
211
|
-
out.push({ source: md.over, field: "over", rawCel: true });
|
|
212
|
-
if (typeof md.key === "string")
|
|
213
|
-
out.push({ source: md.key, field: "key", rawCel: false, bodyScoped: true });
|
|
214
|
-
break;
|
|
215
|
-
case "subworkflow":
|
|
216
|
-
if (isRecord(md.input)) {
|
|
217
|
-
for (const [key, value] of Object.entries(md.input)) {
|
|
218
|
-
if (typeof value === "string")
|
|
219
|
-
out.push({ source: value, field: `input.${key}`, rawCel: false, nativeSingleExpression: true });
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
break;
|
|
223
|
-
default:
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
226
|
-
return out;
|
|
227
|
-
}
|
|
228
|
-
/** Validate every ${{ }} expression inside a template string. */
|
|
229
|
-
function checkTemplateString(value, ctx, r) {
|
|
230
|
-
const matches = [...value.matchAll(EXPRESSION_PATTERN)];
|
|
231
|
-
if (matches.length === 1) {
|
|
232
|
-
const match = matches[0];
|
|
233
|
-
const before = value.slice(0, match.index).trim();
|
|
234
|
-
const after = value.slice(match.index + match[0].length).trim();
|
|
235
|
-
if (before === "" && after === "") {
|
|
236
|
-
checkExpression((match[1] ?? "").trim(), ctx.nativeSingleExpression ? ctx : { ...ctx, rawTemplate: true }, r);
|
|
237
|
-
EXPRESSION_PATTERN.lastIndex = 0;
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
for (const match of matches) {
|
|
242
|
-
const source = (match[1] ?? "").trim();
|
|
243
|
-
if (source.length === 0)
|
|
244
|
-
continue;
|
|
245
|
-
checkExpression(source, { ...ctx, rawTemplate: true }, r);
|
|
246
|
-
}
|
|
247
|
-
EXPRESSION_PATTERN.lastIndex = 0;
|
|
248
|
-
}
|
|
249
|
-
/** Validate a raw-CEL field (when/until/over). Skip if it carries ${{ }} (flat collector warns). */
|
|
250
|
-
function checkRawCelString(value, ctx, r) {
|
|
251
|
-
if (EXPRESSION_PATTERN.test(value)) {
|
|
252
|
-
EXPRESSION_PATTERN.lastIndex = 0;
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
EXPRESSION_PATTERN.lastIndex = 0;
|
|
256
|
-
checkExpression(value.trim(), ctx, r);
|
|
257
|
-
}
|
|
258
|
-
function checkExpression(source, ctx, r) {
|
|
259
|
-
const { references, functions, parseError } = extractReferences(source);
|
|
260
|
-
if (parseError)
|
|
261
|
-
return; // flat collector owns EXPR_PARSE
|
|
262
|
-
for (const ref of references) {
|
|
263
|
-
checkReference(ref, ctx, r);
|
|
264
|
-
}
|
|
265
|
-
if (ctx.isCmd) {
|
|
266
|
-
checkCmdScalar(source, references, functions, ctx, r);
|
|
267
|
-
}
|
|
268
|
-
else if (ctx.rawTemplate) {
|
|
269
|
-
checkStructuredTemplate(source, references, functions, ctx, r);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
function checkReference(ref, ctx, r) {
|
|
273
|
-
// Out-of-scope local root (loop/item/...) used where it is not bound.
|
|
274
|
-
if (SCOPED_LOCAL_ROOTS.has(ref.root) && !ctx.locals.has(ref.root)) {
|
|
275
|
-
r.diagnostics.error("EXPR_ROOT_OUT_OF_SCOPE", `Expression root '${ref.root}' is only available inside its ${ref.root === "loop" ? "loop" : "fanout"} body; it is not in scope here.${describeScope(ctx)}`, ctx.path);
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
// TODO: Delete after users have migrated. Transitional guard for pre-primary-output loop.last syntax.
|
|
279
|
-
if (ref.root === "loop" && isLoopLastEnvelopeReference(ref)) {
|
|
280
|
-
r.diagnostics.error("EXPR_LOOP_LAST_ENVELOPE", "loop.last is already the previous body primary output; use loop.last.<field>, not loop.last.output.<field>.", ctx.path);
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
if (ref.root === "steps") {
|
|
284
|
-
checkStepReference(ref, ctx, r);
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
if (ref.root === "input") {
|
|
288
|
-
const result = walkInputSchema(r.inputSchema, ref.segments);
|
|
289
|
-
if (result.error) {
|
|
290
|
-
r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on input. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (ref.root === "workflow") {
|
|
294
|
-
const result = walkSchema(WORKFLOW_CONTEXT_SCHEMA, ref.segments, 0);
|
|
295
|
-
if (result.error) {
|
|
296
|
-
r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on workflow. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
if (ref.root === "item" && ctx.itemSchema) {
|
|
300
|
-
const result = walkSchema(ctx.itemSchema, ref.segments, 0, { requireDeclaredFields: true });
|
|
301
|
-
if (result.error) {
|
|
302
|
-
r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on the fanout item. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
function isLoopLastEnvelopeReference(ref) {
|
|
307
|
-
return ref.segments[0]?.kind === "field" &&
|
|
308
|
-
ref.segments[0].name === "last" &&
|
|
309
|
-
ref.segments[1]?.kind === "field" &&
|
|
310
|
-
ref.segments[1].name === "output";
|
|
311
|
-
}
|
|
312
|
-
function checkStepReference(ref, ctx, r) {
|
|
313
|
-
const first = ref.segments[0];
|
|
314
|
-
if (!first || first.kind !== "field")
|
|
315
|
-
return; // steps[expr] — dynamic, skip
|
|
316
|
-
const stepId = first.name;
|
|
317
|
-
if (!r.allStepIds.has(stepId))
|
|
318
|
-
return; // genuinely unknown — flat collector owns EXPR_UNKNOWN_STEP
|
|
319
|
-
if (!ctx.visibleSteps.has(stepId)) {
|
|
320
|
-
const visible = [...ctx.visibleSteps].sort();
|
|
321
|
-
r.diagnostics.error("EXPR_UNKNOWN_STEP", `Expression references step '${stepId}' which is not visible at this position (it runs later or in a separate branch). Visible steps: ${visible.join(", ") || "(none)"}.`, ctx.path);
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
resolveStepType(ref, r, ctx); // resolve for field-path errors (side-effecting diagnostics)
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Resolve a `steps.<id>...` reference, emitting EXPR_UNKNOWN_FIELD on a closed
|
|
328
|
-
* schema miss. Returns the resolved kind for the shell-safety check.
|
|
329
|
-
*/
|
|
330
|
-
function resolveStepType(ref, r, ctx) {
|
|
331
|
-
const first = ref.segments[0];
|
|
332
|
-
if (!first || first.kind !== "field")
|
|
333
|
-
return "unknown"; // bare `steps` or `steps[expr]`
|
|
334
|
-
const node = r.globalNodes.get(first.name);
|
|
335
|
-
if (!node)
|
|
336
|
-
return "unknown";
|
|
337
|
-
const seg1 = ref.segments[1];
|
|
338
|
-
if (!seg1)
|
|
339
|
-
return "unknown"; // bare `steps.x` — envelope object, treat dyn
|
|
340
|
-
if (seg1.kind !== "field")
|
|
341
|
-
return "unknown";
|
|
342
|
-
if (seg1.name === "exit_code")
|
|
343
|
-
return "scalar";
|
|
344
|
-
if (seg1.name !== "output") {
|
|
345
|
-
const available = node.kind === "run.program" ? "output, exit_code" : "output";
|
|
346
|
-
if (ctx) {
|
|
347
|
-
r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' accesses '${seg1.name}' on step '${node.id}'; step outputs are read via .output (available: ${available}).`, ctx.path);
|
|
348
|
-
}
|
|
349
|
-
return "unknown";
|
|
350
|
-
}
|
|
351
|
-
// seg1 === "output": project per the node's output shape.
|
|
352
|
-
const shape = COMPOSITE_CONTRACTS[node.kind].outputShape;
|
|
353
|
-
if (ref.segments.length === 2) {
|
|
354
|
-
switch (shape) {
|
|
355
|
-
case "array":
|
|
356
|
-
return "array";
|
|
357
|
-
case "map":
|
|
358
|
-
case "decision":
|
|
359
|
-
case "selected":
|
|
360
|
-
return "object";
|
|
361
|
-
default:
|
|
362
|
-
break;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
if (shape !== "schema" && shape !== "payload")
|
|
366
|
-
return "unknown"; // composite/dyn projection
|
|
367
|
-
const schema = node.metadata.output;
|
|
368
|
-
if (!isRecord(schema))
|
|
369
|
-
return "unknown"; // no declared schema → dyn
|
|
370
|
-
const result = walkSchema(schema, ref.segments, 2, { requireDeclaredFields: true });
|
|
371
|
-
if (result.error && ctx) {
|
|
372
|
-
r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on step '${node.id}' output. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
|
|
373
|
-
}
|
|
374
|
-
return result.kind;
|
|
375
|
-
}
|
|
376
|
-
/** CEL functions whose result is a scalar, so their value is shell-safe even
|
|
377
|
-
* when an argument is an object/array. `json` is excluded: it serializes a
|
|
378
|
-
* whole structure into the command text, which is exactly what we warn about. */
|
|
379
|
-
const SCALAR_RETURNING_FUNCTIONS = new Set(["len", "startsWith", "matches", "size", "now"]);
|
|
380
|
-
/** Shell-safety: flag a non-scalar ${{ }} spliced into a cmd element. */
|
|
381
|
-
function checkCmdScalar(source, references, functions, ctx, r) {
|
|
382
|
-
let nonScalar = false;
|
|
383
|
-
let label = source.trim();
|
|
384
|
-
// A scalar-returning function wrapping the value makes the spliced result a
|
|
385
|
-
// scalar regardless of its argument shapes (e.g. len(steps.x.output.items)).
|
|
386
|
-
if (functions.some((fn) => SCALAR_RETURNING_FUNCTIONS.has(fn))) {
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
if (functions.includes("json")) {
|
|
390
|
-
nonScalar = true;
|
|
391
|
-
}
|
|
392
|
-
else if (references.length === 1 && isStaticReference(references[0])) {
|
|
393
|
-
const ref = references[0];
|
|
394
|
-
const kind = resolveReferenceKind(ref, r, ctx);
|
|
395
|
-
if (kind === "object" || kind === "array") {
|
|
396
|
-
nonScalar = true;
|
|
397
|
-
label = referenceToString(ref);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
if (nonScalar) {
|
|
401
|
-
r.diagnostics.warning("EXPR_NONSCALAR_IN_CMD", `Expression '${label}' evaluates to a non-scalar value spliced into a command; shell metacharacters will break it. Pass it through env: and read it with $VAR / os.environ instead.`, ctx.path);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
function checkStructuredTemplate(source, references, functions, ctx, r) {
|
|
405
|
-
if (functions.includes("json"))
|
|
406
|
-
return;
|
|
407
|
-
if (references.length !== 1 || !isStaticReference(references[0]))
|
|
408
|
-
return;
|
|
409
|
-
const ref = references[0];
|
|
410
|
-
const kind = resolveReferenceKind(ref, r, ctx);
|
|
411
|
-
if (kind !== "object" && kind !== "array")
|
|
412
|
-
return;
|
|
413
|
-
r.diagnostics.warning("EXPR_STRUCTURED_TEMPLATE", `Expression '${referenceToString(ref)}' evaluates to a structured value in a template string; wrap it with json(...) when JSON text is intended.`, ctx.path);
|
|
414
|
-
}
|
|
415
|
-
function resolveReferenceKind(ref, r, ctx) {
|
|
416
|
-
switch (ref.root) {
|
|
417
|
-
case "steps":
|
|
418
|
-
return resolveStepType(ref, r);
|
|
419
|
-
case "input":
|
|
420
|
-
return walkInputSchema(r.inputSchema, ref.segments).kind;
|
|
421
|
-
case "workflow":
|
|
422
|
-
return walkSchema(WORKFLOW_CONTEXT_SCHEMA, ref.segments, 0).kind;
|
|
423
|
-
case "item":
|
|
424
|
-
return ctx?.itemSchema ? walkSchema(ctx.itemSchema, ref.segments, 0, { requireDeclaredFields: true }).kind : "unknown";
|
|
425
|
-
default:
|
|
426
|
-
return "unknown";
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
function walkInputSchema(schema, segments) {
|
|
430
|
-
return walkSchema(schema, segments, 0, { allowOpenRootFields: true });
|
|
431
|
-
}
|
|
432
|
-
/** Walk JSON-Schema segments from `start`. Stops (kind=unknown) on open/dyn shapes unless declared fields are required. */
|
|
433
|
-
function walkSchema(schema, segments, start, options = {}) {
|
|
434
|
-
let cur = schema;
|
|
435
|
-
for (let i = start; i < segments.length; i++) {
|
|
436
|
-
const rawSeg = segments[i];
|
|
437
|
-
const seg = rawSeg.kind === "bracket" && typeof rawSeg.value === "string" && cur.type === "object"
|
|
438
|
-
? { kind: "field", name: rawSeg.value }
|
|
439
|
-
: rawSeg;
|
|
440
|
-
if (seg.kind === "index" || seg.kind === "bracket") {
|
|
441
|
-
if (cur.type === "array") {
|
|
442
|
-
const validArrayIndex = seg.kind === "index" || typeof seg.value === "number";
|
|
443
|
-
if (validArrayIndex && isRecord(cur.items)) {
|
|
444
|
-
cur = cur.items;
|
|
445
|
-
continue;
|
|
446
|
-
}
|
|
447
|
-
if (options.requireDeclaredFields === true) {
|
|
448
|
-
return { kind: "unknown", error: { field: "[]", available: [] } };
|
|
449
|
-
}
|
|
450
|
-
return { kind: "unknown" };
|
|
451
|
-
}
|
|
452
|
-
if (options.requireDeclaredFields === true) {
|
|
453
|
-
return { kind: "unknown", error: { field: "[]", available: declaredPropertyNames(cur) } };
|
|
454
|
-
}
|
|
455
|
-
return { kind: "unknown" };
|
|
456
|
-
}
|
|
457
|
-
// field segment
|
|
458
|
-
if (hasDeclaredProperties(cur) || (options.allowOpenRootFields === true && i === start && isRecord(cur.properties))) {
|
|
459
|
-
const properties = cur.properties;
|
|
460
|
-
if (Object.prototype.hasOwnProperty.call(properties, seg.name)) {
|
|
461
|
-
cur = properties[seg.name];
|
|
462
|
-
continue;
|
|
463
|
-
}
|
|
464
|
-
if (options.requireDeclaredFields !== true && !isClosedObject(cur))
|
|
465
|
-
return { kind: "unknown" };
|
|
466
|
-
return { kind: "unknown", error: { field: seg.name, available: Object.keys(properties) } };
|
|
467
|
-
}
|
|
468
|
-
if (options.requireDeclaredFields === true && cur.type === "object") {
|
|
469
|
-
return { kind: "unknown", error: { field: seg.name, available: [] } };
|
|
470
|
-
}
|
|
471
|
-
// open object / scalar / dyn — cannot validate this access
|
|
472
|
-
return { kind: "unknown" };
|
|
473
|
-
}
|
|
474
|
-
return { kind: schemaKind(cur) };
|
|
475
|
-
}
|
|
476
|
-
function isClosedObject(schema) {
|
|
477
|
-
return schema.type === "object" && isRecord(schema.properties) && schema.additionalProperties === false;
|
|
478
|
-
}
|
|
479
|
-
function hasDeclaredProperties(schema) {
|
|
480
|
-
return schema.type === "object" && isRecord(schema.properties);
|
|
481
|
-
}
|
|
482
|
-
function declaredPropertyNames(schema) {
|
|
483
|
-
return hasDeclaredProperties(schema) ? Object.keys(schema.properties) : [];
|
|
484
|
-
}
|
|
485
|
-
function schemaKind(schema) {
|
|
486
|
-
switch (schema.type) {
|
|
487
|
-
case "object":
|
|
488
|
-
return "object";
|
|
489
|
-
case "array":
|
|
490
|
-
return "array";
|
|
491
|
-
case "string":
|
|
492
|
-
case "integer":
|
|
493
|
-
case "number":
|
|
494
|
-
case "boolean":
|
|
495
|
-
return "scalar";
|
|
496
|
-
default:
|
|
497
|
-
return "unknown";
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
const WORKFLOW_CONTEXT_SCHEMA = {
|
|
501
|
-
type: "object",
|
|
502
|
-
additionalProperties: false,
|
|
503
|
-
properties: {
|
|
504
|
-
name: { type: "string" },
|
|
505
|
-
description: { type: "string" },
|
|
506
|
-
source_path: { type: "string" },
|
|
507
|
-
source_dir: { type: "string" }
|
|
508
|
-
}
|
|
509
|
-
};
|
|
510
|
-
function describeScope(ctx) {
|
|
511
|
-
const locals = [...ctx.locals].sort();
|
|
512
|
-
return locals.length > 0 ? ` In-scope locals: ${locals.join(", ")}.` : "";
|
|
513
|
-
}
|
|
514
|
-
function indexNodes(node, out) {
|
|
515
|
-
if (node.id)
|
|
516
|
-
out.set(node.id, node);
|
|
517
|
-
for (const child of node.children ?? [])
|
|
518
|
-
indexNodes(child, out);
|
|
519
|
-
for (const branch of node.branches ?? []) {
|
|
520
|
-
indexNodes(branch.child, out);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
function unionLocals(stack) {
|
|
524
|
-
const out = new Set();
|
|
525
|
-
for (const frame of stack)
|
|
526
|
-
for (const local of frame)
|
|
527
|
-
out.add(local);
|
|
528
|
-
return out;
|
|
529
|
-
}
|
|
530
|
-
/** Visit every string leaf in a nested structure, yielding (value, jsonPath). */
|
|
531
|
-
function visitStrings(value, path, visit) {
|
|
532
|
-
if (typeof value === "string") {
|
|
533
|
-
visit(value, path);
|
|
534
|
-
return;
|
|
535
|
-
}
|
|
536
|
-
if (Array.isArray(value)) {
|
|
537
|
-
value.forEach((item, index) => visitStrings(item, `${path}[${index}]`, visit));
|
|
538
|
-
return;
|
|
539
|
-
}
|
|
540
|
-
if (isRecord(value)) {
|
|
541
|
-
for (const [key, child] of Object.entries(value))
|
|
542
|
-
visitStrings(child, `${path}.${key}`, visit);
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
//# sourceMappingURL=expression-scope.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expression-scope.js","sourceRoot":"","sources":["../src/expression-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Primitives shared by the expression collector (expressions.ts) and the AST
|
|
3
|
-
* reference extractor (cel-ast.ts), kept in their own module to avoid a circular
|
|
4
|
-
* import between those two files.
|
|
5
|
-
*/
|
|
6
|
-
export declare const EXPRESSION_PATTERN: RegExp;
|
|
7
|
-
export declare function rawCelFieldName(pathOrKey: string): string | undefined;
|
|
8
|
-
/**
|
|
9
|
-
* The CEL parser/evaluator does not allow `loop` as a bare identifier root in
|
|
10
|
-
* every position, so Acpus rewrites the logical `loop.` scope to `loop_ctx.`
|
|
11
|
-
* before parsing or evaluating. The runtime evaluator binds `loop_ctx`
|
|
12
|
-
* accordingly; the AST extractor normalizes it back to `loop`.
|
|
13
|
-
*
|
|
14
|
-
* The negative lookbehind keeps `loop.` rooted: a dotted access like
|
|
15
|
-
* `steps.loop.output` (a step named `loop`) is left untouched, since `\b`
|
|
16
|
-
* alone matches at the `.`→`l` boundary and would corrupt the reference.
|
|
17
|
-
*/
|
|
18
|
-
export declare function toCelParseSource(source: string): string;
|
|
19
|
-
//# sourceMappingURL=expressions-shared.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expressions-shared.d.ts","sourceRoot":"","sources":["../src/expressions-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB,QAAgC,CAAC;AAIhE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Primitives shared by the expression collector (expressions.ts) and the AST
|
|
3
|
-
* reference extractor (cel-ast.ts), kept in their own module to avoid a circular
|
|
4
|
-
* import between those two files.
|
|
5
|
-
*/
|
|
6
|
-
export const EXPRESSION_PATTERN = /\$\{\{\s*([\s\S]*?)\s*\}\}/g;
|
|
7
|
-
const RAW_CEL_FIELD_NAMES = new Set(["over", "until", "when"]);
|
|
8
|
-
export function rawCelFieldName(pathOrKey) {
|
|
9
|
-
if (/\.if\.condition$/.test(pathOrKey))
|
|
10
|
-
return "condition";
|
|
11
|
-
const fieldName = pathOrKey.split(".").pop() ?? "";
|
|
12
|
-
return RAW_CEL_FIELD_NAMES.has(fieldName) ? fieldName : undefined;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* The CEL parser/evaluator does not allow `loop` as a bare identifier root in
|
|
16
|
-
* every position, so Acpus rewrites the logical `loop.` scope to `loop_ctx.`
|
|
17
|
-
* before parsing or evaluating. The runtime evaluator binds `loop_ctx`
|
|
18
|
-
* accordingly; the AST extractor normalizes it back to `loop`.
|
|
19
|
-
*
|
|
20
|
-
* The negative lookbehind keeps `loop.` rooted: a dotted access like
|
|
21
|
-
* `steps.loop.output` (a step named `loop`) is left untouched, since `\b`
|
|
22
|
-
* alone matches at the `.`→`l` boundary and would corrupt the reference.
|
|
23
|
-
*/
|
|
24
|
-
export function toCelParseSource(source) {
|
|
25
|
-
return source.replace(/(?<!\.)\bloop\./g, "loop_ctx.");
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=expressions-shared.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expressions-shared.js","sourceRoot":"","sources":["../src/expressions-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAEhE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,WAAW,CAAC;IAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACnD,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC"}
|
package/dist/expressions.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { DiagnosticBag } from "./diagnostics.js";
|
|
2
|
-
import type { IrExpression } from "./types.js";
|
|
3
|
-
export { EXPRESSION_PATTERN, rawCelFieldName, toCelParseSource } from "./expressions-shared.js";
|
|
4
|
-
export interface ExpressionCollector {
|
|
5
|
-
expressions: IrExpression[];
|
|
6
|
-
visit(value: unknown, path: string): void;
|
|
7
|
-
}
|
|
8
|
-
export declare function createExpressionCollector(diagnostics: DiagnosticBag, knownStepIds: Set<string>): ExpressionCollector;
|
|
9
|
-
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhG,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAsFpH"}
|