automategraph 1.5.1 → 1.5.3
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/CHANGELOG.md +18 -5
- package/UPGRADE-PROPOSAL.md +141 -0
- package/docs/diagrams/c19-resilience-scenario.md +61 -0
- package/docs/diagrams/c19-resilience-scenario.mmd +28 -0
- package/docs/diagrams/c19-resilience-scenario.svg +181 -0
- package/examples/README.md +206 -0
- package/examples/branching-edges.ts +192 -0
- package/examples/branching-graph.ts +333 -0
- package/examples/branching-router.ts +475 -0
- package/examples/json-graph.ts +231 -0
- package/examples/json-scripts.ts +152 -0
- package/examples/order-flow.functions.cjs +32 -0
- package/examples/order-flow.graph.json +27 -0
- package/examples/order-flow.scripted.graph.json +68 -0
- package/js/examples/branching-edges.js +133 -0
- package/js/examples/branching-edges.js.map +1 -0
- package/js/examples/branching-graph.js +232 -0
- package/js/examples/branching-graph.js.map +1 -0
- package/js/examples/branching-router.js +305 -0
- package/js/examples/branching-router.js.map +1 -0
- package/js/examples/json-graph.js +197 -0
- package/js/examples/json-graph.js.map +1 -0
- package/js/examples/json-scripts.js +131 -0
- package/js/examples/json-scripts.js.map +1 -0
- package/js/tests/async.test.js +592 -0
- package/js/tests/async.test.js.map +1 -0
- package/js/tests/complex.test.js +972 -0
- package/js/tests/complex.test.js.map +1 -0
- package/js/tests/conformance.test.js +365 -0
- package/js/tests/conformance.test.js.map +1 -0
- package/js/tests/edges.test.js +702 -0
- package/js/tests/edges.test.js.map +1 -0
- package/js/tests/graphjson.test.js +504 -0
- package/js/tests/graphjson.test.js.map +1 -0
- package/js/tests/harness.js +192 -0
- package/js/tests/harness.js.map +1 -0
- package/js/tests/helpers.js +136 -0
- package/js/tests/helpers.js.map +1 -0
- package/js/tests/lint.test.js +317 -0
- package/js/tests/lint.test.js.map +1 -0
- package/js/tests/registry.test.js +705 -0
- package/js/tests/registry.test.js.map +1 -0
- package/js/tests/report.js +422 -0
- package/js/tests/report.js.map +1 -0
- package/js/tests/runner.js +67 -0
- package/js/tests/runner.js.map +1 -0
- package/js/tests/scripts.test.js +552 -0
- package/js/tests/scripts.test.js.map +1 -0
- package/js/tests/unit.test.js +1239 -0
- package/js/tests/unit.test.js.map +1 -0
- package/js/tests/upgrade.test.js +618 -0
- package/js/tests/upgrade.test.js.map +1 -0
- package/package.json +2 -9
- package/report/index.html +3727 -0
- package/report/report.json +3053 -0
- package/tests/async.test.ts +668 -0
- package/tests/complex.test.ts +1123 -0
- package/tests/conformance.test.ts +442 -0
- package/tests/edges.test.ts +848 -0
- package/tests/fixtures/scripts/bad-registration.cjs +4 -0
- package/tests/fixtures/scripts/broken.cjs +2 -0
- package/tests/fixtures/scripts/cjs-default.js +4 -0
- package/tests/fixtures/scripts/collide-a.cjs +4 -0
- package/tests/fixtures/scripts/collide-b.cjs +4 -0
- package/tests/fixtures/scripts/empty.cjs +2 -0
- package/tests/fixtures/scripts/esm-functions.mjs +10 -0
- package/tests/fixtures/scripts/esm-syntax.js +3 -0
- package/tests/fixtures/scripts/global-channel.cjs +6 -0
- package/tests/fixtures/scripts/global-channel.mjs +7 -0
- package/tests/fixtures/scripts/mismatch.cjs +4 -0
- package/tests/fixtures/scripts/needs-sibling.cjs +7 -0
- package/tests/fixtures/scripts/order.cjs +14 -0
- package/tests/fixtures/scripts/sibling-helper.cjs +3 -0
- package/tests/fixtures/scripts/throwing-global.mjs +6 -0
- package/tests/graphjson.test.ts +737 -0
- package/tests/harness.ts +291 -0
- package/tests/helpers.ts +216 -0
- package/tests/lint.test.ts +381 -0
- package/tests/registry.test.ts +1134 -0
- package/tests/report.ts +452 -0
- package/tests/runner.ts +58 -0
- package/tests/scripts.test.ts +970 -0
- package/tests/unit.test.ts +1192 -0
- package/tests/upgrade.test.ts +725 -0
- package/tools/server.mjs +152 -0
- package/tsconfig.browser.json +19 -0
- package/tsconfig.json +18 -0
- package/tsconfig.publish.json +13 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branching-graph.js","sourceRoot":"","sources":["../../examples/branching-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ============================================================
|
|
3
|
+
* Branching router example — the a → b/c/d/e/f picture
|
|
4
|
+
* ------------------------------------------------------------
|
|
5
|
+
* The graph under discussion:
|
|
6
|
+
*
|
|
7
|
+
* a ── result === 1 ────────────────▶ b ──(forces)──▶ f
|
|
8
|
+
* a ── test(result) === true ───────▶ c
|
|
9
|
+
* a ── otherwise ───────────────────▶ d
|
|
10
|
+
* a ── on throw ────────────────────▶ e
|
|
11
|
+
* a ── on retry ────────────────────▶ f
|
|
12
|
+
*
|
|
13
|
+
* WHY THIS IS NOT A SINGLE GraphDefinition
|
|
14
|
+
* GraphDefinition.next is an UNCONDITIONAL fan-out: every target is
|
|
15
|
+
* scheduled, every time. The engine also has no "goto" and no
|
|
16
|
+
* per-attempt transition. So the arrows above cannot be encoded in
|
|
17
|
+
* the definition — they are routing *decisions*, and decisions need
|
|
18
|
+
* a place to run. This file keeps src/automategraph.ts untouched and
|
|
19
|
+
* puts the decisions in a small host-side router: one engine
|
|
20
|
+
* execution per step, the router inspects the finished execution
|
|
21
|
+
* (output / attempts / errors / control events) and chooses the next
|
|
22
|
+
* hop.
|
|
23
|
+
*
|
|
24
|
+
* Arrow → mechanism used here (all engine-native)
|
|
25
|
+
* ------------------------------------------------------------------
|
|
26
|
+
* result === 1 → returned value + ordered `routes` predicate
|
|
27
|
+
* test(...) === true→ returned value + ordered `routes` predicate
|
|
28
|
+
* otherwise → `otherwise` fallback target
|
|
29
|
+
* on throw → report.status / unhandled error → `onThrow`
|
|
30
|
+
* on retry → context.attempt > 1 (seen via node.started) → `onRetry`
|
|
31
|
+
* b forces f → b returns void and emits "router.goto" on the
|
|
32
|
+
* public event bus; the router honours the request
|
|
33
|
+
*
|
|
34
|
+
* Decision precedence (first match wins): goto → throw → retry →
|
|
35
|
+
* routes → otherwise → stop. Flip `onRetry` before `onThrow` in
|
|
36
|
+
* decide() if you prefer "any retry goes to f, even a failed one".
|
|
37
|
+
*
|
|
38
|
+
* Run it: npm run example:branching
|
|
39
|
+
* Exits non-zero if any scenario deviates from its expected path, so
|
|
40
|
+
* it doubles as a smoke test.
|
|
41
|
+
* ============================================================ */
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.GOTO_EVENT = exports.test = void 0;
|
|
44
|
+
exports.buildSteps = buildSteps;
|
|
45
|
+
exports.decide = decide;
|
|
46
|
+
exports.runWalk = runWalk;
|
|
47
|
+
const automategraph_1 = require("../src/automategraph");
|
|
48
|
+
/** The spec's `test(result)`: decides between c and d. */
|
|
49
|
+
const test = (result) => result === 2;
|
|
50
|
+
exports.test = test;
|
|
51
|
+
/** Event a node emits when it wants to force the next hop from inside. */
|
|
52
|
+
exports.GOTO_EVENT = "router.goto";
|
|
53
|
+
/* =========================
|
|
54
|
+
* 2. The nodes
|
|
55
|
+
* ========================= */
|
|
56
|
+
function buildSteps(state) {
|
|
57
|
+
return {
|
|
58
|
+
/**
|
|
59
|
+
* a — produces 1 | 2 | 3, or throws.
|
|
60
|
+
* It carries the whole arrow table from the picture.
|
|
61
|
+
*/
|
|
62
|
+
a: {
|
|
63
|
+
run: (_state, context) => {
|
|
64
|
+
if (state.seed === "throw") {
|
|
65
|
+
throw new Error("a: upstream exploded");
|
|
66
|
+
}
|
|
67
|
+
if (state.seed === "retry" && context.attempt === 1) {
|
|
68
|
+
throw new Error(`a: transient failure on attempt ${context.attempt}`);
|
|
69
|
+
}
|
|
70
|
+
// On the retry path, attempt 2 succeeds with value 2.
|
|
71
|
+
return state.seed === "retry" ? 2 : state.seed;
|
|
72
|
+
},
|
|
73
|
+
retry: { maxAttempts: 2, delayMs: 10 },
|
|
74
|
+
errorPolicy: "RETRY",
|
|
75
|
+
routes: {
|
|
76
|
+
routes: [
|
|
77
|
+
{ when: value => value === 1, to: "b" },
|
|
78
|
+
{ when: value => typeof value === "number" && (0, exports.test)(value), to: "c" }
|
|
79
|
+
],
|
|
80
|
+
otherwise: "d",
|
|
81
|
+
onThrow: "e",
|
|
82
|
+
onRetry: "f"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
/**
|
|
86
|
+
* b — returns void, but forces the walk to f *from inside its own
|
|
87
|
+
* execution* by emitting a control message. The engine never
|
|
88
|
+
* schedules the jump; the router (host code) performs it.
|
|
89
|
+
*/
|
|
90
|
+
b: {
|
|
91
|
+
run: async (_state, context) => {
|
|
92
|
+
await context.emit(exports.GOTO_EVENT, {
|
|
93
|
+
to: "f",
|
|
94
|
+
reason: "b short-circuits to f"
|
|
95
|
+
});
|
|
96
|
+
return undefined; // void, as specified
|
|
97
|
+
},
|
|
98
|
+
// Belt and braces: also true if a goto is ever ignored.
|
|
99
|
+
routes: { otherwise: "f" }
|
|
100
|
+
},
|
|
101
|
+
c: { run: () => "c: even result handled" },
|
|
102
|
+
d: { run: () => "d: fallback branch handled" },
|
|
103
|
+
/** e — the throw route; can read the failure the router recorded. */
|
|
104
|
+
e: {
|
|
105
|
+
run: () => `e: recovered from ${state.lastError?.nodeId ?? "?"} (${state.lastError?.code ?? "?"})`
|
|
106
|
+
},
|
|
107
|
+
f: { run: () => "f: retry/forced path handled" }
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/* =========================
|
|
111
|
+
* 3. One step = one execution
|
|
112
|
+
* ========================= */
|
|
113
|
+
/**
|
|
114
|
+
* Build the single-node graph for a hop. The node is BOTH the entry
|
|
115
|
+
* and the terminal, which keeps the graph lint-clean (the v1.2
|
|
116
|
+
* SUCCESS_DEAD_END rule needs each non-terminal node to have a
|
|
117
|
+
* `next`) and guarantees the engine schedules nothing on its own.
|
|
118
|
+
*
|
|
119
|
+
* `onThrow` is deliberately NOT declared on the engine node: its
|
|
120
|
+
* target would have to exist inside this one-node graph, and error
|
|
121
|
+
* routing is the router's job here (see decide()).
|
|
122
|
+
*/
|
|
123
|
+
function stepGraph(id, step, state) {
|
|
124
|
+
const definition = {
|
|
125
|
+
id,
|
|
126
|
+
run: (context) => step.run(state, context),
|
|
127
|
+
retry: step.retry,
|
|
128
|
+
errorPolicy: step.errorPolicy
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
id: `branching-step:${id}`,
|
|
132
|
+
version: "1.0.0",
|
|
133
|
+
entryNodes: [id],
|
|
134
|
+
terminalNodes: [id],
|
|
135
|
+
nodes: { [id]: definition }
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function isGotoRequest(value) {
|
|
139
|
+
return (typeof value === "object" &&
|
|
140
|
+
value !== null &&
|
|
141
|
+
typeof value.to === "string");
|
|
142
|
+
}
|
|
143
|
+
async function runOne(nodeId, step, state, storage) {
|
|
144
|
+
const engine = new automategraph_1.GraphExecutionEngine(stepGraph(nodeId, step, state), {
|
|
145
|
+
storage,
|
|
146
|
+
maxActivations: 1 // a hop starts exactly one activation
|
|
147
|
+
});
|
|
148
|
+
let attempts = 0;
|
|
149
|
+
const gotoRequests = [];
|
|
150
|
+
// Required listeners are awaited by the bus, so by the time run()
|
|
151
|
+
// resolves we have the true attempt count and every goto request.
|
|
152
|
+
engine.events.on("node.started", payload => {
|
|
153
|
+
const { attempt } = payload;
|
|
154
|
+
attempts = Math.max(attempts, attempt);
|
|
155
|
+
}, { required: true });
|
|
156
|
+
engine.events.on(exports.GOTO_EVENT, payload => {
|
|
157
|
+
if (isGotoRequest(payload))
|
|
158
|
+
gotoRequests.push(payload);
|
|
159
|
+
}, { required: true });
|
|
160
|
+
const report = await engine.run();
|
|
161
|
+
return { report, attempts, gotoRequests };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Decision precedence: goto → throw → retry → returned value → stop.
|
|
165
|
+
* A *failed* step goes to `onThrow` even when it consumed retries;
|
|
166
|
+
* `onRetry` is for a step that recovered on a later attempt.
|
|
167
|
+
*/
|
|
168
|
+
function decide(routes, run) {
|
|
169
|
+
const { report, attempts, gotoRequests } = run;
|
|
170
|
+
if (gotoRequests.length > 0) {
|
|
171
|
+
const request = gotoRequests[0];
|
|
172
|
+
return {
|
|
173
|
+
by: "goto",
|
|
174
|
+
to: request.to,
|
|
175
|
+
reason: `forced from inside the node (${request.reason ?? "no reason given"})`
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const failed = report.status !== "COMPLETED";
|
|
179
|
+
if (failed) {
|
|
180
|
+
if (routes?.onThrow) {
|
|
181
|
+
return { by: "throw", to: routes.onThrow, reason: `step ended ${report.status}` };
|
|
182
|
+
}
|
|
183
|
+
return { by: "none", reason: `step ended ${report.status} and no onThrow is declared` };
|
|
184
|
+
}
|
|
185
|
+
if (attempts > 1 && routes?.onRetry) {
|
|
186
|
+
return { by: "retry", to: routes.onRetry, reason: `recovered on attempt ${attempts}` };
|
|
187
|
+
}
|
|
188
|
+
const output = report.results[0]?.output;
|
|
189
|
+
for (const route of routes?.routes ?? []) {
|
|
190
|
+
if (route.when(output)) {
|
|
191
|
+
return { by: "return", to: route.to, reason: "value route matched" };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (routes?.otherwise) {
|
|
195
|
+
return { by: "otherwise", to: routes.otherwise, reason: "no value route matched" };
|
|
196
|
+
}
|
|
197
|
+
return { by: "none", reason: "no transition declared; walk complete" };
|
|
198
|
+
}
|
|
199
|
+
/* =========================
|
|
200
|
+
* 5. The walk factory (public entry point)
|
|
201
|
+
* ========================= */
|
|
202
|
+
/**
|
|
203
|
+
* Seeds the walk, builds the steps against the shared state, and runs
|
|
204
|
+
* the router loop. This is the whole "interpreter": run one node, read
|
|
205
|
+
* its outcome, follow the matching arrow.
|
|
206
|
+
*/
|
|
207
|
+
async function runWalk(seed, options = {}) {
|
|
208
|
+
const storage = options.storage ?? new automategraph_1.InMemoryStorage();
|
|
209
|
+
const maxSteps = options.maxSteps ?? 64;
|
|
210
|
+
const state = { seed, visited: [], notes: [] };
|
|
211
|
+
const steps = buildSteps(state);
|
|
212
|
+
const hops = [];
|
|
213
|
+
const executionIds = [];
|
|
214
|
+
let current = "a";
|
|
215
|
+
while (current !== undefined) {
|
|
216
|
+
if (hops.length >= maxSteps) {
|
|
217
|
+
throw new automategraph_1.AutomateGraphError(`Walk exceeded maxSteps=${maxSteps} (possible cycle)`, "WALK_STEP_LIMIT", { visited: [...state.visited] });
|
|
218
|
+
}
|
|
219
|
+
const step = steps[current];
|
|
220
|
+
if (!step) {
|
|
221
|
+
throw new automategraph_1.AutomateGraphError(`Route target "${current}" has no node definition`, "ROUTE_TARGET_UNKNOWN", { visited: [...state.visited] });
|
|
222
|
+
}
|
|
223
|
+
const startedAt = Date.now();
|
|
224
|
+
const run = await runOne(current, step, state, storage);
|
|
225
|
+
const { report, attempts, gotoRequests } = run;
|
|
226
|
+
// Record the failure so the next hop (e) can read it.
|
|
227
|
+
const unhandled = report.errors.find(error => !error.handled);
|
|
228
|
+
if (unhandled) {
|
|
229
|
+
state.lastError = {
|
|
230
|
+
nodeId: unhandled.nodeId ?? current,
|
|
231
|
+
code: unhandled.code,
|
|
232
|
+
message: unhandled.message
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
const decision = decide(step.routes, run);
|
|
236
|
+
const hop = {
|
|
237
|
+
step: hops.length + 1,
|
|
238
|
+
nodeId: current,
|
|
239
|
+
executionId: report.executionId,
|
|
240
|
+
status: report.status,
|
|
241
|
+
attempts,
|
|
242
|
+
output: report.results[0]?.output,
|
|
243
|
+
errorCode: report.errors[0]?.code,
|
|
244
|
+
decision,
|
|
245
|
+
durationMs: Date.now() - startedAt
|
|
246
|
+
};
|
|
247
|
+
hops.push(hop);
|
|
248
|
+
executionIds.push(report.executionId);
|
|
249
|
+
state.visited.push(current);
|
|
250
|
+
options.onHop?.(hop);
|
|
251
|
+
if (gotoRequests.length > 1) {
|
|
252
|
+
state.notes.push(`${current} requested ${gotoRequests.length} jumps; using the first`);
|
|
253
|
+
}
|
|
254
|
+
current = decision.to;
|
|
255
|
+
}
|
|
256
|
+
return { result: { hops, path: state.visited, executionIds }, state };
|
|
257
|
+
}
|
|
258
|
+
/* =========================
|
|
259
|
+
* 6. Demo — proves the picture
|
|
260
|
+
* ========================= */
|
|
261
|
+
const SCENARIOS = [
|
|
262
|
+
{ label: "result === 1 → b, then b forces f", seed: 1, expected: ["a", "b", "f"] },
|
|
263
|
+
{ label: "test(result) === true → c", seed: 2, expected: ["a", "c"] },
|
|
264
|
+
{ label: "otherwise → d", seed: 3, expected: ["a", "d"] },
|
|
265
|
+
{ label: "on throw → e", seed: "throw", expected: ["a", "e"] },
|
|
266
|
+
{ label: "on retry (recovered) → f", seed: "retry", expected: ["a", "f"] }
|
|
267
|
+
];
|
|
268
|
+
function show(value) {
|
|
269
|
+
return value === undefined ? "undefined" : JSON.stringify(value);
|
|
270
|
+
}
|
|
271
|
+
async function main() {
|
|
272
|
+
const storage = new automategraph_1.InMemoryStorage();
|
|
273
|
+
let failures = 0;
|
|
274
|
+
console.log("=".repeat(96));
|
|
275
|
+
console.log("Branching router — engine untouched, arrows resolved by the host-side router");
|
|
276
|
+
console.log("=".repeat(96));
|
|
277
|
+
for (const scenario of SCENARIOS) {
|
|
278
|
+
const { result } = await runWalk(scenario.seed, { storage });
|
|
279
|
+
const path = result.path.join(" → ");
|
|
280
|
+
const expected = scenario.expected.join(" → ");
|
|
281
|
+
const ok = path === expected;
|
|
282
|
+
if (!ok)
|
|
283
|
+
failures += 1;
|
|
284
|
+
console.log(`\n▶ seed = ${JSON.stringify(scenario.seed)} ${scenario.label}`);
|
|
285
|
+
for (const hop of result.hops) {
|
|
286
|
+
const target = hop.decision.to ? `→ ${hop.decision.to}` : "stop";
|
|
287
|
+
console.log(` hop ${hop.step} ${hop.nodeId} ${hop.status.padEnd(9)}` +
|
|
288
|
+
` attempts=${hop.attempts} output=${show(hop.output).padEnd(42)}` +
|
|
289
|
+
` ${hop.decision.by.padEnd(9)} ${target} (${hop.decision.reason})`);
|
|
290
|
+
}
|
|
291
|
+
console.log(` path: ${path} ${ok ? "✓ as expected" : `✗ expected ${expected}`}`);
|
|
292
|
+
}
|
|
293
|
+
const snapshotIds = await storage.listExecutionIds();
|
|
294
|
+
console.log(`\n${"-".repeat(96)}`);
|
|
295
|
+
console.log(`scenarios: ${SCENARIOS.length - failures}/${SCENARIOS.length} matched · ` +
|
|
296
|
+
`engine executions (one per hop): ${snapshotIds.length} · ` +
|
|
297
|
+
`checkpoints retrievable via storage.load(executionId)`);
|
|
298
|
+
if (failures > 0) {
|
|
299
|
+
process.exitCode = 1;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (require.main === module) {
|
|
303
|
+
void main();
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=branching-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branching-router.js","sourceRoot":"","sources":["../../examples/branching-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ============================================================
|
|
3
|
+
* Graph as a DATA FILE (v1.4)
|
|
4
|
+
* ------------------------------------------------------------
|
|
5
|
+
* examples/order-flow.graph.json declares nodes and edges, but no
|
|
6
|
+
* JavaScript. Every function is referenced by name and supplied to the
|
|
7
|
+
* engine at construction, so the SAME document runs against different
|
|
8
|
+
* implementations:
|
|
9
|
+
*
|
|
10
|
+
* classify ── isPriority ──▶ charge ──▶ ship
|
|
11
|
+
* ── "manual" ────▶ manual
|
|
12
|
+
* ── else ────────▶ reject
|
|
13
|
+
*
|
|
14
|
+
* Scenario D runs the document with a registry that is missing
|
|
15
|
+
* `shipOrder` — nothing throws at build time; the activation fails with
|
|
16
|
+
* UNKNOWN_FUNCTION and the run settles FAILED.
|
|
17
|
+
*
|
|
18
|
+
* Run: npm run example:graphjson (after npm run build)
|
|
19
|
+
* ============================================================ */
|
|
20
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(o, k2, desc);
|
|
27
|
+
}) : (function(o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
}));
|
|
31
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
32
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
33
|
+
}) : function(o, v) {
|
|
34
|
+
o["default"] = v;
|
|
35
|
+
});
|
|
36
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const graph_json_1 = require("../src/graph-json");
|
|
47
|
+
const DOCUMENT_PATH = path.join(__dirname, "..", "..", "examples", "order-flow.graph.json");
|
|
48
|
+
/* ---------------------------------------------------------------
|
|
49
|
+
* The implementations, keyed by the names the document uses.
|
|
50
|
+
* ------------------------------------------------------------- */
|
|
51
|
+
function isPriority(value) {
|
|
52
|
+
return value === "priority";
|
|
53
|
+
}
|
|
54
|
+
function chargeCard(context) {
|
|
55
|
+
if (context.attempt === 1) {
|
|
56
|
+
throw new Error("chargeCard: gateway timeout (transient)");
|
|
57
|
+
}
|
|
58
|
+
return "charged";
|
|
59
|
+
}
|
|
60
|
+
function shipOrder() {
|
|
61
|
+
return "shipped";
|
|
62
|
+
}
|
|
63
|
+
function manualReview() {
|
|
64
|
+
return "queued for a human";
|
|
65
|
+
}
|
|
66
|
+
function rejectOrder() {
|
|
67
|
+
return "rejected";
|
|
68
|
+
}
|
|
69
|
+
/*
|
|
70
|
+
* Three classifier IMPLEMENTATIONS — the document itself never changes.
|
|
71
|
+
* Each has its own source, so the registry fingerprint moves with it.
|
|
72
|
+
*/
|
|
73
|
+
function classifyAsPriority() {
|
|
74
|
+
return "priority";
|
|
75
|
+
}
|
|
76
|
+
function classifyAsManual() {
|
|
77
|
+
return "manual";
|
|
78
|
+
}
|
|
79
|
+
function classifyAsStandard() {
|
|
80
|
+
return "standard";
|
|
81
|
+
}
|
|
82
|
+
const SCENARIOS = [
|
|
83
|
+
{
|
|
84
|
+
label: "priority order → charge → ship",
|
|
85
|
+
registry: {
|
|
86
|
+
classifyOrder: classifyAsPriority,
|
|
87
|
+
isPriority,
|
|
88
|
+
chargeCard,
|
|
89
|
+
shipOrder,
|
|
90
|
+
manualReview,
|
|
91
|
+
rejectOrder
|
|
92
|
+
},
|
|
93
|
+
expect: "classify → charge → ship",
|
|
94
|
+
expectStatus: "COMPLETED"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
label: 'returned "manual" → manual review',
|
|
98
|
+
registry: {
|
|
99
|
+
classifyOrder: classifyAsManual,
|
|
100
|
+
isPriority,
|
|
101
|
+
chargeCard,
|
|
102
|
+
shipOrder,
|
|
103
|
+
manualReview,
|
|
104
|
+
rejectOrder
|
|
105
|
+
},
|
|
106
|
+
expect: "classify → manual",
|
|
107
|
+
expectStatus: "COMPLETED"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
label: "anything else → else edge → reject",
|
|
111
|
+
registry: {
|
|
112
|
+
classifyOrder: classifyAsStandard,
|
|
113
|
+
isPriority,
|
|
114
|
+
chargeCard,
|
|
115
|
+
shipOrder,
|
|
116
|
+
manualReview,
|
|
117
|
+
rejectOrder
|
|
118
|
+
},
|
|
119
|
+
expect: "classify → reject",
|
|
120
|
+
expectStatus: "COMPLETED"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
label: "registry missing shipOrder → UNKNOWN_FUNCTION",
|
|
124
|
+
registry: {
|
|
125
|
+
classifyOrder: classifyAsPriority,
|
|
126
|
+
isPriority,
|
|
127
|
+
chargeCard,
|
|
128
|
+
manualReview,
|
|
129
|
+
rejectOrder
|
|
130
|
+
},
|
|
131
|
+
expect: "classify → charge",
|
|
132
|
+
expectStatus: "FAILED"
|
|
133
|
+
}
|
|
134
|
+
];
|
|
135
|
+
async function main() {
|
|
136
|
+
const document = fs.readFileSync(DOCUMENT_PATH, "utf8");
|
|
137
|
+
console.log("=".repeat(96));
|
|
138
|
+
console.log(`graph as a data file — ${path.basename(DOCUMENT_PATH)}`);
|
|
139
|
+
console.log("=".repeat(96));
|
|
140
|
+
/* Parsing needs no registry at all: names resolve lazily. */
|
|
141
|
+
const definition = (0, graph_json_1.parseGraphJSON)(document);
|
|
142
|
+
console.log(`parsed: ${definition.id} v${definition.version}, ` +
|
|
143
|
+
`${Object.keys(definition.nodes).length} nodes, ` +
|
|
144
|
+
`${definition.entryNodes.join(",")} → ${definition.terminalNodes.join(",")}\n`);
|
|
145
|
+
let failures = 0;
|
|
146
|
+
let previousFingerprint;
|
|
147
|
+
for (const scenario of SCENARIOS) {
|
|
148
|
+
const engine = (0, graph_json_1.createEngineFromJSON)(document, {
|
|
149
|
+
functions: scenario.registry,
|
|
150
|
+
lint: "error",
|
|
151
|
+
onLog: (level, message) => {
|
|
152
|
+
if (level === "warn" || level === "error") {
|
|
153
|
+
console.log(` log[${level}] ${message}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
const report = await engine.run();
|
|
158
|
+
const path2 = report.results
|
|
159
|
+
.filter(result => result.status === "SUCCEEDED")
|
|
160
|
+
.map(result => result.nodeId)
|
|
161
|
+
.join(" → ");
|
|
162
|
+
const ok = report.status === scenario.expectStatus &&
|
|
163
|
+
path2 === scenario.expect;
|
|
164
|
+
if (!ok)
|
|
165
|
+
failures += 1;
|
|
166
|
+
const fingerprint = report.registry?.fingerprint ?? "(none)";
|
|
167
|
+
const drift = previousFingerprint !== undefined &&
|
|
168
|
+
previousFingerprint !== fingerprint
|
|
169
|
+
? " ← registry changed (fingerprint moved)"
|
|
170
|
+
: "";
|
|
171
|
+
previousFingerprint = fingerprint;
|
|
172
|
+
console.log(`▶ ${scenario.label}`);
|
|
173
|
+
console.log(` ${report.status} path: ${path2 || "(none)"} ` +
|
|
174
|
+
`${ok ? "✓" : `✗ expected ${scenario.expectStatus} / ${scenario.expect}`}`);
|
|
175
|
+
console.log(` registry ${fingerprint}${drift}`);
|
|
176
|
+
console.log(` names: ${(report.registry?.names ?? []).join(", ")}`);
|
|
177
|
+
for (const result of report.results) {
|
|
178
|
+
if (result.fn) {
|
|
179
|
+
console.log(` ${result.nodeId.padEnd(9)} fn=${result.fn} ` +
|
|
180
|
+
`attempt=${result.attempt} ${result.status}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
for (const error of report.errors) {
|
|
184
|
+
console.log(` error ${error.code} @${error.nodeId ?? "?"} ` +
|
|
185
|
+
`handled=${error.handled} ${error.message}`);
|
|
186
|
+
}
|
|
187
|
+
console.log("");
|
|
188
|
+
}
|
|
189
|
+
console.log("-".repeat(96));
|
|
190
|
+
console.log(`scenarios: ${SCENARIOS.length - failures}/${SCENARIOS.length} matched`);
|
|
191
|
+
if (failures > 0)
|
|
192
|
+
process.exitCode = 1;
|
|
193
|
+
}
|
|
194
|
+
if (require.main === module) {
|
|
195
|
+
void main();
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=json-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-graph.js","sourceRoot":"","sources":["../../examples/json-graph.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;kEAiBkE;;;;;;;;;;;;;;;;;;;;;;;;;AAElE,uCAAyB;AACzB,2CAA6B;AAM7B,kDAG2B;AAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,uBAAuB,CACxB,CAAC;AAEF;;mEAEmE;AAEnE,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,KAAK,UAAU,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,OAAoB;IACtC,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB;IACzB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,SAAS,GAKV;IACH;QACE,KAAK,EAAE,gCAAgC;QACvC,QAAQ,EAAE;YACR,aAAa,EAAE,kBAAkB;YACjC,UAAU;YACV,UAAU;YACV,SAAS;YACT,YAAY;YACZ,WAAW;SACZ;QACD,MAAM,EAAE,0BAA0B;QAClC,YAAY,EAAE,WAAW;KAC1B;IACD;QACE,KAAK,EAAE,mCAAmC;QAC1C,QAAQ,EAAE;YACR,aAAa,EAAE,gBAAgB;YAC/B,UAAU;YACV,UAAU;YACV,SAAS;YACT,YAAY;YACZ,WAAW;SACZ;QACD,MAAM,EAAE,mBAAmB;QAC3B,YAAY,EAAE,WAAW;KAC1B;IACD;QACE,KAAK,EAAE,oCAAoC;QAC3C,QAAQ,EAAE;YACR,aAAa,EAAE,kBAAkB;YACjC,UAAU;YACV,UAAU;YACV,SAAS;YACT,YAAY;YACZ,WAAW;SACZ;QACD,MAAM,EAAE,mBAAmB;QAC3B,YAAY,EAAE,WAAW;KAC1B;IACD;QACE,KAAK,EAAE,+CAA+C;QACtD,QAAQ,EAAE;YACR,aAAa,EAAE,kBAAkB;YACjC,UAAU;YACV,UAAU;YACV,YAAY;YACZ,WAAW;SACZ;QACD,MAAM,EAAE,mBAAmB;QAC3B,YAAY,EAAE,QAAQ;KACvB;CACF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAExD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,6DAA6D;IAC7D,MAAM,UAAU,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CACT,WAAW,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,OAAO,IAAI;QACjD,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,UAAU;QACjD,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CACjF,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,mBAAuC,CAAC;IAE5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,iCAAoB,EAAC,QAAQ,EAAE;YAC5C,SAAS,EAAE,QAAQ,CAAC,QAAQ;YAC5B,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBACxB,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO;aACzB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC;aAC/C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;aAC5B,IAAI,CAAC,KAAK,CAAC,CAAC;QAEf,MAAM,EAAE,GACN,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,YAAY;YACvC,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC;QAE5B,IAAI,CAAC,EAAE;YAAE,QAAQ,IAAI,CAAC,CAAC;QAEvB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,QAAQ,CAAC;QAC7D,MAAM,KAAK,GACT,mBAAmB,KAAK,SAAS;YACjC,mBAAmB,KAAK,WAAW;YACjC,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,EAAE,CAAC;QAET,mBAAmB,GAAG,WAAW,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CACT,MAAM,MAAM,CAAC,MAAM,WAAW,KAAK,IAAI,QAAQ,IAAI;YACjD,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,YAAY,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAC7E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE/E,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CACT,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,GAAG;oBAChD,WAAW,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CACT,cAAc,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,GAAG,GAAG;gBACjD,WAAW,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAC/C,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CACT,cAAc,SAAS,CAAC,MAAM,GAAG,QAAQ,IAAI,SAAS,CAAC,MAAM,UAAU,CACxE,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,KAAK,IAAI,EAAE,CAAC;AACd,CAAC"}
|