@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.
- package/dist/base-builder.d.ts +23 -4
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +30 -43
- package/dist/manifest-ids.d.ts +35 -0
- package/dist/manifest-ids.d.ts.map +1 -0
- package/dist/manifest-ids.js +69 -0
- package/dist/manifest-ids.test.d.ts +2 -0
- package/dist/manifest-ids.test.d.ts.map +1 -0
- package/dist/manifest-ids.test.js +86 -0
- package/dist/step-source-registration.test.js +61 -1
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +10 -38
- package/dist/swc-esbuild-plugin.test.js +81 -1
- package/dist/vercel-build-output-api.test.d.ts +2 -0
- package/dist/vercel-build-output-api.test.d.ts.map +1 -0
- package/dist/vercel-build-output-api.test.js +126 -0
- package/dist/workflow-bundle-boundary.test.d.ts +2 -0
- package/dist/workflow-bundle-boundary.test.d.ts.map +1 -0
- package/dist/workflow-bundle-boundary.test.js +78 -0
- package/package.json +4 -4
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJjZWwtYnVpbGQtb3V0cHV0LWFwaS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUU5QixLQUFLLFVBQVUsS0FBSyxDQUFDLElBQVksRUFBRSxRQUFnQjtJQUNqRCxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxVQUFrQjtJQUN4QyxPQUFPLElBQUksQ0FDVCxVQUFVLEVBQ1YsNERBQTRELENBQzdELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsVUFB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Q0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUNKLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FDOUQsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEIsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUsMENBQTBDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUNsQyxJQUFJLENBQ0YsVUFBVSxFQUNWLGlGQUFpRixDQUNsRixFQUNELE1BQU0sQ0FDUCxDQUFDO1FBQ0YsTUFBTSxDQUNKLGFBQWEsQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FDdEUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUNKLGFBQWEsQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FDckUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBta2R0ZW1wU3luYywgcmVhbHBhdGhTeW5jLCBybVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHR5cGUgeyBWZXJjZWxCdWlsZE91dHB1dENvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIH0gZnJvbSAnLi92ZXJjZWwtYnVpbGQtb3V0cHV0LWFwaS5qcyc7XG5cbmNvbnN0IEJVSUxEX1RJTUVPVVQgPSAxMjBfMDAwO1xuXG5hc3luYyBmdW5jdGlvbiB3cml0ZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBjb250ZW50cywgJ3V0ZjgnKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0Z1bmNEaXIod29ya2luZ0Rpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oXG4gICAgd29ya2luZ0RpcixcbiAgICAnLnZlcmNlbC9vdXRwdXQvZnVuY3Rpb25zLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuZnVuYydcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyOiBzdHJpbmcpOiBWZXJjZWxCdWlsZE91dHB1dEFQSUJ1aWxkZXIge1xuICBjb25zdCBjb25maWc6IFZlcmNlbEJ1aWxkT3V0cHV0Q29uZmlnID0ge1xuICAgIGJ1aWxkVGFyZ2V0OiAndmVyY2VsLWJ1aWxkLW91dHB1dC1hcGknLFxuICAgIHdvcmtpbmdEaXIsXG4gICAgZGlyczogWydzcmMnXSxcbiAgICBzdGVwc0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3VudXNlZC1zdGVwcy5tanMnKSxcbiAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd1bnVzZWQtd29ya2Zsb3dzLm1qcycpLFxuICAgIHdlYmhvb2tCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd1bnVzZWQtd2ViaG9vay5tanMnKSxcbiAgICBzdXBwcmVzc0NyZWF0ZU1hbmlmZXN0TG9nczogdHJ1ZSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBWZXJjZWxCdWlsZE91dHB1dEFQSUJ1aWxkZXIoY29uZmlnKTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVN0ZXAod29ya2luZ0Rpcjogc3RyaW5nLCBzdGVwTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnVuZGxlVXJsID0gcGF0aFRvRmlsZVVSTChcbiAgICBqb2luKGdldEZsb3dGdW5jRGlyKHdvcmtpbmdEaXIpLCAnaW5kZXgubWpzJylcbiAgKS5ocmVmO1xuICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICBbXG4gICAgICAnLS1pbnB1dC10eXBlPW1vZHVsZScsXG4gICAgICAnLWUnLFxuICAgICAgYGF3YWl0IGltcG9ydCgke0pTT04uc3RyaW5naWZ5KGJ1bmRsZVVybCl9KTtcbmNvbnN0IHN0ZXBzID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKCdAd29ya2Zsb3cvY29yZS8vcmVnaXN0ZXJlZFN0ZXBzJyldO1xuY29uc3Qgc3RlcCA9IFsuLi5zdGVwc10uZmluZCgoW2lkXSkgPT4gaWQuZW5kc1dpdGgoJHtKU09OLnN0cmluZ2lmeShgLy8ke3N0ZXBOYW1lfWApfSkpPy5bMV07XG5pZiAoIXN0ZXApIHRocm93IG5ldyBFcnJvcigke0pTT04uc3RyaW5naWZ5KGAke3N0ZXBOYW1lfSBzdGVwIHdhcyBub3QgcmVnaXN0ZXJlZGApfSk7XG5wcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShhd2FpdCBzdGVwKCkpKTtgLFxuICAgIF0sXG4gICAgeyBlbmNvZGluZzogJ3V0ZjgnIH1cbiAgKTtcbiAgcmV0dXJuIEpTT04ucGFyc2Uob3V0cHV0KTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIHN0YW5kLWluIGZvciB0aGUgYHdvcmtmbG93YCBwYWNrYWdlIHNvIHRoZSBidWlsZGVyIGNhbiByZXNvbHZlXG4gKiBpdHMgcnVudGltZSBpbXBvcnRzIGluc2lkZSB0aGUgdGVtcCBhcHAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlV29ya2Zsb3dSdW50aW1lU3R1Yih3b3JraW5nRGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZURpciA9IGpvaW4od29ya2luZ0RpciwgJ25vZGVfbW9kdWxlcy93b3JrZmxvdycpO1xuICBhd2FpdCB3cml0ZShcbiAgICBqb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBuYW1lOiAnd29ya2Zsb3cnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICAnLi9hcGknOiAnLi9hcGkuanMnLFxuICAgICAgICAnLi9pbnRlcm5hbC9idWlsdGlucyc6ICcuL2ludGVybmFsL2J1aWx0aW5zLmpzJyxcbiAgICAgICAgJy4vcnVudGltZSc6ICcuL3J1bnRpbWUuanMnLFxuICAgICAgfSxcbiAgICB9KVxuICApO1xuICBhd2FpdCB3cml0ZShcbiAgICBqb2luKHBhY2thZ2VEaXIsICdhcGkuanMnKSxcbiAgICAnZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVdlYmhvb2soKSB7IHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCB9KTsgfVxcbidcbiAgKTtcbiAgYXdhaXQgd3JpdGUoXG4gICAgam9pbihwYWNrYWdlRGlyLCAnaW50ZXJuYWwvYnVpbHRpbnMuanMnKSxcbiAgICAnZXhwb3J0IGNvbnN0IF9fd29ya2Zsb3dfYnVpbHRpbnMgPSB0cnVlO1xcbidcbiAgKTtcbiAgYXdhaXQgd3JpdGUoXG4gICAgam9pbihwYWNrYWdlRGlyLCAncnVudGltZS5qcycpLFxuICAgICdleHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dFbnRyeXBvaW50KCkgeyByZXR1cm4gYXN5bmMgZnVuY3Rpb24gUE9TVCgpIHsgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0IH0pOyB9OyB9XFxuJ1xuICApO1xufVxuXG5kZXNjcmliZSgnVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIEVTTSBvdXRwdXQnLCAoKSA9PiB7XG4gIGxldCB3b3JraW5nRGlyOiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgd29ya2luZ0RpciA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbHBhdGhTeW5jKHRtcGRpcigpKSwgJ3dvcmtmbG93LXZlcmNlbC0nKSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcm1TeW5jKHdvcmtpbmdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgaXQoXG4gICAgJ2V4ZWN1dGVzIGEgYnVuZGxlZCBDSlMgZGVwZW5kZW5jeSB0aGF0IHJlZmVyZW5jZXMgX19kaXJuYW1lIGF0IG1vZHVsZSBzY29wZScsXG4gICAgeyB0aW1lb3V0OiBCVUlMRF9USU1FT1VUIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVXb3JrZmxvd1J1bnRpbWVTdHViKHdvcmtpbmdEaXIpO1xuXG4gICAgICAvLyBnb29nbGUtZ2F4LXNoYXBlZCBmaXh0dXJlOiBhIENKUyBwYWNrYWdlIHRoYXQgY29tcHV0ZXMgYSBwYXRoIGZyb21cbiAgICAgIC8vIF9fZGlybmFtZSBhdCBtb2R1bGUgc2NvcGUgKGdvb2dsZS1nYXgvYnVpbGQvc3JjL2dycGMuanMgZG9lcyBleGFjdGx5XG4gICAgICAvLyB0aGlzKSwgd2hpY2ggY3Jhc2hlZCB0aGUgd2hvbGUgZnVuY3Rpb24gYXQgaW5pdCB3aXRoXG4gICAgICAvLyBgUmVmZXJlbmNlRXJyb3I6IF9fZGlybmFtZSBpcyBub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGVgIHdoZW5cbiAgICAgIC8vIGlubGluZWQgaW50byB0aGUgRVNNIGJ1bmRsZSB3aXRob3V0IHRoZSBiYW5uZXIgc2hpbS5cbiAgICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBqb2luKHdvcmtpbmdEaXIsICdub2RlX21vZHVsZXMvZmFrZS1nYXgnKTtcbiAgICAgIGF3YWl0IHdyaXRlKFxuICAgICAgICBqb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiAnZmFrZS1nYXgnLCB2ZXJzaW9uOiAnMS4wLjAnLCBtYWluOiAnaW5kZXguanMnIH0pXG4gICAgICApO1xuICAgICAgYXdhaXQgd3JpdGUoXG4gICAgICAgIGpvaW4ocGFja2FnZURpciwgJ2luZGV4LmpzJyksXG4gICAgICAgIGBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuLy8gTW9kdWxlLXNjb3BlIF9fZGlybmFtZSByZWZlcmVuY2UsIGxpa2UgZ29vZ2xlLWdheCdzIGdycGMuanMuXG5jb25zdCBwcm90b0ZpbGVzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3Byb3RvcycpO1xuZXhwb3J0cy5nZXRQcm90b0ZpbGVzRGlyID0gKCkgPT4gcHJvdG9GaWxlc0RpcjtcbmV4cG9ydHMuZ2V0RmlsZW5hbWUgPSAoKSA9PiBfX2ZpbGVuYW1lO1xuYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHdyaXRlKFxuICAgICAgICBqb2luKHdvcmtpbmdEaXIsICdzcmMvd29ya2Zsb3dzL2dheC50cycpLFxuICAgICAgICBgaW1wb3J0IHsgZ2V0UHJvdG9GaWxlc0RpciwgZ2V0RmlsZW5hbWUgfSBmcm9tICdmYWtlLWdheCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRGlycygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gW2dldFByb3RvRmlsZXNEaXIoKSwgZ2V0RmlsZW5hbWUoKV0uZXZlcnkoKHApID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJyAmJiBwLmxlbmd0aCA+IDApXG4gICAgPyAnZGlycy1vaydcbiAgICA6ICdkaXJzLW1pc3NpbmcnO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2F4V29ya2Zsb3coKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiByZWFkRGlycygpO1xufVxuYFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyKS5idWlsZCgpO1xuXG4gICAgICAvLyBUaGUgYnVuZGxlIG11c3QgYmUgaW1wb3J0YWJsZSB1bmRlciBwbGFpbiBOb2RlICh0aGlzIGlzIHdoZXJlIHRoZVxuICAgICAgLy8gdW5zaGltbWVkIGJ1bmRsZSB0aHJvd3MsIGJlZm9yZSBhbnkgd29ya2Zsb3cgY29kZSBydW5zKSBhbmQgdGhlIHN0ZXBcbiAgICAgIC8vIG11c3Qgc2VlIGRlZmluZWQgX19kaXJuYW1lL19fZmlsZW5hbWUgdmFsdWVzLlxuICAgICAgZXhwZWN0KGV4ZWN1dGVTdGVwKHdvcmtpbmdEaXIsICdyZWFkRGlycycpKS50b0JlKCdkaXJzLW9rJyk7XG5cbiAgICAgIC8vIFRoZSBzaGltIGlzIGRlY2xhcmVkIGV4YWN0bHkgb25jZTogdGhlIGlubmVyIHN0ZXBzIGJ1bmRsZSBza2lwcyBpdHNcbiAgICAgIC8vIGJhbm5lciB3aGVuIHRoZSBvdXRlciBjb21iaW5lZCBwYXNzIHByb3ZpZGVzIG9uZVxuICAgICAgLy8gKHNraXBFc21SZXF1aXJlQmFubmVyKSwgc28gdGhlIGltcG9ydCBiaW5kaW5ncyBkb24ndCBjb2xsaWRlLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhpcyBjb3ZlcnMgY3JlYXRlQ29tYmluZWRCdW5kbGUgYW5kIGNyZWF0ZVdlYmhvb2tCdW5kbGUuIFRoZVxuICAgICAgLy8gc2FtZSBiYW5uZXIgaXMgYWxzbyBlbWl0dGVkIGJ5IGNyZWF0ZVdvcmtmbG93c0J1bmRsZSdzIGZpbmFsIHdyYXBwZXIsXG4gICAgICAvLyB3aGljaCBpcyBub3QgZXhlcmNpc2VkIGhlcmUuXG4gICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCByZWFkRmlsZShcbiAgICAgICAgam9pbihnZXRGbG93RnVuY0Rpcih3b3JraW5nRGlyKSwgJ2luZGV4Lm1qcycpLFxuICAgICAgICAndXRmOCdcbiAgICAgICk7XG4gICAgICAvLyBUaGUgaW1wb3J0IGJpbmRpbmcgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IGEgZHVwbGljYXRlZCBiYW5uZXJcbiAgICAgIC8vIGZhaWxzIGF0IHBhcnNlIHRpbWUgb24gdGhlIHJlZGVjbGFyZWQgaW1wb3J0LCBiZWZvcmUgdGhlIGB2YXJgIGV2ZXJcbiAgICAgIC8vIHJ1bnMuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGJ1bmRsZS5tYXRjaCgvaW1wb3J0IFxceyBmaWxlVVJMVG9QYXRoIGFzIF9fZmlsZVVSTFRvUGF0aCBcXH0vZylcbiAgICAgICkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICBidW5kbGUubWF0Y2goL3ZhciBfX2Rpcm5hbWUgPSBfX3BhdGhEaXJuYW1lXFwoX19maWxlbmFtZVxcKTsvZylcbiAgICAgICkudG9IYXZlTGVuZ3RoKDEpO1xuXG4gICAgICAvLyBUaGUgd2ViaG9vayByb3V0ZSBpcyBhIHNlcGFyYXRlbHkgZGVwbG95ZWQgZnVuY3Rpb24gYnVpbHQgYnkgdGhlIHNhbWVcbiAgICAgIC8vIGJ1aWxkKCkgdGhyb3VnaCBpdHMgb3duIGVzYnVpbGQgcGFzcyAoY3JlYXRlV2ViaG9va0J1bmRsZSkg4oCUIGEgQ0pTXG4gICAgICAvLyBkZXBlbmRlbmN5IHJlZmVyZW5jaW5nIF9fZGlybmFtZSByZWFjaGFibGUgZnJvbSBpdCB3b3VsZCBoYXZlIGNyYXNoZWRcbiAgICAgIC8vIHRoZSBzYW1lIHdheSwgc28gaXQgbmVlZHMgdGhlIHNoaW0gdG9vLlxuICAgICAgY29uc3Qgd2ViaG9va0J1bmRsZSA9IGF3YWl0IHJlYWRGaWxlKFxuICAgICAgICBqb2luKFxuICAgICAgICAgIHdvcmtpbmdEaXIsXG4gICAgICAgICAgJy52ZXJjZWwvb3V0cHV0L2Z1bmN0aW9ucy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rL1t0b2tlbl0uZnVuYy9pbmRleC5tanMnXG4gICAgICAgICksXG4gICAgICAgICd1dGY4J1xuICAgICAgKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd2ViaG9va0J1bmRsZS5tYXRjaCgvaW1wb3J0IFxceyBmaWxlVVJMVG9QYXRoIGFzIF9fZmlsZVVSTFRvUGF0aCBcXH0vZylcbiAgICAgICkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3ZWJob29rQnVuZGxlLm1hdGNoKC92YXIgX19kaXJuYW1lID0gX19wYXRoRGlybmFtZVxcKF9fZmlsZW5hbWVcXCk7L2cpXG4gICAgICApLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICB9XG4gICk7XG59KTtcbiJdfQ==
|
|
@@ -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.
|
|
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.
|
|
45
|
-
"@workflow/errors": "5.0.0-beta.
|
|
46
|
-
"@workflow/utils": "5.0.0-beta.
|
|
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": {
|