@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.
- package/dist/apply-swc-transform.d.ts +14 -4
- package/dist/apply-swc-transform.d.ts.map +1 -1
- package/dist/apply-swc-transform.js +59 -9
- package/dist/apply-swc-transform.js.map +1 -1
- package/dist/base-builder.d.ts +65 -22
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +482 -136
- package/dist/base-builder.js.map +1 -1
- package/dist/build-queue.d.ts +18 -0
- package/dist/build-queue.d.ts.map +1 -0
- package/dist/build-queue.js +26 -0
- package/dist/build-queue.js.map +1 -0
- package/dist/config-helpers.d.ts +31 -0
- package/dist/config-helpers.d.ts.map +1 -1
- package/dist/config-helpers.js +60 -0
- package/dist/config-helpers.js.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.js +2 -2
- package/dist/discover-entries-esbuild-plugin.d.ts +2 -3
- package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
- package/dist/discover-entries-esbuild-plugin.js +71 -26
- package/dist/discover-entries-esbuild-plugin.js.map +1 -1
- package/dist/get-input-files.test.d.ts +2 -0
- package/dist/get-input-files.test.d.ts.map +1 -0
- package/dist/get-input-files.test.js +119 -0
- package/dist/get-input-files.test.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/module-specifier.d.ts +85 -0
- package/dist/module-specifier.d.ts.map +1 -0
- package/dist/module-specifier.js +448 -0
- package/dist/module-specifier.js.map +1 -0
- package/dist/module-specifier.test.d.ts +2 -0
- package/dist/module-specifier.test.d.ts.map +1 -0
- package/dist/module-specifier.test.js +211 -0
- package/dist/module-specifier.test.js.map +1 -0
- package/dist/node-module-esbuild-plugin.d.ts +37 -0
- package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
- package/dist/node-module-esbuild-plugin.js +286 -7
- package/dist/node-module-esbuild-plugin.js.map +1 -1
- package/dist/node-module-esbuild-plugin.test.js +347 -146
- package/dist/node-module-esbuild-plugin.test.js.map +1 -1
- package/dist/pseudo-package-esbuild-plugin.d.ts +20 -0
- package/dist/pseudo-package-esbuild-plugin.d.ts.map +1 -0
- package/dist/pseudo-package-esbuild-plugin.js +47 -0
- package/dist/pseudo-package-esbuild-plugin.js.map +1 -0
- package/dist/pseudo-package-esbuild-plugin.test.d.ts +2 -0
- package/dist/pseudo-package-esbuild-plugin.test.d.ts.map +1 -0
- package/dist/pseudo-package-esbuild-plugin.test.js +315 -0
- package/dist/pseudo-package-esbuild-plugin.test.js.map +1 -0
- package/dist/request-converter.d.ts +3 -0
- package/dist/request-converter.d.ts.map +1 -0
- package/dist/request-converter.js +14 -0
- package/dist/request-converter.js.map +1 -0
- package/dist/standalone.d.ts +3 -0
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +37 -13
- package/dist/standalone.js.map +1 -1
- package/dist/swc-esbuild-plugin.d.ts +0 -2
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +33 -15
- package/dist/swc-esbuild-plugin.js.map +1 -1
- package/dist/transform-utils.d.ts +68 -0
- package/dist/transform-utils.d.ts.map +1 -0
- package/dist/transform-utils.js +102 -0
- package/dist/transform-utils.js.map +1 -0
- package/dist/transform-utils.test.d.ts +2 -0
- package/dist/transform-utils.test.d.ts.map +1 -0
- package/dist/transform-utils.test.js +283 -0
- package/dist/transform-utils.test.js.map +1 -0
- package/dist/types.d.ts +26 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/dist/vercel-build-output-api.d.ts.map +1 -1
- package/dist/vercel-build-output-api.js +36 -14
- package/dist/vercel-build-output-api.js.map +1 -1
- package/dist/workflow-alias.d.ts +3 -0
- package/dist/workflow-alias.d.ts.map +1 -0
- package/dist/workflow-alias.js +46 -0
- package/dist/workflow-alias.js.map +1 -0
- package/dist/workflow-alias.test.d.ts +2 -0
- package/dist/workflow-alias.test.d.ts.map +1 -0
- package/dist/workflow-alias.test.js +46 -0
- package/dist/workflow-alias.test.js.map +1 -0
- package/dist/workflows-extractor.d.ts +92 -0
- package/dist/workflows-extractor.d.ts.map +1 -0
- package/dist/workflows-extractor.js +1476 -0
- package/dist/workflows-extractor.js.map +1 -0
- 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
|
|
13
|
+
const tsconfigPath = await this.findTsConfigPath();
|
|
14
14
|
const options = {
|
|
15
15
|
inputFiles,
|
|
16
16
|
workflowGeneratedDir,
|
|
17
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|