@workflow/next 5.0.0-beta.2 → 5.0.0-beta.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AA6CvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;CACE,IAsBJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBAsLrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AA6CvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;CACE,IAsBJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBAwLrC"}
package/dist/index.js CHANGED
@@ -83,6 +83,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
83
83
  const shouldApplyTurboCondition = supportsTurboCondition && !useDeferredBuilder;
84
84
  const shouldWatch = process.env.NODE_ENV === 'development';
85
85
  let workflowBuilderPromise;
86
+ const distDir = nextConfig.distDir || '.next';
86
87
  const getWorkflowBuilder = async () => {
87
88
  if (!workflowBuilderPromise) {
88
89
  workflowBuilderPromise = (async () => {
@@ -93,7 +94,8 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
93
94
  dirs: ['pages', 'app', 'src/pages', 'src/app'],
94
95
  projectRoot: nextConfig.outputFileTracingRoot,
95
96
  workingDir: process.cwd(),
96
- distDir: nextConfig.distDir || '.next',
97
+ distDir,
98
+ diagnosticsDir: `${distDir}/diagnostics`,
97
99
  buildTarget: 'next',
98
100
  workflowsBundlePath: '', // not used in base
99
101
  stepsBundlePath: '', // not used in base
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NextConfig } from 'next';\nimport semver from 'semver';\nimport {\n getNextBuilder,\n shouldUseDeferredBuilder,\n WORKFLOW_DEFERRED_ENTRIES,\n} from './builder.js';\n\nfunction resolveNextVersion(workingDir: string): string {\n const errors: unknown[] = [];\n\n // Try resolving from the consuming project's working directory first.\n // This handles monorepo setups where `next` may not be hoisted to the\n // same location as `@workflow/next`.\n try {\n const packageJsonPath = require.resolve('next/package.json', {\n paths: [workingDir],\n });\n const resolvedPackageJson = require(packageJsonPath) as {\n version?: unknown;\n };\n if (typeof resolvedPackageJson.version === 'string') {\n return resolvedPackageJson.version;\n }\n } catch (e) {\n errors.push(e);\n }\n\n // Fall back to resolving relative to this package's location.\n try {\n const version = (require('next/package.json') as { version?: unknown })\n .version;\n if (typeof version === 'string') {\n return version;\n }\n } catch (e) {\n errors.push(e);\n }\n\n throw new AggregateError(\n errors,\n `Could not resolve Next.js version. Ensure \\`next\\` is installed in your project (working directory: ${workingDir}).`\n );\n}\n\nexport function withWorkflow(\n nextConfigOrFn:\n | NextConfig\n | ((\n phase: string,\n ctx: { defaultConfig: NextConfig }\n ) => Promise<NextConfig>),\n {\n workflows,\n }: {\n workflows?: {\n lazyDiscovery?: boolean;\n local?: {\n port?: number;\n };\n };\n } = {}\n) {\n if (workflows?.lazyDiscovery) {\n process.env.WORKFLOW_NEXT_LAZY_DISCOVERY = '1';\n }\n\n if (!process.env.VERCEL_DEPLOYMENT_ID) {\n if (!process.env.WORKFLOW_TARGET_WORLD) {\n process.env.WORKFLOW_TARGET_WORLD = 'local';\n process.env.WORKFLOW_LOCAL_DATA_DIR = '.next/workflow-data';\n }\n const maybePort = workflows?.local?.port;\n if (maybePort) {\n process.env.PORT = maybePort.toString();\n }\n } else {\n if (!process.env.WORKFLOW_TARGET_WORLD) {\n process.env.WORKFLOW_TARGET_WORLD = 'vercel';\n }\n }\n\n return async function buildConfig(\n phase: string,\n ctx: { defaultConfig: NextConfig }\n ) {\n const loaderPath = require.resolve('./loader');\n let runDeferredBuildFromCallback: (() => Promise<void>) | undefined;\n\n let nextConfig: NextConfig;\n\n if (typeof nextConfigOrFn === 'function') {\n nextConfig = await nextConfigOrFn(phase, ctx);\n } else {\n nextConfig = nextConfigOrFn;\n }\n // shallow clone to avoid read-only on top-level\n nextConfig = Object.assign({}, nextConfig);\n\n // configure the loader if turbopack is being used\n if (!nextConfig.turbopack) {\n nextConfig.turbopack = {};\n }\n if (!nextConfig.turbopack.rules) {\n nextConfig.turbopack.rules = {};\n }\n const existingRules = nextConfig.turbopack.rules as any;\n const nextVersion = resolveNextVersion(process.cwd());\n const supportsTurboCondition = semver.gte(nextVersion, 'v16.0.0');\n const useDeferredBuilder = shouldUseDeferredBuilder(nextVersion);\n\n // Deferred builder discovers files via loader socket notifications, so\n // turbopack content conditions are only needed with the eager builder.\n const shouldApplyTurboCondition =\n supportsTurboCondition && !useDeferredBuilder;\n const shouldWatch = process.env.NODE_ENV === 'development';\n let workflowBuilderPromise: Promise<any> | undefined;\n\n const getWorkflowBuilder = async () => {\n if (!workflowBuilderPromise) {\n workflowBuilderPromise = (async () => {\n const NextBuilder = await getNextBuilder(nextVersion);\n return new NextBuilder({\n watch: shouldWatch,\n // discover workflows from pages/app entries\n dirs: ['pages', 'app', 'src/pages', 'src/app'],\n projectRoot: nextConfig.outputFileTracingRoot,\n workingDir: process.cwd(),\n distDir: nextConfig.distDir || '.next',\n buildTarget: 'next',\n workflowsBundlePath: '', // not used in base\n stepsBundlePath: '', // not used in base\n webhookBundlePath: '', // node used in base\n suppressCreateWorkflowsBundleLogs: useDeferredBuilder,\n suppressCreateWorkflowsBundleWarnings: useDeferredBuilder,\n suppressCreateWebhookBundleLogs: useDeferredBuilder,\n suppressCreateManifestLogs: useDeferredBuilder,\n externalPackages: [\n // server-only and client-only are pseudo-packages handled by Next.js\n // during its build process. We mark them as external to prevent esbuild\n // from failing when bundling code that imports them.\n // See: https://nextjs.org/docs/app/getting-started/server-and-client-components\n 'server-only',\n 'client-only',\n ...(nextConfig.serverExternalPackages || []),\n ],\n });\n })();\n }\n\n return workflowBuilderPromise;\n };\n\n if (useDeferredBuilder) {\n runDeferredBuildFromCallback = async () => {\n const workflowBuilder = await getWorkflowBuilder();\n if (typeof workflowBuilder.onBeforeDeferredEntries === 'function') {\n await workflowBuilder.onBeforeDeferredEntries();\n }\n };\n\n const existingExperimental = (nextConfig.experimental ?? {}) as Record<\n string,\n any\n >;\n const existingDeferredEntries = Array.isArray(\n existingExperimental.deferredEntries\n )\n ? existingExperimental.deferredEntries\n : [];\n const existingOnBeforeDeferredEntries =\n typeof existingExperimental.onBeforeDeferredEntries === 'function'\n ? existingExperimental.onBeforeDeferredEntries\n : undefined;\n\n nextConfig.experimental = {\n ...existingExperimental,\n\n // biome-ignore lint/suspicious/noTsIgnore: expect-error is wrong as it will work on valid version\n // @ts-ignore this is only available in canary Next.js\n deferredEntries: [\n ...new Set([\n ...existingDeferredEntries,\n ...WORKFLOW_DEFERRED_ENTRIES,\n ]),\n ],\n onBeforeDeferredEntries: async (...args: unknown[]) => {\n if (existingOnBeforeDeferredEntries) {\n await existingOnBeforeDeferredEntries(...args);\n }\n if (runDeferredBuildFromCallback) {\n await runDeferredBuildFromCallback();\n }\n },\n };\n }\n\n for (const key of [\n '*.tsx',\n '*.ts',\n '*.jsx',\n '*.js',\n '*.mjs',\n '*.mts',\n '*.cjs',\n '*.cts',\n ]) {\n nextConfig.turbopack.rules[key] = {\n ...(shouldApplyTurboCondition\n ? {\n condition: {\n // Use 'all' to combine: must match content AND must NOT be in generated path\n // Merge with any existing 'all' conditions from user config\n all: [\n ...(existingRules[key]?.condition?.all || []),\n // Exclude generated workflow route files from transformation\n { not: { path: /[/\\\\]\\.well-known[/\\\\]workflow[/\\\\]/ } },\n // Match files with workflow directives or custom serialization patterns\n // Uses backreferences (\\2, \\3) to ensure matching quote types\n {\n content:\n /(use workflow|use step|from\\s+(['\"])@workflow\\/serde\\2|Symbol\\.for\\s*\\(\\s*(['\"])workflow-(?:serialize|deserialize)\\3\\s*\\))/,\n },\n ],\n },\n }\n : {}),\n loaders: [...(existingRules[key]?.loaders || []), loaderPath],\n };\n }\n\n // configure the loader for webpack\n const existingWebpackModify = nextConfig.webpack;\n nextConfig.webpack = (...args) => {\n const [webpackConfig] = args;\n if (!webpackConfig.module) {\n webpackConfig.module = {};\n }\n if (!webpackConfig.module.rules) {\n webpackConfig.module.rules = [];\n }\n // loaders in webpack apply bottom->up so ensure\n // ours comes before the default swc transform\n webpackConfig.module.rules.push({\n test: /.*\\.(mjs|cjs|cts|ts|tsx|js|jsx)$/,\n loader: loaderPath,\n });\n\n return existingWebpackModify\n ? existingWebpackModify(...args)\n : webpackConfig;\n };\n // only run this in the main process so it only runs once\n // as Next.js uses child processes for different builds\n if (\n !process.env.WORKFLOW_NEXT_PRIVATE_BUILT &&\n phase !== 'phase-production-server'\n ) {\n const workflowBuilder = await getWorkflowBuilder();\n\n await workflowBuilder.build();\n process.env.WORKFLOW_NEXT_PRIVATE_BUILT = '1';\n }\n\n return nextConfig;\n };\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NextConfig } from 'next';\nimport semver from 'semver';\nimport {\n getNextBuilder,\n shouldUseDeferredBuilder,\n WORKFLOW_DEFERRED_ENTRIES,\n} from './builder.js';\n\nfunction resolveNextVersion(workingDir: string): string {\n const errors: unknown[] = [];\n\n // Try resolving from the consuming project's working directory first.\n // This handles monorepo setups where `next` may not be hoisted to the\n // same location as `@workflow/next`.\n try {\n const packageJsonPath = require.resolve('next/package.json', {\n paths: [workingDir],\n });\n const resolvedPackageJson = require(packageJsonPath) as {\n version?: unknown;\n };\n if (typeof resolvedPackageJson.version === 'string') {\n return resolvedPackageJson.version;\n }\n } catch (e) {\n errors.push(e);\n }\n\n // Fall back to resolving relative to this package's location.\n try {\n const version = (require('next/package.json') as { version?: unknown })\n .version;\n if (typeof version === 'string') {\n return version;\n }\n } catch (e) {\n errors.push(e);\n }\n\n throw new AggregateError(\n errors,\n `Could not resolve Next.js version. Ensure \\`next\\` is installed in your project (working directory: ${workingDir}).`\n );\n}\n\nexport function withWorkflow(\n nextConfigOrFn:\n | NextConfig\n | ((\n phase: string,\n ctx: { defaultConfig: NextConfig }\n ) => Promise<NextConfig>),\n {\n workflows,\n }: {\n workflows?: {\n lazyDiscovery?: boolean;\n local?: {\n port?: number;\n };\n };\n } = {}\n) {\n if (workflows?.lazyDiscovery) {\n process.env.WORKFLOW_NEXT_LAZY_DISCOVERY = '1';\n }\n\n if (!process.env.VERCEL_DEPLOYMENT_ID) {\n if (!process.env.WORKFLOW_TARGET_WORLD) {\n process.env.WORKFLOW_TARGET_WORLD = 'local';\n process.env.WORKFLOW_LOCAL_DATA_DIR = '.next/workflow-data';\n }\n const maybePort = workflows?.local?.port;\n if (maybePort) {\n process.env.PORT = maybePort.toString();\n }\n } else {\n if (!process.env.WORKFLOW_TARGET_WORLD) {\n process.env.WORKFLOW_TARGET_WORLD = 'vercel';\n }\n }\n\n return async function buildConfig(\n phase: string,\n ctx: { defaultConfig: NextConfig }\n ) {\n const loaderPath = require.resolve('./loader');\n let runDeferredBuildFromCallback: (() => Promise<void>) | undefined;\n\n let nextConfig: NextConfig;\n\n if (typeof nextConfigOrFn === 'function') {\n nextConfig = await nextConfigOrFn(phase, ctx);\n } else {\n nextConfig = nextConfigOrFn;\n }\n // shallow clone to avoid read-only on top-level\n nextConfig = Object.assign({}, nextConfig);\n\n // configure the loader if turbopack is being used\n if (!nextConfig.turbopack) {\n nextConfig.turbopack = {};\n }\n if (!nextConfig.turbopack.rules) {\n nextConfig.turbopack.rules = {};\n }\n const existingRules = nextConfig.turbopack.rules as any;\n const nextVersion = resolveNextVersion(process.cwd());\n const supportsTurboCondition = semver.gte(nextVersion, 'v16.0.0');\n const useDeferredBuilder = shouldUseDeferredBuilder(nextVersion);\n\n // Deferred builder discovers files via loader socket notifications, so\n // turbopack content conditions are only needed with the eager builder.\n const shouldApplyTurboCondition =\n supportsTurboCondition && !useDeferredBuilder;\n const shouldWatch = process.env.NODE_ENV === 'development';\n let workflowBuilderPromise: Promise<any> | undefined;\n const distDir = nextConfig.distDir || '.next';\n\n const getWorkflowBuilder = async () => {\n if (!workflowBuilderPromise) {\n workflowBuilderPromise = (async () => {\n const NextBuilder = await getNextBuilder(nextVersion);\n return new NextBuilder({\n watch: shouldWatch,\n // discover workflows from pages/app entries\n dirs: ['pages', 'app', 'src/pages', 'src/app'],\n projectRoot: nextConfig.outputFileTracingRoot,\n workingDir: process.cwd(),\n distDir,\n diagnosticsDir: `${distDir}/diagnostics`,\n buildTarget: 'next',\n workflowsBundlePath: '', // not used in base\n stepsBundlePath: '', // not used in base\n webhookBundlePath: '', // node used in base\n suppressCreateWorkflowsBundleLogs: useDeferredBuilder,\n suppressCreateWorkflowsBundleWarnings: useDeferredBuilder,\n suppressCreateWebhookBundleLogs: useDeferredBuilder,\n suppressCreateManifestLogs: useDeferredBuilder,\n externalPackages: [\n // server-only and client-only are pseudo-packages handled by Next.js\n // during its build process. We mark them as external to prevent esbuild\n // from failing when bundling code that imports them.\n // See: https://nextjs.org/docs/app/getting-started/server-and-client-components\n 'server-only',\n 'client-only',\n ...(nextConfig.serverExternalPackages || []),\n ],\n });\n })();\n }\n\n return workflowBuilderPromise;\n };\n\n if (useDeferredBuilder) {\n runDeferredBuildFromCallback = async () => {\n const workflowBuilder = await getWorkflowBuilder();\n if (typeof workflowBuilder.onBeforeDeferredEntries === 'function') {\n await workflowBuilder.onBeforeDeferredEntries();\n }\n };\n\n const existingExperimental = (nextConfig.experimental ?? {}) as Record<\n string,\n any\n >;\n const existingDeferredEntries = Array.isArray(\n existingExperimental.deferredEntries\n )\n ? existingExperimental.deferredEntries\n : [];\n const existingOnBeforeDeferredEntries =\n typeof existingExperimental.onBeforeDeferredEntries === 'function'\n ? existingExperimental.onBeforeDeferredEntries\n : undefined;\n\n nextConfig.experimental = {\n ...existingExperimental,\n\n // biome-ignore lint/suspicious/noTsIgnore: expect-error is wrong as it will work on valid version\n // @ts-ignore this is only available in canary Next.js\n deferredEntries: [\n ...new Set([\n ...existingDeferredEntries,\n ...WORKFLOW_DEFERRED_ENTRIES,\n ]),\n ],\n onBeforeDeferredEntries: async (...args: unknown[]) => {\n if (existingOnBeforeDeferredEntries) {\n await existingOnBeforeDeferredEntries(...args);\n }\n if (runDeferredBuildFromCallback) {\n await runDeferredBuildFromCallback();\n }\n },\n };\n }\n\n for (const key of [\n '*.tsx',\n '*.ts',\n '*.jsx',\n '*.js',\n '*.mjs',\n '*.mts',\n '*.cjs',\n '*.cts',\n ]) {\n nextConfig.turbopack.rules[key] = {\n ...(shouldApplyTurboCondition\n ? {\n condition: {\n // Use 'all' to combine: must match content AND must NOT be in generated path\n // Merge with any existing 'all' conditions from user config\n all: [\n ...(existingRules[key]?.condition?.all || []),\n // Exclude generated workflow route files from transformation\n { not: { path: /[/\\\\]\\.well-known[/\\\\]workflow[/\\\\]/ } },\n // Match files with workflow directives or custom serialization patterns\n // Uses backreferences (\\2, \\3) to ensure matching quote types\n {\n content:\n /(use workflow|use step|from\\s+(['\"])@workflow\\/serde\\2|Symbol\\.for\\s*\\(\\s*(['\"])workflow-(?:serialize|deserialize)\\3\\s*\\))/,\n },\n ],\n },\n }\n : {}),\n loaders: [...(existingRules[key]?.loaders || []), loaderPath],\n };\n }\n\n // configure the loader for webpack\n const existingWebpackModify = nextConfig.webpack;\n nextConfig.webpack = (...args) => {\n const [webpackConfig] = args;\n if (!webpackConfig.module) {\n webpackConfig.module = {};\n }\n if (!webpackConfig.module.rules) {\n webpackConfig.module.rules = [];\n }\n // loaders in webpack apply bottom->up so ensure\n // ours comes before the default swc transform\n webpackConfig.module.rules.push({\n test: /.*\\.(mjs|cjs|cts|ts|tsx|js|jsx)$/,\n loader: loaderPath,\n });\n\n return existingWebpackModify\n ? existingWebpackModify(...args)\n : webpackConfig;\n };\n // only run this in the main process so it only runs once\n // as Next.js uses child processes for different builds\n if (\n !process.env.WORKFLOW_NEXT_PRIVATE_BUILT &&\n phase !== 'phase-production-server'\n ) {\n const workflowBuilder = await getWorkflowBuilder();\n\n await workflowBuilder.build();\n process.env.WORKFLOW_NEXT_PRIVATE_BUILT = '1';\n }\n\n return nextConfig;\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AA2mBA,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CA6KjC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AA8lBA,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CA+IjC"}
package/dist/loader.js CHANGED
@@ -7,7 +7,6 @@ const node_net_1 = require("node:net");
7
7
  const node_path_1 = require("node:path");
8
8
  const core_1 = require("@swc/core");
9
9
  const socket_server_js_1 = require("./socket-server.js");
10
- const step_copy_utils_js_1 = require("./step-copy-utils.js");
11
10
  // Cache decorator options per working directory to avoid reading tsconfig for every file
12
11
  const decoratorOptionsCache = new Map();
13
12
  // Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)
@@ -63,7 +62,6 @@ function resolveLoaderStaticDependencies() {
63
62
  const files = new Set([
64
63
  __filename,
65
64
  require.resolve('./socket-server'),
66
- require.resolve('./step-copy-utils'),
67
65
  swcPluginPath,
68
66
  swcPluginBuildHashPath,
69
67
  workflowBuildersPath,
@@ -444,10 +442,6 @@ async function getRelativeFilenameForSwc(filename, workingDir) {
444
442
  }
445
443
  return relativeFilename;
446
444
  }
447
- function stripDeferredStepSourceMetadataComment(source) {
448
- const metadataPattern = new RegExp(`^\\s*//\\s*${step_copy_utils_js_1.DEFERRED_STEP_SOURCE_METADATA_PREFIX}[A-Za-z0-9+/=]+\\s*\\r?\\n?`);
449
- return source.replace(metadataPattern, '');
450
- }
451
445
  function workflowLoader(source, sourceMap) {
452
446
  const callback = this.async?.();
453
447
  const run = async () => {
@@ -455,29 +449,12 @@ function workflowLoader(source, sourceMap) {
455
449
  const normalizedSource = source.toString();
456
450
  const workingDir = process.cwd();
457
451
  const swcPluginPath = registerTransformDependencies(this);
458
- const isDeferredStepCopyFile = (0, step_copy_utils_js_1.isDeferredStepCopyFilePath)(filename);
459
- const deferredStepSourceMetadata = isDeferredStepCopyFile
460
- ? (0, step_copy_utils_js_1.parseDeferredStepSourceMetadata)(normalizedSource)
461
- : null;
462
- const sourceWithoutDeferredMetadata = isDeferredStepCopyFile
463
- ? stripDeferredStepSourceMetadataComment(normalizedSource)
464
- : normalizedSource;
465
- const deferredSourceMapResult = isDeferredStepCopyFile
466
- ? (0, step_copy_utils_js_1.parseInlineSourceMapComment)(sourceWithoutDeferredMetadata)
467
- : {
468
- sourceWithoutMapComment: sourceWithoutDeferredMetadata,
469
- sourceMap: null,
470
- };
471
- const sourceForTransform = deferredSourceMapResult.sourceWithoutMapComment;
472
- const discoveryFilePath = deferredStepSourceMetadata?.absolutePath || filename;
473
- if (deferredStepSourceMetadata?.absolutePath) {
474
- // Ensure edits to the original source invalidate deferred step copies.
475
- registerFileDependency(this, deferredStepSourceMetadata.absolutePath);
476
- }
452
+ const sourceForTransform = normalizedSource;
477
453
  const isGeneratedWorkflowFile = await checkGeneratedFile(filename);
478
- // Skip generated workflow route files to avoid re-processing them, except
479
- // deferred route stubs which must wait for generated route output.
480
- if (isGeneratedWorkflowFile && !isDeferredStepCopyFile) {
454
+ // Skip generated workflow route files to avoid re-processing them.
455
+ // Deferred route stubs are a special case: wait for the generated route
456
+ // output to become available before returning.
457
+ if (isGeneratedWorkflowFile) {
481
458
  if (process.env.WORKFLOW_NEXT_LAZY_DISCOVERY === '1' &&
482
459
  isWorkflowRouteStubSource(normalizedSource)) {
483
460
  try {
@@ -497,25 +474,18 @@ function workflowLoader(source, sourceMap) {
497
474
  const patterns = await detectPatterns(sourceForTransform);
498
475
  // Always notify discovery tracking, even for `false/false`, so files that
499
476
  // previously had workflow/step usage are removed from the tracked sets.
500
- // Deferred step copy files must report using their original source path so
501
- // deferred rebuilds can react to source edits outside generated artifacts.
502
- if (!isDeferredStepCopyFile || deferredStepSourceMetadata?.absolutePath) {
503
- const hasSerde = patterns.hasSerde;
504
- const nextPatternState = {
505
- hasWorkflow: patterns.hasUseWorkflow,
506
- hasStep: patterns.hasUseStep,
507
- hasSerde,
508
- };
509
- const { shouldNotify } = updateDiscoveredPatternState(discoveryFilePath, nextPatternState);
510
- if (shouldNotify) {
511
- await notifySocketServer(discoveryFilePath, nextPatternState.hasWorkflow, nextPatternState.hasStep, nextPatternState.hasSerde);
512
- }
477
+ const nextPatternState = {
478
+ hasWorkflow: patterns.hasUseWorkflow,
479
+ hasStep: patterns.hasUseStep,
480
+ hasSerde: patterns.hasSerde,
481
+ };
482
+ const { shouldNotify } = updateDiscoveredPatternState(filename, nextPatternState);
483
+ if (shouldNotify) {
484
+ await notifySocketServer(filename, nextPatternState.hasWorkflow, nextPatternState.hasStep, nextPatternState.hasSerde);
513
485
  }
514
- if (!isDeferredStepCopyFile) {
515
- // Check if file needs transformation based on patterns and path
516
- if (!(await checkShouldTransform(filename, patterns))) {
517
- return { code: normalizedSource, map: sourceMap };
518
- }
486
+ // Check if file needs transformation based on patterns and path
487
+ if (!(await checkShouldTransform(filename, patterns))) {
488
+ return { code: normalizedSource, map: sourceMap };
519
489
  }
520
490
  const isTypeScript = filename.endsWith('.ts') ||
521
491
  filename.endsWith('.tsx') ||
@@ -523,16 +493,15 @@ function workflowLoader(source, sourceMap) {
523
493
  filename.endsWith('.cts');
524
494
  // Calculate relative filename for SWC plugin
525
495
  // The SWC plugin uses filename to generate workflowId, so it must be relative
526
- const relativeFilename = deferredStepSourceMetadata?.relativeFilename ||
527
- (await getRelativeFilenameForSwc(filename, workingDir));
496
+ const relativeFilename = await getRelativeFilenameForSwc(filename, workingDir);
528
497
  // Get decorator options from tsconfig (cached per working directory)
529
498
  const { options: decoratorOptions, configPath } = await getDecoratorOptions(workingDir);
530
499
  if (configPath) {
531
500
  registerFileDependency(this, configPath);
532
501
  }
533
502
  // Resolve module specifier for packages (node_modules or workspace packages)
534
- const moduleSpecifier = await getModuleSpecifier(deferredStepSourceMetadata?.absolutePath || filename, workingDir);
535
- const mode = isDeferredStepCopyFile ? 'step' : 'client';
503
+ const moduleSpecifier = await getModuleSpecifier(filename, workingDir);
504
+ const mode = 'step';
536
505
  // Transform with SWC
537
506
  const result = await (0, core_1.transform)(sourceForTransform, {
538
507
  filename: relativeFilename,
@@ -563,9 +532,7 @@ function workflowLoader(source, sourceMap) {
563
532
  },
564
533
  },
565
534
  minify: false,
566
- inputSourceMap: isDeferredStepCopyFile
567
- ? deferredSourceMapResult.sourceMap || sourceMap
568
- : sourceMap,
535
+ inputSourceMap: sourceMap,
569
536
  sourceMaps: true,
570
537
  inlineSourcesContent: true,
571
538
  });
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { connect, type Socket } from 'node:net';\nimport { dirname, join, relative } from 'node:path';\nimport { transform } from '@swc/core';\nimport {\n parseMessage,\n type SocketMessage,\n serializeMessage,\n} from './socket-server.js';\nimport {\n DEFERRED_STEP_SOURCE_METADATA_PREFIX,\n isDeferredStepCopyFilePath,\n parseDeferredStepSourceMetadata,\n parseInlineSourceMapComment,\n} from './step-copy-utils.js';\n\ntype DecoratorOptionsWithConfigPath =\n import('@workflow/builders').DecoratorOptionsWithConfigPath;\ntype WorkflowPatternMatch = import('@workflow/builders').WorkflowPatternMatch;\n\n// Cache decorator options per working directory to avoid reading tsconfig for every file\nconst decoratorOptionsCache = new Map<\n string,\n Promise<DecoratorOptionsWithConfigPath>\n>();\n// Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)\nlet cachedBuildersModule: typeof import('@workflow/builders') | null = null;\ntype LoaderStaticDependencies = {\n swcPluginPath: string;\n files: string[];\n};\nlet cachedLoaderStaticDependencies: LoaderStaticDependencies | null = null;\n\ntype DiscoveredPatternState = {\n hasWorkflow: boolean;\n hasStep: boolean;\n hasSerde: boolean;\n};\nconst discoveredPatternStateByFilePath = new Map<\n string,\n DiscoveredPatternState\n>();\n\n// Cache socket connection to avoid reconnecting on every file.\nlet socketClientPromise: Promise<Socket | null> | null = null;\nlet socketClient: Socket | null = null;\nlet socketClientKey: string | null = null;\n\ntype SocketCredentials = {\n port: number;\n authToken: string;\n};\n\nconst ROUTE_STUB_FILE_MARKER = 'WORKFLOW_ROUTE_STUB_FILE';\nconst ROUTE_STUB_BUILD_WAIT_TIMEOUT_MS = 120_000;\nlet pendingDeferredRouteStubBuildPromise: Promise<void> | null = null;\n\nfunction registerFileDependency(\n loaderContext: WorkflowLoaderContext,\n dependencyPath: string\n): void {\n loaderContext.addDependency?.(dependencyPath);\n loaderContext.addBuildDependency?.(dependencyPath);\n}\n\nfunction updateDiscoveredPatternState(\n filePath: string,\n nextState: DiscoveredPatternState\n): { shouldNotify: boolean; previousState?: DiscoveredPatternState } {\n const previousState = discoveredPatternStateByFilePath.get(filePath);\n const hasAnyPattern =\n nextState.hasWorkflow || nextState.hasStep || nextState.hasSerde;\n\n if (!hasAnyPattern) {\n if (!previousState) {\n return { shouldNotify: false };\n }\n discoveredPatternStateByFilePath.delete(filePath);\n return { shouldNotify: true, previousState };\n }\n\n if (\n previousState &&\n previousState.hasWorkflow === nextState.hasWorkflow &&\n previousState.hasStep === nextState.hasStep &&\n previousState.hasSerde === nextState.hasSerde\n ) {\n return { shouldNotify: false, previousState };\n }\n\n discoveredPatternStateByFilePath.set(filePath, nextState);\n return { shouldNotify: true, previousState };\n}\n\nfunction addIfExists(files: Set<string>, dependencyPath: string): void {\n if (existsSync(dependencyPath)) {\n files.add(dependencyPath);\n }\n}\n\nfunction resolveLoaderStaticDependencies(): LoaderStaticDependencies {\n if (cachedLoaderStaticDependencies) {\n return cachedLoaderStaticDependencies;\n }\n\n const swcPluginPath = require.resolve('@workflow/swc-plugin');\n const swcPluginBuildHashPath = require.resolve(\n '@workflow/swc-plugin/build-hash.json'\n );\n const workflowBuildersPath = require.resolve('@workflow/builders');\n\n // Derive package.json paths from resolved entrypoints to avoid\n // Turbopack loader-eval failures around ../package.json resolution.\n const swcPluginPackageJsonPath = join(dirname(swcPluginPath), 'package.json');\n const workflowBuildersPackageJsonPath = join(\n dirname(workflowBuildersPath),\n '../package.json'\n );\n\n const files = new Set<string>([\n __filename,\n require.resolve('./socket-server'),\n require.resolve('./step-copy-utils'),\n swcPluginPath,\n swcPluginBuildHashPath,\n workflowBuildersPath,\n ]);\n addIfExists(files, swcPluginPackageJsonPath);\n addIfExists(files, workflowBuildersPackageJsonPath);\n\n cachedLoaderStaticDependencies = {\n swcPluginPath,\n files: Array.from(files),\n };\n return cachedLoaderStaticDependencies;\n}\n\nfunction registerTransformDependencies(\n loaderContext: WorkflowLoaderContext\n): string {\n const staticDependencies = resolveLoaderStaticDependencies();\n for (const dependencyPath of staticDependencies.files) {\n registerFileDependency(loaderContext, dependencyPath);\n }\n\n return staticDependencies.swcPluginPath;\n}\n\nfunction resetSocketClient(cachedSocket?: Socket): void {\n if (cachedSocket && socketClient && socketClient !== cachedSocket) {\n return;\n }\n\n socketClientPromise = null;\n socketClient = null;\n socketClientKey = null;\n}\n\nasync function writeSocketMessage(\n socket: Socket,\n message: string\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n socket.write(message, (error?: Error | null) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n}\n\nfunction getSocketInfoFilePath(): string | null {\n const configuredPath = process.env.WORKFLOW_SOCKET_INFO_PATH;\n if (configuredPath) {\n return configuredPath;\n }\n\n // Fallback for worker processes that don't inherit dynamic env updates\n // from the process that created the socket server.\n const distDir = process.env.WORKFLOW_NEXT_DIST_DIR || '.next';\n const cwdFallbackPath = join(\n process.cwd(),\n distDir,\n 'cache',\n 'workflow-socket.json'\n );\n const projectRoot = process.env.WORKFLOW_PROJECT_ROOT;\n if (projectRoot) {\n const projectRootFallbackPath = join(\n projectRoot,\n distDir,\n 'cache',\n 'workflow-socket.json'\n );\n if (existsSync(projectRootFallbackPath)) {\n return projectRootFallbackPath;\n }\n }\n return cwdFallbackPath;\n}\n\nfunction getSocketCredentialsFromEnv(): SocketCredentials | null {\n const socketPort = process.env.WORKFLOW_SOCKET_PORT;\n const authToken = process.env.WORKFLOW_SOCKET_AUTH;\n if (!socketPort || !authToken) {\n return null;\n }\n\n const port = Number.parseInt(socketPort, 10);\n if (Number.isNaN(port)) {\n return null;\n }\n return { port, authToken };\n}\n\nasync function getSocketCredentialsFromFile(): Promise<SocketCredentials | null> {\n const socketInfoFilePath = getSocketInfoFilePath();\n if (!socketInfoFilePath) {\n return null;\n }\n if (!existsSync(socketInfoFilePath)) {\n return null;\n }\n\n try {\n const raw = await readFile(socketInfoFilePath, 'utf8');\n const parsed = JSON.parse(raw) as {\n port?: unknown;\n authToken?: unknown;\n };\n const authToken =\n typeof parsed.authToken === 'string' ? parsed.authToken : null;\n const numericPort =\n typeof parsed.port === 'number'\n ? parsed.port\n : Number.parseInt(String(parsed.port), 10);\n\n if (!authToken || Number.isNaN(numericPort)) {\n return null;\n }\n return {\n port: numericPort,\n authToken,\n };\n } catch {\n return null;\n }\n}\n\nasync function getSocketCredentials(): Promise<SocketCredentials | null> {\n const envCredentials = getSocketCredentialsFromEnv();\n if (envCredentials) {\n return envCredentials;\n }\n return await getSocketCredentialsFromFile();\n}\n\nasync function getSocketClient(): Promise<Socket | null> {\n const socketCredentials = await getSocketCredentials();\n if (!socketCredentials) {\n return null;\n }\n\n if (socketClient?.destroyed) {\n resetSocketClient(socketClient);\n }\n\n const currentSocketKey = `${socketCredentials.port}:${socketCredentials.authToken}`;\n if (socketClientKey && socketClientKey !== currentSocketKey) {\n if (socketClient) {\n resetSocketClient(socketClient);\n } else {\n resetSocketClient();\n }\n }\n\n if (!socketClientPromise) {\n socketClientPromise = (async () => {\n try {\n const socket = connect({\n port: socketCredentials.port,\n host: '127.0.0.1',\n });\n\n // Wait for connection\n await new Promise<void>((resolve, reject) => {\n const onConnect = () => {\n socket.setNoDelay(true);\n cleanup();\n resolve();\n };\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n const timeout = setTimeout(() => {\n cleanup();\n socket.destroy();\n reject(new Error('Socket connection timeout'));\n }, 1000);\n const cleanup = () => {\n clearTimeout(timeout);\n socket.off('connect', onConnect);\n socket.off('error', onError);\n };\n\n socket.on('connect', onConnect);\n socket.on('error', onError);\n });\n\n socket.on('close', () => {\n resetSocketClient(socket);\n });\n socket.on('error', () => {\n resetSocketClient(socket);\n });\n\n socketClient = socket;\n socketClientKey = currentSocketKey;\n return socket;\n } catch (error) {\n resetSocketClient();\n throw error;\n }\n })();\n }\n return socketClientPromise;\n}\n\nasync function notifySocketServer(\n filename: string,\n hasWorkflow: boolean,\n hasStep: boolean,\n hasSerde: boolean\n): Promise<void> {\n const socketCredentials = await getSocketCredentials();\n if (!socketCredentials) {\n return;\n }\n\n const socket = await getSocketClient();\n if (!socket) {\n throw new Error('Invariant: missing workflow socket connection');\n }\n\n const message: SocketMessage = {\n type: 'file-discovered',\n filePath: filename,\n hasWorkflow,\n hasStep,\n hasSerde,\n };\n const serializedMessage = serializeMessage(\n message,\n socketCredentials.authToken\n );\n\n try {\n await writeSocketMessage(socket, serializedMessage);\n } catch (error) {\n resetSocketClient(socket);\n const reconnectedSocket = await getSocketClient();\n if (!reconnectedSocket) {\n throw error;\n }\n await writeSocketMessage(reconnectedSocket, serializedMessage);\n }\n}\n\nfunction isWorkflowRouteStubSource(source: string): boolean {\n return source.includes(ROUTE_STUB_FILE_MARKER);\n}\n\nasync function createSocketConnection(\n socketCredentials: SocketCredentials,\n timeoutMs = 1_000\n): Promise<Socket> {\n return await new Promise<Socket>((resolve, reject) => {\n const socket = connect({\n port: socketCredentials.port,\n host: '127.0.0.1',\n });\n const timeout = setTimeout(() => {\n cleanup();\n socket.destroy();\n reject(new Error('Socket connection timeout'));\n }, timeoutMs);\n const cleanup = () => {\n clearTimeout(timeout);\n socket.off('connect', onConnect);\n socket.off('error', onError);\n };\n const onConnect = () => {\n socket.setNoDelay(true);\n cleanup();\n resolve(socket);\n };\n const onError = (error: Error) => {\n cleanup();\n socket.destroy();\n reject(error);\n };\n\n socket.on('connect', onConnect);\n socket.on('error', onError);\n });\n}\n\nasync function waitForDeferredBuildComplete(\n socket: Socket,\n authToken: string,\n timeoutMs = ROUTE_STUB_BUILD_WAIT_TIMEOUT_MS\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n let buffer = '';\n const timeout = setTimeout(() => {\n cleanup();\n reject(\n new Error('Timed out waiting for deferred route build completion')\n );\n }, timeoutMs);\n const cleanup = () => {\n clearTimeout(timeout);\n socket.off('data', onData);\n socket.off('error', onError);\n socket.off('close', onClose);\n socket.off('end', onClose);\n };\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n const onClose = () => {\n cleanup();\n reject(new Error('Socket closed before deferred route build completed'));\n };\n const onData = (chunk: Buffer) => {\n buffer += chunk.toString();\n let newlineIndex = buffer.indexOf('\\n');\n while (newlineIndex !== -1) {\n const line = buffer.slice(0, newlineIndex);\n buffer = buffer.slice(newlineIndex + 1);\n newlineIndex = buffer.indexOf('\\n');\n\n const message = parseMessage(line, authToken);\n if (message?.type === 'build-complete') {\n cleanup();\n resolve();\n return;\n }\n }\n };\n\n socket.on('data', onData);\n socket.on('error', onError);\n socket.on('close', onClose);\n socket.on('end', onClose);\n });\n}\n\nasync function triggerDeferredRouteStubBuildAndWait(): Promise<void> {\n const socketCredentials = await getSocketCredentials();\n if (!socketCredentials) {\n return;\n }\n const socket = await createSocketConnection(socketCredentials);\n try {\n await writeSocketMessage(\n socket,\n serializeMessage({ type: 'trigger-build' }, socketCredentials.authToken)\n );\n await waitForDeferredBuildComplete(socket, socketCredentials.authToken);\n } finally {\n socket.destroy();\n }\n}\n\nasync function ensureDeferredRouteStubBuildAndWait(): Promise<void> {\n if (pendingDeferredRouteStubBuildPromise) {\n return pendingDeferredRouteStubBuildPromise;\n }\n const pendingPromise = triggerDeferredRouteStubBuildAndWait();\n pendingDeferredRouteStubBuildPromise = pendingPromise.finally(() => {\n if (pendingDeferredRouteStubBuildPromise === pendingPromise) {\n pendingDeferredRouteStubBuildPromise = null;\n }\n });\n return pendingDeferredRouteStubBuildPromise;\n}\n\nasync function getBuildersModule(): Promise<\n typeof import('@workflow/builders')\n> {\n if (cachedBuildersModule) {\n return cachedBuildersModule;\n }\n // Dynamic import to handle ESM module from CommonJS context\n // biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`\n cachedBuildersModule = (await eval(\n 'import(\"@workflow/builders\")'\n )) as typeof import('@workflow/builders');\n return cachedBuildersModule;\n}\n\nasync function getDecoratorOptions(\n workingDir: string\n): Promise<DecoratorOptionsWithConfigPath> {\n const cached = decoratorOptionsCache.get(workingDir);\n if (cached) {\n return cached;\n }\n\n const promise = (async (): Promise<DecoratorOptionsWithConfigPath> => {\n const { getDecoratorOptionsForDirectoryWithConfigPath } =\n await getBuildersModule();\n return getDecoratorOptionsForDirectoryWithConfigPath(workingDir);\n })();\n\n decoratorOptionsCache.set(workingDir, promise);\n return promise;\n}\n\nasync function detectPatterns(source: string): Promise<WorkflowPatternMatch> {\n const { detectWorkflowPatterns } = await getBuildersModule();\n return detectWorkflowPatterns(source);\n}\n\nasync function checkGeneratedFile(filePath: string): Promise<boolean> {\n const { isGeneratedWorkflowFile } = await getBuildersModule();\n return isGeneratedWorkflowFile(filePath);\n}\n\nasync function checkShouldTransform(\n filePath: string,\n patterns: WorkflowPatternMatch\n): Promise<boolean> {\n const { shouldTransformFile } = await getBuildersModule();\n return shouldTransformFile(filePath, patterns);\n}\n\nasync function getModuleSpecifier(\n filePath: string,\n projectRoot: string\n): Promise<string | undefined> {\n const { resolveModuleSpecifier } = await getBuildersModule();\n return resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier;\n}\n\nasync function resolveWorkflowAliasPath(\n filePath: string,\n workingDir: string\n): Promise<string | undefined> {\n const { resolveWorkflowAliasRelativePath } = await getBuildersModule();\n return resolveWorkflowAliasRelativePath(filePath, workingDir);\n}\n\nasync function getRelativeFilenameForSwc(\n filename: string,\n workingDir: string\n): Promise<string> {\n const normalizedWorkingDir = workingDir\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedFilepath = filename.replace(/\\\\/g, '/');\n\n // Windows fix: Use case-insensitive comparison to work around drive letter casing issues\n const lowerWd = normalizedWorkingDir.toLowerCase();\n const lowerPath = normalizedFilepath.toLowerCase();\n\n let relativeFilename: string;\n if (lowerPath.startsWith(`${lowerWd}/`)) {\n // File is under working directory - manually calculate relative path\n relativeFilename = normalizedFilepath.substring(\n normalizedWorkingDir.length + 1\n );\n } else if (lowerPath === lowerWd) {\n // File IS the working directory (shouldn't happen)\n relativeFilename = '.';\n } else {\n // Use relative() for files outside working directory\n relativeFilename = relative(workingDir, filename).replace(/\\\\/g, '/');\n\n if (relativeFilename.startsWith('../')) {\n const aliasedRelativePath = await resolveWorkflowAliasPath(\n filename,\n workingDir\n );\n if (aliasedRelativePath) {\n relativeFilename = aliasedRelativePath;\n } else {\n relativeFilename = relativeFilename\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 (relativeFilename.includes(':') || relativeFilename.startsWith('/')) {\n // This should rarely happen, but use filename split as last resort\n relativeFilename = normalizedFilepath.split('/').pop() || 'unknown.ts';\n }\n\n return relativeFilename;\n}\n\nfunction stripDeferredStepSourceMetadataComment(source: string): string {\n const metadataPattern = new RegExp(\n `^\\\\s*//\\\\s*${DEFERRED_STEP_SOURCE_METADATA_PREFIX}[A-Za-z0-9+/=]+\\\\s*\\\\r?\\\\n?`\n );\n return source.replace(metadataPattern, '');\n}\n\n// This loader applies the \"use workflow\"/\"use step\" transform.\n// Deferred step-copy files are transformed in step mode; all other files use client mode.\ntype WorkflowLoaderContext = {\n resourcePath: string;\n async?: () => (\n error: Error | null,\n content?: string,\n sourceMap?: any\n ) => void;\n addDependency?: (dependency: string) => void;\n addBuildDependency?: (dependency: string) => void;\n};\n\nexport default function workflowLoader(\n this: WorkflowLoaderContext,\n source: string | Buffer,\n sourceMap: any\n): string | Promise<string> | void {\n const callback = this.async?.();\n const run = async (): Promise<{ code: string; map: any }> => {\n const filename = this.resourcePath;\n const normalizedSource = source.toString();\n const workingDir = process.cwd();\n const swcPluginPath = registerTransformDependencies(this);\n const isDeferredStepCopyFile = isDeferredStepCopyFilePath(filename);\n const deferredStepSourceMetadata = isDeferredStepCopyFile\n ? parseDeferredStepSourceMetadata(normalizedSource)\n : null;\n const sourceWithoutDeferredMetadata = isDeferredStepCopyFile\n ? stripDeferredStepSourceMetadataComment(normalizedSource)\n : normalizedSource;\n const deferredSourceMapResult = isDeferredStepCopyFile\n ? parseInlineSourceMapComment(sourceWithoutDeferredMetadata)\n : {\n sourceWithoutMapComment: sourceWithoutDeferredMetadata,\n sourceMap: null,\n };\n const sourceForTransform = deferredSourceMapResult.sourceWithoutMapComment;\n const discoveryFilePath =\n deferredStepSourceMetadata?.absolutePath || filename;\n\n if (deferredStepSourceMetadata?.absolutePath) {\n // Ensure edits to the original source invalidate deferred step copies.\n registerFileDependency(this, deferredStepSourceMetadata.absolutePath);\n }\n\n const isGeneratedWorkflowFile = await checkGeneratedFile(filename);\n // Skip generated workflow route files to avoid re-processing them, except\n // deferred route stubs which must wait for generated route output.\n if (isGeneratedWorkflowFile && !isDeferredStepCopyFile) {\n if (\n process.env.WORKFLOW_NEXT_LAZY_DISCOVERY === '1' &&\n isWorkflowRouteStubSource(normalizedSource)\n ) {\n try {\n await ensureDeferredRouteStubBuildAndWait();\n const refreshedSource = await readFile(filename, 'utf8');\n if (!isWorkflowRouteStubSource(refreshedSource)) {\n return { code: refreshedSource, map: sourceMap };\n }\n } catch (error) {\n console.warn(\n `[workflow] Failed waiting for deferred route build for ${filename}, using stub output`,\n error\n );\n }\n }\n return { code: normalizedSource, map: sourceMap };\n }\n\n // Detect workflow patterns in the source code.\n const patterns = await detectPatterns(sourceForTransform);\n // Always notify discovery tracking, even for `false/false`, so files that\n // previously had workflow/step usage are removed from the tracked sets.\n // Deferred step copy files must report using their original source path so\n // deferred rebuilds can react to source edits outside generated artifacts.\n if (!isDeferredStepCopyFile || deferredStepSourceMetadata?.absolutePath) {\n const hasSerde = patterns.hasSerde;\n const nextPatternState: DiscoveredPatternState = {\n hasWorkflow: patterns.hasUseWorkflow,\n hasStep: patterns.hasUseStep,\n hasSerde,\n };\n const { shouldNotify } = updateDiscoveredPatternState(\n discoveryFilePath,\n nextPatternState\n );\n if (shouldNotify) {\n await notifySocketServer(\n discoveryFilePath,\n nextPatternState.hasWorkflow,\n nextPatternState.hasStep,\n nextPatternState.hasSerde\n );\n }\n }\n\n if (!isDeferredStepCopyFile) {\n // Check if file needs transformation based on patterns and path\n if (!(await checkShouldTransform(filename, patterns))) {\n return { code: normalizedSource, map: sourceMap };\n }\n }\n\n const isTypeScript =\n filename.endsWith('.ts') ||\n filename.endsWith('.tsx') ||\n filename.endsWith('.mts') ||\n filename.endsWith('.cts');\n\n // Calculate relative filename for SWC plugin\n // The SWC plugin uses filename to generate workflowId, so it must be relative\n const relativeFilename =\n deferredStepSourceMetadata?.relativeFilename ||\n (await getRelativeFilenameForSwc(filename, workingDir));\n\n // Get decorator options from tsconfig (cached per working directory)\n const { options: decoratorOptions, configPath } =\n await getDecoratorOptions(workingDir);\n if (configPath) {\n registerFileDependency(this, configPath);\n }\n\n // Resolve module specifier for packages (node_modules or workspace packages)\n const moduleSpecifier = await getModuleSpecifier(\n deferredStepSourceMetadata?.absolutePath || filename,\n workingDir\n );\n const mode = isDeferredStepCopyFile ? 'step' : 'client';\n\n // Transform with SWC\n const result = await transform(sourceForTransform, {\n filename: relativeFilename,\n jsc: {\n parser: {\n ...(isTypeScript\n ? {\n syntax: 'typescript',\n tsx: filename.endsWith('.tsx'),\n decorators: decoratorOptions.decorators,\n }\n : {\n syntax: 'ecmascript',\n jsx: filename.endsWith('.jsx'),\n decorators: decoratorOptions.decorators,\n }),\n },\n target: 'es2022',\n experimental: {\n plugins: [[swcPluginPath, { mode, moduleSpecifier }]],\n },\n transform: {\n react: {\n runtime: 'preserve',\n },\n legacyDecorator: decoratorOptions.legacyDecorator,\n decoratorMetadata: decoratorOptions.decoratorMetadata,\n },\n },\n minify: false,\n inputSourceMap: isDeferredStepCopyFile\n ? deferredSourceMapResult.sourceMap || sourceMap\n : sourceMap,\n sourceMaps: true,\n inlineSourcesContent: true,\n });\n\n let transformedMap = sourceMap;\n if (typeof result.map === 'string') {\n try {\n transformedMap = JSON.parse(result.map);\n } catch {\n transformedMap = result.map;\n }\n } else if (result.map) {\n transformedMap = result.map;\n }\n\n return { code: result.code, map: transformedMap };\n };\n\n if (!callback) {\n return run().then((result) => result.code);\n }\n\n void run()\n .then((result) => callback(null, result.code, result.map))\n .catch((error: unknown) => {\n callback(error instanceof Error ? error : new Error(String(error)));\n });\n}\n"]}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { connect, type Socket } from 'node:net';\nimport { dirname, join, relative } from 'node:path';\nimport { transform } from '@swc/core';\nimport {\n parseMessage,\n type SocketMessage,\n serializeMessage,\n} from './socket-server.js';\n\ntype DecoratorOptionsWithConfigPath =\n import('@workflow/builders').DecoratorOptionsWithConfigPath;\ntype WorkflowPatternMatch = import('@workflow/builders').WorkflowPatternMatch;\n\n// Cache decorator options per working directory to avoid reading tsconfig for every file\nconst decoratorOptionsCache = new Map<\n string,\n Promise<DecoratorOptionsWithConfigPath>\n>();\n// Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)\nlet cachedBuildersModule: typeof import('@workflow/builders') | null = null;\ntype LoaderStaticDependencies = {\n swcPluginPath: string;\n files: string[];\n};\nlet cachedLoaderStaticDependencies: LoaderStaticDependencies | null = null;\n\ntype DiscoveredPatternState = {\n hasWorkflow: boolean;\n hasStep: boolean;\n hasSerde: boolean;\n};\nconst discoveredPatternStateByFilePath = new Map<\n string,\n DiscoveredPatternState\n>();\n\n// Cache socket connection to avoid reconnecting on every file.\nlet socketClientPromise: Promise<Socket | null> | null = null;\nlet socketClient: Socket | null = null;\nlet socketClientKey: string | null = null;\n\ntype SocketCredentials = {\n port: number;\n authToken: string;\n};\n\nconst ROUTE_STUB_FILE_MARKER = 'WORKFLOW_ROUTE_STUB_FILE';\nconst ROUTE_STUB_BUILD_WAIT_TIMEOUT_MS = 120_000;\nlet pendingDeferredRouteStubBuildPromise: Promise<void> | null = null;\n\nfunction registerFileDependency(\n loaderContext: WorkflowLoaderContext,\n dependencyPath: string\n): void {\n loaderContext.addDependency?.(dependencyPath);\n loaderContext.addBuildDependency?.(dependencyPath);\n}\n\nfunction updateDiscoveredPatternState(\n filePath: string,\n nextState: DiscoveredPatternState\n): { shouldNotify: boolean; previousState?: DiscoveredPatternState } {\n const previousState = discoveredPatternStateByFilePath.get(filePath);\n const hasAnyPattern =\n nextState.hasWorkflow || nextState.hasStep || nextState.hasSerde;\n\n if (!hasAnyPattern) {\n if (!previousState) {\n return { shouldNotify: false };\n }\n discoveredPatternStateByFilePath.delete(filePath);\n return { shouldNotify: true, previousState };\n }\n\n if (\n previousState &&\n previousState.hasWorkflow === nextState.hasWorkflow &&\n previousState.hasStep === nextState.hasStep &&\n previousState.hasSerde === nextState.hasSerde\n ) {\n return { shouldNotify: false, previousState };\n }\n\n discoveredPatternStateByFilePath.set(filePath, nextState);\n return { shouldNotify: true, previousState };\n}\n\nfunction addIfExists(files: Set<string>, dependencyPath: string): void {\n if (existsSync(dependencyPath)) {\n files.add(dependencyPath);\n }\n}\n\nfunction resolveLoaderStaticDependencies(): LoaderStaticDependencies {\n if (cachedLoaderStaticDependencies) {\n return cachedLoaderStaticDependencies;\n }\n\n const swcPluginPath = require.resolve('@workflow/swc-plugin');\n const swcPluginBuildHashPath = require.resolve(\n '@workflow/swc-plugin/build-hash.json'\n );\n const workflowBuildersPath = require.resolve('@workflow/builders');\n\n // Derive package.json paths from resolved entrypoints to avoid\n // Turbopack loader-eval failures around ../package.json resolution.\n const swcPluginPackageJsonPath = join(dirname(swcPluginPath), 'package.json');\n const workflowBuildersPackageJsonPath = join(\n dirname(workflowBuildersPath),\n '../package.json'\n );\n\n const files = new Set<string>([\n __filename,\n require.resolve('./socket-server'),\n swcPluginPath,\n swcPluginBuildHashPath,\n workflowBuildersPath,\n ]);\n addIfExists(files, swcPluginPackageJsonPath);\n addIfExists(files, workflowBuildersPackageJsonPath);\n\n cachedLoaderStaticDependencies = {\n swcPluginPath,\n files: Array.from(files),\n };\n return cachedLoaderStaticDependencies;\n}\n\nfunction registerTransformDependencies(\n loaderContext: WorkflowLoaderContext\n): string {\n const staticDependencies = resolveLoaderStaticDependencies();\n for (const dependencyPath of staticDependencies.files) {\n registerFileDependency(loaderContext, dependencyPath);\n }\n\n return staticDependencies.swcPluginPath;\n}\n\nfunction resetSocketClient(cachedSocket?: Socket): void {\n if (cachedSocket && socketClient && socketClient !== cachedSocket) {\n return;\n }\n\n socketClientPromise = null;\n socketClient = null;\n socketClientKey = null;\n}\n\nasync function writeSocketMessage(\n socket: Socket,\n message: string\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n socket.write(message, (error?: Error | null) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n}\n\nfunction getSocketInfoFilePath(): string | null {\n const configuredPath = process.env.WORKFLOW_SOCKET_INFO_PATH;\n if (configuredPath) {\n return configuredPath;\n }\n\n // Fallback for worker processes that don't inherit dynamic env updates\n // from the process that created the socket server.\n const distDir = process.env.WORKFLOW_NEXT_DIST_DIR || '.next';\n const cwdFallbackPath = join(\n process.cwd(),\n distDir,\n 'cache',\n 'workflow-socket.json'\n );\n const projectRoot = process.env.WORKFLOW_PROJECT_ROOT;\n if (projectRoot) {\n const projectRootFallbackPath = join(\n projectRoot,\n distDir,\n 'cache',\n 'workflow-socket.json'\n );\n if (existsSync(projectRootFallbackPath)) {\n return projectRootFallbackPath;\n }\n }\n return cwdFallbackPath;\n}\n\nfunction getSocketCredentialsFromEnv(): SocketCredentials | null {\n const socketPort = process.env.WORKFLOW_SOCKET_PORT;\n const authToken = process.env.WORKFLOW_SOCKET_AUTH;\n if (!socketPort || !authToken) {\n return null;\n }\n\n const port = Number.parseInt(socketPort, 10);\n if (Number.isNaN(port)) {\n return null;\n }\n return { port, authToken };\n}\n\nasync function getSocketCredentialsFromFile(): Promise<SocketCredentials | null> {\n const socketInfoFilePath = getSocketInfoFilePath();\n if (!socketInfoFilePath) {\n return null;\n }\n if (!existsSync(socketInfoFilePath)) {\n return null;\n }\n\n try {\n const raw = await readFile(socketInfoFilePath, 'utf8');\n const parsed = JSON.parse(raw) as {\n port?: unknown;\n authToken?: unknown;\n };\n const authToken =\n typeof parsed.authToken === 'string' ? parsed.authToken : null;\n const numericPort =\n typeof parsed.port === 'number'\n ? parsed.port\n : Number.parseInt(String(parsed.port), 10);\n\n if (!authToken || Number.isNaN(numericPort)) {\n return null;\n }\n return {\n port: numericPort,\n authToken,\n };\n } catch {\n return null;\n }\n}\n\nasync function getSocketCredentials(): Promise<SocketCredentials | null> {\n const envCredentials = getSocketCredentialsFromEnv();\n if (envCredentials) {\n return envCredentials;\n }\n return await getSocketCredentialsFromFile();\n}\n\nasync function getSocketClient(): Promise<Socket | null> {\n const socketCredentials = await getSocketCredentials();\n if (!socketCredentials) {\n return null;\n }\n\n if (socketClient?.destroyed) {\n resetSocketClient(socketClient);\n }\n\n const currentSocketKey = `${socketCredentials.port}:${socketCredentials.authToken}`;\n if (socketClientKey && socketClientKey !== currentSocketKey) {\n if (socketClient) {\n resetSocketClient(socketClient);\n } else {\n resetSocketClient();\n }\n }\n\n if (!socketClientPromise) {\n socketClientPromise = (async () => {\n try {\n const socket = connect({\n port: socketCredentials.port,\n host: '127.0.0.1',\n });\n\n // Wait for connection\n await new Promise<void>((resolve, reject) => {\n const onConnect = () => {\n socket.setNoDelay(true);\n cleanup();\n resolve();\n };\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n const timeout = setTimeout(() => {\n cleanup();\n socket.destroy();\n reject(new Error('Socket connection timeout'));\n }, 1000);\n const cleanup = () => {\n clearTimeout(timeout);\n socket.off('connect', onConnect);\n socket.off('error', onError);\n };\n\n socket.on('connect', onConnect);\n socket.on('error', onError);\n });\n\n socket.on('close', () => {\n resetSocketClient(socket);\n });\n socket.on('error', () => {\n resetSocketClient(socket);\n });\n\n socketClient = socket;\n socketClientKey = currentSocketKey;\n return socket;\n } catch (error) {\n resetSocketClient();\n throw error;\n }\n })();\n }\n return socketClientPromise;\n}\n\nasync function notifySocketServer(\n filename: string,\n hasWorkflow: boolean,\n hasStep: boolean,\n hasSerde: boolean\n): Promise<void> {\n const socketCredentials = await getSocketCredentials();\n if (!socketCredentials) {\n return;\n }\n\n const socket = await getSocketClient();\n if (!socket) {\n throw new Error('Invariant: missing workflow socket connection');\n }\n\n const message: SocketMessage = {\n type: 'file-discovered',\n filePath: filename,\n hasWorkflow,\n hasStep,\n hasSerde,\n };\n const serializedMessage = serializeMessage(\n message,\n socketCredentials.authToken\n );\n\n try {\n await writeSocketMessage(socket, serializedMessage);\n } catch (error) {\n resetSocketClient(socket);\n const reconnectedSocket = await getSocketClient();\n if (!reconnectedSocket) {\n throw error;\n }\n await writeSocketMessage(reconnectedSocket, serializedMessage);\n }\n}\n\nfunction isWorkflowRouteStubSource(source: string): boolean {\n return source.includes(ROUTE_STUB_FILE_MARKER);\n}\n\nasync function createSocketConnection(\n socketCredentials: SocketCredentials,\n timeoutMs = 1_000\n): Promise<Socket> {\n return await new Promise<Socket>((resolve, reject) => {\n const socket = connect({\n port: socketCredentials.port,\n host: '127.0.0.1',\n });\n const timeout = setTimeout(() => {\n cleanup();\n socket.destroy();\n reject(new Error('Socket connection timeout'));\n }, timeoutMs);\n const cleanup = () => {\n clearTimeout(timeout);\n socket.off('connect', onConnect);\n socket.off('error', onError);\n };\n const onConnect = () => {\n socket.setNoDelay(true);\n cleanup();\n resolve(socket);\n };\n const onError = (error: Error) => {\n cleanup();\n socket.destroy();\n reject(error);\n };\n\n socket.on('connect', onConnect);\n socket.on('error', onError);\n });\n}\n\nasync function waitForDeferredBuildComplete(\n socket: Socket,\n authToken: string,\n timeoutMs = ROUTE_STUB_BUILD_WAIT_TIMEOUT_MS\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n let buffer = '';\n const timeout = setTimeout(() => {\n cleanup();\n reject(\n new Error('Timed out waiting for deferred route build completion')\n );\n }, timeoutMs);\n const cleanup = () => {\n clearTimeout(timeout);\n socket.off('data', onData);\n socket.off('error', onError);\n socket.off('close', onClose);\n socket.off('end', onClose);\n };\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n const onClose = () => {\n cleanup();\n reject(new Error('Socket closed before deferred route build completed'));\n };\n const onData = (chunk: Buffer) => {\n buffer += chunk.toString();\n let newlineIndex = buffer.indexOf('\\n');\n while (newlineIndex !== -1) {\n const line = buffer.slice(0, newlineIndex);\n buffer = buffer.slice(newlineIndex + 1);\n newlineIndex = buffer.indexOf('\\n');\n\n const message = parseMessage(line, authToken);\n if (message?.type === 'build-complete') {\n cleanup();\n resolve();\n return;\n }\n }\n };\n\n socket.on('data', onData);\n socket.on('error', onError);\n socket.on('close', onClose);\n socket.on('end', onClose);\n });\n}\n\nasync function triggerDeferredRouteStubBuildAndWait(): Promise<void> {\n const socketCredentials = await getSocketCredentials();\n if (!socketCredentials) {\n return;\n }\n const socket = await createSocketConnection(socketCredentials);\n try {\n await writeSocketMessage(\n socket,\n serializeMessage({ type: 'trigger-build' }, socketCredentials.authToken)\n );\n await waitForDeferredBuildComplete(socket, socketCredentials.authToken);\n } finally {\n socket.destroy();\n }\n}\n\nasync function ensureDeferredRouteStubBuildAndWait(): Promise<void> {\n if (pendingDeferredRouteStubBuildPromise) {\n return pendingDeferredRouteStubBuildPromise;\n }\n const pendingPromise = triggerDeferredRouteStubBuildAndWait();\n pendingDeferredRouteStubBuildPromise = pendingPromise.finally(() => {\n if (pendingDeferredRouteStubBuildPromise === pendingPromise) {\n pendingDeferredRouteStubBuildPromise = null;\n }\n });\n return pendingDeferredRouteStubBuildPromise;\n}\n\nasync function getBuildersModule(): Promise<\n typeof import('@workflow/builders')\n> {\n if (cachedBuildersModule) {\n return cachedBuildersModule;\n }\n // Dynamic import to handle ESM module from CommonJS context\n // biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`\n cachedBuildersModule = (await eval(\n 'import(\"@workflow/builders\")'\n )) as typeof import('@workflow/builders');\n return cachedBuildersModule;\n}\n\nasync function getDecoratorOptions(\n workingDir: string\n): Promise<DecoratorOptionsWithConfigPath> {\n const cached = decoratorOptionsCache.get(workingDir);\n if (cached) {\n return cached;\n }\n\n const promise = (async (): Promise<DecoratorOptionsWithConfigPath> => {\n const { getDecoratorOptionsForDirectoryWithConfigPath } =\n await getBuildersModule();\n return getDecoratorOptionsForDirectoryWithConfigPath(workingDir);\n })();\n\n decoratorOptionsCache.set(workingDir, promise);\n return promise;\n}\n\nasync function detectPatterns(source: string): Promise<WorkflowPatternMatch> {\n const { detectWorkflowPatterns } = await getBuildersModule();\n return detectWorkflowPatterns(source);\n}\n\nasync function checkGeneratedFile(filePath: string): Promise<boolean> {\n const { isGeneratedWorkflowFile } = await getBuildersModule();\n return isGeneratedWorkflowFile(filePath);\n}\n\nasync function checkShouldTransform(\n filePath: string,\n patterns: WorkflowPatternMatch\n): Promise<boolean> {\n const { shouldTransformFile } = await getBuildersModule();\n return shouldTransformFile(filePath, patterns);\n}\n\nasync function getModuleSpecifier(\n filePath: string,\n projectRoot: string\n): Promise<string | undefined> {\n const { resolveModuleSpecifier } = await getBuildersModule();\n return resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier;\n}\n\nasync function resolveWorkflowAliasPath(\n filePath: string,\n workingDir: string\n): Promise<string | undefined> {\n const { resolveWorkflowAliasRelativePath } = await getBuildersModule();\n return resolveWorkflowAliasRelativePath(filePath, workingDir);\n}\n\nasync function getRelativeFilenameForSwc(\n filename: string,\n workingDir: string\n): Promise<string> {\n const normalizedWorkingDir = workingDir\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedFilepath = filename.replace(/\\\\/g, '/');\n\n // Windows fix: Use case-insensitive comparison to work around drive letter casing issues\n const lowerWd = normalizedWorkingDir.toLowerCase();\n const lowerPath = normalizedFilepath.toLowerCase();\n\n let relativeFilename: string;\n if (lowerPath.startsWith(`${lowerWd}/`)) {\n // File is under working directory - manually calculate relative path\n relativeFilename = normalizedFilepath.substring(\n normalizedWorkingDir.length + 1\n );\n } else if (lowerPath === lowerWd) {\n // File IS the working directory (shouldn't happen)\n relativeFilename = '.';\n } else {\n // Use relative() for files outside working directory\n relativeFilename = relative(workingDir, filename).replace(/\\\\/g, '/');\n\n if (relativeFilename.startsWith('../')) {\n const aliasedRelativePath = await resolveWorkflowAliasPath(\n filename,\n workingDir\n );\n if (aliasedRelativePath) {\n relativeFilename = aliasedRelativePath;\n } else {\n relativeFilename = relativeFilename\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 (relativeFilename.includes(':') || relativeFilename.startsWith('/')) {\n // This should rarely happen, but use filename split as last resort\n relativeFilename = normalizedFilepath.split('/').pop() || 'unknown.ts';\n }\n\n return relativeFilename;\n}\n\n// This loader applies the \"use workflow\"/\"use step\" transform.\n// All files use step mode; the SWC plugin decides per-function whether\n// to emit workflow or step bindings based on the source's directives.\ntype WorkflowLoaderContext = {\n resourcePath: string;\n async?: () => (\n error: Error | null,\n content?: string,\n sourceMap?: any\n ) => void;\n addDependency?: (dependency: string) => void;\n addBuildDependency?: (dependency: string) => void;\n};\n\nexport default function workflowLoader(\n this: WorkflowLoaderContext,\n source: string | Buffer,\n sourceMap: any\n): string | Promise<string> | void {\n const callback = this.async?.();\n const run = async (): Promise<{ code: string; map: any }> => {\n const filename = this.resourcePath;\n const normalizedSource = source.toString();\n const workingDir = process.cwd();\n const swcPluginPath = registerTransformDependencies(this);\n const sourceForTransform = normalizedSource;\n\n const isGeneratedWorkflowFile = await checkGeneratedFile(filename);\n // Skip generated workflow route files to avoid re-processing them.\n // Deferred route stubs are a special case: wait for the generated route\n // output to become available before returning.\n if (isGeneratedWorkflowFile) {\n if (\n process.env.WORKFLOW_NEXT_LAZY_DISCOVERY === '1' &&\n isWorkflowRouteStubSource(normalizedSource)\n ) {\n try {\n await ensureDeferredRouteStubBuildAndWait();\n const refreshedSource = await readFile(filename, 'utf8');\n if (!isWorkflowRouteStubSource(refreshedSource)) {\n return { code: refreshedSource, map: sourceMap };\n }\n } catch (error) {\n console.warn(\n `[workflow] Failed waiting for deferred route build for ${filename}, using stub output`,\n error\n );\n }\n }\n return { code: normalizedSource, map: sourceMap };\n }\n\n // Detect workflow patterns in the source code.\n const patterns = await detectPatterns(sourceForTransform);\n // Always notify discovery tracking, even for `false/false`, so files that\n // previously had workflow/step usage are removed from the tracked sets.\n const nextPatternState: DiscoveredPatternState = {\n hasWorkflow: patterns.hasUseWorkflow,\n hasStep: patterns.hasUseStep,\n hasSerde: patterns.hasSerde,\n };\n const { shouldNotify } = updateDiscoveredPatternState(\n filename,\n nextPatternState\n );\n if (shouldNotify) {\n await notifySocketServer(\n filename,\n nextPatternState.hasWorkflow,\n nextPatternState.hasStep,\n nextPatternState.hasSerde\n );\n }\n\n // Check if file needs transformation based on patterns and path\n if (!(await checkShouldTransform(filename, patterns))) {\n return { code: normalizedSource, map: sourceMap };\n }\n\n const isTypeScript =\n filename.endsWith('.ts') ||\n filename.endsWith('.tsx') ||\n filename.endsWith('.mts') ||\n filename.endsWith('.cts');\n\n // Calculate relative filename for SWC plugin\n // The SWC plugin uses filename to generate workflowId, so it must be relative\n const relativeFilename = await getRelativeFilenameForSwc(\n filename,\n workingDir\n );\n\n // Get decorator options from tsconfig (cached per working directory)\n const { options: decoratorOptions, configPath } =\n await getDecoratorOptions(workingDir);\n if (configPath) {\n registerFileDependency(this, configPath);\n }\n\n // Resolve module specifier for packages (node_modules or workspace packages)\n const moduleSpecifier = await getModuleSpecifier(filename, workingDir);\n const mode = 'step';\n\n // Transform with SWC\n const result = await transform(sourceForTransform, {\n filename: relativeFilename,\n jsc: {\n parser: {\n ...(isTypeScript\n ? {\n syntax: 'typescript',\n tsx: filename.endsWith('.tsx'),\n decorators: decoratorOptions.decorators,\n }\n : {\n syntax: 'ecmascript',\n jsx: filename.endsWith('.jsx'),\n decorators: decoratorOptions.decorators,\n }),\n },\n target: 'es2022',\n experimental: {\n plugins: [[swcPluginPath, { mode, moduleSpecifier }]],\n },\n transform: {\n react: {\n runtime: 'preserve',\n },\n legacyDecorator: decoratorOptions.legacyDecorator,\n decoratorMetadata: decoratorOptions.decoratorMetadata,\n },\n },\n minify: false,\n inputSourceMap: sourceMap,\n sourceMaps: true,\n inlineSourcesContent: true,\n });\n\n let transformedMap = sourceMap;\n if (typeof result.map === 'string') {\n try {\n transformedMap = JSON.parse(result.map);\n } catch {\n transformedMap = result.map;\n }\n } else if (result.map) {\n transformedMap = result.map;\n }\n\n return { code: result.code, map: transformedMap };\n };\n\n if (!callback) {\n return run().then((result) => result.code);\n }\n\n void run()\n .then((result) => callback(null, result.code, result.map))\n .catch((error: unknown) => {\n callback(error instanceof Error ? error : new Error(String(error)));\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/next",
3
- "version": "5.0.0-beta.2",
3
+ "version": "5.0.0-beta.4",
4
4
  "description": "Next.js integration for Workflow SDK",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -27,12 +27,11 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@swc/core": "1.15.3",
30
- "enhanced-resolve": "5.19.0",
31
30
  "semver": "7.7.4",
32
31
  "watchpack": "2.5.1",
33
- "@workflow/builders": "5.0.0-beta.2",
34
- "@workflow/core": "5.0.0-beta.2",
35
- "@workflow/swc-plugin": "5.0.0-beta.2"
32
+ "@workflow/builders": "5.0.0-beta.4",
33
+ "@workflow/core": "5.0.0-beta.4",
34
+ "@workflow/swc-plugin": "5.0.0-beta.3"
36
35
  },
37
36
  "devDependencies": {
38
37
  "@types/node": "22.19.0",
@@ -1,19 +0,0 @@
1
- export declare const DEFERRED_STEP_COPY_DIR_NAME = "__workflow_step_files__";
2
- export declare const DEFERRED_STEP_SOURCE_METADATA_PREFIX = "WORKFLOW_STEP_SOURCE_B64:";
3
- export interface DeferredStepSourceMetadata {
4
- relativeFilename: string;
5
- absolutePath: string;
6
- }
7
- export declare function isDeferredStepCopyFilePath(filePath: string): boolean;
8
- export declare function createDeferredStepSourceMetadataComment(metadata: DeferredStepSourceMetadata): string;
9
- export declare function createDeferredStepCopyInlineSourceMapComment({ sourcePath, sourceContent, generatedContent, }: {
10
- sourcePath: string;
11
- sourceContent: string;
12
- generatedContent?: string;
13
- }): string;
14
- export declare function parseInlineSourceMapComment(source: string): {
15
- sourceWithoutMapComment: string;
16
- sourceMap: string | null;
17
- };
18
- export declare function parseDeferredStepSourceMetadata(source: string): DeferredStepSourceMetadata | null;
19
- //# sourceMappingURL=step-copy-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"step-copy-utils.d.ts","sourceRoot":"","sources":["../src/step-copy-utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AACrE,eAAO,MAAM,oCAAoC,8BAA8B,CAAC;AAIhF,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAUD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKpE;AAED,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,0BAA0B,GACnC,MAAM,CAKR;AAiBD,wBAAgB,4CAA4C,CAAC,EAC3D,UAAU,EACV,aAAa,EACb,gBAAgB,GACjB,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAiBT;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG;IAC3D,uBAAuB,EAAE,MAAM,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAuBA;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,GACb,0BAA0B,GAAG,IAAI,CA8BnC"}
@@ -1,101 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFERRED_STEP_SOURCE_METADATA_PREFIX = exports.DEFERRED_STEP_COPY_DIR_NAME = void 0;
4
- exports.isDeferredStepCopyFilePath = isDeferredStepCopyFilePath;
5
- exports.createDeferredStepSourceMetadataComment = createDeferredStepSourceMetadataComment;
6
- exports.createDeferredStepCopyInlineSourceMapComment = createDeferredStepCopyInlineSourceMapComment;
7
- exports.parseInlineSourceMapComment = parseInlineSourceMapComment;
8
- exports.parseDeferredStepSourceMetadata = parseDeferredStepSourceMetadata;
9
- exports.DEFERRED_STEP_COPY_DIR_NAME = '__workflow_step_files__';
10
- exports.DEFERRED_STEP_SOURCE_METADATA_PREFIX = 'WORKFLOW_STEP_SOURCE_B64:';
11
- const INLINE_SOURCE_MAP_PATTERN = /(?:^|\r?\n)\s*\/\/[#@]\s*sourceMappingURL=data:application\/json(?:;charset=[^;,]+)?;base64,([A-Za-z0-9+/=]+)\s*$/;
12
- function escapeRegExp(input) {
13
- return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
14
- }
15
- function normalizePath(filePath) {
16
- return filePath.replace(/\\/g, '/');
17
- }
18
- function isDeferredStepCopyFilePath(filePath) {
19
- const normalizedPath = normalizePath(filePath);
20
- return normalizedPath.includes(`/.well-known/workflow/v1/step/${exports.DEFERRED_STEP_COPY_DIR_NAME}/`);
21
- }
22
- function createDeferredStepSourceMetadataComment(metadata) {
23
- const encoded = Buffer.from(JSON.stringify(metadata), 'utf-8').toString('base64');
24
- return `// ${exports.DEFERRED_STEP_SOURCE_METADATA_PREFIX}${encoded}`;
25
- }
26
- function getLineCount(source) {
27
- if (source.length === 0) {
28
- return 1;
29
- }
30
- const lineBreakMatches = source.match(/\r\n|\r|\n/g);
31
- return (lineBreakMatches?.length ?? 0) + 1;
32
- }
33
- function createIdentityLineMappings(lineCount) {
34
- if (lineCount <= 1) {
35
- return 'AAAA';
36
- }
37
- return `AAAA${';AACA'.repeat(lineCount - 1)}`;
38
- }
39
- function createDeferredStepCopyInlineSourceMapComment({ sourcePath, sourceContent, generatedContent, }) {
40
- const normalizedSourcePath = normalizePath(sourcePath);
41
- const sourceMap = {
42
- version: 3,
43
- file: normalizedSourcePath.split('/').pop() ?? normalizedSourcePath,
44
- sources: [normalizedSourcePath],
45
- sourcesContent: [sourceContent],
46
- names: [],
47
- mappings: createIdentityLineMappings(getLineCount(generatedContent ?? sourceContent)),
48
- };
49
- const encodedSourceMap = Buffer.from(JSON.stringify(sourceMap), 'utf-8').toString('base64');
50
- return `//# sourceMappingURL=data:application/json;base64,${encodedSourceMap}`;
51
- }
52
- function parseInlineSourceMapComment(source) {
53
- const mapMatch = source.match(INLINE_SOURCE_MAP_PATTERN);
54
- if (!mapMatch?.[1]) {
55
- return {
56
- sourceWithoutMapComment: source,
57
- sourceMap: null,
58
- };
59
- }
60
- const sourceWithoutMapComment = source.replace(INLINE_SOURCE_MAP_PATTERN, '');
61
- try {
62
- const decodedMap = Buffer.from(mapMatch[1], 'base64').toString('utf-8');
63
- JSON.parse(decodedMap);
64
- return {
65
- sourceWithoutMapComment,
66
- sourceMap: decodedMap,
67
- };
68
- }
69
- catch {
70
- return {
71
- sourceWithoutMapComment,
72
- sourceMap: null,
73
- };
74
- }
75
- }
76
- function parseDeferredStepSourceMetadata(source) {
77
- const pattern = new RegExp(`^\\s*//\\s*${escapeRegExp(exports.DEFERRED_STEP_SOURCE_METADATA_PREFIX)}([A-Za-z0-9+/=]+)\\s*$`, 'm');
78
- const match = source.match(pattern);
79
- const encoded = match?.[1];
80
- if (!encoded) {
81
- return null;
82
- }
83
- try {
84
- const decoded = Buffer.from(encoded, 'base64').toString('utf-8');
85
- const parsed = JSON.parse(decoded);
86
- if (typeof parsed.relativeFilename !== 'string' ||
87
- parsed.relativeFilename.length === 0 ||
88
- typeof parsed.absolutePath !== 'string' ||
89
- parsed.absolutePath.length === 0) {
90
- return null;
91
- }
92
- return {
93
- relativeFilename: parsed.relativeFilename,
94
- absolutePath: normalizePath(parsed.absolutePath),
95
- };
96
- }
97
- catch {
98
- return null;
99
- }
100
- }
101
- //# sourceMappingURL=step-copy-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"step-copy-utils.js","sourceRoot":"","sources":["../src/step-copy-utils.ts"],"names":[],"mappings":"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","sourcesContent":["export const DEFERRED_STEP_COPY_DIR_NAME = '__workflow_step_files__';\nexport const DEFERRED_STEP_SOURCE_METADATA_PREFIX = 'WORKFLOW_STEP_SOURCE_B64:';\nconst INLINE_SOURCE_MAP_PATTERN =\n /(?:^|\\r?\\n)\\s*\\/\\/[#@]\\s*sourceMappingURL=data:application\\/json(?:;charset=[^;,]+)?;base64,([A-Za-z0-9+/=]+)\\s*$/;\n\nexport interface DeferredStepSourceMetadata {\n relativeFilename: string;\n absolutePath: string;\n}\n\nfunction escapeRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\nexport function isDeferredStepCopyFilePath(filePath: string): boolean {\n const normalizedPath = normalizePath(filePath);\n return normalizedPath.includes(\n `/.well-known/workflow/v1/step/${DEFERRED_STEP_COPY_DIR_NAME}/`\n );\n}\n\nexport function createDeferredStepSourceMetadataComment(\n metadata: DeferredStepSourceMetadata\n): string {\n const encoded = Buffer.from(JSON.stringify(metadata), 'utf-8').toString(\n 'base64'\n );\n return `// ${DEFERRED_STEP_SOURCE_METADATA_PREFIX}${encoded}`;\n}\n\nfunction getLineCount(source: string): number {\n if (source.length === 0) {\n return 1;\n }\n const lineBreakMatches = source.match(/\\r\\n|\\r|\\n/g);\n return (lineBreakMatches?.length ?? 0) + 1;\n}\n\nfunction createIdentityLineMappings(lineCount: number): string {\n if (lineCount <= 1) {\n return 'AAAA';\n }\n return `AAAA${';AACA'.repeat(lineCount - 1)}`;\n}\n\nexport function createDeferredStepCopyInlineSourceMapComment({\n sourcePath,\n sourceContent,\n generatedContent,\n}: {\n sourcePath: string;\n sourceContent: string;\n generatedContent?: string;\n}): string {\n const normalizedSourcePath = normalizePath(sourcePath);\n const sourceMap = {\n version: 3,\n file: normalizedSourcePath.split('/').pop() ?? normalizedSourcePath,\n sources: [normalizedSourcePath],\n sourcesContent: [sourceContent],\n names: [] as string[],\n mappings: createIdentityLineMappings(\n getLineCount(generatedContent ?? sourceContent)\n ),\n };\n const encodedSourceMap = Buffer.from(\n JSON.stringify(sourceMap),\n 'utf-8'\n ).toString('base64');\n return `//# sourceMappingURL=data:application/json;base64,${encodedSourceMap}`;\n}\n\nexport function parseInlineSourceMapComment(source: string): {\n sourceWithoutMapComment: string;\n sourceMap: string | null;\n} {\n const mapMatch = source.match(INLINE_SOURCE_MAP_PATTERN);\n if (!mapMatch?.[1]) {\n return {\n sourceWithoutMapComment: source,\n sourceMap: null,\n };\n }\n\n const sourceWithoutMapComment = source.replace(INLINE_SOURCE_MAP_PATTERN, '');\n try {\n const decodedMap = Buffer.from(mapMatch[1], 'base64').toString('utf-8');\n JSON.parse(decodedMap);\n return {\n sourceWithoutMapComment,\n sourceMap: decodedMap,\n };\n } catch {\n return {\n sourceWithoutMapComment,\n sourceMap: null,\n };\n }\n}\n\nexport function parseDeferredStepSourceMetadata(\n source: string\n): DeferredStepSourceMetadata | null {\n const pattern = new RegExp(\n `^\\\\s*//\\\\s*${escapeRegExp(DEFERRED_STEP_SOURCE_METADATA_PREFIX)}([A-Za-z0-9+/=]+)\\\\s*$`,\n 'm'\n );\n const match = source.match(pattern);\n const encoded = match?.[1];\n if (!encoded) {\n return null;\n }\n\n try {\n const decoded = Buffer.from(encoded, 'base64').toString('utf-8');\n const parsed = JSON.parse(decoded) as Partial<DeferredStepSourceMetadata>;\n if (\n typeof parsed.relativeFilename !== 'string' ||\n parsed.relativeFilename.length === 0 ||\n typeof parsed.absolutePath !== 'string' ||\n parsed.absolutePath.length === 0\n ) {\n return null;\n }\n\n return {\n relativeFilename: parsed.relativeFilename,\n absolutePath: normalizePath(parsed.absolutePath),\n };\n } catch {\n return null;\n }\n}\n"]}