@workflow/builders 4.0.5 → 4.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base-builder.d.ts +23 -4
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +121 -7
- package/dist/base-builder.js.map +1 -1
- package/dist/discover-entries-esbuild-plugin.d.ts +5 -3
- package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
- package/dist/discover-entries-esbuild-plugin.js +30 -7
- package/dist/discover-entries-esbuild-plugin.js.map +1 -1
- package/dist/external-package-warning.test.d.ts +2 -0
- package/dist/external-package-warning.test.d.ts.map +1 -0
- package/dist/external-package-warning.test.js +219 -0
- package/dist/external-package-warning.test.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/request-converter.d.ts +2 -1
- package/dist/request-converter.d.ts.map +1 -1
- package/dist/request-converter.js +19 -1
- package/dist/request-converter.js.map +1 -1
- package/dist/request-converter.test.d.ts +2 -0
- package/dist/request-converter.test.d.ts.map +1 -0
- package/dist/request-converter.test.js +28 -0
- package/dist/request-converter.test.js.map +1 -0
- package/dist/swc-esbuild-plugin.d.ts +9 -0
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +24 -1
- package/dist/swc-esbuild-plugin.js.map +1 -1
- package/dist/swc-esbuild-plugin.test.js +184 -0
- package/dist/swc-esbuild-plugin.test.js.map +1 -1
- package/dist/vercel-build-output-api.d.ts.map +1 -1
- package/dist/vercel-build-output-api.js +3 -0
- package/dist/vercel-build-output-api.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swc-esbuild-plugin.js","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { relative } from 'node:path';\nimport { promisify } from 'node:util';\nimport enhancedResolveOrig from 'enhanced-resolve';\nimport type { Plugin } from 'esbuild';\nimport {\n applySwcTransform,\n type WorkflowManifest,\n} from './apply-swc-transform.js';\nimport {\n jsTsRegex,\n parentHasChild,\n} from './discover-entries-esbuild-plugin.js';\nimport { resolveWorkflowAliasRelativePath } from './workflow-alias.js';\n\nexport interface SwcPluginOptions {\n mode: 'step' | 'workflow' | 'client';\n entriesToBundle?: string[];\n outdir?: string;\n projectRoot?: string;\n workflowManifest?: WorkflowManifest;\n /**\n * Rewrite TypeScript extensions (.ts, .tsx, .mts, .cts) to their JS\n * equivalents (.js, .mjs, .cjs) in externalized import paths.\n *\n * Enable this when the output bundle is consumed directly by Node's native\n * ESM loader (e.g. vitest), which cannot resolve .ts extensions.\n *\n * Leave disabled (default) when a downstream bundler (webpack, Vite, etc.)\n * handles resolution — those tools resolve .ts natively and rewriting\n * breaks them because the .js file doesn't exist on disk.\n */\n rewriteTsExtensions?: boolean;\n /**\n * Absolute file paths of discovered workflow/step/serde entries whose\n * imports must be treated as side-effectful.\n *\n * The SWC compiler transform injects registration calls (workflow IDs,\n * step IDs, class serialization, etc.) into these files. Without this\n * override, esbuild honours `\"sideEffects\": false` from the package's\n * `package.json` and silently drops bare imports of these modules.\n */\n sideEffectEntries?: string[];\n}\n\nconst NODE_RESOLVE_OPTIONS = {\n dependencyType: 'commonjs',\n modules: ['node_modules'],\n exportsFields: ['exports'],\n importsFields: ['imports'],\n conditionNames: ['node', 'require'],\n descriptionFiles: ['package.json'],\n extensions: [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.cjs',\n '.mjs',\n '.js',\n '.jsx',\n '.json',\n '.node',\n ],\n enforceExtensions: false,\n symlinks: true,\n mainFields: ['main'],\n mainFiles: ['index'],\n roots: [],\n fullySpecified: false,\n preferRelative: false,\n preferAbsolute: false,\n restrictions: [],\n};\n\nconst NODE_ESM_RESOLVE_OPTIONS = {\n ...NODE_RESOLVE_OPTIONS,\n dependencyType: 'esm',\n conditionNames: ['node', 'import'],\n};\n\nexport function createSwcPlugin(options: SwcPluginOptions): Plugin {\n return {\n name: 'swc-workflow-plugin',\n setup(build) {\n // everything is external unless explicitly configured\n // to be bundled\n const cjsResolver = promisify(\n enhancedResolveOrig.create(NODE_RESOLVE_OPTIONS)\n );\n const esmResolver = promisify(\n enhancedResolveOrig.create(NODE_ESM_RESOLVE_OPTIONS)\n );\n\n const enhancedResolve = async (context: string, path: string) => {\n try {\n return await esmResolver(context, path);\n } catch (_) {\n return cjsResolver(context, path);\n }\n };\n\n // Pre-compute the normalized side-effect entries set for O(1) lookups.\n const normalizedSideEffectEntries = new Set(\n options.sideEffectEntries?.map((e) => e.replace(/\\\\/g, '/'))\n );\n\n build.onResolve({ filter: /.*/ }, async (args) => {\n if (args.pluginData?.skipSwcPlugin) return null;\n\n if (\n !options.entriesToBundle &&\n normalizedSideEffectEntries.size === 0\n ) {\n return null;\n }\n\n // When only sideEffectEntries is set (no entriesToBundle), we only\n // need to override sideEffects for top-level bare imports — typically\n // from the virtual entry. Skip resolution for transitive imports\n // (dynamic imports, requires, etc.) to avoid unnecessary overhead.\n if (!options.entriesToBundle && args.kind !== 'import-statement') {\n return null;\n }\n\n try {\n const specifier = args.path;\n const specifierIsPath =\n specifier.startsWith('.') || specifier.startsWith('/');\n\n let resolvedPath: string | false | undefined;\n // Determines whether the external path should be relativized\n // (project-local file) or kept as a bare specifier (npm package).\n let shouldMakeRelative = specifierIsPath;\n\n if (specifierIsPath) {\n resolvedPath = await enhancedResolve(args.resolveDir, specifier);\n } else {\n // Resolve from project root so nested deps aren't externalized\n resolvedPath = await enhancedResolve(\n build.initialOptions.absWorkingDir || process.cwd(),\n specifier\n ).catch(() => undefined); // swallow so esbuild fallback below can try\n\n // Fall back to esbuild for aliases/tsconfig paths,\n // but only accept project-local results\n if (!resolvedPath) {\n const esbuildResult = await build.resolve(specifier, {\n resolveDir: args.resolveDir,\n kind: args.kind,\n pluginData: { skipSwcPlugin: true },\n });\n const didResolve =\n !!esbuildResult.path && !esbuildResult.errors.length;\n const isProjectLocalFile =\n didResolve &&\n !esbuildResult.external &&\n !esbuildResult.path\n .replace(/\\\\/g, '/')\n .includes('/node_modules/');\n if (isProjectLocalFile) {\n resolvedPath = esbuildResult.path;\n shouldMakeRelative = true;\n }\n }\n }\n\n if (!resolvedPath) return null;\n\n // Normalize to forward slashes for cross-platform comparison\n const normalizedResolvedPath = resolvedPath.replace(/\\\\/g, '/');\n\n // Check if this module is a discovered entry whose SWC-transformed\n // code contains side effects (workflow/step/class registration).\n // Override the package.json \"sideEffects\": false so esbuild does not\n // drop bare imports of these modules.\n const hasSideEffects = normalizedSideEffectEntries.has(\n normalizedResolvedPath\n );\n\n if (options.entriesToBundle) {\n let shouldBundle = false;\n for (const entryToBundle of options.entriesToBundle) {\n const normalizedEntry = entryToBundle.replace(/\\\\/g, '/');\n\n if (normalizedResolvedPath === normalizedEntry) {\n shouldBundle = true;\n break;\n }\n\n // if the current entry imports a child that needs\n // to be bundled then it needs to also be bundled so\n // that the child can have our transform applied\n if (parentHasChild(normalizedResolvedPath, normalizedEntry)) {\n shouldBundle = true;\n break;\n }\n }\n\n if (shouldBundle) {\n // Let esbuild bundle this entry, but override sideEffects if needed.\n // We must return the resolved `path` alongside `sideEffects` because\n // returning only `{ sideEffects: true }` without a path causes esbuild\n // to fall through to its own resolver, which re-reads the package.json\n // and applies `\"sideEffects\": false` from there.\n return hasSideEffects\n ? { path: resolvedPath, sideEffects: true }\n : null;\n }\n\n let externalPath: string;\n if (shouldMakeRelative) {\n externalPath = relative(\n options.outdir || process.cwd(),\n resolvedPath\n ).replace(/\\\\/g, '/');\n\n if (options.rewriteTsExtensions) {\n // Rewrite TypeScript extensions to their JS equivalents so the\n // externalized import is loadable by Node's native ESM loader.\n externalPath = externalPath\n .replace(/\\.tsx?$/, '.js')\n .replace(/\\.mts$/, '.mjs')\n .replace(/\\.cts$/, '.cjs');\n }\n } else {\n externalPath = specifier;\n }\n\n return {\n external: true,\n path: externalPath,\n sideEffects: hasSideEffects || undefined,\n };\n }\n\n // No entriesToBundle — only override sideEffects when needed.\n // We must return the resolved `path` alongside `sideEffects` because\n // returning only `{ sideEffects: true }` without a path causes esbuild\n // to fall through to its own resolver, which re-reads the package.json\n // and applies `\"sideEffects\": false` from there.\n return hasSideEffects\n ? { path: resolvedPath, sideEffects: true }\n : null;\n } catch (_) {}\n return null;\n });\n\n // Handle TypeScript and JavaScript files\n build.onLoad({ filter: jsTsRegex }, async (args) => {\n // Determine if this is a TypeScript file\n try {\n // Determine the loader based on the output\n let loader: 'js' | 'jsx' | 'tsx' = 'js';\n if (args.path.endsWith('.jsx')) {\n loader = 'jsx';\n } else if (args.path.endsWith('.tsx')) {\n loader = 'tsx';\n }\n const source = await readFile(args.path, 'utf8');\n const normalizedSource = source\n .replace(/require\\(\\s*(['\"])server-only\\1\\s*\\)/g, 'void 0')\n .replace(/require\\(\\s*(['\"])client-only\\1\\s*\\)/g, 'void 0');\n\n // Calculate relative path for SWC plugin\n // The filename parameter is used to generate workflowId/stepId, so it must be relative\n const workingDir =\n build.initialOptions.absWorkingDir || process.cwd();\n const projectRoot = options.projectRoot || workingDir;\n // Normalize paths: convert backslashes to forward slashes and remove trailing slashes\n const normalizedWorkingDir = workingDir\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedPath = args.path.replace(/\\\\/g, '/');\n\n // Windows fix: Always do case-insensitive path comparison as the PRIMARY logic\n // to work around node:path.relative() not recognizing paths with different drive\n // letter casing (e.g., D: vs d:) as being in the same tree\n const lowerWd = normalizedWorkingDir.toLowerCase();\n const lowerPath = normalizedPath.toLowerCase();\n\n let relativeFilepath: string;\n if (lowerPath.startsWith(lowerWd + '/')) {\n // File is under working directory - manually calculate relative path\n // This ensures we get a relative path even with drive letter casing issues\n relativeFilepath = normalizedPath.substring(\n normalizedWorkingDir.length + 1\n );\n } else if (lowerPath === lowerWd) {\n // File IS the working directory\n relativeFilepath = '.';\n } else {\n // File is outside working directory - use relative() and strip ../ prefixes if needed\n relativeFilepath = relative(\n normalizedWorkingDir,\n normalizedPath\n ).replace(/\\\\/g, '/');\n\n // Handle files discovered outside the working directory\n // These come back as ../path/to/file, but we want just path/to/file\n if (relativeFilepath.startsWith('../')) {\n const aliasedRelativePath =\n await resolveWorkflowAliasRelativePath(args.path, workingDir);\n if (aliasedRelativePath) {\n relativeFilepath = aliasedRelativePath;\n } else {\n relativeFilepath = relativeFilepath\n .split('/')\n .filter((part) => part !== '..')\n .join('/');\n }\n }\n }\n\n // Final safety check - ensure we never pass an absolute path to SWC\n if (\n relativeFilepath.includes(':') ||\n relativeFilepath.startsWith('/')\n ) {\n // This should never happen, but if it does, use just the filename as last resort\n console.error(\n `[ERROR] relativeFilepath is still absolute: ${relativeFilepath}`\n );\n relativeFilepath = normalizedPath.split('/').pop() || 'unknown.ts';\n }\n\n const { code: transformedCode, workflowManifest } =\n await applySwcTransform(\n relativeFilepath,\n normalizedSource,\n options.mode,\n args.path, // Pass absolute path for module specifier resolution\n projectRoot\n );\n\n if (!options.workflowManifest) {\n options.workflowManifest = {};\n }\n\n options.workflowManifest.workflows = Object.assign(\n options.workflowManifest.workflows || {},\n workflowManifest.workflows\n );\n options.workflowManifest.steps = Object.assign(\n options.workflowManifest.steps || {},\n workflowManifest.steps\n );\n options.workflowManifest.classes = Object.assign(\n options.workflowManifest.classes || {},\n workflowManifest.classes\n );\n\n return {\n contents: transformedCode,\n loader,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n console.error(\n `❌ SWC transform error in ${args.path}:`,\n errorMessage\n );\n return {\n errors: [\n {\n text: `SWC transform failed: ${errorMessage}`,\n location: { file: args.path, line: 0, column: 0 },\n },\n ],\n };\n }\n });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.js","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { relative } from 'node:path';\nimport { promisify } from 'node:util';\nimport enhancedResolveOrig from 'enhanced-resolve';\nimport type { Plugin } from 'esbuild';\nimport {\n applySwcTransform,\n type WorkflowManifest,\n} from './apply-swc-transform.js';\nimport {\n jsTsRegex,\n parentHasChild,\n} from './discover-entries-esbuild-plugin.js';\nimport { resolveModuleSpecifier } from './module-specifier.js';\nimport { resolveWorkflowAliasRelativePath } from './workflow-alias.js';\n\nexport interface SwcPluginOptions {\n mode: 'step' | 'workflow' | 'client';\n entriesToBundle?: string[];\n outdir?: string;\n projectRoot?: string;\n workflowManifest?: WorkflowManifest;\n /**\n * Rewrite TypeScript extensions (.ts, .tsx, .mts, .cts) to their JS\n * equivalents (.js, .mjs, .cjs) in externalized import paths.\n *\n * Enable this when the output bundle is consumed directly by Node's native\n * ESM loader (e.g. vitest), which cannot resolve .ts extensions.\n *\n * Leave disabled (default) when a downstream bundler (webpack, Vite, etc.)\n * handles resolution — those tools resolve .ts natively and rewriting\n * breaks them because the .js file doesn't exist on disk.\n */\n rewriteTsExtensions?: boolean;\n /**\n * Bundle project-local files that are transitively imported by step entries.\n *\n * Keep this disabled when a downstream bundler consumes the generated step\n * bundle because that bundler can resolve the externalized local imports.\n * Enable it for direct runtime loading, where Node imports the generated step\n * bundle from disk without a later bundling pass.\n */\n bundleTransitiveLocalStepDependencies?: boolean;\n /**\n * Absolute file paths of discovered workflow/step/serde entries whose\n * imports must be treated as side-effectful.\n *\n * The SWC compiler transform injects registration calls (workflow IDs,\n * step IDs, class serialization, etc.) into these files. Without this\n * override, esbuild honours `\"sideEffects\": false` from the package's\n * `package.json` and silently drops bare imports of these modules.\n */\n sideEffectEntries?: string[];\n}\n\nconst NODE_RESOLVE_OPTIONS = {\n dependencyType: 'commonjs',\n modules: ['node_modules'],\n exportsFields: ['exports'],\n importsFields: ['imports'],\n conditionNames: ['node', 'require'],\n descriptionFiles: ['package.json'],\n extensions: [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.cjs',\n '.mjs',\n '.js',\n '.jsx',\n '.json',\n '.node',\n ],\n enforceExtensions: false,\n symlinks: true,\n mainFields: ['main'],\n mainFiles: ['index'],\n roots: [],\n fullySpecified: false,\n preferRelative: false,\n preferAbsolute: false,\n restrictions: [],\n};\n\nconst NODE_ESM_RESOLVE_OPTIONS = {\n ...NODE_RESOLVE_OPTIONS,\n dependencyType: 'esm',\n conditionNames: ['node', 'import'],\n};\n\nfunction normalizePath(path: string): string {\n return path.replace(/\\\\/g, '/');\n}\n\nexport function createSwcPlugin(options: SwcPluginOptions): Plugin {\n return {\n name: 'swc-workflow-plugin',\n setup(build) {\n // everything is external unless explicitly configured\n // to be bundled\n const cjsResolver = promisify(\n enhancedResolveOrig.create(NODE_RESOLVE_OPTIONS)\n );\n const esmResolver = promisify(\n enhancedResolveOrig.create(NODE_ESM_RESOLVE_OPTIONS)\n );\n\n const enhancedResolve = async (context: string, path: string) => {\n try {\n return await esmResolver(context, path);\n } catch (_) {\n return cjsResolver(context, path);\n }\n };\n\n // Pre-compute the normalized side-effect entries set for O(1) lookups.\n const normalizedSideEffectEntries = new Set(\n options.sideEffectEntries?.map((e) => e.replace(/\\\\/g, '/'))\n );\n\n build.onResolve({ filter: /.*/ }, async (args) => {\n if (args.pluginData?.skipSwcPlugin) return null;\n\n if (\n !options.entriesToBundle &&\n normalizedSideEffectEntries.size === 0\n ) {\n return null;\n }\n\n // When only sideEffectEntries is set (no entriesToBundle), we only\n // need to override sideEffects for top-level bare imports — typically\n // from the virtual entry. Skip resolution for transitive imports\n // (dynamic imports, requires, etc.) to avoid unnecessary overhead.\n if (!options.entriesToBundle && args.kind !== 'import-statement') {\n return null;\n }\n\n try {\n const specifier = args.path;\n const specifierIsPath =\n specifier.startsWith('.') || specifier.startsWith('/');\n\n let resolvedPath: string | false | undefined;\n // Determines whether the external path should be relativized\n // (project-local file) or kept as a bare specifier (npm package).\n let shouldMakeRelative = specifierIsPath;\n\n if (specifierIsPath) {\n resolvedPath = await enhancedResolve(args.resolveDir, specifier);\n } else {\n // Resolve from project root so nested deps aren't externalized\n resolvedPath = await enhancedResolve(\n build.initialOptions.absWorkingDir || process.cwd(),\n specifier\n ).catch(() => undefined); // swallow so esbuild fallback below can try\n\n // Fall back to esbuild for aliases/tsconfig paths,\n // but only accept project-local results\n if (!resolvedPath) {\n const esbuildResult = await build.resolve(specifier, {\n resolveDir: args.resolveDir,\n kind: args.kind,\n pluginData: { skipSwcPlugin: true },\n });\n const didResolve =\n !!esbuildResult.path && !esbuildResult.errors.length;\n const isProjectLocalFile =\n didResolve &&\n !esbuildResult.external &&\n !esbuildResult.path\n .replace(/\\\\/g, '/')\n .includes('/node_modules/');\n if (isProjectLocalFile) {\n resolvedPath = esbuildResult.path;\n shouldMakeRelative = true;\n }\n }\n }\n\n if (!resolvedPath) return null;\n\n // Normalize to forward slashes for cross-platform comparison\n const normalizedResolvedPath = normalizePath(resolvedPath);\n const workingDir =\n build.initialOptions.absWorkingDir || process.cwd();\n const projectRoot = options.projectRoot || workingDir;\n\n // Check if this module is a discovered entry whose SWC-transformed\n // code contains side effects (workflow/step/class registration).\n // Override the package.json \"sideEffects\": false so esbuild does not\n // drop bare imports of these modules.\n const hasSideEffects = normalizedSideEffectEntries.has(\n normalizedResolvedPath\n );\n\n if (options.entriesToBundle) {\n let shouldBundle = false;\n for (const entryToBundle of options.entriesToBundle) {\n const normalizedEntry = entryToBundle.replace(/\\\\/g, '/');\n\n if (normalizedResolvedPath === normalizedEntry) {\n shouldBundle = true;\n break;\n }\n\n // if the current entry imports a child that needs\n // to be bundled then it needs to also be bundled so\n // that the child can have our transform applied\n if (parentHasChild(normalizedResolvedPath, normalizedEntry)) {\n shouldBundle = true;\n break;\n }\n\n // Bundle project-local source files that are imported by a\n // step/serde entry so direct runtime loaders do not see raw TS\n // extensionless imports. Keep package dependencies external\n // unless they are themselves in entriesToBundle or are parents\n // of a discovered workflow/step/serde file via the check above.\n if (\n options.bundleTransitiveLocalStepDependencies &&\n isProjectLocalFile(normalizedResolvedPath, projectRoot) &&\n parentHasChild(normalizedEntry, normalizedResolvedPath)\n ) {\n shouldBundle = true;\n break;\n }\n }\n\n if (shouldBundle) {\n // Let esbuild bundle this entry, but override sideEffects if needed.\n // We must return the resolved `path` alongside `sideEffects` because\n // returning only `{ sideEffects: true }` without a path causes esbuild\n // to fall through to its own resolver, which re-reads the package.json\n // and applies `\"sideEffects\": false` from there.\n return hasSideEffects\n ? { path: resolvedPath, sideEffects: true }\n : null;\n }\n\n let externalPath: string;\n if (shouldMakeRelative) {\n externalPath = relative(\n options.outdir || process.cwd(),\n resolvedPath\n ).replace(/\\\\/g, '/');\n\n if (options.rewriteTsExtensions) {\n // Rewrite TypeScript extensions to their JS equivalents so the\n // externalized import is loadable by Node's native ESM loader.\n externalPath = externalPath\n .replace(/\\.tsx?$/, '.js')\n .replace(/\\.mts$/, '.mjs')\n .replace(/\\.cts$/, '.cjs');\n }\n } else {\n externalPath = specifier;\n }\n\n return {\n external: true,\n path: externalPath,\n sideEffects: hasSideEffects || undefined,\n };\n }\n\n // No entriesToBundle — only override sideEffects when needed.\n // We must return the resolved `path` alongside `sideEffects` because\n // returning only `{ sideEffects: true }` without a path causes esbuild\n // to fall through to its own resolver, which re-reads the package.json\n // and applies `\"sideEffects\": false` from there.\n return hasSideEffects\n ? { path: resolvedPath, sideEffects: true }\n : null;\n } catch (_) {}\n return null;\n });\n\n // Handle TypeScript and JavaScript files\n build.onLoad({ filter: jsTsRegex }, async (args) => {\n // Determine if this is a TypeScript file\n try {\n // Determine the loader based on the output\n let loader: 'js' | 'jsx' | 'tsx' = 'js';\n if (args.path.endsWith('.jsx')) {\n loader = 'jsx';\n } else if (args.path.endsWith('.tsx')) {\n loader = 'tsx';\n }\n const source = await readFile(args.path, 'utf8');\n const normalizedSource = source\n .replace(/require\\(\\s*(['\"])server-only\\1\\s*\\)/g, 'void 0')\n .replace(/require\\(\\s*(['\"])client-only\\1\\s*\\)/g, 'void 0');\n\n // Calculate relative path for SWC plugin\n // The filename parameter is used to generate workflowId/stepId, so it must be relative\n const workingDir =\n build.initialOptions.absWorkingDir || process.cwd();\n const projectRoot = options.projectRoot || workingDir;\n // Normalize paths: convert backslashes to forward slashes and remove trailing slashes\n const normalizedWorkingDir = workingDir\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedPath = args.path.replace(/\\\\/g, '/');\n\n // Windows fix: Always do case-insensitive path comparison as the PRIMARY logic\n // to work around node:path.relative() not recognizing paths with different drive\n // letter casing (e.g., D: vs d:) as being in the same tree\n const lowerWd = normalizedWorkingDir.toLowerCase();\n const lowerPath = normalizedPath.toLowerCase();\n\n let relativeFilepath: string;\n if (lowerPath.startsWith(lowerWd + '/')) {\n // File is under working directory - manually calculate relative path\n // This ensures we get a relative path even with drive letter casing issues\n relativeFilepath = normalizedPath.substring(\n normalizedWorkingDir.length + 1\n );\n } else if (lowerPath === lowerWd) {\n // File IS the working directory\n relativeFilepath = '.';\n } else {\n // File is outside working directory - use relative() and strip ../ prefixes if needed\n relativeFilepath = relative(\n normalizedWorkingDir,\n normalizedPath\n ).replace(/\\\\/g, '/');\n\n // Handle files discovered outside the working directory\n // These come back as ../path/to/file, but we want just path/to/file\n if (relativeFilepath.startsWith('../')) {\n const aliasedRelativePath =\n await resolveWorkflowAliasRelativePath(args.path, workingDir);\n if (aliasedRelativePath) {\n relativeFilepath = aliasedRelativePath;\n } else {\n relativeFilepath = relativeFilepath\n .split('/')\n .filter((part) => part !== '..')\n .join('/');\n }\n }\n }\n\n // Final safety check - ensure we never pass an absolute path to SWC\n if (\n relativeFilepath.includes(':') ||\n relativeFilepath.startsWith('/')\n ) {\n // This should never happen, but if it does, use just the filename as last resort\n console.error(\n `[ERROR] relativeFilepath is still absolute: ${relativeFilepath}`\n );\n relativeFilepath = normalizedPath.split('/').pop() || 'unknown.ts';\n }\n\n const { code: transformedCode, workflowManifest } =\n await applySwcTransform(\n relativeFilepath,\n normalizedSource,\n options.mode,\n args.path, // Pass absolute path for module specifier resolution\n projectRoot\n );\n\n if (!options.workflowManifest) {\n options.workflowManifest = {};\n }\n\n options.workflowManifest.workflows = Object.assign(\n options.workflowManifest.workflows || {},\n workflowManifest.workflows\n );\n options.workflowManifest.steps = Object.assign(\n options.workflowManifest.steps || {},\n workflowManifest.steps\n );\n options.workflowManifest.classes = Object.assign(\n options.workflowManifest.classes || {},\n workflowManifest.classes\n );\n\n return {\n contents: transformedCode,\n loader,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n console.error(\n `❌ SWC transform error in ${args.path}:`,\n errorMessage\n );\n return {\n errors: [\n {\n text: `SWC transform failed: ${errorMessage}`,\n location: { file: args.path, line: 0, column: 0 },\n },\n ],\n };\n }\n });\n },\n };\n}\n\nfunction isProjectLocalFile(filePath: string, projectRoot: string): boolean {\n if (normalizePath(filePath).includes('/node_modules/')) {\n return false;\n }\n\n return (\n resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier === undefined\n );\n}\n"]}
|
|
@@ -9,6 +9,7 @@ const { applySwcTransformMock } = vi.hoisted(() => ({
|
|
|
9
9
|
vi.mock('./apply-swc-transform.js', () => ({
|
|
10
10
|
applySwcTransform: applySwcTransformMock,
|
|
11
11
|
}));
|
|
12
|
+
import { createDiscoverEntriesPlugin, importParents, } from './discover-entries-esbuild-plugin.js';
|
|
12
13
|
import { createSwcPlugin } from './swc-esbuild-plugin.js';
|
|
13
14
|
const realTmpdir = realpathSync(tmpdir());
|
|
14
15
|
function writeFile(path, contents = '') {
|
|
@@ -19,6 +20,7 @@ describe('createSwcPlugin externalizeNonSteps', () => {
|
|
|
19
20
|
let testRoot;
|
|
20
21
|
beforeEach(() => {
|
|
21
22
|
testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));
|
|
23
|
+
importParents.clear();
|
|
22
24
|
applySwcTransformMock.mockReset();
|
|
23
25
|
applySwcTransformMock.mockImplementation(async (_filename, source) => ({
|
|
24
26
|
code: source,
|
|
@@ -26,6 +28,7 @@ describe('createSwcPlugin externalizeNonSteps', () => {
|
|
|
26
28
|
}));
|
|
27
29
|
});
|
|
28
30
|
afterEach(() => {
|
|
31
|
+
importParents.clear();
|
|
29
32
|
rmSync(testRoot, { recursive: true, force: true });
|
|
30
33
|
});
|
|
31
34
|
it.each([
|
|
@@ -181,6 +184,187 @@ describe('createSwcPlugin externalizeNonSteps', () => {
|
|
|
181
184
|
const output = result.outputFiles[0].text;
|
|
182
185
|
expect(output).toContain(`/dep${inputExt}`);
|
|
183
186
|
});
|
|
187
|
+
it('bundles transitive local TypeScript dependencies with extensionless imports', async () => {
|
|
188
|
+
const outdir = join(testRoot, 'out');
|
|
189
|
+
const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');
|
|
190
|
+
const constantsFile = join(testRoot, 'shared', 'constants.ts');
|
|
191
|
+
const helpersFile = join(testRoot, 'shared', 'helpers.ts');
|
|
192
|
+
writeFile(helpersFile, `export const HELPER_VALUE = "from-helper";`);
|
|
193
|
+
writeFile(constantsFile, `import { HELPER_VALUE } from './helpers';\nexport const CATEGORIES = [HELPER_VALUE];`);
|
|
194
|
+
writeFile(stepFile, `import { CATEGORIES } from '../../shared/constants';\nexport async function myStep() {\n 'use step';\n return CATEGORIES[0];\n}`);
|
|
195
|
+
const state = {
|
|
196
|
+
discoveredSteps: new Set(),
|
|
197
|
+
discoveredWorkflows: new Set(),
|
|
198
|
+
discoveredSerdeFiles: new Set(),
|
|
199
|
+
};
|
|
200
|
+
await esbuild.build({
|
|
201
|
+
entryPoints: [stepFile],
|
|
202
|
+
absWorkingDir: testRoot,
|
|
203
|
+
bundle: true,
|
|
204
|
+
format: 'esm',
|
|
205
|
+
platform: 'node',
|
|
206
|
+
write: false,
|
|
207
|
+
resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],
|
|
208
|
+
plugins: [createDiscoverEntriesPlugin(state, testRoot)],
|
|
209
|
+
});
|
|
210
|
+
const result = await esbuild.build({
|
|
211
|
+
entryPoints: [stepFile],
|
|
212
|
+
absWorkingDir: testRoot,
|
|
213
|
+
outdir,
|
|
214
|
+
bundle: true,
|
|
215
|
+
format: 'esm',
|
|
216
|
+
platform: 'node',
|
|
217
|
+
write: false,
|
|
218
|
+
resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],
|
|
219
|
+
plugins: [
|
|
220
|
+
createSwcPlugin({
|
|
221
|
+
mode: 'step',
|
|
222
|
+
entriesToBundle: [stepFile],
|
|
223
|
+
outdir,
|
|
224
|
+
bundleTransitiveLocalStepDependencies: true,
|
|
225
|
+
}),
|
|
226
|
+
],
|
|
227
|
+
});
|
|
228
|
+
expect(result.errors).toHaveLength(0);
|
|
229
|
+
const output = result.outputFiles[0].text;
|
|
230
|
+
expect(output).toContain('from-helper');
|
|
231
|
+
expect(output).not.toMatch(/from\s+["'][^"']*shared\/constants/);
|
|
232
|
+
expect(output).not.toMatch(/from\s+["'][^"']*shared\/helpers/);
|
|
233
|
+
});
|
|
234
|
+
it('externalizes transitive local TypeScript dependencies by default', async () => {
|
|
235
|
+
const outdir = join(testRoot, 'out');
|
|
236
|
+
const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');
|
|
237
|
+
const constantsFile = join(testRoot, 'shared', 'constants.ts');
|
|
238
|
+
const helpersFile = join(testRoot, 'shared', 'helpers.ts');
|
|
239
|
+
writeFile(helpersFile, `export const HELPER_VALUE = "from-helper";`);
|
|
240
|
+
writeFile(constantsFile, `import { HELPER_VALUE } from './helpers';\nexport const CATEGORIES = [HELPER_VALUE];`);
|
|
241
|
+
writeFile(stepFile, `import { CATEGORIES } from '../../shared/constants';\nexport async function myStep() {\n 'use step';\n return CATEGORIES[0];\n}`);
|
|
242
|
+
const state = {
|
|
243
|
+
discoveredSteps: new Set(),
|
|
244
|
+
discoveredWorkflows: new Set(),
|
|
245
|
+
discoveredSerdeFiles: new Set(),
|
|
246
|
+
};
|
|
247
|
+
await esbuild.build({
|
|
248
|
+
entryPoints: [stepFile],
|
|
249
|
+
absWorkingDir: testRoot,
|
|
250
|
+
bundle: true,
|
|
251
|
+
format: 'esm',
|
|
252
|
+
platform: 'node',
|
|
253
|
+
write: false,
|
|
254
|
+
resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],
|
|
255
|
+
plugins: [createDiscoverEntriesPlugin(state, testRoot)],
|
|
256
|
+
});
|
|
257
|
+
const result = await esbuild.build({
|
|
258
|
+
entryPoints: [stepFile],
|
|
259
|
+
absWorkingDir: testRoot,
|
|
260
|
+
outdir,
|
|
261
|
+
bundle: true,
|
|
262
|
+
format: 'esm',
|
|
263
|
+
platform: 'node',
|
|
264
|
+
write: false,
|
|
265
|
+
resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],
|
|
266
|
+
plugins: [
|
|
267
|
+
createSwcPlugin({
|
|
268
|
+
mode: 'step',
|
|
269
|
+
entriesToBundle: [stepFile],
|
|
270
|
+
outdir,
|
|
271
|
+
}),
|
|
272
|
+
],
|
|
273
|
+
});
|
|
274
|
+
expect(result.errors).toHaveLength(0);
|
|
275
|
+
const output = result.outputFiles[0].text;
|
|
276
|
+
expect(output).not.toContain('from-helper');
|
|
277
|
+
expect(output).toMatch(/from\s+["'][^"']*shared\/constants\.ts["']/);
|
|
278
|
+
});
|
|
279
|
+
it('keeps ordinary package dependencies external when reachable from a bundled step', async () => {
|
|
280
|
+
const outdir = join(testRoot, 'out');
|
|
281
|
+
const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');
|
|
282
|
+
const pkgDir = join(testRoot, 'node_modules', 'plain-pkg');
|
|
283
|
+
const pkgIndex = join(pkgDir, 'index.js');
|
|
284
|
+
writeFile(join(pkgDir, 'package.json'), JSON.stringify({ name: 'plain-pkg', main: 'index.js' }));
|
|
285
|
+
writeFile(pkgIndex, `export const value = "from-package";`);
|
|
286
|
+
writeFile(stepFile, `import { value } from 'plain-pkg';\nexport async function myStep() {\n 'use step';\n return value;\n}`);
|
|
287
|
+
const state = {
|
|
288
|
+
discoveredSteps: new Set(),
|
|
289
|
+
discoveredWorkflows: new Set(),
|
|
290
|
+
discoveredSerdeFiles: new Set(),
|
|
291
|
+
};
|
|
292
|
+
await esbuild.build({
|
|
293
|
+
entryPoints: [stepFile],
|
|
294
|
+
absWorkingDir: testRoot,
|
|
295
|
+
bundle: true,
|
|
296
|
+
format: 'esm',
|
|
297
|
+
platform: 'node',
|
|
298
|
+
write: false,
|
|
299
|
+
plugins: [createDiscoverEntriesPlugin(state, testRoot)],
|
|
300
|
+
});
|
|
301
|
+
const result = await esbuild.build({
|
|
302
|
+
entryPoints: [stepFile],
|
|
303
|
+
absWorkingDir: testRoot,
|
|
304
|
+
outdir,
|
|
305
|
+
bundle: true,
|
|
306
|
+
format: 'esm',
|
|
307
|
+
platform: 'node',
|
|
308
|
+
write: false,
|
|
309
|
+
plugins: [
|
|
310
|
+
createSwcPlugin({
|
|
311
|
+
mode: 'step',
|
|
312
|
+
entriesToBundle: [stepFile],
|
|
313
|
+
outdir,
|
|
314
|
+
bundleTransitiveLocalStepDependencies: true,
|
|
315
|
+
}),
|
|
316
|
+
],
|
|
317
|
+
});
|
|
318
|
+
expect(result.errors).toHaveLength(0);
|
|
319
|
+
const output = result.outputFiles[0].text;
|
|
320
|
+
expect(output).toMatch(/from\s+["']plain-pkg["']/);
|
|
321
|
+
expect(output).not.toContain('from-package');
|
|
322
|
+
});
|
|
323
|
+
it('bundles package parents when they lead to discovered workflow-related entries', async () => {
|
|
324
|
+
const outdir = join(testRoot, 'out');
|
|
325
|
+
const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');
|
|
326
|
+
const pkgDir = join(testRoot, 'node_modules', 'workflow-pkg');
|
|
327
|
+
const pkgIndex = join(pkgDir, 'index.js');
|
|
328
|
+
const pkgSerde = join(pkgDir, 'serde.js');
|
|
329
|
+
writeFile(join(pkgDir, 'package.json'), JSON.stringify({ name: 'workflow-pkg', main: 'index.js' }));
|
|
330
|
+
writeFile(pkgSerde, `export const value = "from-serde";`);
|
|
331
|
+
writeFile(pkgIndex, `export { value } from './serde.js';`);
|
|
332
|
+
writeFile(stepFile, `import { value } from 'workflow-pkg';\nexport async function myStep() {\n 'use step';\n return value;\n}`);
|
|
333
|
+
const state = {
|
|
334
|
+
discoveredSteps: new Set(),
|
|
335
|
+
discoveredWorkflows: new Set(),
|
|
336
|
+
discoveredSerdeFiles: new Set(),
|
|
337
|
+
};
|
|
338
|
+
await esbuild.build({
|
|
339
|
+
entryPoints: [stepFile],
|
|
340
|
+
absWorkingDir: testRoot,
|
|
341
|
+
bundle: true,
|
|
342
|
+
format: 'esm',
|
|
343
|
+
platform: 'node',
|
|
344
|
+
write: false,
|
|
345
|
+
plugins: [createDiscoverEntriesPlugin(state, testRoot)],
|
|
346
|
+
});
|
|
347
|
+
const result = await esbuild.build({
|
|
348
|
+
entryPoints: [stepFile],
|
|
349
|
+
absWorkingDir: testRoot,
|
|
350
|
+
outdir,
|
|
351
|
+
bundle: true,
|
|
352
|
+
format: 'esm',
|
|
353
|
+
platform: 'node',
|
|
354
|
+
write: false,
|
|
355
|
+
plugins: [
|
|
356
|
+
createSwcPlugin({
|
|
357
|
+
mode: 'step',
|
|
358
|
+
entriesToBundle: [stepFile, pkgSerde],
|
|
359
|
+
outdir,
|
|
360
|
+
}),
|
|
361
|
+
],
|
|
362
|
+
});
|
|
363
|
+
expect(result.errors).toHaveLength(0);
|
|
364
|
+
const output = result.outputFiles[0].text;
|
|
365
|
+
expect(output).toContain('from-serde');
|
|
366
|
+
expect(output).not.toMatch(/from\s+["']workflow-pkg["']/);
|
|
367
|
+
});
|
|
184
368
|
});
|
|
185
369
|
describe('createSwcPlugin sideEffectEntries', () => {
|
|
186
370
|
let testRoot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swc-esbuild-plugin.test.js","sourceRoot":"","sources":["../src/swc-esbuild-plugin.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 * 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 { createSwcPlugin } from './swc-esbuild-plugin.js';\n\nconst realTmpdir = realpathSync(tmpdir());\n\nfunction writeFile(path: string, contents = ''): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, contents, 'utf-8');\n}\n\ndescribe('createSwcPlugin externalizeNonSteps', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));\n applySwcTransformMock.mockReset();\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n });\n\n afterEach(() => {\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n it.each([\n { inputExt: '.ts', outputExt: '.js' },\n { inputExt: '.tsx', outputExt: '.js' },\n { inputExt: '.mts', outputExt: '.mjs' },\n { inputExt: '.cts', outputExt: '.cjs' },\n ])('rewrites externalized $inputExt imports to $outputExt when rewriteTsExtensions is enabled', async ({\n inputExt,\n outputExt,\n }) => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(join(srcDir, `dep${inputExt}`), 'export const dep = {};');\n writeFile(stepFile, `import { dep } from './dep';\\nconsole.log(dep);`);\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n rewriteTsExtensions: true,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain(`/dep${outputExt}`);\n expect(output).not.toContain(`/dep${inputExt}`);\n });\n\n it('rewrites path-aliased imports to relative paths', async () => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const libDir = join(srcDir, 'lib');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(join(libDir, 'config.ts'), 'export const config = {};');\n writeFile(\n stepFile,\n `import { config } from '@/lib/config';\\nconsole.log(config);`\n );\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n alias: { '@': srcDir },\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n rewriteTsExtensions: true,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain('/lib/config.js');\n expect(output).not.toContain('@/lib/config');\n });\n\n it('does not relativize Node.js builtin imports', async () => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(\n stepFile,\n `import { createHash } from 'crypto';\\nimport { join } from 'node:path';\\nconsole.log(createHash, join);`\n );\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // Builtins should remain as bare specifiers, not relativized paths\n expect(output).toMatch(/from\\s+[\"']crypto[\"']/);\n expect(output).toMatch(/from\\s+[\"']node:path[\"']/);\n expect(output).not.toMatch(/from\\s+[\"']\\..*crypto[\"']/);\n expect(output).not.toMatch(/from\\s+[\"']\\..*node:path[\"']/);\n });\n\n it('does not externalize aliased imports that resolve into node_modules', async () => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n const nodeModulesDir = join(testRoot, 'node_modules', 'some-pkg');\n\n writeFile(join(nodeModulesDir, 'index.js'), 'export const pkg = \"hello\";');\n writeFile(stepFile, `import { pkg } from '@pkg';\\nconsole.log(pkg);`);\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n alias: { '@pkg': join(nodeModulesDir, 'index.js') },\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // Should be bundled (inlined), not externalized as a relative node_modules path\n expect(output).toContain('hello');\n expect(output).not.toMatch(/from\\s+[\"'].*node_modules/);\n });\n\n it.each([\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n ])('preserves externalized %s extensions by default', async (inputExt) => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(join(srcDir, `dep${inputExt}`), 'export const dep = {};');\n writeFile(stepFile, `import { dep } from './dep';\\nconsole.log(dep);`);\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain(`/dep${inputExt}`);\n });\n});\n\ndescribe('createSwcPlugin sideEffectEntries', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));\n applySwcTransformMock.mockReset();\n });\n\n afterEach(() => {\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n /**\n * Helper: creates a fake node_modules package with `\"sideEffects\": false`\n * in its package.json and a single entry file that exports a side-effectful\n * registration call (simulating what the SWC transform produces).\n */\n function createSideEffectsFalsePackage(\n packageName: string,\n entryCode: string\n ): string {\n const pkgDir = join(testRoot, 'node_modules', packageName);\n writeFile(\n join(pkgDir, 'package.json'),\n JSON.stringify({\n name: packageName,\n version: '1.0.0',\n sideEffects: false,\n main: 'index.js',\n })\n );\n const entryPath = join(pkgDir, 'index.js');\n writeFile(entryPath, entryCode);\n return entryPath;\n }\n\n it('preserves bare imports of sideEffectEntries packages when bundling without entriesToBundle', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"my-pkg\");';\n const entryPath = createSideEffectsFalsePackage(\n 'my-side-effect-pkg',\n sideEffectCode\n );\n\n // SWC mock: return the code unchanged (the side effects are already there)\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'my-side-effect-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // The registration code should be present in the bundle\n expect(output).toContain('__registered');\n });\n\n it('drops bare imports when sideEffectEntries is NOT provided for sideEffects:false packages', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"my-pkg\");';\n createSideEffectsFalsePackage('my-dropped-pkg', sideEffectCode);\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'my-dropped-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // Without sideEffectEntries, esbuild drops the bare import\n expect(output).not.toContain('__registered');\n });\n\n it('produces no warnings for sideEffectEntries packages', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"warned-pkg\");';\n const entryPath = createSideEffectsFalsePackage(\n 'my-warned-pkg',\n sideEffectCode\n );\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'my-warned-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n // No \"ignored-bare-import\" warnings should be produced\n const sideEffectWarnings = result.warnings.filter(\n (w) => w.id === 'ignored-bare-import'\n );\n expect(sideEffectWarnings).toHaveLength(0);\n });\n\n it('preserves bare imports with entriesToBundle and sideEffectEntries together', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"bundled-pkg\");';\n const entryPath = createSideEffectsFalsePackage(\n 'my-bundled-pkg',\n sideEffectCode\n );\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const outdir = join(testRoot, 'out');\n const stepFile = join(testRoot, 'src', 'step.ts');\n writeFile(\n stepFile,\n `import 'my-bundled-pkg';\\nexport const POST = () => {};`\n );\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile, entryPath],\n outdir,\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // The registration code should be bundled in\n expect(output).toContain('__registered');\n });\n\n it('preserves bare imports for local files with sideEffects:false in their parent package.json', async () => {\n // Simulate a workspace package with sideEffects: false\n const pkgDir = join(testRoot, 'packages', 'shared');\n writeFile(\n join(pkgDir, 'package.json'),\n JSON.stringify({\n name: '@myorg/shared',\n version: '1.0.0',\n sideEffects: false,\n main: 'index.js',\n })\n );\n const sharedEntry = join(pkgDir, 'index.js');\n writeFile(sharedEntry, 'globalThis.__sharedRegistered = true;');\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n // Use a relative import to the local file (like the virtual entry does for local files)\n const result = await esbuild.build({\n stdin: {\n contents: `import './packages/shared/index.js';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n sideEffectEntries: [sharedEntry],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain('__sharedRegistered');\n });\n\n it('does not override sideEffects for non-entry modules', async () => {\n // Create two packages - one is a side-effect entry, one is not\n const sideEffectCode = 'globalThis.__entryRegistered = true;';\n const entryPath = createSideEffectsFalsePackage(\n 'entry-pkg',\n sideEffectCode\n );\n\n const nonEntryCode = 'globalThis.__nonEntryRegistered = true;';\n createSideEffectsFalsePackage('non-entry-pkg', nonEntryCode);\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'entry-pkg';\\nimport 'non-entry-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n // Only entry-pkg is listed, non-entry-pkg is not\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // entry-pkg should be preserved\n expect(output).toContain('__entryRegistered');\n // non-entry-pkg should be dropped (sideEffects: false is respected)\n expect(output).not.toContain('__nonEntryRegistered');\n });\n});\n\ndescribe('createSwcPlugin projectRoot', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));\n applySwcTransformMock.mockReset();\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n });\n\n afterEach(() => {\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('passes the explicit projectRoot through to applySwcTransform', async () => {\n const fixture = setupFixture();\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: [\n createSwcPlugin({\n mode: 'workflow',\n projectRoot: fixture.appRoot,\n workflowManifest: {},\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n expect(applySwcTransformMock).toHaveBeenCalledWith(\n 'src/internal/message/workflow/handle-message.ts',\n expect.stringContaining('\"use workflow\"'),\n 'workflow',\n fixture.workflowFile,\n fixture.appRoot\n );\n });\n\n it('defaults the transform projectRoot to absWorkingDir', async () => {\n const fixture = setupFixture();\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: [\n createSwcPlugin({\n mode: 'workflow',\n workflowManifest: {},\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n expect(applySwcTransformMock).toHaveBeenCalledWith(\n 'src/internal/message/workflow/handle-message.ts',\n expect.stringContaining('\"use workflow\"'),\n 'workflow',\n fixture.workflowFile,\n fixture.packageRoot\n );\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.test.js","sourceRoot":"","sources":["../src/swc-esbuild-plugin.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 * 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} from './discover-entries-esbuild-plugin.js';\nimport { createSwcPlugin } from './swc-esbuild-plugin.js';\n\nconst realTmpdir = realpathSync(tmpdir());\n\nfunction writeFile(path: string, contents = ''): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, contents, 'utf-8');\n}\n\ndescribe('createSwcPlugin externalizeNonSteps', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));\n importParents.clear();\n applySwcTransformMock.mockReset();\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n });\n\n afterEach(() => {\n importParents.clear();\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n it.each([\n { inputExt: '.ts', outputExt: '.js' },\n { inputExt: '.tsx', outputExt: '.js' },\n { inputExt: '.mts', outputExt: '.mjs' },\n { inputExt: '.cts', outputExt: '.cjs' },\n ])('rewrites externalized $inputExt imports to $outputExt when rewriteTsExtensions is enabled', async ({\n inputExt,\n outputExt,\n }) => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(join(srcDir, `dep${inputExt}`), 'export const dep = {};');\n writeFile(stepFile, `import { dep } from './dep';\\nconsole.log(dep);`);\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n rewriteTsExtensions: true,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain(`/dep${outputExt}`);\n expect(output).not.toContain(`/dep${inputExt}`);\n });\n\n it('rewrites path-aliased imports to relative paths', async () => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const libDir = join(srcDir, 'lib');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(join(libDir, 'config.ts'), 'export const config = {};');\n writeFile(\n stepFile,\n `import { config } from '@/lib/config';\\nconsole.log(config);`\n );\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n alias: { '@': srcDir },\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n rewriteTsExtensions: true,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain('/lib/config.js');\n expect(output).not.toContain('@/lib/config');\n });\n\n it('does not relativize Node.js builtin imports', async () => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(\n stepFile,\n `import { createHash } from 'crypto';\\nimport { join } from 'node:path';\\nconsole.log(createHash, join);`\n );\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // Builtins should remain as bare specifiers, not relativized paths\n expect(output).toMatch(/from\\s+[\"']crypto[\"']/);\n expect(output).toMatch(/from\\s+[\"']node:path[\"']/);\n expect(output).not.toMatch(/from\\s+[\"']\\..*crypto[\"']/);\n expect(output).not.toMatch(/from\\s+[\"']\\..*node:path[\"']/);\n });\n\n it('does not externalize aliased imports that resolve into node_modules', async () => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n const nodeModulesDir = join(testRoot, 'node_modules', 'some-pkg');\n\n writeFile(join(nodeModulesDir, 'index.js'), 'export const pkg = \"hello\";');\n writeFile(stepFile, `import { pkg } from '@pkg';\\nconsole.log(pkg);`);\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n alias: { '@pkg': join(nodeModulesDir, 'index.js') },\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // Should be bundled (inlined), not externalized as a relative node_modules path\n expect(output).toContain('hello');\n expect(output).not.toMatch(/from\\s+[\"'].*node_modules/);\n });\n\n it.each([\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n ])('preserves externalized %s extensions by default', async (inputExt) => {\n const outdir = join(testRoot, 'out');\n const srcDir = join(testRoot, 'src');\n const stepFile = join(srcDir, 'step.ts');\n\n writeFile(join(srcDir, `dep${inputExt}`), 'export const dep = {};');\n writeFile(stepFile, `import { dep } from './dep';\\nconsole.log(dep);`);\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain(`/dep${inputExt}`);\n });\n\n it('bundles transitive local TypeScript dependencies with extensionless imports', async () => {\n const outdir = join(testRoot, 'out');\n const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');\n const constantsFile = join(testRoot, 'shared', 'constants.ts');\n const helpersFile = join(testRoot, 'shared', 'helpers.ts');\n\n writeFile(helpersFile, `export const HELPER_VALUE = \"from-helper\";`);\n writeFile(\n constantsFile,\n `import { HELPER_VALUE } from './helpers';\\nexport const CATEGORIES = [HELPER_VALUE];`\n );\n writeFile(\n stepFile,\n `import { CATEGORIES } from '../../shared/constants';\\nexport async function myStep() {\\n 'use step';\\n return CATEGORIES[0];\\n}`\n );\n\n const state = {\n discoveredSteps: new Set<string>(),\n discoveredWorkflows: new Set<string>(),\n discoveredSerdeFiles: new Set<string>(),\n };\n await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],\n plugins: [createDiscoverEntriesPlugin(state, testRoot)],\n });\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n bundleTransitiveLocalStepDependencies: true,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain('from-helper');\n expect(output).not.toMatch(/from\\s+[\"'][^\"']*shared\\/constants/);\n expect(output).not.toMatch(/from\\s+[\"'][^\"']*shared\\/helpers/);\n });\n\n it('externalizes transitive local TypeScript dependencies by default', async () => {\n const outdir = join(testRoot, 'out');\n const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');\n const constantsFile = join(testRoot, 'shared', 'constants.ts');\n const helpersFile = join(testRoot, 'shared', 'helpers.ts');\n\n writeFile(helpersFile, `export const HELPER_VALUE = \"from-helper\";`);\n writeFile(\n constantsFile,\n `import { HELPER_VALUE } from './helpers';\\nexport const CATEGORIES = [HELPER_VALUE];`\n );\n writeFile(\n stepFile,\n `import { CATEGORIES } from '../../shared/constants';\\nexport async function myStep() {\\n 'use step';\\n return CATEGORIES[0];\\n}`\n );\n\n const state = {\n discoveredSteps: new Set<string>(),\n discoveredWorkflows: new Set<string>(),\n discoveredSerdeFiles: new Set<string>(),\n };\n await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],\n plugins: [createDiscoverEntriesPlugin(state, testRoot)],\n });\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n resolveExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'],\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).not.toContain('from-helper');\n expect(output).toMatch(/from\\s+[\"'][^\"']*shared\\/constants\\.ts[\"']/);\n });\n\n it('keeps ordinary package dependencies external when reachable from a bundled step', async () => {\n const outdir = join(testRoot, 'out');\n const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');\n const pkgDir = join(testRoot, 'node_modules', 'plain-pkg');\n const pkgIndex = join(pkgDir, 'index.js');\n\n writeFile(\n join(pkgDir, 'package.json'),\n JSON.stringify({ name: 'plain-pkg', main: 'index.js' })\n );\n writeFile(pkgIndex, `export const value = \"from-package\";`);\n writeFile(\n stepFile,\n `import { value } from 'plain-pkg';\\nexport async function myStep() {\\n 'use step';\\n return value;\\n}`\n );\n\n const state = {\n discoveredSteps: new Set<string>(),\n discoveredWorkflows: new Set<string>(),\n discoveredSerdeFiles: new Set<string>(),\n };\n await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [createDiscoverEntriesPlugin(state, testRoot)],\n });\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile],\n outdir,\n bundleTransitiveLocalStepDependencies: true,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toMatch(/from\\s+[\"']plain-pkg[\"']/);\n expect(output).not.toContain('from-package');\n });\n\n it('bundles package parents when they lead to discovered workflow-related entries', async () => {\n const outdir = join(testRoot, 'out');\n const stepFile = join(testRoot, 'server', 'workflows', 'my-workflow.ts');\n const pkgDir = join(testRoot, 'node_modules', 'workflow-pkg');\n const pkgIndex = join(pkgDir, 'index.js');\n const pkgSerde = join(pkgDir, 'serde.js');\n\n writeFile(\n join(pkgDir, 'package.json'),\n JSON.stringify({ name: 'workflow-pkg', main: 'index.js' })\n );\n writeFile(pkgSerde, `export const value = \"from-serde\";`);\n writeFile(pkgIndex, `export { value } from './serde.js';`);\n writeFile(\n stepFile,\n `import { value } from 'workflow-pkg';\\nexport async function myStep() {\\n 'use step';\\n return value;\\n}`\n );\n\n const state = {\n discoveredSteps: new Set<string>(),\n discoveredWorkflows: new Set<string>(),\n discoveredSerdeFiles: new Set<string>(),\n };\n await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [createDiscoverEntriesPlugin(state, testRoot)],\n });\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile, pkgSerde],\n outdir,\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain('from-serde');\n expect(output).not.toMatch(/from\\s+[\"']workflow-pkg[\"']/);\n });\n});\n\ndescribe('createSwcPlugin sideEffectEntries', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));\n applySwcTransformMock.mockReset();\n });\n\n afterEach(() => {\n rmSync(testRoot, { recursive: true, force: true });\n });\n\n /**\n * Helper: creates a fake node_modules package with `\"sideEffects\": false`\n * in its package.json and a single entry file that exports a side-effectful\n * registration call (simulating what the SWC transform produces).\n */\n function createSideEffectsFalsePackage(\n packageName: string,\n entryCode: string\n ): string {\n const pkgDir = join(testRoot, 'node_modules', packageName);\n writeFile(\n join(pkgDir, 'package.json'),\n JSON.stringify({\n name: packageName,\n version: '1.0.0',\n sideEffects: false,\n main: 'index.js',\n })\n );\n const entryPath = join(pkgDir, 'index.js');\n writeFile(entryPath, entryCode);\n return entryPath;\n }\n\n it('preserves bare imports of sideEffectEntries packages when bundling without entriesToBundle', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"my-pkg\");';\n const entryPath = createSideEffectsFalsePackage(\n 'my-side-effect-pkg',\n sideEffectCode\n );\n\n // SWC mock: return the code unchanged (the side effects are already there)\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'my-side-effect-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // The registration code should be present in the bundle\n expect(output).toContain('__registered');\n });\n\n it('drops bare imports when sideEffectEntries is NOT provided for sideEffects:false packages', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"my-pkg\");';\n createSideEffectsFalsePackage('my-dropped-pkg', sideEffectCode);\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'my-dropped-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // Without sideEffectEntries, esbuild drops the bare import\n expect(output).not.toContain('__registered');\n });\n\n it('produces no warnings for sideEffectEntries packages', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"warned-pkg\");';\n const entryPath = createSideEffectsFalsePackage(\n 'my-warned-pkg',\n sideEffectCode\n );\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'my-warned-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n // No \"ignored-bare-import\" warnings should be produced\n const sideEffectWarnings = result.warnings.filter(\n (w) => w.id === 'ignored-bare-import'\n );\n expect(sideEffectWarnings).toHaveLength(0);\n });\n\n it('preserves bare imports with entriesToBundle and sideEffectEntries together', async () => {\n const sideEffectCode =\n 'globalThis.__registered = globalThis.__registered || [];\\nglobalThis.__registered.push(\"bundled-pkg\");';\n const entryPath = createSideEffectsFalsePackage(\n 'my-bundled-pkg',\n sideEffectCode\n );\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const outdir = join(testRoot, 'out');\n const stepFile = join(testRoot, 'src', 'step.ts');\n writeFile(\n stepFile,\n `import 'my-bundled-pkg';\\nexport const POST = () => {};`\n );\n\n const result = await esbuild.build({\n entryPoints: [stepFile],\n absWorkingDir: testRoot,\n outdir,\n bundle: true,\n format: 'esm',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'step',\n entriesToBundle: [stepFile, entryPath],\n outdir,\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // The registration code should be bundled in\n expect(output).toContain('__registered');\n });\n\n it('preserves bare imports for local files with sideEffects:false in their parent package.json', async () => {\n // Simulate a workspace package with sideEffects: false\n const pkgDir = join(testRoot, 'packages', 'shared');\n writeFile(\n join(pkgDir, 'package.json'),\n JSON.stringify({\n name: '@myorg/shared',\n version: '1.0.0',\n sideEffects: false,\n main: 'index.js',\n })\n );\n const sharedEntry = join(pkgDir, 'index.js');\n writeFile(sharedEntry, 'globalThis.__sharedRegistered = true;');\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n // Use a relative import to the local file (like the virtual entry does for local files)\n const result = await esbuild.build({\n stdin: {\n contents: `import './packages/shared/index.js';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n sideEffectEntries: [sharedEntry],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n expect(output).toContain('__sharedRegistered');\n });\n\n it('does not override sideEffects for non-entry modules', async () => {\n // Create two packages - one is a side-effect entry, one is not\n const sideEffectCode = 'globalThis.__entryRegistered = true;';\n const entryPath = createSideEffectsFalsePackage(\n 'entry-pkg',\n sideEffectCode\n );\n\n const nonEntryCode = 'globalThis.__nonEntryRegistered = true;';\n createSideEffectsFalsePackage('non-entry-pkg', nonEntryCode);\n\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n\n const result = await esbuild.build({\n stdin: {\n contents: `import 'entry-pkg';\\nimport 'non-entry-pkg';`,\n resolveDir: testRoot,\n sourcefile: 'virtual-entry.js',\n loader: 'js',\n },\n absWorkingDir: testRoot,\n bundle: true,\n format: 'cjs',\n platform: 'node',\n write: false,\n treeShaking: true,\n logLevel: 'silent',\n plugins: [\n createSwcPlugin({\n mode: 'workflow',\n // Only entry-pkg is listed, non-entry-pkg is not\n sideEffectEntries: [entryPath],\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n const output = result.outputFiles[0].text;\n // entry-pkg should be preserved\n expect(output).toContain('__entryRegistered');\n // non-entry-pkg should be dropped (sideEffects: false is respected)\n expect(output).not.toContain('__nonEntryRegistered');\n });\n});\n\ndescribe('createSwcPlugin projectRoot', () => {\n let testRoot: string;\n\n beforeEach(() => {\n testRoot = mkdtempSync(join(realTmpdir, 'workflow-swc-plugin-'));\n applySwcTransformMock.mockReset();\n applySwcTransformMock.mockImplementation(\n async (_filename: string, source: string) => ({\n code: source,\n workflowManifest: {},\n })\n );\n });\n\n afterEach(() => {\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('passes the explicit projectRoot through to applySwcTransform', async () => {\n const fixture = setupFixture();\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: [\n createSwcPlugin({\n mode: 'workflow',\n projectRoot: fixture.appRoot,\n workflowManifest: {},\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n expect(applySwcTransformMock).toHaveBeenCalledWith(\n 'src/internal/message/workflow/handle-message.ts',\n expect.stringContaining('\"use workflow\"'),\n 'workflow',\n fixture.workflowFile,\n fixture.appRoot\n );\n });\n\n it('defaults the transform projectRoot to absWorkingDir', async () => {\n const fixture = setupFixture();\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: [\n createSwcPlugin({\n mode: 'workflow',\n workflowManifest: {},\n }),\n ],\n });\n\n expect(result.errors).toHaveLength(0);\n expect(applySwcTransformMock).toHaveBeenCalledWith(\n 'src/internal/message/workflow/handle-message.ts',\n expect.stringContaining('\"use workflow\"'),\n 'workflow',\n fixture.workflowFile,\n fixture.packageRoot\n );\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuDd,kBAAkB;YAgClB,sBAAsB;YA8BtB,oBAAoB;YAwBpB,uBAAuB;CA0BtC"}
|
|
@@ -38,6 +38,9 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
|
|
|
38
38
|
if (this.shouldExposePublicManifest && manifestJson) {
|
|
39
39
|
const staticManifestDir = join(outputDir, 'static/.well-known/workflow/v1');
|
|
40
40
|
await mkdir(staticManifestDir, { recursive: true });
|
|
41
|
+
if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {
|
|
42
|
+
await writeFile(join(staticManifestDir, '.gitignore'), '*');
|
|
43
|
+
}
|
|
41
44
|
await copyFile(join(workflowGeneratedDir, 'manifest.json'), join(staticManifestDir, 'manifest.json'));
|
|
42
45
|
}
|
|
43
46
|
await this.createClientLibrary();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-build-output-api.js","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,MAAM,OAAO,2BAA4B,SAAQ,WAAW;IAC1D,KAAK,CAAC,KAAK;QACT,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAClD,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;QAE3E,kCAAkC;QAClC,MAAM,KAAK,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG;YACd,UAAU;YACV,oBAAoB;YACpB,YAAY;SACb,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAE9C,oCAAoC;QACpC,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE;YAC7D,SAAS,EAAE,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,GAAG,iBAAiB,CAAC,SAAS,EAAE;YACzE,OAAO,EAAE,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,OAAO,EAAE;SACpE,CAAC;QAEF,4BAA4B;QAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;YAC7C,kBAAkB;YAClB,WAAW,EAAE,oBAAoB;YACjC,QAAQ;SACT,CAAC,CAAC;QAEH,oEAAoE;QACpE,0EAA0E;QAC1E,IAAI,IAAI,CAAC,0BAA0B,IAAI,YAAY,EAAE,CAAC;YACpD,MAAM,iBAAiB,GAAG,IAAI,CAC5B,SAAS,EACT,gCAAgC,CACjC,CAAC;YACF,MAAM,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,QAAQ,CACZ,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,EAC3C,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,CACzC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,EAC/B,UAAU,EACV,oBAAoB,EACpB,YAAY,GAKb;QACC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,sBAAsB;QACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC;YAChD,UAAU;YACV,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;YACvC,YAAY;SACb,CAAC,CAAC;QAEH,6DAA6D;QAC7D,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YACtC,yBAAyB,EAAE,IAAI;YAC/B,WAAW,EAAE,KAAK;YAClB,oBAAoB,EAAE,CAAC,kBAAkB,CAAC;YAC1C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,EACnC,UAAU,EACV,oBAAoB,EACpB,YAAY,GAKb;QACC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QACjE,MAAM,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC;YACpD,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;YAC3C,UAAU;YACV,YAAY;SACb,CAAC,CAAC;QAEH,iEAAiE;QACjE,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE;YAC1C,WAAW,EAAE,KAAK;YAClB,oBAAoB,EAAE,CAAC,sBAAsB,CAAC;YAC9C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,EACjC,oBAAoB,EACpB,MAAM,GAAG,IAAI,GAId;QACC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;QAE1E,sDAAsD;QACtD,MAAM,IAAI,CAAC,mBAAmB,CAAC;YAC7B,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;YACzC,MAAM,EAAE,oDAAoD;SAC7D,CAAC,CAAC;QAEH,+DAA+D;QAC/D,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;YACxC,gBAAgB,EAAE,KAAK;YACvB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,SAAiB;QACrD,0CAA0C;QAC1C,MAAM,iBAAiB,GAAG;YACxB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE;gBACN;oBACE,GAAG,EAAE,0DAA0D;oBAC/D,IAAI,EAAE,0CAA0C;iBACjD;aACF;SACF,CAAC;QAEF,MAAM,SAAS,CACb,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC3C,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CACT,+DAA+D,CAChE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,wEAAwE,CACzE,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { copyFile, mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { BaseBuilder } from './base-builder.js';\nimport { STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER } from './constants.js';\n\nexport class VercelBuildOutputAPIBuilder extends BaseBuilder {\n async build(): Promise<void> {\n const outputDir = resolve(this.config.workingDir, '.vercel/output');\n const functionsDir = join(outputDir, 'functions');\n const workflowGeneratedDir = join(functionsDir, '.well-known/workflow/v1');\n\n // Ensure output directories exist\n await mkdir(workflowGeneratedDir, { recursive: true });\n\n const inputFiles = await this.getInputFiles();\n const tsconfigPath = await this.findTsConfigPath();\n const options = {\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n };\n const stepsManifest = await this.buildStepsFunction(options);\n const workflowsManifest = await this.buildWorkflowsFunction(options);\n await this.buildWebhookFunction(options);\n await this.createBuildOutputConfig(outputDir);\n\n // Merge manifests from both bundles\n const manifest = {\n steps: { ...stepsManifest.steps, ...workflowsManifest.steps },\n workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },\n classes: { ...stepsManifest.classes, ...workflowsManifest.classes },\n };\n\n // Generate unified manifest\n const workflowBundlePath = join(workflowGeneratedDir, 'flow.func/index.js');\n const manifestJson = await this.createManifest({\n workflowBundlePath,\n manifestDir: workflowGeneratedDir,\n manifest,\n });\n\n // Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.\n // Vercel Build Output API serves static files from .vercel/output/static/\n if (this.shouldExposePublicManifest && manifestJson) {\n const staticManifestDir = join(\n outputDir,\n 'static/.well-known/workflow/v1'\n );\n await mkdir(staticManifestDir, { recursive: true });\n await copyFile(\n join(workflowGeneratedDir, 'manifest.json'),\n join(staticManifestDir, 'manifest.json')\n );\n }\n\n await this.createClientLibrary();\n }\n\n private async buildStepsFunction({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n console.log('Creating Vercel Build Output API steps function');\n const stepsFuncDir = join(workflowGeneratedDir, 'step.func');\n await mkdir(stepsFuncDir, { recursive: true });\n\n // Create steps bundle\n const { manifest } = await this.createStepsBundle({\n inputFiles,\n outfile: join(stepsFuncDir, 'index.js'),\n tsconfigPath,\n });\n\n // Create package.json and .vc-config.json for steps function\n await this.createPackageJson(stepsFuncDir, 'commonjs');\n await this.createVcConfig(stepsFuncDir, {\n shouldAddSourcemapSupport: true,\n maxDuration: 'max',\n experimentalTriggers: [STEP_QUEUE_TRIGGER],\n runtime: this.config.runtime,\n });\n\n return manifest;\n }\n\n private async buildWorkflowsFunction({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n console.log('Creating Vercel Build Output API workflows function');\n const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');\n await mkdir(workflowsFuncDir, { recursive: true });\n\n const { manifest } = await this.createWorkflowsBundle({\n outfile: join(workflowsFuncDir, 'index.js'),\n inputFiles,\n tsconfigPath,\n });\n\n // Create package.json and .vc-config.json for workflows function\n await this.createPackageJson(workflowsFuncDir, 'commonjs');\n await this.createVcConfig(workflowsFuncDir, {\n maxDuration: 'max',\n experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],\n runtime: this.config.runtime,\n });\n\n return manifest;\n }\n\n private async buildWebhookFunction({\n workflowGeneratedDir,\n bundle = true,\n }: {\n workflowGeneratedDir: string;\n bundle?: boolean;\n }): Promise<void> {\n console.log('Creating Vercel Build Output API webhook function');\n const webhookFuncDir = join(workflowGeneratedDir, 'webhook/[token].func');\n\n // Bundle the webhook route with dependencies resolved\n await this.createWebhookBundle({\n outfile: join(webhookFuncDir, 'index.js'),\n bundle, // Build Output API needs bundling (except in tests)\n });\n\n // Create package.json and .vc-config.json for webhook function\n await this.createPackageJson(webhookFuncDir, 'commonjs');\n await this.createVcConfig(webhookFuncDir, {\n shouldAddHelpers: false,\n runtime: this.config.runtime,\n });\n }\n\n private async createBuildOutputConfig(outputDir: string): Promise<void> {\n // Create config.json for Build Output API\n const buildOutputConfig = {\n version: 3,\n routes: [\n {\n src: '^\\\\/\\\\.well-known\\\\/workflow\\\\/v1\\\\/webhook\\\\/([^\\\\/]+)$',\n dest: '/.well-known/workflow/v1/webhook/[token]',\n },\n ],\n };\n\n await writeFile(\n join(outputDir, 'config.json'),\n JSON.stringify(buildOutputConfig, null, 2)\n );\n\n console.log(`Build Output API created at ${outputDir}`);\n console.log('Steps function available at /.well-known/workflow/v1/step');\n console.log(\n 'Workflows function available at /.well-known/workflow/v1/flow'\n );\n console.log(\n 'Webhook function available at /.well-known/workflow/v1/webhook/[token]'\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"vercel-build-output-api.js","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyFile, mkdir, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { BaseBuilder } from './base-builder.js';\nimport { STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER } from './constants.js';\n\nexport class VercelBuildOutputAPIBuilder extends BaseBuilder {\n async build(): Promise<void> {\n const outputDir = resolve(this.config.workingDir, '.vercel/output');\n const functionsDir = join(outputDir, 'functions');\n const workflowGeneratedDir = join(functionsDir, '.well-known/workflow/v1');\n\n // Ensure output directories exist\n await mkdir(workflowGeneratedDir, { recursive: true });\n\n const inputFiles = await this.getInputFiles();\n const tsconfigPath = await this.findTsConfigPath();\n const options = {\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n };\n const stepsManifest = await this.buildStepsFunction(options);\n const workflowsManifest = await this.buildWorkflowsFunction(options);\n await this.buildWebhookFunction(options);\n await this.createBuildOutputConfig(outputDir);\n\n // Merge manifests from both bundles\n const manifest = {\n steps: { ...stepsManifest.steps, ...workflowsManifest.steps },\n workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },\n classes: { ...stepsManifest.classes, ...workflowsManifest.classes },\n };\n\n // Generate unified manifest\n const workflowBundlePath = join(workflowGeneratedDir, 'flow.func/index.js');\n const manifestJson = await this.createManifest({\n workflowBundlePath,\n manifestDir: workflowGeneratedDir,\n manifest,\n });\n\n // Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.\n // Vercel Build Output API serves static files from .vercel/output/static/\n if (this.shouldExposePublicManifest && manifestJson) {\n const staticManifestDir = join(\n outputDir,\n 'static/.well-known/workflow/v1'\n );\n await mkdir(staticManifestDir, { recursive: true });\n if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {\n await writeFile(join(staticManifestDir, '.gitignore'), '*');\n }\n await copyFile(\n join(workflowGeneratedDir, 'manifest.json'),\n join(staticManifestDir, 'manifest.json')\n );\n }\n\n await this.createClientLibrary();\n }\n\n private async buildStepsFunction({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n console.log('Creating Vercel Build Output API steps function');\n const stepsFuncDir = join(workflowGeneratedDir, 'step.func');\n await mkdir(stepsFuncDir, { recursive: true });\n\n // Create steps bundle\n const { manifest } = await this.createStepsBundle({\n inputFiles,\n outfile: join(stepsFuncDir, 'index.js'),\n tsconfigPath,\n });\n\n // Create package.json and .vc-config.json for steps function\n await this.createPackageJson(stepsFuncDir, 'commonjs');\n await this.createVcConfig(stepsFuncDir, {\n shouldAddSourcemapSupport: true,\n maxDuration: 'max',\n experimentalTriggers: [STEP_QUEUE_TRIGGER],\n runtime: this.config.runtime,\n });\n\n return manifest;\n }\n\n private async buildWorkflowsFunction({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n console.log('Creating Vercel Build Output API workflows function');\n const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');\n await mkdir(workflowsFuncDir, { recursive: true });\n\n const { manifest } = await this.createWorkflowsBundle({\n outfile: join(workflowsFuncDir, 'index.js'),\n inputFiles,\n tsconfigPath,\n });\n\n // Create package.json and .vc-config.json for workflows function\n await this.createPackageJson(workflowsFuncDir, 'commonjs');\n await this.createVcConfig(workflowsFuncDir, {\n maxDuration: 'max',\n experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],\n runtime: this.config.runtime,\n });\n\n return manifest;\n }\n\n private async buildWebhookFunction({\n workflowGeneratedDir,\n bundle = true,\n }: {\n workflowGeneratedDir: string;\n bundle?: boolean;\n }): Promise<void> {\n console.log('Creating Vercel Build Output API webhook function');\n const webhookFuncDir = join(workflowGeneratedDir, 'webhook/[token].func');\n\n // Bundle the webhook route with dependencies resolved\n await this.createWebhookBundle({\n outfile: join(webhookFuncDir, 'index.js'),\n bundle, // Build Output API needs bundling (except in tests)\n });\n\n // Create package.json and .vc-config.json for webhook function\n await this.createPackageJson(webhookFuncDir, 'commonjs');\n await this.createVcConfig(webhookFuncDir, {\n shouldAddHelpers: false,\n runtime: this.config.runtime,\n });\n }\n\n private async createBuildOutputConfig(outputDir: string): Promise<void> {\n // Create config.json for Build Output API\n const buildOutputConfig = {\n version: 3,\n routes: [\n {\n src: '^\\\\/\\\\.well-known\\\\/workflow\\\\/v1\\\\/webhook\\\\/([^\\\\/]+)$',\n dest: '/.well-known/workflow/v1/webhook/[token]',\n },\n ],\n };\n\n await writeFile(\n join(outputDir, 'config.json'),\n JSON.stringify(buildOutputConfig, null, 2)\n );\n\n console.log(`Build Output API created at ${outputDir}`);\n console.log('Steps function available at /.well-known/workflow/v1/step');\n console.log(\n 'Workflows function available at /.well-known/workflow/v1/flow'\n );\n console.log(\n 'Webhook function available at /.well-known/workflow/v1/webhook/[token]'\n );\n }\n}\n"]}
|