@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,113 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile, rm } from "node:fs/promises";
3
+ import { join, relative, resolve } from "node:path";
4
+ import { checkWorkflow } from "../check/runner.js";
5
+ import { compileWorkflow } from "../compiler/worker.js";
6
+ import { createScratchDir } from "./temp.js";
7
+ import { err, ok, ResultAsync } from "neverthrow";
8
+ export class WorkflowPreparationError extends Error {
9
+ failure;
10
+ constructor(failure) {
11
+ super(failure.message);
12
+ this.failure = failure;
13
+ }
14
+ }
15
+ export async function prepareWorkflow(options) {
16
+ const result = await tryPrepareWorkflow(options);
17
+ return result.match(prepared => prepared, failure => {
18
+ throw new WorkflowPreparationError(failure);
19
+ });
20
+ }
21
+ export function tryPrepareWorkflow(options) {
22
+ const workflowPath = resolve(options.cwd, options.workflow);
23
+ return ResultAsync.fromPromise(prepareWorkflowResult(options, workflowPath), cause => ({
24
+ type: "compile-failed",
25
+ phase: "compile",
26
+ message: `Workflow preparation failed: ${causeMessage(cause)}`,
27
+ })).andThen(result => result);
28
+ }
29
+ async function prepareWorkflowResult(options, workflowPath) {
30
+ const scratchDir = await createScratchDir();
31
+ try {
32
+ const check = await checkWorkflow(workflowPath, options.cwd, scratchDir);
33
+ if (check.diagnostics.some(diagnostic => diagnostic.severity === "error")) {
34
+ return err({
35
+ type: "check-failed",
36
+ phase: "check",
37
+ message: "Workflow check failed.",
38
+ diagnostics: check.diagnostics,
39
+ });
40
+ }
41
+ const compiled = await compileWorkflow(workflowPath, options.cwd, scratchDir);
42
+ if (!compiled.ok) {
43
+ return err({
44
+ type: "compile-failed",
45
+ phase: "compile",
46
+ message: compiled.message,
47
+ });
48
+ }
49
+ if (compiled.ir.diagnostics.some(diagnostic => diagnostic.severity === "error")) {
50
+ return err({
51
+ type: "validate-failed",
52
+ phase: "validate",
53
+ message: "Workflow validation failed.",
54
+ diagnostics: compiled.ir.diagnostics,
55
+ ir: compiled.ir,
56
+ });
57
+ }
58
+ const irJson = `${JSON.stringify(compiled.ir, null, 2)}\n`;
59
+ const irDigest = digest(irJson);
60
+ const packageLock = await packageLockDigest(options.cwd);
61
+ const sourceGraphDigest = digest([
62
+ compiled.ir.lock.workflowSourceDigest ?? "",
63
+ packageLock ?? "",
64
+ ].join("\n"));
65
+ return ok({
66
+ workflowPath,
67
+ ir: compiled.ir,
68
+ irJson,
69
+ irDigest,
70
+ sourceGraphDigest,
71
+ ...(packageLock ? { packageLockDigest: packageLock } : {}),
72
+ lock: buildLock(compiled.ir, workflowPath, options.cwd, irDigest, sourceGraphDigest, packageLock),
73
+ });
74
+ }
75
+ finally {
76
+ await rm(scratchDir, { recursive: true, force: true });
77
+ }
78
+ }
79
+ function buildLock(ir, workflowPath, cwd, irDigest, sourceGraphDigest, packageLock) {
80
+ return {
81
+ kind: "acpus_workflow_preparation_lock",
82
+ version: 1,
83
+ workflow: {
84
+ entry: relative(cwd, workflowPath),
85
+ ...(ir.lock.workflowSourceDigest ? { sourceDigest: ir.lock.workflowSourceDigest } : {}),
86
+ },
87
+ ir: {
88
+ path: "workflow.ir.json",
89
+ digest: irDigest,
90
+ },
91
+ ...(packageLock ? { packageLockDigest: packageLock } : {}),
92
+ sourceGraphDigest,
93
+ generatedAt: new Date().toISOString(),
94
+ };
95
+ }
96
+ async function packageLockDigest(cwd) {
97
+ for (const name of ["pnpm-lock.yaml", "package-lock.json", "yarn.lock"]) {
98
+ try {
99
+ return digest(await readFile(join(cwd, name), "utf8"));
100
+ }
101
+ catch {
102
+ // Try the next common lockfile name.
103
+ }
104
+ }
105
+ return undefined;
106
+ }
107
+ function digest(value) {
108
+ return `sha256:${createHash("sha256").update(value).digest("hex")}`;
109
+ }
110
+ function causeMessage(cause) {
111
+ return cause instanceof Error ? cause.message : String(cause);
112
+ }
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/preflight/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function createScratchDir(): Promise<string>;
2
+ //# sourceMappingURL=temp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temp.d.ts","sourceRoot":"","sources":["../../src/preflight/temp.ts"],"names":[],"mappings":"AAIA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAExD"}
@@ -0,0 +1,7 @@
1
+ import { mkdtemp } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ export async function createScratchDir() {
5
+ return mkdtemp(join(tmpdir(), "acpus-run-"));
6
+ }
7
+ //# sourceMappingURL=temp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temp.js","sourceRoot":"","sources":["../../src/preflight/temp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import ts from "typescript";
2
+ export declare function parseSourceFile(file: string, source: string): ts.SourceFile;
3
+ export declare function objectProperty(object: ts.ObjectLiteralExpression, name: string): ts.Expression | undefined;
4
+ export declare function execFunction(options: ts.ObjectLiteralExpression): ts.FunctionLikeDeclarationBase | undefined;
5
+ export declare function taskFactoryLocalName(sourceFile: ts.SourceFile): string | undefined;
6
+ export declare function isTaskDefineCall(expression: ts.Expression, taskFactory: string | undefined): boolean;
7
+ export declare function isExported(node: ts.VariableStatement): boolean;
8
+ export declare function isConstVariableStatement(node: ts.VariableStatement): boolean;
9
+ //# sourceMappingURL=ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/task-analysis/ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,UAAU,CAG3E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAK1G;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,uBAAuB,GAAG,EAAE,CAAC,2BAA2B,GAAG,SAAS,CAM5G;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAYlF;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAOpG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,GAAG,OAAO,CAE5E"}
@@ -0,0 +1,61 @@
1
+ import ts from "typescript";
2
+ export function parseSourceFile(file, source) {
3
+ const scriptKind = file.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS;
4
+ return ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true, scriptKind);
5
+ }
6
+ export function objectProperty(object, name) {
7
+ for (const member of object.properties) {
8
+ if (ts.isPropertyAssignment(member) && propertyName(member.name) === name)
9
+ return member.initializer;
10
+ }
11
+ return undefined;
12
+ }
13
+ export function execFunction(options) {
14
+ const run = objectProperty(options, "run");
15
+ if (!run || !ts.isObjectLiteralExpression(run))
16
+ return undefined;
17
+ const exec = objectProperty(run, "exec");
18
+ if (exec && (ts.isArrowFunction(exec) || ts.isFunctionExpression(exec)))
19
+ return exec;
20
+ return undefined;
21
+ }
22
+ export function taskFactoryLocalName(sourceFile) {
23
+ for (const statement of sourceFile.statements) {
24
+ if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))
25
+ continue;
26
+ if (!isCoreAuthoringSpecifier(statement.moduleSpecifier.text))
27
+ continue;
28
+ const named = statement.importClause?.namedBindings;
29
+ if (named && ts.isNamedImports(named)) {
30
+ for (const element of named.elements) {
31
+ if ((element.propertyName ?? element.name).text === "task")
32
+ return element.name.text;
33
+ }
34
+ }
35
+ }
36
+ return undefined;
37
+ }
38
+ export function isTaskDefineCall(expression, taskFactory) {
39
+ if (!taskFactory || !ts.isCallExpression(expression))
40
+ return false;
41
+ const callee = expression.expression;
42
+ return ts.isPropertyAccessExpression(callee)
43
+ && callee.name.text === "define"
44
+ && ts.isIdentifier(callee.expression)
45
+ && callee.expression.text === taskFactory;
46
+ }
47
+ export function isExported(node) {
48
+ return Boolean(node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword));
49
+ }
50
+ export function isConstVariableStatement(node) {
51
+ return (node.declarationList.flags & ts.NodeFlags.Const) !== 0;
52
+ }
53
+ function propertyName(name) {
54
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name))
55
+ return name.text;
56
+ return undefined;
57
+ }
58
+ function isCoreAuthoringSpecifier(specifier) {
59
+ return specifier === "acpus/core" || specifier === "@acpus/core";
60
+ }
61
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/task-analysis/ast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import ts from "typescript";
2
+ import type { TaskCallsite } from "./types.js";
3
+ export type TaskCallsiteIssueReason = "saved-step-declaration" | "non-object-task-spec" | "non-literal-task-id";
4
+ export declare function findTaskCallsites(sourceFile: ts.SourceFile): TaskCallsite[];
5
+ export declare function unjoinableTaskCallsiteReason(node: ts.Node, checker: ts.TypeChecker): TaskCallsiteIssueReason | undefined;
6
+ //# sourceMappingURL=callsites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callsites.d.ts","sourceRoot":"","sources":["../../src/task-analysis/callsites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAsB,MAAM,YAAY,CAAC;AAEnE,MAAM,MAAM,uBAAuB,GAC/B,wBAAwB,GACxB,sBAAsB,GACtB,qBAAqB,CAAC;AAO1B,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,YAAY,EAAE,CAS3E;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,uBAAuB,GAAG,SAAS,CAGxH"}
@@ -0,0 +1,77 @@
1
+ import ts from "typescript";
2
+ export function findTaskCallsites(sourceFile) {
3
+ const callsites = [];
4
+ const visit = (node) => {
5
+ const callsite = classifyTaskCallsite(node);
6
+ if (callsite.kind === "joinable")
7
+ callsites.push(callsite.callsite);
8
+ ts.forEachChild(node, visit);
9
+ };
10
+ visit(sourceFile);
11
+ return callsites;
12
+ }
13
+ export function unjoinableTaskCallsiteReason(node, checker) {
14
+ const callsite = classifyTaskCallsite(node, checker);
15
+ return callsite.kind === "unjoinable" ? callsite.reason : undefined;
16
+ }
17
+ function classifyTaskCallsite(node, checker) {
18
+ if (!ts.isCallExpression(node))
19
+ return { kind: "none" };
20
+ const callee = node.expression;
21
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "task")
22
+ return { kind: "none" };
23
+ const joinable = matchJoinableTaskCallsite(node);
24
+ if (joinable)
25
+ return { kind: "joinable", callsite: joinable };
26
+ const directStepReason = directStepCallIssueReason(node);
27
+ if (directStepReason)
28
+ return { kind: "unjoinable", reason: directStepReason };
29
+ if (checker && isAcpusStepDeclaration(callee.expression, checker)) {
30
+ return { kind: "unjoinable", reason: "saved-step-declaration" };
31
+ }
32
+ return { kind: "none" };
33
+ }
34
+ function matchJoinableTaskCallsite(node) {
35
+ const callee = node.expression;
36
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "task")
37
+ return undefined;
38
+ const stepCall = callee.expression;
39
+ if (!ts.isCallExpression(stepCall) || !ts.isIdentifier(stepCall.expression) || stepCall.expression.text !== "step")
40
+ return undefined;
41
+ const id = stepCall.arguments[0];
42
+ if (!id || !ts.isStringLiteral(id))
43
+ return undefined;
44
+ const options = node.arguments[0];
45
+ if (!options || !ts.isObjectLiteralExpression(options))
46
+ return undefined;
47
+ return { stepId: id.text, options, source: sourceLocation(node) };
48
+ }
49
+ function directStepCallIssueReason(node) {
50
+ const callee = node.expression;
51
+ if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "task")
52
+ return undefined;
53
+ const stepCall = callee.expression;
54
+ if (!ts.isCallExpression(stepCall) || !ts.isIdentifier(stepCall.expression) || stepCall.expression.text !== "step")
55
+ return undefined;
56
+ const id = stepCall.arguments[0];
57
+ if (!id || !ts.isStringLiteral(id))
58
+ return "non-literal-task-id";
59
+ const options = node.arguments[0];
60
+ if (!options || !ts.isObjectLiteralExpression(options))
61
+ return "non-object-task-spec";
62
+ return undefined;
63
+ }
64
+ function isAcpusStepDeclaration(node, checker) {
65
+ const type = checker.getTypeAtLocation(node);
66
+ return type.aliasSymbol?.name === "StepDeclaration";
67
+ }
68
+ function sourceLocation(node) {
69
+ const sourceFile = node.getSourceFile();
70
+ const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
71
+ return {
72
+ file: sourceFile.fileName,
73
+ line: position.line + 1,
74
+ column: position.character + 1,
75
+ };
76
+ }
77
+ //# sourceMappingURL=callsites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callsites.js","sourceRoot":"","sources":["../../src/task-analysis/callsites.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { TaskReferenceMetadata } from "./types.js";
2
+ export type { AnalyzedTask, TaskAnalysisFact, TaskAuthoringIssue, TaskReferenceMetadata, TaskMetadataFact, WorkflowTaskAnalysis, } from "./types.js";
3
+ import type { TaskAnalysisFact, WorkflowTaskAnalysis } from "./types.js";
4
+ export declare function analyzeWorkflowTasks(workflowFile: string, source: string): Promise<WorkflowTaskAnalysis>;
5
+ export declare function analyzeWorkflowTasksSync(workflowFile: string, source: string): WorkflowTaskAnalysis;
6
+ export declare function analyzeTaskAuthoring(analysis: WorkflowTaskAnalysis): TaskAnalysisFact[];
7
+ export declare function resolveTaskReferenceMetadata(analysis: WorkflowTaskAnalysis): Map<string, TaskReferenceMetadata>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task-analysis/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAqC,qBAAqB,EAAoC,MAAM,YAAY,CAAC;AAQ7H,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAgB,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AASvF,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAE9G;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAUnG;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,gBAAgB,EAAE,CAOvF;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAM/G"}
@@ -0,0 +1,122 @@
1
+ import ts from "typescript";
2
+ import { execFunction, isTaskDefineCall, objectProperty, parseSourceFile, taskFactoryLocalName } from "./ast.js";
3
+ import { findTaskCallsites } from "./callsites.js";
4
+ import { collectFreeIdentifiers } from "./inline-capture.js";
5
+ import { collectImportBindings, collectLocalValueNames, collectWorkflowTaskExports, hasInnerBinding } from "./workflow-symbols.js";
6
+ export async function analyzeWorkflowTasks(workflowFile, source) {
7
+ return analyzeWorkflowTasksSync(workflowFile, source);
8
+ }
9
+ export function analyzeWorkflowTasksSync(workflowFile, source) {
10
+ const sourceFile = parseSourceFile(workflowFile, source);
11
+ const imports = collectImportBindings(sourceFile);
12
+ const locals = collectLocalValueNames(sourceFile);
13
+ const localExports = collectWorkflowTaskExports(sourceFile);
14
+ const analysis = new Map();
15
+ for (const callsite of findTaskCallsites(sourceFile)) {
16
+ setAnalyzedCallsite(analysis, callsite, analyzeCallsite(callsite, { workflowFile, imports, locals, localExports }));
17
+ }
18
+ return analysis;
19
+ }
20
+ export function analyzeTaskAuthoring(analysis) {
21
+ return [...analysis].map(([stepId, analyzed]) => ({
22
+ stepId,
23
+ inline: analyzed.inline,
24
+ ...(analyzed.issue ? { issue: analyzed.issue } : {}),
25
+ ...(analyzed.source ? { source: analyzed.source } : {}),
26
+ }));
27
+ }
28
+ export function resolveTaskReferenceMetadata(analysis) {
29
+ const metadata = new Map();
30
+ for (const [stepId, analyzed] of analysis) {
31
+ if (analyzed.metadata)
32
+ metadata.set(stepId, analyzed.metadata);
33
+ }
34
+ return metadata;
35
+ }
36
+ function analyzeCallsite(callsite, ctx) {
37
+ const run = objectProperty(callsite.options, "run");
38
+ const taskValue = run && ts.isObjectLiteralExpression(run) ? objectProperty(run, "task") : undefined;
39
+ if (taskValue)
40
+ return withIssueSource(analyzeReusable(taskValue, ctx), callsite);
41
+ const exec = execFunction(callsite.options);
42
+ if (exec)
43
+ return withIssueSource(analyzeInline(exec), callsite);
44
+ return { inline: true };
45
+ }
46
+ function analyzeReusable(taskValue, ctx) {
47
+ if (!ts.isIdentifier(taskValue)) {
48
+ return reusableIssue({ kind: "invalid-reusable-task-reference" });
49
+ }
50
+ const local = analyzeLocalReusable(taskValue, ctx);
51
+ if (local)
52
+ return local;
53
+ const name = taskValue.text;
54
+ const binding = ctx.imports.get(name);
55
+ if (!binding) {
56
+ return reusableIssue({ kind: "invalid-reusable-task-reference", name });
57
+ }
58
+ return reusableMetadata(binding.specifier, binding.importedName);
59
+ }
60
+ function analyzeLocalReusable(taskValue, ctx) {
61
+ const name = taskValue.text;
62
+ if (hasInnerBinding(taskValue)) {
63
+ return reusableIssue({ kind: "workflow-local-reusable-task", name });
64
+ }
65
+ const localExport = ctx.localExports.get(name);
66
+ if (localExport) {
67
+ const taskFactory = taskFactoryLocalName(taskValue.getSourceFile());
68
+ if (!localExport.initializer || !isTaskDefineCall(localExport.initializer, taskFactory)) {
69
+ return reusableIssue({ kind: "invalid-reusable-task-export", importedName: localExport.exportName, file: ctx.workflowFile, reason: "not-task-define" });
70
+ }
71
+ return {
72
+ inline: false,
73
+ metadata: {
74
+ specifier: `./${ctx.workflowFile.split(/[\\/]/).pop() ?? ""}`,
75
+ exportName: localExport.exportName,
76
+ },
77
+ };
78
+ }
79
+ if (ctx.locals.has(name) && !ctx.imports.has(name)) {
80
+ return reusableIssue({ kind: "workflow-local-reusable-task", name });
81
+ }
82
+ return undefined;
83
+ }
84
+ function reusableMetadata(specifier, exportName) {
85
+ return {
86
+ inline: false,
87
+ metadata: {
88
+ specifier,
89
+ exportName,
90
+ },
91
+ };
92
+ }
93
+ function analyzeInline(exec) {
94
+ const free = collectFreeIdentifiers(exec);
95
+ if (free.length > 0) {
96
+ return {
97
+ inline: true,
98
+ issue: { kind: "inline-task-capture", names: free },
99
+ };
100
+ }
101
+ return { inline: true };
102
+ }
103
+ function reusableIssue(issue) {
104
+ return { inline: false, issue };
105
+ }
106
+ function withIssueSource(analyzed, callsite) {
107
+ if (!analyzed.issue)
108
+ return analyzed;
109
+ return { ...analyzed, source: callsite.source };
110
+ }
111
+ function setAnalyzedCallsite(analysis, callsite, analyzed) {
112
+ if (analysis.has(callsite.stepId)) {
113
+ analysis.set(callsite.stepId, {
114
+ inline: false,
115
+ issue: { kind: "ambiguous-task-callsite" },
116
+ source: callsite.source,
117
+ });
118
+ return;
119
+ }
120
+ analysis.set(callsite.stepId, analyzed);
121
+ }
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task-analysis/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import ts from "typescript";
2
+ export declare function collectFreeIdentifiers(fn: ts.FunctionLikeDeclarationBase): string[];
3
+ //# sourceMappingURL=inline-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-capture.d.ts","sourceRoot":"","sources":["../../src/task-analysis/inline-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAQ5B,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,EAAE,CAAC,2BAA2B,GAAG,MAAM,EAAE,CAMnF"}
@@ -0,0 +1,51 @@
1
+ import ts from "typescript";
2
+ import { collectDeclaredNames } from "./workflow-symbols.js";
3
+ const GLOBALS = new Set([
4
+ ...Object.getOwnPropertyNames(globalThis),
5
+ "arguments",
6
+ ]);
7
+ export function collectFreeIdentifiers(fn) {
8
+ const declared = new Set();
9
+ collectDeclaredNames(fn, declared);
10
+ const referenced = new Set();
11
+ collectReferences(fn, referenced);
12
+ return [...referenced].filter(name => !declared.has(name) && !GLOBALS.has(name)).sort();
13
+ }
14
+ function collectReferences(node, out) {
15
+ if (ts.isTypeNode(node))
16
+ return;
17
+ if (ts.isPropertyAccessExpression(node)) {
18
+ collectReferences(node.expression, out);
19
+ return;
20
+ }
21
+ if (ts.isPropertyAssignment(node)) {
22
+ if (ts.isComputedPropertyName(node.name))
23
+ collectReferences(node.name.expression, out);
24
+ collectReferences(node.initializer, out);
25
+ return;
26
+ }
27
+ if (ts.isShorthandPropertyAssignment(node)) {
28
+ out.add(node.name.text);
29
+ return;
30
+ }
31
+ if (ts.isBindingElement(node)) {
32
+ if (node.propertyName && ts.isComputedPropertyName(node.propertyName))
33
+ collectReferences(node.propertyName.expression, out);
34
+ collectReferences(node.name, out);
35
+ if (node.initializer)
36
+ collectReferences(node.initializer, out);
37
+ return;
38
+ }
39
+ if (ts.isParameter(node) || ts.isVariableDeclaration(node)) {
40
+ collectReferences(node.name, out);
41
+ if (node.initializer)
42
+ collectReferences(node.initializer, out);
43
+ return;
44
+ }
45
+ if (ts.isIdentifier(node)) {
46
+ out.add(node.text);
47
+ return;
48
+ }
49
+ ts.forEachChild(node, child => collectReferences(child, out));
50
+ }
51
+ //# sourceMappingURL=inline-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-capture.js","sourceRoot":"","sources":["../../src/task-analysis/inline-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS;IAC9B,GAAG,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC;IACzC,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CAAC,EAAkC;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,iBAAiB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1F,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAa,EAAE,GAAgB;IACxD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAChC,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,IAAI,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvF,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IACD,IAAI,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5H,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,WAAW;YAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,WAAW;YAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type ts from "typescript";
2
+ export type AnalyzedTask = {
3
+ inline: boolean;
4
+ metadata?: TaskReferenceMetadata;
5
+ issue?: TaskAuthoringIssue;
6
+ source?: TaskSourceLocation;
7
+ };
8
+ export type TaskReferenceMetadata = {
9
+ specifier?: string;
10
+ exportName?: string;
11
+ };
12
+ export type TaskAuthoringIssue = {
13
+ kind: "invalid-reusable-task-reference";
14
+ name?: string;
15
+ } | {
16
+ kind: "workflow-local-reusable-task";
17
+ name: string;
18
+ } | {
19
+ kind: "invalid-reusable-task-export";
20
+ importedName: string;
21
+ file?: string;
22
+ reason: "missing-default" | "missing-named" | "not-task-define";
23
+ } | {
24
+ kind: "inline-task-capture";
25
+ names: string[];
26
+ } | {
27
+ kind: "ambiguous-task-callsite";
28
+ };
29
+ export type TaskAnalysisFact = {
30
+ stepId: string;
31
+ inline: boolean;
32
+ issue?: TaskAuthoringIssue;
33
+ source?: TaskSourceLocation;
34
+ };
35
+ export type TaskMetadataFact = {
36
+ stepId: string;
37
+ metadata: TaskReferenceMetadata;
38
+ };
39
+ export type WorkflowTaskAnalysis = Map<string, AnalyzedTask>;
40
+ export type TaskSourceLocation = {
41
+ file: string;
42
+ line: number;
43
+ column: number;
44
+ };
45
+ export type ImportBinding = {
46
+ specifier: string;
47
+ importedName: string;
48
+ };
49
+ export type WorkflowTaskExport = {
50
+ exportName: string;
51
+ initializer?: ts.Expression;
52
+ };
53
+ export type TaskCallsite = {
54
+ stepId: string;
55
+ options: ts.ObjectLiteralExpression;
56
+ source: TaskSourceLocation;
57
+ };
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/task-analysis/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,iCAAiC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,8BAA8B,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,8BAA8B,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAAG,iBAAiB,CAAA;CAAE,GAC9I;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,qBAAqB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAE7D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,kBAAkB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAA;CAAE,CAAC;AAErF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC;IACpC,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/task-analysis/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import ts from "typescript";
2
+ import type { ImportBinding, WorkflowTaskExport } from "./types.js";
3
+ export declare function collectImportBindings(sourceFile: ts.SourceFile): Map<string, ImportBinding>;
4
+ export declare function collectLocalValueNames(sourceFile: ts.SourceFile): Set<string>;
5
+ export declare function collectDeclaredNames(node: ts.Node, out: Set<string>): void;
6
+ export declare function hasInnerBinding(identifier: ts.Identifier): boolean;
7
+ export declare function collectWorkflowTaskExports(sourceFile: ts.SourceFile): Map<string, WorkflowTaskExport>;
8
+ //# sourceMappingURL=workflow-symbols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-symbols.d.ts","sourceRoot":"","sources":["../../src/task-analysis/workflow-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEpE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAe3F;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAI7E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAS1E;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CAmBlE;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAWrG"}