@workflow/builders 4.0.1-beta.9 → 5.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +1 -1
  2. package/dist/apply-swc-transform.d.ts +19 -4
  3. package/dist/apply-swc-transform.d.ts.map +1 -1
  4. package/dist/apply-swc-transform.js +62 -7
  5. package/dist/apply-swc-transform.js.map +1 -1
  6. package/dist/base-builder.d.ts +77 -22
  7. package/dist/base-builder.d.ts.map +1 -1
  8. package/dist/base-builder.js +667 -202
  9. package/dist/base-builder.js.map +1 -1
  10. package/dist/build-queue.d.ts +18 -0
  11. package/dist/build-queue.d.ts.map +1 -0
  12. package/dist/build-queue.js +26 -0
  13. package/dist/build-queue.js.map +1 -0
  14. package/dist/config-helpers.d.ts +32 -0
  15. package/dist/config-helpers.d.ts.map +1 -1
  16. package/dist/config-helpers.js +61 -0
  17. package/dist/config-helpers.js.map +1 -1
  18. package/dist/constants.d.ts +2 -4
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +2 -4
  21. package/dist/constants.js.map +1 -1
  22. package/dist/discover-entries-esbuild-plugin.d.ts +5 -6
  23. package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
  24. package/dist/discover-entries-esbuild-plugin.js +98 -30
  25. package/dist/discover-entries-esbuild-plugin.js.map +1 -1
  26. package/dist/discover-entries-esbuild-plugin.test.d.ts +2 -0
  27. package/dist/discover-entries-esbuild-plugin.test.d.ts.map +1 -0
  28. package/dist/discover-entries-esbuild-plugin.test.js +110 -0
  29. package/dist/discover-entries-esbuild-plugin.test.js.map +1 -0
  30. package/dist/esbuild-tsconfig.d.ts +13 -0
  31. package/dist/esbuild-tsconfig.d.ts.map +1 -0
  32. package/dist/esbuild-tsconfig.js +25 -0
  33. package/dist/esbuild-tsconfig.js.map +1 -0
  34. package/dist/esbuild-tsconfig.test.d.ts +2 -0
  35. package/dist/esbuild-tsconfig.test.d.ts.map +1 -0
  36. package/dist/esbuild-tsconfig.test.js +94 -0
  37. package/dist/esbuild-tsconfig.test.js.map +1 -0
  38. package/dist/get-input-files.test.d.ts +2 -0
  39. package/dist/get-input-files.test.d.ts.map +1 -0
  40. package/dist/get-input-files.test.js +121 -0
  41. package/dist/get-input-files.test.js.map +1 -0
  42. package/dist/index.d.ts +10 -3
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +9 -2
  45. package/dist/index.js.map +1 -1
  46. package/dist/module-specifier.d.ts +85 -0
  47. package/dist/module-specifier.d.ts.map +1 -0
  48. package/dist/module-specifier.js +448 -0
  49. package/dist/module-specifier.js.map +1 -0
  50. package/dist/module-specifier.test.d.ts +2 -0
  51. package/dist/module-specifier.test.d.ts.map +1 -0
  52. package/dist/module-specifier.test.js +240 -0
  53. package/dist/module-specifier.test.js.map +1 -0
  54. package/dist/node-module-esbuild-plugin.d.ts +37 -0
  55. package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
  56. package/dist/node-module-esbuild-plugin.js +364 -7
  57. package/dist/node-module-esbuild-plugin.js.map +1 -1
  58. package/dist/node-module-esbuild-plugin.test.js +461 -146
  59. package/dist/node-module-esbuild-plugin.test.js.map +1 -1
  60. package/dist/pseudo-package-esbuild-plugin.d.ts +20 -0
  61. package/dist/pseudo-package-esbuild-plugin.d.ts.map +1 -0
  62. package/dist/pseudo-package-esbuild-plugin.js +47 -0
  63. package/dist/pseudo-package-esbuild-plugin.js.map +1 -0
  64. package/dist/pseudo-package-esbuild-plugin.test.d.ts +2 -0
  65. package/dist/pseudo-package-esbuild-plugin.test.d.ts.map +1 -0
  66. package/dist/pseudo-package-esbuild-plugin.test.js +315 -0
  67. package/dist/pseudo-package-esbuild-plugin.test.js.map +1 -0
  68. package/dist/request-converter.d.ts +3 -0
  69. package/dist/request-converter.d.ts.map +1 -0
  70. package/dist/request-converter.js +14 -0
  71. package/dist/request-converter.js.map +1 -0
  72. package/dist/serde-checker.d.ts +70 -0
  73. package/dist/serde-checker.d.ts.map +1 -0
  74. package/dist/serde-checker.js +118 -0
  75. package/dist/serde-checker.js.map +1 -0
  76. package/dist/standalone.d.ts +3 -0
  77. package/dist/standalone.d.ts.map +1 -1
  78. package/dist/standalone.js +37 -13
  79. package/dist/standalone.js.map +1 -1
  80. package/dist/swc-esbuild-plugin.d.ts +23 -2
  81. package/dist/swc-esbuild-plugin.d.ts.map +1 -1
  82. package/dist/swc-esbuild-plugin.js +133 -43
  83. package/dist/swc-esbuild-plugin.js.map +1 -1
  84. package/dist/swc-esbuild-plugin.test.d.ts +2 -0
  85. package/dist/swc-esbuild-plugin.test.d.ts.map +1 -0
  86. package/dist/swc-esbuild-plugin.test.js +493 -0
  87. package/dist/swc-esbuild-plugin.test.js.map +1 -0
  88. package/dist/transform-utils.d.ts +68 -0
  89. package/dist/transform-utils.d.ts.map +1 -0
  90. package/dist/transform-utils.js +102 -0
  91. package/dist/transform-utils.js.map +1 -0
  92. package/dist/transform-utils.test.d.ts +2 -0
  93. package/dist/transform-utils.test.d.ts.map +1 -0
  94. package/dist/transform-utils.test.js +302 -0
  95. package/dist/transform-utils.test.js.map +1 -0
  96. package/dist/types.d.ts +31 -2
  97. package/dist/types.d.ts.map +1 -1
  98. package/dist/types.js +2 -0
  99. package/dist/types.js.map +1 -1
  100. package/dist/vercel-build-output-api.d.ts.map +1 -1
  101. package/dist/vercel-build-output-api.js +38 -14
  102. package/dist/vercel-build-output-api.js.map +1 -1
  103. package/dist/workflow-alias.d.ts +3 -0
  104. package/dist/workflow-alias.d.ts.map +1 -0
  105. package/dist/workflow-alias.js +65 -0
  106. package/dist/workflow-alias.js.map +1 -0
  107. package/dist/workflow-alias.test.d.ts +2 -0
  108. package/dist/workflow-alias.test.d.ts.map +1 -0
  109. package/dist/workflow-alias.test.js +53 -0
  110. package/dist/workflow-alias.test.js.map +1 -0
  111. package/dist/workflows-extractor.d.ts +92 -0
  112. package/dist/workflows-extractor.d.ts.map +1 -0
  113. package/dist/workflows-extractor.js +1476 -0
  114. package/dist/workflows-extractor.js.map +1 -0
  115. package/package.json +14 -13
@@ -0,0 +1,493 @@
1
+ import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync, } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { dirname, join } from 'node:path';
4
+ import * as esbuild from 'esbuild';
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
6
+ const { applySwcTransformMock } = vi.hoisted(() => ({
7
+ applySwcTransformMock: vi.fn(),
8
+ }));
9
+ vi.mock('./apply-swc-transform.js', () => ({
10
+ applySwcTransform: applySwcTransformMock,
11
+ }));
12
+ import { createSwcPlugin } from './swc-esbuild-plugin.js';
13
+ const realTmpdir = realpathSync(tmpdir());
14
+ function writeFile(path, contents = '') {
15
+ mkdirSync(dirname(path), { recursive: true });
16
+ writeFileSync(path, contents, 'utf-8');
17
+ }
18
+ describe('createSwcPlugin externalizeNonSteps', () => {
19
+ let testRoot;
20
+ beforeEach(() => {
21
+ testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));
22
+ applySwcTransformMock.mockReset();
23
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
24
+ code: source,
25
+ workflowManifest: {},
26
+ }));
27
+ });
28
+ afterEach(() => {
29
+ rmSync(testRoot, { recursive: true, force: true });
30
+ });
31
+ it.each([
32
+ { inputExt: '.ts', outputExt: '.js' },
33
+ { inputExt: '.tsx', outputExt: '.js' },
34
+ { inputExt: '.mts', outputExt: '.mjs' },
35
+ { inputExt: '.cts', outputExt: '.cjs' },
36
+ ])('rewrites externalized $inputExt imports to $outputExt when rewriteTsExtensions is enabled', async ({ inputExt, outputExt, }) => {
37
+ const outdir = join(testRoot, 'out');
38
+ const srcDir = join(testRoot, 'src');
39
+ const stepFile = join(srcDir, 'step.ts');
40
+ writeFile(join(srcDir, `dep${inputExt}`), 'export const dep = {};');
41
+ writeFile(stepFile, `import { dep } from './dep';\nconsole.log(dep);`);
42
+ const result = await esbuild.build({
43
+ entryPoints: [stepFile],
44
+ absWorkingDir: testRoot,
45
+ outdir,
46
+ bundle: true,
47
+ format: 'esm',
48
+ platform: 'node',
49
+ write: false,
50
+ plugins: [
51
+ createSwcPlugin({
52
+ mode: 'step',
53
+ entriesToBundle: [stepFile],
54
+ outdir,
55
+ rewriteTsExtensions: true,
56
+ }),
57
+ ],
58
+ });
59
+ expect(result.errors).toHaveLength(0);
60
+ const output = result.outputFiles[0].text;
61
+ expect(output).toContain(`/dep${outputExt}`);
62
+ expect(output).not.toContain(`/dep${inputExt}`);
63
+ });
64
+ it('rewrites path-aliased imports to relative paths', async () => {
65
+ const outdir = join(testRoot, 'out');
66
+ const srcDir = join(testRoot, 'src');
67
+ const libDir = join(srcDir, 'lib');
68
+ const stepFile = join(srcDir, 'step.ts');
69
+ writeFile(join(libDir, 'config.ts'), 'export const config = {};');
70
+ writeFile(stepFile, `import { config } from '@/lib/config';\nconsole.log(config);`);
71
+ const result = await esbuild.build({
72
+ entryPoints: [stepFile],
73
+ absWorkingDir: testRoot,
74
+ outdir,
75
+ bundle: true,
76
+ format: 'esm',
77
+ platform: 'node',
78
+ write: false,
79
+ alias: { '@': srcDir },
80
+ plugins: [
81
+ createSwcPlugin({
82
+ mode: 'step',
83
+ entriesToBundle: [stepFile],
84
+ outdir,
85
+ rewriteTsExtensions: true,
86
+ }),
87
+ ],
88
+ });
89
+ expect(result.errors).toHaveLength(0);
90
+ const output = result.outputFiles[0].text;
91
+ expect(output).toContain('/lib/config.js');
92
+ expect(output).not.toContain('@/lib/config');
93
+ });
94
+ it('does not relativize Node.js builtin imports', async () => {
95
+ const outdir = join(testRoot, 'out');
96
+ const srcDir = join(testRoot, 'src');
97
+ const stepFile = join(srcDir, 'step.ts');
98
+ writeFile(stepFile, `import { createHash } from 'crypto';\nimport { join } from 'node:path';\nconsole.log(createHash, join);`);
99
+ const result = await esbuild.build({
100
+ entryPoints: [stepFile],
101
+ absWorkingDir: testRoot,
102
+ outdir,
103
+ bundle: true,
104
+ format: 'esm',
105
+ platform: 'node',
106
+ write: false,
107
+ plugins: [
108
+ createSwcPlugin({
109
+ mode: 'step',
110
+ entriesToBundle: [stepFile],
111
+ outdir,
112
+ }),
113
+ ],
114
+ });
115
+ expect(result.errors).toHaveLength(0);
116
+ const output = result.outputFiles[0].text;
117
+ // Builtins should remain as bare specifiers, not relativized paths
118
+ expect(output).toMatch(/from\s+["']crypto["']/);
119
+ expect(output).toMatch(/from\s+["']node:path["']/);
120
+ expect(output).not.toMatch(/from\s+["']\..*crypto["']/);
121
+ expect(output).not.toMatch(/from\s+["']\..*node:path["']/);
122
+ });
123
+ it('does not externalize aliased imports that resolve into node_modules', async () => {
124
+ const outdir = join(testRoot, 'out');
125
+ const srcDir = join(testRoot, 'src');
126
+ const stepFile = join(srcDir, 'step.ts');
127
+ const nodeModulesDir = join(testRoot, 'node_modules', 'some-pkg');
128
+ writeFile(join(nodeModulesDir, 'index.js'), 'export const pkg = "hello";');
129
+ writeFile(stepFile, `import { pkg } from '@pkg';\nconsole.log(pkg);`);
130
+ const result = await esbuild.build({
131
+ entryPoints: [stepFile],
132
+ absWorkingDir: testRoot,
133
+ outdir,
134
+ bundle: true,
135
+ format: 'esm',
136
+ platform: 'node',
137
+ write: false,
138
+ alias: { '@pkg': join(nodeModulesDir, 'index.js') },
139
+ plugins: [
140
+ createSwcPlugin({
141
+ mode: 'step',
142
+ entriesToBundle: [stepFile],
143
+ outdir,
144
+ }),
145
+ ],
146
+ });
147
+ expect(result.errors).toHaveLength(0);
148
+ const output = result.outputFiles[0].text;
149
+ // Should be bundled (inlined), not externalized as a relative node_modules path
150
+ expect(output).toContain('hello');
151
+ expect(output).not.toMatch(/from\s+["'].*node_modules/);
152
+ });
153
+ it.each([
154
+ '.ts',
155
+ '.tsx',
156
+ '.mts',
157
+ '.cts',
158
+ ])('preserves externalized %s extensions by default', async (inputExt) => {
159
+ const outdir = join(testRoot, 'out');
160
+ const srcDir = join(testRoot, 'src');
161
+ const stepFile = join(srcDir, 'step.ts');
162
+ writeFile(join(srcDir, `dep${inputExt}`), 'export const dep = {};');
163
+ writeFile(stepFile, `import { dep } from './dep';\nconsole.log(dep);`);
164
+ const result = await esbuild.build({
165
+ entryPoints: [stepFile],
166
+ absWorkingDir: testRoot,
167
+ outdir,
168
+ bundle: true,
169
+ format: 'esm',
170
+ platform: 'node',
171
+ write: false,
172
+ plugins: [
173
+ createSwcPlugin({
174
+ mode: 'step',
175
+ entriesToBundle: [stepFile],
176
+ outdir,
177
+ }),
178
+ ],
179
+ });
180
+ expect(result.errors).toHaveLength(0);
181
+ const output = result.outputFiles[0].text;
182
+ expect(output).toContain(`/dep${inputExt}`);
183
+ });
184
+ });
185
+ describe('createSwcPlugin sideEffectEntries', () => {
186
+ let testRoot;
187
+ beforeEach(() => {
188
+ testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));
189
+ applySwcTransformMock.mockReset();
190
+ });
191
+ afterEach(() => {
192
+ rmSync(testRoot, { recursive: true, force: true });
193
+ });
194
+ /**
195
+ * Helper: creates a fake node_modules package with `"sideEffects": false`
196
+ * in its package.json and a single entry file that exports a side-effectful
197
+ * registration call (simulating what the SWC transform produces).
198
+ */
199
+ function createSideEffectsFalsePackage(packageName, entryCode) {
200
+ const pkgDir = join(testRoot, 'node_modules', packageName);
201
+ writeFile(join(pkgDir, 'package.json'), JSON.stringify({
202
+ name: packageName,
203
+ version: '1.0.0',
204
+ sideEffects: false,
205
+ main: 'index.js',
206
+ }));
207
+ const entryPath = join(pkgDir, 'index.js');
208
+ writeFile(entryPath, entryCode);
209
+ return entryPath;
210
+ }
211
+ it('preserves bare imports of sideEffectEntries packages when bundling without entriesToBundle', async () => {
212
+ const sideEffectCode = 'globalThis.__registered = globalThis.__registered || [];\nglobalThis.__registered.push("my-pkg");';
213
+ const entryPath = createSideEffectsFalsePackage('my-side-effect-pkg', sideEffectCode);
214
+ // SWC mock: return the code unchanged (the side effects are already there)
215
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
216
+ code: source,
217
+ workflowManifest: {},
218
+ }));
219
+ const result = await esbuild.build({
220
+ stdin: {
221
+ contents: `import 'my-side-effect-pkg';`,
222
+ resolveDir: testRoot,
223
+ sourcefile: 'virtual-entry.js',
224
+ loader: 'js',
225
+ },
226
+ absWorkingDir: testRoot,
227
+ bundle: true,
228
+ format: 'cjs',
229
+ platform: 'node',
230
+ write: false,
231
+ treeShaking: true,
232
+ logLevel: 'silent',
233
+ plugins: [
234
+ createSwcPlugin({
235
+ mode: 'workflow',
236
+ sideEffectEntries: [entryPath],
237
+ }),
238
+ ],
239
+ });
240
+ expect(result.errors).toHaveLength(0);
241
+ const output = result.outputFiles[0].text;
242
+ // The registration code should be present in the bundle
243
+ expect(output).toContain('__registered');
244
+ });
245
+ it('drops bare imports when sideEffectEntries is NOT provided for sideEffects:false packages', async () => {
246
+ const sideEffectCode = 'globalThis.__registered = globalThis.__registered || [];\nglobalThis.__registered.push("my-pkg");';
247
+ createSideEffectsFalsePackage('my-dropped-pkg', sideEffectCode);
248
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
249
+ code: source,
250
+ workflowManifest: {},
251
+ }));
252
+ const result = await esbuild.build({
253
+ stdin: {
254
+ contents: `import 'my-dropped-pkg';`,
255
+ resolveDir: testRoot,
256
+ sourcefile: 'virtual-entry.js',
257
+ loader: 'js',
258
+ },
259
+ absWorkingDir: testRoot,
260
+ bundle: true,
261
+ format: 'cjs',
262
+ platform: 'node',
263
+ write: false,
264
+ treeShaking: true,
265
+ logLevel: 'silent',
266
+ plugins: [
267
+ createSwcPlugin({
268
+ mode: 'workflow',
269
+ }),
270
+ ],
271
+ });
272
+ expect(result.errors).toHaveLength(0);
273
+ const output = result.outputFiles[0].text;
274
+ // Without sideEffectEntries, esbuild drops the bare import
275
+ expect(output).not.toContain('__registered');
276
+ });
277
+ it('produces no warnings for sideEffectEntries packages', async () => {
278
+ const sideEffectCode = 'globalThis.__registered = globalThis.__registered || [];\nglobalThis.__registered.push("warned-pkg");';
279
+ const entryPath = createSideEffectsFalsePackage('my-warned-pkg', sideEffectCode);
280
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
281
+ code: source,
282
+ workflowManifest: {},
283
+ }));
284
+ const result = await esbuild.build({
285
+ stdin: {
286
+ contents: `import 'my-warned-pkg';`,
287
+ resolveDir: testRoot,
288
+ sourcefile: 'virtual-entry.js',
289
+ loader: 'js',
290
+ },
291
+ absWorkingDir: testRoot,
292
+ bundle: true,
293
+ format: 'cjs',
294
+ platform: 'node',
295
+ write: false,
296
+ treeShaking: true,
297
+ plugins: [
298
+ createSwcPlugin({
299
+ mode: 'workflow',
300
+ sideEffectEntries: [entryPath],
301
+ }),
302
+ ],
303
+ });
304
+ expect(result.errors).toHaveLength(0);
305
+ // No "ignored-bare-import" warnings should be produced
306
+ const sideEffectWarnings = result.warnings.filter((w) => w.id === 'ignored-bare-import');
307
+ expect(sideEffectWarnings).toHaveLength(0);
308
+ });
309
+ it('preserves bare imports with entriesToBundle and sideEffectEntries together', async () => {
310
+ const sideEffectCode = 'globalThis.__registered = globalThis.__registered || [];\nglobalThis.__registered.push("bundled-pkg");';
311
+ const entryPath = createSideEffectsFalsePackage('my-bundled-pkg', sideEffectCode);
312
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
313
+ code: source,
314
+ workflowManifest: {},
315
+ }));
316
+ const outdir = join(testRoot, 'out');
317
+ const stepFile = join(testRoot, 'src', 'step.ts');
318
+ writeFile(stepFile, `import 'my-bundled-pkg';\nexport const POST = () => {};`);
319
+ const result = await esbuild.build({
320
+ entryPoints: [stepFile],
321
+ absWorkingDir: testRoot,
322
+ outdir,
323
+ bundle: true,
324
+ format: 'esm',
325
+ platform: 'node',
326
+ write: false,
327
+ treeShaking: true,
328
+ logLevel: 'silent',
329
+ plugins: [
330
+ createSwcPlugin({
331
+ mode: 'step',
332
+ entriesToBundle: [stepFile, entryPath],
333
+ outdir,
334
+ sideEffectEntries: [entryPath],
335
+ }),
336
+ ],
337
+ });
338
+ expect(result.errors).toHaveLength(0);
339
+ const output = result.outputFiles[0].text;
340
+ // The registration code should be bundled in
341
+ expect(output).toContain('__registered');
342
+ });
343
+ it('preserves bare imports for local files with sideEffects:false in their parent package.json', async () => {
344
+ // Simulate a workspace package with sideEffects: false
345
+ const pkgDir = join(testRoot, 'packages', 'shared');
346
+ writeFile(join(pkgDir, 'package.json'), JSON.stringify({
347
+ name: '@myorg/shared',
348
+ version: '1.0.0',
349
+ sideEffects: false,
350
+ main: 'index.js',
351
+ }));
352
+ const sharedEntry = join(pkgDir, 'index.js');
353
+ writeFile(sharedEntry, 'globalThis.__sharedRegistered = true;');
354
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
355
+ code: source,
356
+ workflowManifest: {},
357
+ }));
358
+ // Use a relative import to the local file (like the virtual entry does for local files)
359
+ const result = await esbuild.build({
360
+ stdin: {
361
+ contents: `import './packages/shared/index.js';`,
362
+ resolveDir: testRoot,
363
+ sourcefile: 'virtual-entry.js',
364
+ loader: 'js',
365
+ },
366
+ absWorkingDir: testRoot,
367
+ bundle: true,
368
+ format: 'cjs',
369
+ platform: 'node',
370
+ write: false,
371
+ treeShaking: true,
372
+ logLevel: 'silent',
373
+ plugins: [
374
+ createSwcPlugin({
375
+ mode: 'workflow',
376
+ sideEffectEntries: [sharedEntry],
377
+ }),
378
+ ],
379
+ });
380
+ expect(result.errors).toHaveLength(0);
381
+ const output = result.outputFiles[0].text;
382
+ expect(output).toContain('__sharedRegistered');
383
+ });
384
+ it('does not override sideEffects for non-entry modules', async () => {
385
+ // Create two packages - one is a side-effect entry, one is not
386
+ const sideEffectCode = 'globalThis.__entryRegistered = true;';
387
+ const entryPath = createSideEffectsFalsePackage('entry-pkg', sideEffectCode);
388
+ const nonEntryCode = 'globalThis.__nonEntryRegistered = true;';
389
+ createSideEffectsFalsePackage('non-entry-pkg', nonEntryCode);
390
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
391
+ code: source,
392
+ workflowManifest: {},
393
+ }));
394
+ const result = await esbuild.build({
395
+ stdin: {
396
+ contents: `import 'entry-pkg';\nimport 'non-entry-pkg';`,
397
+ resolveDir: testRoot,
398
+ sourcefile: 'virtual-entry.js',
399
+ loader: 'js',
400
+ },
401
+ absWorkingDir: testRoot,
402
+ bundle: true,
403
+ format: 'cjs',
404
+ platform: 'node',
405
+ write: false,
406
+ treeShaking: true,
407
+ logLevel: 'silent',
408
+ plugins: [
409
+ createSwcPlugin({
410
+ mode: 'workflow',
411
+ // Only entry-pkg is listed, non-entry-pkg is not
412
+ sideEffectEntries: [entryPath],
413
+ }),
414
+ ],
415
+ });
416
+ expect(result.errors).toHaveLength(0);
417
+ const output = result.outputFiles[0].text;
418
+ // entry-pkg should be preserved
419
+ expect(output).toContain('__entryRegistered');
420
+ // non-entry-pkg should be dropped (sideEffects: false is respected)
421
+ expect(output).not.toContain('__nonEntryRegistered');
422
+ });
423
+ });
424
+ describe('createSwcPlugin projectRoot', () => {
425
+ let testRoot;
426
+ beforeEach(() => {
427
+ testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));
428
+ applySwcTransformMock.mockReset();
429
+ applySwcTransformMock.mockImplementation(async (_filename, source) => ({
430
+ code: source,
431
+ workflowManifest: {},
432
+ }));
433
+ });
434
+ afterEach(() => {
435
+ rmSync(testRoot, { recursive: true, force: true });
436
+ });
437
+ function setupFixture() {
438
+ const appRoot = join(testRoot, 'apps', 'chat');
439
+ const packageRoot = join(testRoot, 'packages', 'vade');
440
+ const workflowFile = join(packageRoot, 'src', 'internal', 'message', 'workflow', 'handle-message.ts');
441
+ writeFile(workflowFile, `export async function handleMessageWorkflow(message) {
442
+ "use workflow";
443
+
444
+ return message;
445
+ }
446
+ `);
447
+ return {
448
+ appRoot,
449
+ packageRoot,
450
+ workflowFile,
451
+ };
452
+ }
453
+ it('passes the explicit projectRoot through to applySwcTransform', async () => {
454
+ const fixture = setupFixture();
455
+ const result = await esbuild.build({
456
+ entryPoints: [fixture.workflowFile],
457
+ absWorkingDir: fixture.packageRoot,
458
+ bundle: true,
459
+ format: 'esm',
460
+ platform: 'node',
461
+ write: false,
462
+ plugins: [
463
+ createSwcPlugin({
464
+ mode: 'workflow',
465
+ projectRoot: fixture.appRoot,
466
+ workflowManifest: {},
467
+ }),
468
+ ],
469
+ });
470
+ expect(result.errors).toHaveLength(0);
471
+ expect(applySwcTransformMock).toHaveBeenCalledWith('src/internal/message/workflow/handle-message.ts', expect.stringContaining('"use workflow"'), 'workflow', fixture.workflowFile, fixture.appRoot);
472
+ });
473
+ it('defaults the transform projectRoot to absWorkingDir', async () => {
474
+ const fixture = setupFixture();
475
+ const result = await esbuild.build({
476
+ entryPoints: [fixture.workflowFile],
477
+ absWorkingDir: fixture.packageRoot,
478
+ bundle: true,
479
+ format: 'esm',
480
+ platform: 'node',
481
+ write: false,
482
+ plugins: [
483
+ createSwcPlugin({
484
+ mode: 'workflow',
485
+ workflowManifest: {},
486
+ }),
487
+ ],
488
+ });
489
+ expect(result.errors).toHaveLength(0);
490
+ expect(applySwcTransformMock).toHaveBeenCalledWith('src/internal/message/workflow/handle-message.ts', expect.stringContaining('"use workflow"'), 'workflow', fixture.workflowFile, fixture.packageRoot);
491
+ });
492
+ });
493
+ //# sourceMappingURL=swc-esbuild-plugin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swc-esbuild-plugin.test.js","sourceRoot":"","sources":["../src/swc-esbuild-plugin.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Shared utilities for detecting files that need workflow transformation.
3
+ * Used by builders, rollup plugin, Next.js loader, and vite plugin.
4
+ */
5
+ export declare const useWorkflowPattern: RegExp;
6
+ export declare const useStepPattern: RegExp;
7
+ export declare const workflowSerdeImportPattern: RegExp;
8
+ export declare const workflowSerdeSymbolPattern: RegExp;
9
+ export declare const workflowSerdeComputedPropertyPattern: RegExp;
10
+ export declare const generatedWorkflowPathPattern: RegExp;
11
+ export declare const workflowSdkPathPattern: RegExp;
12
+ /**
13
+ * Detects workflow-related patterns in source code.
14
+ */
15
+ export interface WorkflowPatternMatch {
16
+ /** File contains 'use workflow' directive */
17
+ hasUseWorkflow: boolean;
18
+ /** File contains 'use step' directive */
19
+ hasUseStep: boolean;
20
+ /** File contains @workflow/serde import */
21
+ hasSerdeImport: boolean;
22
+ /** File contains Symbol.for('workflow-serialize') or Symbol.for('workflow-deserialize') */
23
+ hasSerdeSymbol: boolean;
24
+ /** File contains any directive ('use workflow' or 'use step') */
25
+ hasDirective: boolean;
26
+ /** File contains any serde pattern (import or Symbol.for) */
27
+ hasSerde: boolean;
28
+ }
29
+ /**
30
+ * Detects workflow-related patterns in source code.
31
+ * @param source - The source code to analyze
32
+ * @returns Object with flags for each detected pattern
33
+ */
34
+ export declare function detectWorkflowPatterns(source: string): WorkflowPatternMatch;
35
+ /**
36
+ * Determines if a file path is a generated workflow route file.
37
+ * @param filePath - The file path to check
38
+ * @returns true if the file is a generated workflow route
39
+ */
40
+ export declare function isGeneratedWorkflowFile(filePath: string): boolean;
41
+ /**
42
+ * Determines if a file path is part of the @workflow SDK.
43
+ * @param filePath - The file path to check
44
+ * @returns true if the file is part of the @workflow SDK
45
+ */
46
+ export declare function isWorkflowSdkFile(filePath: string): boolean;
47
+ /**
48
+ * Determines if a file should be transformed based on its path and content patterns.
49
+ *
50
+ * Logic:
51
+ * - Generated workflow route files are never transformed
52
+ * - Files with directives ('use workflow' or 'use step') are always transformed
53
+ * - Files with serde patterns are transformed, unless they're @workflow SDK files
54
+ * (SDK files with serde patterns are internal implementation, not user code)
55
+ *
56
+ * @param filePath - The file path to check
57
+ * @param patterns - The detected patterns from detectWorkflowPatterns()
58
+ * @returns true if the file should be transformed
59
+ */
60
+ export declare function shouldTransformFile(filePath: string, patterns: WorkflowPatternMatch): boolean;
61
+ /**
62
+ * Combined regex pattern for turbopack content matching.
63
+ * Uses backreferences to ensure matching quote types.
64
+ * Matches: 'use workflow', 'use step', @workflow/serde imports, Symbol.for serialization symbols,
65
+ * and WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE computed property usage
66
+ */
67
+ export declare const turbopackContentPattern: RegExp;
68
+ //# sourceMappingURL=transform-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-utils.d.ts","sourceRoot":"","sources":["../src/transform-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,kBAAkB,QAAoC,CAAC;AACpE,eAAO,MAAM,cAAc,QAAgC,CAAC;AAI5D,eAAO,MAAM,0BAA0B,QAAoC,CAAC;AAI5E,eAAO,MAAM,0BAA0B,QAC+B,CAAC;AAKvE,eAAO,MAAM,oCAAoC,QACD,CAAC;AAIjD,eAAO,MAAM,4BAA4B,QACF,CAAC;AAWxC,eAAO,MAAM,sBAAsB,QACkM,CAAC;AAEtO;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,6CAA6C;IAC7C,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,2CAA2C;IAC3C,cAAc,EAAE,OAAO,CAAC;IACxB,2FAA2F;IAC3F,cAAc,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,YAAY,EAAE,OAAO,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAgB3E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAiBT;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,QACuI,CAAC"}