@workflow/builders 5.0.0-beta.44 → 5.0.0-beta.47

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.
@@ -0,0 +1,126 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { mkdtempSync, realpathSync, rmSync } from 'node:fs';
3
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ import { pathToFileURL } from 'node:url';
7
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
8
+ import { VercelBuildOutputAPIBuilder } from './vercel-build-output-api.js';
9
+ const BUILD_TIMEOUT = 120_000;
10
+ async function write(path, contents) {
11
+ await mkdir(dirname(path), { recursive: true });
12
+ await writeFile(path, contents, 'utf8');
13
+ }
14
+ function getFlowFuncDir(workingDir) {
15
+ return join(workingDir, '.vercel/output/functions/.well-known/workflow/v1/flow.func');
16
+ }
17
+ function createBuilder(workingDir) {
18
+ const config = {
19
+ buildTarget: 'vercel-build-output-api',
20
+ workingDir,
21
+ dirs: ['src'],
22
+ stepsBundlePath: join(workingDir, 'unused-steps.mjs'),
23
+ workflowsBundlePath: join(workingDir, 'unused-workflows.mjs'),
24
+ webhookBundlePath: join(workingDir, 'unused-webhook.mjs'),
25
+ suppressCreateManifestLogs: true,
26
+ };
27
+ return new VercelBuildOutputAPIBuilder(config);
28
+ }
29
+ function executeStep(workingDir, stepName) {
30
+ const bundleUrl = pathToFileURL(join(getFlowFuncDir(workingDir), 'index.mjs')).href;
31
+ const output = execFileSync(process.execPath, [
32
+ '--input-type=module',
33
+ '-e',
34
+ `await import(${JSON.stringify(bundleUrl)});
35
+ const steps = globalThis[Symbol.for('@workflow/core//registeredSteps')];
36
+ const step = [...steps].find(([id]) => id.endsWith(${JSON.stringify(`//${stepName}`)}))?.[1];
37
+ if (!step) throw new Error(${JSON.stringify(`${stepName} step was not registered`)});
38
+ process.stdout.write(JSON.stringify(await step()));`,
39
+ ], { encoding: 'utf8' });
40
+ return JSON.parse(output);
41
+ }
42
+ /**
43
+ * Minimal stand-in for the `workflow` package so the builder can resolve
44
+ * its runtime imports inside the temp app.
45
+ */
46
+ async function writeWorkflowRuntimeStub(workingDir) {
47
+ const packageDir = join(workingDir, 'node_modules/workflow');
48
+ await write(join(packageDir, 'package.json'), JSON.stringify({
49
+ name: 'workflow',
50
+ version: '1.0.0',
51
+ type: 'module',
52
+ exports: {
53
+ './api': './api.js',
54
+ './internal/builtins': './internal/builtins.js',
55
+ './runtime': './runtime.js',
56
+ },
57
+ }));
58
+ await write(join(packageDir, 'api.js'), 'export async function resumeWebhook() { return new Response(null, { status: 204 }); }\n');
59
+ await write(join(packageDir, 'internal/builtins.js'), 'export const __workflow_builtins = true;\n');
60
+ await write(join(packageDir, 'runtime.js'), 'export function workflowEntrypoint() { return async function POST() { return new Response(null, { status: 204 }); }; }\n');
61
+ }
62
+ describe('VercelBuildOutputAPIBuilder ESM output', () => {
63
+ let workingDir;
64
+ beforeEach(() => {
65
+ workingDir = mkdtempSync(join(realpathSync(tmpdir()), 'workflow-vercel-'));
66
+ });
67
+ afterEach(() => {
68
+ rmSync(workingDir, { recursive: true, force: true });
69
+ });
70
+ it('executes a bundled CJS dependency that references __dirname at module scope', { timeout: BUILD_TIMEOUT }, async () => {
71
+ await writeWorkflowRuntimeStub(workingDir);
72
+ // google-gax-shaped fixture: a CJS package that computes a path from
73
+ // __dirname at module scope (google-gax/build/src/grpc.js does exactly
74
+ // this), which crashed the whole function at init with
75
+ // `ReferenceError: __dirname is not defined in ES module scope` when
76
+ // inlined into the ESM bundle without the banner shim.
77
+ const packageDir = join(workingDir, 'node_modules/fake-gax');
78
+ await write(join(packageDir, 'package.json'), JSON.stringify({ name: 'fake-gax', version: '1.0.0', main: 'index.js' }));
79
+ await write(join(packageDir, 'index.js'), `const path = require('path');
80
+ // Module-scope __dirname reference, like google-gax's grpc.js.
81
+ const protoFilesDir = path.join(__dirname, '..', 'protos');
82
+ exports.getProtoFilesDir = () => protoFilesDir;
83
+ exports.getFilename = () => __filename;
84
+ `);
85
+ await write(join(workingDir, 'src/workflows/gax.ts'), `import { getProtoFilesDir, getFilename } from 'fake-gax';
86
+
87
+ export async function readDirs(): Promise<string> {
88
+ 'use step';
89
+ return [getProtoFilesDir(), getFilename()].every((p) => typeof p === 'string' && p.length > 0)
90
+ ? 'dirs-ok'
91
+ : 'dirs-missing';
92
+ }
93
+
94
+ export async function gaxWorkflow(): Promise<string> {
95
+ 'use workflow';
96
+ return readDirs();
97
+ }
98
+ `);
99
+ await createBuilder(workingDir).build();
100
+ // The bundle must be importable under plain Node (this is where the
101
+ // unshimmed bundle throws, before any workflow code runs) and the step
102
+ // must see defined __dirname/__filename values.
103
+ expect(executeStep(workingDir, 'readDirs')).toBe('dirs-ok');
104
+ // The shim is declared exactly once: the inner steps bundle skips its
105
+ // banner when the outer combined pass provides one
106
+ // (skipEsmRequireBanner), so the import bindings don't collide.
107
+ //
108
+ // Note this covers createCombinedBundle and createWebhookBundle. The
109
+ // same banner is also emitted by createWorkflowsBundle's final wrapper,
110
+ // which is not exercised here.
111
+ const bundle = await readFile(join(getFlowFuncDir(workingDir), 'index.mjs'), 'utf8');
112
+ // The import binding is the assertion that matters: a duplicated banner
113
+ // fails at parse time on the redeclared import, before the `var` ever
114
+ // runs.
115
+ expect(bundle.match(/import \{ fileURLToPath as __fileURLToPath \}/g)).toHaveLength(1);
116
+ expect(bundle.match(/var __dirname = __pathDirname\(__filename\);/g)).toHaveLength(1);
117
+ // The webhook route is a separately deployed function built by the same
118
+ // build() through its own esbuild pass (createWebhookBundle) — a CJS
119
+ // dependency referencing __dirname reachable from it would have crashed
120
+ // the same way, so it needs the shim too.
121
+ const webhookBundle = await readFile(join(workingDir, '.vercel/output/functions/.well-known/workflow/v1/webhook/[token].func/index.mjs'), 'utf8');
122
+ expect(webhookBundle.match(/import \{ fileURLToPath as __fileURLToPath \}/g)).toHaveLength(1);
123
+ expect(webhookBundle.match(/var __dirname = __pathDirname\(__filename\);/g)).toHaveLength(1);
124
+ });
125
+ });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJjZWwtYnVpbGQtb3V0cHV0LWFwaS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUU5QixLQUFLLFVBQVUsS0FBSyxDQUFDLElBQVksRUFBRSxRQUFnQjtJQUNqRCxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxVQUFrQjtJQUN4QyxPQUFPLElBQUksQ0FDVCxVQUFVLEVBQ1YsNERBQTRELENBQzdELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsVUFBa0I7SUFDdkMsTUFBTSxNQUFNLEdBQTRCO1FBQ3RDLFdBQVcsRUFBRSx5QkFBeUI7UUFDdEMsVUFBVTtRQUNWLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNiLGVBQWUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDO1FBQ3JELG1CQUFtQixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUM7UUFDN0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQztRQUN6RCwwQkFBMEIsRUFBRSxJQUFJO0tBQ2pDLENBQUM7SUFDRixPQUFPLElBQUksMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLFVBQWtCLEVBQUUsUUFBZ0I7SUFDdkQsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUM5QyxDQUFDLElBQUksQ0FBQztJQUNQLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FDekIsT0FBTyxDQUFDLFFBQVEsRUFDaEI7UUFDRSxxQkFBcUI7UUFDckIsSUFBSTtRQUNKLGdCQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQzs7cURBRU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDOzZCQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSwwQkFBMEIsQ0FBQztvREFDOUI7S0FDL0MsRUFDRCxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FDckIsQ0FBQztJQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLHdCQUF3QixDQUFDLFVBQWtCO0lBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssQ0FDVCxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxFQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2IsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLE9BQU87UUFDaEIsSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsVUFBVTtZQUNuQixxQkFBcUIsRUFBRSx3QkFBd0I7WUFDL0MsV0FBVyxFQUFFLGNBQWM7U0FDNUI7S0FDRixDQUFDLENBQ0gsQ0FBQztJQUNGLE1BQU0sS0FBSyxDQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQzFCLHlGQUF5RixDQUMxRixDQUFDO0lBQ0YsTUFBTSxLQUFLLENBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxFQUN4Qyw0Q0FBNEMsQ0FDN0MsQ0FBQztJQUNGLE1BQU0sS0FBSyxDQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQzlCLDBIQUEwSCxDQUMzSCxDQUFDO0FBQ0osQ0FBQztBQUVELFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7SUFDdEQsSUFBSSxVQUFrQixDQUFDO0lBRXZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQ0EsNkVBQTZFLEVBQzdFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUMxQixLQUFLLElBQUksRUFBRTtRQUNULE1BQU0sd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0MscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSx1REFBdUQ7UUFDdkQscUVBQXFFO1FBQ3JFLHVEQUF1RDtRQUN2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDN0QsTUFBTSxLQUFLLENBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsRUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FDekUsQ0FBQztRQUNGLE1BQU0sS0FBSyxDQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQzVCOzs7OztDQUtQLENBQ00sQ0FBQztRQUNGLE1BQU0sS0FBSyxDQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsRUFDeEM7Ozs7Ozs7Ozs7Ozs7Q0FhUCxDQUNNLENBQUM7UUFFRixNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV4QyxvRUFBb0U7UUFDcEUsdUVBQXVFO1FBQ3ZFLGdEQUFnRDtRQUNoRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxzRUFBc0U7UUFDdEUsbURBQW1EO1FBQ25ELGdFQUFnRTtRQUNoRSxFQUFFO1FBQ0YscUVBQXFFO1FBQ3JFLHdFQUF3RTtRQUN4RSwrQkFBK0I7UUFDL0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQzdDLE1BQU0sQ0FDUCxDQUFDO1FBQ0Ysd0VBQXdFO1FBQ3hFLHNFQUFzRTtRQUN0RSxRQUFRO1FBQ1IsTUFBTSxDQUNKLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FDL0QsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUNKLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FDOUQsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEIsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUsMENBQTBDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUNsQyxJQUFJLENBQ0YsVUFBVSxFQUNWLGlGQUFpRixDQUNsRixFQUNELE1BQU0sQ0FDUCxDQUFDO1FBQ0YsTUFBTSxDQUNKLGFBQWEsQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FDdEUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUNKLGFBQWEsQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FDckUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBta2R0ZW1wU3luYywgcmVhbHBhdGhTeW5jLCBybVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHR5cGUgeyBWZXJjZWxCdWlsZE91dHB1dENvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIH0gZnJvbSAnLi92ZXJjZWwtYnVpbGQtb3V0cHV0LWFwaS5qcyc7XG5cbmNvbnN0IEJVSUxEX1RJTUVPVVQgPSAxMjBfMDAwO1xuXG5hc3luYyBmdW5jdGlvbiB3cml0ZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBjb250ZW50cywgJ3V0ZjgnKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0Z1bmNEaXIod29ya2luZ0Rpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oXG4gICAgd29ya2luZ0RpcixcbiAgICAnLnZlcmNlbC9vdXRwdXQvZnVuY3Rpb25zLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuZnVuYydcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyOiBzdHJpbmcpOiBWZXJjZWxCdWlsZE91dHB1dEFQSUJ1aWxkZXIge1xuICBjb25zdCBjb25maWc6IFZlcmNlbEJ1aWxkT3V0cHV0Q29uZmlnID0ge1xuICAgIGJ1aWxkVGFyZ2V0OiAndmVyY2VsLWJ1aWxkLW91dHB1dC1hcGknLFxuICAgIHdvcmtpbmdEaXIsXG4gICAgZGlyczogWydzcmMnXSxcbiAgICBzdGVwc0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3VudXNlZC1zdGVwcy5tanMnKSxcbiAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd1bnVzZWQtd29ya2Zsb3dzLm1qcycpLFxuICAgIHdlYmhvb2tCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd1bnVzZWQtd2ViaG9vay5tanMnKSxcbiAgICBzdXBwcmVzc0NyZWF0ZU1hbmlmZXN0TG9nczogdHJ1ZSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBWZXJjZWxCdWlsZE91dHB1dEFQSUJ1aWxkZXIoY29uZmlnKTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVN0ZXAod29ya2luZ0Rpcjogc3RyaW5nLCBzdGVwTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnVuZGxlVXJsID0gcGF0aFRvRmlsZVVSTChcbiAgICBqb2luKGdldEZsb3dGdW5jRGlyKHdvcmtpbmdEaXIpLCAnaW5kZXgubWpzJylcbiAgKS5ocmVmO1xuICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICBbXG4gICAgICAnLS1pbnB1dC10eXBlPW1vZHVsZScsXG4gICAgICAnLWUnLFxuICAgICAgYGF3YWl0IGltcG9ydCgke0pTT04uc3RyaW5naWZ5KGJ1bmRsZVVybCl9KTtcbmNvbnN0IHN0ZXBzID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKCdAd29ya2Zsb3cvY29yZS8vcmVnaXN0ZXJlZFN0ZXBzJyldO1xuY29uc3Qgc3RlcCA9IFsuLi5zdGVwc10uZmluZCgoW2lkXSkgPT4gaWQuZW5kc1dpdGgoJHtKU09OLnN0cmluZ2lmeShgLy8ke3N0ZXBOYW1lfWApfSkpPy5bMV07XG5pZiAoIXN0ZXApIHRocm93IG5ldyBFcnJvcigke0pTT04uc3RyaW5naWZ5KGAke3N0ZXBOYW1lfSBzdGVwIHdhcyBub3QgcmVnaXN0ZXJlZGApfSk7XG5wcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShhd2FpdCBzdGVwKCkpKTtgLFxuICAgIF0sXG4gICAgeyBlbmNvZGluZzogJ3V0ZjgnIH1cbiAgKTtcbiAgcmV0dXJuIEpTT04ucGFyc2Uob3V0cHV0KTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIHN0YW5kLWluIGZvciB0aGUgYHdvcmtmbG93YCBwYWNrYWdlIHNvIHRoZSBidWlsZGVyIGNhbiByZXNvbHZlXG4gKiBpdHMgcnVudGltZSBpbXBvcnRzIGluc2lkZSB0aGUgdGVtcCBhcHAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlV29ya2Zsb3dSdW50aW1lU3R1Yih3b3JraW5nRGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZURpciA9IGpvaW4od29ya2luZ0RpciwgJ25vZGVfbW9kdWxlcy93b3JrZmxvdycpO1xuICBhd2FpdCB3cml0ZShcbiAgICBqb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBuYW1lOiAnd29ya2Zsb3cnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLi9hcGknOiAnLi9hcGkuanMnLFxuICAgICAgICAnLi9pbnRlcm5hbC9idWlsdGlucyc6ICcuL2ludGVybmFsL2J1aWx0aW5zLmpzJyxcbiAgICAgICAgJy4vcnVudGltZSc6ICcuL3J1bnRpbWUuanMnLFxuICAgICAgfSxcbiAgICB9KVxuICApO1xuICBhd2FpdCB3cml0ZShcbiAgICBqb2luKHBhY2thZ2VEaXIsICdhcGkuanMnKSxcbiAgICAnZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVdlYmhvb2soKSB7IHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCB9KTsgfVxcbidcbiAgKTtcbiAgYXdhaXQgd3JpdGUoXG4gICAgam9pbihwYWNrYWdlRGlyLCAnaW50ZXJuYWwvYnVpbHRpbnMuanMnKSxcbiAgICAnZXhwb3J0IGNvbnN0IF9fd29ya2Zsb3dfYnVpbHRpbnMgPSB0cnVlO1xcbidcbiAgKTtcbiAgYXdhaXQgd3JpdGUoXG4gICAgam9pbihwYWNrYWdlRGlyLCAncnVudGltZS5qcycpLFxuICAgICdleHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dFbnRyeXBvaW50KCkgeyByZXR1cm4gYXN5bmMgZnVuY3Rpb24gUE9TVCgpIHsgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0IH0pOyB9OyB9XFxuJ1xuICApO1xufVxuXG5kZXNjcmliZSgnVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIEVTTSBvdXRwdXQnLCAoKSA9PiB7XG4gIGxldCB3b3JraW5nRGlyOiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgd29ya2luZ0RpciA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbHBhdGhTeW5jKHRtcGRpcigpKSwgJ3dvcmtmbG93LXZlcmNlbC0nKSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcm1TeW5jKHdvcmtpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgaXQoXG4gICAgJ2V4ZWN1dGVzIGEgYnVuZGxlZCBDSlMgZGVwZW5kZW5jeSB0aGF0IHJlZmVyZW5jZXMgX19kaXJuYW1lIGF0IG1vZHVsZSBzY29wZScsXG4gICAgeyB0aW1lb3V0OiBCVUlMRF9USU1FT1VUIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVXb3JrZmxvd1J1bnRpbWVTdHViKHdvcmtpbmdEaXIpO1xuXG4gICAgICAvLyBnb29nbGUtZ2F4LXNoYXBlZCBmaXh0dXJlOiBhIENKUyBwYWNrYWdlIHRoYXQgY29tcHV0ZXMgYSBwYXRoIGZyb21cbiAgICAgIC8vIF9fZGlybmFtZSBhdCBtb2R1bGUgc2NvcGUgKGdvb2dsZS1nYXgvYnVpbGQvc3JjL2dycGMuanMgZG9lcyBleGFjdGx5XG4gICAgICAvLyB0aGlzKSwgd2hpY2ggY3Jhc2hlZCB0aGUgd2hvbGUgZnVuY3Rpb24gYXQgaW5pdCB3aXRoXG4gICAgICAvLyBgUmVmZXJlbmNlRXJyb3I6IF9fZGlybmFtZSBpcyBub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGVgIHdoZW5cbiAgICAgIC8vIGlubGluZWQgaW50byB0aGUgRVNNIGJ1bmRsZSB3aXRob3V0IHRoZSBiYW5uZXIgc2hpbS5cbiAgICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBqb2luKHdvcmtpbmdEaXIsICdub2RlX21vZHVsZXMvZmFrZS1nYXgnKTtcbiAgICAgIGF3YWl0IHdyaXRlKFxuICAgICAgICBqb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiAnZmFrZS1nYXgnLCB2ZXJzaW9uOiAnMS4wLjAnLCBtYWluOiAnaW5kZXguanMnIH0pXG4gICAgICApO1xuICAgICAgYXdhaXQgd3JpdGUoXG4gICAgICAgIGpvaW4ocGFja2FnZURpciwgJ2luZGV4LmpzJyksXG4gICAgICAgIGBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuLy8gTW9kdWxlLXNjb3BlIF9fZGlybmFtZSByZWZlcmVuY2UsIGxpa2UgZ29vZ2xlLWdheCdzIGdycGMuanMuXG5jb25zdCBwcm90b0ZpbGVzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3Byb3RvcycpO1xuZXhwb3J0cy5nZXRQcm90b0ZpbGVzRGlyID0gKCkgPT4gcHJvdG9GaWxlc0RpcjtcbmV4cG9ydHMuZ2V0RmlsZW5hbWUgPSAoKSA9PiBfX2ZpbGVuYW1lO1xuYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHdyaXRlKFxuICAgICAgICBqb2luKHdvcmtpbmdEaXIsICdzcmMvd29ya2Zsb3dzL2dheC50cycpLFxuICAgICAgICBgaW1wb3J0IHsgZ2V0UHJvdG9GaWxlc0RpciwgZ2V0RmlsZW5hbWUgfSBmcm9tICdmYWtlLWdheCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRGlycygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gW2dldFByb3RvRmlsZXNEaXIoKSwgZ2V0RmlsZW5hbWUoKV0uZXZlcnkoKHApID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJyAmJiBwLmxlbmd0aCA+IDApXG4gICAgPyAnZGlycy1vaydcbiAgICA6ICdkaXJzLW1pc3NpbmcnO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2F4V29ya2Zsb3coKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiByZWFkRGlycygpO1xufVxuYFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyKS5idWlsZCgpO1xuXG4gICAgICAvLyBUaGUgYnVuZGxlIG11c3QgYmUgaW1wb3J0YWJsZSB1bmRlciBwbGFpbiBOb2RlICh0aGlzIGlzIHdoZXJlIHRoZVxuICAgICAgLy8gdW5zaGltbWVkIGJ1bmRsZSB0aHJvd3MsIGJlZm9yZSBhbnkgd29ya2Zsb3cgY29kZSBydW5zKSBhbmQgdGhlIHN0ZXBcbiAgICAgIC8vIG11c3Qgc2VlIGRlZmluZWQgX19kaXJuYW1lL19fZmlsZW5hbWUgdmFsdWVzLlxuICAgICAgZXhwZWN0KGV4ZWN1dGVTdGVwKHdvcmtpbmdEaXIsICdyZWFkRGlycycpKS50b0JlKCdkaXJzLW9rJyk7XG5cbiAgICAgIC8vIFRoZSBzaGltIGlzIGRlY2xhcmVkIGV4YWN0bHkgb25jZTogdGhlIGlubmVyIHN0ZXBzIGJ1bmRsZSBza2lwcyBpdHNcbiAgICAgIC8vIGJhbm5lciB3aGVuIHRoZSBvdXRlciBjb21iaW5lZCBwYXNzIHByb3ZpZGVzIG9uZVxuICAgICAgLy8gKHNraXBFc21SZXF1aXJlQmFubmVyKSwgc28gdGhlIGltcG9ydCBiaW5kaW5ncyBkb24ndCBjb2xsaWRlLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhpcyBjb3ZlcnMgY3JlYXRlQ29tYmluZWRCdW5kbGUgYW5kIGNyZWF0ZVdlYmhvb2tCdW5kbGUuIFRoZVxuICAgICAgLy8gc2FtZSBiYW5uZXIgaXMgYWxzbyBlbWl0dGVkIGJ5IGNyZWF0ZVdvcmtmbG93c0J1bmRsZSdzIGZpbmFsIHdyYXBwZXIsXG4gICAgICAvLyB3aGljaCBpcyBub3QgZXhlcmNpc2VkIGhlcmUuXG4gICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCByZWFkRmlsZShcbiAgICAgICAgam9pbihnZXRGbG93RnVuY0Rpcih3b3JraW5nRGlyKSwgJ2luZGV4Lm1qcycpLFxuICAgICAgICAndXRmOCdcbiAgICAgICk7XG4gICAgICAvLyBUaGUgaW1wb3J0IGJpbmRpbmcgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IGEgZHVwbGljYXRlZCBiYW5uZXJcbiAgICAgIC8vIGZhaWxzIGF0IHBhcnNlIHRpbWUgb24gdGhlIHJlZGVjbGFyZWQgaW1wb3J0LCBiZWZvcmUgdGhlIGB2YXJgIGV2ZXJcbiAgICAgIC8vIHJ1bnMuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGJ1bmRsZS5tYXRjaCgvaW1wb3J0IFxceyBmaWxlVVJMVG9QYXRoIGFzIF9fZmlsZVVSTFRvUGF0aCBcXH0vZylcbiAgICAgICkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICBidW5kbGUubWF0Y2goL3ZhciBfX2Rpcm5hbWUgPSBfX3BhdGhEaXJuYW1lXFwoX19maWxlbmFtZVxcKTsvZylcbiAgICAgICkudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgICAvLyBUaGUgd2ViaG9vayByb3V0ZSBpcyBhIHNlcGFyYXRlbHkgZGVwbG95ZWQgZnVuY3Rpb24gYnVpbHQgYnkgdGhlIHNhbWVcbiAgICAgIC8vIGJ1aWxkKCkgdGhyb3VnaCBpdHMgb3duIGVzYnVpbGQgcGFzcyAoY3JlYXRlV2ViaG9va0J1bmRsZSkg4oCUIGEgQ0pTXG4gICAgICAvLyBkZXBlbmRlbmN5IHJlZmVyZW5jaW5nIF9fZGlybmFtZSByZWFjaGFibGUgZnJvbSBpdCB3b3VsZCBoYXZlIGNyYXNoZWRcbiAgICAgIC8vIHRoZSBzYW1lIHdheSwgc28gaXQgbmVlZHMgdGhlIHNoaW0gdG9vLlxuICAgICAgY29uc3Qgd2ViaG9va0J1bmRsZSA9IGF3YWl0IHJlYWRGaWxlKFxuICAgICAgICBqb2luKFxuICAgICAgICAgIHdvcmtpbmdEaXIsXG4gICAgICAgICAgJy52ZXJjZWwvb3V0cHV0L2Z1bmN0aW9ucy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rL1t0b2tlbl0uZnVuYy9pbmRleC5tanMnXG4gICAgICAgICksXG4gICAgICAgICd1dGY4J1xuICAgICAgKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd2ViaG9va0J1bmRsZS5tYXRjaCgvaW1wb3J0IFxceyBmaWxlVVJMVG9QYXRoIGFzIF9fZmlsZVVSTFRvUGF0aCBcXH0vZylcbiAgICAgICkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3ZWJob29rQnVuZGxlLm1hdGNoKC92YXIgX19kaXJuYW1lID0gX19wYXRoRGlybmFtZVxcKF9fZmlsZW5hbWVcXCk7L2cpXG4gICAgICApLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICB9XG4gICk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow-bundle-boundary.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-bundle-boundary.test.d.ts","sourceRoot":"","sources":["../src/workflow-bundle-boundary.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { afterEach, describe, expect, it } from 'vitest';
4
+ import { BaseBuilder } from './base-builder.js';
5
+ class TestBuilder extends BaseBuilder {
6
+ async build() { }
7
+ createWorkflowBundle(inputFile, outfile, discoveredEntries) {
8
+ return this.createWorkflowsBundle({
9
+ inputFiles: [inputFile],
10
+ outfile,
11
+ bundleFinalOutput: false,
12
+ includeMetafile: true,
13
+ discoveredEntries,
14
+ });
15
+ }
16
+ }
17
+ describe('workflow bundle boundary', () => {
18
+ const repoRoot = resolve(import.meta.dirname, '../../..');
19
+ const outputDirs = [];
20
+ afterEach(() => {
21
+ for (const outputDir of outputDirs) {
22
+ rmSync(outputDir, { recursive: true, force: true });
23
+ }
24
+ });
25
+ async function getWorkflowBundleInputs(source) {
26
+ // Keep the fixture beneath this package so its workspace dependencies are
27
+ // resolved exactly as they are for a real consumer workflow.
28
+ const outputDir = mkdtempSync(join(import.meta.dirname, '.workflow-pruning-'));
29
+ outputDirs.push(outputDir);
30
+ const inputFile = join(outputDir, 'workflow.ts');
31
+ writeFileSync(inputFile, source);
32
+ const config = {
33
+ buildTarget: 'standalone',
34
+ workingDir: outputDir,
35
+ projectRoot: repoRoot,
36
+ moduleSpecifierRoot: repoRoot,
37
+ dirs: ['.'],
38
+ stepsBundlePath: join(outputDir, 'steps.js'),
39
+ workflowsBundlePath: join(outputDir, 'workflow.js'),
40
+ webhookBundlePath: join(outputDir, 'webhook.js'),
41
+ sourcemap: false,
42
+ };
43
+ const discoveredEntries = {
44
+ discoveredSteps: new Set(),
45
+ discoveredWorkflows: new Set([inputFile]),
46
+ discoveredSerdeFiles: new Set(),
47
+ };
48
+ const { interimBundleMetafile } = await new TestBuilder(config).createWorkflowBundle(inputFile, config.workflowsBundlePath, discoveredEntries);
49
+ expect(interimBundleMetafile).toBeDefined();
50
+ return Object.keys(interimBundleMetafile?.inputs ?? {}).map((input) => input.replaceAll('\\', '/'));
51
+ }
52
+ function expectNoZodInputs(inputs) {
53
+ expect(inputs.filter((input) => input.includes('/node_modules/zod/'))).toEqual([]);
54
+ }
55
+ it('does not bundle world schemas into a minimal workflow', async () => {
56
+ const inputs = await getWorkflowBundleInputs(`export async function minimal() { "use workflow"; return 1; }`);
57
+ expectNoZodInputs(inputs);
58
+ });
59
+ it('does not bundle world schemas for core workflow APIs', async () => {
60
+ const inputs = await getWorkflowBundleInputs(`
61
+ import { createHook, setAttributes } from '@workflow/core';
62
+
63
+ async function basicStep(value: number) {
64
+ "use step";
65
+ return value + 1;
66
+ }
67
+
68
+ export async function realisticWorkflow() {
69
+ "use workflow";
70
+ await setAttributes({ phase: 'started' });
71
+ const hook = createHook<number>();
72
+ return basicStep(await hook);
73
+ }
74
+ `);
75
+ expectNoZodInputs(inputs);
76
+ });
77
+ });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYnVuZGxlLWJvdW5kYXJ5LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2Zsb3ctYnVuZGxlLWJvdW5kYXJ5LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUd4RSxNQUFNLFdBQVksU0FBUSxXQUFXO0lBQ25DLEtBQUssQ0FBQyxLQUFLLEtBQW1CLENBQUM7SUFFL0Isb0JBQW9CLENBQ2xCLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixpQkFBb0M7UUFFcEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDaEMsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3ZCLE9BQU87WUFDUCxpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxRCxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7SUFFaEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxVQUFVLHVCQUF1QixDQUFDLE1BQWM7UUFDbkQsMEVBQTBFO1FBQzFFLDZEQUE2RDtRQUM3RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUNoRCxDQUFDO1FBQ0YsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakMsTUFBTSxNQUFNLEdBQXFCO1lBQy9CLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLG1CQUFtQixFQUFFLFFBQVE7WUFDN0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ1gsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO1lBQzVDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO1lBQ25ELGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO1lBQ2hELFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7UUFDRixNQUFNLGlCQUFpQixHQUFzQjtZQUMzQyxlQUFlLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDMUIsbUJBQW1CLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxvQkFBb0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUNoQyxDQUFDO1FBRUYsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsTUFBTSxJQUFJLFdBQVcsQ0FDckQsTUFBTSxDQUNQLENBQUMsb0JBQW9CLENBQ3BCLFNBQVMsRUFDVCxNQUFNLENBQUMsbUJBQW1CLEVBQzFCLGlCQUFpQixDQUNsQixDQUFDO1FBRUYsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNwRSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLGlCQUFpQixDQUFDLE1BQWdCO1FBQ3pDLE1BQU0sQ0FDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FDL0QsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLHVCQUF1QixDQUMxQywrREFBK0QsQ0FDaEUsQ0FBQztRQUVGLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0tBYzVDLENBQUMsQ0FBQztRQUVILGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIsIHR5cGUgRGlzY292ZXJlZEVudHJpZXMgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYWxvbmVDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY2xhc3MgVGVzdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlciB7XG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge31cblxuICBjcmVhdGVXb3JrZmxvd0J1bmRsZShcbiAgICBpbnB1dEZpbGU6IHN0cmluZyxcbiAgICBvdXRmaWxlOiBzdHJpbmcsXG4gICAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzXG4gICkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVdvcmtmbG93c0J1bmRsZSh7XG4gICAgICBpbnB1dEZpbGVzOiBbaW5wdXRGaWxlXSxcbiAgICAgIG91dGZpbGUsXG4gICAgICBidW5kbGVGaW5hbE91dHB1dDogZmFsc2UsXG4gICAgICBpbmNsdWRlTWV0YWZpbGU6IHRydWUsXG4gICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICB9KTtcbiAgfVxufVxuXG5kZXNjcmliZSgnd29ya2Zsb3cgYnVuZGxlIGJvdW5kYXJ5JywgKCkgPT4ge1xuICBjb25zdCByZXBvUm9vdCA9IHJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgJy4uLy4uLy4uJyk7XG4gIGNvbnN0IG91dHB1dERpcnM6IHN0cmluZ1tdID0gW107XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IG91dHB1dERpciBvZiBvdXRwdXREaXJzKSB7XG4gICAgICBybVN5bmMob3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBnZXRXb3JrZmxvd0J1bmRsZUlucHV0cyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAvLyBLZWVwIHRoZSBmaXh0dXJlIGJlbmVhdGggdGhpcyBwYWNrYWdlIHNvIGl0cyB3b3Jrc3BhY2UgZGVwZW5kZW5jaWVzIGFyZVxuICAgIC8vIHJlc29sdmVkIGV4YWN0bHkgYXMgdGhleSBhcmUgZm9yIGEgcmVhbCBjb25zdW1lciB3b3JrZmxvdy5cbiAgICBjb25zdCBvdXRwdXREaXIgPSBta2R0ZW1wU3luYyhcbiAgICAgIGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgJy53b3JrZmxvdy1wcnVuaW5nLScpXG4gICAgKTtcbiAgICBvdXRwdXREaXJzLnB1c2gob3V0cHV0RGlyKTtcbiAgICBjb25zdCBpbnB1dEZpbGUgPSBqb2luKG91dHB1dERpciwgJ3dvcmtmbG93LnRzJyk7XG4gICAgd3JpdGVGaWxlU3luYyhpbnB1dEZpbGUsIHNvdXJjZSk7XG5cbiAgICBjb25zdCBjb25maWc6IFN0YW5kYWxvbmVDb25maWcgPSB7XG4gICAgICBidWlsZFRhcmdldDogJ3N0YW5kYWxvbmUnLFxuICAgICAgd29ya2luZ0Rpcjogb3V0cHV0RGlyLFxuICAgICAgcHJvamVjdFJvb3Q6IHJlcG9Sb290LFxuICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogcmVwb1Jvb3QsXG4gICAgICBkaXJzOiBbJy4nXSxcbiAgICAgIHN0ZXBzQnVuZGxlUGF0aDogam9pbihvdXRwdXREaXIsICdzdGVwcy5qcycpLFxuICAgICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogam9pbihvdXRwdXREaXIsICd3b3JrZmxvdy5qcycpLFxuICAgICAgd2ViaG9va0J1bmRsZVBhdGg6IGpvaW4ob3V0cHV0RGlyLCAnd2ViaG9vay5qcycpLFxuICAgICAgc291cmNlbWFwOiBmYWxzZSxcbiAgICB9O1xuICAgIGNvbnN0IGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllcyA9IHtcbiAgICAgIGRpc2NvdmVyZWRTdGVwczogbmV3IFNldCgpLFxuICAgICAgZGlzY292ZXJlZFdvcmtmbG93czogbmV3IFNldChbaW5wdXRGaWxlXSksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldCgpLFxuICAgIH07XG5cbiAgICBjb25zdCB7IGludGVyaW1CdW5kbGVNZXRhZmlsZSB9ID0gYXdhaXQgbmV3IFRlc3RCdWlsZGVyKFxuICAgICAgY29uZmlnXG4gICAgKS5jcmVhdGVXb3JrZmxvd0J1bmRsZShcbiAgICAgIGlucHV0RmlsZSxcbiAgICAgIGNvbmZpZy53b3JrZmxvd3NCdW5kbGVQYXRoLFxuICAgICAgZGlzY292ZXJlZEVudHJpZXNcbiAgICApO1xuXG4gICAgZXhwZWN0KGludGVyaW1CdW5kbGVNZXRhZmlsZSkudG9CZURlZmluZWQoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaW50ZXJpbUJ1bmRsZU1ldGFmaWxlPy5pbnB1dHMgPz8ge30pLm1hcCgoaW5wdXQpID0+XG4gICAgICBpbnB1dC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3ROb1pvZElucHV0cyhpbnB1dHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgZXhwZWN0KFxuICAgICAgaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzL3pvZC8nKSlcbiAgICApLnRvRXF1YWwoW10pO1xuICB9XG5cbiAgaXQoJ2RvZXMgbm90IGJ1bmRsZSB3b3JsZCBzY2hlbWFzIGludG8gYSBtaW5pbWFsIHdvcmtmbG93JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0cyA9IGF3YWl0IGdldFdvcmtmbG93QnVuZGxlSW5wdXRzKFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBtaW5pbWFsKCkgeyBcInVzZSB3b3JrZmxvd1wiOyByZXR1cm4gMTsgfWBcbiAgICApO1xuXG4gICAgZXhwZWN0Tm9ab2RJbnB1dHMoaW5wdXRzKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IGJ1bmRsZSB3b3JsZCBzY2hlbWFzIGZvciBjb3JlIHdvcmtmbG93IEFQSXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXRzID0gYXdhaXQgZ2V0V29ya2Zsb3dCdW5kbGVJbnB1dHMoYFxuICAgICAgaW1wb3J0IHsgY3JlYXRlSG9vaywgc2V0QXR0cmlidXRlcyB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlJztcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gYmFzaWNTdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgXCJ1c2Ugc3RlcFwiO1xuICAgICAgICByZXR1cm4gdmFsdWUgKyAxO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhbGlzdGljV29ya2Zsb3coKSB7XG4gICAgICAgIFwidXNlIHdvcmtmbG93XCI7XG4gICAgICAgIGF3YWl0IHNldEF0dHJpYnV0ZXMoeyBwaGFzZTogJ3N0YXJ0ZWQnIH0pO1xuICAgICAgICBjb25zdCBob29rID0gY3JlYXRlSG9vazxudW1iZXI+KCk7XG4gICAgICAgIHJldHVybiBiYXNpY1N0ZXAoYXdhaXQgaG9vayk7XG4gICAgICB9XG4gICAgYCk7XG5cbiAgICBleHBlY3ROb1pvZElucHV0cyhpbnB1dHMpO1xuICB9KTtcbn0pO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/builders",
3
- "version": "5.0.0-beta.44",
3
+ "version": "5.0.0-beta.47",
4
4
  "description": "Shared builder infrastructure for Workflow SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,9 +41,9 @@
41
41
  "find-up": "7.0.0",
42
42
  "json5": "2.2.3",
43
43
  "tinyglobby": "0.2.17",
44
- "@workflow/core": "5.0.0-beta.44",
45
- "@workflow/errors": "5.0.0-beta.18",
46
- "@workflow/utils": "5.0.0-beta.9",
44
+ "@workflow/core": "5.0.0-beta.47",
45
+ "@workflow/errors": "5.0.0-beta.19",
46
+ "@workflow/utils": "5.0.0-beta.10",
47
47
  "@workflow/swc-plugin": "5.0.0-beta.5"
48
48
  },
49
49
  "scripts": {