automategraph 1.5.0 → 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.
Files changed (88) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/UPGRADE-PROPOSAL.md +141 -0
  3. package/docs/diagrams/c19-resilience-scenario.md +61 -0
  4. package/docs/diagrams/c19-resilience-scenario.mmd +28 -0
  5. package/docs/diagrams/c19-resilience-scenario.svg +181 -0
  6. package/examples/README.md +206 -0
  7. package/examples/branching-edges.ts +192 -0
  8. package/examples/branching-graph.ts +333 -0
  9. package/examples/branching-router.ts +475 -0
  10. package/examples/json-graph.ts +231 -0
  11. package/examples/json-scripts.ts +152 -0
  12. package/examples/order-flow.functions.cjs +32 -0
  13. package/examples/order-flow.graph.json +27 -0
  14. package/examples/order-flow.scripted.graph.json +68 -0
  15. package/js/examples/branching-edges.js +133 -0
  16. package/js/examples/branching-edges.js.map +1 -0
  17. package/js/examples/branching-graph.js +232 -0
  18. package/js/examples/branching-graph.js.map +1 -0
  19. package/js/examples/branching-router.js +305 -0
  20. package/js/examples/branching-router.js.map +1 -0
  21. package/js/examples/json-graph.js +197 -0
  22. package/js/examples/json-graph.js.map +1 -0
  23. package/js/examples/json-scripts.js +131 -0
  24. package/js/examples/json-scripts.js.map +1 -0
  25. package/js/tests/async.test.js +592 -0
  26. package/js/tests/async.test.js.map +1 -0
  27. package/js/tests/complex.test.js +972 -0
  28. package/js/tests/complex.test.js.map +1 -0
  29. package/js/tests/conformance.test.js +365 -0
  30. package/js/tests/conformance.test.js.map +1 -0
  31. package/js/tests/edges.test.js +702 -0
  32. package/js/tests/edges.test.js.map +1 -0
  33. package/js/tests/graphjson.test.js +504 -0
  34. package/js/tests/graphjson.test.js.map +1 -0
  35. package/js/tests/harness.js +192 -0
  36. package/js/tests/harness.js.map +1 -0
  37. package/js/tests/helpers.js +136 -0
  38. package/js/tests/helpers.js.map +1 -0
  39. package/js/tests/lint.test.js +317 -0
  40. package/js/tests/lint.test.js.map +1 -0
  41. package/js/tests/registry.test.js +705 -0
  42. package/js/tests/registry.test.js.map +1 -0
  43. package/js/tests/report.js +422 -0
  44. package/js/tests/report.js.map +1 -0
  45. package/js/tests/runner.js +67 -0
  46. package/js/tests/runner.js.map +1 -0
  47. package/js/tests/scripts.test.js +552 -0
  48. package/js/tests/scripts.test.js.map +1 -0
  49. package/js/tests/unit.test.js +1239 -0
  50. package/js/tests/unit.test.js.map +1 -0
  51. package/js/tests/upgrade.test.js +618 -0
  52. package/js/tests/upgrade.test.js.map +1 -0
  53. package/package.json +2 -9
  54. package/report/index.html +3727 -0
  55. package/report/report.json +3053 -0
  56. package/tests/async.test.ts +668 -0
  57. package/tests/complex.test.ts +1123 -0
  58. package/tests/conformance.test.ts +442 -0
  59. package/tests/edges.test.ts +848 -0
  60. package/tests/fixtures/scripts/bad-registration.cjs +4 -0
  61. package/tests/fixtures/scripts/broken.cjs +2 -0
  62. package/tests/fixtures/scripts/cjs-default.js +4 -0
  63. package/tests/fixtures/scripts/collide-a.cjs +4 -0
  64. package/tests/fixtures/scripts/collide-b.cjs +4 -0
  65. package/tests/fixtures/scripts/empty.cjs +2 -0
  66. package/tests/fixtures/scripts/esm-functions.mjs +10 -0
  67. package/tests/fixtures/scripts/esm-syntax.js +3 -0
  68. package/tests/fixtures/scripts/global-channel.cjs +6 -0
  69. package/tests/fixtures/scripts/global-channel.mjs +7 -0
  70. package/tests/fixtures/scripts/mismatch.cjs +4 -0
  71. package/tests/fixtures/scripts/needs-sibling.cjs +7 -0
  72. package/tests/fixtures/scripts/order.cjs +14 -0
  73. package/tests/fixtures/scripts/sibling-helper.cjs +3 -0
  74. package/tests/fixtures/scripts/throwing-global.mjs +6 -0
  75. package/tests/graphjson.test.ts +737 -0
  76. package/tests/harness.ts +291 -0
  77. package/tests/helpers.ts +216 -0
  78. package/tests/lint.test.ts +381 -0
  79. package/tests/registry.test.ts +1134 -0
  80. package/tests/report.ts +452 -0
  81. package/tests/runner.ts +58 -0
  82. package/tests/scripts.test.ts +970 -0
  83. package/tests/unit.test.ts +1192 -0
  84. package/tests/upgrade.test.ts +725 -0
  85. package/tools/server.mjs +152 -0
  86. package/tsconfig.browser.json +19 -0
  87. package/tsconfig.json +18 -0
  88. package/tsconfig.publish.json +13 -0
@@ -0,0 +1,552 @@
1
+ "use strict";
2
+ /* ============================================================
3
+ * SCRIPT LOADER PACK (v1.5)
4
+ * ------------------------------------------------------------
5
+ * A document may declare scripts that PROVIDE the functions its nodes
6
+ * and edges name:
7
+ *
8
+ * "scripts": [
9
+ * { "namespace": "order", "path": "./order.cjs" },
10
+ * { "namespace": "inline", "source": "module.exports = { … }" },
11
+ * { "namespace": "remote", "url": "https://host/fns.mjs", "format": "esm" }
12
+ * ]
13
+ *
14
+ * Two-step API (the loader is Node-only, the core stays isomorphic):
15
+ *
16
+ * const { functions, namespaces } = await loadGraphScripts(document);
17
+ * const engine = createEngineFromJSON(document, { functions });
18
+ *
19
+ * Under test:
20
+ * • strategies — EXPORTS (cjs / esm / default-object) and SELF-REGISTRATION
21
+ * through globalThis.GraphEngine.registerEngineNamespace(namespace, fns),
22
+ * including both in one script
23
+ * • format auto-detection (.cjs → require, .mjs → import, .js → hint +
24
+ * fallback) and the explicit "format" override, which is never retried
25
+ * • the freeze — a namespace is claimed once per PROCESS; a second claim
26
+ * throws, from inside the script when the script registers itself
27
+ * • plain names: the namespace is a claim slot, never a name prefix
28
+ * • validation runs before any code executes
29
+ * ============================================================ */
30
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ var desc = Object.getOwnPropertyDescriptor(m, k);
33
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
34
+ desc = { enumerable: true, get: function() { return m[k]; } };
35
+ }
36
+ Object.defineProperty(o, k2, desc);
37
+ }) : (function(o, m, k, k2) {
38
+ if (k2 === undefined) k2 = k;
39
+ o[k2] = m[k];
40
+ }));
41
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
42
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
43
+ }) : function(o, v) {
44
+ o["default"] = v;
45
+ });
46
+ var __importStar = (this && this.__importStar) || function (mod) {
47
+ if (mod && mod.__esModule) return mod;
48
+ var result = {};
49
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
50
+ __setModuleDefault(result, mod);
51
+ return result;
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ const path = __importStar(require("path"));
55
+ const automategraph_1 = require("../src/automategraph");
56
+ const graph_json_1 = require("../src/graph-json");
57
+ const graph_scripts_1 = require("../src/node/graph-scripts");
58
+ const helpers_1 = require("./helpers");
59
+ const harness_1 = require("./harness");
60
+ const scripts = (0, harness_1.suite)("scripts", "Script loading");
61
+ /* ------------------------------ helpers ------------------------------ */
62
+ const FIXTURES = path.join(__dirname, "..", "..", "tests", "fixtures", "scripts");
63
+ function doc(declarations) {
64
+ return {
65
+ id: "scripted",
66
+ version: "1.5.0",
67
+ entryNodes: ["a"],
68
+ terminalNodes: ["end"],
69
+ scripts: declarations,
70
+ nodes: {
71
+ a: { run: "start", next: ["end"] },
72
+ end: { run: "finish" }
73
+ }
74
+ };
75
+ }
76
+ function ok(condition, label) {
77
+ if (!condition)
78
+ throw new Error(label);
79
+ }
80
+ function eq(actual, expected, label) {
81
+ if (actual !== expected) {
82
+ throw new Error(`${label}: expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`);
83
+ }
84
+ }
85
+ function deepEq(actual, expected, label) {
86
+ const a = JSON.stringify(actual ?? null);
87
+ const b = JSON.stringify(expected ?? null);
88
+ if (a !== b)
89
+ throw new Error(`${label}: expected ${b}, got ${a}`);
90
+ }
91
+ async function loadError(declaration) {
92
+ try {
93
+ await (0, graph_scripts_1.loadGraphScripts)(doc([declaration]), { baseDir: FIXTURES });
94
+ }
95
+ catch (error) {
96
+ if (error instanceof graph_scripts_1.GraphScriptError)
97
+ return error;
98
+ throw error;
99
+ }
100
+ throw new Error("expected a GraphScriptError");
101
+ }
102
+ /** Claims are process-global: every test starts from a clean slate. */
103
+ function fresh() {
104
+ (0, graph_scripts_1.resetGraphScriptNamespaces)();
105
+ }
106
+ /* ------------------------------ 1. media & formats ------------------------------ */
107
+ scripts.t("a .cjs script is required and its export table becomes the registry", async (t) => {
108
+ fresh();
109
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "order", path: "./order.cjs" }]), { baseDir: FIXTURES });
110
+ deepEq(loaded.registry.names, [
111
+ "chargeCard",
112
+ "classifyOrder",
113
+ "isPriority",
114
+ "manualReview",
115
+ "rejectOrder",
116
+ "shipOrder"
117
+ ], "names: sorted, non-function export excluded");
118
+ deepEq(loaded.namespaces, ["order"], "namespaces");
119
+ eq(loaded.scripts[0].format, "cjs", "format");
120
+ eq(loaded.scripts[0].source, "path:./order.cjs", "source label");
121
+ deepEq(loaded.scripts[0].ignoredExports, ["STATUS"], "ignored exports");
122
+ eq(Object.isFrozen(loaded.functions), true, "the table is frozen");
123
+ ok(loaded.registry.fingerprint.startsWith("fnr1:6:"), loaded.registry.fingerprint);
124
+ /* the functions are the real things, callable with real contexts */
125
+ eq(loaded.functions.classifyOrder(), "priority", "call");
126
+ eq(loaded.functions.isPriority("priority"), true, "matcher");
127
+ t.log("finding: a registered name is not rewritten — `classifyOrder` stays `classifyOrder`, the namespace only owns the claim");
128
+ }, helpers_1.BIG);
129
+ scripts.t("an .mjs script is imported as an ES module", async (t) => {
130
+ fresh();
131
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "esm", path: "./esm-functions.mjs" }]), { baseDir: FIXTURES });
132
+ eq(loaded.scripts[0].format, "esm", "format");
133
+ eq(loaded.functions.shipOrder(), "shipped", "named export works");
134
+ deepEq(loaded.scripts[0].ignoredExports, ["version"], "non-function export ignored");
135
+ }, helpers_1.BIG);
136
+ scripts.t("a .js script with ESM syntax is detected as ESM; without it, as CommonJS", async (t) => {
137
+ fresh();
138
+ const esm = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "detected", path: "./esm-syntax.js" }]), { baseDir: FIXTURES });
139
+ eq(esm.scripts[0].format, "esm", ".js with export syntax");
140
+ eq(esm.functions.greetFromJs(), "hello from .js ESM", "works");
141
+ fresh();
142
+ const cjs = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "defaulted", path: "./cjs-default.js" }]), { baseDir: FIXTURES });
143
+ eq(cjs.scripts[0].format, "cjs", ".js without export syntax");
144
+ eq(cjs.functions.plainCjs(), "plain cjs", "works");
145
+ t.log("finding: .js detection is a source hint with a fallback — the other format is attempted before failing, so a mis-hint costs one retry, never a failed load");
146
+ }, helpers_1.BIG);
147
+ scripts.t("an explicit format is honoured and never retried in the other format", async (t) => {
148
+ fresh();
149
+ /* CJS import() of a CJS file is legal: the override to ESM succeeds */
150
+ const forcedEsm = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "forcedEsm", path: "./cjs-default.js", format: "esm" }]), { baseDir: FIXTURES });
151
+ eq(forcedEsm.scripts[0].format, "esm", "forced esm");
152
+ ok("plainCjs" in forcedEsm.functions, Object.keys(forcedEsm.functions).join(","));
153
+ fresh();
154
+ /* .mjs forced to CJS cannot work — and must fail WITHOUT trying ESM */
155
+ const error = await loadError({
156
+ namespace: "forcedCjs",
157
+ path: "./esm-functions.mjs",
158
+ format: "cjs"
159
+ });
160
+ eq(error.code, "SCRIPT_LOAD_FAILED", "code");
161
+ deepEq(error.details.attempts.length, 1, "exactly one attempt: no fallback for an explicit format");
162
+ }, helpers_1.BIG);
163
+ scripts.t("inline CommonJS source runs with a real require and module", async (t) => {
164
+ fresh();
165
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([
166
+ {
167
+ namespace: "inlineCjs",
168
+ source: "module.exports = { inlineCjs: () => 'inline cjs', " +
169
+ "isInline: value => value === 'inline cjs' };"
170
+ }
171
+ ]), { baseDir: FIXTURES });
172
+ eq(loaded.scripts[0].format, "cjs", "format");
173
+ eq(loaded.scripts[0].source, "inline source", "label");
174
+ eq(loaded.functions.inlineCjs(), "inline cjs", "works");
175
+ }, helpers_1.BIG);
176
+ scripts.t("inline ESM source is evaluated from a data URL", async (t) => {
177
+ fresh();
178
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([
179
+ {
180
+ namespace: "inlineEsm",
181
+ source: "export const inlineEsm = () => 'inline esm';"
182
+ }
183
+ ]), { baseDir: FIXTURES });
184
+ eq(loaded.scripts[0].format, "esm", "format");
185
+ eq(loaded.functions.inlineEsm(), "inline esm", "works");
186
+ }, helpers_1.BIG);
187
+ scripts.t("URL scripts are fetched and evaluated (CJS by default, ESM by hint)", async (t) => {
188
+ fresh();
189
+ const cjsText = "module.exports = { fromUrl: () => 'url cjs' };";
190
+ const cjs = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "remoteCjs", url: "https://example.test/fns.cjs" }]), {
191
+ baseDir: FIXTURES,
192
+ fetchText: async (url) => {
193
+ eq(url, "https://example.test/fns.cjs", "the loader fetched the declared URL");
194
+ return cjsText;
195
+ }
196
+ });
197
+ eq(cjs.scripts[0].format, "cjs", "format");
198
+ eq(cjs.functions.fromUrl(), "url cjs", "works");
199
+ fresh();
200
+ const esm = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "remoteEsm", url: "https://example.test/thing.mjs" }]), {
201
+ baseDir: FIXTURES,
202
+ fetchText: async () => "export const fromUrlEsm = () => 'url esm';"
203
+ });
204
+ eq(esm.scripts[0].format, "esm", ".mjs URL");
205
+ eq(esm.functions.fromUrlEsm(), "url esm", "works");
206
+ }, helpers_1.BIG);
207
+ /* ------------------------------ 2. the global channel ------------------------------ */
208
+ scripts.t("a script can register itself through globalThis.GraphEngine", async (t) => {
209
+ fresh();
210
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "billing", path: "./global-channel.cjs" }]), { baseDir: FIXTURES });
211
+ deepEq(loaded.registry.names, ["invoiceOrder", "isBillable"], "registered names");
212
+ eq(loaded.functions.invoiceOrder(), "invoiced", "works");
213
+ const claim = (0, graph_scripts_1.registeredNamespaces)().find(entry => entry.namespace === "billing");
214
+ ok(claim !== undefined, "the claim is recorded");
215
+ deepEq(claim?.names, ["invoiceOrder", "isBillable"], "claim names, sorted");
216
+ eq(claim?.source, "path:./global-channel.cjs", "claim source");
217
+ t.log("finding: the engine global is a per-CALL slot (registerEngineNamespace), not a shared mutable table — a script can only ever add its own namespace, and only once");
218
+ }, helpers_1.BIG);
219
+ scripts.t("the realm is restored after the load — the engine global does not leak", async (t) => {
220
+ fresh();
221
+ const marker = { marker: "pre-existing" };
222
+ globalThis.GraphEngine = marker;
223
+ await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "billing", path: "./global-channel.cjs" }]), { baseDir: FIXTURES });
224
+ const after = globalThis
225
+ .GraphEngine;
226
+ ok(after === marker, "the previous global object is restored by identity");
227
+ eq(typeof after.registerEngineNamespace, "undefined", "our registrar is gone");
228
+ delete globalThis.GraphEngine;
229
+ await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "restoreTest", path: "./order.cjs" }]), { baseDir: FIXTURES });
230
+ eq(globalThis.GraphEngine, undefined, "with no previous global, the loader removes what it installed");
231
+ }, helpers_1.BIG);
232
+ scripts.t("a script can both self-register and export; both land in the namespace", async (t) => {
233
+ fresh();
234
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "telemetry", path: "./global-channel.mjs" }]), { baseDir: FIXTURES });
235
+ deepEq(loaded.registry.names, ["recordRun", "traceId"], "registered + exported names");
236
+ eq(loaded.functions.traceId(), "trace-1", "exported");
237
+ eq(loaded.functions.recordRun(), "recorded", "registered");
238
+ }, helpers_1.BIG);
239
+ scripts.t("the declared namespace must match what the script registers", async (t) => {
240
+ fresh();
241
+ const error = await loadError({
242
+ namespace: "declared-here",
243
+ path: "./mismatch.cjs"
244
+ });
245
+ eq(error.code, "NAMESPACE_MISMATCH", "code");
246
+ deepEq(error.details.declared, "declared-here", "declared");
247
+ deepEq(error.details.received, "other", "received");
248
+ ok(error.message.includes("declared-here"), error.message);
249
+ }, helpers_1.BIG);
250
+ scripts.t("a registration error from inside the script surfaces unwrapped", async (t) => {
251
+ fresh();
252
+ const error = await loadError({
253
+ namespace: "badmin",
254
+ path: "./bad-registration.cjs"
255
+ });
256
+ /* NOT SCRIPT_LOAD_FAILED: the script's verdict is preserved */
257
+ eq(error.code, "SCRIPT_EXPORT_INVALID", "code");
258
+ ok(error.message.includes("notAFunction"), error.message);
259
+ eq(error.details.name, "notAFunction", "the offending name");
260
+ }, helpers_1.BIG);
261
+ /* ------------------------------ 3. the freeze ------------------------------ */
262
+ scripts.t("a namespace can be claimed only once per process (exports path)", async (t) => {
263
+ fresh();
264
+ const document = doc([{ namespace: "once", path: "./order.cjs" }]);
265
+ const first = await (0, graph_scripts_1.loadGraphScripts)(document, { baseDir: FIXTURES });
266
+ eq(first.namespaces[0], "once", "first load");
267
+ let second;
268
+ try {
269
+ await (0, graph_scripts_1.loadGraphScripts)(document, { baseDir: FIXTURES });
270
+ }
271
+ catch (error) {
272
+ second = error;
273
+ }
274
+ ok(second instanceof graph_scripts_1.GraphScriptError, "the second load throws");
275
+ eq(second?.code, "NAMESPACE_ALREADY_REGISTERED", "code");
276
+ eq((second?.details).claimedBy, "path:./order.cjs", "the error names the original claim");
277
+ ok(second?.message.includes("once per process") === true, second?.message ?? "no message");
278
+ (0, graph_scripts_1.resetGraphScriptNamespaces)();
279
+ const third = await (0, graph_scripts_1.loadGraphScripts)(document, { baseDir: FIXTURES });
280
+ eq(third.namespaces[0], "once", "after reset it loads again");
281
+ t.log("finding: the freeze is PROCESS-global by design — one document, one engine per namespace. Loading the same graph file into a second engine throws until the claims are reset");
282
+ }, helpers_1.BIG);
283
+ scripts.t("a self-registering script throws on the duplicate claim FROM INSIDE the script", async (t) => {
284
+ fresh();
285
+ await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "billing", path: "./global-channel.cjs" }]), { baseDir: FIXTURES });
286
+ /* a second document declaring the same namespace: the script itself
287
+ * calls the registrar and the registrar refuses */
288
+ const error = await loadError({
289
+ namespace: "billing",
290
+ path: "./global-channel.cjs"
291
+ });
292
+ eq(error.code, "NAMESPACE_ALREADY_REGISTERED", "code");
293
+ eq(error.details.requestedBy, "path:./global-channel.cjs", "requestedBy");
294
+ }, helpers_1.BIG);
295
+ scripts.t("a claim made before a crashing script survives; the load still fails", async (t) => {
296
+ fresh();
297
+ const error = await loadError({
298
+ namespace: "halfway",
299
+ path: "./throwing-global.mjs"
300
+ });
301
+ eq(error.code, "SCRIPT_LOAD_FAILED", "the load failed");
302
+ ok(error.message.includes("exploded after registering"), error.message);
303
+ deepEq((0, graph_scripts_1.registeredNamespaces)().map(claim => claim.namespace), ["halfway"], "the claim was already made when the script threw");
304
+ t.log("finding: claims are made at registration time, not at load end — a script that registers and then throws leaves its namespace claimed (reload needs resetGraphScriptNamespaces)");
305
+ }, helpers_1.BIG);
306
+ scripts.t("a script that throws is not replayed in the other format", async (t) => {
307
+ fresh();
308
+ let executions = 0;
309
+ /* self-registration makes a replay detectable: the second run would
310
+ * hit the namespace freeze, and the counter proves the first */
311
+ const source = [
312
+ "globalThis.__replayProbe = (globalThis.__replayProbe || 0) + 1;",
313
+ "globalThis.GraphEngine.registerEngineNamespace('replayProbe', { probe: () => 1 });",
314
+ "throw new Error('fixture: fails after side effects');"
315
+ ].join("\n");
316
+ /* run the real probe: inline source, format auto (cjs → esm fallback
317
+ * would be attempted for a FORMAT error only) */
318
+ fresh();
319
+ let caught;
320
+ try {
321
+ await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "replayProbe", source }]), {
322
+ baseDir: FIXTURES
323
+ });
324
+ }
325
+ catch (thrown) {
326
+ caught = thrown;
327
+ }
328
+ executions = Number(globalThis.__replayProbe ?? 0);
329
+ delete globalThis.__replayProbe;
330
+ eq(caught?.code, "SCRIPT_LOAD_FAILED", "the load failed");
331
+ eq(executions, 1, "the script body ran EXACTLY once");
332
+ t.log("finding: format fallback replays the script body, so it is reserved for module-format failures (ERR_REQUIRE_ESM, ESM syntax in CJS). A script that throws — or registers and then throws — is never re-executed; it ran once and its claim stands");
333
+ }, helpers_1.BIG);
334
+ /* ------------------------------ 4. merging & collisions ------------------------------ */
335
+ scripts.t("two scripts providing the same name collide; override is opt-in", async (t) => {
336
+ fresh();
337
+ const document = doc([
338
+ { namespace: "teamA", path: "./collide-a.cjs" },
339
+ { namespace: "teamB", path: "./collide-b.cjs" }
340
+ ]);
341
+ let error;
342
+ try {
343
+ await (0, graph_scripts_1.loadGraphScripts)(document, { baseDir: FIXTURES });
344
+ }
345
+ catch (thrown) {
346
+ error = thrown;
347
+ }
348
+ ok(error instanceof graph_scripts_1.GraphScriptError, "a collision throws by default");
349
+ eq(error?.code, "FUNCTION_NAME_COLLISION", "code");
350
+ deepEq(error?.details, { name: "shared", first: "teamA", second: "teamB" }, "the error names both sides");
351
+ /* claims made before the collision stay — that is the freeze working */
352
+ fresh();
353
+ const log = (0, helpers_1.logCollector)();
354
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(document, {
355
+ baseDir: FIXTURES,
356
+ collisions: "override",
357
+ onLog: log.onLog
358
+ });
359
+ eq(loaded.functions.shared(), "from B", "with override, the later script wins");
360
+ eq(loaded.functions.onlyA(), "A", "the first script still contributed");
361
+ eq(loaded.functions.onlyB(), "B", "and so did the second");
362
+ ok(log.lines.some(line => line.message.includes("overrides")), "the override is logged");
363
+ t.log("finding: claims and name collisions are separate gates — the freeze stops the namespace, collisions stop the merged table, and only the second one has an override");
364
+ }, helpers_1.BIG);
365
+ /* ------------------------------ 5. validation ------------------------------ */
366
+ scripts.t("script declarations are validated, with JSON paths", async (t) => {
367
+ const cases = [
368
+ [{ namespace: "a" }, "scripts[0]"],
369
+ [
370
+ { namespace: "b", path: "./x.cjs", url: "https://x" },
371
+ "scripts[0]"
372
+ ],
373
+ [{ namespace: "c", path: "" }, "scripts[0].path"],
374
+ [{ namespace: "d", path: "./x.cjs", format: "wasm" }, "scripts[0].format"],
375
+ [{ namespace: "has space", path: "./x.cjs" }, "scripts[0].namespace"],
376
+ [{ namespace: "e", path: "./x.cjs", loader: "y" }, "scripts[0].loader"]
377
+ ];
378
+ for (const [declaration, expectedPath] of cases) {
379
+ try {
380
+ (0, graph_json_1.parseGraphJSONDocument)(doc([declaration]));
381
+ throw new Error(`expected an issue for ${JSON.stringify(declaration)}`);
382
+ }
383
+ catch (error) {
384
+ if (!(error instanceof graph_json_1.GraphJSONError))
385
+ throw error;
386
+ ok(error.issues.some(issue => issue.path === expectedPath), `${expectedPath} missing from ${error.issues
387
+ .map(issue => issue.path)
388
+ .join(",")}`);
389
+ }
390
+ }
391
+ }, helpers_1.BIG);
392
+ scripts.t("the same namespace twice in one document is a parse issue", async (t) => {
393
+ try {
394
+ (0, graph_json_1.parseGraphJSONDocument)(doc([
395
+ { namespace: "twice", path: "./a.cjs" },
396
+ { namespace: "twice", source: "module.exports = {};" }
397
+ ]));
398
+ throw new Error("expected a GraphJSONError");
399
+ }
400
+ catch (error) {
401
+ if (!(error instanceof graph_json_1.GraphJSONError))
402
+ throw error;
403
+ eq(error.issues.length, 1, "one issue");
404
+ eq(error.issues[0].path, "scripts[1].namespace", "path");
405
+ ok(error.issues[0].message.includes("twice in this document"), error.issues[0].message);
406
+ }
407
+ }, helpers_1.BIG);
408
+ scripts.t("a scripted document still parses with the v1.4 entry point", async (t) => {
409
+ const document = doc([{ namespace: "parseOnly", path: "./order.cjs" }]);
410
+ const definition = (0, graph_json_1.parseGraphJSON)(document);
411
+ const parsed = (0, graph_json_1.parseGraphJSONDocument)(document);
412
+ deepEq(definition, parsed.definition, "parseGraphJSON is the definition alone");
413
+ eq(parsed.scripts.length, 1, "the declaration is surfaced");
414
+ deepEq(parsed.scripts[0], { namespace: "parseOnly", path: "./order.cjs" }, "declaration shape");
415
+ eq(Object.isFrozen(parsed.scripts), true, "scripts are frozen");
416
+ t.log("finding: `scripts` is validated by the isomorphic parser and executed by the Node loader — parseGraphJSON (sync, v1.4) keeps working on scripted documents");
417
+ }, helpers_1.BIG);
418
+ scripts.t("the document is validated BEFORE any script executes", async (t) => {
419
+ fresh();
420
+ const broken = doc([{ namespace: "neverRuns", path: "./order.cjs" }]);
421
+ /* break the graph, not the script */
422
+ broken.nodes.a.next = ["ghost"];
423
+ let error;
424
+ try {
425
+ await (0, graph_scripts_1.loadGraphScripts)(broken, { baseDir: FIXTURES });
426
+ }
427
+ catch (thrown) {
428
+ error = thrown;
429
+ }
430
+ ok(error instanceof graph_json_1.GraphJSONError, "the document is rejected");
431
+ ok(error?.issues.some(issue => issue.path === "nodes.a.next[0]"), error?.issues.map(issue => issue.path).join(",") ?? "no issues");
432
+ deepEq((0, graph_scripts_1.registeredNamespaces)(), [], "no namespace was claimed: no code ran");
433
+ }, helpers_1.BIG);
434
+ scripts.t("a missing file, a crashing script and a function-less script fail clearly", async (t) => {
435
+ fresh();
436
+ const missing = await loadError({
437
+ namespace: "missing",
438
+ path: "./does-not-exist.cjs"
439
+ });
440
+ eq(missing.code, "SCRIPT_LOAD_FAILED", "missing code");
441
+ ok(missing.message.includes("not found"), missing.message);
442
+ ok(missing.details.resolved.includes("does-not-exist.cjs"), "the resolved path is reported");
443
+ fresh();
444
+ const broken = await loadError({
445
+ namespace: "broken",
446
+ path: "./broken.cjs"
447
+ });
448
+ eq(broken.code, "SCRIPT_LOAD_FAILED", "broken code");
449
+ ok(broken.message.includes("fixture-broken"), "the cause message is kept");
450
+ fresh();
451
+ const empty = await loadError({
452
+ namespace: "empty",
453
+ path: "./empty.cjs"
454
+ });
455
+ eq(empty.code, "SCRIPT_NO_FUNCTIONS", "empty code");
456
+ ok(empty.message.includes("only non-function exports: answer"), empty.message);
457
+ fresh();
458
+ const silent = await loadError({
459
+ namespace: "silent",
460
+ source: "/* nothing at all */"
461
+ });
462
+ eq(silent.code, "SCRIPT_NO_FUNCTIONS", "silent code");
463
+ ok(silent.message.includes("never called registerEngineNamespace"), silent.message);
464
+ }, helpers_1.BIG);
465
+ /* ------------------------------ 6. end to end ------------------------------ */
466
+ scripts.t("a scripted document runs: the script provides the node and edge functions", async (t) => {
467
+ fresh();
468
+ const document = {
469
+ id: "order-flow-scripted",
470
+ version: "1.5.0",
471
+ entryNodes: ["classify"],
472
+ terminalNodes: ["ship", "manual"],
473
+ completionPolicy: "FIRST_TERMINAL",
474
+ scripts: [{ namespace: "order", path: "./order.cjs" }],
475
+ nodes: {
476
+ classify: {
477
+ run: "classifyOrder",
478
+ next: [
479
+ { test: "isPriority", nextNode: "charge" },
480
+ { nextNode: "manual" }
481
+ ]
482
+ },
483
+ charge: {
484
+ run: "chargeCard",
485
+ next: ["ship"],
486
+ onThrow: "manual"
487
+ },
488
+ ship: { run: "shipOrder" },
489
+ manual: { run: "manualReview" }
490
+ }
491
+ };
492
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(document, { baseDir: FIXTURES });
493
+ const engine = (0, graph_json_1.createEngineFromJSON)(document, {
494
+ functions: loaded.functions,
495
+ lint: "error"
496
+ });
497
+ const report = await engine.run();
498
+ eq(report.status, "COMPLETED", "status");
499
+ deepEq(report.results.map(result => result.nodeId), ["classify", "charge", "ship"], "path");
500
+ deepEq(report.results.map(result => result.fn), ["classifyOrder", "chargeCard", "shipOrder"], "every activation names its script function");
501
+ eq(report.outputs.ship, "shipped", "output from the script");
502
+ deepEq(report.lintIssues, [], "lint-clean under lint: \"error\"");
503
+ eq(report.registry?.fingerprint, loaded.registry.fingerprint, "the engine reports the identity of the loaded table");
504
+ t.log(`finding: end-to-end, ${loaded.registry.names.length} functions arrive from ${loaded.scripts[0].source} and the engine reports ${loaded.registry.fingerprint}`);
505
+ }, helpers_1.BIG);
506
+ scripts.t("a script's own sibling requires resolve from the script's directory", async (t) => {
507
+ fresh();
508
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "sibling", path: "./needs-sibling.cjs" }]), { baseDir: FIXTURES });
509
+ eq(loaded.functions.usesSibling(), "sibling said hi", "real require() with real relative resolution");
510
+ }, helpers_1.BIG);
511
+ scripts.t("inline scripts compose with path scripts in one document", async (t) => {
512
+ fresh();
513
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([
514
+ { namespace: "filePart", path: "./cjs-default.js" },
515
+ {
516
+ namespace: "inlinePart",
517
+ source: "globalThis.GraphEngine.registerEngineNamespace('inlinePart', " +
518
+ "{ inlineRegistered: () => 'via global' });"
519
+ }
520
+ ]), { baseDir: FIXTURES });
521
+ deepEq(loaded.namespaces, ["filePart", "inlinePart"], "declaration order");
522
+ deepEq(loaded.registry.names, ["inlineRegistered", "plainCjs"], "merged table");
523
+ eq(loaded.functions.plainCjs(), "plain cjs", "file part");
524
+ eq(loaded.functions.inlineRegistered(), "via global", "inline part");
525
+ t.log("finding: the three media (path, source, url) are interchangeable — one pipeline merges them into a single table with one fingerprint");
526
+ }, helpers_1.BIG);
527
+ scripts.t("the loaded table is frozen and the engine can be built from it directly", async (t) => {
528
+ fresh();
529
+ const loaded = await (0, graph_scripts_1.loadGraphScripts)(doc([{ namespace: "frozen", path: "./order.cjs" }]), { baseDir: FIXTURES });
530
+ eq(Object.isFrozen(loaded.functions), true, "frozen");
531
+ eq(Object.isFrozen(loaded.scripts), true, "scripts frozen");
532
+ eq(Object.isFrozen(loaded.namespaces), true, "namespaces frozen");
533
+ let mutated = false;
534
+ try {
535
+ loaded.functions.sneaky = () => 1;
536
+ }
537
+ catch {
538
+ mutated = true;
539
+ }
540
+ eq(mutated || !("sneaky" in loaded.functions), true, "the table cannot be extended");
541
+ const engine = new automategraph_1.GraphExecutionEngine({
542
+ id: "direct",
543
+ version: "1.0.0",
544
+ entryNodes: ["a"],
545
+ terminalNodes: ["a"],
546
+ nodes: { a: { id: "a", run: () => "direct" } }
547
+ }, { functions: loaded.functions });
548
+ const report = await engine.run();
549
+ eq(report.status, "COMPLETED", "engine built from the loaded table");
550
+ eq(report.registry?.fingerprint, loaded.registry.fingerprint, "same identity");
551
+ }, helpers_1.BIG);
552
+ //# sourceMappingURL=scripts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.test.js","sourceRoot":"","sources":["../../tests/scripts.test.ts"],"names":[],"mappings":"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"}