@workflow/builders 4.0.1-beta.6 → 4.0.1-beta.60

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 (92) hide show
  1. package/dist/apply-swc-transform.d.ts +14 -4
  2. package/dist/apply-swc-transform.d.ts.map +1 -1
  3. package/dist/apply-swc-transform.js +59 -9
  4. package/dist/apply-swc-transform.js.map +1 -1
  5. package/dist/base-builder.d.ts +65 -22
  6. package/dist/base-builder.d.ts.map +1 -1
  7. package/dist/base-builder.js +482 -136
  8. package/dist/base-builder.js.map +1 -1
  9. package/dist/build-queue.d.ts +18 -0
  10. package/dist/build-queue.d.ts.map +1 -0
  11. package/dist/build-queue.js +26 -0
  12. package/dist/build-queue.js.map +1 -0
  13. package/dist/config-helpers.d.ts +31 -0
  14. package/dist/config-helpers.d.ts.map +1 -1
  15. package/dist/config-helpers.js +60 -0
  16. package/dist/config-helpers.js.map +1 -1
  17. package/dist/constants.d.ts +2 -2
  18. package/dist/constants.js +2 -2
  19. package/dist/discover-entries-esbuild-plugin.d.ts +2 -3
  20. package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
  21. package/dist/discover-entries-esbuild-plugin.js +71 -26
  22. package/dist/discover-entries-esbuild-plugin.js.map +1 -1
  23. package/dist/get-input-files.test.d.ts +2 -0
  24. package/dist/get-input-files.test.d.ts.map +1 -0
  25. package/dist/get-input-files.test.js +119 -0
  26. package/dist/get-input-files.test.js.map +1 -0
  27. package/dist/index.d.ts +9 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +8 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/module-specifier.d.ts +85 -0
  32. package/dist/module-specifier.d.ts.map +1 -0
  33. package/dist/module-specifier.js +448 -0
  34. package/dist/module-specifier.js.map +1 -0
  35. package/dist/module-specifier.test.d.ts +2 -0
  36. package/dist/module-specifier.test.d.ts.map +1 -0
  37. package/dist/module-specifier.test.js +211 -0
  38. package/dist/module-specifier.test.js.map +1 -0
  39. package/dist/node-module-esbuild-plugin.d.ts +37 -0
  40. package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
  41. package/dist/node-module-esbuild-plugin.js +286 -7
  42. package/dist/node-module-esbuild-plugin.js.map +1 -1
  43. package/dist/node-module-esbuild-plugin.test.js +347 -146
  44. package/dist/node-module-esbuild-plugin.test.js.map +1 -1
  45. package/dist/pseudo-package-esbuild-plugin.d.ts +20 -0
  46. package/dist/pseudo-package-esbuild-plugin.d.ts.map +1 -0
  47. package/dist/pseudo-package-esbuild-plugin.js +47 -0
  48. package/dist/pseudo-package-esbuild-plugin.js.map +1 -0
  49. package/dist/pseudo-package-esbuild-plugin.test.d.ts +2 -0
  50. package/dist/pseudo-package-esbuild-plugin.test.d.ts.map +1 -0
  51. package/dist/pseudo-package-esbuild-plugin.test.js +315 -0
  52. package/dist/pseudo-package-esbuild-plugin.test.js.map +1 -0
  53. package/dist/request-converter.d.ts +3 -0
  54. package/dist/request-converter.d.ts.map +1 -0
  55. package/dist/request-converter.js +14 -0
  56. package/dist/request-converter.js.map +1 -0
  57. package/dist/standalone.d.ts +3 -0
  58. package/dist/standalone.d.ts.map +1 -1
  59. package/dist/standalone.js +37 -13
  60. package/dist/standalone.js.map +1 -1
  61. package/dist/swc-esbuild-plugin.d.ts +0 -2
  62. package/dist/swc-esbuild-plugin.d.ts.map +1 -1
  63. package/dist/swc-esbuild-plugin.js +33 -15
  64. package/dist/swc-esbuild-plugin.js.map +1 -1
  65. package/dist/transform-utils.d.ts +68 -0
  66. package/dist/transform-utils.d.ts.map +1 -0
  67. package/dist/transform-utils.js +102 -0
  68. package/dist/transform-utils.js.map +1 -0
  69. package/dist/transform-utils.test.d.ts +2 -0
  70. package/dist/transform-utils.test.d.ts.map +1 -0
  71. package/dist/transform-utils.test.js +283 -0
  72. package/dist/transform-utils.test.js.map +1 -0
  73. package/dist/types.d.ts +26 -2
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/types.js +2 -0
  76. package/dist/types.js.map +1 -1
  77. package/dist/vercel-build-output-api.d.ts.map +1 -1
  78. package/dist/vercel-build-output-api.js +36 -14
  79. package/dist/vercel-build-output-api.js.map +1 -1
  80. package/dist/workflow-alias.d.ts +3 -0
  81. package/dist/workflow-alias.d.ts.map +1 -0
  82. package/dist/workflow-alias.js +46 -0
  83. package/dist/workflow-alias.js.map +1 -0
  84. package/dist/workflow-alias.test.d.ts +2 -0
  85. package/dist/workflow-alias.test.d.ts.map +1 -0
  86. package/dist/workflow-alias.test.js +46 -0
  87. package/dist/workflow-alias.test.js.map +1 -0
  88. package/dist/workflows-extractor.d.ts +92 -0
  89. package/dist/workflows-extractor.d.ts.map +1 -0
  90. package/dist/workflows-extractor.js +1476 -0
  91. package/dist/workflows-extractor.js.map +1 -0
  92. package/package.json +12 -11
@@ -1,4 +1,4 @@
1
- import { mkdir, writeFile } from 'node:fs/promises';
1
+ import { copyFile, mkdir, writeFile } from 'node:fs/promises';
2
2
  import { join, resolve } from 'node:path';
3
3
  import { BaseBuilder } from './base-builder.js';
4
4
  import { STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER } from './constants.js';
@@ -10,52 +10,73 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
10
10
  // Ensure output directories exist
11
11
  await mkdir(workflowGeneratedDir, { recursive: true });
12
12
  const inputFiles = await this.getInputFiles();
13
- const tsConfig = await this.getTsConfigOptions();
13
+ const tsconfigPath = await this.findTsConfigPath();
14
14
  const options = {
15
15
  inputFiles,
16
16
  workflowGeneratedDir,
17
- tsBaseUrl: tsConfig.baseUrl,
18
- tsPaths: tsConfig.paths,
17
+ tsconfigPath,
19
18
  };
20
- await this.buildStepsFunction(options);
21
- await this.buildWorkflowsFunction(options);
19
+ const stepsManifest = await this.buildStepsFunction(options);
20
+ const workflowsManifest = await this.buildWorkflowsFunction(options);
22
21
  await this.buildWebhookFunction(options);
23
22
  await this.createBuildOutputConfig(outputDir);
23
+ // Merge manifests from both bundles
24
+ const manifest = {
25
+ steps: { ...stepsManifest.steps, ...workflowsManifest.steps },
26
+ workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },
27
+ classes: { ...stepsManifest.classes, ...workflowsManifest.classes },
28
+ };
29
+ // Generate unified manifest
30
+ const workflowBundlePath = join(workflowGeneratedDir, 'flow.func/index.js');
31
+ const manifestJson = await this.createManifest({
32
+ workflowBundlePath,
33
+ manifestDir: workflowGeneratedDir,
34
+ manifest,
35
+ });
36
+ // Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.
37
+ // Vercel Build Output API serves static files from .vercel/output/static/
38
+ if (this.shouldExposePublicManifest && manifestJson) {
39
+ const staticManifestDir = join(outputDir, 'static/.well-known/workflow/v1');
40
+ await mkdir(staticManifestDir, { recursive: true });
41
+ await copyFile(join(workflowGeneratedDir, 'manifest.json'), join(staticManifestDir, 'manifest.json'));
42
+ }
24
43
  await this.createClientLibrary();
25
44
  }
26
- async buildStepsFunction({ inputFiles, workflowGeneratedDir, tsPaths, tsBaseUrl, }) {
45
+ async buildStepsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
27
46
  console.log('Creating Vercel Build Output API steps function');
28
47
  const stepsFuncDir = join(workflowGeneratedDir, 'step.func');
29
48
  await mkdir(stepsFuncDir, { recursive: true });
30
49
  // Create steps bundle
31
- await this.createStepsBundle({
50
+ const { manifest } = await this.createStepsBundle({
32
51
  inputFiles,
33
52
  outfile: join(stepsFuncDir, 'index.js'),
34
- tsBaseUrl,
35
- tsPaths,
53
+ tsconfigPath,
36
54
  });
37
55
  // Create package.json and .vc-config.json for steps function
38
56
  await this.createPackageJson(stepsFuncDir, 'commonjs');
39
57
  await this.createVcConfig(stepsFuncDir, {
40
58
  shouldAddSourcemapSupport: true,
41
59
  experimentalTriggers: [STEP_QUEUE_TRIGGER],
60
+ runtime: this.config.runtime,
42
61
  });
62
+ return manifest;
43
63
  }
44
- async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir, tsPaths, tsBaseUrl, }) {
64
+ async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
45
65
  console.log('Creating Vercel Build Output API workflows function');
46
66
  const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');
47
67
  await mkdir(workflowsFuncDir, { recursive: true });
48
- await this.createWorkflowsBundle({
68
+ const { manifest } = await this.createWorkflowsBundle({
49
69
  outfile: join(workflowsFuncDir, 'index.js'),
50
70
  inputFiles,
51
- tsBaseUrl,
52
- tsPaths,
71
+ tsconfigPath,
53
72
  });
54
73
  // Create package.json and .vc-config.json for workflows function
55
74
  await this.createPackageJson(workflowsFuncDir, 'commonjs');
56
75
  await this.createVcConfig(workflowsFuncDir, {
57
76
  experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],
77
+ runtime: this.config.runtime,
58
78
  });
79
+ return manifest;
59
80
  }
60
81
  async buildWebhookFunction({ workflowGeneratedDir, bundle = true, }) {
61
82
  console.log('Creating Vercel Build Output API webhook function');
@@ -69,6 +90,7 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
69
90
  await this.createPackageJson(webhookFuncDir, 'commonjs');
70
91
  await this.createVcConfig(webhookFuncDir, {
71
92
  shouldAddHelpers: false,
93
+ runtime: this.config.runtime,
72
94
  });
73
95
  }
74
96
  async createBuildOutputConfig(outputDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-build-output-api.js","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vercel-build-output-api.js","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function clearWorkflowAliasResolutionCache(): void;
2
+ export declare function resolveWorkflowAliasRelativePath(absoluteFilePath: string, workingDir: string): Promise<string | undefined>;
3
+ //# sourceMappingURL=workflow-alias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-alias.d.ts","sourceRoot":"","sources":["../src/workflow-alias.ts"],"names":[],"mappings":"AAQA,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,wBAAsB,gCAAgC,CACpD,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgD7B"}
@@ -0,0 +1,46 @@
1
+ import { access, realpath } from 'node:fs/promises';
2
+ import { basename, resolve } from 'node:path';
3
+ const workflowAliasResolutionCache = new Map();
4
+ export function clearWorkflowAliasResolutionCache() {
5
+ workflowAliasResolutionCache.clear();
6
+ }
7
+ export async function resolveWorkflowAliasRelativePath(absoluteFilePath, workingDir) {
8
+ const normalizedAbsolutePath = absoluteFilePath.replace(/\\/g, '/');
9
+ // Only workflow source files can map to app-level `workflows/*` aliases.
10
+ if (!normalizedAbsolutePath.includes('/workflows/')) {
11
+ return undefined;
12
+ }
13
+ const cacheKey = `${workingDir}::${normalizedAbsolutePath}`;
14
+ const cached = workflowAliasResolutionCache.get(cacheKey);
15
+ if (cached) {
16
+ return cached;
17
+ }
18
+ const resolutionPromise = (async () => {
19
+ const fileName = basename(absoluteFilePath);
20
+ const aliasDirs = ['workflows', 'src/workflows'];
21
+ const resolvedFilePath = await realpath(absoluteFilePath).catch(() => undefined);
22
+ if (!resolvedFilePath) {
23
+ return undefined;
24
+ }
25
+ const aliases = await Promise.all(aliasDirs.map(async (aliasDir) => {
26
+ const candidatePath = resolve(workingDir, aliasDir, fileName);
27
+ try {
28
+ await access(candidatePath);
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ const resolvedCandidatePath = await realpath(candidatePath).catch(() => undefined);
34
+ if (!resolvedCandidatePath) {
35
+ return undefined;
36
+ }
37
+ return resolvedCandidatePath === resolvedFilePath
38
+ ? `${aliasDir}/${fileName}`
39
+ : undefined;
40
+ }));
41
+ return aliases.find((aliasPath) => Boolean(aliasPath));
42
+ })();
43
+ workflowAliasResolutionCache.set(cacheKey, resolutionPromise);
44
+ return resolutionPromise;
45
+ }
46
+ //# sourceMappingURL=workflow-alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-alias.js","sourceRoot":"","sources":["../src/workflow-alias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,4BAA4B,GAAG,IAAI,GAAG,EAGzC,CAAC;AAEJ,MAAM,UAAU,iCAAiC;IAC/C,4BAA4B,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,gBAAwB,EACxB,UAAkB;IAElB,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpE,yEAAyE;IACzE,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,UAAU,KAAK,sBAAsB,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,KAAK,IAAI,EAAE;QACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAC7D,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC/B,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,CAC/D,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;YACF,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC3B,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,qBAAqB,KAAK,gBAAgB;gBAC/C,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE;gBAC3B,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAuB,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,EAAE,CAAC;IAEL,4BAA4B,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC9D,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow-alias.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-alias.test.d.ts","sourceRoot":"","sources":["../src/workflow-alias.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { dirname, join } from 'node:path';
4
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
5
+ import { clearWorkflowAliasResolutionCache, resolveWorkflowAliasRelativePath, } from './workflow-alias.js';
6
+ function writeFile(path) {
7
+ mkdirSync(dirname(path), { recursive: true });
8
+ writeFileSync(path, "'use workflow';\n", 'utf-8');
9
+ }
10
+ describe('resolveWorkflowAliasRelativePath', () => {
11
+ let testRoot;
12
+ let workingDir;
13
+ beforeEach(() => {
14
+ clearWorkflowAliasResolutionCache();
15
+ testRoot = mkdtempSync(join(tmpdir(), 'workflow-alias-'));
16
+ workingDir = join(testRoot, 'app');
17
+ mkdirSync(workingDir, { recursive: true });
18
+ });
19
+ afterEach(() => {
20
+ clearWorkflowAliasResolutionCache();
21
+ rmSync(testRoot, { recursive: true, force: true });
22
+ });
23
+ it('maps files in workflows/ to workflows/* aliases', async () => {
24
+ const filePath = join(workingDir, 'workflows', 'foo.ts');
25
+ writeFile(filePath);
26
+ await expect(resolveWorkflowAliasRelativePath(filePath, workingDir)).resolves.toBe('workflows/foo.ts');
27
+ });
28
+ it('maps files in src/workflows/ to src/workflows/* aliases', async () => {
29
+ const filePath = join(workingDir, 'src', 'workflows', 'foo.ts');
30
+ writeFile(filePath);
31
+ await expect(resolveWorkflowAliasRelativePath(filePath, workingDir)).resolves.toBe('src/workflows/foo.ts');
32
+ });
33
+ it('returns undefined for files that are not under workflows paths', async () => {
34
+ const filePath = join(workingDir, 'lib', 'foo.ts');
35
+ writeFile(filePath);
36
+ await expect(resolveWorkflowAliasRelativePath(filePath, workingDir)).resolves.toBeUndefined();
37
+ });
38
+ it('returns undefined when basename matches but realpath differs', async () => {
39
+ const workflowFilePath = join(workingDir, 'workflows', 'foo.ts');
40
+ const externalFilePath = join(testRoot, 'external', 'workflows', 'foo.ts');
41
+ writeFile(workflowFilePath);
42
+ writeFile(externalFilePath);
43
+ await expect(resolveWorkflowAliasRelativePath(externalFilePath, workingDir)).resolves.toBeUndefined();
44
+ });
45
+ });
46
+ //# sourceMappingURL=workflow-alias.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-alias.test.js","sourceRoot":"","sources":["../src/workflow-alias.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Node metadata for control flow semantics
3
+ */
4
+ export interface NodeMetadata {
5
+ loopId?: string;
6
+ loopIsAwait?: boolean;
7
+ conditionalId?: string;
8
+ conditionalBranch?: 'Then' | 'Else';
9
+ parallelGroupId?: string;
10
+ parallelMethod?: string;
11
+ /** Step is passed as a reference (callback/tool) rather than directly called */
12
+ isStepReference?: boolean;
13
+ /** Context where the step reference was found (e.g., "tools.getWeather.execute") */
14
+ referenceContext?: string;
15
+ /** This node is a tool step connected to a DurableAgent */
16
+ isTool?: boolean;
17
+ /** The name of the tool (key in tools object) */
18
+ toolName?: string;
19
+ /** This node represents a collection of tools (imported variable) */
20
+ isToolsCollection?: boolean;
21
+ /** The variable name of the tools collection */
22
+ toolsVariable?: string;
23
+ }
24
+ /**
25
+ * Graph node for workflow visualization
26
+ */
27
+ export interface ManifestNode {
28
+ id: string;
29
+ type: string;
30
+ data: {
31
+ label: string;
32
+ nodeKind: string;
33
+ stepId?: string;
34
+ };
35
+ metadata?: NodeMetadata;
36
+ }
37
+ /**
38
+ * Graph edge for workflow control flow
39
+ */
40
+ export interface ManifestEdge {
41
+ id: string;
42
+ source: string;
43
+ target: string;
44
+ type: 'default' | 'loop' | 'conditional' | 'parallel' | 'tool';
45
+ label?: string;
46
+ }
47
+ /**
48
+ * Graph data for a single workflow
49
+ */
50
+ export interface WorkflowGraphData {
51
+ nodes: ManifestNode[];
52
+ edges: ManifestEdge[];
53
+ }
54
+ /**
55
+ * Step entry in the manifest
56
+ */
57
+ export interface ManifestStepEntry {
58
+ stepId: string;
59
+ }
60
+ /**
61
+ * Workflow entry in the manifest (includes graph data)
62
+ */
63
+ export interface ManifestWorkflowEntry {
64
+ workflowId: string;
65
+ graph: WorkflowGraphData;
66
+ }
67
+ /**
68
+ * Manifest structure - single source of truth for all workflow metadata
69
+ */
70
+ export interface Manifest {
71
+ version: string;
72
+ steps: {
73
+ [filePath: string]: {
74
+ [stepName: string]: ManifestStepEntry;
75
+ };
76
+ };
77
+ workflows: {
78
+ [filePath: string]: {
79
+ [workflowName: string]: ManifestWorkflowEntry;
80
+ };
81
+ };
82
+ }
83
+ /**
84
+ * Extracts workflow graphs from a bundled workflow file.
85
+ * Returns workflow entries organized by file path, ready for merging into Manifest.
86
+ */
87
+ export declare function extractWorkflowGraphs(bundlePath: string): Promise<{
88
+ [filePath: string]: {
89
+ [workflowName: string]: ManifestWorkflowEntry;
90
+ };
91
+ }>;
92
+ //# sourceMappingURL=workflows-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows-extractor.d.ts","sourceRoot":"","sources":["../src/workflows-extractor.ts"],"names":[],"mappings":"AAqIA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,CAAC,QAAQ,EAAE,MAAM,GAAG;YAClB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAAC;SACvC,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,CAAC,QAAQ,EAAE,MAAM,GAAG;YAClB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAAC;SAC/C,CAAC;KACH,CAAC;CACH;AAMD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAAC;KAC/C,CAAC;CACH,CAAC,CA8BD"}