@workflow/builders 5.0.0-beta.0 → 5.0.0-beta.2

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 (48) hide show
  1. package/dist/apply-swc-transform.js.map +1 -1
  2. package/dist/base-builder.d.ts +7 -0
  3. package/dist/base-builder.d.ts.map +1 -1
  4. package/dist/base-builder.js +49 -24
  5. package/dist/base-builder.js.map +1 -1
  6. package/dist/build-queue.js.map +1 -1
  7. package/dist/config-helpers.js.map +1 -1
  8. package/dist/constants.js.map +1 -1
  9. package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
  10. package/dist/discover-entries-esbuild-plugin.js +8 -7
  11. package/dist/discover-entries-esbuild-plugin.js.map +1 -1
  12. package/dist/discover-entries-esbuild-plugin.test.js +41 -1
  13. package/dist/discover-entries-esbuild-plugin.test.js.map +1 -1
  14. package/dist/esbuild-tsconfig.js.map +1 -1
  15. package/dist/esbuild-tsconfig.test.js.map +1 -1
  16. package/dist/get-input-files.test.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/module-specifier.js.map +1 -1
  22. package/dist/module-specifier.test.js.map +1 -1
  23. package/dist/node-module-esbuild-plugin.js +2 -2
  24. package/dist/node-module-esbuild-plugin.js.map +1 -1
  25. package/dist/node-module-esbuild-plugin.test.js.map +1 -1
  26. package/dist/pseudo-package-esbuild-plugin.js.map +1 -1
  27. package/dist/pseudo-package-esbuild-plugin.test.js.map +1 -1
  28. package/dist/request-converter.js.map +1 -1
  29. package/dist/serde-checker.js.map +1 -1
  30. package/dist/standalone.js.map +1 -1
  31. package/dist/swc-esbuild-plugin.d.ts.map +1 -1
  32. package/dist/swc-esbuild-plugin.js +9 -0
  33. package/dist/swc-esbuild-plugin.js.map +1 -1
  34. package/dist/swc-esbuild-plugin.test.js.map +1 -1
  35. package/dist/transform-utils.d.ts +3 -9
  36. package/dist/transform-utils.d.ts.map +1 -1
  37. package/dist/transform-utils.js +4 -29
  38. package/dist/transform-utils.js.map +1 -1
  39. package/dist/transform-utils.test.js +36 -16
  40. package/dist/transform-utils.test.js.map +1 -1
  41. package/dist/types.js.map +1 -1
  42. package/dist/vercel-build-output-api.d.ts.map +1 -1
  43. package/dist/vercel-build-output-api.js +10 -7
  44. package/dist/vercel-build-output-api.js.map +1 -1
  45. package/dist/workflow-alias.js.map +1 -1
  46. package/dist/workflow-alias.test.js.map +1 -1
  47. package/dist/workflows-extractor.js.map +1 -1
  48. package/package.json +5 -5
@@ -18,16 +18,6 @@ export const workflowSerdeComputedPropertyPattern = /\[\s*WORKFLOW_(?:SERIALIZE|
18
18
  // Pattern to detect generated workflow route files that should be excluded
19
19
  // These files are generated by the build process and should not be re-processed
20
20
  export const generatedWorkflowPathPattern = /[/\\]\.well-known[/\\]workflow[/\\]/;
21
- // Pattern to detect @workflow SDK packages that should be excluded from transformation
22
- // These are internal SDK packages that should not be treated as user entry points.
23
- // Matches:
24
- // - node_modules/@workflow/*
25
- // - node_modules/workflow/*
26
- // - node_modules/.pnpm/.../node_modules/@workflow/* (pnpm virtual store)
27
- // - node_modules/.pnpm/.../node_modules/workflow/* (pnpm virtual store)
28
- // - monorepo packages/*/dist paths
29
- // User npm packages with workflows/steps/serde SHOULD still be discovered.
30
- export const workflowSdkPathPattern = /[/\\](?:node_modules[/\\](?:@workflow[/\\]|workflow[/\\]|\.pnpm[/\\][^/\\]+[/\\]node_modules[/\\](?:@workflow[/\\]|workflow[/\\]))|packages[/\\](?:builders|core|rollup|vite|next|nitro|serde|workflow|swc-plugin-workflow)[/\\])/;
31
21
  /**
32
22
  * Detects workflow-related patterns in source code.
33
23
  * @param source - The source code to analyze
@@ -56,22 +46,15 @@ export function detectWorkflowPatterns(source) {
56
46
  export function isGeneratedWorkflowFile(filePath) {
57
47
  return generatedWorkflowPathPattern.test(filePath);
58
48
  }
59
- /**
60
- * Determines if a file path is part of the @workflow SDK.
61
- * @param filePath - The file path to check
62
- * @returns true if the file is part of the @workflow SDK
63
- */
64
- export function isWorkflowSdkFile(filePath) {
65
- return workflowSdkPathPattern.test(filePath);
66
- }
67
49
  /**
68
50
  * Determines if a file should be transformed based on its path and content patterns.
69
51
  *
70
52
  * Logic:
71
53
  * - Generated workflow route files are never transformed
72
54
  * - Files with directives ('use workflow' or 'use step') are always transformed
73
- * - Files with serde patterns are transformed, unless they're @workflow SDK files
74
- * (SDK files with serde patterns are internal implementation, not user code)
55
+ * - Files with serde patterns are always transformed; the SWC plugin performs
56
+ * AST-level extraction/filtering to determine whether they actually define
57
+ * serde classes
75
58
  *
76
59
  * @param filePath - The file path to check
77
60
  * @param patterns - The detected patterns from detectWorkflowPatterns()
@@ -82,15 +65,7 @@ export function shouldTransformFile(filePath, patterns) {
82
65
  if (isGeneratedWorkflowFile(filePath)) {
83
66
  return false;
84
67
  }
85
- // Always transform files with directives
86
- if (patterns.hasDirective) {
87
- return true;
88
- }
89
- // Transform files with serde patterns, unless they're @workflow SDK files
90
- if (patterns.hasSerde) {
91
- return !isWorkflowSdkFile(filePath);
92
- }
93
- return false;
68
+ return patterns.hasDirective || patterns.hasSerde;
94
69
  }
95
70
  /**
96
71
  * Combined regex pattern for turbopack content matching.
@@ -1 +1 @@
1
- {"version":3,"file":"transform-utils.js","sourceRoot":"","sources":["../src/transform-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0GAA0G;AAC1G,MAAM,CAAC,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAE5D,0EAA0E;AAC1E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,iCAAiC,CAAC;AAE5E,iGAAiG;AACjG,oEAAoE;AACpE,MAAM,CAAC,MAAM,0BAA0B,GACrC,oEAAoE,CAAC;AAEvE,yFAAyF;AACzF,sDAAsD;AACtD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oCAAoC,GAC/C,8CAA8C,CAAC;AAEjD,2EAA2E;AAC3E,gFAAgF;AAChF,MAAM,CAAC,MAAM,4BAA4B,GACvC,qCAAqC,CAAC;AAExC,uFAAuF;AACvF,mFAAmF;AACnF,WAAW;AACX,6BAA6B;AAC7B,4BAA4B;AAC5B,yEAAyE;AACzE,wEAAwE;AACxE,mCAAmC;AACnC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GACjC,mOAAmO,CAAC;AAoBtO;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,wBAAwB,GAC5B,oCAAoC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO;QACL,cAAc;QACd,UAAU;QACV,cAAc;QACd,cAAc;QACd,YAAY,EAAE,cAAc,IAAI,UAAU;QAC1C,QAAQ,EAAE,cAAc,IAAI,cAAc,IAAI,wBAAwB;KACvE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,QAA8B;IAE9B,iDAAiD;IACjD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yCAAyC;IACzC,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0EAA0E;IAC1E,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAClC,yKAAyK,CAAC"}
1
+ {"version":3,"file":"transform-utils.js","sourceRoot":"","sources":["../src/transform-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0GAA0G;AAC1G,MAAM,CAAC,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAE5D,0EAA0E;AAC1E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,iCAAiC,CAAC;AAE5E,iGAAiG;AACjG,oEAAoE;AACpE,MAAM,CAAC,MAAM,0BAA0B,GACrC,oEAAoE,CAAC;AAEvE,yFAAyF;AACzF,sDAAsD;AACtD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oCAAoC,GAC/C,8CAA8C,CAAC;AAEjD,2EAA2E;AAC3E,gFAAgF;AAChF,MAAM,CAAC,MAAM,4BAA4B,GACvC,qCAAqC,CAAC;AAoBxC;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,wBAAwB,GAC5B,oCAAoC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpD,OAAO;QACL,cAAc;QACd,UAAU;QACV,cAAc;QACd,cAAc;QACd,YAAY,EAAE,cAAc,IAAI,UAAU;QAC1C,QAAQ,EAAE,cAAc,IAAI,cAAc,IAAI,wBAAwB;KACvE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,QAA8B;IAE9B,iDAAiD;IACjD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAClC,yKAAyK,CAAC","sourcesContent":["/**\n * Shared utilities for detecting files that need workflow transformation.\n * Used by builders, rollup plugin, Next.js loader, and vite plugin.\n */\n\n// Matches: 'use workflow'; \"use workflow\"; 'use step'; \"use step\"; at line start with optional whitespace\nexport const useWorkflowPattern = /^\\s*(['\"])use workflow\\1;?\\s*$/m;\nexport const useStepPattern = /^\\s*(['\"])use step\\1;?\\s*$/m;\n\n// Matches imports from '@workflow/serde' (for custom class serialization)\n// e.g.: import { WORKFLOW_SERIALIZE } from '@workflow/serde';\nexport const workflowSerdeImportPattern = /from\\s+(['\"])@workflow\\/serde\\1/;\n\n// Matches direct usage of Symbol.for('workflow-serialize') or Symbol.for('workflow-deserialize')\n// e.g.: static [Symbol.for('workflow-serialize')](instance) { ... }\nexport const workflowSerdeSymbolPattern =\n /Symbol\\.for\\s*\\(\\s*(['\"])workflow-(?:serialize|deserialize)\\1\\s*\\)/;\n\n// Matches usage of WORKFLOW_SERIALIZE or WORKFLOW_DESERIALIZE as computed property names\n// e.g.: static [WORKFLOW_SERIALIZE](instance) { ... }\n// This catches cases where the symbols are imported and used (even if bundled/re-exported)\nexport const workflowSerdeComputedPropertyPattern =\n /\\[\\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\\s*\\]/;\n\n// Pattern to detect generated workflow route files that should be excluded\n// These files are generated by the build process and should not be re-processed\nexport const generatedWorkflowPathPattern =\n /[/\\\\]\\.well-known[/\\\\]workflow[/\\\\]/;\n\n/**\n * Detects workflow-related patterns in source code.\n */\nexport interface WorkflowPatternMatch {\n /** File contains 'use workflow' directive */\n hasUseWorkflow: boolean;\n /** File contains 'use step' directive */\n hasUseStep: boolean;\n /** File contains @workflow/serde import */\n hasSerdeImport: boolean;\n /** File contains Symbol.for('workflow-serialize') or Symbol.for('workflow-deserialize') */\n hasSerdeSymbol: boolean;\n /** File contains any directive ('use workflow' or 'use step') */\n hasDirective: boolean;\n /** File contains any serde pattern (import or Symbol.for) */\n hasSerde: boolean;\n}\n\n/**\n * Detects workflow-related patterns in source code.\n * @param source - The source code to analyze\n * @returns Object with flags for each detected pattern\n */\nexport function detectWorkflowPatterns(source: string): WorkflowPatternMatch {\n const hasUseWorkflow = useWorkflowPattern.test(source);\n const hasUseStep = useStepPattern.test(source);\n const hasSerdeImport = workflowSerdeImportPattern.test(source);\n const hasSerdeSymbol = workflowSerdeSymbolPattern.test(source);\n const hasSerdeComputedProperty =\n workflowSerdeComputedPropertyPattern.test(source);\n\n return {\n hasUseWorkflow,\n hasUseStep,\n hasSerdeImport,\n hasSerdeSymbol,\n hasDirective: hasUseWorkflow || hasUseStep,\n hasSerde: hasSerdeImport || hasSerdeSymbol || hasSerdeComputedProperty,\n };\n}\n\n/**\n * Determines if a file path is a generated workflow route file.\n * @param filePath - The file path to check\n * @returns true if the file is a generated workflow route\n */\nexport function isGeneratedWorkflowFile(filePath: string): boolean {\n return generatedWorkflowPathPattern.test(filePath);\n}\n\n/**\n * Determines if a file should be transformed based on its path and content patterns.\n *\n * Logic:\n * - Generated workflow route files are never transformed\n * - Files with directives ('use workflow' or 'use step') are always transformed\n * - Files with serde patterns are always transformed; the SWC plugin performs\n * AST-level extraction/filtering to determine whether they actually define\n * serde classes\n *\n * @param filePath - The file path to check\n * @param patterns - The detected patterns from detectWorkflowPatterns()\n * @returns true if the file should be transformed\n */\nexport function shouldTransformFile(\n filePath: string,\n patterns: WorkflowPatternMatch\n): boolean {\n // Never transform generated workflow route files\n if (isGeneratedWorkflowFile(filePath)) {\n return false;\n }\n\n return patterns.hasDirective || patterns.hasSerde;\n}\n\n/**\n * Combined regex pattern for turbopack content matching.\n * Uses backreferences to ensure matching quote types.\n * Matches: 'use workflow', 'use step', @workflow/serde imports, Symbol.for serialization symbols,\n * and WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE computed property usage\n */\nexport const turbopackContentPattern =\n /(use workflow|use step|from\\s+(['\"])@workflow\\/serde\\2|Symbol\\.for\\s*\\(\\s*(['\"])workflow-(?:serialize|deserialize)\\3\\s*\\)|\\[\\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\\s*\\])/;\n"]}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { detectWorkflowPatterns, isWorkflowSdkFile, useStepPattern, useWorkflowPattern, workflowSerdeComputedPropertyPattern, workflowSerdeImportPattern, workflowSerdeSymbolPattern, } from './transform-utils.js';
2
+ import { detectWorkflowPatterns, shouldTransformFile, useStepPattern, useWorkflowPattern, workflowSerdeComputedPropertyPattern, workflowSerdeImportPattern, workflowSerdeSymbolPattern, } from './transform-utils.js';
3
3
  describe('transform-utils patterns', () => {
4
4
  describe('useWorkflowPattern', () => {
5
5
  it('should match "use workflow" with single quotes', () => {
@@ -281,21 +281,41 @@ export default function Page() { return null; }
281
281
  expect(result.hasDirective).toBe(true);
282
282
  });
283
283
  });
284
- describe('isWorkflowSdkFile', () => {
285
- it('matches direct @workflow package path in node_modules', () => {
286
- expect(isWorkflowSdkFile('/tmp/app/node_modules/@workflow/core/dist/serialization.js')).toBe(true);
287
- });
288
- it('matches direct workflow package path in node_modules', () => {
289
- expect(isWorkflowSdkFile('/tmp/app/node_modules/workflow/dist/runtime.js')).toBe(true);
290
- });
291
- it('matches pnpm virtual store @workflow package path', () => {
292
- expect(isWorkflowSdkFile('/tmp/app/node_modules/.pnpm/@workflow+core@4.1.0/node_modules/@workflow/core/dist/serialization.js')).toBe(true);
293
- });
294
- it('matches pnpm virtual store workflow package path', () => {
295
- expect(isWorkflowSdkFile('/tmp/app/node_modules/.pnpm/workflow@4.1.0/node_modules/workflow/dist/runtime.js')).toBe(true);
296
- });
297
- it('does not match non-workflow package in pnpm store', () => {
298
- expect(isWorkflowSdkFile('/tmp/app/node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/lodash.js')).toBe(false);
284
+ describe('shouldTransformFile', () => {
285
+ const noPatterns = {
286
+ hasUseWorkflow: false,
287
+ hasUseStep: false,
288
+ hasSerdeImport: false,
289
+ hasSerdeSymbol: false,
290
+ hasDirective: false,
291
+ hasSerde: false,
292
+ };
293
+ it('excludes generated workflow route files even with directives', () => {
294
+ expect(shouldTransformFile('/app/.well-known/workflow/v1/route.ts', {
295
+ ...noPatterns,
296
+ hasUseWorkflow: true,
297
+ hasDirective: true,
298
+ })).toBe(false);
299
+ });
300
+ it('transforms files with directive patterns', () => {
301
+ expect(shouldTransformFile('/app/workflows/my-workflow.ts', {
302
+ ...noPatterns,
303
+ hasUseWorkflow: true,
304
+ hasDirective: true,
305
+ })).toBe(true);
306
+ });
307
+ it('transforms files with serde patterns', () => {
308
+ expect(shouldTransformFile('/app/lib/my-class.ts', {
309
+ ...noPatterns,
310
+ hasSerdeImport: true,
311
+ hasSerde: true,
312
+ })).toBe(true);
313
+ });
314
+ it('transforms SDK files with serde patterns (no longer excluded)', () => {
315
+ expect(shouldTransformFile('/app/node_modules/@workflow/core/dist/serialization.js', { ...noPatterns, hasSerdeSymbol: true, hasSerde: true })).toBe(true);
316
+ });
317
+ it('does not transform files without directives or serde patterns', () => {
318
+ expect(shouldTransformFile('/app/lib/utils.ts', noPatterns)).toBe(false);
299
319
  });
300
320
  });
301
321
  });
@@ -1 +1 @@
1
- {"version":3,"file":"transform-utils.test.js","sourceRoot":"","sources":["../src/transform-utils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform-utils.test.js","sourceRoot":"","sources":["../src/transform-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport {\n detectWorkflowPatterns,\n shouldTransformFile,\n useStepPattern,\n useWorkflowPattern,\n workflowSerdeComputedPropertyPattern,\n workflowSerdeImportPattern,\n workflowSerdeSymbolPattern,\n} from './transform-utils.js';\n\ndescribe('transform-utils patterns', () => {\n describe('useWorkflowPattern', () => {\n it('should match \"use workflow\" with single quotes', () => {\n expect(useWorkflowPattern.test(`'use workflow';`)).toBe(true);\n expect(useWorkflowPattern.test(`'use workflow'`)).toBe(true);\n });\n\n it('should match \"use workflow\" with double quotes', () => {\n expect(useWorkflowPattern.test(`\"use workflow\";`)).toBe(true);\n expect(useWorkflowPattern.test(`\"use workflow\"`)).toBe(true);\n });\n\n it('should match with leading whitespace', () => {\n expect(useWorkflowPattern.test(` 'use workflow';`)).toBe(true);\n expect(useWorkflowPattern.test(`\\t\"use workflow\";`)).toBe(true);\n });\n\n it('should not match inline usage', () => {\n expect(useWorkflowPattern.test(`const x = 'use workflow';`)).toBe(false);\n });\n });\n\n describe('useStepPattern', () => {\n it('should match \"use step\" with single quotes', () => {\n expect(useStepPattern.test(`'use step';`)).toBe(true);\n expect(useStepPattern.test(`'use step'`)).toBe(true);\n });\n\n it('should match \"use step\" with double quotes', () => {\n expect(useStepPattern.test(`\"use step\";`)).toBe(true);\n expect(useStepPattern.test(`\"use step\"`)).toBe(true);\n });\n });\n\n describe('workflowSerdeImportPattern', () => {\n it('should match import from @workflow/serde with single quotes', () => {\n const source = `import { WORKFLOW_SERIALIZE } from '@workflow/serde';`;\n expect(workflowSerdeImportPattern.test(source)).toBe(true);\n });\n\n it('should match import from @workflow/serde with double quotes', () => {\n const source = `import { WORKFLOW_SERIALIZE } from \"@workflow/serde\";`;\n expect(workflowSerdeImportPattern.test(source)).toBe(true);\n });\n\n it('should match import with multiple specifiers', () => {\n const source = `import { WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from '@workflow/serde';`;\n expect(workflowSerdeImportPattern.test(source)).toBe(true);\n });\n\n it('should match import with type', () => {\n const source = `import type { SerializationSymbol } from '@workflow/serde';`;\n expect(workflowSerdeImportPattern.test(source)).toBe(true);\n });\n\n it('should not match similar but different packages', () => {\n expect(\n workflowSerdeImportPattern.test(`import { x } from '@other/serde';`)\n ).toBe(false);\n expect(\n workflowSerdeImportPattern.test(\n `import { x } from '@workflow/serde-utils';`\n )\n ).toBe(false);\n });\n });\n\n describe('workflowSerdeSymbolPattern', () => {\n it('should match Symbol.for with workflow-serialize', () => {\n const source = `static [Symbol.for('workflow-serialize')](instance) {}`;\n expect(workflowSerdeSymbolPattern.test(source)).toBe(true);\n });\n\n it('should match Symbol.for with workflow-deserialize', () => {\n const source = `static [Symbol.for('workflow-deserialize')](data) {}`;\n expect(workflowSerdeSymbolPattern.test(source)).toBe(true);\n });\n\n it('should match with double quotes', () => {\n const source = `static [Symbol.for(\"workflow-serialize\")](instance) {}`;\n expect(workflowSerdeSymbolPattern.test(source)).toBe(true);\n });\n\n it('should match with whitespace variations', () => {\n expect(\n workflowSerdeSymbolPattern.test(`Symbol.for( 'workflow-serialize' )`)\n ).toBe(true);\n expect(\n workflowSerdeSymbolPattern.test(`Symbol.for('workflow-deserialize')`)\n ).toBe(true);\n });\n\n it('should match in a full class definition', () => {\n const source = `\n export class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n\n static [Symbol.for('workflow-serialize')](instance) {\n return { x: instance.x, y: instance.y };\n }\n\n static [Symbol.for('workflow-deserialize')](data) {\n return new Point(data.x, data.y);\n }\n }\n `;\n expect(workflowSerdeSymbolPattern.test(source)).toBe(true);\n });\n\n it('should not match other Symbol.for usage', () => {\n expect(\n workflowSerdeSymbolPattern.test(`Symbol.for('other-symbol')`)\n ).toBe(false);\n expect(\n workflowSerdeSymbolPattern.test(`Symbol.for('workflow-something-else')`)\n ).toBe(false);\n });\n\n it('should not match non-Symbol.for patterns', () => {\n expect(workflowSerdeSymbolPattern.test(`'workflow-serialize'`)).toBe(\n false\n );\n expect(workflowSerdeSymbolPattern.test(`workflow-deserialize`)).toBe(\n false\n );\n });\n });\n\n describe('combined detection', () => {\n it('should detect file using imported symbols', () => {\n const source = `\n import { WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from '@workflow/serde';\n\n export class MyClass {\n static [WORKFLOW_SERIALIZE](instance) {\n return { value: instance.value };\n }\n\n static [WORKFLOW_DESERIALIZE](data) {\n return new MyClass(data.value);\n }\n }\n `;\n expect(workflowSerdeImportPattern.test(source)).toBe(true);\n // Note: workflowSerdeSymbolPattern won't match here because the symbols\n // are referenced by identifier, not directly as Symbol.for()\n expect(workflowSerdeSymbolPattern.test(source)).toBe(false);\n });\n\n it('should detect file using direct Symbol.for', () => {\n const source = `\n export class Point {\n static [Symbol.for('workflow-serialize')](instance) {\n return { x: instance.x };\n }\n\n static [Symbol.for('workflow-deserialize')](data) {\n return new Point(data.x);\n }\n }\n `;\n expect(workflowSerdeImportPattern.test(source)).toBe(false);\n expect(workflowSerdeSymbolPattern.test(source)).toBe(true);\n });\n\n it('should detect file with both patterns', () => {\n // This would be unusual but valid\n const source = `\n import { WORKFLOW_SERIALIZE } from '@workflow/serde';\n\n export class Point {\n // Using imported symbol\n static [WORKFLOW_SERIALIZE](instance) {\n return { x: instance.x };\n }\n\n // Using direct Symbol.for\n static [Symbol.for('workflow-deserialize')](data) {\n return new Point(data.x);\n }\n }\n `;\n expect(workflowSerdeImportPattern.test(source)).toBe(true);\n expect(workflowSerdeSymbolPattern.test(source)).toBe(true);\n });\n });\n\n describe('workflowSerdeComputedPropertyPattern', () => {\n it('should match [WORKFLOW_SERIALIZE] computed property', () => {\n const source = `static [WORKFLOW_SERIALIZE](instance) {}`;\n expect(workflowSerdeComputedPropertyPattern.test(source)).toBe(true);\n });\n\n it('should match [WORKFLOW_DESERIALIZE] computed property', () => {\n const source = `static [WORKFLOW_DESERIALIZE](data) {}`;\n expect(workflowSerdeComputedPropertyPattern.test(source)).toBe(true);\n });\n\n it('should match with whitespace inside brackets', () => {\n expect(\n workflowSerdeComputedPropertyPattern.test(`[ WORKFLOW_SERIALIZE ]`)\n ).toBe(true);\n expect(\n workflowSerdeComputedPropertyPattern.test(`[ WORKFLOW_DESERIALIZE ]`)\n ).toBe(true);\n });\n\n it('should match in bundled code where symbols are imported from chunks', () => {\n // This is the pattern seen in bundled packages like just-bash\n const source = `\n import {\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE\n } from \"./chunks/chunk-453323QY.js\";\n\n var Bash = class _Bash {\n static [WORKFLOW_SERIALIZE](instance) {\n return { fs: instance.fs };\n }\n static [WORKFLOW_DESERIALIZE](serialized) {\n return Object.create(_Bash.prototype, {\n fs: { value: serialized.fs }\n });\n }\n };\n `;\n expect(workflowSerdeComputedPropertyPattern.test(source)).toBe(true);\n // Note: import pattern won't match because it's from a chunk, not @workflow/serde\n expect(workflowSerdeImportPattern.test(source)).toBe(false);\n });\n\n it('should not match partial names', () => {\n expect(\n workflowSerdeComputedPropertyPattern.test(`[WORKFLOW_SERIALIZE_EXTRA]`)\n ).toBe(false);\n expect(\n workflowSerdeComputedPropertyPattern.test(`[MY_WORKFLOW_SERIALIZE]`)\n ).toBe(false);\n });\n\n it('should not match string literals', () => {\n expect(\n workflowSerdeComputedPropertyPattern.test(`['WORKFLOW_SERIALIZE']`)\n ).toBe(false);\n expect(\n workflowSerdeComputedPropertyPattern.test(`[\"WORKFLOW_DESERIALIZE\"]`)\n ).toBe(false);\n });\n });\n\n describe('detectWorkflowPatterns', () => {\n it('should detect hasSerde for @workflow/serde import', () => {\n const source = `import { WORKFLOW_SERIALIZE } from '@workflow/serde';`;\n const result = detectWorkflowPatterns(source);\n expect(result.hasSerde).toBe(true);\n expect(result.hasSerdeImport).toBe(true);\n });\n\n it('should detect hasSerde for Symbol.for pattern', () => {\n const source = `static [Symbol.for('workflow-serialize')](instance) {}`;\n const result = detectWorkflowPatterns(source);\n expect(result.hasSerde).toBe(true);\n expect(result.hasSerdeSymbol).toBe(true);\n });\n\n it('should detect hasSerde for computed property pattern', () => {\n const source = `static [WORKFLOW_SERIALIZE](instance) {}`;\n const result = detectWorkflowPatterns(source);\n expect(result.hasSerde).toBe(true);\n });\n\n it('should detect hasSerde for bundled third-party packages', () => {\n // Simulates bundled output from packages like just-bash\n const source = `\n import {\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE\n } from \"./chunks/chunk-ABC123.js\";\n\n var MyClass = class {\n static [WORKFLOW_SERIALIZE](instance) {\n return { data: instance.data };\n }\n static [WORKFLOW_DESERIALIZE](serialized) {\n return new MyClass(serialized.data);\n }\n };\n `;\n const result = detectWorkflowPatterns(source);\n expect(result.hasSerde).toBe(true);\n });\n\n it('should not detect hasSerde for unrelated code', () => {\n const source = `\n export class RegularClass {\n constructor(value) {\n this.value = value;\n }\n }\n `;\n const result = detectWorkflowPatterns(source);\n expect(result.hasSerde).toBe(false);\n });\n\n it('should detect both directive and serde patterns', () => {\n const source = `\n 'use step';\n import { WORKFLOW_SERIALIZE } from '@workflow/serde';\n \n export class Point {\n static [WORKFLOW_SERIALIZE](instance) {\n return { x: instance.x };\n }\n }\n `;\n const result = detectWorkflowPatterns(source);\n expect(result.hasDirective).toBe(true);\n expect(result.hasUseStep).toBe(true);\n expect(result.hasSerde).toBe(true);\n });\n\n it('regexp detection matches directives inside template literals (false positive)', () => {\n // detectWorkflowPatterns uses regexp and will match directive-like\n // strings inside template literals. The discover-entries plugin\n // handles this by using the SWC plugin manifest (AST-level) for\n // directive discovery instead of relying on regexp alone.\n const source = `'use client';\nconst CODE_SNIPPET = \\`import { sleep } from \"workflow\";\n\nexport async function handleUserSignup(email: string) {\n \"use workflow\";\n const user = await createUser(email);\n}\n\\`;\nexport default function Page() { return null; }\n`;\n const result = detectWorkflowPatterns(source);\n expect(result.hasUseWorkflow).toBe(true);\n expect(result.hasDirective).toBe(true);\n });\n });\n\n describe('shouldTransformFile', () => {\n const noPatterns = {\n hasUseWorkflow: false,\n hasUseStep: false,\n hasSerdeImport: false,\n hasSerdeSymbol: false,\n hasDirective: false,\n hasSerde: false,\n };\n\n it('excludes generated workflow route files even with directives', () => {\n expect(\n shouldTransformFile('/app/.well-known/workflow/v1/route.ts', {\n ...noPatterns,\n hasUseWorkflow: true,\n hasDirective: true,\n })\n ).toBe(false);\n });\n\n it('transforms files with directive patterns', () => {\n expect(\n shouldTransformFile('/app/workflows/my-workflow.ts', {\n ...noPatterns,\n hasUseWorkflow: true,\n hasDirective: true,\n })\n ).toBe(true);\n });\n\n it('transforms files with serde patterns', () => {\n expect(\n shouldTransformFile('/app/lib/my-class.ts', {\n ...noPatterns,\n hasSerdeImport: true,\n hasSerde: true,\n })\n ).toBe(true);\n });\n\n it('transforms SDK files with serde patterns (no longer excluded)', () => {\n expect(\n shouldTransformFile(\n '/app/node_modules/@workflow/core/dist/serialization.js',\n { ...noPatterns, hasSerdeSymbol: true, hasSerde: true }\n )\n ).toBe(true);\n });\n\n it('does not transform files without directives or serde patterns', () => {\n expect(shouldTransformFile('/app/lib/utils.ts', noPatterns)).toBe(false);\n });\n });\n});\n"]}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,YAAY;IACZ,yBAAyB;IACzB,MAAM;IACN,MAAM;IACN,WAAW;IACX,OAAO;CACC,CAAC;AAwHX,MAAM,UAAU,kBAAkB,CAChC,MAA0B;IAE1B,OAAO,CAAC,CAAC,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAqB,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,YAAY;IACZ,yBAAyB;IACzB,MAAM;IACN,MAAM;IACN,WAAW;IACX,OAAO;CACC,CAAC;AAwHX,MAAM,UAAU,kBAAkB,CAChC,MAA0B;IAE1B,OAAO,CAAC,CAAC,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAqB,CAAC,CAAC;AACvE,CAAC","sourcesContent":["export const validBuildTargets = [\n 'standalone',\n 'vercel-build-output-api',\n 'next',\n 'nest',\n 'sveltekit',\n 'astro',\n] as const;\nexport type BuildTarget = (typeof validBuildTargets)[number];\n\n/**\n * Common configuration options shared across all builder types.\n */\ninterface BaseWorkflowConfig {\n watch?: boolean;\n dirs: string[];\n workingDir: string;\n /**\n * Project root used for package and workspace module-specifier resolution\n * during SWC transforms. Defaults to `workingDir`.\n */\n projectRoot?: string;\n\n // Optionally generate a client library for workflow execution. The preferred\n // method of using workflow is to use a loader within a framework (like\n // NextJS) that resolves client bindings on the fly.\n clientBundlePath?: string;\n\n externalPackages?: string[];\n\n workflowManifestPath?: string;\n\n // Optional prefix for debug files (e.g., \"_\" for Astro to ignore them)\n debugFilePrefix?: string;\n\n // Suppress informational logs emitted by createWorkflowsBundle()\n // (e.g. intermediate/final workflow bundle timing logs).\n suppressCreateWorkflowsBundleLogs?: boolean;\n\n // Suppress esbuild warnings emitted by createWorkflowsBundle().\n suppressCreateWorkflowsBundleWarnings?: boolean;\n\n // Suppress informational logs emitted by createWebhookBundle().\n suppressCreateWebhookBundleLogs?: boolean;\n\n // Suppress informational logs emitted by createManifest().\n suppressCreateManifestLogs?: boolean;\n\n // Node.js runtime version for Vercel Functions (e.g., \"nodejs22.x\", \"nodejs24.x\")\n runtime?: string;\n}\n\n/**\n * Configuration for standalone (CLI-based) builds.\n */\nexport interface StandaloneConfig extends BaseWorkflowConfig {\n buildTarget: 'standalone';\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n}\n\n/**\n * Configuration for Vercel Build Output API builds.\n */\nexport interface VercelBuildOutputConfig extends BaseWorkflowConfig {\n buildTarget: 'vercel-build-output-api';\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n}\n\n/**\n * Configuration for Next.js builds.\n */\nexport interface NextConfig extends BaseWorkflowConfig {\n buildTarget: 'next';\n // Next.js builder computes paths dynamically, so these are not used\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n}\n\n/**\n * Configuration for SvelteKit builds.\n */\nexport interface SvelteKitConfig extends BaseWorkflowConfig {\n buildTarget: 'sveltekit';\n // SvelteKit builder computes paths dynamically, so these are not used\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n}\n\n/**\n * Configuration for Astro builds.\n */\nexport interface AstroConfig extends BaseWorkflowConfig {\n buildTarget: 'astro';\n // Astro builder computes paths dynamically, so these are not used\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n}\n\n/**\n * Configuration for NestJS builds.\n */\nexport interface NestConfig extends BaseWorkflowConfig {\n buildTarget: 'nest';\n // NestJS builder computes paths dynamically, so these are not used\n stepsBundlePath: string;\n workflowsBundlePath: string;\n webhookBundlePath: string;\n}\n\n/**\n * Discriminated union of all builder configuration types.\n */\nexport type WorkflowConfig =\n | StandaloneConfig\n | VercelBuildOutputConfig\n | NextConfig\n | NestConfig\n | SvelteKitConfig\n | AstroConfig;\n\nexport function isValidBuildTarget(\n target: string | undefined\n): target is BuildTarget {\n return !!target && validBuildTargets.includes(target as BuildTarget);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAoDd,kBAAkB;YAgClB,sBAAsB;YA8BtB,oBAAoB;YAwBpB,uBAAuB;CA0BtC"}
1
+ {"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuDd,kBAAkB;YAiClB,sBAAsB;YA+BtB,oBAAoB;YAyBpB,uBAAuB;CA0BtC"}
@@ -27,7 +27,7 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
27
27
  classes: { ...stepsManifest.classes, ...workflowsManifest.classes },
28
28
  };
29
29
  // Generate unified manifest
30
- const workflowBundlePath = join(workflowGeneratedDir, 'flow.func/index.js');
30
+ const workflowBundlePath = join(workflowGeneratedDir, 'flow.func/index.mjs');
31
31
  const manifestJson = await this.createManifest({
32
32
  workflowBundlePath,
33
33
  manifestDir: workflowGeneratedDir,
@@ -49,12 +49,13 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
49
49
  // Create steps bundle
50
50
  const { manifest } = await this.createStepsBundle({
51
51
  inputFiles,
52
- outfile: join(stepsFuncDir, 'index.js'),
52
+ outfile: join(stepsFuncDir, 'index.mjs'),
53
53
  tsconfigPath,
54
54
  });
55
55
  // Create package.json and .vc-config.json for steps function
56
- await this.createPackageJson(stepsFuncDir, 'commonjs');
56
+ await this.createPackageJson(stepsFuncDir, 'module');
57
57
  await this.createVcConfig(stepsFuncDir, {
58
+ handler: 'index.mjs',
58
59
  shouldAddSourcemapSupport: true,
59
60
  maxDuration: 'max',
60
61
  experimentalTriggers: [STEP_QUEUE_TRIGGER],
@@ -67,13 +68,14 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
67
68
  const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');
68
69
  await mkdir(workflowsFuncDir, { recursive: true });
69
70
  const { manifest } = await this.createWorkflowsBundle({
70
- outfile: join(workflowsFuncDir, 'index.js'),
71
+ outfile: join(workflowsFuncDir, 'index.mjs'),
71
72
  inputFiles,
72
73
  tsconfigPath,
73
74
  });
74
75
  // Create package.json and .vc-config.json for workflows function
75
- await this.createPackageJson(workflowsFuncDir, 'commonjs');
76
+ await this.createPackageJson(workflowsFuncDir, 'module');
76
77
  await this.createVcConfig(workflowsFuncDir, {
78
+ handler: 'index.mjs',
77
79
  maxDuration: 'max',
78
80
  experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],
79
81
  runtime: this.config.runtime,
@@ -85,12 +87,13 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
85
87
  const webhookFuncDir = join(workflowGeneratedDir, 'webhook/[token].func');
86
88
  // Bundle the webhook route with dependencies resolved
87
89
  await this.createWebhookBundle({
88
- outfile: join(webhookFuncDir, 'index.js'),
90
+ outfile: join(webhookFuncDir, 'index.mjs'),
89
91
  bundle, // Build Output API needs bundling (except in tests)
90
92
  });
91
93
  // Create package.json and .vc-config.json for webhook function
92
- await this.createPackageJson(webhookFuncDir, 'commonjs');
94
+ await this.createPackageJson(webhookFuncDir, 'module');
93
95
  await this.createVcConfig(webhookFuncDir, {
96
+ handler: 'index.mjs',
94
97
  shouldAddHelpers: false,
95
98
  runtime: this.config.runtime,
96
99
  });
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-build-output-api.js","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vercel-build-output-api.js","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyFile, mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { BaseBuilder } from './base-builder.js';\nimport { STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER } from './constants.js';\n\nexport class VercelBuildOutputAPIBuilder extends BaseBuilder {\n async build(): Promise<void> {\n const outputDir = resolve(this.config.workingDir, '.vercel/output');\n const functionsDir = join(outputDir, 'functions');\n const workflowGeneratedDir = join(functionsDir, '.well-known/workflow/v1');\n\n // Ensure output directories exist\n await mkdir(workflowGeneratedDir, { recursive: true });\n\n const inputFiles = await this.getInputFiles();\n const tsconfigPath = await this.findTsConfigPath();\n const options = {\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n };\n const stepsManifest = await this.buildStepsFunction(options);\n const workflowsManifest = await this.buildWorkflowsFunction(options);\n await this.buildWebhookFunction(options);\n await this.createBuildOutputConfig(outputDir);\n\n // Merge manifests from both bundles\n const manifest = {\n steps: { ...stepsManifest.steps, ...workflowsManifest.steps },\n workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },\n classes: { ...stepsManifest.classes, ...workflowsManifest.classes },\n };\n\n // Generate unified manifest\n const workflowBundlePath = join(\n workflowGeneratedDir,\n 'flow.func/index.mjs'\n );\n const manifestJson = await this.createManifest({\n workflowBundlePath,\n manifestDir: workflowGeneratedDir,\n manifest,\n });\n\n // Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.\n // Vercel Build Output API serves static files from .vercel/output/static/\n if (this.shouldExposePublicManifest && manifestJson) {\n const staticManifestDir = join(\n outputDir,\n 'static/.well-known/workflow/v1'\n );\n await mkdir(staticManifestDir, { recursive: true });\n await copyFile(\n join(workflowGeneratedDir, 'manifest.json'),\n join(staticManifestDir, 'manifest.json')\n );\n }\n\n await this.createClientLibrary();\n }\n\n private async buildStepsFunction({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n console.log('Creating Vercel Build Output API steps function');\n const stepsFuncDir = join(workflowGeneratedDir, 'step.func');\n await mkdir(stepsFuncDir, { recursive: true });\n\n // Create steps bundle\n const { manifest } = await this.createStepsBundle({\n inputFiles,\n outfile: join(stepsFuncDir, 'index.mjs'),\n tsconfigPath,\n });\n\n // Create package.json and .vc-config.json for steps function\n await this.createPackageJson(stepsFuncDir, 'module');\n await this.createVcConfig(stepsFuncDir, {\n handler: 'index.mjs',\n shouldAddSourcemapSupport: true,\n maxDuration: 'max',\n experimentalTriggers: [STEP_QUEUE_TRIGGER],\n runtime: this.config.runtime,\n });\n\n return manifest;\n }\n\n private async buildWorkflowsFunction({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n console.log('Creating Vercel Build Output API workflows function');\n const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');\n await mkdir(workflowsFuncDir, { recursive: true });\n\n const { manifest } = await this.createWorkflowsBundle({\n outfile: join(workflowsFuncDir, 'index.mjs'),\n inputFiles,\n tsconfigPath,\n });\n\n // Create package.json and .vc-config.json for workflows function\n await this.createPackageJson(workflowsFuncDir, 'module');\n await this.createVcConfig(workflowsFuncDir, {\n handler: 'index.mjs',\n maxDuration: 'max',\n experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],\n runtime: this.config.runtime,\n });\n\n return manifest;\n }\n\n private async buildWebhookFunction({\n workflowGeneratedDir,\n bundle = true,\n }: {\n workflowGeneratedDir: string;\n bundle?: boolean;\n }): Promise<void> {\n console.log('Creating Vercel Build Output API webhook function');\n const webhookFuncDir = join(workflowGeneratedDir, 'webhook/[token].func');\n\n // Bundle the webhook route with dependencies resolved\n await this.createWebhookBundle({\n outfile: join(webhookFuncDir, 'index.mjs'),\n bundle, // Build Output API needs bundling (except in tests)\n });\n\n // Create package.json and .vc-config.json for webhook function\n await this.createPackageJson(webhookFuncDir, 'module');\n await this.createVcConfig(webhookFuncDir, {\n handler: 'index.mjs',\n shouldAddHelpers: false,\n runtime: this.config.runtime,\n });\n }\n\n private async createBuildOutputConfig(outputDir: string): Promise<void> {\n // Create config.json for Build Output API\n const buildOutputConfig = {\n version: 3,\n routes: [\n {\n src: '^\\\\/\\\\.well-known\\\\/workflow\\\\/v1\\\\/webhook\\\\/([^\\\\/]+)$',\n dest: '/.well-known/workflow/v1/webhook/[token]',\n },\n ],\n };\n\n await writeFile(\n join(outputDir, 'config.json'),\n JSON.stringify(buildOutputConfig, null, 2)\n );\n\n console.log(`Build Output API created at ${outputDir}`);\n console.log('Steps function available at /.well-known/workflow/v1/step');\n console.log(\n 'Workflows function available at /.well-known/workflow/v1/flow'\n );\n console.log(\n 'Webhook function available at /.well-known/workflow/v1/webhook/[token]'\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-alias.js","sourceRoot":"","sources":["../src/workflow-alias.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-alias.js","sourceRoot":"","sources":["../src/workflow-alias.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, realpath } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\nconst workflowAliasResolutionCache = new Map<\n string,\n Promise<string | undefined>\n>();\n\nconst WORKFLOW_ALIAS_ROOTS = [\n 'src/workflows',\n 'workflows',\n 'src/app',\n 'app',\n 'src/pages',\n 'pages',\n] as const;\n\nfunction getAliasRelativePathCandidates(\n normalizedAbsolutePath: string\n): string[] {\n const candidates = new Set<string>();\n for (const aliasRoot of WORKFLOW_ALIAS_ROOTS) {\n const marker = `/${aliasRoot}/`;\n const markerIndex = normalizedAbsolutePath.lastIndexOf(marker);\n if (markerIndex === -1) {\n continue;\n }\n candidates.add(normalizedAbsolutePath.slice(markerIndex + 1));\n }\n return Array.from(candidates);\n}\n\nexport function clearWorkflowAliasResolutionCache(): void {\n workflowAliasResolutionCache.clear();\n}\n\nexport async function resolveWorkflowAliasRelativePath(\n absoluteFilePath: string,\n workingDir: string\n): Promise<string | undefined> {\n const normalizedAbsolutePath = absoluteFilePath.replace(/\\\\/g, '/');\n\n const cacheKey = `${workingDir}::${normalizedAbsolutePath}`;\n const cached = workflowAliasResolutionCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const resolutionPromise = (async () => {\n const resolvedFilePath = await realpath(absoluteFilePath).catch(\n () => undefined\n );\n if (!resolvedFilePath) {\n return undefined;\n }\n const normalizedResolvedFilePath = resolvedFilePath.replace(/\\\\/g, '/');\n const aliasCandidates = getAliasRelativePathCandidates(\n normalizedAbsolutePath\n );\n if (aliasCandidates.length === 0) {\n return undefined;\n }\n\n for (const aliasRelativePath of aliasCandidates) {\n const candidatePath = resolve(workingDir, aliasRelativePath);\n try {\n await access(candidatePath);\n } catch {\n continue;\n }\n const resolvedCandidatePath = await realpath(candidatePath).catch(\n () => undefined\n );\n if (!resolvedCandidatePath) {\n continue;\n }\n if (\n resolvedCandidatePath.replace(/\\\\/g, '/') === normalizedResolvedFilePath\n ) {\n return aliasRelativePath;\n }\n }\n return undefined;\n })();\n\n workflowAliasResolutionCache.set(cacheKey, resolutionPromise);\n return resolutionPromise;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-alias.test.js","sourceRoot":"","sources":["../src/workflow-alias.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-alias.test.js","sourceRoot":"","sources":["../src/workflow-alias.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n mkdtempSync,\n mkdirSync,\n rmSync,\n symlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport { afterEach, beforeEach, describe, expect, it } from 'vitest';\nimport {\n clearWorkflowAliasResolutionCache,\n resolveWorkflowAliasRelativePath,\n} from './workflow-alias.js';\n\nfunction writeFile(path: string): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, \"'use workflow';\\n\", 'utf-8');\n}\n\ndescribe('resolveWorkflowAliasRelativePath', () => {\n let testRoot: string;\n let workingDir: string;\n\n beforeEach(() => {\n clearWorkflowAliasResolutionCache();\n testRoot = mkdtempSync(join(tmpdir(), 'workflow-alias-'));\n workingDir = join(testRoot, 'project');\n mkdirSync(workingDir, { recursive: true });\n });\n\n afterEach(() => {\n clearWorkflowAliasResolutionCache();\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n it('maps files in workflows/ to workflows/* aliases', async () => {\n const filePath = join(workingDir, 'workflows', 'foo.ts');\n writeFile(filePath);\n\n await expect(\n resolveWorkflowAliasRelativePath(filePath, workingDir)\n ).resolves.toBe('workflows/foo.ts');\n });\n\n it('maps files in src/workflows/ to src/workflows/* aliases', async () => {\n const filePath = join(workingDir, 'src', 'workflows', 'foo.ts');\n writeFile(filePath);\n\n await expect(\n resolveWorkflowAliasRelativePath(filePath, workingDir)\n ).resolves.toBe('src/workflows/foo.ts');\n });\n\n it('returns undefined for files that are not under workflows paths', async () => {\n const filePath = join(workingDir, 'lib', 'foo.ts');\n writeFile(filePath);\n\n await expect(\n resolveWorkflowAliasRelativePath(filePath, workingDir)\n ).resolves.toBeUndefined();\n });\n\n it('returns undefined when basename matches but realpath differs', async () => {\n const workflowFilePath = join(workingDir, 'workflows', 'foo.ts');\n const externalFilePath = join(testRoot, 'external', 'workflows', 'foo.ts');\n writeFile(workflowFilePath);\n writeFile(externalFilePath);\n\n await expect(\n resolveWorkflowAliasRelativePath(externalFilePath, workingDir)\n ).resolves.toBeUndefined();\n });\n\n it('maps symlinked app files to app/* aliases', async () => {\n const externalAppDir = join(testRoot, 'external', 'app');\n const externalFilePath = join(\n externalAppDir,\n '.well-known',\n 'agent',\n 'v1',\n 'steps.ts'\n );\n writeFile(externalFilePath);\n\n symlinkSync(\n externalAppDir,\n join(workingDir, 'app'),\n process.platform === 'win32' ? 'junction' : 'dir'\n );\n\n await expect(\n resolveWorkflowAliasRelativePath(externalFilePath, workingDir)\n ).resolves.toBe('app/.well-known/agent/v1/steps.ts');\n });\n});\n"]}