@workflow/builders 5.0.0-beta.4 → 5.0.0-beta.41

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 (123) hide show
  1. package/README.md +26 -0
  2. package/dist/apply-swc-transform.d.ts +7 -2
  3. package/dist/apply-swc-transform.d.ts.map +1 -1
  4. package/dist/apply-swc-transform.js +10 -4
  5. package/dist/base-builder-logging.test.d.ts +2 -0
  6. package/dist/base-builder-logging.test.d.ts.map +1 -0
  7. package/dist/base-builder-logging.test.js +99 -0
  8. package/dist/base-builder.d.ts +132 -13
  9. package/dist/base-builder.d.ts.map +1 -1
  10. package/dist/base-builder.js +788 -92
  11. package/dist/build-queue.js +1 -1
  12. package/dist/config-helpers.d.ts +4 -1
  13. package/dist/config-helpers.d.ts.map +1 -1
  14. package/dist/config-helpers.js +63 -1
  15. package/dist/config-helpers.test.d.ts +2 -0
  16. package/dist/config-helpers.test.d.ts.map +1 -0
  17. package/dist/config-helpers.test.js +17 -0
  18. package/dist/constants.d.ts +66 -5
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +106 -19
  21. package/dist/constants.test.d.ts +2 -0
  22. package/dist/constants.test.d.ts.map +1 -0
  23. package/dist/constants.test.js +90 -0
  24. package/dist/discover-entries-esbuild-plugin.d.ts +3 -1
  25. package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
  26. package/dist/discover-entries-esbuild-plugin.js +24 -4
  27. package/dist/discover-entries-esbuild-plugin.test.js +1 -1
  28. package/dist/esbuild-tsconfig.js +1 -1
  29. package/dist/esbuild-tsconfig.test.js +1 -1
  30. package/dist/external-package-warning.test.d.ts +2 -0
  31. package/dist/external-package-warning.test.d.ts.map +1 -0
  32. package/dist/external-package-warning.test.js +219 -0
  33. package/dist/fast-discovery.d.ts +29 -0
  34. package/dist/fast-discovery.d.ts.map +1 -0
  35. package/dist/fast-discovery.js +771 -0
  36. package/dist/fast-discovery.test.d.ts +2 -0
  37. package/dist/fast-discovery.test.d.ts.map +1 -0
  38. package/dist/fast-discovery.test.js +453 -0
  39. package/dist/get-input-files.test.js +34 -2
  40. package/dist/index.d.ts +7 -4
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +8 -5
  43. package/dist/module-specifier.d.ts +20 -2
  44. package/dist/module-specifier.d.ts.map +1 -1
  45. package/dist/module-specifier.js +92 -17
  46. package/dist/module-specifier.test.js +45 -3
  47. package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
  48. package/dist/node-module-esbuild-plugin.js +73 -23
  49. package/dist/node-module-esbuild-plugin.test.js +97 -1
  50. package/dist/optional-otel-api.d.ts +14 -0
  51. package/dist/optional-otel-api.d.ts.map +1 -0
  52. package/dist/optional-otel-api.js +14 -0
  53. package/dist/optional-typescript-alias.d.ts +2 -0
  54. package/dist/optional-typescript-alias.d.ts.map +1 -0
  55. package/dist/optional-typescript-alias.js +3 -0
  56. package/dist/optional-typescript.d.ts +3 -0
  57. package/dist/optional-typescript.d.ts.map +1 -0
  58. package/dist/optional-typescript.js +9 -0
  59. package/dist/optional-ws-native.d.ts +30 -0
  60. package/dist/optional-ws-native.d.ts.map +1 -0
  61. package/dist/optional-ws-native.js +33 -0
  62. package/dist/pseudo-package-esbuild-plugin.js +1 -1
  63. package/dist/pseudo-package-esbuild-plugin.test.js +1 -1
  64. package/dist/request-converter.js +1 -1
  65. package/dist/resolve-sourcemap.test.d.ts +2 -0
  66. package/dist/resolve-sourcemap.test.d.ts.map +1 -0
  67. package/dist/resolve-sourcemap.test.js +194 -0
  68. package/dist/serde-checker.js +1 -1
  69. package/dist/standalone.d.ts +0 -3
  70. package/dist/standalone.d.ts.map +1 -1
  71. package/dist/standalone.js +17 -41
  72. package/dist/step-source-registration.test.d.ts +2 -0
  73. package/dist/step-source-registration.test.d.ts.map +1 -0
  74. package/dist/step-source-registration.test.js +82 -0
  75. package/dist/swc-esbuild-plugin.d.ts +26 -0
  76. package/dist/swc-esbuild-plugin.d.ts.map +1 -1
  77. package/dist/swc-esbuild-plugin.js +124 -14
  78. package/dist/swc-esbuild-plugin.test.js +475 -6
  79. package/dist/transform-utils.d.ts.map +1 -1
  80. package/dist/transform-utils.js +45 -6
  81. package/dist/transform-utils.test.js +78 -6
  82. package/dist/types.d.ts +73 -2
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/types.js +1 -1
  85. package/dist/vercel-build-output-api.d.ts +0 -2
  86. package/dist/vercel-build-output-api.d.ts.map +1 -1
  87. package/dist/vercel-build-output-api.js +37 -60
  88. package/dist/workflow-alias.js +1 -1
  89. package/dist/workflow-alias.test.js +2 -2
  90. package/dist/workflows-extractor.js +8 -3
  91. package/dist/workflows-extractor.test.d.ts +2 -0
  92. package/dist/workflows-extractor.test.d.ts.map +1 -0
  93. package/dist/workflows-extractor.test.js +70 -0
  94. package/package.json +8 -7
  95. package/dist/apply-swc-transform.js.map +0 -1
  96. package/dist/base-builder.js.map +0 -1
  97. package/dist/build-queue.js.map +0 -1
  98. package/dist/config-helpers.js.map +0 -1
  99. package/dist/constants.js.map +0 -1
  100. package/dist/discover-entries-esbuild-plugin.js.map +0 -1
  101. package/dist/discover-entries-esbuild-plugin.test.js.map +0 -1
  102. package/dist/esbuild-tsconfig.js.map +0 -1
  103. package/dist/esbuild-tsconfig.test.js.map +0 -1
  104. package/dist/get-input-files.test.js.map +0 -1
  105. package/dist/index.js.map +0 -1
  106. package/dist/module-specifier.js.map +0 -1
  107. package/dist/module-specifier.test.js.map +0 -1
  108. package/dist/node-module-esbuild-plugin.js.map +0 -1
  109. package/dist/node-module-esbuild-plugin.test.js.map +0 -1
  110. package/dist/pseudo-package-esbuild-plugin.js.map +0 -1
  111. package/dist/pseudo-package-esbuild-plugin.test.js.map +0 -1
  112. package/dist/request-converter.js.map +0 -1
  113. package/dist/serde-checker.js.map +0 -1
  114. package/dist/standalone.js.map +0 -1
  115. package/dist/swc-esbuild-plugin.js.map +0 -1
  116. package/dist/swc-esbuild-plugin.test.js.map +0 -1
  117. package/dist/transform-utils.js.map +0 -1
  118. package/dist/transform-utils.test.js.map +0 -1
  119. package/dist/types.js.map +0 -1
  120. package/dist/vercel-build-output-api.js.map +0 -1
  121. package/dist/workflow-alias.js.map +0 -1
  122. package/dist/workflow-alias.test.js.map +0 -1
  123. package/dist/workflows-extractor.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-builder.js","sourceRoot":"","sources":["../src/base-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { mkdir, readFile, realpath, rename, writeFile } from 'node:fs/promises';\nimport { basename, dirname, join, relative, resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport { pluralize } from '@workflow/utils';\nimport chalk from 'chalk';\nimport enhancedResolveOriginal from 'enhanced-resolve';\nimport * as esbuild from 'esbuild';\nimport { findUp } from 'find-up';\nimport { glob } from 'tinyglobby';\nimport {\n applySwcTransform,\n type WorkflowManifest,\n} from './apply-swc-transform.js';\nimport { createDiscoverEntriesPlugin } from './discover-entries-esbuild-plugin.js';\nimport { getEsbuildTsconfigOptions } from './esbuild-tsconfig.js';\nimport { getImportPath } from './module-specifier.js';\nimport { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js';\nimport { createPseudoPackagePlugin } from './pseudo-package-esbuild-plugin.js';\nimport { createSwcPlugin } from './swc-esbuild-plugin.js';\nimport type { WorkflowConfig } from './types.js';\nimport { extractWorkflowGraphs } from './workflows-extractor.js';\n\nconst enhancedResolve = promisify(enhancedResolveOriginal);\n\nconst EMIT_SOURCEMAPS_FOR_DEBUGGING =\n process.env.WORKFLOW_EMIT_SOURCEMAPS_FOR_DEBUGGING === '1';\n\n/**\n * Normalize an array of file paths by appending the `realpath()` of each entry\n * (to handle symlinks, e.g. pnpm/workspace layouts) and deduplicating.\n */\nasync function withRealpaths(entries: string[]): Promise<string[]> {\n return Array.from(\n new Set(\n (\n await Promise.all(\n entries.map(async (entry) => {\n const resolved = await realpath(entry).catch(() => undefined);\n return resolved ? [entry, resolved] : [entry];\n })\n )\n ).flat()\n )\n );\n}\n\nexport interface DiscoveredEntries {\n discoveredSteps: Set<string>;\n discoveredWorkflows: Set<string>;\n discoveredSerdeFiles: Set<string>;\n}\n\n/**\n * Base class for workflow builders. Provides common build logic for transforming\n * workflow source files into deployable bundles using esbuild and SWC.\n *\n * Subclasses must implement the build() method to define builder-specific logic.\n */\nexport abstract class BaseBuilder {\n protected config: WorkflowConfig;\n\n constructor(config: WorkflowConfig) {\n this.config = config;\n }\n\n protected get transformProjectRoot(): string {\n return this.config.projectRoot || this.config.workingDir;\n }\n\n /**\n * Whether informational BaseBuilder logs should be printed.\n * Subclasses can override this to silence progress logs while keeping warnings/errors.\n */\n protected get shouldLogBaseBuilderInfo(): boolean {\n return true;\n }\n\n protected logBaseBuilderInfo(...args: unknown[]): void {\n if (this.shouldLogBaseBuilderInfo) {\n console.log(...args);\n }\n }\n\n private logCreateWorkflowsBundleInfo(...args: unknown[]): void {\n if (!this.config.suppressCreateWorkflowsBundleLogs) {\n this.logBaseBuilderInfo(...args);\n }\n }\n\n private logCreateWebhookBundleInfo(...args: unknown[]): void {\n if (!this.config.suppressCreateWebhookBundleLogs) {\n this.logBaseBuilderInfo(...args);\n }\n }\n\n private logCreateManifestInfo(...args: unknown[]): void {\n if (!this.config.suppressCreateManifestLogs) {\n this.logBaseBuilderInfo(...args);\n }\n }\n\n /**\n * When outputting CJS, esbuild replaces `import.meta` with an empty object,\n * making `import.meta.url` (and `import.meta.resolve`) undefined. This method\n * returns banner code and `define` entries that polyfill them using CJS\n * equivalents (`__filename`, `require.resolve`) so user code (e.g. Prisma)\n * that relies on `import.meta.url` works correctly in bundled CJS output.\n */\n private getCjsImportMetaPolyfill(format: string): {\n banner: string;\n define: Record<string, string>;\n } {\n if (format !== 'cjs') return { banner: '', define: {} };\n return {\n banner:\n 'var __import_meta_url = typeof __filename !== \"undefined\" ? require(\"url\").pathToFileURL(__filename).href : undefined;\\n' +\n 'var __import_meta_resolve = typeof require !== \"undefined\" && typeof __filename !== \"undefined\" ' +\n '? (s) => require(\"url\").pathToFileURL(require.resolve(s)).href : undefined;\\n',\n define: {\n 'import.meta.url': '__import_meta_url',\n 'import.meta.resolve': '__import_meta_resolve',\n },\n };\n }\n\n /**\n * When outputting fully-bundled ESM, CJS dependencies that call require()\n * for Node.js builtins (e.g. debug → require('tty')) break because esbuild's\n * CJS-to-ESM __require shim doesn't have access to a real require function.\n * This banner provides one via createRequire so bundled CJS code works in ESM.\n */\n private getEsmRequireBanner(format: string): string {\n if (format !== 'esm') return '';\n return 'import { createRequire as __createRequire } from \"node:module\";\\nvar require = __createRequire(import.meta.url);\\n';\n }\n\n /**\n * Performs the complete build process for workflows.\n * Subclasses must implement this to define their specific build steps.\n */\n abstract build(): Promise<void>;\n\n /**\n * Finds tsconfig.json/jsconfig.json for the project.\n * Used by esbuild to properly resolve module imports during bundling.\n */\n protected async findTsConfigPath(): Promise<string | undefined> {\n const cwd = this.config.workingDir || process.cwd();\n return findUp(['tsconfig.json', 'jsconfig.json'], { cwd });\n }\n\n /**\n * Discovers all source files in the configured directories.\n * Searches for TypeScript and JavaScript files while excluding common build\n * and dependency directories.\n */\n protected async getInputFiles(): Promise<string[]> {\n const ignore = [\n '**/node_modules/**',\n '**/.git/**',\n '**/.next/**',\n '**/.nuxt/**',\n '**/.output/**',\n '**/.vercel/**',\n '**/.workflow-data/**',\n '**/.workflow-vitest/**',\n '**/.well-known/workflow/**',\n '**/.svelte-kit/**',\n '**/.turbo/**',\n '**/.cache/**',\n '**/.yarn/**',\n '**/.pnpm-store/**',\n ];\n\n // Use relative patterns with `cwd` per directory so that `dot: true`\n // applies consistently to both the search pattern *and* the ignore\n // patterns. When absolute patterns are used with tinyglobby, the `**`\n // in ignore patterns does not match dot-prefixed path segments.\n const results = await Promise.all(\n this.config.dirs.map((dir) => {\n const cwd = resolve(this.config.workingDir, dir);\n return glob(['**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}'], {\n cwd,\n ignore,\n absolute: true,\n dot: true,\n });\n })\n );\n\n return results.flat();\n }\n\n /**\n * Caches discovered workflow entries by input array reference.\n * Uses WeakMap to allow garbage collection when input arrays are no longer referenced.\n * This cache is invalidated automatically when the inputs array reference changes\n * (e.g., when files are added/removed during watch mode).\n */\n private discoveredEntries: WeakMap<string[], DiscoveredEntries> =\n new WeakMap();\n\n protected async discoverEntries(\n inputs: string[],\n outdir: string,\n tsconfigPath?: string\n ): Promise<DiscoveredEntries> {\n const previousResult = this.discoveredEntries.get(inputs);\n\n if (previousResult) {\n return previousResult;\n }\n const state: DiscoveredEntries = {\n discoveredSteps: new Set(),\n discoveredWorkflows: new Set(),\n discoveredSerdeFiles: new Set(),\n };\n\n const discoverStart = Date.now();\n\n // Resolve the SDK runtime entry point so that the discovery pass\n // traces through it and discovers serde classes (like `Run`) that\n // live inside SDK packages. Without this, files like `run.js` are\n // only discovered when user code happens to import them.\n // This is resolved here (rather than in callers) so that the original\n // `inputs` array reference is preserved for WeakMap caching — callers\n // like createWorkflowsBundle and createStepsBundle can share the same\n // cache entry when they pass the same inputFiles array.\n const resolvedWorkflowRuntime = await enhancedResolve(\n outdir,\n 'workflow/runtime'\n ).catch(() => undefined);\n const entryPoints = resolvedWorkflowRuntime\n ? [...inputs, resolvedWorkflowRuntime]\n : inputs;\n\n const effectiveTsconfigPath =\n tsconfigPath ?? (await this.findTsConfigPath());\n const esbuildTsconfigOptions = await getEsbuildTsconfigOptions(\n effectiveTsconfigPath\n );\n try {\n await esbuild.build({\n treeShaking: true,\n entryPoints,\n plugins: [\n createDiscoverEntriesPlugin(state, this.transformProjectRoot),\n ],\n platform: 'node',\n write: false,\n outdir,\n bundle: true,\n sourcemap: false,\n absWorkingDir: this.config.workingDir,\n logLevel: 'silent',\n ...esbuildTsconfigOptions,\n // External packages that should not be bundled during discovery\n external: this.config.externalPackages || [],\n });\n } catch (_) {}\n\n this.logBaseBuilderInfo(\n `Discovering workflow directives`,\n `${Date.now() - discoverStart}ms`\n );\n\n this.discoveredEntries.set(inputs, state);\n return state;\n }\n\n /**\n * Writes debug information to a JSON file for troubleshooting build issues.\n * Uses atomic write (temp file + rename) to prevent race conditions when\n * multiple builds run concurrently.\n */\n private async writeDebugFile(\n outfile: string,\n debugData: object,\n merge?: boolean\n ): Promise<void> {\n const prefix = this.config.debugFilePrefix || '';\n const targetPath = `${dirname(outfile)}/${prefix}${basename(outfile)}.debug.json`;\n let existing = {};\n\n try {\n if (merge) {\n try {\n const content = await readFile(targetPath, 'utf8');\n existing = JSON.parse(content);\n } catch (e) {\n // File doesn't exist yet or is corrupted - start fresh.\n // Don't log error for ENOENT (file not found) as that's expected on first run.\n if ((e as NodeJS.ErrnoException).code !== 'ENOENT') {\n console.warn('Error reading debug file, starting fresh:', e);\n }\n }\n }\n\n const mergedData = JSON.stringify(\n {\n ...existing,\n ...debugData,\n },\n null,\n 2\n );\n\n // Write atomically: write to temp file, then rename.\n // rename() is atomic on POSIX systems and provides best-effort atomicity on Windows.\n // Prevents race conditions where concurrent builds read partially-written files.\n const tempPath = `${targetPath}.${randomUUID()}.tmp`;\n await writeFile(tempPath, mergedData);\n await rename(tempPath, targetPath);\n } catch (error: unknown) {\n console.warn('Failed to write debug file:', error);\n }\n }\n\n /**\n * Logs and optionally throws on esbuild errors and warnings.\n * @param throwOnError - If true, throws an error when esbuild errors are present\n */\n private logEsbuildMessages(\n result: { errors?: any[]; warnings?: any[] },\n phase: string,\n throwOnError = true,\n options?: {\n suppressWarnings?: boolean;\n }\n ): void {\n if (result.errors && result.errors.length > 0) {\n console.error(`❌ esbuild errors in ${phase}:`);\n const errorMessages: string[] = [];\n for (const error of result.errors) {\n console.error(` ${error.text}`);\n errorMessages.push(error.text);\n if (error.location) {\n const location = ` at ${error.location.file}:${error.location.line}:${error.location.column}`;\n console.error(location);\n errorMessages.push(location);\n }\n }\n\n if (throwOnError) {\n throw new Error(\n `Build failed during ${phase}:\\n${errorMessages.join('\\n')}`\n );\n }\n }\n\n if (\n !options?.suppressWarnings &&\n result.warnings &&\n result.warnings.length > 0\n ) {\n console.warn(`! esbuild warnings in ${phase}:`);\n for (const warning of result.warnings) {\n console.warn(` ${warning.text}`);\n if (warning.location) {\n console.warn(\n ` at ${warning.location.file}:${warning.location.line}:${warning.location.column}`\n );\n }\n }\n }\n }\n\n /**\n * Converts an absolute file path to a normalized relative path for the manifest.\n */\n private getRelativeFilepath(absolutePath: string): string {\n const normalizedFile = absolutePath.replace(/\\\\/g, '/');\n const normalizedWorkingDir = this.config.workingDir.replace(/\\\\/g, '/');\n let relativePath = relative(normalizedWorkingDir, normalizedFile).replace(\n /\\\\/g,\n '/'\n );\n // Handle files discovered outside the working directory\n if (relativePath.startsWith('../')) {\n relativePath = relativePath\n .split('/')\n .filter((part) => part !== '..')\n .join('/');\n }\n return relativePath;\n }\n\n /**\n * Creates a bundle for workflow step functions.\n * Steps have full Node.js runtime access and handle side effects, API calls, etc.\n *\n * @param externalizeNonSteps - If true, only bundles step entry points and externalizes other code\n * @returns Build context (for watch mode) and the collected workflow manifest\n */\n protected async createStepsBundle({\n inputFiles,\n format = 'esm',\n outfile,\n externalizeNonSteps,\n rewriteTsExtensions,\n tsconfigPath,\n discoveredEntries,\n }: {\n tsconfigPath?: string;\n inputFiles: string[];\n outfile: string;\n format?: 'cjs' | 'esm';\n externalizeNonSteps?: boolean;\n rewriteTsExtensions?: boolean;\n discoveredEntries?: DiscoveredEntries;\n }): Promise<{\n context: esbuild.BuildContext | undefined;\n manifest: WorkflowManifest;\n }> {\n const stepsBundleStart = Date.now();\n const workflowManifest: WorkflowManifest = {};\n const builtInSteps = 'workflow/internal/builtins';\n\n const resolvedBuiltInSteps = await enhancedResolve(\n dirname(outfile),\n 'workflow/internal/builtins'\n ).catch((err) => {\n throw new Error(\n [\n chalk.red('Failed to resolve built-in steps sources.'),\n `${chalk.yellow.bold('hint:')} run \\`${chalk.cyan.italic('npm install workflow')}\\` to resolve this issue.`,\n '',\n `Caused by: ${chalk.red(String(err))}`,\n ].join('\\n')\n );\n });\n\n // Discovery of workflow/step/serde entries. The SDK runtime entry point\n // (workflow/runtime) is resolved inside discoverEntries() itself so that\n // callers can pass the original inputFiles reference and benefit from\n // WeakMap caching across createWorkflowsBundle / createStepsBundle calls.\n const discovered =\n discoveredEntries ??\n (await this.discoverEntries(inputFiles, dirname(outfile), tsconfigPath));\n const stepFiles = [...discovered.discoveredSteps].sort();\n const workflowFiles = [...discovered.discoveredWorkflows].sort();\n const serdeFiles = [...discovered.discoveredSerdeFiles].sort();\n\n // Include serde files that aren't already step files for cross-context class registration.\n // Classes need to be registered in the step bundle so they can be deserialized\n // when receiving data from workflows and serialized when returning data to workflows.\n const stepFilesSet = new Set(stepFiles);\n const serdeOnlyFiles = serdeFiles.filter((f) => !stepFilesSet.has(f));\n\n // log the step files for debugging\n await this.writeDebugFile(outfile, {\n stepFiles,\n workflowFiles,\n serdeOnlyFiles,\n });\n\n // Helper to create import statement from file path\n // For workspace/node_modules packages, uses the package name so esbuild\n // will resolve through package.json exports with the appropriate conditions\n const createImport = (file: string) => {\n const { importPath, isPackage } = getImportPath(\n file,\n this.config.workingDir\n );\n\n if (isPackage) {\n // Use package name - esbuild will resolve via package.json exports\n return `import '${importPath}';`;\n }\n\n // Local app file - use relative path\n // Normalize both paths to forward slashes before calling relative()\n // This is critical on Windows where relative() can produce unexpected results with mixed path formats\n const normalizedWorkingDir = this.config.workingDir.replace(/\\\\/g, '/');\n const normalizedFile = file.replace(/\\\\/g, '/');\n // Calculate relative path from working directory to the file\n let relativePath = relative(normalizedWorkingDir, normalizedFile).replace(\n /\\\\/g,\n '/'\n );\n // Ensure relative paths start with ./ so esbuild resolves them correctly.\n // Paths like \".output/...\" are not valid relative specifiers and must\n // become \"./.output/...\".\n if (!relativePath.startsWith('./') && !relativePath.startsWith('../')) {\n relativePath = `./${relativePath}`;\n }\n return `import '${relativePath}';`;\n };\n\n // Create a virtual entry that imports all files. All step definitions\n // will get registered thanks to the swc transform.\n const stepImports = stepFiles.map(createImport).join('\\n');\n\n // Include serde-only files for class registration side effects\n const serdeImports = serdeOnlyFiles.map(createImport).join('\\n');\n\n const entryContent = `\n // Built in steps\n import '${builtInSteps}';\n // User steps\n ${stepImports}\n // Serde files for cross-context class registration\n ${serdeImports}\n // API entrypoint\n export { stepEntrypoint as POST } from 'workflow/runtime';`;\n\n // Bundle with esbuild and our custom SWC plugin\n const entriesToBundle = externalizeNonSteps\n ? [\n ...stepFiles,\n ...serdeFiles,\n ...(resolvedBuiltInSteps ? [resolvedBuiltInSteps] : []),\n ]\n : undefined;\n const normalizedEntriesToBundle = entriesToBundle\n ? await withRealpaths(entriesToBundle)\n : undefined;\n const normalizedSideEffectEntries = await withRealpaths([\n ...stepFiles,\n ...serdeOnlyFiles,\n ...(resolvedBuiltInSteps ? [resolvedBuiltInSteps] : []),\n ]);\n const esbuildTsconfigOptions =\n await getEsbuildTsconfigOptions(tsconfigPath);\n const { banner: importMetaBanner, define: importMetaDefine } =\n this.getCjsImportMetaPolyfill(format);\n const esmRequireBanner = this.getEsmRequireBanner(format);\n\n const esbuildCtx = await esbuild.context({\n banner: {\n js: `// biome-ignore-all lint: generated file\\n/* eslint-disable */\\n${importMetaBanner}${esmRequireBanner}`,\n },\n stdin: {\n contents: entryContent,\n resolveDir: this.config.workingDir,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n outfile,\n absWorkingDir: this.config.workingDir,\n bundle: true,\n format,\n platform: 'node',\n conditions: ['node'],\n target: 'es2022',\n write: true,\n treeShaking: true,\n keepNames: true,\n minify: false,\n jsx: 'preserve',\n logLevel: 'error',\n // Use tsconfig for path alias resolution.\n // For symlinked configs this uses tsconfigRaw to preserve cwd-relative aliases.\n ...esbuildTsconfigOptions,\n define: importMetaDefine,\n resolveExtensions: [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n ],\n // Inline source maps for better stack traces in step execution.\n // Steps execute in Node.js context and inline sourcemaps ensure we get\n // meaningful stack traces with proper file names and line numbers when errors\n // occur in deeply nested function calls across multiple files.\n sourcemap: 'inline',\n plugins: [\n // Handle pseudo-packages like 'server-only' and 'client-only' by providing\n // empty modules. Must run first to intercept these before other resolution.\n createPseudoPackagePlugin(),\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: normalizedEntriesToBundle,\n outdir: outfile ? dirname(outfile) : undefined,\n projectRoot: this.transformProjectRoot,\n workflowManifest,\n rewriteTsExtensions,\n sideEffectEntries: normalizedSideEffectEntries,\n }),\n ],\n // Plugin should catch most things, but this lets users hard override\n // if the plugin misses anything that should be externalized\n external: ['bun', 'bun:*', ...(this.config.externalPackages || [])],\n });\n\n const stepsResult = await esbuildCtx.rebuild();\n\n this.logEsbuildMessages(stepsResult, 'steps bundle creation');\n this.logBaseBuilderInfo(\n 'Created steps bundle',\n `${Date.now() - stepsBundleStart}ms`\n );\n\n // Handle workflow-only files that may have been tree-shaken from the bundle.\n // These files have no steps, so esbuild removes them, but we still need their\n // workflow metadata for the manifest. Transform them separately.\n const workflowOnlyFiles = workflowFiles.filter(\n (f) => !stepFiles.includes(f)\n );\n await Promise.all(\n workflowOnlyFiles.map(async (workflowFile) => {\n try {\n const source = await readFile(workflowFile, 'utf8');\n const relativeFilepath = this.getRelativeFilepath(workflowFile);\n const { workflowManifest: fileManifest } = await applySwcTransform(\n relativeFilepath,\n source,\n 'workflow',\n workflowFile,\n this.transformProjectRoot\n );\n if (fileManifest.workflows) {\n workflowManifest.workflows = Object.assign(\n workflowManifest.workflows || {},\n fileManifest.workflows\n );\n }\n if (fileManifest.classes) {\n workflowManifest.classes = Object.assign(\n workflowManifest.classes || {},\n fileManifest.classes\n );\n }\n } catch (error) {\n // Log warning but continue - don't fail build for workflow-only file issues\n console.warn(\n `Warning: Failed to extract workflow metadata from ${workflowFile}:`,\n error instanceof Error ? error.message : String(error)\n );\n }\n })\n );\n\n // Create .gitignore in .swc directory\n await this.createSwcGitignore();\n\n if (this.config.watch) {\n return { context: esbuildCtx, manifest: workflowManifest };\n }\n await esbuildCtx.dispose();\n return { context: undefined, manifest: workflowManifest };\n }\n\n /**\n * Creates a bundle for workflow orchestration functions.\n * Workflows run in a sandboxed VM and coordinate step execution.\n *\n * @param bundleFinalOutput - If false, skips the final bundling step (used by Next.js)\n */\n protected async createWorkflowsBundle({\n inputFiles,\n format = 'esm',\n outfile,\n bundleFinalOutput = true,\n keepInterimBundleContext = this.config.watch,\n tsconfigPath,\n discoveredEntries,\n }: {\n tsconfigPath?: string;\n inputFiles: string[];\n outfile: string;\n format?: 'cjs' | 'esm';\n bundleFinalOutput?: boolean;\n keepInterimBundleContext?: boolean;\n discoveredEntries?: DiscoveredEntries;\n }): Promise<{\n manifest: WorkflowManifest;\n interimBundleCtx?: esbuild.BuildContext;\n bundleFinal?: (interimBundleResult: string) => Promise<void>;\n }> {\n const discovered =\n discoveredEntries ??\n (await this.discoverEntries(inputFiles, dirname(outfile), tsconfigPath));\n const workflowFiles = [...discovered.discoveredWorkflows].sort();\n const serdeFiles = [...discovered.discoveredSerdeFiles].sort();\n\n // Include serde files that aren't already workflow files for cross-context class registration.\n // Classes need to be registered in the workflow bundle so they can be deserialized\n // when receiving data from steps or when serializing data to send to steps.\n const workflowFilesSet = new Set(workflowFiles);\n const serdeOnlyFiles = serdeFiles.filter((f) => !workflowFilesSet.has(f));\n\n // log the workflow files for debugging\n await this.writeDebugFile(outfile, { workflowFiles, serdeOnlyFiles });\n\n // Helper to create import statement from file path\n // For packages, uses the package name so esbuild will resolve through\n // package.json exports with conditions: ['workflow']\n const createImport = (file: string) => {\n const { importPath, isPackage } = getImportPath(\n file,\n this.config.workingDir\n );\n\n if (isPackage) {\n // Use package name - esbuild will resolve via package.json exports\n // and apply the 'workflow' condition\n return `import '${importPath}';`;\n }\n\n // Local app file - use relative path\n // Normalize both paths to forward slashes before calling relative()\n // This is critical on Windows where relative() can produce unexpected results with mixed path formats\n const normalizedWorkingDir = this.config.workingDir.replace(/\\\\/g, '/');\n const normalizedFile = file.replace(/\\\\/g, '/');\n // Calculate relative path from working directory to the file\n let relativePath = relative(normalizedWorkingDir, normalizedFile).replace(\n /\\\\/g,\n '/'\n );\n // Ensure relative paths start with ./ so esbuild resolves them correctly.\n // Paths like \".output/...\" are not valid relative specifiers and must\n // become \"./.output/...\".\n if (!relativePath.startsWith('./') && !relativePath.startsWith('../')) {\n relativePath = `./${relativePath}`;\n }\n return `import '${relativePath}';`;\n };\n\n // Create a virtual entry that imports all workflow files\n // The SWC plugin in workflow mode emits `globalThis.__private_workflows.set(workflowId, fn)`\n // calls directly, so we just need to import the files (Map is initialized via banner)\n const workflowImports = workflowFiles.map(createImport).join('\\n');\n\n // Include serde-only files for class registration side effects\n const serdeImports = serdeOnlyFiles.map(createImport).join('\\n');\n\n const imports = serdeImports\n ? `${workflowImports}\\n// Serde files for cross-context class registration\\n${serdeImports}`\n : workflowImports;\n\n const bundleStartTime = Date.now();\n const workflowManifest: WorkflowManifest = {};\n const esbuildTsconfigOptions =\n await getEsbuildTsconfigOptions(tsconfigPath);\n const normalizedWorkflowSideEffectEntries = await withRealpaths([\n ...workflowFiles,\n ...serdeOnlyFiles,\n ]);\n\n // Bundle with esbuild and our custom SWC plugin in workflow mode.\n // this bundle will be run inside a vm isolate\n const interimBundleCtx = await esbuild.context({\n stdin: {\n contents: imports,\n resolveDir: this.config.workingDir,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n bundle: true,\n absWorkingDir: this.config.workingDir,\n format: 'cjs', // Runs inside the VM which expects cjs\n platform: 'neutral', // The platform is neither node nor browser\n mainFields: ['module', 'main'], // To support npm style imports\n conditions: ['workflow'], // Allow packages to export 'workflow' compliant versions\n target: 'es2022',\n write: false,\n treeShaking: true,\n keepNames: true,\n minify: false,\n // Initialize the workflow registry at the very top of the bundle\n // This must be in banner (not the virtual entry) because esbuild's bundling\n // can reorder code, and the .set() calls need the Map to exist first\n banner: {\n js: 'globalThis.__private_workflows = new Map();',\n },\n // Inline source maps for better stack traces in workflow VM execution.\n // This intermediate bundle is executed via runInContext() in a VM, so we need\n // inline source maps to get meaningful stack traces instead of \"evalmachine.<anonymous>\".\n sourcemap: 'inline',\n // Use tsconfig for path alias resolution.\n // For symlinked configs this uses tsconfigRaw to preserve cwd-relative aliases.\n ...esbuildTsconfigOptions,\n resolveExtensions: [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n ],\n plugins: [\n // Handle pseudo-packages like 'server-only' and 'client-only' by providing\n // empty modules. Must run first to intercept these before other resolution.\n createPseudoPackagePlugin(),\n createSwcPlugin({\n mode: 'workflow',\n projectRoot: this.transformProjectRoot,\n workflowManifest,\n sideEffectEntries: normalizedWorkflowSideEffectEntries,\n }),\n // This plugin must run after the swc plugin to ensure dead code elimination\n // happens first, preventing false positives on Node.js imports in unused code paths\n createNodeModuleErrorPlugin(),\n ],\n // NOTE: We intentionally do NOT use the external option here for workflow bundles.\n // When packages are marked external with format: 'cjs', esbuild generates require() calls.\n // However, the workflow VM (vm.runInContext) does not have require() defined - it only\n // provides module.exports and exports. External packages would fail at runtime with:\n // ReferenceError: require is not defined\n // Instead, we bundle everything and rely on:\n // - createPseudoPackagePlugin() to handle server-only/client-only with empty modules\n // - createNodeModuleErrorPlugin() to catch Node.js builtin imports at build time\n });\n let shouldDisposeInterimBundleCtx = !keepInterimBundleContext;\n try {\n const interimBundle = await interimBundleCtx.rebuild();\n\n this.logEsbuildMessages(\n interimBundle,\n 'intermediate workflow bundle',\n true,\n {\n suppressWarnings: this.config.suppressCreateWorkflowsBundleWarnings,\n }\n );\n this.logCreateWorkflowsBundleInfo(\n 'Created intermediate workflow bundle',\n `${Date.now() - bundleStartTime}ms`\n );\n\n if (this.config.workflowManifestPath) {\n const resolvedPath = resolve(\n process.cwd(),\n this.config.workflowManifestPath\n );\n let prefix = '';\n\n if (resolvedPath.endsWith('.cjs')) {\n prefix = 'module.exports = ';\n } else if (\n resolvedPath.endsWith('.js') ||\n resolvedPath.endsWith('.mjs')\n ) {\n prefix = 'export default ';\n }\n\n await mkdir(dirname(resolvedPath), { recursive: true });\n await writeFile(\n resolvedPath,\n prefix + JSON.stringify(workflowManifest, null, 2)\n );\n }\n\n // Create .gitignore in .swc directory\n await this.createSwcGitignore();\n\n if (\n !interimBundle.outputFiles ||\n interimBundle.outputFiles.length === 0\n ) {\n throw new Error('No output files generated from esbuild');\n }\n\n // Serde compliance warnings: check if workflow bundle has Node.js imports\n // alongside serde-registered classes (these will fail at runtime in the sandbox)\n if (\n workflowManifest.classes &&\n Object.keys(workflowManifest.classes).length > 0\n ) {\n const { analyzeSerdeCompliance } = await import('./serde-checker.js');\n const bundleText = interimBundle.outputFiles[0].text;\n const serdeResult = analyzeSerdeCompliance({\n sourceCode: '',\n workflowCode: bundleText,\n manifest: workflowManifest,\n });\n // De-dupe warnings: group identical issues across classes\n const issuesToClasses = new Map<string, Set<string>>();\n for (const cls of serdeResult.classes) {\n if (!cls.compliant) {\n for (const issue of cls.issues) {\n let affectedClasses = issuesToClasses.get(issue);\n if (!affectedClasses) {\n affectedClasses = new Set<string>();\n issuesToClasses.set(issue, affectedClasses);\n }\n affectedClasses.add(cls.className);\n }\n }\n }\n for (const [issue, affectedClasses] of issuesToClasses) {\n const classNames = [...affectedClasses];\n const classLabel =\n classNames.length === 1\n ? `class \"${classNames[0]}\"`\n : `classes ${classNames.map((name) => `\"${name}\"`).join(', ')}`;\n console.warn(\n chalk.yellow(`⚠ Serde warning for ${classLabel}: `) + issue\n );\n }\n }\n\n const bundleFinal = async (interimBundle: string) => {\n const workflowBundleCode = interimBundle;\n\n const workflowFunctionCode = `// biome-ignore-all lint: generated file\n/* eslint-disable */\nimport { workflowEntrypoint } from 'workflow/runtime';\n\nconst workflowCode = \\`${workflowBundleCode.replace(/[\\\\`$]/g, '\\\\$&')}\\`;\n\nexport const POST = workflowEntrypoint(workflowCode);`;\n\n // we skip the final bundling step for Next.js so it can bundle itself\n if (!bundleFinalOutput) {\n if (!outfile) {\n throw new Error(`Invariant: missing outfile for workflow bundle`);\n }\n // Ensure the output directory exists\n const outputDir = dirname(outfile);\n await mkdir(outputDir, { recursive: true });\n\n // Atomic write: write to temp file then rename to prevent\n // file watchers from reading partial file during write\n const tempPath = `${outfile}.${randomUUID()}.tmp`;\n await writeFile(tempPath, workflowFunctionCode);\n await rename(tempPath, outfile);\n return;\n }\n\n const bundleStartTime = Date.now();\n\n // Now bundle this so we can resolve the @workflow/core dependency\n // we could remove this if we do nft tracing or similar instead\n const finalEsmRequireBanner = this.getEsmRequireBanner(format);\n const finalWorkflowResult = await esbuild.build({\n banner: {\n js: `// biome-ignore-all lint: generated file\\n/* eslint-disable */\\n${finalEsmRequireBanner}`,\n },\n stdin: {\n contents: workflowFunctionCode,\n resolveDir: this.config.workingDir,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n outfile,\n // Source maps for the final workflow bundle wrapper (not important since this code\n // doesn't run in the VM - only the intermediate bundle sourcemap is relevant)\n sourcemap: EMIT_SOURCEMAPS_FOR_DEBUGGING,\n absWorkingDir: this.config.workingDir,\n bundle: true,\n format,\n platform: 'node',\n target: 'es2022',\n write: true,\n keepNames: true,\n minify: false,\n external: ['@aws-sdk/credential-provider-web-identity'],\n });\n\n this.logEsbuildMessages(\n finalWorkflowResult,\n 'final workflow bundle',\n true,\n {\n suppressWarnings: this.config.suppressCreateWorkflowsBundleWarnings,\n }\n );\n this.logCreateWorkflowsBundleInfo(\n 'Created final workflow bundle',\n `${Date.now() - bundleStartTime}ms`\n );\n };\n await bundleFinal(interimBundle.outputFiles[0].text);\n\n if (keepInterimBundleContext) {\n shouldDisposeInterimBundleCtx = false;\n return {\n manifest: workflowManifest,\n interimBundleCtx,\n bundleFinal,\n };\n }\n return { manifest: workflowManifest };\n } catch (error) {\n shouldDisposeInterimBundleCtx = true;\n throw error;\n } finally {\n if (shouldDisposeInterimBundleCtx) {\n try {\n await interimBundleCtx.dispose();\n } catch (disposeError) {\n console.warn(\n 'Warning: Failed to dispose workflow bundle context',\n disposeError\n );\n }\n }\n }\n }\n\n /**\n * Creates a client library bundle for workflow execution.\n * The client library allows importing and calling workflows from application code.\n * Only generated if clientBundlePath is specified in config.\n */\n protected async createClientLibrary(): Promise<void> {\n if (!this.config.clientBundlePath) {\n // Silently exit since no client bundle was requested\n return;\n }\n\n this.logBaseBuilderInfo(\n 'Generating a client library at',\n this.config.clientBundlePath\n );\n this.logBaseBuilderInfo(\n 'NOTE: The recommended way to use workflow with a framework like NextJS is using the loader/plugin with webpack/turbobpack/rollup'\n );\n\n // Ensure we have the directory for the client bundle\n const outputDir = dirname(this.config.clientBundlePath);\n await mkdir(outputDir, { recursive: true });\n\n const inputFiles = await this.getInputFiles();\n\n // Discover serde files from the input files' dependency tree for cross-context class registration.\n // Classes need to be registered in the client bundle so they can be serialized\n // when passing data to workflows via start() and deserialized when receiving workflow results.\n const { discoveredSerdeFiles } = await this.discoverEntries(\n inputFiles,\n outputDir\n );\n\n // Identify serde files that aren't in the inputFiles (deduplicated)\n const inputFilesNormalized = new Set(\n inputFiles.map((f) => f.replace(/\\\\/g, '/'))\n );\n const serdeOnlyFiles = [...discoveredSerdeFiles].filter(\n (f) => !inputFilesNormalized.has(f)\n );\n\n // Re-exports for input files (user's workflow/step definitions).\n // These must use valid relative specifiers because some frameworks pass\n // generated files like \".output/server/index.mjs\" as input files.\n const reexports = inputFiles\n .map((file) => {\n const normalizedWorkingDir = this.config.workingDir.replace(/\\\\/g, '/');\n let relativePath = relative(normalizedWorkingDir, file).replace(\n /\\\\/g,\n '/'\n );\n if (!relativePath.startsWith('./') && !relativePath.startsWith('../')) {\n relativePath = `./${relativePath}`;\n }\n return `export * from '${relativePath}';`;\n })\n .join('\\n');\n\n // Side-effect imports for serde files not in inputFiles (for class registration)\n const serdeImports = serdeOnlyFiles\n .map((file) => {\n const normalizedWorkingDir = this.config.workingDir.replace(/\\\\/g, '/');\n let relativePath = relative(normalizedWorkingDir, file).replace(\n /\\\\/g,\n '/'\n );\n if (!relativePath.startsWith('./') && !relativePath.startsWith('../')) {\n relativePath = `./${relativePath}`;\n }\n return `import '${relativePath}';`;\n })\n .join('\\n');\n\n // Combine: serde imports (for registration side effects) + re-exports\n const entryContent = serdeImports\n ? `// Serde files for cross-context class registration\\n${serdeImports}\\n${reexports}`\n : reexports;\n\n // Bundle with esbuild and our custom SWC plugin\n const normalizedClientSideEffectEntries = await withRealpaths([\n ...inputFiles,\n ...serdeOnlyFiles,\n ]);\n const clientResult = await esbuild.build({\n banner: {\n js: '// biome-ignore-all lint: generated file\\n/* eslint-disable */\\n',\n },\n stdin: {\n contents: entryContent,\n resolveDir: this.config.workingDir,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n outfile: this.config.clientBundlePath,\n bundle: true,\n format: 'esm',\n platform: 'node',\n jsx: 'preserve',\n target: 'es2022',\n write: true,\n treeShaking: true,\n external: ['@workflow/core'],\n resolveExtensions: [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n ],\n plugins: [\n createSwcPlugin({\n mode: 'step',\n projectRoot: this.transformProjectRoot,\n sideEffectEntries: normalizedClientSideEffectEntries,\n }),\n ],\n });\n\n this.logEsbuildMessages(clientResult, 'client library bundle');\n\n // Create .gitignore in .swc directory\n await this.createSwcGitignore();\n }\n\n /**\n * Creates a webhook handler bundle for resuming workflows via HTTP callbacks.\n *\n * @param bundle - If true, bundles dependencies (needed for Build Output API)\n */\n protected async createWebhookBundle({\n outfile,\n bundle = false,\n }: {\n outfile: string;\n bundle?: boolean;\n }): Promise<void> {\n this.logCreateWebhookBundleInfo('Creating webhook route');\n await mkdir(dirname(outfile), { recursive: true });\n\n // Create a static route that calls resumeWebhook\n // This route works for both Next.js and Vercel Build Output API\n const routeContent = `import { resumeWebhook } from 'workflow/api';\n\nasync function handler(request) {\n const url = new URL(request.url);\n // Extract token from pathname: /.well-known/workflow/v1/webhook/{token}\n const pathParts = url.pathname.split('/');\n const token = decodeURIComponent(pathParts[pathParts.length - 1]);\n\n if (!token) {\n return new Response('Missing token', { status: 400 });\n }\n\n try {\n const response = await resumeWebhook(token, request);\n return response;\n } catch (error) {\n // TODO: differentiate between invalid token and other errors\n console.error('Error during resumeWebhook', error);\n return new Response(null, { status: 404 });\n }\n}\n\nexport const GET = handler;\nexport const POST = handler;\nexport const PUT = handler;\nexport const PATCH = handler;\nexport const DELETE = handler;\nexport const HEAD = handler;\nexport const OPTIONS = handler;`;\n\n if (!bundle) {\n // For Next.js, just write the unbundled file\n await writeFile(outfile, routeContent);\n return;\n }\n\n // For Build Output API, bundle with esbuild to resolve imports\n\n const webhookEsmRequireBanner = this.getEsmRequireBanner('esm');\n const webhookBundleStart = Date.now();\n const result = await esbuild.build({\n banner: {\n js: `// biome-ignore-all lint: generated file\\n/* eslint-disable */\\n${webhookEsmRequireBanner}`,\n },\n stdin: {\n contents: routeContent,\n resolveDir: this.config.workingDir,\n sourcefile: 'webhook-route.js',\n loader: 'js',\n },\n outfile,\n absWorkingDir: this.config.workingDir,\n bundle: true,\n jsx: 'preserve',\n format: 'esm',\n platform: 'node',\n conditions: ['import', 'module', 'node', 'default'],\n target: 'es2022',\n write: true,\n treeShaking: true,\n keepNames: true,\n minify: false,\n resolveExtensions: [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n ],\n sourcemap: EMIT_SOURCEMAPS_FOR_DEBUGGING,\n mainFields: ['module', 'main'],\n // Don't externalize anything - bundle everything including workflow packages\n external: [],\n });\n\n this.logEsbuildMessages(result, 'webhook bundle creation');\n this.logCreateWebhookBundleInfo(\n 'Created webhook bundle',\n `${Date.now() - webhookBundleStart}ms`\n );\n }\n\n /**\n * Creates a package.json file with the specified module type.\n */\n protected async createPackageJson(\n dir: string,\n type: 'commonjs' | 'module'\n ): Promise<void> {\n const packageJson = { type };\n await writeFile(\n join(dir, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n }\n\n /**\n * Creates a .vc-config.json file for Vercel Build Output API functions.\n */\n protected async createVcConfig(\n dir: string,\n config: {\n runtime?: string;\n handler?: string;\n launcherType?: string;\n architecture?: string;\n shouldAddHelpers?: boolean;\n shouldAddSourcemapSupport?: boolean;\n maxDuration?: number | 'max';\n experimentalTriggers?: Array<{\n type: 'queue/v2beta';\n topic: string;\n consumer: string;\n maxDeliveries?: number;\n retryAfterSeconds?: number;\n initialDelaySeconds?: number;\n }>;\n }\n ): Promise<void> {\n const vcConfig = {\n runtime: config.runtime ?? 'nodejs22.x',\n handler: config.handler ?? 'index.mjs',\n launcherType: config.launcherType ?? 'Nodejs',\n architecture: config.architecture ?? 'arm64',\n shouldAddHelpers: config.shouldAddHelpers ?? true,\n ...(config.maxDuration !== undefined && {\n maxDuration: config.maxDuration,\n }),\n ...(config.shouldAddSourcemapSupport !== undefined && {\n shouldAddSourcemapSupport: config.shouldAddSourcemapSupport,\n }),\n ...(config.experimentalTriggers && {\n experimentalTriggers: config.experimentalTriggers,\n }),\n };\n\n await writeFile(\n join(dir, '.vc-config.json'),\n JSON.stringify(vcConfig, null, 2)\n );\n }\n\n /**\n * Resolves a path relative to the working directory.\n */\n protected resolvePath(path: string): string {\n return resolve(this.config.workingDir, path);\n }\n\n /**\n * Ensures the directory for a file path exists, creating it if necessary.\n */\n protected async ensureDirectory(filePath: string): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n }\n\n private async createSwcGitignore(): Promise<void> {\n try {\n await writeFile(\n join(this.config.workingDir, '.swc', '.gitignore'),\n '*\\n'\n );\n } catch {\n // We're intentionally silently ignoring this error - creating .gitignore isn't critical\n }\n }\n\n /**\n * Whether the manifest should be exposed as a public HTTP route.\n * Controlled by the `WORKFLOW_PUBLIC_MANIFEST` environment variable.\n */\n protected get shouldExposePublicManifest(): boolean {\n return process.env.WORKFLOW_PUBLIC_MANIFEST === '1';\n }\n\n /**\n * Resolves the workflow manifest diagnostics path, when this builder should\n * emit one.\n */\n protected getDiagnosticsManifestPath(): string | undefined {\n if (this.config.diagnosticsDir) {\n return resolve(\n this.config.workingDir,\n this.config.diagnosticsDir,\n 'workflows-manifest.json'\n );\n }\n\n if (this.config.buildTarget === 'vercel-build-output-api') {\n return this.resolvePath(\n '.vercel/output/diagnostics/workflows-manifest.json'\n );\n }\n }\n\n /**\n * Creates a manifest JSON file containing step/workflow/class metadata\n * and graph data for visualization.\n *\n * @returns The manifest JSON string, or undefined if manifest creation failed.\n */\n protected async createManifest({\n workflowBundlePath,\n manifestDir,\n manifest,\n }: {\n workflowBundlePath: string;\n manifestDir: string;\n manifest: WorkflowManifest;\n }): Promise<string | undefined> {\n const buildStart = Date.now();\n this.logCreateManifestInfo('Creating manifest...');\n\n try {\n const workflowGraphs = await extractWorkflowGraphs(workflowBundlePath);\n\n const steps = this.convertStepsManifest(manifest.steps);\n const workflows = this.convertWorkflowsManifest(\n manifest.workflows,\n workflowGraphs\n );\n const classes = this.convertClassesManifest(manifest.classes);\n\n const output = { version: '1.0.0', steps, workflows, classes };\n const manifestJson = JSON.stringify(output, null, 2);\n\n await mkdir(manifestDir, { recursive: true });\n await writeFile(join(manifestDir, 'manifest.json'), manifestJson);\n\n const diagnosticsManifestPath = this.getDiagnosticsManifestPath();\n if (diagnosticsManifestPath) {\n await this.ensureDirectory(diagnosticsManifestPath);\n await writeFile(diagnosticsManifestPath, manifestJson);\n }\n\n const stepCount = Object.values(steps).reduce(\n (acc, s) => acc + Object.keys(s).length,\n 0\n );\n const workflowCount = Object.values(workflows).reduce(\n (acc, w) => acc + Object.keys(w).length,\n 0\n );\n const classCount = Object.values(classes).reduce(\n (acc, c) => acc + Object.keys(c).length,\n 0\n );\n\n this.logCreateManifestInfo(\n `Created manifest with ${stepCount} ${pluralize('step', 'steps', stepCount)}, ${workflowCount} ${pluralize('workflow', 'workflows', workflowCount)}, and ${classCount} ${pluralize('class', 'classes', classCount)}`,\n `${Date.now() - buildStart}ms`\n );\n\n return manifestJson;\n } catch (error) {\n console.warn(\n 'Failed to create manifest:',\n error instanceof Error ? error.message : String(error)\n );\n return undefined;\n }\n }\n\n private convertStepsManifest(\n steps: WorkflowManifest['steps']\n ): Record<string, Record<string, { stepId: string }>> {\n const result: Record<string, Record<string, { stepId: string }>> = {};\n if (!steps) return result;\n\n for (const [filePath, entries] of Object.entries(steps)) {\n result[filePath] = {};\n for (const [name, data] of Object.entries(entries)) {\n result[filePath][name] = { stepId: data.stepId };\n }\n }\n return result;\n }\n\n private convertWorkflowsManifest(\n workflows: WorkflowManifest['workflows'],\n graphs: Record<\n string,\n Record<string, { graph: { nodes: any[]; edges: any[] } }>\n >\n ): Record<\n string,\n Record<\n string,\n { workflowId: string; graph: { nodes: any[]; edges: any[] } }\n >\n > {\n const result: Record<\n string,\n Record<\n string,\n { workflowId: string; graph: { nodes: any[]; edges: any[] } }\n >\n > = {};\n if (!workflows) return result;\n\n // Build a normalized lookup for graphs since the graph extractor uses\n // paths from workflowId (e.g. \"./workflows/hello-agent\") while the\n // manifest uses source file paths (e.g. \"workflows/hello-agent.ts\").\n // Normalize by stripping leading \"./\" and file extensions.\n const normalizedGraphs = new Map<\n string,\n Record<string, { graph: { nodes: any[]; edges: any[] } }>\n >();\n for (const [graphPath, graphEntries] of Object.entries(graphs)) {\n const normalized = graphPath\n .replace(/^\\.\\//, '')\n .replace(/\\.[^/.]+$/, '');\n normalizedGraphs.set(normalized, graphEntries);\n }\n\n for (const [filePath, entries] of Object.entries(workflows)) {\n result[filePath] = {};\n // Normalize the manifest file path for lookup\n const normalizedFilePath = filePath\n .replace(/^\\.\\//, '')\n .replace(/\\.[^/.]+$/, '');\n\n const graphEntries =\n graphs[filePath] || normalizedGraphs.get(normalizedFilePath);\n\n for (const [name, data] of Object.entries(entries)) {\n result[filePath][name] = {\n workflowId: data.workflowId,\n graph: graphEntries?.[name]?.graph || { nodes: [], edges: [] },\n };\n }\n }\n return result;\n }\n\n private convertClassesManifest(\n classes: WorkflowManifest['classes']\n ): Record<string, Record<string, { classId: string }>> {\n const result: Record<string, Record<string, { classId: string }>> = {};\n if (!classes) return result;\n\n for (const [filePath, entries] of Object.entries(classes)) {\n result[filePath] = {};\n for (const [name, data] of Object.entries(entries)) {\n result[filePath][name] = { classId: data.classId };\n }\n }\n return result;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-queue.js","sourceRoot":"","sources":["../src/build-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAE9B,OAAO,CAAC,IAAyB,EAAiB,EAAE;QAClD,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Creates a build queue that serializes async tasks to prevent race conditions.\n *\n * When rapid file changes trigger multiple builds, this ensures they run\n * sequentially rather than concurrently, avoiding issues like:\n * - Partial file reads during writes\n * - Corrupted merge operations\n * - Duplicate/conflicting builds\n *\n * @example\n * const enqueue = createBuildQueue();\n *\n * // These will run sequentially, not concurrently\n * enqueue(() => builder.build());\n * enqueue(() => builder.build());\n */\nexport function createBuildQueue() {\n let queue = Promise.resolve();\n\n return (task: () => Promise<void>): Promise<void> => {\n queue = queue.then(task).catch((err) => {\n console.error(err);\n });\n return queue;\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-helpers.js","sourceRoot":"","sources":["../src/config-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,YAAgC;IAEhC,MAAM,cAAc,GAAqB;QACvC,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,KAAK;KACzB,CAAC;IAEF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GACZ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC;QAEvD,qFAAqF;QACrF,MAAM,sBAAsB,GAC1B,eAAe,CAAC,sBAAsB,KAAK,IAAI,CAAC;QAClD,MAAM,qBAAqB,GACzB,eAAe,CAAC,qBAAqB,KAAK,IAAI,CAAC;QAEjD,OAAO;YACL,UAAU,EAAE,sBAAsB;YAClC,eAAe,EAAE,sBAAsB;YACvC,iBAAiB,EAAE,sBAAsB,IAAI,qBAAqB;SACnE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;QAC1D,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,GAAW;IAEX,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,6CAA6C,CAAC,GAAG,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6CAA6C,CACjE,GAAW;IAEX,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE;QAClE,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,+BAA+B,CAAC,UAAU,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAOvC;IACC,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;QACnC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,eAAe,EAAE,EAAE,EAAE,mCAAmC;QACxD,mBAAmB,EAAE,EAAE,EAAE,mCAAmC;QAC5D,iBAAiB,EAAE,EAAE,EAAE,mCAAmC;QAC1D,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC","sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { findUp } from 'find-up';\nimport JSON5 from 'json5';\nimport type { WorkflowConfig } from './types.js';\n\nexport interface DecoratorOptions {\n decorators: boolean;\n legacyDecorator: boolean;\n decoratorMetadata: boolean;\n}\n\nexport interface DecoratorOptionsWithConfigPath {\n options: DecoratorOptions;\n configPath: string | undefined;\n}\n\n/**\n * Reads tsconfig.json and extracts decorator-related compiler options.\n * Returns decorator options based on experimentalDecorators and emitDecoratorMetadata settings.\n *\n * @param tsconfigPath - Path to tsconfig.json or jsconfig.json\n * @returns DecoratorOptions with settings based on tsconfig compilerOptions\n */\nexport async function getDecoratorOptionsFromTsConfig(\n tsconfigPath: string | undefined\n): Promise<DecoratorOptions> {\n const defaultOptions: DecoratorOptions = {\n decorators: false,\n legacyDecorator: false,\n decoratorMetadata: false,\n };\n\n if (!tsconfigPath) {\n return defaultOptions;\n }\n\n try {\n const content = await readFile(tsconfigPath, 'utf-8');\n const tsconfig: { compilerOptions?: Record<string, unknown> } =\n JSON5.parse(content);\n const compilerOptions = tsconfig.compilerOptions || {};\n\n // Match Next.js behavior: enable decorators only when experimentalDecorators is true\n const experimentalDecorators =\n compilerOptions.experimentalDecorators === true;\n const emitDecoratorMetadata =\n compilerOptions.emitDecoratorMetadata === true;\n\n return {\n decorators: experimentalDecorators,\n legacyDecorator: experimentalDecorators,\n decoratorMetadata: experimentalDecorators && emitDecoratorMetadata,\n };\n } catch {\n // If we can't read or parse the tsconfig, return defaults\n return defaultOptions;\n }\n}\n\n/**\n * Finds tsconfig.json in the given directory (or ancestors) and extracts decorator options.\n * Combines tsconfig discovery with decorator option extraction for convenience.\n *\n * @param cwd - Directory to start searching for tsconfig.json\n * @returns DecoratorOptions with settings based on tsconfig compilerOptions\n */\nexport async function getDecoratorOptionsForDirectory(\n cwd: string\n): Promise<DecoratorOptions> {\n const { options } = await getDecoratorOptionsForDirectoryWithConfigPath(cwd);\n return options;\n}\n\n/**\n * Finds tsconfig.json/jsconfig.json in the given directory tree and returns\n * both decorator options and the config path used to derive them.\n */\nexport async function getDecoratorOptionsForDirectoryWithConfigPath(\n cwd: string\n): Promise<DecoratorOptionsWithConfigPath> {\n const configPath = await findUp(['tsconfig.json', 'jsconfig.json'], {\n cwd,\n });\n const options = await getDecoratorOptionsFromTsConfig(configPath);\n return { options, configPath };\n}\n\n/**\n * Creates a partial configuration for builders that don't use bundle paths directly.\n * Used by framework integrations like Nitro where the builder computes paths internally.\n */\nexport function createBaseBuilderConfig(options: {\n workingDir: string;\n projectRoot?: string;\n dirs?: string[];\n watch?: boolean;\n externalPackages?: string[];\n runtime?: string;\n}): Omit<WorkflowConfig, 'buildTarget'> {\n return {\n dirs: options.dirs ?? ['workflows'],\n projectRoot: options.projectRoot,\n workingDir: options.workingDir,\n watch: options.watch,\n stepsBundlePath: '', // Not used by base builder methods\n workflowsBundlePath: '', // Not used by base builder methods\n webhookBundlePath: '', // Not used by base builder methods\n externalPackages: options.externalPackages,\n runtime: options.runtime,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,cAAuB;IAC7B,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,SAAS;IACnB,iBAAiB,EAAE,CAAC,EAAE,sCAAsC;IAC5D,mBAAmB,EAAE,CAAC,EAAE,mDAAmD;CAC5E,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,cAAuB;IAC7B,KAAK,EAAE,kBAAkB;IACzB,QAAQ,EAAE,SAAS;IACnB,iBAAiB,EAAE,CAAC,EAAE,sCAAsC;IAC5D,mBAAmB,EAAE,CAAC,EAAE,mDAAmD;CAC5E,CAAC","sourcesContent":["/**\n * Queue trigger configuration for workflow step execution.\n * Steps are queued to the __wkf_step_* topic.\n */\nexport const STEP_QUEUE_TRIGGER = {\n type: 'queue/v2beta' as const,\n topic: '__wkf_step_*',\n consumer: 'default',\n retryAfterSeconds: 5, // Delay between retries (default: 60)\n initialDelaySeconds: 0, // Initial delay before first delivery (default: 0)\n};\n\n/**\n * Queue trigger configuration for workflow orchestration.\n * Workflows are queued to the __wkf_workflow_* topic.\n */\nexport const WORKFLOW_QUEUE_TRIGGER = {\n type: 'queue/v2beta' as const,\n topic: '__wkf_workflow_*',\n consumer: 'default',\n retryAfterSeconds: 5, // Delay between retries (default: 60)\n initialDelaySeconds: 0, // Initial delay before first delivery (default: 0)\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"discover-entries-esbuild-plugin.js","sourceRoot":"","sources":["../src/discover-entries-esbuild-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { promisify } from 'node:util';\nimport enhancedResolveOriginal from 'enhanced-resolve';\nimport type { Plugin } from 'esbuild';\nimport type { WorkflowManifest } from './apply-swc-transform.js';\nimport { applySwcTransform } from './apply-swc-transform.js';\nimport {\n detectWorkflowPatterns,\n isGeneratedWorkflowFile,\n} from './transform-utils.js';\n\nconst enhancedResolve = promisify(enhancedResolveOriginal);\n\nexport const jsTsRegex = /\\.(ts|tsx|js|jsx|mjs|cjs|mts|cts)$/;\n\n/** Returns true if a manifest section has at least one entry. */\nfunction hasManifestEntries(\n section: WorkflowManifest[keyof WorkflowManifest]\n): boolean {\n if (!section) return false;\n return Object.values(section).some(\n (entries) => Object.keys(entries).length > 0\n );\n}\n\nfunction isGeneratedBuildArtifactPath(filePath: string): boolean {\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n return (\n normalizedPath.includes('/.output/') ||\n normalizedPath.includes('/.next/') ||\n normalizedPath.includes('/.nuxt/') ||\n normalizedPath.includes('/.svelte-kit/') ||\n normalizedPath.includes('/.vercel/')\n );\n}\n\n// parent -> children relationship (a file can import multiple files)\nexport const importParents = new Map<string, Set<string>>();\n\n// check if a parent has a child in its import chain\n// e.g. if a dependency needs to be bundled because it has\n// a 'use workflow/'use step' directive in it\nexport function parentHasChild(parent: string, childToFind: string): boolean {\n const visited = new Set<string>();\n const queue: string[] = [parent];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (visited.has(current)) {\n continue;\n }\n visited.add(current);\n\n const children = importParents.get(current);\n if (!children) {\n continue;\n }\n\n for (const child of children) {\n if (child === childToFind) {\n return true;\n }\n queue.push(child);\n }\n }\n\n return false;\n}\n\nexport function createDiscoverEntriesPlugin(\n state: {\n discoveredSteps: Set<string>;\n discoveredWorkflows: Set<string>;\n discoveredSerdeFiles: Set<string>;\n },\n projectRoot?: string\n): Plugin {\n return {\n name: 'discover-entries-esbuild-plugin',\n setup(build) {\n // Track parent→child import relationships for ALL imports (not just\n // those with file extensions) so that `parentHasChild()` can correctly\n // identify transitive parents of serde/step files even when the\n // dependency chain passes through bare specifier imports like\n // `@workflow/core/runtime` or `workflow/runtime`.\n build.onResolve({ filter: /.*/ }, async (args) => {\n try {\n const resolved = await enhancedResolve(args.resolveDir, args.path);\n\n if (resolved) {\n // Normalize path separators for cross-platform compatibility\n const normalizedImporter = args.importer.replace(/\\\\/g, '/');\n const normalizedResolved = resolved.replace(/\\\\/g, '/');\n // A file can import multiple files, so we store a Set of children\n let children = importParents.get(normalizedImporter);\n if (!children) {\n children = new Set<string>();\n importParents.set(normalizedImporter, children);\n }\n children.add(normalizedResolved);\n }\n } catch (_) {}\n return null;\n });\n\n // Handle TypeScript and JavaScript files\n build.onLoad({ filter: jsTsRegex }, async (args) => {\n try {\n if (isGeneratedBuildArtifactPath(args.path)) {\n return {\n contents: '',\n loader: 'js',\n };\n }\n\n // Skip generated workflow route files to avoid re-processing them\n if (isGeneratedWorkflowFile(args.path)) {\n const source = await readFile(args.path, 'utf8');\n return {\n contents: source,\n loader: args.path.endsWith('.jsx') ? 'jsx' : 'js',\n };\n }\n\n // Determine the loader based on the output\n let loader: 'js' | 'jsx' = 'js';\n const isTypeScript =\n args.path.endsWith('.ts') ||\n args.path.endsWith('.tsx') ||\n args.path.endsWith('.mts') ||\n args.path.endsWith('.cts');\n if (!isTypeScript && args.path.endsWith('.jsx')) {\n loader = 'jsx';\n }\n const source = await readFile(args.path, 'utf8');\n\n // Normalize path separators to forward slashes for cross-platform compatibility\n // This is critical for Windows where paths contain backslashes\n const normalizedPath = args.path.replace(/\\\\/g, '/');\n\n const resolvedProjectRoot =\n projectRoot || build.initialOptions.absWorkingDir || process.cwd();\n\n // Two-phase discovery:\n // 1. Fast regexp pre-scan filters out the vast majority of files.\n // 2. For the small number that match, run the SWC plugin in 'detect'\n // mode to get an AST-level manifest. Detect mode walks the AST to\n // find directives and serde patterns but does NOT transform any\n // code, eliminating false positives where directive-like strings\n // appear inside template literals, regular strings, or comments.\n //\n // All files are transformed by SWC (TS→JS, decorators, etc.) since\n // esbuild does not support all TypeScript syntax (e.g. legacy\n // decorators, emitDecoratorMetadata). For regexp-matched files the\n // 'detect' call handles both the syntax transform and the manifest\n // in a single pass; for all other files a mode:false call is used.\n const patterns = detectWorkflowPatterns(source);\n\n let transformedCode: string;\n\n if (patterns.hasDirective || patterns.hasSerde) {\n const { code, workflowManifest } = await applySwcTransform(\n normalizedPath,\n source,\n 'detect',\n normalizedPath,\n resolvedProjectRoot\n );\n transformedCode = code;\n\n if (hasManifestEntries(workflowManifest.workflows)) {\n state.discoveredWorkflows.add(normalizedPath);\n }\n if (hasManifestEntries(workflowManifest.steps)) {\n state.discoveredSteps.add(normalizedPath);\n }\n\n if (hasManifestEntries(workflowManifest.classes)) {\n state.discoveredSerdeFiles.add(normalizedPath);\n }\n } else {\n const { code } = await applySwcTransform(\n normalizedPath,\n source,\n false,\n normalizedPath,\n resolvedProjectRoot\n );\n transformedCode = code;\n }\n\n return {\n contents: transformedCode,\n loader,\n };\n } catch (_) {\n // ignore trace errors during discover phase\n return {\n contents: '',\n loader: 'js',\n };\n }\n });\n },\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"discover-entries-esbuild-plugin.test.js","sourceRoot":"","sources":["../src/discover-entries-esbuild-plugin.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,iBAAiB,EAAE,qBAAqB;CACzC,CAAC,CAAC,CAAC;AAEJ,OAAO,EACL,2BAA2B,EAC3B,aAAa,EACb,cAAc,GACf,MAAM,sCAAsC,CAAC;AAE9C,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;AAE1C,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,QAAQ,GAAG,EAAE;IAC5C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,IAAI,QAAgB,CAAC;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC,CAAC;QACtE,aAAa,CAAC,KAAK,EAAE,CAAC;QACtB,qBAAqB,CAAC,SAAS,EAAE,CAAC;QAClC,qBAAqB,CAAC,kBAAkB,CACtC,KAAK,EAAE,QAAgB,EAAE,MAAc,EAAE,EAAE;YACzC,gEAAgE;YAChE,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,gBAAgB,GAA4B,EAAE,CAAC;YACrD,IAAI,WAAW,EAAE,CAAC;gBAChB,gBAAgB,CAAC,SAAS,GAAG;oBAC3B,CAAC,QAAQ,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;iBAC9D,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,gBAAgB,CAAC,KAAK,GAAG;oBACvB,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;iBAC3C,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,SAAS,YAAY;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,CACvB,WAAW,EACX,KAAK,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,mBAAmB,CACpB,CAAC;QAEF,SAAS,CACP,YAAY,EACZ;;;;;CAKL,CACI,CAAC;QAEF,OAAO;YACL,OAAO;YACP,WAAW;YACX,YAAY;SACb,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG;YACZ,eAAe,EAAE,IAAI,GAAG,EAAU;YAClC,mBAAmB,EAAE,IAAI,GAAG,EAAU;YACtC,oBAAoB,EAAE,IAAI,GAAG,EAAU;SACxC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;YACjC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;YACnC,aAAa,EAAE,OAAO,CAAC,WAAW;YAClC,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;SAC/D,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,CACvC,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAClC,CAAC;QACF,8DAA8D;QAC9D,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAChD,sBAAsB,EACtB,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EACzC,QAAQ,EACR,sBAAsB,EACtB,OAAO,CAAC,OAAO,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG;YACZ,eAAe,EAAE,IAAI,GAAG,EAAU;YAClC,mBAAmB,EAAE,IAAI,GAAG,EAAU;YACtC,oBAAoB,EAAE,IAAI,GAAG,EAAU;SACxC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;YACjC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;YACnC,aAAa,EAAE,OAAO,CAAC,WAAW;YAClC,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,CACvC,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAClC,CAAC;QACF,8DAA8D;QAC9D,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAChD,sBAAsB,EACtB,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EACzC,QAAQ,EACR,sBAAsB,EACtB,OAAO,CAAC,WAAW,CACpB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,oDAAoD;QACpD,yEAAyE;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE3C,SAAS,CACP,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CACvD,CAAC;QACF,SAAS,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;QACzD,SAAS,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAC9C,SAAS,CACP,SAAS,EACT,sDAAsD,CACvD,CAAC;QAEF,MAAM,KAAK,GAAG;YACZ,eAAe,EAAE,IAAI,GAAG,EAAU;YAClC,mBAAmB,EAAE,IAAI,GAAG,EAAU;YACtC,oBAAoB,EAAE,IAAI,GAAG,EAAU;SACxC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;YACjC,WAAW,EAAE,CAAC,SAAS,CAAC;YACxB,aAAa,EAAE,QAAQ;YACvB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEtC,MAAM,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEpD,kDAAkD;QAClD,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACzD,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,aAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1D,2DAA2D;QAC3D,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErD,iEAAiE;QACjE,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n mkdirSync,\n mkdtempSync,\n realpathSync,\n rmSync,\n writeFileSync,\n} from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport * as esbuild from 'esbuild';\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\n\nconst { applySwcTransformMock } = vi.hoisted(() => ({\n applySwcTransformMock: vi.fn(),\n}));\n\nvi.mock('./apply-swc-transform.js', () => ({\n applySwcTransform: applySwcTransformMock,\n}));\n\nimport {\n createDiscoverEntriesPlugin,\n importParents,\n parentHasChild,\n} from './discover-entries-esbuild-plugin.js';\n\nconst realTmpdir = realpathSync(tmpdir());\n\nfunction normalizeSlashes(path: string): string {\n return path.replace(/\\\\/g, '/');\n}\n\nfunction writeFile(path: string, contents = ''): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, contents, 'utf-8');\n}\n\ndescribe('createDiscoverEntriesPlugin projectRoot', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'workflow-discover-plugin-'));\n importParents.clear();\n applySwcTransformMock.mockReset();\n applySwcTransformMock.mockImplementation(\n async (filename: string, source: string) => {\n // Simulate the SWC plugin producing a manifest in 'detect' mode\n const hasWorkflow = /['\"]use workflow['\"]/.test(source);\n const hasStep = /['\"]use step['\"]/.test(source);\n const workflowManifest: Record<string, unknown> = {};\n if (hasWorkflow) {\n workflowManifest.workflows = {\n [filename]: { handleMessageWorkflow: { workflowId: 'test' } },\n };\n }\n if (hasStep) {\n workflowManifest.steps = {\n [filename]: { myStep: { stepId: 'test' } },\n };\n }\n return { code: source, workflowManifest };\n }\n );\n });\n\n afterEach(() => {\n importParents.clear();\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n function setupFixture() {\n const appRoot = join(testRoot, 'apps', 'chat');\n const packageRoot = join(testRoot, 'packages', 'vade');\n const workflowFile = join(\n packageRoot,\n 'src',\n 'internal',\n 'message',\n 'workflow',\n 'handle-message.ts'\n );\n\n writeFile(\n workflowFile,\n `export async function handleMessageWorkflow(message) {\n \"use workflow\";\n\n return message;\n}\n`\n );\n\n return {\n appRoot,\n packageRoot,\n workflowFile,\n };\n }\n\n it('uses the explicit projectRoot during discovery transforms', async () => {\n const fixture = setupFixture();\n const normalizedWorkflowFile = normalizeSlashes(fixture.workflowFile);\n const state = {\n discoveredSteps: new Set<string>(),\n discoveredWorkflows: new Set<string>(),\n discoveredSerdeFiles: new Set<string>(),\n };\n\n const result = await esbuild.build({\n entryPoints: [fixture.workflowFile],\n absWorkingDir: fixture.packageRoot,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [createDiscoverEntriesPlugin(state, fixture.appRoot)],\n });\n\n expect(result.errors).toHaveLength(0);\n expect(state.discoveredWorkflows).toEqual(\n new Set([normalizedWorkflowFile])\n );\n // Single 'detect' mode call for AST-level manifest validation\n expect(applySwcTransformMock).toHaveBeenCalledWith(\n normalizedWorkflowFile,\n expect.stringContaining('\"use workflow\"'),\n 'detect',\n normalizedWorkflowFile,\n fixture.appRoot\n );\n });\n\n it('defaults discovery transforms to absWorkingDir when projectRoot is omitted', async () => {\n const fixture = setupFixture();\n const normalizedWorkflowFile = normalizeSlashes(fixture.workflowFile);\n const state = {\n discoveredSteps: new Set<string>(),\n discoveredWorkflows: new Set<string>(),\n discoveredSerdeFiles: new Set<string>(),\n };\n\n const result = await esbuild.build({\n entryPoints: [fixture.workflowFile],\n absWorkingDir: fixture.packageRoot,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [createDiscoverEntriesPlugin(state)],\n });\n\n expect(result.errors).toHaveLength(0);\n expect(state.discoveredWorkflows).toEqual(\n new Set([normalizedWorkflowFile])\n );\n // Single 'detect' mode call for AST-level manifest validation\n expect(applySwcTransformMock).toHaveBeenCalledWith(\n normalizedWorkflowFile,\n expect.stringContaining('\"use workflow\"'),\n 'detect',\n normalizedWorkflowFile,\n fixture.packageRoot\n );\n });\n\n it('tracks importParents through bare specifier imports', async () => {\n // Simulate: entry.ts -> bare-pkg -> ./serde-file.ts\n // The bare specifier \"bare-pkg\" should not break the parent-child chain.\n const entryFile = join(testRoot, 'entry.ts');\n const pkgDir = join(testRoot, 'node_modules', 'bare-pkg');\n const pkgIndex = join(pkgDir, 'index.js');\n const serdeFile = join(pkgDir, 'serde.js');\n\n writeFile(\n join(pkgDir, 'package.json'),\n JSON.stringify({ name: 'bare-pkg', main: 'index.js' })\n );\n writeFile(pkgIndex, `export { Foo } from './serde.js';`);\n writeFile(serdeFile, `export class Foo {}\\n`);\n writeFile(\n entryFile,\n `import { Foo } from 'bare-pkg';\\nconsole.log(Foo);\\n`\n );\n\n const state = {\n discoveredSteps: new Set<string>(),\n discoveredWorkflows: new Set<string>(),\n discoveredSerdeFiles: new Set<string>(),\n };\n\n const result = await esbuild.build({\n entryPoints: [entryFile],\n absWorkingDir: testRoot,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [createDiscoverEntriesPlugin(state)],\n });\n\n expect(result.errors).toHaveLength(0);\n\n const normalizedEntry = normalizeSlashes(entryFile);\n const normalizedPkgIndex = normalizeSlashes(pkgIndex);\n const normalizedSerde = normalizeSlashes(serdeFile);\n\n // entry.ts -> bare-pkg/index.js should be tracked\n const entryChildren = importParents.get(normalizedEntry);\n expect(entryChildren).toBeDefined();\n expect(entryChildren!.has(normalizedPkgIndex)).toBe(true);\n\n // bare-pkg/index.js -> bare-pkg/serde.js should be tracked\n const pkgChildren = importParents.get(normalizedPkgIndex);\n expect(pkgChildren).toBeDefined();\n expect(pkgChildren!.has(normalizedSerde)).toBe(true);\n\n // parentHasChild should transitively find serde.js from entry.ts\n expect(parentHasChild(normalizedEntry, normalizedSerde)).toBe(true);\n });\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"esbuild-tsconfig.js","sourceRoot":"","sources":["../src/esbuild-tsconfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAOnD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,YAAgC;IAEhC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC5B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,EAAE,WAAW,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACpC,CAAC;AACH,CAAC","sourcesContent":["import { lstat, readFile } from 'node:fs/promises';\n\nexport type EsbuildTsconfigOptions = {\n tsconfig?: string;\n tsconfigRaw?: string;\n};\n\n/**\n * Returns the appropriate tsconfig options for esbuild.\n *\n * For symlinked tsconfig files we pass `tsconfigRaw` instead of `tsconfig` so\n * path aliases (for example `@/*`) are resolved relative to the current\n * working directory instead of the symlink target directory.\n */\nexport async function getEsbuildTsconfigOptions(\n tsconfigPath: string | undefined\n): Promise<EsbuildTsconfigOptions> {\n if (!tsconfigPath) {\n return {};\n }\n\n try {\n const stats = await lstat(tsconfigPath);\n if (!stats.isSymbolicLink()) {\n return { tsconfig: tsconfigPath };\n }\n\n const tsconfigRaw = await readFile(tsconfigPath, 'utf8');\n return { tsconfigRaw };\n } catch {\n return { tsconfig: tsconfigPath };\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"esbuild-tsconfig.test.js","sourceRoot":"","sources":["../src/esbuild-tsconfig.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n mkdirSync,\n mkdtempSync,\n realpathSync,\n rmSync,\n symlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport * as esbuild from 'esbuild';\nimport { afterEach, describe, expect, it } from 'vitest';\nimport { getEsbuildTsconfigOptions } from './esbuild-tsconfig.js';\n\nconst realTmpdir = realpathSync(tmpdir());\n\nfunction writeFile(path: string, contents: string): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, contents, 'utf8');\n}\n\nfunction normalize(paths: string[]): string[] {\n return paths.map((p) => p.replace(/\\\\/g, '/'));\n}\n\nasync function buildInputs({\n workingDir,\n tsconfigOptions,\n}: {\n workingDir: string;\n tsconfigOptions: { tsconfig?: string; tsconfigRaw?: string };\n}): Promise<string[]> {\n const result = await esbuild.build({\n absWorkingDir: workingDir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n logLevel: 'silent',\n metafile: true,\n stdin: {\n contents: `import '@/workflows/target'; import '@/app/.well-known/agent/v1/steps';`,\n resolveDir: workingDir,\n sourcefile: 'entry.ts',\n loader: 'ts',\n },\n ...tsconfigOptions,\n });\n\n return normalize(Object.keys(result.metafile.inputs));\n}\n\ndescribe('getEsbuildTsconfigOptions', () => {\n const createdRoots: string[] = [];\n const symlinkTest = process.platform === 'win32' ? it.skip : it;\n\n afterEach(() => {\n for (const root of createdRoots.splice(0)) {\n rmSync(root, { recursive: true, force: true });\n }\n });\n\n it('returns tsconfig for regular files', async () => {\n const root = mkdtempSync(join(realTmpdir, 'workflow-tsconfig-regular-'));\n createdRoots.push(root);\n const workingDir = join(root, 'app');\n const tsconfigPath = join(workingDir, 'tsconfig.json');\n\n writeFile(\n tsconfigPath,\n JSON.stringify(\n {\n compilerOptions: {\n paths: {\n '@/*': ['./*'],\n },\n },\n },\n null,\n 2\n )\n );\n\n const options = await getEsbuildTsconfigOptions(tsconfigPath);\n expect(options).toEqual({ tsconfig: tsconfigPath });\n });\n\n symlinkTest(\n 'uses tsconfigRaw for symlinked configs so aliases resolve from working dir',\n async () => {\n const root = mkdtempSync(join(realTmpdir, 'workflow-tsconfig-symlink-'));\n createdRoots.push(root);\n const workingDir = join(root, 'webpack-app');\n const sourceDir = join(root, 'turbopack-app');\n const symlinkTsconfigPath = join(workingDir, 'tsconfig.json');\n\n writeFile(\n join(sourceDir, 'tsconfig.json'),\n JSON.stringify(\n {\n compilerOptions: {\n paths: {\n '@/*': ['./*'],\n },\n },\n },\n null,\n 2\n )\n );\n\n writeFile(\n join(workingDir, 'workflows/target.ts'),\n 'export const id = \"webpack\";'\n );\n writeFile(\n join(workingDir, 'app/.well-known/agent/v1/steps.ts'),\n 'export const id = \"webpack-app\";'\n );\n writeFile(\n join(sourceDir, 'workflows/target.ts'),\n 'export const id = \"turbopack\";'\n );\n writeFile(\n join(sourceDir, 'app/.well-known/agent/v1/steps.ts'),\n 'export const id = \"turbopack-app\";'\n );\n\n symlinkSync(\n join(sourceDir, 'tsconfig.json'),\n symlinkTsconfigPath,\n 'file'\n );\n\n const directInputs = await buildInputs({\n workingDir,\n tsconfigOptions: { tsconfig: symlinkTsconfigPath },\n });\n expect(\n directInputs.some((input) =>\n input.includes('turbopack-app/workflows/target.ts')\n )\n ).toBe(true);\n expect(\n directInputs.some((input) =>\n input.includes('turbopack-app/app/.well-known/agent/v1/steps.ts')\n )\n ).toBe(true);\n\n const options = await getEsbuildTsconfigOptions(symlinkTsconfigPath);\n expect(typeof options.tsconfigRaw).toBe('string');\n expect(options.tsconfig).toBeUndefined();\n\n const normalizedInputs = await buildInputs({\n workingDir,\n tsconfigOptions: options,\n });\n\n expect(\n normalizedInputs.some((input) => input.endsWith('workflows/target.ts'))\n ).toBe(true);\n expect(\n normalizedInputs.some((input) =>\n input.endsWith('app/.well-known/agent/v1/steps.ts')\n )\n ).toBe(true);\n expect(\n normalizedInputs.some((input) =>\n input.includes('turbopack-app/workflows/target.ts')\n )\n ).toBe(false);\n expect(\n normalizedInputs.some((input) =>\n input.includes('turbopack-app/app/.well-known/agent/v1/steps.ts')\n )\n ).toBe(false);\n }\n );\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-input-files.test.js","sourceRoot":"","sources":["../src/get-input-files.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n mkdirSync,\n mkdtempSync,\n realpathSync,\n rmSync,\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 { BaseBuilder } from './base-builder.js';\nimport type { StandaloneConfig, VercelBuildOutputConfig } from './types.js';\n\n/**\n * Minimal subclass to expose the protected `getInputFiles()` for testing.\n */\nclass TestBuilder extends BaseBuilder {\n async build(): Promise<void> {\n // no-op\n }\n\n // Expose for tests\n public getInputFiles(): Promise<string[]> {\n return super.getInputFiles();\n }\n\n public getDiagnosticsManifestPath(): string | undefined {\n return super.getDiagnosticsManifestPath();\n }\n}\n\n// Resolve symlinks in tmpdir to avoid macOS /var -> /private/var issues\nconst realTmpdir = realpathSync(tmpdir());\n\n/**\n * Normalize a path to forward slashes for cross-platform comparison.\n * tinyglobby always returns forward-slash paths, even on Windows,\n * while Node's `path.join()` uses backslashes on Windows.\n */\nfunction normalize(p: string): string {\n return p.replace(/\\\\/g, '/');\n}\n\nfunction writeFile(dir: string, relativePath: string, content = ''): string {\n const fullPath = join(dir, relativePath);\n mkdirSync(dirname(fullPath), { recursive: true });\n writeFileSync(fullPath, content, 'utf-8');\n return fullPath;\n}\n\nfunction createBuilder(\n workingDir: string,\n dirs: string[],\n configOverrides: Partial<StandaloneConfig> = {}\n): TestBuilder {\n const config: StandaloneConfig = {\n buildTarget: 'standalone',\n workingDir,\n dirs,\n stepsBundlePath: join(workingDir, 'steps.js'),\n workflowsBundlePath: join(workingDir, 'workflows.js'),\n webhookBundlePath: join(workingDir, 'webhook.js'),\n ...configOverrides,\n };\n return new TestBuilder(config);\n}\n\ndescribe('getInputFiles', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'get-input-files-'));\n });\n\n afterEach(() => {\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n it('discovers files inside dot-prefixed directories', async () => {\n const srcDir = join(testRoot, 'src');\n writeFile(srcDir, '.hidden/step.ts', \"'use step';\");\n writeFile(srcDir, '.config/workflow.ts', \"'use workflow';\");\n writeFile(srcDir, 'regular/step.ts', \"'use step';\");\n\n const builder = createBuilder(testRoot, ['src']);\n const files = (await builder.getInputFiles()).map(normalize);\n\n expect(files).toContain(normalize(join(srcDir, '.hidden/step.ts')));\n expect(files).toContain(normalize(join(srcDir, '.config/workflow.ts')));\n expect(files).toContain(normalize(join(srcDir, 'regular/step.ts')));\n });\n\n it('discovers dot-prefixed files', async () => {\n const srcDir = join(testRoot, 'src');\n writeFile(srcDir, '.hidden-step.ts', \"'use step';\");\n writeFile(srcDir, 'visible-step.ts', \"'use step';\");\n\n const builder = createBuilder(testRoot, ['src']);\n const files = (await builder.getInputFiles()).map(normalize);\n\n expect(files).toContain(normalize(join(srcDir, '.hidden-step.ts')));\n expect(files).toContain(normalize(join(srcDir, 'visible-step.ts')));\n });\n\n it('still excludes explicitly ignored dot-directories', async () => {\n const srcDir = join(testRoot, 'src');\n writeFile(srcDir, '.git/hooks/pre-commit.ts');\n writeFile(srcDir, '.next/server/page.ts');\n writeFile(srcDir, '.nuxt/workflow/steps.mjs');\n writeFile(srcDir, '.vercel/output/step.ts');\n writeFile(srcDir, '.svelte-kit/output/step.ts');\n writeFile(srcDir, '.workflow-data/state.ts');\n writeFile(srcDir, '.workflow-vitest/workflows.mjs');\n writeFile(srcDir, '.well-known/workflow/route.ts');\n writeFile(srcDir, '.turbo/cache/build.ts');\n writeFile(srcDir, '.cache/babel/plugin.js');\n writeFile(srcDir, '.yarn/releases/yarn.cjs');\n writeFile(srcDir, '.pnpm-store/v3/files.ts');\n writeFile(srcDir, 'node_modules/pkg/index.ts');\n // This one should still be found\n writeFile(srcDir, '.custom/step.ts', \"'use step';\");\n\n const builder = createBuilder(testRoot, ['src']);\n const files = (await builder.getInputFiles()).map(normalize);\n\n expect(files).not.toContain(\n normalize(join(srcDir, '.git/hooks/pre-commit.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.next/server/page.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.nuxt/workflow/steps.mjs'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.vercel/output/step.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.svelte-kit/output/step.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.workflow-data/state.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.workflow-vitest/workflows.mjs'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.well-known/workflow/route.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.turbo/cache/build.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.cache/babel/plugin.js'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.yarn/releases/yarn.cjs'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, '.pnpm-store/v3/files.ts'))\n );\n expect(files).not.toContain(\n normalize(join(srcDir, 'node_modules/pkg/index.ts'))\n );\n expect(files).toContain(normalize(join(srcDir, '.custom/step.ts')));\n });\n\n it('discovers files with various supported extensions in dot-directories', async () => {\n const srcDir = join(testRoot, 'src');\n writeFile(srcDir, '.api/route.tsx');\n writeFile(srcDir, '.api/handler.mts');\n writeFile(srcDir, '.api/utils.js');\n writeFile(srcDir, '.api/config.cjs');\n\n const builder = createBuilder(testRoot, ['src']);\n const files = (await builder.getInputFiles()).map(normalize);\n\n expect(files).toContain(normalize(join(srcDir, '.api/route.tsx')));\n expect(files).toContain(normalize(join(srcDir, '.api/handler.mts')));\n expect(files).toContain(normalize(join(srcDir, '.api/utils.js')));\n expect(files).toContain(normalize(join(srcDir, '.api/config.cjs')));\n });\n});\n\ndescribe('getDiagnosticsManifestPath', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'diagnostics-path-'));\n });\n\n afterEach(() => {\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n it('uses an explicit diagnosticsDir when configured', () => {\n const builder = createBuilder(testRoot, ['src'], {\n diagnosticsDir: '.next/diagnostics',\n });\n\n expect(builder.getDiagnosticsManifestPath()).toBe(\n join(testRoot, '.next/diagnostics/workflows-manifest.json')\n );\n });\n\n it('does not emit Vercel diagnostics for non-Vercel builder targets', () => {\n const previousTargetWorld = process.env.WORKFLOW_TARGET_WORLD;\n process.env.WORKFLOW_TARGET_WORLD = 'vercel';\n try {\n const builder = createBuilder(testRoot, ['src']);\n\n expect(builder.getDiagnosticsManifestPath()).toBeUndefined();\n } finally {\n if (previousTargetWorld === undefined) {\n delete process.env.WORKFLOW_TARGET_WORLD;\n } else {\n process.env.WORKFLOW_TARGET_WORLD = previousTargetWorld;\n }\n }\n });\n\n it('falls back to Vercel output diagnostics for the Vercel builder', () => {\n const config: VercelBuildOutputConfig = {\n buildTarget: 'vercel-build-output-api',\n workingDir: testRoot,\n dirs: ['src'],\n stepsBundlePath: join(testRoot, 'steps.js'),\n workflowsBundlePath: join(testRoot, 'workflows.js'),\n webhookBundlePath: join(testRoot, 'webhook.js'),\n };\n const builder = new TestBuilder(config);\n\n expect(builder.getDiagnosticsManifestPath()).toBe(\n join(testRoot, '.vercel/output/diagnostics/workflows-manifest.json')\n );\n });\n});\n"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,uBAAuB,EAGvB,+BAA+B,EAC/B,6CAA6C,GAC9C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EACL,yBAAyB,EACzB,aAAa,EAGb,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GAGpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAElB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export type { WorkflowManifest } from './apply-swc-transform.js';\nexport { applySwcTransform } from './apply-swc-transform.js';\nexport { BaseBuilder } from './base-builder.js';\nexport { createBuildQueue } from './build-queue.js';\nexport {\n createBaseBuilderConfig,\n type DecoratorOptions,\n type DecoratorOptionsWithConfigPath,\n getDecoratorOptionsForDirectory,\n getDecoratorOptionsForDirectoryWithConfigPath,\n} from './config-helpers.js';\nexport { STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER } from './constants.js';\nexport { createDiscoverEntriesPlugin } from './discover-entries-esbuild-plugin.js';\nexport {\n clearModuleSpecifierCache,\n getImportPath,\n type ImportPathResult,\n type ModuleSpecifierResult,\n resolveModuleSpecifier,\n} from './module-specifier.js';\nexport { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js';\nexport {\n createPseudoPackagePlugin,\n PSEUDO_PACKAGES,\n} from './pseudo-package-esbuild-plugin.js';\nexport { NORMALIZE_REQUEST_CODE } from './request-converter.js';\nexport {\n analyzeSerdeCompliance,\n extractClassEntries,\n type SerdeCheckResult,\n type SerdeClassCheckResult,\n} from './serde-checker.js';\nexport { StandaloneBuilder } from './standalone.js';\nexport { createSwcPlugin } from './swc-esbuild-plugin.js';\nexport {\n detectWorkflowPatterns,\n generatedWorkflowPathPattern,\n isGeneratedWorkflowFile,\n shouldTransformFile,\n turbopackContentPattern,\n useStepPattern,\n useWorkflowPattern,\n type WorkflowPatternMatch,\n workflowSerdeImportPattern,\n workflowSerdeSymbolPattern,\n} from './transform-utils.js';\nexport type {\n AstroConfig,\n BuildTarget,\n NextConfig,\n StandaloneConfig,\n SvelteKitConfig,\n VercelBuildOutputConfig,\n WorkflowConfig,\n} from './types.js';\nexport { isValidBuildTarget, validBuildTargets } from './types.js';\nexport { VercelBuildOutputAPIBuilder } from './vercel-build-output-api.js';\nexport { resolveWorkflowAliasRelativePath } from './workflow-alias.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"module-specifier.js","sourceRoot":"","sources":["../src/module-specifier.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, relative, resolve, sep } from 'node:path';\n\n/**\n * Result of resolving a module specifier for a file.\n */\nexport interface ModuleSpecifierResult {\n /**\n * The module specifier to use for ID generation.\n * - For packages: \"{name}@{version}\" or \"{name}/{subpath}@{version}\"\n * (e.g., \"point@1.0.0\", \"@myorg/shared@2.0.0\", \"workflow/internal/builtins@4.0.0\")\n * - For local files: undefined (plugin will use default \"./relative/path\" format)\n */\n moduleSpecifier: string | undefined;\n}\n\n/**\n * Parsed package.json data with directory information.\n */\ninterface PackageInfo {\n name: string;\n version: string;\n dir: string;\n exports?: Record<string, unknown>;\n main?: string;\n module?: string;\n}\n\n/**\n * Cache for package.json lookups to avoid repeated filesystem reads.\n * Maps directory path to parsed package.json info or null if not found.\n */\nconst packageJsonCache = new Map<string, PackageInfo | null>();\n\n/**\n * Find and read the nearest package.json for a given file path.\n * Results are cached for performance.\n */\nfunction findPackageJson(filePath: string): PackageInfo | null {\n let dir = dirname(filePath);\n\n // Track directories we've visited so we can back-fill the cache\n const visitedDirs: string[] = [];\n\n // Walk up the directory tree until we hit the root\n while (dir !== dirname(dir)) {\n // Check cache first\n const cached = packageJsonCache.get(dir);\n if (cached !== undefined) {\n // Back-fill cache for all visited directories with the same result\n for (const visitedDir of visitedDirs) {\n packageJsonCache.set(visitedDir, cached);\n }\n return cached;\n }\n\n visitedDirs.push(dir);\n\n const packageJsonPath = join(dir, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n const content = readFileSync(packageJsonPath, 'utf-8');\n const parsed = JSON.parse(content);\n if (parsed.name && parsed.version) {\n const result: PackageInfo = {\n name: parsed.name,\n version: parsed.version,\n dir,\n exports: parsed.exports,\n main: parsed.main,\n module: parsed.module,\n };\n // Cache the result for this directory and all visited directories\n packageJsonCache.set(dir, result);\n for (const visitedDir of visitedDirs) {\n packageJsonCache.set(visitedDir, result);\n }\n return result;\n }\n } catch {\n // Invalid JSON or missing fields, continue searching\n }\n }\n\n dir = dirname(dir);\n }\n\n // No package.json found - cache null for all visited directories\n for (const visitedDir of visitedDirs) {\n packageJsonCache.set(visitedDir, null);\n }\n\n return null;\n}\n\n/**\n * Resolve the export subpath for a file within a package.\n * Looks up the package.json exports field to find which subpath maps to the file.\n *\n * @param filePath - Absolute path to the file\n * @param pkg - Package info from findPackageJson\n * @returns The subpath (e.g., \"/internal/builtins\") or empty string for root export\n */\nfunction resolveExportSubpath(filePath: string, pkg: PackageInfo): string {\n if (!pkg.exports || typeof pkg.exports !== 'object') {\n return '';\n }\n\n // Get the relative path from package root to the file\n const normalizedFilePath = filePath.replace(/\\\\/g, '/');\n const normalizedPkgDir = pkg.dir.replace(/\\\\/g, '/');\n const relativePath = normalizedFilePath.startsWith(normalizedPkgDir + '/')\n ? './' + normalizedFilePath.substring(normalizedPkgDir.length + 1)\n : null;\n\n if (!relativePath) {\n return '';\n }\n\n // Search through exports to find a matching subpath\n for (const [subpath, target] of Object.entries(pkg.exports)) {\n const resolvedTarget = resolveExportTarget(target);\n if (\n resolvedTarget &&\n normalizeExportPath(resolvedTarget) === relativePath\n ) {\n // Found a match - return the subpath without the leading \".\"\n // e.g., \"./internal/builtins\" -> \"/internal/builtins\"\n return subpath === '.' ? '' : subpath.substring(1);\n }\n }\n\n return '';\n}\n\n/**\n * Resolve an export target to a file path, handling conditional exports and arrays.\n */\nfunction resolveExportTarget(target: unknown): string | null {\n if (typeof target === 'string') {\n return target;\n }\n\n // Handle array exports (fallback chains)\n if (Array.isArray(target)) {\n for (const item of target) {\n const resolved = resolveExportTarget(item);\n if (resolved) return resolved;\n }\n return null;\n }\n\n if (target && typeof target === 'object') {\n // Conditional export - try common conditions in order of preference\n const conditions = ['workflow', 'default', 'require', 'import', 'node'];\n for (const condition of conditions) {\n const value = (target as Record<string, unknown>)[condition];\n if (typeof value === 'string') {\n return value;\n }\n // Handle nested conditionals or arrays\n if (value && typeof value === 'object') {\n const nested = resolveExportTarget(value);\n if (nested) return nested;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Normalize an export path for comparison.\n */\nfunction normalizeExportPath(path: string): string {\n // Ensure it starts with ./\n if (!path.startsWith('./')) {\n return './' + path;\n }\n return path;\n}\n\n/**\n * Check if a file path is inside node_modules.\n */\nfunction isInNodeModules(filePath: string): boolean {\n const normalizedPath = filePath.split(sep).join('/');\n return normalizedPath.includes('/node_modules/');\n}\n\n/**\n * Cache for project dependencies to avoid repeated filesystem reads.\n * Maps project root to set of dependency package names.\n */\nconst projectDepsCache = new Map<string, Set<string>>();\n\n/**\n * Get all dependencies (including devDependencies) for a project.\n */\nfunction getProjectDependencies(projectRoot: string): Set<string> {\n const cached = projectDepsCache.get(projectRoot);\n if (cached) {\n return cached;\n }\n\n const deps = new Set<string>();\n const pkgPath = join(projectRoot, 'package.json');\n\n if (existsSync(pkgPath)) {\n try {\n const content = readFileSync(pkgPath, 'utf-8');\n const parsed = JSON.parse(content);\n\n // Collect all dependency types\n for (const depType of [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ]) {\n const depObj = parsed[depType];\n if (depObj && typeof depObj === 'object') {\n for (const name of Object.keys(depObj)) {\n deps.add(name);\n }\n }\n }\n } catch {\n // Invalid JSON or file not readable\n }\n }\n\n projectDepsCache.set(projectRoot, deps);\n return deps;\n}\n\n/**\n * Check if a file path is inside a workspace package that is a dependency of the project.\n * This is a heuristic - we check if the file is in a directory with a package.json\n * that has a \"name\" field, is NOT in node_modules, and is listed as a dependency\n * of the project.\n */\nfunction isWorkspacePackage(filePath: string, projectRoot: string): boolean {\n if (isInNodeModules(filePath)) {\n return false;\n }\n\n const pkg = findPackageJson(filePath);\n if (!pkg) {\n return false;\n }\n\n // Check if the package.json is not the root package.json\n // Use resolve() to normalize paths for cross-platform comparison\n const rootPkgDir = resolve(projectRoot);\n const pkgDir = resolve(pkg.dir);\n\n // If the package directory is the project root, it's not a workspace package\n if (pkgDir === rootPkgDir) {\n return false;\n }\n\n // Found a package.json that's not the root.\n // Only treat it as a workspace package if it's actually a dependency\n // of the current project. This prevents sibling apps in a monorepo\n // from being incorrectly treated as importable packages.\n const projectDeps = getProjectDependencies(projectRoot);\n return projectDeps.has(pkg.name);\n}\n\n/**\n * Resolve the module specifier for a file.\n *\n * @param filePath - Absolute path to the file being transformed\n * @param projectRoot - Absolute path to the project root (usually process.cwd())\n * @returns The module specifier result\n *\n * @example\n * // File in node_modules (root export)\n * resolveModuleSpecifier('/project/node_modules/point/dist/index.js', '/project')\n * // => { moduleSpecifier: 'point@1.0.0' }\n *\n * @example\n * // File in node_modules (subpath export)\n * resolveModuleSpecifier('/project/node_modules/workflow/dist/internal/builtins.js', '/project')\n * // => { moduleSpecifier: 'workflow/internal/builtins@4.0.0' }\n *\n * @example\n * // File in workspace package\n * resolveModuleSpecifier('/project/packages/shared/src/utils.ts', '/project')\n * // => { moduleSpecifier: '@myorg/shared@0.0.0' }\n *\n * @example\n * // Local app file\n * resolveModuleSpecifier('/project/src/workflows/order.ts', '/project')\n * // => { moduleSpecifier: undefined }\n */\nexport function resolveModuleSpecifier(\n filePath: string,\n projectRoot: string\n): ModuleSpecifierResult {\n // Check if file is in node_modules or a workspace package\n const inNodeModules = isInNodeModules(filePath);\n const inWorkspace =\n !inNodeModules && isWorkspacePackage(filePath, projectRoot);\n\n if (!inNodeModules && !inWorkspace) {\n // Local app file - use default relative path format\n return { moduleSpecifier: undefined };\n }\n\n // Find the package.json for this file\n const pkg = findPackageJson(filePath);\n if (!pkg) {\n // Couldn't find package.json - fall back to default\n return { moduleSpecifier: undefined };\n }\n\n // Resolve the export subpath (e.g., \"/internal/builtins\" for \"workflow/internal/builtins\")\n const subpath = resolveExportSubpath(filePath, pkg);\n\n // Return the module specifier as \"name/subpath@version\" or \"name@version\"\n const specifier = subpath\n ? `${pkg.name}${subpath}@${pkg.version}`\n : `${pkg.name}@${pkg.version}`;\n\n return {\n moduleSpecifier: specifier,\n };\n}\n\n/**\n * Clear the package.json cache. Useful for testing or when package.json files may have changed.\n */\nexport function clearModuleSpecifierCache(): void {\n packageJsonCache.clear();\n projectDepsCache.clear();\n}\n\n/**\n * Convert a file path to a relative import path from project root.\n */\nfunction toRelativeImportPath(filePath: string, projectRoot: string): string {\n const normalizedProjectRoot = projectRoot.replace(/\\\\/g, '/');\n const normalizedFilePath = filePath.replace(/\\\\/g, '/');\n\n let relativePath: string;\n if (normalizedFilePath.startsWith(normalizedProjectRoot + '/')) {\n relativePath = normalizedFilePath.substring(\n normalizedProjectRoot.length + 1\n );\n } else {\n // File is outside project root, use the full path segments after common ancestor\n relativePath = relative(projectRoot, filePath).replace(/\\\\/g, '/');\n }\n\n // Ensure relative paths start with ./\n if (!relativePath.startsWith('.')) {\n relativePath = `./${relativePath}`;\n }\n\n return relativePath;\n}\n\n/**\n * Returns true when package exports include a root entry (\".\").\n * String/array/conditional object exports are all considered root exports.\n */\nfunction hasRootExport(exportsField: unknown): boolean {\n if (typeof exportsField === 'string' || Array.isArray(exportsField)) {\n return true;\n }\n\n if (!exportsField || typeof exportsField !== 'object') {\n return false;\n }\n\n const keys = Object.keys(exportsField as Record<string, unknown>);\n // Conditional exports object (e.g. { \"import\": \"...\", \"default\": \"...\" })\n // represents the root export.\n if (keys.length > 0 && keys.every((key) => !key.startsWith('.'))) {\n return true;\n }\n\n return '.' in (exportsField as Record<string, unknown>);\n}\n\n/**\n * Normalize a package target path to a comparable package-relative path.\n * Returns null for invalid/unsupported paths.\n */\nfunction normalizePackageTargetPath(path: string): string | null {\n const normalized = path.replace(/\\\\/g, '/');\n if (normalized.startsWith('./')) {\n return normalized.substring(2);\n }\n if (normalized.startsWith('/')) {\n return normalized.substring(1);\n }\n return normalized;\n}\n\n/**\n * Returns true if filePath is the package root entrypoint.\n * This checks root exports first, then main/module/index fallbacks when exports are absent.\n */\nfunction isRootEntrypointFile(filePath: string, pkg: PackageInfo): boolean {\n const normalizedFilePath = filePath.replace(/\\\\/g, '/');\n const normalizedPkgDir = pkg.dir.replace(/\\\\/g, '/');\n\n if (!normalizedFilePath.startsWith(normalizedPkgDir + '/')) {\n return false;\n }\n\n const relativeFilePath = normalizedFilePath.substring(\n normalizedPkgDir.length + 1\n );\n\n if (pkg.exports) {\n let rootTarget: unknown;\n\n if (\n typeof pkg.exports === 'object' &&\n !Array.isArray(pkg.exports) &&\n '.' in pkg.exports\n ) {\n rootTarget = (pkg.exports as Record<string, unknown>)['.'];\n } else if (hasRootExport(pkg.exports)) {\n rootTarget = pkg.exports;\n } else {\n return false;\n }\n\n const resolvedTarget = resolveExportTarget(rootTarget);\n if (!resolvedTarget) {\n return false;\n }\n\n const normalizedTarget = normalizePackageTargetPath(resolvedTarget);\n return normalizedTarget === relativeFilePath;\n }\n\n const rootCandidates = [\n pkg.module,\n pkg.main,\n 'index.js',\n 'index.mjs',\n 'index.cjs',\n 'index.ts',\n 'index.mts',\n 'index.cts',\n ]\n .filter((candidate): candidate is string => typeof candidate === 'string')\n .map((candidate) => normalizePackageTargetPath(candidate))\n .filter((candidate): candidate is string => candidate !== null);\n\n return rootCandidates.includes(relativeFilePath);\n}\n\n/**\n * Result of resolving an import path for a file.\n */\nexport interface ImportPathResult {\n /**\n * The import path to use.\n * - For workspace packages: the package name (e.g., \"@myorg/shared\")\n * - For node_modules packages: the package name\n * - For local files: a relative path (e.g., \"./src/workflows/order.ts\")\n */\n importPath: string;\n\n /**\n * Whether this file is from a package (workspace or node_modules).\n * When true, the import should go through package resolution which respects export conditions.\n */\n isPackage: boolean;\n}\n\n/**\n * Get the import path to use for a file in a bundle's virtual entry.\n *\n * For workspace packages and node_modules packages, returns the package name\n * so that bundler resolution will respect package.json exports and conditions.\n *\n * For local app files, returns a relative path.\n *\n * @param filePath - Absolute path to the file\n * @param projectRoot - Absolute path to the project root\n * @returns The import path and whether it's a package\n *\n * @example\n * // Workspace package\n * getImportPath('/project/packages/shared/src/index.ts', '/project')\n * // => { importPath: '@myorg/shared', isPackage: true }\n *\n * @example\n * // Local app file\n * getImportPath('/project/src/workflows/order.ts', '/project')\n * // => { importPath: './src/workflows/order.ts', isPackage: false }\n */\nexport function getImportPath(\n filePath: string,\n projectRoot: string\n): ImportPathResult {\n // Check if file is in node_modules or a workspace package\n const inNodeModules = isInNodeModules(filePath);\n const inWorkspace =\n !inNodeModules && isWorkspacePackage(filePath, projectRoot);\n\n if (inNodeModules || inWorkspace) {\n // Find the package.json for this file\n const pkg = findPackageJson(filePath);\n if (pkg) {\n const isDirectProjectDependency = getProjectDependencies(projectRoot).has(\n pkg.name\n );\n const canUsePackageSpecifier = inWorkspace || isDirectProjectDependency;\n\n // For transitive node_modules dependencies under strict package managers\n // (for example, pnpm), importing by package name can fail. Use a direct\n // file path import in those cases.\n if (!canUsePackageSpecifier) {\n return {\n importPath: toRelativeImportPath(filePath, projectRoot),\n isPackage: false,\n };\n }\n\n // Prefer a package subpath import when this file maps to an export.\n // This preserves the exact module being bundled while still respecting\n // package export conditions.\n // Note: resolveExportSubpath returns \"\" for both root \".\" matches and\n // no match; root entrypoints are intentionally handled below via\n // isRootEntrypointFile().\n const subpath = resolveExportSubpath(filePath, pkg);\n if (subpath) {\n return {\n importPath: `${pkg.name}${subpath}`,\n isPackage: true,\n };\n }\n\n // Only import package root when this file is the root entrypoint.\n // For deep/internal files, fall back to direct relative imports so we\n // don't accidentally import a non-existent or different module.\n if (!isRootEntrypointFile(filePath, pkg)) {\n return {\n importPath: toRelativeImportPath(filePath, projectRoot),\n isPackage: false,\n };\n }\n\n return {\n importPath: pkg.name,\n isPackage: true,\n };\n }\n }\n\n // Local app file - use relative path\n return {\n importPath: toRelativeImportPath(filePath, projectRoot),\n isPackage: false,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"module-specifier.test.js","sourceRoot":"","sources":["../src/module-specifier.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport { afterEach, beforeEach, describe, expect, it } from 'vitest';\nimport {\n clearModuleSpecifierCache,\n getImportPath,\n resolveModuleSpecifier,\n} from './module-specifier.js';\n\nfunction writeJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, JSON.stringify(value, null, 2), 'utf-8');\n}\n\nfunction writeFile(path: string, contents = ''): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, contents, 'utf-8');\n}\n\ndescribe('getImportPath', () => {\n let testRoot: string;\n\n beforeEach(() => {\n clearModuleSpecifierCache();\n testRoot = mkdtempSync(join(tmpdir(), 'workflow-module-specifier-'));\n });\n\n afterEach(() => {\n clearModuleSpecifierCache();\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n it('uses package subpath import when file matches an export subpath', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const workspacePkgDir = join(testRoot, 'packages/agent');\n const filePath = join(workspacePkgDir, 'src/server.ts');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@internal/agent': 'workspace:*' },\n });\n\n writeJson(join(workspacePkgDir, 'package.json'), {\n name: '@internal/agent',\n version: '1.0.0',\n exports: {\n './server': './src/server.ts',\n },\n });\n\n writeFile(filePath, `'use step';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '@internal/agent/server',\n isPackage: true,\n });\n });\n\n it('falls back to relative import when package has no root export', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const workspacePkgDir = join(testRoot, 'packages/agent');\n const filePath = join(workspacePkgDir, 'src/server.ts');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@internal/agent': 'workspace:*' },\n });\n\n writeJson(join(workspacePkgDir, 'package.json'), {\n name: '@internal/agent',\n version: '1.0.0',\n exports: {\n './server': './dist/server.js',\n },\n });\n\n writeFile(filePath, `'use step';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '../../packages/agent/src/server.ts',\n isPackage: false,\n });\n });\n\n it('uses package root import for root exports', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const workspacePkgDir = join(testRoot, 'packages/agent');\n const filePath = join(workspacePkgDir, 'src/index.ts');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@internal/agent': 'workspace:*' },\n });\n\n writeJson(join(workspacePkgDir, 'package.json'), {\n name: '@internal/agent',\n version: '1.0.0',\n exports: {\n '.': './src/index.ts',\n },\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '@internal/agent',\n isPackage: true,\n });\n });\n\n it('uses package root import when package module points to file', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const workspacePkgDir = join(testRoot, 'packages/agent');\n const filePath = join(workspacePkgDir, 'src/index.mjs');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@internal/agent': 'workspace:*' },\n });\n\n writeJson(join(workspacePkgDir, 'package.json'), {\n name: '@internal/agent',\n version: '1.0.0',\n module: './src/index.mjs',\n main: './dist/index.cjs',\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '@internal/agent',\n isPackage: true,\n });\n });\n\n it('uses package root import for conditional root exports', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const workspacePkgDir = join(testRoot, 'packages/agent');\n const filePath = join(workspacePkgDir, 'src/index.js');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@internal/agent': 'workspace:*' },\n });\n\n writeJson(join(workspacePkgDir, 'package.json'), {\n name: '@internal/agent',\n version: '1.0.0',\n exports: {\n '.': {\n import: './src/index.mjs',\n default: './src/index.js',\n },\n },\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '@internal/agent',\n isPackage: true,\n });\n });\n\n it('falls back to relative import for deep files in packages without exports', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const workspacePkgDir = join(testRoot, 'packages/agent');\n const filePath = join(workspacePkgDir, 'lib/tools/dynamic/workflow.ts');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@internal/agent': 'workspace:*' },\n });\n\n writeJson(join(workspacePkgDir, 'package.json'), {\n name: '@internal/agent',\n version: '1.0.0',\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '../../packages/agent/lib/tools/dynamic/workflow.ts',\n isPackage: false,\n });\n });\n\n it('uses package root import when package main points to file', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const workspacePkgDir = join(testRoot, 'packages/agent');\n const filePath = join(workspacePkgDir, 'src/index.ts');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@internal/agent': 'workspace:*' },\n });\n\n writeJson(join(workspacePkgDir, 'package.json'), {\n name: '@internal/agent',\n version: '1.0.0',\n main: './src/index.ts',\n });\n\n writeFile(filePath, `'use step';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '@internal/agent',\n isPackage: true,\n });\n });\n\n it('uses package subpath import for direct node_modules dependencies', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const packageDir = join(testRoot, 'apps/chat/node_modules/@workflow/core');\n const filePath = join(packageDir, 'dist/serialization.js');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { '@workflow/core': '1.0.0' },\n });\n\n writeJson(join(packageDir, 'package.json'), {\n name: '@workflow/core',\n version: '1.0.0',\n exports: {\n './serialization': './dist/serialization.js',\n },\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: '@workflow/core/serialization',\n isPackage: true,\n });\n });\n\n it('falls back to relative import for transitive node_modules dependencies', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const packageDir = join(testRoot, 'apps/chat/node_modules/@workflow/core');\n const filePath = join(packageDir, 'dist/serialization.js');\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { workflow: '1.0.0' },\n });\n\n writeJson(join(packageDir, 'package.json'), {\n name: '@workflow/core',\n version: '1.0.0',\n exports: {\n './serialization': './dist/serialization.js',\n },\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(getImportPath(filePath, projectRoot)).toEqual({\n importPath: './node_modules/@workflow/core/dist/serialization.js',\n isPackage: false,\n });\n });\n\n it('treats a workspace package file as local when projectRoot is the package itself', () => {\n const projectRoot = join(testRoot, 'packages/vade');\n const filePath = join(\n projectRoot,\n 'src/internal/message/workflow/handle-message.ts'\n );\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'vade',\n version: '0.0.0',\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(resolveModuleSpecifier(filePath, projectRoot)).toEqual({\n moduleSpecifier: undefined,\n });\n });\n\n it('uses the consuming app root to resolve workspace package workflow ids', () => {\n const projectRoot = join(testRoot, 'apps/chat');\n const packageDir = join(testRoot, 'packages/vade');\n const filePath = join(\n packageDir,\n 'src/internal/message/workflow/handle-message.ts'\n );\n\n writeJson(join(projectRoot, 'package.json'), {\n name: 'chat',\n dependencies: { vade: 'workspace:*' },\n });\n\n writeJson(join(packageDir, 'package.json'), {\n name: 'vade',\n version: '0.0.0',\n });\n\n writeFile(filePath, `'use workflow';\\n`);\n\n expect(resolveModuleSpecifier(filePath, projectRoot)).toEqual({\n moduleSpecifier: 'vade@0.0.0',\n });\n });\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-module-esbuild-plugin.js","sourceRoot":"","sources":["../src/node-module-esbuild-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { normalize, relative, resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport { ERROR_SLUGS } from '@workflow/errors';\nimport builtinModules from 'builtin-modules';\nimport enhancedResolveOriginal from 'enhanced-resolve';\nimport type * as esbuild from 'esbuild';\n\nconst enhancedResolve = promisify(enhancedResolveOriginal);\n\n// Match exact Node.js built-in module names:\n// - \"fs\", \"path\", \"stream\" etc. (exact match)\n// - \"node:fs\", \"node:path\" etc. (with node: prefix)\n// But NOT \"some-package/stream\" or \"eventsource-parser/stream\"\nconst nodeModulesPattern = `(${builtinModules.join('|')})`;\n\n// Match Bun modules:\n// - \"bun\" (exact match)\n// - \"bun:sqlite\", \"bun:ffi\" etc. (with bun: prefix)\nconst bunModulesRegex = /^bun(:|$)/;\n\n// Combined regex for both Node.js and Bun modules\nconst runtimeModulesRegex = new RegExp(\n `^((node:)?${nodeModulesPattern}|bun(:.*)?)$`\n);\n\ntype PackageViolation = {\n packageName: string;\n importer: string;\n path: string;\n location: Partial<esbuild.Location>;\n};\n\n/**\n * Get the package name from a file path.\n * @param filePath - The file path to get the package name from.\n * @returns The package name.\n */\nexport function getPackageName(filePath: string) {\n const normalized = filePath.replace(/\\\\/g, '/');\n const marker = '/node_modules/';\n const idx = normalized.lastIndexOf(marker);\n if (idx === -1) return null;\n\n const after = normalized.slice(idx + marker.length); // e.g. \".pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/index.js\"\n const segments = after.split('/');\n if (!segments.length) return null;\n\n let packageName = segments[0];\n\n // pnpm nests: \".pnpm/<pkg>@<version>/node_modules/<pkg>/...\"\n if (packageName === '.pnpm' && segments.length >= 3) {\n packageName = segments[2];\n } else if (packageName.startsWith('@') && segments.length >= 2) {\n packageName = `${segments[0]}/${segments[1]}`;\n }\n\n return packageName;\n}\n\n/**\n * Get the package name from an import specifier.\n * @param specifier - The import specifier to parse.\n * @returns The package name (for bare package imports), otherwise null.\n */\nfunction getPackageNameFromSpecifier(specifier: string) {\n // Not a bare package specifier (relative, absolute, or URL-like)\n if (\n !specifier ||\n specifier.startsWith('.') ||\n specifier.startsWith('/') ||\n /^[A-Za-z]:[\\\\/]/.test(specifier)\n ) {\n return null;\n }\n\n // Ignore runtime built-ins and URL-like specifiers\n if (\n runtimeModulesRegex.test(specifier) ||\n specifier.includes('://') ||\n specifier.startsWith('#')\n ) {\n return null;\n }\n\n const normalized = specifier.replace(/\\\\/g, '/');\n if (normalized.startsWith('@')) {\n const [scope, name] = normalized.split('/');\n if (!scope || !name) {\n return null;\n }\n return `${scope}/${name}`;\n }\n\n const [name] = normalized.split('/');\n return name ?? null;\n}\n\n/**\n * Escape a regular expression string.\n * @param value - The string to escape.\n * @returns The escaped string.\n */\nexport function escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Get the imported identifier from a specifier.\n * @param specifier - The specifier to get the imported identifier from.\n * @returns The imported identifier.\n */\nexport function getImportedIdentifier(specifier: string) {\n const namespaceMatch = specifier.match(/\\*\\s+as\\s+([A-Za-z0-9_$]+)/);\n if (namespaceMatch) {\n return namespaceMatch[1];\n }\n\n if (specifier.includes('{')) {\n const inside = specifier.replace(/^[^{]*\\{/, '').replace(/\\}.*$/, '');\n const firstNamed = inside\n .split(',')\n .map((token) => token.trim())\n .find(Boolean);\n\n if (firstNamed) {\n const aliasMatch = firstNamed.match(\n /([A-Za-z0-9_$]+)\\s+as\\s+([A-Za-z0-9_$]+)/\n );\n if (aliasMatch) {\n return aliasMatch[2];\n }\n // Validate that firstNamed is a valid identifier (not empty braces or whitespace)\n const identifierMatch = firstNamed.match(/^[A-Za-z_$][A-Za-z0-9_$]*/);\n if (identifierMatch) {\n return identifierMatch[0];\n }\n }\n // Empty braces or no valid identifier found - return undefined\n return undefined;\n }\n\n const defaultPart = specifier.split(',')[0]?.trim();\n if (defaultPart && defaultPart !== '*') {\n return defaultPart;\n }\n}\n\n/**\n * Find the usage of an identifier in a list of lines.\n * @param lines - The list of lines to search in.\n * @param startIndex - The index to start searching from.\n * @param identifier - The identifier to search for.\n * @returns The usage of the identifier.\n */\nfunction findIdentifierUsage(\n lines: string[],\n startIndex: number,\n identifier: string\n) {\n const usageRegex = new RegExp(`\\\\b${escapeRegExp(identifier)}\\\\b`);\n let inBlockComment = false;\n\n for (let i = startIndex; i < lines.length; i += 1) {\n // Strip string literals first so that comment delimiters inside strings\n // (e.g. `const s = \"/*\";`) don't confuse the comment scanner.\n const stringsStripped = lines[i]\n .replace(/'(?:[^'\\\\]|\\\\.)*'/g, (s) => ' '.repeat(s.length))\n .replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, (s) => ' '.repeat(s.length))\n .replace(/`(?:[^`\\\\]|\\\\.)*`/g, (s) => ' '.repeat(s.length));\n\n let line = stringsStripped;\n\n // Handle multi-line block comments (including JSDoc)\n if (inBlockComment) {\n const endIdx = line.indexOf('*/');\n if (endIdx === -1) {\n continue;\n }\n line = ' '.repeat(endIdx + 2) + line.slice(endIdx + 2);\n inBlockComment = false;\n }\n\n // Scan for comments, replacing them with spaces\n let processed = '';\n let j = 0;\n while (j < line.length) {\n if (line[j] === '/' && line[j + 1] === '/') {\n processed += ' '.repeat(line.length - j);\n break;\n }\n if (line[j] === '/' && line[j + 1] === '*') {\n const endIdx = line.indexOf('*/', j + 2);\n if (endIdx !== -1) {\n const len = endIdx + 2 - j;\n processed += ' '.repeat(len);\n j = endIdx + 2;\n } else {\n processed += ' '.repeat(line.length - j);\n inBlockComment = true;\n break;\n }\n } else {\n processed += line[j];\n j += 1;\n }\n }\n\n const match = processed.match(usageRegex);\n if (match && match.index !== undefined) {\n return {\n line: i,\n column: match.index,\n lineText: lines[i],\n };\n }\n }\n}\n\n/**\n * Get the location of a violation.\n * @param cwd - The current working directory.\n * @param relativePath - The relative path to the file.\n * @param packageName - The name of the package.\n * @returns The location of the violation.\n */\nexport async function getViolationLocation(\n cwd: string,\n relativePath: string,\n packageName: string\n) {\n try {\n const absolutePath = resolve(cwd, relativePath);\n const contents = await readFile(absolutePath, 'utf8');\n const lines = contents.split(/\\r?\\n/);\n\n const importRegex = new RegExp(\n `import\\\\s+(.+?)\\\\s+from\\\\s+['\"]${escapeRegExp(packageName)}(?:/[^'\"]*)?['\"]`\n );\n\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i];\n const importMatch = line.match(importRegex);\n\n if (importMatch && importMatch.index !== undefined) {\n const specifier = importMatch[1].trim();\n const identifier = getImportedIdentifier(specifier);\n if (identifier) {\n const usage = findIdentifierUsage(lines, i + 1, identifier);\n if (usage) {\n return {\n file: relativePath,\n line: usage.line + 1,\n column: usage.column,\n lineText: usage.lineText,\n length: identifier.length,\n };\n }\n\n // Identifier exists but is never referenced; surface no location\n return undefined;\n }\n\n // Fallback: if we can't extract identifier, point to package name\n const columnIndex = line.indexOf(packageName);\n if (columnIndex !== -1) {\n return {\n file: relativePath,\n line: i + 1,\n column: columnIndex,\n lineText: line,\n length: packageName.length,\n };\n }\n }\n }\n } catch {\n // ignore file read failures, fallback to no location info\n }\n}\n\n/**\n * Get the module type label for error messages.\n * @param modulePath - The module path to check.\n * @returns The module type label.\n */\nfunction getModuleTypeLabel(modulePath: string): string {\n if (bunModulesRegex.test(modulePath)) {\n return 'Bun';\n }\n return 'Node.js';\n}\n\n/**\n * Create an esbuild plugin to detect violations of the Node.js module usage rule.\n * This plugin prevents workflow functions from importing Node.js or Bun built-in\n * modules, which are not available in the sandboxed workflow runtime.\n */\nexport function createNodeModuleErrorPlugin(): esbuild.Plugin {\n return {\n name: 'workflow-node-module-error',\n setup(build) {\n const cwd = process.cwd();\n const importParents = new Map<string, string>();\n const packageViolations: PackageViolation[] = [];\n const seenViolations = new Set<string>();\n\n // Track ALL import relationships to build the dependency graph.\n // This is necessary to trace transitive dependencies back to user code.\n // Performance impact is minimal as we only store path mappings.\n build.onResolve({ filter: /.*/ }, async (args) => {\n if (!args.importer) return null;\n\n const parentValue = normalize(args.importer);\n const specifierPackageName = getPackageNameFromSpecifier(args.path);\n\n try {\n const resolvedChild = await enhancedResolve(\n args.resolveDir,\n args.path\n );\n\n if (resolvedChild) {\n const childKey = normalize(resolvedChild);\n importParents.set(childKey, parentValue);\n\n // Record the resolved package edge so transitive builtin usage can\n // still trace back even when esbuild and enhanced-resolve pick\n // different entry files (e.g. `module` vs `main`).\n const resolvedPackageName = getPackageName(childKey);\n if (resolvedPackageName) {\n importParents.set(resolvedPackageName, parentValue);\n }\n }\n\n // Also preserve the bare package-specifier edge (e.g. \"postgres\"),\n // which is the fallback key used when tracing from files in\n // node_modules back to user code.\n if (specifierPackageName) {\n importParents.set(specifierPackageName, parentValue);\n }\n } catch {\n // For built-in modules that can't be resolved, still track using the import path\n const childKey = args.path;\n importParents.set(childKey, parentValue);\n\n if (specifierPackageName) {\n importParents.set(specifierPackageName, parentValue);\n }\n }\n return null;\n });\n\n // Detect Node.js and Bun module imports\n build.onResolve({ filter: runtimeModulesRegex }, async (args) => {\n const importerPath = resolve(cwd, args.importer);\n let current = importerPath;\n const chain: string[] = [];\n const visited = new Set<string>();\n while (current) {\n if (visited.has(current)) {\n break;\n }\n visited.add(current);\n chain.push(current);\n let next = importParents.get(current);\n\n // If we can't find the parent and current is in node_modules,\n // try looking up by potential package import strings\n if (!next && current.includes('node_modules')) {\n const packageName = getPackageName(current);\n if (packageName) {\n // Try the package name directly\n next = importParents.get(packageName);\n if (!next) {\n // Try with node: prefix\n next = importParents.get(`node:${packageName}`);\n }\n }\n }\n\n current = next ?? '';\n }\n const filteredChain = chain.filter(\n (path) => !path.includes('node_modules')\n );\n\n const workflowFile = filteredChain[0] ?? importerPath;\n\n if (!workflowFile || workflowFile.includes('node_modules')) {\n return {\n path: args.path,\n external: true,\n };\n }\n\n const packageName = importerPath.includes('node_modules')\n ? (getPackageName(importerPath) ?? args.path)\n : args.path;\n\n const relativeWorkflowFile = relative(cwd, workflowFile);\n const violationKey = `${packageName}:${relativeWorkflowFile}`;\n\n if (!seenViolations.has(violationKey)) {\n seenViolations.add(violationKey);\n const location = await getViolationLocation(\n cwd,\n relativeWorkflowFile,\n packageName\n );\n // Only report violations where we can find the import location.\n // If we can't find it, the package is likely a transitive dependency\n // that the user didn't directly import - we'll report the top-level\n // package they did import instead.\n if (location) {\n packageViolations.push({\n path: args.path,\n importer: relativeWorkflowFile,\n packageName,\n location,\n });\n }\n }\n\n return {\n path: args.path,\n external: true,\n };\n });\n\n // Report all violations at the end of the build\n build.onEnd(() => {\n if (packageViolations.length > 0) {\n return {\n errors: packageViolations.map((violation) => {\n const isBuiltinModule = runtimeModulesRegex.test(\n violation.packageName\n );\n const moduleType = getModuleTypeLabel(violation.path);\n\n // Different messages for built-in modules vs npm packages that use them\n const text = isBuiltinModule\n ? `You are attempting to use \"${violation.packageName}\" which is a ${moduleType} module. ${moduleType} modules are not available in workflow functions.\\n\\nLearn more: https://workflow-sdk.dev/err/${ERROR_SLUGS.NODE_JS_MODULE_IN_WORKFLOW}`\n : `You are attempting to use \"${violation.packageName}\" which depends on ${moduleType} modules. Packages that depend on ${moduleType} modules are not available in workflow functions.\\n\\nLearn more: https://workflow-sdk.dev/err/${ERROR_SLUGS.NODE_JS_MODULE_IN_WORKFLOW}`;\n\n return {\n text,\n location: violation.location\n ? {\n ...violation.location,\n suggestion: 'Move this function into a step function.',\n }\n : undefined,\n };\n }),\n };\n }\n });\n },\n };\n}\n"]}