@acpus/workflow-compiler 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/check/authoring-rules/index.d.ts +10 -0
  4. package/dist/check/authoring-rules/index.d.ts.map +1 -0
  5. package/dist/check/authoring-rules/index.js +222 -0
  6. package/dist/check/authoring-rules/index.js.map +1 -0
  7. package/dist/check/authoring-rules/output-admissibility.d.ts +4 -0
  8. package/dist/check/authoring-rules/output-admissibility.d.ts.map +1 -0
  9. package/dist/check/authoring-rules/output-admissibility.js +537 -0
  10. package/dist/check/authoring-rules/output-admissibility.js.map +1 -0
  11. package/dist/check/runner.d.ts +6 -0
  12. package/dist/check/runner.d.ts.map +1 -0
  13. package/dist/check/runner.js +35 -0
  14. package/dist/check/runner.js.map +1 -0
  15. package/dist/check/typescript.d.ts +9 -0
  16. package/dist/check/typescript.d.ts.map +1 -0
  17. package/dist/check/typescript.js +86 -0
  18. package/dist/check/typescript.js.map +1 -0
  19. package/dist/compiler/compile-worker.d.ts +2 -0
  20. package/dist/compiler/compile-worker.d.ts.map +1 -0
  21. package/dist/compiler/compile-worker.js +33 -0
  22. package/dist/compiler/compile-worker.js.map +1 -0
  23. package/dist/compiler/ir-walk.d.ts +3 -0
  24. package/dist/compiler/ir-walk.d.ts.map +1 -0
  25. package/dist/compiler/ir-walk.js +29 -0
  26. package/dist/compiler/ir-walk.js.map +1 -0
  27. package/dist/compiler/module.d.ts +35 -0
  28. package/dist/compiler/module.d.ts.map +1 -0
  29. package/dist/compiler/module.js +100 -0
  30. package/dist/compiler/module.js.map +1 -0
  31. package/dist/compiler/process.d.ts +9 -0
  32. package/dist/compiler/process.d.ts.map +1 -0
  33. package/dist/compiler/process.js +21 -0
  34. package/dist/compiler/process.js.map +1 -0
  35. package/dist/compiler/worker.d.ts +12 -0
  36. package/dist/compiler/worker.d.ts.map +1 -0
  37. package/dist/compiler/worker.js +35 -0
  38. package/dist/compiler/worker.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +3 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/internal/eslint-plugin/index.d.ts +5 -0
  44. package/dist/internal/eslint-plugin/index.d.ts.map +1 -0
  45. package/dist/internal/eslint-plugin/index.js +71 -0
  46. package/dist/internal/eslint-plugin/index.js.map +1 -0
  47. package/dist/preflight/index.d.ts +53 -0
  48. package/dist/preflight/index.d.ts.map +1 -0
  49. package/dist/preflight/index.js +113 -0
  50. package/dist/preflight/index.js.map +1 -0
  51. package/dist/preflight/temp.d.ts +2 -0
  52. package/dist/preflight/temp.d.ts.map +1 -0
  53. package/dist/preflight/temp.js +7 -0
  54. package/dist/preflight/temp.js.map +1 -0
  55. package/dist/task-analysis/ast.d.ts +9 -0
  56. package/dist/task-analysis/ast.d.ts.map +1 -0
  57. package/dist/task-analysis/ast.js +61 -0
  58. package/dist/task-analysis/ast.js.map +1 -0
  59. package/dist/task-analysis/callsites.d.ts +6 -0
  60. package/dist/task-analysis/callsites.d.ts.map +1 -0
  61. package/dist/task-analysis/callsites.js +77 -0
  62. package/dist/task-analysis/callsites.js.map +1 -0
  63. package/dist/task-analysis/index.d.ts +8 -0
  64. package/dist/task-analysis/index.d.ts.map +1 -0
  65. package/dist/task-analysis/index.js +122 -0
  66. package/dist/task-analysis/index.js.map +1 -0
  67. package/dist/task-analysis/inline-capture.d.ts +3 -0
  68. package/dist/task-analysis/inline-capture.d.ts.map +1 -0
  69. package/dist/task-analysis/inline-capture.js +51 -0
  70. package/dist/task-analysis/inline-capture.js.map +1 -0
  71. package/dist/task-analysis/types.d.ts +58 -0
  72. package/dist/task-analysis/types.d.ts.map +1 -0
  73. package/dist/task-analysis/types.js +2 -0
  74. package/dist/task-analysis/types.js.map +1 -0
  75. package/dist/task-analysis/workflow-symbols.d.ts +8 -0
  76. package/dist/task-analysis/workflow-symbols.d.ts.map +1 -0
  77. package/dist/task-analysis/workflow-symbols.js +165 -0
  78. package/dist/task-analysis/workflow-symbols.js.map +1 -0
  79. package/package.json +57 -0
@@ -0,0 +1,537 @@
1
+ import ts from "typescript";
2
+ const NON_JSON_GLOBALS = new Set(["Date", "Map", "ReadonlyMap", "Set", "ReadonlySet", "WeakMap", "WeakSet", "RegExp", "Promise", "Error"]);
3
+ const STEP_METHODS = new Set(["task", "if", "switch", "parallel", "fanout", "loop"]);
4
+ export function checkOutputAdmissibility(sourceFiles, checker) {
5
+ const context = { checker, diagnostics: [] };
6
+ const visit = (node) => {
7
+ if (ts.isCallExpression(node)) {
8
+ checkWorkflowBuild(node, context);
9
+ checkTaskDefine(node, context);
10
+ checkStepCall(node, context);
11
+ }
12
+ ts.forEachChild(node, visit);
13
+ };
14
+ for (const sourceFile of Array.isArray(sourceFiles) ? sourceFiles : [sourceFiles])
15
+ visit(sourceFile);
16
+ return context.diagnostics;
17
+ }
18
+ function checkWorkflowBuild(call, context) {
19
+ if (!isPropertyCall(call, "build"))
20
+ return;
21
+ if (!isAcpusCoreResolvedCall(call, context.checker, "/graph/builder."))
22
+ return;
23
+ const build = call.arguments[0];
24
+ if (!build || !isFunctionLike(build))
25
+ return;
26
+ const returns = returnExpressions(build);
27
+ if (returns.length === 0)
28
+ return;
29
+ const producers = [];
30
+ for (const expression of returns) {
31
+ const object = objectOutputLiteral(expression);
32
+ if (!object) {
33
+ context.diagnostics.push(hiddenProducerDiagnostic("workflow root output", expression));
34
+ continue;
35
+ }
36
+ producers.push({ label: "workflow root output", expression, type: context.checker.getTypeAtLocation(expression) });
37
+ }
38
+ checkProducers(producers, context);
39
+ checkConvergence("workflow root outputs", producers, context);
40
+ }
41
+ function checkTaskDefine(call, context) {
42
+ if (!isPropertyCall(call, "define"))
43
+ return;
44
+ if (!isAcpusCoreResolvedCall(call, context.checker, "/nodes/leaf/task."))
45
+ return;
46
+ const spec = objectArg(call, 0, "task.define spec", context);
47
+ if (!spec)
48
+ return;
49
+ const exec = propertyInitializer(spec, "exec");
50
+ if (!exec || !isFunctionLike(exec)) {
51
+ context.diagnostics.push(hiddenProducerDiagnostic("task.define exec", exec ?? spec));
52
+ return;
53
+ }
54
+ checkFunctionOutput("task.define exec output", exec, context);
55
+ }
56
+ function checkStepCall(call, context) {
57
+ if (!ts.isPropertyAccessExpression(call.expression))
58
+ return;
59
+ const method = call.expression.name.text;
60
+ if (!STEP_METHODS.has(method))
61
+ return;
62
+ if (!isAcpusStepCall(call, context.checker))
63
+ return;
64
+ const spec = objectArg(call, 0, `${method} spec`, context);
65
+ if (!spec)
66
+ return;
67
+ if (method === "task")
68
+ checkInlineTask(spec, context);
69
+ else if (method === "if")
70
+ checkIf(spec, context);
71
+ else if (method === "switch")
72
+ checkSwitch(spec, context);
73
+ else if (method === "parallel")
74
+ checkParallel(spec, context);
75
+ else if (method === "fanout")
76
+ checkCallbackProperty(spec, "do", "fanout body output", context);
77
+ else if (method === "loop")
78
+ checkLoop(spec, context);
79
+ }
80
+ function checkInlineTask(spec, context) {
81
+ const run = objectProperty(spec, "run", "task run", context);
82
+ if (!run)
83
+ return;
84
+ const exec = propertyInitializer(run, "exec");
85
+ if (exec !== undefined && !isFunctionLike(exec)) {
86
+ context.diagnostics.push(hiddenProducerDiagnostic("inline task exec", exec));
87
+ return;
88
+ }
89
+ if (exec)
90
+ checkFunctionOutput("inline task output", exec, context);
91
+ else
92
+ checkReusableTaskOutput(run, context);
93
+ }
94
+ function checkIf(spec, context) {
95
+ const producers = [
96
+ callbackProducer(spec, "then", "if then output", context),
97
+ callbackProducer(spec, "else", "if else output", context),
98
+ ].filter((producer) => Boolean(producer));
99
+ checkProducers(producers, context);
100
+ checkConvergence("if branch outputs", producers, context);
101
+ }
102
+ function checkSwitch(spec, context) {
103
+ const cases = propertyInitializer(spec, "cases");
104
+ const producers = [];
105
+ if (!cases || !ts.isArrayLiteralExpression(cases)) {
106
+ context.diagnostics.push(hiddenProducerDiagnostic("switch cases", cases ?? spec));
107
+ }
108
+ else {
109
+ cases.elements.forEach((element, index) => {
110
+ if (!ts.isObjectLiteralExpression(element)) {
111
+ context.diagnostics.push(hiddenProducerDiagnostic(`switch case ${index}`, element));
112
+ return;
113
+ }
114
+ const producer = callbackProducer(element, "then", `switch case ${index} output`, context);
115
+ if (producer)
116
+ producers.push(producer);
117
+ });
118
+ }
119
+ const defaultProducer = callbackProducer(spec, "default", "switch default output", context);
120
+ if (defaultProducer)
121
+ producers.push(defaultProducer);
122
+ checkProducers(producers, context);
123
+ checkConvergence("switch branch outputs", producers, context);
124
+ }
125
+ function checkParallel(spec, context) {
126
+ const branches = objectProperty(spec, "branches", "parallel branches", context);
127
+ if (!branches)
128
+ return;
129
+ const producers = [];
130
+ for (const branch of branches.properties) {
131
+ if (!ts.isPropertyAssignment(branch) || !ts.isObjectLiteralExpression(branch.initializer)) {
132
+ context.diagnostics.push(hiddenProducerDiagnostic("parallel branch", branch));
133
+ continue;
134
+ }
135
+ const name = propertyName(branch.name) ?? "branch";
136
+ const producer = callbackProducer(branch.initializer, "do", `parallel branch '${name}' output`, context);
137
+ if (producer)
138
+ producers.push(producer);
139
+ }
140
+ checkProducers(producers, context);
141
+ if (literalStringProperty(spec, "strategy") === "race")
142
+ checkConvergence("parallel race branch outputs", producers, context);
143
+ }
144
+ function checkLoop(spec, context) {
145
+ const initial = propertyInitializer(spec, "initial");
146
+ const body = callbackProducer(spec, "do", "loop body output", context);
147
+ let initialProducer;
148
+ if (initial) {
149
+ const initialType = context.checker.getTypeAtLocation(initial);
150
+ initialProducer = { label: "loop initial output", expression: initial, type: initialType };
151
+ if (!objectOutputLiteral(initial)) {
152
+ context.diagnostics.push(hiddenProducerDiagnostic("loop initial output", initial));
153
+ }
154
+ checkProducer(initialProducer, context);
155
+ checkObjectOutputType("loop initial output", initialType, initial, context);
156
+ }
157
+ else
158
+ context.diagnostics.push(hiddenProducerDiagnostic("loop initial output", spec));
159
+ if (body) {
160
+ checkProducer(body, context);
161
+ if (initialProducer)
162
+ checkConvergence("loop initial and body outputs", [initialProducer, body], context);
163
+ }
164
+ const maxIterations = propertyInitializer(spec, "maxIterations");
165
+ if (maxIterations && numericLiteralValue(maxIterations) !== undefined && numericLiteralValue(maxIterations) < 0) {
166
+ context.diagnostics.push({
167
+ code: "OA004",
168
+ severity: "error",
169
+ message: "Loop maxIterations must be non-negative.",
170
+ path: "output.loop.maxIterations",
171
+ hint: "Use 0 or a positive integer. The initial value is checked before any loop body execution.",
172
+ source: sourceLocation(maxIterations),
173
+ });
174
+ }
175
+ }
176
+ function checkCallbackProperty(spec, key, label, context) {
177
+ const producer = callbackProducer(spec, key, label, context);
178
+ if (producer)
179
+ checkProducer(producer, context);
180
+ }
181
+ function callbackProducer(spec, key, label, context) {
182
+ const value = propertyInitializer(spec, key);
183
+ if (!value || !isFunctionLike(value)) {
184
+ context.diagnostics.push(hiddenProducerDiagnostic(label, value ?? spec));
185
+ return undefined;
186
+ }
187
+ const returns = returnExpressions(value);
188
+ if (returns.length !== 1) {
189
+ context.diagnostics.push(hiddenProducerDiagnostic(label, value));
190
+ return undefined;
191
+ }
192
+ const expression = returns[0];
193
+ if (!objectOutputLiteral(expression)) {
194
+ context.diagnostics.push(hiddenProducerDiagnostic(label, expression));
195
+ return undefined;
196
+ }
197
+ return { label, expression, type: context.checker.getTypeAtLocation(expression) };
198
+ }
199
+ function checkFunctionOutput(label, fn, context) {
200
+ const signature = context.checker.getSignatureFromDeclaration(fn);
201
+ if (!signature)
202
+ return;
203
+ const returnType = context.checker.getReturnTypeOfSignature(signature);
204
+ const awaited = context.checker.getAwaitedType(returnType) ?? returnType;
205
+ checkProducer({ label, expression: fn, type: awaited }, context);
206
+ }
207
+ function checkReusableTaskOutput(run, context) {
208
+ const task = propertyInitializer(run, "task");
209
+ if (!task)
210
+ return;
211
+ const fn = context.checker.getTypeAtLocation(task).getProperty("fn");
212
+ if (!fn) {
213
+ context.diagnostics.push(hiddenProducerDiagnostic("reusable task output", task));
214
+ return;
215
+ }
216
+ const fnType = context.checker.getTypeOfSymbolAtLocation(fn, task);
217
+ const signature = fnType.getCallSignatures()[0];
218
+ if (!signature) {
219
+ context.diagnostics.push(hiddenProducerDiagnostic("reusable task output", task));
220
+ return;
221
+ }
222
+ const returnType = context.checker.getReturnTypeOfSignature(signature);
223
+ const awaited = context.checker.getAwaitedType(returnType) ?? returnType;
224
+ checkProducer({ label: "reusable task output", expression: task, type: awaited }, context);
225
+ }
226
+ function checkProducers(producers, context) {
227
+ for (const producer of producers)
228
+ checkProducer(producer, context);
229
+ }
230
+ function checkProducer(producer, context) {
231
+ const issue = admissibilityIssue(producer.type, producer.expression, context.checker, new Set());
232
+ if (!issue)
233
+ return;
234
+ context.diagnostics.push({
235
+ code: "OA002",
236
+ severity: "error",
237
+ message: `${producer.label} contains non-admissible workflow data: ${issue}.`,
238
+ path: "output.admissibility",
239
+ hint: "Return JSON-compatible data, Expr<T> values whose T is JSON-compatible, undefined for local absence, or explicit JsonValue/JsonObject opaque values.",
240
+ source: sourceLocation(producer.expression),
241
+ });
242
+ }
243
+ function checkConvergence(label, producers, context) {
244
+ if (producers.length < 2)
245
+ return;
246
+ const base = producers[0];
247
+ const baseShape = outputShape(base.type, base.expression, context.checker);
248
+ if (!baseShape)
249
+ return;
250
+ for (const producer of producers.slice(1)) {
251
+ const shape = outputShape(producer.type, producer.expression, context.checker);
252
+ if (!shape)
253
+ continue;
254
+ const baseKeys = [...baseShape.keys()].sort();
255
+ const keys = [...shape.keys()].sort();
256
+ if (baseKeys.join("\0") !== keys.join("\0")) {
257
+ context.diagnostics.push(convergenceDiagnostic(label, producer.expression, `branches must return the same keys; expected ${baseKeys.join(", ") || "(none)"}, got ${keys.join(", ") || "(none)"}`));
258
+ continue;
259
+ }
260
+ for (const key of baseKeys) {
261
+ const left = baseShape.get(key);
262
+ const right = shape.get(key);
263
+ if (!context.checker.isTypeAssignableTo(left, right) && !context.checker.isTypeAssignableTo(right, left)) {
264
+ context.diagnostics.push(convergenceDiagnostic(label, producer.expression, `field '${key}' does not converge`));
265
+ }
266
+ }
267
+ }
268
+ }
269
+ function checkObjectOutputType(label, type, node, context) {
270
+ const unwrapped = unwrapExpr(type, node, context.checker);
271
+ if (isKnownJsonObjectAlias(unwrapped))
272
+ return;
273
+ if (unwrapped.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown))
274
+ return;
275
+ if (unwrapped.isUnionOrIntersection() || context.checker.isArrayType(unwrapped) || context.checker.isTupleType(unwrapped)) {
276
+ context.diagnostics.push(convergenceDiagnostic(label, node, "must be an object, not a union or array"));
277
+ return;
278
+ }
279
+ if (unwrapped.flags & (ts.TypeFlags.StringLike | ts.TypeFlags.NumberLike | ts.TypeFlags.BooleanLike | ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.BigIntLike | ts.TypeFlags.ESSymbolLike | ts.TypeFlags.Void)) {
280
+ context.diagnostics.push(convergenceDiagnostic(label, node, "must be an object"));
281
+ return;
282
+ }
283
+ if (context.checker.typeToString(unwrapped) === "object") {
284
+ context.diagnostics.push(convergenceDiagnostic(label, node, "must be a statically known object"));
285
+ }
286
+ }
287
+ function outputShape(type, node, checker) {
288
+ const unwrapped = unwrapExpr(type, node, checker);
289
+ if (unwrapped.isUnion())
290
+ return undefined;
291
+ const properties = checker.getPropertiesOfType(unwrapped);
292
+ const shape = new Map();
293
+ for (const property of properties) {
294
+ if (property.name === "__ir" || property.name === "__type")
295
+ continue;
296
+ const declaration = property.valueDeclaration ?? property.declarations?.[0] ?? node;
297
+ shape.set(property.name, unwrapExpr(checker.getTypeOfSymbolAtLocation(property, declaration), declaration, checker));
298
+ }
299
+ return shape;
300
+ }
301
+ function admissibilityIssue(type, node, checker, seen) {
302
+ const unwrapped = unwrapExpr(type, node, checker);
303
+ if (seen.has(unwrapped))
304
+ return undefined;
305
+ seen.add(unwrapped);
306
+ if (isKnownJsonAlias(unwrapped))
307
+ return undefined;
308
+ if (unwrapped.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown))
309
+ return undefined;
310
+ if (unwrapped.flags & ts.TypeFlags.Never)
311
+ return undefined;
312
+ if (unwrapped.flags & (ts.TypeFlags.StringLike | ts.TypeFlags.NumberLike | ts.TypeFlags.BooleanLike | ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void))
313
+ return undefined;
314
+ if (unwrapped.flags & ts.TypeFlags.BigIntLike)
315
+ return "bigint";
316
+ if (unwrapped.flags & ts.TypeFlags.ESSymbolLike)
317
+ return "symbol";
318
+ if (unwrapped.isUnionOrIntersection()) {
319
+ for (const part of unwrapped.types) {
320
+ const issue = admissibilityIssue(part, node, checker, seen);
321
+ if (issue)
322
+ return issue;
323
+ }
324
+ return undefined;
325
+ }
326
+ if (checker.isArrayType(unwrapped) || checker.isTupleType(unwrapped)) {
327
+ const item = checker.getIndexTypeOfType(unwrapped, ts.IndexKind.Number);
328
+ return item ? admissibilityIssue(item, node, checker, seen) : undefined;
329
+ }
330
+ if (unwrapped.getCallSignatures().length > 0)
331
+ return "function";
332
+ if (unwrapped.getConstructSignatures().length > 0)
333
+ return "class constructor";
334
+ const symbol = unwrapped.getSymbol() ?? unwrapped.aliasSymbol;
335
+ const symbolName = symbol?.getName();
336
+ if (symbolName && NON_JSON_GLOBALS.has(symbolName))
337
+ return symbolName;
338
+ if (symbol?.declarations?.some(declaration => ts.isClassDeclaration(declaration)))
339
+ return "class instance";
340
+ const typeText = checker.typeToString(unwrapped);
341
+ if (typeText === "object" || typeText === "Object" || (typeText === "{}" && !ts.isObjectLiteralExpression(node)))
342
+ return typeText;
343
+ const stringIndex = checker.getIndexTypeOfType(unwrapped, ts.IndexKind.String);
344
+ if (stringIndex) {
345
+ const issue = admissibilityIssue(stringIndex, node, checker, seen);
346
+ if (issue)
347
+ return issue;
348
+ }
349
+ const properties = checker.getPropertiesOfType(unwrapped);
350
+ for (const property of properties) {
351
+ if (property.name === "__ir" || property.name === "__type")
352
+ continue;
353
+ const declaration = property.valueDeclaration ?? property.declarations?.[0] ?? node;
354
+ if (property.flags & ts.SymbolFlags.Method)
355
+ return `method '${property.name}'`;
356
+ const issue = admissibilityIssue(checker.getTypeOfSymbolAtLocation(property, declaration), declaration, checker, seen);
357
+ if (issue)
358
+ return `${property.name}: ${issue}`;
359
+ }
360
+ return undefined;
361
+ }
362
+ function unwrapExpr(type, node, checker) {
363
+ const typeProperty = type.getProperty("__type");
364
+ return typeProperty && type.getProperty("__ir")
365
+ ? checker.getTypeOfSymbolAtLocation(typeProperty, typeProperty.valueDeclaration ?? node)
366
+ : type;
367
+ }
368
+ function isKnownJsonAlias(type) {
369
+ const symbol = type.aliasSymbol ?? type.getSymbol();
370
+ if (!symbol || (symbol.getName() !== "JsonValue" && symbol.getName() !== "JsonObject"))
371
+ return false;
372
+ return isAcpusJsonDeclaration(symbol);
373
+ }
374
+ function isKnownJsonObjectAlias(type) {
375
+ const symbol = type.aliasSymbol ?? type.getSymbol();
376
+ return Boolean(symbol && symbol.getName() === "JsonObject" && isAcpusJsonDeclaration(symbol));
377
+ }
378
+ function isAcpusJsonDeclaration(symbol) {
379
+ return Boolean(symbol.declarations?.some(declaration => /packages\/(expression|core)\/(src|dist)\/(ir|ir\/types)(\.d)?\.ts$/.test(declaration.getSourceFile().fileName.replace(/\\/g, "/"))));
380
+ }
381
+ function returnExpressions(fn) {
382
+ if (ts.isArrowFunction(fn) && fn.body && !ts.isBlock(fn.body))
383
+ return [fn.body];
384
+ const returns = [];
385
+ if (!fn.body || !ts.isBlock(fn.body))
386
+ return returns;
387
+ const visit = (node) => {
388
+ if (node !== fn && isFunctionLike(node))
389
+ return;
390
+ if (ts.isReturnStatement(node)) {
391
+ if (node.expression)
392
+ returns.push(node.expression);
393
+ return;
394
+ }
395
+ ts.forEachChild(node, visit);
396
+ };
397
+ visit(fn.body);
398
+ return returns;
399
+ }
400
+ function unwrapParentheses(expression) {
401
+ let current = expression;
402
+ while (ts.isParenthesizedExpression(current))
403
+ current = current.expression;
404
+ return current;
405
+ }
406
+ function objectOutputLiteral(expression) {
407
+ const object = unwrapParentheses(expression);
408
+ if (!ts.isObjectLiteralExpression(object))
409
+ return undefined;
410
+ for (const property of object.properties) {
411
+ if (ts.isSpreadAssignment(property) || ts.isPropertyAssignment(property) && propertyName(property.name) === undefined)
412
+ return undefined;
413
+ }
414
+ return object;
415
+ }
416
+ function objectArg(call, index, label, context) {
417
+ const arg = call.arguments[index];
418
+ if (!arg || !ts.isObjectLiteralExpression(arg)) {
419
+ context.diagnostics.push(hiddenProducerDiagnostic(label, arg ?? call));
420
+ return undefined;
421
+ }
422
+ if (arg.properties.some(ts.isSpreadAssignment))
423
+ context.diagnostics.push(hiddenProducerDiagnostic(label, arg));
424
+ return arg;
425
+ }
426
+ function objectProperty(parent, key, label, context) {
427
+ const initializer = propertyInitializer(parent, key);
428
+ if (!initializer || !ts.isObjectLiteralExpression(initializer)) {
429
+ context.diagnostics.push(hiddenProducerDiagnostic(label, initializer ?? parent));
430
+ return undefined;
431
+ }
432
+ if (initializer.properties.some(ts.isSpreadAssignment))
433
+ context.diagnostics.push(hiddenProducerDiagnostic(label, initializer));
434
+ return initializer;
435
+ }
436
+ function propertyInitializer(parent, key) {
437
+ for (const property of parent.properties) {
438
+ if (!ts.isPropertyAssignment(property))
439
+ continue;
440
+ if (propertyName(property.name) === key)
441
+ return property.initializer;
442
+ }
443
+ return undefined;
444
+ }
445
+ function propertyName(name) {
446
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
447
+ return name.text;
448
+ return undefined;
449
+ }
450
+ function literalStringProperty(parent, key) {
451
+ const initializer = propertyInitializer(parent, key);
452
+ return initializer && ts.isStringLiteral(initializer) ? initializer.text : undefined;
453
+ }
454
+ function numericLiteralValue(expression) {
455
+ if (ts.isNumericLiteral(expression))
456
+ return Number(expression.text);
457
+ if (ts.isPrefixUnaryExpression(expression) && ts.isNumericLiteral(expression.operand)) {
458
+ const value = Number(expression.operand.text);
459
+ if (expression.operator === ts.SyntaxKind.MinusToken)
460
+ return -value;
461
+ if (expression.operator === ts.SyntaxKind.PlusToken)
462
+ return value;
463
+ }
464
+ return undefined;
465
+ }
466
+ function isAcpusStepCall(call, checker) {
467
+ if (isAcpusCoreResolvedCall(call, checker, "/graph/builder."))
468
+ return true;
469
+ if (!ts.isPropertyAccessExpression(call.expression))
470
+ return false;
471
+ return hasStepDeclarationType(checker.getTypeAtLocation(call.expression.expression));
472
+ }
473
+ function hasStepDeclarationType(type) {
474
+ if (type.isUnionOrIntersection())
475
+ return type.types.some(hasStepDeclarationType);
476
+ const symbol = type.aliasSymbol ?? (typeof type.getSymbol === "function" ? type.getSymbol() : undefined);
477
+ return symbolName(symbol) === "StepDeclaration" && isAcpusCoreSymbol(symbol);
478
+ }
479
+ function symbolName(symbol) {
480
+ if (!symbol)
481
+ return undefined;
482
+ return typeof symbol.getName === "function" ? symbol.getName() : symbol.name;
483
+ }
484
+ function isPropertyCall(call, name) {
485
+ return ts.isPropertyAccessExpression(call.expression) && call.expression.name.text === name;
486
+ }
487
+ function isAcpusCoreResolvedCall(call, checker, filePattern) {
488
+ if (typeof checker.getResolvedSignature !== "function")
489
+ return false;
490
+ const declaration = checker.getResolvedSignature(call)?.declaration;
491
+ return Boolean(declaration && sourceFileName(declaration).includes(filePattern) && isAcpusCoreFile(sourceFileName(declaration)));
492
+ }
493
+ function isAcpusCoreSymbol(symbol) {
494
+ return Boolean(symbol?.declarations?.some(declaration => isAcpusCoreFile(sourceFileName(declaration))));
495
+ }
496
+ function sourceFileName(node) {
497
+ return node.getSourceFile().fileName.replace(/\\/g, "/");
498
+ }
499
+ function isAcpusCoreFile(fileName) {
500
+ return /(^|\/)(packages\/core\/(src|dist)|node_modules\/@acpus\/core)\//.test(fileName);
501
+ }
502
+ function isFunctionLike(node) {
503
+ return ts.isArrowFunction(node)
504
+ || ts.isFunctionExpression(node)
505
+ || ts.isFunctionDeclaration(node)
506
+ || ts.isMethodDeclaration(node);
507
+ }
508
+ function hiddenProducerDiagnostic(label, node) {
509
+ return {
510
+ code: "OA001",
511
+ severity: "error",
512
+ message: `Cannot statically locate ${label}.`,
513
+ path: "output.source",
514
+ hint: "Inline the workflow spec and producer callback as object/function literals so Acpus can check inferred output before runtime.",
515
+ source: sourceLocation(node),
516
+ };
517
+ }
518
+ function convergenceDiagnostic(label, node, reason) {
519
+ return {
520
+ code: "OA003",
521
+ severity: "error",
522
+ message: `${label} do not converge: ${reason}.`,
523
+ path: "output.convergence",
524
+ hint: "Return the same object keys from every branch and make each field type share a common assignable type.",
525
+ source: sourceLocation(node),
526
+ };
527
+ }
528
+ function sourceLocation(node) {
529
+ const sourceFile = node.getSourceFile();
530
+ const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
531
+ return {
532
+ file: sourceFile.fileName,
533
+ line: position.line + 1,
534
+ column: position.character + 1,
535
+ };
536
+ }
537
+ //# sourceMappingURL=output-admissibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-admissibility.js","sourceRoot":"","sources":["../../../src/check/authoring-rules/output-admissibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DiagnosticIR } from "@acpus/core/ir";
2
+ export type WorkflowCheckResult = {
3
+ diagnostics: DiagnosticIR[];
4
+ };
5
+ export declare function checkWorkflow(entry: string, cwd: string, scratchDir: string): Promise<WorkflowCheckResult>;
6
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/check/runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,YAAY,EAAE,CAAC;CAC7B,CAAC;AAEF,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgBhH"}
@@ -0,0 +1,35 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { analyzeWorkflowTasks } from "../task-analysis/index.js";
3
+ import { checkWorkflowAuthoring } from "./authoring-rules/index.js";
4
+ import { checkTypeScript } from "./typescript.js";
5
+ export async function checkWorkflow(entry, cwd, scratchDir) {
6
+ let source;
7
+ try {
8
+ source = await readFile(entry, "utf8");
9
+ }
10
+ catch (error) {
11
+ return { diagnostics: [workflowReadDiagnostic(entry, error)] };
12
+ }
13
+ const tsCheck = await checkTypeScript(entry, cwd, scratchDir);
14
+ const taskAnalysis = await analyzeWorkflowTasks(entry, source);
15
+ // The check phase aggregates TypeScript compiler diagnostics with Acpus
16
+ // authoring-rule diagnostics. ESLint is not part of this runtime path.
17
+ const authoringDiagnostics = tsCheck.program && tsCheck.sourceFile
18
+ ? checkWorkflowAuthoring({ program: tsCheck.program, sourceFile: tsCheck.sourceFile, taskAnalysis })
19
+ : [];
20
+ return { diagnostics: [...tsCheck.diagnostics, ...authoringDiagnostics] };
21
+ }
22
+ function workflowReadDiagnostic(entry, error) {
23
+ return {
24
+ code: "WF001",
25
+ severity: "error",
26
+ message: `Workflow source could not be read: ${error instanceof Error ? error.message : String(error)}`,
27
+ path: "workflow",
28
+ source: {
29
+ file: entry,
30
+ line: 1,
31
+ column: 1,
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/check/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMlD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,GAAW,EAAE,UAAkB;IAChF,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,WAAW,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/D,wEAAwE;IACxE,uEAAuE;IACvE,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU;QAChE,CAAC,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC;QACpG,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,oBAAoB,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAc;IAC3D,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACvG,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;SACV;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DiagnosticIR } from "@acpus/core/ir";
2
+ import ts from "typescript";
3
+ export type TypeScriptCheck = {
4
+ diagnostics: DiagnosticIR[];
5
+ program?: ts.Program;
6
+ sourceFile?: ts.SourceFile;
7
+ };
8
+ export declare function checkTypeScript(entry: string, cwd: string, scratchDir: string): Promise<TypeScriptCheck>;
9
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/check/typescript.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;CAC5B,CAAC;AAEF,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAyB9G"}