@workflow/next 5.0.0-beta.3 → 5.0.0-beta.5
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/builder-deferred.d.ts.map +1 -1
- package/dist/builder-deferred.js +227 -302
- package/dist/builder-deferred.js.map +1 -1
- package/dist/builder-eager.d.ts.map +1 -1
- package/dist/builder-eager.js +51 -75
- package/dist/builder-eager.js.map +1 -1
- package/dist/builder.d.ts +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +2 -2
- package/dist/builder.js.map +1 -1
- package/dist/environment-flag.d.ts +2 -0
- package/dist/environment-flag.d.ts.map +1 -0
- package/dist/environment-flag.js +15 -0
- package/dist/environment-flag.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +254 -4
- package/dist/index.js.map +1 -1
- package/docs/api-reference/with-workflow.mdx +32 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-deferred.js","sourceRoot":"","sources":["../src/builder-deferred.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { constants, existsSync, realpathSync } from 'node:fs';\nimport {\n access,\n mkdir,\n open,\n readdir,\n readFile,\n rm,\n stat,\n writeFile,\n} from 'node:fs/promises';\nimport os from 'node:os';\nimport {\n basename,\n dirname,\n extname,\n isAbsolute,\n join,\n relative,\n resolve,\n} from 'node:path';\nimport {\n createSocketServer,\n type SocketIO,\n type SocketServerConfig,\n} from './socket-server.js';\n\nconst DEFERRED_STEP_COPY_DIR_NAME = '__workflow_step_files__';\nconst ROUTE_STUB_FILE_MARKER = 'WORKFLOW_ROUTE_STUB_FILE';\nconst ROUTE_STUB_MARKER_SCAN_BYTES = 4 * 1024;\n\ntype WorkflowManifest = import('@workflow/builders').WorkflowManifest;\n\ninterface DeferredDiscoveredEntries {\n discoveredSteps: Set<string>;\n discoveredWorkflows: Set<string>;\n discoveredSerdeFiles: Set<string>;\n}\n\nlet CachedNextBuilderDeferred: any;\n\n// Create the deferred Next builder dynamically by extending the ESM BaseBuilder.\n// Exported as getNextBuilderDeferred() to allow CommonJS modules to import from\n// the ESM @workflow/builders package via dynamic import at runtime.\nexport async function getNextBuilderDeferred() {\n if (CachedNextBuilderDeferred) {\n return CachedNextBuilderDeferred;\n }\n\n const {\n BaseBuilder: BaseBuilderClass,\n STEP_QUEUE_TRIGGER,\n WORKFLOW_QUEUE_TRIGGER,\n applySwcTransform,\n detectWorkflowPatterns,\n getImportPath,\n resolveWorkflowAliasRelativePath,\n // biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`\n } = (await eval(\n 'import(\"@workflow/builders\")'\n )) as typeof import('@workflow/builders');\n\n class NextDeferredBuilder extends BaseBuilderClass {\n private socketIO?: SocketIO;\n private readonly discoveredWorkflowFiles = new Set<string>();\n private readonly discoveredStepFiles = new Set<string>();\n private readonly discoveredSerdeFiles = new Set<string>();\n private trackedDependencyFiles = new Set<string>();\n private deferredBuildQueue = Promise.resolve();\n private cacheInitialized = false;\n private cacheWriteTimer: NodeJS.Timeout | null = null;\n private deferredRebuildTimer: NodeJS.Timeout | null = null;\n private lastDeferredBuildSignature: string | null = null;\n private manifestStepResolveBaseDirs: string[] | null = null;\n\n async build() {\n const outputDir = await this.findAppDirectory();\n\n await this.initializeDiscoveryState();\n await this.cleanupGeneratedArtifactsOnBoot(outputDir);\n\n await this.writeStubFiles(outputDir);\n await this.createDiscoverySocketServer();\n }\n\n async onBeforeDeferredEntries(): Promise<void> {\n await this.initializeDiscoveryState();\n await this.validateDiscoveredEntryFiles();\n const implicitStepFiles = await this.resolveImplicitStepFiles();\n\n const pendingBuild = this.deferredBuildQueue.then(() =>\n this.buildDeferredEntriesUntilStable(implicitStepFiles)\n );\n\n // Keep the queue chain alive even when the current build fails so future\n // callbacks can enqueue another attempt without triggering unhandled\n // rejection warnings.\n this.deferredBuildQueue = pendingBuild.catch(() => {\n // Error is surfaced through `pendingBuild` below.\n });\n\n await pendingBuild;\n }\n\n private getCurrentInputFiles(implicitStepFiles: string[]): string[] {\n return Array.from(\n new Set([\n ...this.discoveredWorkflowFiles,\n ...this.discoveredStepFiles,\n ...this.discoveredSerdeFiles,\n ...implicitStepFiles,\n ])\n ).sort();\n }\n\n private async buildDeferredEntriesUntilStable(\n implicitStepFiles: string[]\n ): Promise<void> {\n // A successful build can discover additional transitive dependency files\n // (via source maps), which changes the signature and may require one more\n // build pass to include newly discovered serde files.\n const maxBuildPasses = 3;\n\n for (let buildPass = 0; buildPass < maxBuildPasses; buildPass++) {\n const inputFiles = this.getCurrentInputFiles(implicitStepFiles);\n const buildSignature =\n await this.createDeferredBuildSignature(inputFiles);\n const shouldForceBuildForGeneratedRoutes =\n await this.shouldForceBuildForGeneratedRoutes();\n if (\n buildSignature === this.lastDeferredBuildSignature &&\n !shouldForceBuildForGeneratedRoutes\n ) {\n return;\n }\n\n try {\n await this.buildDiscoveredFiles(inputFiles, implicitStepFiles);\n } catch (error) {\n if (this.config.watch) {\n await this.validateDiscoveredEntryFiles();\n const recoveredInputFiles =\n this.getCurrentInputFiles(implicitStepFiles);\n const recoveredSignature =\n await this.createDeferredBuildSignature(recoveredInputFiles);\n if (recoveredSignature !== buildSignature) {\n // A file was added/removed while this build was running; retry\n // immediately with the refreshed discovered-entry state.\n continue;\n }\n console.warn(\n '[workflow] Deferred entries build failed. Will retry only after inputs change.',\n error\n );\n this.lastDeferredBuildSignature = buildSignature;\n return;\n } else {\n throw error;\n }\n }\n this.lastDeferredBuildSignature = buildSignature;\n\n const postBuildInputFiles =\n this.getCurrentInputFiles(implicitStepFiles);\n const postBuildSignature =\n await this.createDeferredBuildSignature(postBuildInputFiles);\n if (postBuildSignature === buildSignature) {\n return;\n }\n }\n\n console.warn(\n '[workflow] Deferred entries build signature did not stabilize after 3 passes.'\n );\n }\n\n private async resolveImplicitStepFiles(): Promise<string[]> {\n const workflowStdlibPath = this.resolveWorkflowStdlibStepFilePath();\n return workflowStdlibPath ? [workflowStdlibPath] : [];\n }\n\n private async shouldForceBuildForGeneratedRoutes(): Promise<boolean> {\n const outputDir = await this.findAppDirectory();\n const generatedRouteFiles = [\n join(outputDir, '.well-known/workflow/v1/flow/route.js'),\n join(outputDir, '.well-known/workflow/v1/step/route.js'),\n join(outputDir, '.well-known/workflow/v1/webhook/[token]/route.js'),\n ];\n\n for (const routeFilePath of generatedRouteFiles) {\n const routeState = await this.getGeneratedRouteState(routeFilePath);\n if (routeState === 'missing') {\n return true;\n }\n if (routeState === 'stub') {\n return true;\n }\n }\n\n return false;\n }\n\n private async getGeneratedRouteState(\n routeFilePath: string\n ): Promise<'missing' | 'stub' | 'generated'> {\n let routeStats;\n try {\n routeStats = await stat(routeFilePath);\n } catch {\n return 'missing';\n }\n if (!routeStats.isFile()) {\n return 'missing';\n }\n\n try {\n const routeFileHandle = await open(routeFilePath, 'r');\n try {\n const markerScanBuffer = Buffer.alloc(ROUTE_STUB_MARKER_SCAN_BYTES);\n const { bytesRead } = await routeFileHandle.read(\n markerScanBuffer,\n 0,\n ROUTE_STUB_MARKER_SCAN_BYTES,\n 0\n );\n const markerScanSource = markerScanBuffer.toString(\n 'utf8',\n 0,\n bytesRead\n );\n return markerScanSource.includes(ROUTE_STUB_FILE_MARKER)\n ? 'stub'\n : 'generated';\n } finally {\n await routeFileHandle.close();\n }\n } catch {\n return 'missing';\n }\n }\n\n private resolveWorkflowStdlibStepFilePath(): string | null {\n let workflowCjsEntry: string;\n try {\n workflowCjsEntry = require.resolve('workflow', {\n paths: [this.config.workingDir],\n });\n } catch {\n return null;\n }\n\n const workflowDistDir = dirname(workflowCjsEntry);\n const workflowStdlibPath = this.normalizeDiscoveredFilePath(\n join(workflowDistDir, 'stdlib.js')\n );\n return existsSync(workflowStdlibPath) ? workflowStdlibPath : null;\n }\n\n private async reconcileDiscoveredEntries({\n workflowCandidates,\n stepCandidates,\n serdeCandidates,\n validatePatterns,\n }: {\n workflowCandidates: Iterable<string>;\n stepCandidates: Iterable<string>;\n serdeCandidates?: Iterable<string>;\n validatePatterns: boolean;\n }): Promise<{\n workflowFiles: Set<string>;\n stepFiles: Set<string>;\n serdeFiles: Set<string>;\n }> {\n const candidatesByFile = new Map<\n string,\n {\n hasWorkflowCandidate: boolean;\n hasStepCandidate: boolean;\n hasSerdeCandidate: boolean;\n }\n >();\n\n for (const filePath of workflowCandidates) {\n const normalizedPath = this.normalizeDiscoveredFilePath(filePath);\n const existing = candidatesByFile.get(normalizedPath);\n if (existing) {\n existing.hasWorkflowCandidate = true;\n } else {\n candidatesByFile.set(normalizedPath, {\n hasWorkflowCandidate: true,\n hasStepCandidate: false,\n hasSerdeCandidate: false,\n });\n }\n }\n\n for (const filePath of stepCandidates) {\n const normalizedPath = this.normalizeDiscoveredFilePath(filePath);\n const existing = candidatesByFile.get(normalizedPath);\n if (existing) {\n existing.hasStepCandidate = true;\n } else {\n candidatesByFile.set(normalizedPath, {\n hasWorkflowCandidate: false,\n hasStepCandidate: true,\n hasSerdeCandidate: false,\n });\n }\n }\n\n if (serdeCandidates) {\n for (const filePath of serdeCandidates) {\n const normalizedPath = this.normalizeDiscoveredFilePath(filePath);\n const existing = candidatesByFile.get(normalizedPath);\n if (existing) {\n existing.hasSerdeCandidate = true;\n } else {\n candidatesByFile.set(normalizedPath, {\n hasWorkflowCandidate: false,\n hasStepCandidate: false,\n hasSerdeCandidate: true,\n });\n }\n }\n }\n\n const fileEntries = Array.from(candidatesByFile.entries()).sort(\n ([a], [b]) => a.localeCompare(b)\n );\n const validatedEntries = await Promise.all(\n fileEntries.map(async ([filePath, candidates]) => {\n try {\n const fileStats = await stat(filePath);\n if (!fileStats.isFile()) {\n return null;\n }\n\n if (!validatePatterns) {\n return {\n filePath,\n hasUseWorkflow: candidates.hasWorkflowCandidate,\n hasUseStep: candidates.hasStepCandidate,\n hasSerde: candidates.hasSerdeCandidate,\n };\n }\n\n const source = await readFile(filePath, 'utf-8');\n const patterns = detectWorkflowPatterns(source);\n return {\n filePath,\n hasUseWorkflow: patterns.hasUseWorkflow,\n hasUseStep: patterns.hasUseStep,\n hasSerde: patterns.hasSerde,\n };\n } catch {\n return null;\n }\n })\n );\n\n const workflowFiles = new Set<string>();\n const stepFiles = new Set<string>();\n const serdeFiles = new Set<string>();\n for (const entry of validatedEntries) {\n if (!entry) {\n continue;\n }\n if (entry.hasUseWorkflow) {\n workflowFiles.add(entry.filePath);\n }\n if (entry.hasUseStep) {\n stepFiles.add(entry.filePath);\n }\n if (entry.hasSerde) {\n serdeFiles.add(entry.filePath);\n }\n }\n\n return { workflowFiles, stepFiles, serdeFiles };\n }\n\n private async validateDiscoveredEntryFiles(): Promise<void> {\n const workflowCandidates = new Set(this.discoveredWorkflowFiles);\n const stepCandidates = new Set(this.discoveredStepFiles);\n const serdeCandidates = new Set(this.discoveredSerdeFiles);\n const { workflowFiles, stepFiles, serdeFiles } =\n await this.reconcileDiscoveredEntries({\n workflowCandidates,\n stepCandidates,\n serdeCandidates,\n validatePatterns: true,\n });\n\n // Reconcile validated entries against the snapshot we started with so\n // file discoveries that arrive during validation are preserved.\n let workflowsChanged = false;\n let stepsChanged = false;\n let serdeChanged = false;\n\n for (const filePath of workflowCandidates) {\n if (!workflowFiles.has(filePath)) {\n workflowsChanged =\n this.discoveredWorkflowFiles.delete(filePath) || workflowsChanged;\n }\n }\n for (const filePath of workflowFiles) {\n if (!this.discoveredWorkflowFiles.has(filePath)) {\n this.discoveredWorkflowFiles.add(filePath);\n workflowsChanged = true;\n }\n }\n\n for (const filePath of stepCandidates) {\n if (!stepFiles.has(filePath)) {\n stepsChanged =\n this.discoveredStepFiles.delete(filePath) || stepsChanged;\n }\n }\n for (const filePath of stepFiles) {\n if (!this.discoveredStepFiles.has(filePath)) {\n this.discoveredStepFiles.add(filePath);\n stepsChanged = true;\n }\n }\n\n for (const filePath of serdeCandidates) {\n if (!serdeFiles.has(filePath)) {\n serdeChanged =\n this.discoveredSerdeFiles.delete(filePath) || serdeChanged;\n }\n }\n for (const filePath of serdeFiles) {\n if (!this.discoveredSerdeFiles.has(filePath)) {\n this.discoveredSerdeFiles.add(filePath);\n serdeChanged = true;\n }\n }\n\n if (workflowsChanged || stepsChanged) {\n this.scheduleWorkflowsCacheWrite();\n }\n }\n\n private async buildDiscoveredFiles(\n inputFiles: string[],\n implicitStepFiles: string[]\n ) {\n const outputDir = await this.findAppDirectory();\n const workflowGeneratedDir = join(outputDir, '.well-known/workflow/v1');\n const cacheDir = join(this.config.workingDir, this.getDistDir(), 'cache');\n await mkdir(cacheDir, { recursive: true });\n const manifestBuildDir = join(cacheDir, 'workflow-generated-manifest');\n const tempRouteFileName = 'route.js.temp';\n const trackedDiscoveredEntries =\n await this.collectTrackedDiscoveredEntries();\n const discoveredStepFileCandidates = Array.from(\n new Set([\n ...this.discoveredStepFiles,\n ...trackedDiscoveredEntries.discoveredSteps,\n ...implicitStepFiles,\n ])\n ).sort();\n const discoveredWorkflowFileCandidates = Array.from(\n new Set([\n ...this.discoveredWorkflowFiles,\n ...trackedDiscoveredEntries.discoveredWorkflows,\n ])\n ).sort();\n const discoveredSerdeFileCandidates = Array.from(\n new Set([\n ...this.discoveredSerdeFiles,\n ...trackedDiscoveredEntries.discoveredSerdeFiles,\n ])\n ).sort();\n const discoveredStepFiles = await this.filterExistingFiles(\n discoveredStepFileCandidates\n );\n const discoveredWorkflowFiles = await this.filterExistingFiles(\n discoveredWorkflowFileCandidates\n );\n const existingSerdeFileCandidates = await this.filterExistingFiles(\n discoveredSerdeFileCandidates\n );\n const discoveredSerdeFiles = await this.collectTransitiveSerdeFiles({\n entryFiles: [...discoveredStepFiles, ...discoveredWorkflowFiles],\n serdeFiles: existingSerdeFileCandidates,\n });\n const discoveredEntries: DeferredDiscoveredEntries = {\n discoveredSteps: new Set(discoveredStepFiles),\n discoveredWorkflows: new Set(discoveredWorkflowFiles),\n discoveredSerdeFiles: new Set(discoveredSerdeFiles),\n };\n const existingInputFiles = await this.filterExistingFiles(inputFiles);\n const buildInputFiles = Array.from(\n new Set([\n ...existingInputFiles,\n ...discoveredStepFiles,\n ...discoveredWorkflowFiles,\n ...discoveredSerdeFiles,\n ])\n ).sort();\n\n // Ensure output directories exist\n await mkdir(workflowGeneratedDir, { recursive: true });\n\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, '.gitignore'),\n '*'\n );\n\n const tsconfigPath = await this.findTsConfigPath();\n\n const options = {\n inputFiles: buildInputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n routeFileName: tempRouteFileName,\n discoveredEntries,\n };\n\n const workflowsBundle = await this.buildWorkflowsFunction(options);\n const { manifest: stepsManifest } = await this.buildStepsFunction({\n ...options,\n additionalStepSourceManifest: workflowsBundle?.manifest,\n });\n await this.buildWebhookRoute({\n workflowGeneratedDir,\n routeFileName: tempRouteFileName,\n });\n await this.refreshTrackedDependencyFiles(\n workflowGeneratedDir,\n tempRouteFileName\n );\n\n // Merge manifests from both bundles\n const manifest = {\n steps: { ...stepsManifest.steps, ...workflowsBundle?.manifest?.steps },\n workflows: {\n ...stepsManifest.workflows,\n ...workflowsBundle?.manifest?.workflows,\n },\n classes: {\n ...stepsManifest.classes,\n ...workflowsBundle?.manifest?.classes,\n },\n };\n\n const manifestFilePath = join(workflowGeneratedDir, 'manifest.json');\n const manifestBuildPath = join(manifestBuildDir, 'manifest.json');\n const workflowBundlePath = join(\n workflowGeneratedDir,\n `flow/${tempRouteFileName}`\n );\n const manifestJson = await this.createManifest({\n workflowBundlePath,\n manifestDir: manifestBuildDir,\n manifest,\n });\n if (manifestJson) {\n await this.rewriteJsonFileWithStableKeyOrder(manifestBuildPath);\n await this.copyFileIfChanged(manifestBuildPath, manifestFilePath);\n } else {\n await rm(manifestBuildPath, { force: true });\n await rm(manifestFilePath, { force: true });\n }\n\n await this.writeFunctionsConfig(outputDir);\n\n await this.copyFileIfChanged(\n join(workflowGeneratedDir, `flow/${tempRouteFileName}`),\n join(workflowGeneratedDir, 'flow/route.js')\n );\n await this.copyFileIfChanged(\n join(workflowGeneratedDir, `step/${tempRouteFileName}`),\n join(workflowGeneratedDir, 'step/route.js')\n );\n await this.copyFileIfChanged(\n join(workflowGeneratedDir, `webhook/[token]/${tempRouteFileName}`),\n join(workflowGeneratedDir, 'webhook/[token]/route.js')\n );\n\n // Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.\n // Next.js serves files from public/ at the root URL.\n if (this.shouldExposePublicManifest && manifestJson) {\n const publicManifestDir = join(\n this.config.workingDir,\n 'public/.well-known/workflow/v1'\n );\n await mkdir(publicManifestDir, { recursive: true });\n await this.copyFileIfChanged(\n manifestFilePath,\n join(publicManifestDir, 'manifest.json')\n );\n }\n\n // Notify deferred entry loaders waiting on route.js stubs.\n this.socketIO?.emit('build-complete');\n }\n\n private async cleanupGeneratedArtifactsOnBoot(\n outputDir: string\n ): Promise<void> {\n const workflowGeneratedDir = join(outputDir, '.well-known/workflow/v1');\n const flowRouteDir = join(workflowGeneratedDir, 'flow');\n const stepRouteDir = join(workflowGeneratedDir, 'step');\n const webhookRouteDir = join(workflowGeneratedDir, 'webhook/[token]');\n\n const staleArtifactPaths = [\n join(flowRouteDir, 'route.js.temp'),\n join(flowRouteDir, 'route.js.temp.debug.json'),\n join(flowRouteDir, 'route.js.debug.json'),\n join(stepRouteDir, 'route.js.temp'),\n join(stepRouteDir, 'route.js.temp.debug.json'),\n join(stepRouteDir, 'route.js.debug.json'),\n join(stepRouteDir, DEFERRED_STEP_COPY_DIR_NAME),\n join(webhookRouteDir, 'route.js.temp'),\n join(workflowGeneratedDir, 'manifest.json'),\n ];\n\n await Promise.all(\n staleArtifactPaths.map((stalePath) =>\n rm(stalePath, { recursive: true, force: true })\n )\n );\n\n await Promise.all([\n this.removeStaleDeferredTempFiles(flowRouteDir),\n this.removeStaleDeferredTempFiles(stepRouteDir),\n this.removeStaleDeferredTempFiles(webhookRouteDir),\n ]);\n }\n\n private async removeStaleDeferredTempFiles(\n routeDir: string\n ): Promise<void> {\n const routeEntries = await readdir(routeDir, {\n withFileTypes: true,\n }).catch(() => []);\n await Promise.all(\n routeEntries\n .filter(\n (entry) =>\n entry.isFile() &&\n entry.name.startsWith('route.js.') &&\n entry.name.endsWith('.tmp')\n )\n .map((entry) =>\n rm(join(routeDir, entry.name), {\n force: true,\n })\n )\n );\n }\n\n private async createDiscoverySocketServer(): Promise<void> {\n if (this.socketIO || process.env.WORKFLOW_SOCKET_PORT) {\n return;\n }\n\n process.env.WORKFLOW_SOCKET_INFO_PATH = this.getSocketInfoFilePath();\n const config: SocketServerConfig = {\n isDevServer: Boolean(this.config.watch),\n socketInfoFilePath: this.getSocketInfoFilePath(),\n onFileDiscovered: (\n filePath: string,\n hasWorkflow: boolean,\n hasStep: boolean,\n hasSerde: boolean\n ) => {\n const normalizedFilePath = this.normalizeDiscoveredFilePath(filePath);\n let hasCacheTrackingChange = false;\n const wasTrackedDependency =\n this.trackedDependencyFiles.has(normalizedFilePath);\n\n if (hasWorkflow) {\n if (!this.discoveredWorkflowFiles.has(normalizedFilePath)) {\n this.discoveredWorkflowFiles.add(normalizedFilePath);\n hasCacheTrackingChange = true;\n }\n } else {\n const wasDeleted =\n this.discoveredWorkflowFiles.delete(normalizedFilePath);\n hasCacheTrackingChange = wasDeleted || hasCacheTrackingChange;\n }\n\n if (hasStep) {\n if (!this.discoveredStepFiles.has(normalizedFilePath)) {\n this.discoveredStepFiles.add(normalizedFilePath);\n hasCacheTrackingChange = true;\n }\n } else {\n const wasDeleted =\n this.discoveredStepFiles.delete(normalizedFilePath);\n hasCacheTrackingChange = wasDeleted || hasCacheTrackingChange;\n }\n\n if (hasSerde) {\n if (!this.discoveredSerdeFiles.has(normalizedFilePath)) {\n hasCacheTrackingChange = true;\n }\n this.discoveredSerdeFiles.add(normalizedFilePath);\n } else {\n const wasDeleted =\n this.discoveredSerdeFiles.delete(normalizedFilePath);\n hasCacheTrackingChange = wasDeleted || hasCacheTrackingChange;\n }\n\n if (hasCacheTrackingChange) {\n this.scheduleWorkflowsCacheWrite();\n }\n\n if (hasCacheTrackingChange || wasTrackedDependency) {\n this.scheduleDeferredRebuild();\n }\n },\n onTriggerBuild: () => {\n this.scheduleDeferredRebuild();\n },\n };\n\n this.socketIO = await createSocketServer(config);\n }\n\n private async initializeDiscoveryState(): Promise<void> {\n if (this.cacheInitialized) {\n return;\n }\n\n await this.loadWorkflowsCache();\n // Deferred mode must not run eager input-graph discovery; entries are\n // discovered via loader->socket notifications during Next's build.\n this.cacheInitialized = true;\n }\n\n private getDistDir(): string {\n return this.config.distDir || '.next';\n }\n\n private getWorkflowsCacheFilePath(): string {\n return join(\n this.config.workingDir,\n this.getDistDir(),\n 'cache',\n 'workflows.json'\n );\n }\n\n private getSocketInfoFilePath(): string {\n return join(\n this.config.workingDir,\n this.getDistDir(),\n 'cache',\n 'workflow-socket.json'\n );\n }\n\n private normalizeDiscoveredFilePath(filePath: string): string {\n const resolvedPath = isAbsolute(filePath)\n ? filePath\n : resolve(this.config.workingDir, filePath);\n try {\n return realpathSync(resolvedPath);\n } catch {\n return resolvedPath;\n }\n }\n\n private getManifestStepResolveBaseDirs(): string[] {\n if (this.manifestStepResolveBaseDirs) {\n return this.manifestStepResolveBaseDirs;\n }\n\n const resolveBaseDirs = new Set<string>();\n const addResolveBaseDir = (baseDir: string) => {\n resolveBaseDirs.add(this.normalizeDiscoveredFilePath(baseDir));\n };\n\n if (this.config.projectRoot) {\n addResolveBaseDir(this.config.projectRoot);\n }\n\n let currentResolveDir = this.config.workingDir;\n while (currentResolveDir) {\n addResolveBaseDir(currentResolveDir);\n const parentResolveDir = dirname(currentResolveDir);\n if (parentResolveDir === currentResolveDir) {\n break;\n }\n currentResolveDir = parentResolveDir;\n }\n\n this.manifestStepResolveBaseDirs = Array.from(resolveBaseDirs);\n return this.manifestStepResolveBaseDirs;\n }\n\n private async filterExistingFiles(filePaths: string[]): Promise<string[]> {\n const normalizedFilePaths = Array.from(\n new Set(\n filePaths.map((filePath) =>\n this.normalizeDiscoveredFilePath(filePath)\n )\n )\n ).sort();\n\n const existingFiles = await Promise.all(\n normalizedFilePaths.map(async (filePath) => {\n try {\n const fileStats = await stat(filePath);\n return fileStats.isFile() ? filePath : null;\n } catch {\n return null;\n }\n })\n );\n\n return existingFiles.filter((filePath): filePath is string =>\n Boolean(filePath)\n );\n }\n\n private async createDeferredBuildSignature(\n inputFiles: string[]\n ): Promise<string> {\n const normalizedFiles = Array.from(\n new Set([\n ...inputFiles.map((filePath) =>\n this.normalizeDiscoveredFilePath(filePath)\n ),\n ...this.trackedDependencyFiles,\n ])\n ).sort();\n\n const signatureParts = await Promise.all(\n normalizedFiles.map(async (filePath) => {\n try {\n const fileStats = await stat(filePath);\n return `${filePath}:${fileStats.size}:${Math.trunc(fileStats.mtimeMs)}`;\n } catch {\n return `${filePath}:missing`;\n }\n })\n );\n\n const signatureHash = createHash('sha256');\n for (const signaturePart of signatureParts) {\n signatureHash.update(signaturePart);\n signatureHash.update('\\n');\n }\n\n return signatureHash.digest('hex');\n }\n\n private async collectTrackedDiscoveredEntries(): Promise<{\n discoveredSteps: string[];\n discoveredWorkflows: string[];\n discoveredSerdeFiles: string[];\n }> {\n if (this.trackedDependencyFiles.size === 0) {\n return {\n discoveredSteps: [],\n discoveredWorkflows: [],\n discoveredSerdeFiles: [],\n };\n }\n\n const { workflowFiles, stepFiles, serdeFiles } =\n await this.reconcileDiscoveredEntries({\n workflowCandidates: this.trackedDependencyFiles,\n stepCandidates: this.trackedDependencyFiles,\n serdeCandidates: this.trackedDependencyFiles,\n validatePatterns: true,\n });\n\n return {\n discoveredSteps: Array.from(stepFiles).sort(),\n discoveredWorkflows: Array.from(workflowFiles).sort(),\n discoveredSerdeFiles: Array.from(serdeFiles).sort(),\n };\n }\n\n private async refreshTrackedDependencyFiles(\n workflowGeneratedDir: string,\n routeFileName: string\n ): Promise<void> {\n const bundleFiles = [\n join(workflowGeneratedDir, `step/${routeFileName}`),\n join(workflowGeneratedDir, `flow/${routeFileName}`),\n ];\n const trackedFiles = new Set<string>();\n\n for (const bundleFile of bundleFiles) {\n const bundleSources = await this.extractBundleSourceFiles(bundleFile);\n for (const sourceFile of bundleSources) {\n trackedFiles.add(sourceFile);\n }\n }\n\n if (trackedFiles.size > 0) {\n this.trackedDependencyFiles = trackedFiles;\n }\n }\n\n private async extractBundleSourceFiles(\n bundleFilePath: string\n ): Promise<string[]> {\n let bundleContents: string;\n try {\n bundleContents = await readFile(bundleFilePath, 'utf-8');\n } catch {\n return [];\n }\n\n const baseDirectory = dirname(bundleFilePath);\n const localSourceFiles = new Set<string>();\n const sourceMapMatches = bundleContents.matchAll(\n /\\/\\/# sourceMappingURL=data:application\\/json[^,]*;base64,([A-Za-z0-9+/=]+)/g\n );\n\n for (const match of sourceMapMatches) {\n const base64Value = match[1];\n if (!base64Value) {\n continue;\n }\n\n let sourceMap: { sourceRoot?: unknown; sources?: unknown };\n try {\n sourceMap = JSON.parse(\n Buffer.from(base64Value, 'base64').toString('utf-8')\n ) as { sourceRoot?: unknown; sources?: unknown };\n } catch {\n continue;\n }\n\n const sourceRoot =\n typeof sourceMap.sourceRoot === 'string' ? sourceMap.sourceRoot : '';\n const sources = Array.isArray(sourceMap.sources)\n ? sourceMap.sources.filter(\n (source): source is string => typeof source === 'string'\n )\n : [];\n\n for (const source of sources) {\n if (source.startsWith('webpack://') || source.startsWith('<')) {\n continue;\n }\n\n let resolvedSourcePath: string;\n if (source.startsWith('file://')) {\n try {\n resolvedSourcePath = decodeURIComponent(new URL(source).pathname);\n } catch {\n continue;\n }\n } else if (isAbsolute(source)) {\n resolvedSourcePath = source;\n } else {\n resolvedSourcePath = resolve(baseDirectory, sourceRoot, source);\n }\n\n const normalizedSourcePath =\n this.normalizeDiscoveredFilePath(resolvedSourcePath);\n const normalizedSourcePathForCheck = normalizedSourcePath.replace(\n /\\\\/g,\n '/'\n );\n if (\n normalizedSourcePathForCheck.includes('/.well-known/workflow/') ||\n normalizedSourcePathForCheck.includes('/node_modules/') ||\n normalizedSourcePathForCheck.includes('/.pnpm/') ||\n normalizedSourcePathForCheck.includes('/.next/') ||\n normalizedSourcePathForCheck.endsWith('/virtual-entry.js')\n ) {\n continue;\n }\n\n localSourceFiles.add(normalizedSourcePath);\n }\n }\n\n return Array.from(localSourceFiles);\n }\n\n private scheduleWorkflowsCacheWrite(): void {\n if (this.cacheWriteTimer) {\n clearTimeout(this.cacheWriteTimer);\n }\n\n this.cacheWriteTimer = setTimeout(() => {\n this.cacheWriteTimer = null;\n void this.writeWorkflowsCache().catch((error) => {\n console.warn('Failed to write workflow discovery cache', error);\n });\n }, 50);\n }\n\n private scheduleDeferredRebuild(): void {\n if (!this.config.watch) {\n return;\n }\n\n if (this.deferredRebuildTimer) {\n clearTimeout(this.deferredRebuildTimer);\n }\n\n this.deferredRebuildTimer = setTimeout(() => {\n this.deferredRebuildTimer = null;\n void this.onBeforeDeferredEntries().catch((error) => {\n console.warn(\n '[workflow] Deferred rebuild after source update failed.',\n error\n );\n });\n }, 75);\n }\n\n private async readWorkflowsCache(): Promise<{\n workflowFiles: string[];\n stepFiles: string[];\n } | null> {\n const cacheFilePath = this.getWorkflowsCacheFilePath();\n\n try {\n const cacheContents = await readFile(cacheFilePath, 'utf-8');\n const parsed = JSON.parse(cacheContents) as {\n workflowFiles?: unknown;\n stepFiles?: unknown;\n };\n\n const workflowFiles = Array.isArray(parsed.workflowFiles)\n ? parsed.workflowFiles.filter(\n (item): item is string => typeof item === 'string'\n )\n : [];\n const stepFiles = Array.isArray(parsed.stepFiles)\n ? parsed.stepFiles.filter(\n (item): item is string => typeof item === 'string'\n )\n : [];\n\n return { workflowFiles, stepFiles };\n } catch {\n return null;\n }\n }\n\n private async loadWorkflowsCache(): Promise<void> {\n const cachedData = await this.readWorkflowsCache();\n if (!cachedData) {\n return;\n }\n const { workflowFiles, stepFiles, serdeFiles } =\n await this.reconcileDiscoveredEntries({\n workflowCandidates: cachedData.workflowFiles,\n stepCandidates: cachedData.stepFiles,\n serdeCandidates: this.discoveredSerdeFiles,\n validatePatterns: true,\n });\n\n this.discoveredWorkflowFiles.clear();\n this.discoveredStepFiles.clear();\n this.discoveredSerdeFiles.clear();\n for (const filePath of workflowFiles) {\n this.discoveredWorkflowFiles.add(filePath);\n }\n for (const filePath of stepFiles) {\n this.discoveredStepFiles.add(filePath);\n }\n for (const filePath of serdeFiles) {\n this.discoveredSerdeFiles.add(filePath);\n }\n }\n\n private async writeWorkflowsCache(): Promise<void> {\n const cacheFilePath = this.getWorkflowsCacheFilePath();\n const cacheDir = join(this.config.workingDir, this.getDistDir(), 'cache');\n await mkdir(cacheDir, { recursive: true });\n\n const cacheData = {\n workflowFiles: Array.from(this.discoveredWorkflowFiles).sort(),\n stepFiles: Array.from(this.discoveredStepFiles).sort(),\n };\n\n await writeFile(cacheFilePath, JSON.stringify(cacheData, null, 2));\n }\n\n private async writeStubFiles(outputDir: string): Promise<void> {\n // Turbopack currently has a worker-concurrency limitation for pending\n // virtual entries. Warn if parallelism is too low to reliably discover.\n const parallelismCount = os.availableParallelism();\n if (process.env.TURBOPACK && parallelismCount < 4) {\n console.warn(\n `Available parallelism of ${parallelismCount} is less than needed 4. This can cause workflows/steps to fail to discover properly in turbopack`\n );\n }\n\n const routeStubContent = [\n `// ${ROUTE_STUB_FILE_MARKER}`,\n 'export const __workflowRouteStub = true;',\n ].join('\\n');\n const workflowGeneratedDir = join(outputDir, '.well-known/workflow/v1');\n\n await mkdir(join(workflowGeneratedDir, 'flow'), { recursive: true });\n await mkdir(join(workflowGeneratedDir, 'step'), { recursive: true });\n await mkdir(join(workflowGeneratedDir, 'webhook/[token]'), {\n recursive: true,\n });\n\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, '.gitignore'),\n '*'\n );\n\n // route.js stubs are replaced by generated route.js output once discovery\n // finishes and a deferred build completes.\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, 'flow/route.js'),\n routeStubContent\n );\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, 'step/route.js'),\n routeStubContent\n );\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, 'webhook/[token]/route.js'),\n routeStubContent\n );\n }\n\n private async writeFunctionsConfig(outputDir: string) {\n // we don't run this in development mode as it's not needed\n if (process.env.NODE_ENV === 'development') {\n return;\n }\n const generatedConfig = {\n version: '0',\n steps: {\n maxDuration: 'max',\n experimentalTriggers: [STEP_QUEUE_TRIGGER],\n },\n workflows: {\n maxDuration: 'max',\n experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],\n },\n };\n\n // We write this file to the generated directory for\n // the Next.js builder to consume\n await this.writeFileIfChanged(\n join(outputDir, '.well-known/workflow/v1/config.json'),\n JSON.stringify(generatedConfig, null, 2)\n );\n }\n\n private async writeFileIfChanged(\n filePath: string,\n contents: string | Buffer\n ): Promise<boolean> {\n const nextBuffer = Buffer.isBuffer(contents)\n ? contents\n : Buffer.from(contents);\n\n try {\n const currentBuffer = await readFile(filePath);\n if (currentBuffer.equals(nextBuffer)) {\n return false;\n }\n } catch {\n // File does not exist yet or cannot be read; write a fresh copy.\n }\n\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, nextBuffer);\n return true;\n }\n\n private async copyFileIfChanged(\n sourcePath: string,\n destinationPath: string\n ): Promise<boolean> {\n const sourceContents = await readFile(sourcePath);\n return this.writeFileIfChanged(destinationPath, sourceContents);\n }\n\n private sortJsonValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => this.sortJsonValue(item));\n }\n if (value && typeof value === 'object') {\n const sortedEntries = Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, entryValue]) => [key, this.sortJsonValue(entryValue)]);\n return Object.fromEntries(sortedEntries);\n }\n return value;\n }\n\n private async rewriteJsonFileWithStableKeyOrder(\n filePath: string\n ): Promise<void> {\n try {\n const contents = await readFile(filePath, 'utf-8');\n const parsed = JSON.parse(contents) as unknown;\n const normalized = this.sortJsonValue(parsed);\n await this.writeFileIfChanged(\n filePath,\n `${JSON.stringify(normalized, null, 2)}\\n`\n );\n } catch {\n // Manifest may not exist (e.g. manifest generation failed); ignore.\n }\n }\n\n private mergeWorkflowManifest(\n target: WorkflowManifest,\n source: WorkflowManifest\n ): void {\n if (source.steps) {\n target.steps = Object.assign(target.steps || {}, source.steps);\n }\n if (source.workflows) {\n target.workflows = Object.assign(\n target.workflows || {},\n source.workflows\n );\n }\n if (source.classes) {\n target.classes = Object.assign(target.classes || {}, source.classes);\n }\n }\n\n private async getRelativeFilenameForSwc(filePath: string): Promise<string> {\n const workingDir = this.config.workingDir;\n const normalizedWorkingDir = workingDir\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedFilepath = filePath.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 relativeFilename = normalizedFilepath.substring(\n normalizedWorkingDir.length + 1\n );\n } else if (lowerPath === lowerWd) {\n relativeFilename = '.';\n } else {\n relativeFilename = relative(workingDir, filePath).replace(/\\\\/g, '/');\n if (relativeFilename.startsWith('../')) {\n const aliasedRelativePath = await resolveWorkflowAliasRelativePath(\n filePath,\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 if (relativeFilename.includes(':') || relativeFilename.startsWith('/')) {\n relativeFilename = basename(normalizedFilepath);\n }\n\n return relativeFilename;\n }\n\n private getRelativeImportSpecifier(\n fromFilePath: string,\n toFilePath: string\n ): string {\n let relativePath = relative(dirname(fromFilePath), toFilePath).replace(\n /\\\\/g,\n '/'\n );\n if (!relativePath.startsWith('.')) {\n relativePath = `./${relativePath}`;\n }\n return relativePath;\n }\n\n private resolveImportTargetWithExtensionFallbacks(\n targetPath: string\n ): string {\n if (existsSync(targetPath)) {\n return targetPath;\n }\n\n const extensionMatch = targetPath.match(/(\\.[^./\\\\]+)$/);\n const extension = extensionMatch?.[1]?.toLowerCase();\n if (!extension) {\n return targetPath;\n }\n\n const extensionFallbacks =\n extension === '.js'\n ? ['.ts', '.tsx', '.mts', '.cts']\n : extension === '.mjs'\n ? ['.mts']\n : extension === '.cjs'\n ? ['.cts']\n : extension === '.jsx'\n ? ['.tsx']\n : [];\n\n if (extensionFallbacks.length === 0) {\n return targetPath;\n }\n\n const targetWithoutExtension = targetPath.slice(0, -extension.length);\n for (const fallbackExtension of extensionFallbacks) {\n const fallbackPath = `${targetWithoutExtension}${fallbackExtension}`;\n if (existsSync(fallbackPath)) {\n return fallbackPath;\n }\n }\n\n return targetPath;\n }\n\n private extractRelativeImportSpecifiers(source: string): string[] {\n const relativeSpecifiers = new Set<string>();\n const importPatterns = [\n /from\\s+['\"]([^'\"]+)['\"]/g,\n /import\\s+['\"]([^'\"]+)['\"]/g,\n /import\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n ];\n\n for (const importPattern of importPatterns) {\n for (const match of source.matchAll(importPattern)) {\n const specifier = match[1];\n if (specifier?.startsWith('.')) {\n relativeSpecifiers.add(specifier);\n }\n }\n }\n\n return Array.from(relativeSpecifiers);\n }\n\n private isGeneratedWorkflowArtifact(filePath: string): boolean {\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n return (\n normalizedPath.includes('/.well-known/workflow/') ||\n normalizedPath.includes('/.next/')\n );\n }\n\n private shouldSkipTransitiveStepFile(filePath: string): boolean {\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n return (\n this.isGeneratedWorkflowArtifact(normalizedPath) ||\n normalizedPath.includes('/node_modules/') ||\n normalizedPath.includes('/.pnpm/')\n );\n }\n\n private async resolveTransitiveStepImportTargetPath(\n sourceFilePath: string,\n specifier: string\n ): Promise<string | null> {\n const specifierMatch = specifier.match(/^([^?#]+)(.*)$/);\n const importPath = specifierMatch?.[1] ?? specifier;\n const absoluteTargetPath = resolve(dirname(sourceFilePath), importPath);\n\n const candidatePaths = new Set<string>([\n this.resolveImportTargetWithExtensionFallbacks(absoluteTargetPath),\n ]);\n\n if (!extname(absoluteTargetPath)) {\n const extensionCandidates = [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n ];\n for (const extensionCandidate of extensionCandidates) {\n candidatePaths.add(`${absoluteTargetPath}${extensionCandidate}`);\n candidatePaths.add(\n join(absoluteTargetPath, `index${extensionCandidate}`)\n );\n }\n }\n\n for (const candidatePath of candidatePaths) {\n const resolvedPath =\n this.resolveImportTargetWithExtensionFallbacks(candidatePath);\n const normalizedResolvedPath =\n this.normalizeDiscoveredFilePath(resolvedPath);\n\n if (this.shouldSkipTransitiveStepFile(normalizedResolvedPath)) {\n continue;\n }\n\n try {\n const fileStats = await stat(normalizedResolvedPath);\n if (fileStats.isFile()) {\n return normalizedResolvedPath;\n }\n } catch {\n // Try the next candidate path.\n }\n }\n\n return null;\n }\n\n private async collectTransitiveStepFiles({\n stepFiles,\n seedFiles = [],\n }: {\n stepFiles: string[];\n seedFiles?: string[];\n }): Promise<string[]> {\n const normalizedSeedFiles = Array.from(\n new Set(\n [...stepFiles, ...seedFiles].map((stepFile) =>\n this.normalizeDiscoveredFilePath(stepFile)\n )\n )\n ).sort();\n // Intentionally re-validate step seeds against current file contents\n // instead of blindly trusting callers. This prevents stale/manual seed\n // paths from persisting when files no longer contain \"use step\".\n const discoveredStepFiles = new Set<string>();\n const queuedFiles = [...normalizedSeedFiles];\n const visitedFiles = new Set<string>();\n const sourceCache = new Map<string, string | null>();\n const patternCache = new Map<\n string,\n ReturnType<typeof detectWorkflowPatterns> | null\n >();\n\n const getSource = async (filePath: string): Promise<string | null> => {\n if (sourceCache.has(filePath)) {\n return sourceCache.get(filePath) ?? null;\n }\n try {\n const source = await readFile(filePath, 'utf-8');\n sourceCache.set(filePath, source);\n return source;\n } catch {\n sourceCache.set(filePath, null);\n return null;\n }\n };\n\n const getPatterns = async (\n filePath: string\n ): Promise<ReturnType<typeof detectWorkflowPatterns> | null> => {\n if (patternCache.has(filePath)) {\n return patternCache.get(filePath) ?? null;\n }\n const source = await getSource(filePath);\n if (source === null) {\n patternCache.set(filePath, null);\n return null;\n }\n const patterns = detectWorkflowPatterns(source);\n patternCache.set(filePath, patterns);\n return patterns;\n };\n\n while (queuedFiles.length > 0) {\n const currentFile = queuedFiles.pop();\n if (!currentFile || visitedFiles.has(currentFile)) {\n continue;\n }\n visitedFiles.add(currentFile);\n\n const currentSource = await getSource(currentFile);\n if (currentSource === null) {\n continue;\n }\n\n const currentPatterns = await getPatterns(currentFile);\n if (currentPatterns?.hasUseStep) {\n discoveredStepFiles.add(currentFile);\n }\n\n const relativeImportSpecifiers =\n this.extractRelativeImportSpecifiers(currentSource);\n for (const specifier of relativeImportSpecifiers) {\n const resolvedImportPath =\n await this.resolveTransitiveStepImportTargetPath(\n currentFile,\n specifier\n );\n if (!resolvedImportPath) {\n continue;\n }\n\n if (!visitedFiles.has(resolvedImportPath)) {\n queuedFiles.push(resolvedImportPath);\n }\n\n const importPatterns = await getPatterns(resolvedImportPath);\n if (importPatterns?.hasUseStep) {\n discoveredStepFiles.add(resolvedImportPath);\n }\n }\n }\n\n return Array.from(discoveredStepFiles).sort();\n }\n\n private async collectTransitiveSerdeFiles({\n entryFiles,\n serdeFiles,\n }: {\n entryFiles: string[];\n serdeFiles: string[];\n }): Promise<string[]> {\n const normalizedEntryFiles = Array.from(\n new Set(\n entryFiles.map((entryFile) =>\n this.normalizeDiscoveredFilePath(entryFile)\n )\n )\n ).sort();\n const normalizedSerdeSeedFiles = Array.from(\n new Set(\n serdeFiles.map((serdeFile) =>\n this.normalizeDiscoveredFilePath(serdeFile)\n )\n )\n ).sort();\n // Intentionally re-validate serde seeds against source patterns.\n // This keeps previously discovered/manual seed entries from sticking when\n // files no longer match serde patterns.\n const discoveredSerdeFiles = new Set<string>();\n const queuedFiles = Array.from(\n new Set([...normalizedEntryFiles, ...normalizedSerdeSeedFiles])\n );\n const visitedFiles = new Set<string>();\n const sourceCache = new Map<string, string | null>();\n const patternCache = new Map<\n string,\n ReturnType<typeof detectWorkflowPatterns> | null\n >();\n\n const getSource = async (filePath: string): Promise<string | null> => {\n if (sourceCache.has(filePath)) {\n return sourceCache.get(filePath) ?? null;\n }\n try {\n const source = await readFile(filePath, 'utf-8');\n sourceCache.set(filePath, source);\n return source;\n } catch {\n sourceCache.set(filePath, null);\n return null;\n }\n };\n\n const getPatterns = async (\n filePath: string\n ): Promise<ReturnType<typeof detectWorkflowPatterns> | null> => {\n if (patternCache.has(filePath)) {\n return patternCache.get(filePath) ?? null;\n }\n const source = await getSource(filePath);\n if (source === null) {\n patternCache.set(filePath, null);\n return null;\n }\n const patterns = detectWorkflowPatterns(source);\n patternCache.set(filePath, patterns);\n return patterns;\n };\n\n for (const serdeSeedFile of normalizedSerdeSeedFiles) {\n const seedPatterns = await getPatterns(serdeSeedFile);\n if (seedPatterns?.hasSerde) {\n discoveredSerdeFiles.add(serdeSeedFile);\n }\n }\n\n while (queuedFiles.length > 0) {\n const currentFile = queuedFiles.pop();\n if (!currentFile || visitedFiles.has(currentFile)) {\n continue;\n }\n visitedFiles.add(currentFile);\n\n const currentSource = await getSource(currentFile);\n if (currentSource === null) {\n continue;\n }\n\n const relativeImportSpecifiers =\n this.extractRelativeImportSpecifiers(currentSource);\n for (const specifier of relativeImportSpecifiers) {\n const resolvedImportPath =\n await this.resolveTransitiveStepImportTargetPath(\n currentFile,\n specifier\n );\n if (!resolvedImportPath) {\n continue;\n }\n\n if (!visitedFiles.has(resolvedImportPath)) {\n queuedFiles.push(resolvedImportPath);\n }\n\n const importPatterns = await getPatterns(resolvedImportPath);\n if (importPatterns?.hasSerde) {\n discoveredSerdeFiles.add(resolvedImportPath);\n }\n }\n }\n\n // AST-level verification: run SWC detect mode on regex-matched candidates\n // to confirm they actually define serde classes. This prevents SDK internal\n // files (which match serde regex patterns but define no classes) from being\n // bundled into the workflow sandbox.\n const projectRoot = this.config.projectRoot || this.config.workingDir;\n const verifiedSerdeFiles: string[] = [];\n await Promise.all(\n Array.from(discoveredSerdeFiles).map(async (filePath) => {\n const source = await getSource(filePath);\n if (!source) return;\n try {\n const relativeFilename =\n await this.getRelativeFilenameForSwc(filePath);\n const { workflowManifest } = await applySwcTransform(\n relativeFilename,\n source,\n 'detect',\n filePath,\n projectRoot\n );\n // Only include files that actually define serde classes\n const hasClasses =\n workflowManifest.classes &&\n Object.values(workflowManifest.classes).some(\n (entries) => Object.keys(entries).length > 0\n );\n if (hasClasses) {\n verifiedSerdeFiles.push(filePath);\n }\n } catch {\n // If detect fails, include the file to be safe\n verifiedSerdeFiles.push(filePath);\n }\n })\n );\n\n return verifiedSerdeFiles.sort();\n }\n\n private async createDeferredStepsManifest({\n stepFiles,\n workflowFiles,\n serdeOnlyFiles,\n }: {\n stepFiles: string[];\n workflowFiles: string[];\n serdeOnlyFiles: string[];\n }): Promise<WorkflowManifest> {\n const workflowManifest: WorkflowManifest = {};\n const filesForStepTransform = Array.from(\n new Set([...stepFiles, ...serdeOnlyFiles])\n ).sort();\n\n await Promise.all(\n filesForStepTransform.map(async (stepFile) => {\n const source = await readFile(stepFile, 'utf-8');\n const relativeFilename =\n await this.getRelativeFilenameForSwc(stepFile);\n const { workflowManifest: fileManifest } = await applySwcTransform(\n relativeFilename,\n source,\n 'step',\n stepFile,\n this.config.projectRoot || this.config.workingDir\n );\n this.mergeWorkflowManifest(workflowManifest, fileManifest);\n })\n );\n\n const stepFileSet = new Set(stepFiles);\n const workflowOnlyFiles = workflowFiles\n .filter((workflowFile) => !stepFileSet.has(workflowFile))\n .sort();\n await Promise.all(\n workflowOnlyFiles.map(async (workflowFile) => {\n try {\n const source = await readFile(workflowFile, 'utf-8');\n const relativeFilename =\n await this.getRelativeFilenameForSwc(workflowFile);\n const { workflowManifest: fileManifest } = await applySwcTransform(\n relativeFilename,\n source,\n 'workflow',\n workflowFile,\n this.config.projectRoot || this.config.workingDir\n );\n this.mergeWorkflowManifest(workflowManifest, {\n workflows: fileManifest.workflows,\n classes: fileManifest.classes,\n });\n } catch (error) {\n console.log(\n `Warning: Failed to extract workflow metadata from ${workflowFile}:`,\n error instanceof Error ? error.message : String(error)\n );\n }\n })\n );\n\n return workflowManifest;\n }\n\n private async collectManifestStepSourceFiles(\n manifest: WorkflowManifest\n ): Promise<string[]> {\n const manifestStepEntries = Object.keys(manifest.steps || {});\n if (manifestStepEntries.length === 0) {\n return [];\n }\n\n const resolveBaseDirs = this.getManifestStepResolveBaseDirs();\n const candidateFiles = manifestStepEntries\n .flatMap((stepEntry) => {\n if (isAbsolute(stepEntry)) {\n return [this.normalizeDiscoveredFilePath(stepEntry)];\n }\n return resolveBaseDirs.map((baseDir) =>\n this.normalizeDiscoveredFilePath(resolve(baseDir, stepEntry))\n );\n })\n .filter(\n (candidateFile) => !this.isGeneratedWorkflowArtifact(candidateFile)\n );\n const existingCandidates = await this.filterExistingFiles(candidateFiles);\n return Array.from(new Set(existingCandidates)).sort();\n }\n\n /**\n * Resolves the path to the workflow SDK's internal response builtins\n * step file. Returns the file as a pair of (absolute path, import\n * specifier) so the caller can include it in both the manifest\n * (absolute path) and the generated step/route.js (as an import).\n */\n private resolveResponseBuiltinsStepSource(): {\n absolutePath: string;\n importPath: string;\n } | null {\n let resolved: string;\n try {\n resolved = require.resolve('workflow/internal/builtins', {\n paths: [this.config.workingDir],\n });\n } catch {\n return null;\n }\n return {\n absolutePath: this.normalizeDiscoveredFilePath(resolved),\n importPath: 'workflow/internal/builtins',\n };\n }\n\n /**\n * Builds the import specifier for a given step/serde source file as it\n * should appear in the generated step/route.js. Package-provided files\n * are imported via their package specifier so the bundler resolves them\n * from the app's dependency graph. Local files are imported via a\n * relative path from the generated route.\n */\n private getStepRouteImportSpecifier(\n stepRouteFile: string,\n sourceFilePath: string\n ): string {\n const { importPath, isPackage } = getImportPath(\n sourceFilePath,\n this.config.workingDir\n );\n if (isPackage) {\n return importPath;\n }\n return this.getRelativeImportSpecifier(stepRouteFile, sourceFilePath);\n }\n\n private async buildStepsFunction({\n workflowGeneratedDir,\n routeFileName = 'route.js',\n discoveredEntries,\n additionalStepSourceManifest,\n }: {\n workflowGeneratedDir: string;\n routeFileName?: string;\n discoveredEntries: DeferredDiscoveredEntries;\n additionalStepSourceManifest?: WorkflowManifest;\n }) {\n const stepsRouteDir = join(workflowGeneratedDir, 'step');\n await mkdir(stepsRouteDir, { recursive: true });\n const discovered = discoveredEntries;\n const workflowFiles = [...discovered.discoveredWorkflows].sort();\n const stepFiles = await this.collectTransitiveStepFiles({\n stepFiles: [...discovered.discoveredSteps].sort(),\n // Workflow transforms can inline step IDs and remove runtime imports,\n // so seed transitive traversal with workflow files too.\n seedFiles: workflowFiles,\n });\n const serdeFiles = [...discovered.discoveredSerdeFiles].sort();\n const stepFileSet = new Set(stepFiles);\n const serdeOnlyFiles = serdeFiles.filter(\n (file) => !stepFileSet.has(file)\n );\n const additionalManifestStepFiles = additionalStepSourceManifest\n ? await this.collectManifestStepSourceFiles(\n additionalStepSourceManifest\n )\n : [];\n const stepFilesWithManifestSources = Array.from(\n new Set([...stepFiles, ...additionalManifestStepFiles])\n ).sort();\n const responseBuiltins = this.resolveResponseBuiltinsStepSource();\n const manifestStepFiles = Array.from(\n new Set([\n ...stepFilesWithManifestSources,\n ...(responseBuiltins ? [responseBuiltins.absolutePath] : []),\n ])\n ).sort();\n const manifest = await this.createDeferredStepsManifest({\n stepFiles: manifestStepFiles,\n workflowFiles,\n serdeOnlyFiles,\n });\n\n const manifestDiscoveredStepFiles =\n await this.collectManifestStepSourceFiles(manifest);\n // Step source files are imported directly from their original\n // locations. The workflow loader transforms every file it sees in\n // step mode, so package-provided sources register their step\n // functions as module side effects just like local sources do.\n const stepSourceFiles = Array.from(\n new Set([\n ...stepFilesWithManifestSources,\n ...manifestDiscoveredStepFiles,\n ])\n ).sort();\n\n const stepRouteFile = join(stepsRouteDir, routeFileName);\n const stepImportSpecifiers = new Set<string>();\n if (responseBuiltins) {\n stepImportSpecifiers.add(responseBuiltins.importPath);\n }\n for (const stepSourceFile of stepSourceFiles) {\n stepImportSpecifiers.add(\n this.getStepRouteImportSpecifier(stepRouteFile, stepSourceFile)\n );\n }\n const stepImports = Array.from(stepImportSpecifiers)\n .map((specifier) => `import '${specifier}';`)\n .join('\\n');\n\n const serdeImports = serdeOnlyFiles\n .map((serdeFile) => {\n const normalizedSerdeFile =\n this.normalizeDiscoveredFilePath(serdeFile);\n return `import '${this.getStepRouteImportSpecifier(\n stepRouteFile,\n normalizedSerdeFile\n )}';`;\n })\n .join('\\n');\n\n const routeContents = [\n '// biome-ignore-all lint: generated file',\n '/* eslint-disable */',\n stepImports,\n serdeImports\n ? `// Serde files for cross-context class registration\\n${serdeImports}`\n : '',\n \"export { stepEntrypoint as POST } from 'workflow/runtime';\",\n ]\n .filter(Boolean)\n .join('\\n');\n\n await this.writeFileIfChanged(stepRouteFile, routeContents);\n\n return {\n context: undefined,\n manifest,\n };\n }\n\n private async buildWorkflowsFunction({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n routeFileName = 'route.js',\n discoveredEntries,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n routeFileName?: string;\n discoveredEntries: DeferredDiscoveredEntries;\n }) {\n const workflowsRouteDir = join(workflowGeneratedDir, 'flow');\n await mkdir(workflowsRouteDir, { recursive: true });\n return await this.createWorkflowsBundle({\n format: 'esm',\n outfile: join(workflowsRouteDir, routeFileName),\n bundleFinalOutput: false,\n // Deferred builds do not reuse the interim esbuild context. Dispose it\n // after each pass to avoid leaking contexts during watch-mode rebuilds.\n keepInterimBundleContext: false,\n inputFiles,\n tsconfigPath,\n discoveredEntries,\n });\n }\n\n private async buildWebhookRoute({\n workflowGeneratedDir,\n routeFileName = 'route.js',\n }: {\n workflowGeneratedDir: string;\n routeFileName?: string;\n }): Promise<void> {\n const webhookRouteFile = join(\n workflowGeneratedDir,\n `webhook/[token]/${routeFileName}`\n );\n await this.createWebhookBundle({\n outfile: webhookRouteFile,\n bundle: false, // Next.js doesn't need bundling\n });\n }\n\n private async findAppDirectory(): Promise<string> {\n const appDir = resolve(this.config.workingDir, 'app');\n const srcAppDir = resolve(this.config.workingDir, 'src/app');\n const pagesDir = resolve(this.config.workingDir, 'pages');\n const srcPagesDir = resolve(this.config.workingDir, 'src/pages');\n\n // Helper to check if a path exists and is a directory\n const isDirectory = async (path: string): Promise<boolean> => {\n try {\n await access(path, constants.F_OK);\n const stats = await stat(path);\n if (!stats.isDirectory()) {\n throw new Error(`Path exists but is not a directory: ${path}`);\n }\n return true;\n } catch (e) {\n if (e instanceof Error && e.message.includes('not a directory')) {\n throw e;\n }\n return false;\n }\n };\n\n // Check if app directory exists\n if (await isDirectory(appDir)) {\n return appDir;\n }\n\n // Check if src/app directory exists\n if (await isDirectory(srcAppDir)) {\n return srcAppDir;\n }\n\n // If no app directory exists, check for pages directory and create app next to it\n if (await isDirectory(pagesDir)) {\n // Create app directory next to pages directory\n await mkdir(appDir, { recursive: true });\n return appDir;\n }\n\n if (await isDirectory(srcPagesDir)) {\n // Create src/app directory next to src/pages directory\n await mkdir(srcAppDir, { recursive: true });\n return srcAppDir;\n }\n\n throw new Error(\n 'Could not find Next.js app or pages directory. Expected one of: \"app\", \"src/app\", \"pages\", or \"src/pages\" to exist.'\n );\n }\n }\n\n CachedNextBuilderDeferred = NextDeferredBuilder;\n return NextDeferredBuilder;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"builder-deferred.js","sourceRoot":"","sources":["../src/builder-deferred.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { constants, existsSync, readFileSync } from 'node:fs';\nimport {\n access,\n mkdir,\n open,\n readdir,\n readFile,\n rm,\n stat,\n writeFile,\n} from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport os from 'node:os';\nimport {\n basename,\n dirname,\n extname,\n isAbsolute,\n join,\n relative,\n resolve,\n} from 'node:path';\nimport {\n createSocketServer,\n type SocketIO,\n type SocketServerConfig,\n} from './socket-server.js';\n\nconst ROUTE_STUB_FILE_MARKER = 'WORKFLOW_ROUTE_STUB_FILE';\nconst ROUTE_STUB_MARKER_SCAN_BYTES = 4 * 1024;\n\nlet CachedNextBuilderDeferred: any;\n\n// Create the deferred Next builder dynamically by extending the ESM BaseBuilder.\n// Exported as getNextBuilderDeferred() to allow CommonJS modules to import from\n// the ESM @workflow/builders package via dynamic import at runtime.\nexport async function getNextBuilderDeferred() {\n if (CachedNextBuilderDeferred) {\n return CachedNextBuilderDeferred;\n }\n\n // V2: STEP_QUEUE_TRIGGER, getImportPath, and enhanced-resolve infrastructure\n // were removed because the V2 combined handler eliminates the separate step\n // route/topic. The step copy import rewriting (getRelativeImportSpecifier,\n // getStepCopyFileName, rewriteRelativeImportsForCopiedStep) from main was also\n // removed — V2 doesn't use step copies. If step copy support is needed, it\n // should land as a complete feature set.\n const {\n BaseBuilder: BaseBuilderClass,\n WORKFLOW_QUEUE_TRIGGER,\n detectWorkflowPatterns,\n applySwcTransform,\n resolveWorkflowAliasRelativePath,\n // biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`\n } = (await eval(\n 'import(\"@workflow/builders\")'\n )) as typeof import('@workflow/builders');\n\n class NextDeferredBuilder extends BaseBuilderClass {\n private socketIO?: SocketIO;\n private readonly discoveredWorkflowFiles = new Set<string>();\n private readonly discoveredStepFiles = new Set<string>();\n private readonly discoveredSerdeFiles = new Set<string>();\n private trackedDependencyFiles = new Set<string>();\n private deferredBuildQueue = Promise.resolve();\n private cacheInitialized = false;\n private cacheWriteTimer: NodeJS.Timeout | null = null;\n private deferredRebuildTimer: NodeJS.Timeout | null = null;\n private lastDeferredBuildSignature: string | null = null;\n\n async build() {\n const outputDir = await this.findAppDirectory();\n\n await this.initializeDiscoveryState();\n await this.cleanupGeneratedArtifactsOnBoot(outputDir);\n\n await this.writeStubFiles(outputDir);\n await this.createDiscoverySocketServer();\n }\n\n async onBeforeDeferredEntries(): Promise<void> {\n await this.initializeDiscoveryState();\n await this.validateDiscoveredEntryFiles();\n const implicitStepFiles = await this.resolveImplicitStepFiles();\n\n const pendingBuild = this.deferredBuildQueue.then(() =>\n this.buildDeferredEntriesUntilStable(implicitStepFiles)\n );\n\n // Keep the queue chain alive even when the current build fails so future\n // callbacks can enqueue another attempt without triggering unhandled\n // rejection warnings.\n this.deferredBuildQueue = pendingBuild.catch(() => {\n // Error is surfaced through `pendingBuild` below.\n });\n\n await pendingBuild;\n }\n\n private getCurrentInputFiles(implicitStepFiles: string[]): string[] {\n return Array.from(\n new Set([\n ...this.discoveredWorkflowFiles,\n ...this.discoveredStepFiles,\n ...this.discoveredSerdeFiles,\n ...implicitStepFiles,\n ])\n ).sort();\n }\n\n private async buildDeferredEntriesUntilStable(\n implicitStepFiles: string[]\n ): Promise<void> {\n // A successful build can discover additional transitive dependency files\n // (via source maps), which changes the signature and may require one more\n // build pass to include newly discovered serde files.\n const maxBuildPasses = 3;\n\n for (let buildPass = 0; buildPass < maxBuildPasses; buildPass++) {\n const inputFiles = this.getCurrentInputFiles(implicitStepFiles);\n const buildSignature =\n await this.createDeferredBuildSignature(inputFiles);\n const shouldForceBuildForGeneratedRoutes =\n await this.shouldForceBuildForGeneratedRoutes();\n if (\n buildSignature === this.lastDeferredBuildSignature &&\n !shouldForceBuildForGeneratedRoutes\n ) {\n return;\n }\n\n try {\n await this.buildDiscoveredFiles(inputFiles, implicitStepFiles);\n } catch (error) {\n if (this.config.watch) {\n await this.validateDiscoveredEntryFiles();\n const recoveredInputFiles =\n this.getCurrentInputFiles(implicitStepFiles);\n const recoveredSignature =\n await this.createDeferredBuildSignature(recoveredInputFiles);\n if (recoveredSignature !== buildSignature) {\n // A file was added/removed while this build was running; retry\n // immediately with the refreshed discovered-entry state.\n continue;\n }\n console.warn(\n '[workflow] Deferred entries build failed. Will retry only after inputs change.',\n error\n );\n this.lastDeferredBuildSignature = buildSignature;\n return;\n } else {\n throw error;\n }\n }\n this.lastDeferredBuildSignature = buildSignature;\n\n if (!this.config.watch) {\n // Production builds can persist newly discovered deferred-entry files to\n // the cache after the first pass completes. Reload that cache before we\n // decide whether the input signature stabilized so staged tarball builds\n // can immediately replay with the expanded step set.\n await new Promise((resolve) => setTimeout(resolve, 250));\n await this.loadWorkflowsCache();\n }\n\n const postBuildInputFiles =\n this.getCurrentInputFiles(implicitStepFiles);\n const postBuildSignature =\n await this.createDeferredBuildSignature(postBuildInputFiles);\n if (postBuildSignature === buildSignature) {\n return;\n }\n }\n\n console.warn(\n '[workflow] Deferred entries build signature did not stabilize after 3 passes.'\n );\n }\n\n private async resolveImplicitStepFiles(): Promise<string[]> {\n const workflowStdlibPath = this.resolveWorkflowStdlibStepFilePath();\n return workflowStdlibPath ? [workflowStdlibPath] : [];\n }\n\n private async shouldForceBuildForGeneratedRoutes(): Promise<boolean> {\n const outputDir = await this.findAppDirectory();\n const generatedRouteFiles = [\n join(outputDir, '.well-known/workflow/v1/flow/route.js'),\n join(outputDir, '.well-known/workflow/v1/webhook/[token]/route.js'),\n ];\n\n for (const routeFilePath of generatedRouteFiles) {\n const routeState = await this.getGeneratedRouteState(routeFilePath);\n if (routeState === 'missing' || routeState === 'stub') {\n return true;\n }\n }\n\n return false;\n }\n\n private async getGeneratedRouteState(\n routeFilePath: string\n ): Promise<'missing' | 'stub' | 'generated'> {\n let routeStats;\n try {\n routeStats = await stat(routeFilePath);\n } catch {\n return 'missing';\n }\n if (!routeStats.isFile()) {\n return 'missing';\n }\n\n try {\n const routeFileHandle = await open(routeFilePath, 'r');\n try {\n const markerScanBuffer = Buffer.alloc(ROUTE_STUB_MARKER_SCAN_BYTES);\n const { bytesRead } = await routeFileHandle.read(\n markerScanBuffer,\n 0,\n ROUTE_STUB_MARKER_SCAN_BYTES,\n 0\n );\n const markerScanSource = markerScanBuffer.toString(\n 'utf8',\n 0,\n bytesRead\n );\n return markerScanSource.includes(ROUTE_STUB_FILE_MARKER)\n ? 'stub'\n : 'generated';\n } finally {\n await routeFileHandle.close();\n }\n } catch {\n return 'missing';\n }\n }\n\n private resolveWorkflowStdlibStepFilePath(): string | null {\n let workflowCjsEntry: string;\n try {\n workflowCjsEntry = require.resolve('workflow', {\n paths: [this.config.workingDir],\n });\n } catch {\n return null;\n }\n\n const workflowDistDir = dirname(workflowCjsEntry);\n const workflowStdlibPath = this.normalizeDiscoveredFilePath(\n join(workflowDistDir, 'stdlib.js')\n );\n return existsSync(workflowStdlibPath) ? workflowStdlibPath : null;\n }\n\n private async reconcileDiscoveredEntries({\n workflowCandidates,\n stepCandidates,\n serdeCandidates,\n validatePatterns,\n }: {\n workflowCandidates: Iterable<string>;\n stepCandidates: Iterable<string>;\n serdeCandidates?: Iterable<string>;\n validatePatterns: boolean;\n }): Promise<{\n workflowFiles: Set<string>;\n stepFiles: Set<string>;\n serdeFiles: Set<string>;\n }> {\n const candidatesByFile = new Map<\n string,\n {\n hasWorkflowCandidate: boolean;\n hasStepCandidate: boolean;\n hasSerdeCandidate: boolean;\n }\n >();\n\n for (const filePath of workflowCandidates) {\n const normalizedPath = this.normalizeDiscoveredFilePath(filePath);\n const existing = candidatesByFile.get(normalizedPath);\n if (existing) {\n existing.hasWorkflowCandidate = true;\n } else {\n candidatesByFile.set(normalizedPath, {\n hasWorkflowCandidate: true,\n hasStepCandidate: false,\n hasSerdeCandidate: false,\n });\n }\n }\n\n for (const filePath of stepCandidates) {\n const normalizedPath = this.normalizeDiscoveredFilePath(filePath);\n const existing = candidatesByFile.get(normalizedPath);\n if (existing) {\n existing.hasStepCandidate = true;\n } else {\n candidatesByFile.set(normalizedPath, {\n hasWorkflowCandidate: false,\n hasStepCandidate: true,\n hasSerdeCandidate: false,\n });\n }\n }\n\n if (serdeCandidates) {\n for (const filePath of serdeCandidates) {\n const normalizedPath = this.normalizeDiscoveredFilePath(filePath);\n const existing = candidatesByFile.get(normalizedPath);\n if (existing) {\n existing.hasSerdeCandidate = true;\n } else {\n candidatesByFile.set(normalizedPath, {\n hasWorkflowCandidate: false,\n hasStepCandidate: false,\n hasSerdeCandidate: true,\n });\n }\n }\n }\n\n const fileEntries = Array.from(candidatesByFile.entries()).sort(\n ([a], [b]) => a.localeCompare(b)\n );\n const validatedEntries = await Promise.all(\n fileEntries.map(async ([filePath, candidates]) => {\n try {\n const fileStats = await stat(filePath);\n if (!fileStats.isFile()) {\n return null;\n }\n\n if (!validatePatterns) {\n return {\n filePath,\n hasUseWorkflow: candidates.hasWorkflowCandidate,\n hasUseStep: candidates.hasStepCandidate,\n hasSerde: candidates.hasSerdeCandidate,\n };\n }\n\n const source = await readFile(filePath, 'utf-8');\n const patterns = detectWorkflowPatterns(source);\n return {\n filePath,\n hasUseWorkflow: patterns.hasUseWorkflow,\n hasUseStep: patterns.hasUseStep,\n hasSerde: patterns.hasSerde,\n };\n } catch {\n return null;\n }\n })\n );\n\n const workflowFiles = new Set<string>();\n const stepFiles = new Set<string>();\n const serdeFiles = new Set<string>();\n for (const entry of validatedEntries) {\n if (!entry) {\n continue;\n }\n if (entry.hasUseWorkflow) {\n workflowFiles.add(entry.filePath);\n }\n if (entry.hasUseStep) {\n stepFiles.add(entry.filePath);\n }\n if (entry.hasSerde) {\n serdeFiles.add(entry.filePath);\n }\n }\n\n return { workflowFiles, stepFiles, serdeFiles };\n }\n\n private async validateDiscoveredEntryFiles(): Promise<void> {\n const workflowCandidates = new Set(this.discoveredWorkflowFiles);\n const stepCandidates = new Set(this.discoveredStepFiles);\n const serdeCandidates = new Set(this.discoveredSerdeFiles);\n const { workflowFiles, stepFiles, serdeFiles } =\n await this.reconcileDiscoveredEntries({\n workflowCandidates,\n stepCandidates,\n serdeCandidates,\n validatePatterns: true,\n });\n\n // Reconcile validated entries against the snapshot we started with so\n // file discoveries that arrive during validation are preserved.\n let workflowsChanged = false;\n let stepsChanged = false;\n let serdeChanged = false;\n\n for (const filePath of workflowCandidates) {\n if (!workflowFiles.has(filePath)) {\n workflowsChanged =\n this.discoveredWorkflowFiles.delete(filePath) || workflowsChanged;\n }\n }\n for (const filePath of workflowFiles) {\n if (!this.discoveredWorkflowFiles.has(filePath)) {\n this.discoveredWorkflowFiles.add(filePath);\n workflowsChanged = true;\n }\n }\n\n for (const filePath of stepCandidates) {\n if (!stepFiles.has(filePath)) {\n stepsChanged =\n this.discoveredStepFiles.delete(filePath) || stepsChanged;\n }\n }\n for (const filePath of stepFiles) {\n if (!this.discoveredStepFiles.has(filePath)) {\n this.discoveredStepFiles.add(filePath);\n stepsChanged = true;\n }\n }\n\n for (const filePath of serdeCandidates) {\n if (!serdeFiles.has(filePath)) {\n serdeChanged =\n this.discoveredSerdeFiles.delete(filePath) || serdeChanged;\n }\n }\n for (const filePath of serdeFiles) {\n if (!this.discoveredSerdeFiles.has(filePath)) {\n this.discoveredSerdeFiles.add(filePath);\n serdeChanged = true;\n }\n }\n\n if (workflowsChanged || stepsChanged) {\n this.scheduleWorkflowsCacheWrite();\n }\n }\n\n private async buildDiscoveredFiles(\n inputFiles: string[],\n implicitStepFiles: string[]\n ) {\n const outputDir = await this.findAppDirectory();\n const workflowGeneratedDir = join(outputDir, '.well-known/workflow/v1');\n const cacheDir = join(this.config.workingDir, this.getDistDir(), 'cache');\n await mkdir(cacheDir, { recursive: true });\n const manifestBuildDir = join(cacheDir, 'workflow-generated-manifest');\n const tempRouteFileName = 'route.js.temp';\n const trackedDiscoveredEntries =\n await this.collectTrackedDiscoveredEntries();\n const discoveredStepFileCandidates = Array.from(\n new Set([\n ...this.discoveredStepFiles,\n ...trackedDiscoveredEntries.discoveredSteps,\n ...implicitStepFiles,\n ])\n ).sort();\n const discoveredWorkflowFileCandidates = Array.from(\n new Set([\n ...this.discoveredWorkflowFiles,\n ...trackedDiscoveredEntries.discoveredWorkflows,\n ])\n ).sort();\n const discoveredSerdeFileCandidates = Array.from(\n new Set([\n ...this.discoveredSerdeFiles,\n ...trackedDiscoveredEntries.discoveredSerdeFiles,\n ])\n ).sort();\n const discoveredWorkflowFiles = await this.filterExistingFiles(\n discoveredWorkflowFileCandidates\n );\n const existingStepFileCandidates = await this.filterExistingFiles(\n discoveredStepFileCandidates\n );\n const discoveredStepFiles = await this.collectTransitiveStepFiles({\n entryFiles: [...existingStepFileCandidates, ...discoveredWorkflowFiles],\n stepFiles: existingStepFileCandidates,\n });\n const existingSerdeFileCandidates = await this.filterExistingFiles(\n discoveredSerdeFileCandidates\n );\n const discoveredSerdeFiles = await this.collectTransitiveSerdeFiles({\n entryFiles: [...discoveredStepFiles, ...discoveredWorkflowFiles],\n serdeFiles: existingSerdeFileCandidates,\n });\n const existingInputFiles = await this.filterExistingFiles(inputFiles);\n const buildInputFiles = Array.from(\n new Set([\n ...existingInputFiles,\n ...discoveredStepFiles,\n ...discoveredWorkflowFiles,\n ...discoveredSerdeFiles,\n ])\n ).sort();\n const discoveredEntries = {\n discoveredSteps: new Set(discoveredStepFiles),\n discoveredWorkflows: new Set(discoveredWorkflowFiles),\n discoveredSerdeFiles: new Set(discoveredSerdeFiles),\n };\n\n // Ensure output directories exist\n await mkdir(workflowGeneratedDir, { recursive: true });\n\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, '.gitignore'),\n '*'\n );\n\n const tsconfigPath = await this.findTsConfigPath();\n\n // V2: Build combined route (replaces separate step + flow routes)\n const flowRouteDir = join(workflowGeneratedDir, 'flow');\n await mkdir(flowRouteDir, { recursive: true });\n // Write step registrations to final name directly (not temp) so the\n // import path in the flow route is correct. The flow route uses temp\n // naming to avoid HMR churn via copyFileIfChanged, but the step\n // registrations file is a side-effect import and doesn't need that.\n const stepsOutfile = join(flowRouteDir, '__step_registrations.js');\n const combinedResult = await this.createCombinedBundle({\n format: 'esm',\n inputFiles: buildInputFiles,\n stepsOutfile,\n flowOutfile: join(flowRouteDir, tempRouteFileName),\n bundleFinalOutput: false,\n externalizeNonSteps: true,\n tsconfigPath,\n discoveredEntries,\n });\n await this.buildWebhookRoute({\n workflowGeneratedDir,\n routeFileName: tempRouteFileName,\n });\n await this.refreshTrackedDependencyFiles(\n workflowGeneratedDir,\n tempRouteFileName\n );\n\n const manifest = {\n steps: { ...combinedResult?.manifest?.steps },\n workflows: { ...combinedResult?.manifest?.workflows },\n classes: { ...combinedResult?.manifest?.classes },\n };\n\n const manifestFilePath = join(workflowGeneratedDir, 'manifest.json');\n const manifestBuildPath = join(manifestBuildDir, 'manifest.json');\n const workflowBundlePath = join(\n workflowGeneratedDir,\n `flow/${tempRouteFileName}`\n );\n const manifestJson = await this.createManifest({\n workflowBundlePath,\n manifestDir: manifestBuildDir,\n manifest,\n });\n if (manifestJson) {\n await this.rewriteJsonFileWithStableKeyOrder(manifestBuildPath);\n await this.copyFileIfChanged(manifestBuildPath, manifestFilePath);\n } else {\n await rm(manifestBuildPath, { force: true });\n await rm(manifestFilePath, { force: true });\n }\n\n await this.writeFunctionsConfig(outputDir);\n\n // V2: Combined route (flow) — step registrations already at final path\n await this.copyFileIfChanged(\n join(workflowGeneratedDir, `flow/${tempRouteFileName}`),\n join(workflowGeneratedDir, 'flow/route.js')\n );\n await this.copyFileIfChanged(\n join(workflowGeneratedDir, `webhook/[token]/${tempRouteFileName}`),\n join(workflowGeneratedDir, 'webhook/[token]/route.js')\n );\n\n // Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.\n // Next.js serves files from public/ at the root URL.\n if (this.shouldExposePublicManifest && manifestJson) {\n const publicManifestDir = join(\n this.config.workingDir,\n 'public/.well-known/workflow/v1'\n );\n await mkdir(publicManifestDir, { recursive: true });\n await this.copyFileIfChanged(\n manifestFilePath,\n join(publicManifestDir, 'manifest.json')\n );\n }\n\n // Notify deferred entry loaders waiting on route.js stubs.\n this.socketIO?.emit('build-complete');\n }\n\n private async cleanupGeneratedArtifactsOnBoot(\n outputDir: string\n ): Promise<void> {\n const workflowGeneratedDir = join(outputDir, '.well-known/workflow/v1');\n const flowRouteDir = join(workflowGeneratedDir, 'flow');\n const stepRouteDir = join(workflowGeneratedDir, 'step');\n const webhookRouteDir = join(workflowGeneratedDir, 'webhook/[token]');\n\n const staleArtifactPaths = [\n join(flowRouteDir, 'route.js.temp'),\n join(flowRouteDir, 'route.js.temp.debug.json'),\n join(flowRouteDir, 'route.js.debug.json'),\n join(flowRouteDir, '__step_registrations.route.js.temp'),\n join(flowRouteDir, '__step_registrations.route.js.temp.debug.json'),\n // V2: clean up stale V1 step route directory\n stepRouteDir,\n join(webhookRouteDir, 'route.js.temp'),\n join(workflowGeneratedDir, 'manifest.json'),\n ];\n\n await Promise.all(\n staleArtifactPaths.map((stalePath) =>\n rm(stalePath, { recursive: true, force: true })\n )\n );\n\n await Promise.all([\n this.removeStaleDeferredTempFiles(flowRouteDir),\n this.removeStaleDeferredTempFiles(webhookRouteDir),\n ]);\n }\n\n private async removeStaleDeferredTempFiles(\n routeDir: string\n ): Promise<void> {\n const routeEntries = await readdir(routeDir, {\n withFileTypes: true,\n }).catch(() => []);\n await Promise.all(\n routeEntries\n .filter(\n (entry) =>\n entry.isFile() &&\n entry.name.startsWith('route.js.') &&\n entry.name.endsWith('.tmp')\n )\n .map((entry) =>\n rm(join(routeDir, entry.name), {\n force: true,\n })\n )\n );\n }\n\n private async createDiscoverySocketServer(): Promise<void> {\n if (this.socketIO || process.env.WORKFLOW_SOCKET_PORT) {\n return;\n }\n\n process.env.WORKFLOW_SOCKET_INFO_PATH = this.getSocketInfoFilePath();\n const config: SocketServerConfig = {\n isDevServer: Boolean(this.config.watch),\n socketInfoFilePath: this.getSocketInfoFilePath(),\n onFileDiscovered: (\n filePath: string,\n hasWorkflow: boolean,\n hasStep: boolean,\n hasSerde: boolean\n ) => {\n const normalizedFilePath = this.normalizeDiscoveredFilePath(filePath);\n let hasCacheTrackingChange = false;\n const wasTrackedDependency =\n this.trackedDependencyFiles.has(normalizedFilePath);\n\n if (hasWorkflow) {\n if (!this.discoveredWorkflowFiles.has(normalizedFilePath)) {\n this.discoveredWorkflowFiles.add(normalizedFilePath);\n hasCacheTrackingChange = true;\n }\n } else {\n const wasDeleted =\n this.discoveredWorkflowFiles.delete(normalizedFilePath);\n hasCacheTrackingChange = wasDeleted || hasCacheTrackingChange;\n }\n\n if (hasStep) {\n if (!this.discoveredStepFiles.has(normalizedFilePath)) {\n this.discoveredStepFiles.add(normalizedFilePath);\n hasCacheTrackingChange = true;\n }\n } else {\n const wasDeleted =\n this.discoveredStepFiles.delete(normalizedFilePath);\n hasCacheTrackingChange = wasDeleted || hasCacheTrackingChange;\n }\n\n if (hasSerde) {\n if (!this.discoveredSerdeFiles.has(normalizedFilePath)) {\n hasCacheTrackingChange = true;\n }\n this.discoveredSerdeFiles.add(normalizedFilePath);\n } else {\n const wasDeleted =\n this.discoveredSerdeFiles.delete(normalizedFilePath);\n hasCacheTrackingChange = wasDeleted || hasCacheTrackingChange;\n }\n\n if (hasCacheTrackingChange) {\n this.scheduleWorkflowsCacheWrite();\n }\n\n if (\n hasWorkflow ||\n hasStep ||\n hasSerde ||\n hasCacheTrackingChange ||\n wasTrackedDependency\n ) {\n this.scheduleDeferredRebuild();\n }\n },\n onTriggerBuild: () => {\n this.scheduleDeferredRebuild();\n },\n };\n\n this.socketIO = await createSocketServer(config);\n }\n\n private async initializeDiscoveryState(): Promise<void> {\n if (this.cacheInitialized) {\n return;\n }\n\n await this.loadWorkflowsCache();\n // Deferred mode must not run eager input-graph discovery; entries are\n // discovered via loader->socket notifications during Next's build.\n this.cacheInitialized = true;\n }\n\n private getDistDir(): string {\n return (this.config as { distDir?: string }).distDir || '.next';\n }\n\n private getWorkflowsCacheFilePath(): string {\n return join(\n this.config.workingDir,\n this.getDistDir(),\n 'cache',\n 'workflows.json'\n );\n }\n\n private getSocketInfoFilePath(): string {\n return join(\n this.config.workingDir,\n this.getDistDir(),\n 'cache',\n 'workflow-socket.json'\n );\n }\n\n private findPackageJsonPath(filePath: string): string | null {\n let currentDir = dirname(filePath);\n let previousDir = '';\n\n while (currentDir !== previousDir) {\n const packageJsonPath = join(currentDir, 'package.json');\n if (existsSync(packageJsonPath)) {\n return packageJsonPath;\n }\n previousDir = currentDir;\n currentDir = dirname(currentDir);\n }\n\n return null;\n }\n\n private shouldPreferSourceBackedPackagePath(filePath: string): boolean {\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n // Only prefer source for workspace packages (not in node_modules).\n // For tarball-installed packages, using source-backed paths causes\n // esbuild to bundle the full source tree (including world.ts with\n // process.cwd()) instead of externalizing properly.\n if (\n normalizedPath.includes('/packages/') &&\n !normalizedPath.includes('/node_modules/')\n ) {\n return true;\n }\n\n if (!normalizedPath.includes('/node_modules/')) {\n return false;\n }\n\n const packageJsonPath = this.findPackageJsonPath(filePath);\n if (!packageJsonPath) {\n return false;\n }\n\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, 'utf-8')\n ) as { name?: unknown };\n return (\n packageJson.name === 'workflow' ||\n (typeof packageJson.name === 'string' &&\n packageJson.name.startsWith('@workflow/'))\n );\n } catch {\n return false;\n }\n }\n\n private resolveSourceBackedPackagePath(filePath: string): string {\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n if (!normalizedPath.includes('/dist/')) {\n return filePath;\n }\n\n const sourceCandidate = normalizedPath.replace('/dist/', '/src/');\n const resolvedSourceCandidate =\n this.resolveCopiedStepImportTargetPath(sourceCandidate);\n if (\n !existsSync(resolvedSourceCandidate) ||\n !this.shouldPreferSourceBackedPackagePath(filePath)\n ) {\n return filePath;\n }\n\n return existsSync(resolvedSourceCandidate)\n ? resolvedSourceCandidate\n : filePath;\n }\n\n private normalizeDiscoveredFilePath(filePath: string): string {\n const absolutePath = isAbsolute(filePath)\n ? filePath\n : resolve(this.config.workingDir, filePath);\n return this.resolveSourceBackedPackagePath(absolutePath);\n }\n\n private async filterExistingFiles(filePaths: string[]): Promise<string[]> {\n const normalizedFilePaths = Array.from(\n new Set(\n filePaths.map((filePath) =>\n this.normalizeDiscoveredFilePath(filePath)\n )\n )\n ).sort();\n\n const existingFiles = await Promise.all(\n normalizedFilePaths.map(async (filePath) => {\n try {\n const fileStats = await stat(filePath);\n return fileStats.isFile() ? filePath : null;\n } catch {\n return null;\n }\n })\n );\n\n return existingFiles.filter((filePath): filePath is string =>\n Boolean(filePath)\n );\n }\n\n private async createDeferredBuildSignature(\n inputFiles: string[]\n ): Promise<string> {\n const normalizedFiles = Array.from(\n new Set([\n ...inputFiles.map((filePath) =>\n this.normalizeDiscoveredFilePath(filePath)\n ),\n ...this.trackedDependencyFiles,\n ])\n ).sort();\n\n const signatureParts = await Promise.all(\n normalizedFiles.map(async (filePath) => {\n try {\n const fileStats = await stat(filePath);\n return `${filePath}:${fileStats.size}:${Math.trunc(fileStats.mtimeMs)}`;\n } catch {\n return `${filePath}:missing`;\n }\n })\n );\n\n const signatureHash = createHash('sha256');\n for (const signaturePart of signatureParts) {\n signatureHash.update(signaturePart);\n signatureHash.update('\\n');\n }\n\n return signatureHash.digest('hex');\n }\n\n private async collectTrackedDiscoveredEntries(): Promise<{\n discoveredSteps: string[];\n discoveredWorkflows: string[];\n discoveredSerdeFiles: string[];\n }> {\n if (this.trackedDependencyFiles.size === 0) {\n return {\n discoveredSteps: [],\n discoveredWorkflows: [],\n discoveredSerdeFiles: [],\n };\n }\n\n const { workflowFiles, stepFiles, serdeFiles } =\n await this.reconcileDiscoveredEntries({\n workflowCandidates: this.trackedDependencyFiles,\n stepCandidates: this.trackedDependencyFiles,\n serdeCandidates: this.trackedDependencyFiles,\n validatePatterns: true,\n });\n\n return {\n discoveredSteps: Array.from(stepFiles).sort(),\n discoveredWorkflows: Array.from(workflowFiles).sort(),\n discoveredSerdeFiles: Array.from(serdeFiles).sort(),\n };\n }\n\n private async refreshTrackedDependencyFiles(\n workflowGeneratedDir: string,\n routeFileName: string\n ): Promise<void> {\n const bundleFiles = [\n join(workflowGeneratedDir, `step/${routeFileName}`),\n join(workflowGeneratedDir, `flow/${routeFileName}`),\n ];\n const trackedFiles = new Set<string>();\n\n for (const bundleFile of bundleFiles) {\n const bundleSources = await this.extractBundleSourceFiles(bundleFile);\n for (const sourceFile of bundleSources) {\n trackedFiles.add(sourceFile);\n }\n }\n\n if (trackedFiles.size > 0) {\n this.trackedDependencyFiles = trackedFiles;\n }\n }\n\n private async extractBundleSourceFiles(\n bundleFilePath: string\n ): Promise<string[]> {\n let bundleContents: string;\n try {\n bundleContents = await readFile(bundleFilePath, 'utf-8');\n } catch {\n return [];\n }\n\n const baseDirectory = dirname(bundleFilePath);\n const localSourceFiles = new Set<string>();\n const sourceMapMatches = bundleContents.matchAll(\n /\\/\\/# sourceMappingURL=data:application\\/json[^,]*;base64,([A-Za-z0-9+/=]+)/g\n );\n\n for (const match of sourceMapMatches) {\n const base64Value = match[1];\n if (!base64Value) {\n continue;\n }\n\n let sourceMap: { sourceRoot?: unknown; sources?: unknown };\n try {\n sourceMap = JSON.parse(\n Buffer.from(base64Value, 'base64').toString('utf-8')\n ) as { sourceRoot?: unknown; sources?: unknown };\n } catch {\n continue;\n }\n\n const sourceRoot =\n typeof sourceMap.sourceRoot === 'string' ? sourceMap.sourceRoot : '';\n const sources = Array.isArray(sourceMap.sources)\n ? sourceMap.sources.filter(\n (source): source is string => typeof source === 'string'\n )\n : [];\n\n for (const source of sources) {\n if (source.startsWith('webpack://') || source.startsWith('<')) {\n continue;\n }\n\n let resolvedSourcePath: string;\n if (source.startsWith('file://')) {\n try {\n resolvedSourcePath = decodeURIComponent(new URL(source).pathname);\n } catch {\n continue;\n }\n } else if (isAbsolute(source)) {\n resolvedSourcePath = source;\n } else {\n resolvedSourcePath = resolve(baseDirectory, sourceRoot, source);\n }\n\n const normalizedSourcePath =\n this.normalizeDiscoveredFilePath(resolvedSourcePath);\n const normalizedSourcePathForCheck = normalizedSourcePath.replace(\n /\\\\/g,\n '/'\n );\n const isSourceBackedPackagePath =\n this.shouldPreferSourceBackedPackagePath(normalizedSourcePath);\n if (\n normalizedSourcePathForCheck.includes('/.well-known/workflow/') ||\n (!isSourceBackedPackagePath &&\n normalizedSourcePathForCheck.includes('/node_modules/')) ||\n (!isSourceBackedPackagePath &&\n normalizedSourcePathForCheck.includes('/.pnpm/')) ||\n normalizedSourcePathForCheck.includes('/.next/') ||\n normalizedSourcePathForCheck.endsWith('/virtual-entry.js')\n ) {\n continue;\n }\n\n localSourceFiles.add(normalizedSourcePath);\n }\n }\n\n return Array.from(localSourceFiles);\n }\n\n private scheduleWorkflowsCacheWrite(): void {\n if (this.cacheWriteTimer) {\n clearTimeout(this.cacheWriteTimer);\n }\n\n this.cacheWriteTimer = setTimeout(() => {\n this.cacheWriteTimer = null;\n void this.writeWorkflowsCache().catch((error) => {\n console.warn('Failed to write workflow discovery cache', error);\n });\n }, 50);\n }\n\n private scheduleDeferredRebuild(): void {\n if (this.deferredRebuildTimer) {\n clearTimeout(this.deferredRebuildTimer);\n }\n\n this.deferredRebuildTimer = setTimeout(() => {\n this.deferredRebuildTimer = null;\n void this.onBeforeDeferredEntries().catch((error) => {\n console.warn(\n '[workflow] Deferred rebuild after source update failed.',\n error\n );\n });\n }, 75);\n }\n\n private async readWorkflowsCache(): Promise<{\n workflowFiles: string[];\n stepFiles: string[];\n } | null> {\n const cacheFilePath = this.getWorkflowsCacheFilePath();\n\n try {\n const cacheContents = await readFile(cacheFilePath, 'utf-8');\n const parsed = JSON.parse(cacheContents) as {\n workflowFiles?: unknown;\n stepFiles?: unknown;\n };\n\n const workflowFiles = Array.isArray(parsed.workflowFiles)\n ? parsed.workflowFiles.filter(\n (item): item is string => typeof item === 'string'\n )\n : [];\n const stepFiles = Array.isArray(parsed.stepFiles)\n ? parsed.stepFiles.filter(\n (item): item is string => typeof item === 'string'\n )\n : [];\n\n return { workflowFiles, stepFiles };\n } catch {\n return null;\n }\n }\n\n private async loadWorkflowsCache(): Promise<void> {\n const cachedData = await this.readWorkflowsCache();\n if (!cachedData) {\n return;\n }\n const { workflowFiles, stepFiles, serdeFiles } =\n await this.reconcileDiscoveredEntries({\n workflowCandidates: cachedData.workflowFiles,\n stepCandidates: cachedData.stepFiles,\n serdeCandidates: this.discoveredSerdeFiles,\n validatePatterns: true,\n });\n\n this.discoveredWorkflowFiles.clear();\n this.discoveredStepFiles.clear();\n this.discoveredSerdeFiles.clear();\n for (const filePath of workflowFiles) {\n this.discoveredWorkflowFiles.add(filePath);\n }\n for (const filePath of stepFiles) {\n this.discoveredStepFiles.add(filePath);\n }\n for (const filePath of serdeFiles) {\n this.discoveredSerdeFiles.add(filePath);\n }\n }\n\n private async writeWorkflowsCache(): Promise<void> {\n const cacheFilePath = this.getWorkflowsCacheFilePath();\n const cacheDir = join(this.config.workingDir, this.getDistDir(), 'cache');\n await mkdir(cacheDir, { recursive: true });\n\n const cacheData = {\n workflowFiles: Array.from(this.discoveredWorkflowFiles).sort(),\n stepFiles: Array.from(this.discoveredStepFiles).sort(),\n };\n\n await writeFile(cacheFilePath, JSON.stringify(cacheData, null, 2));\n }\n\n private async writeStubFiles(outputDir: string): Promise<void> {\n // Turbopack currently has a worker-concurrency limitation for pending\n // virtual entries. Warn if parallelism is too low to reliably discover.\n const parallelismCount = os.availableParallelism();\n if (process.env.TURBOPACK && parallelismCount < 4) {\n console.warn(\n `Available parallelism of ${parallelismCount} is less than needed 4. This can cause workflows/steps to fail to discover properly in turbopack`\n );\n }\n\n const routeStubContent = [\n `// ${ROUTE_STUB_FILE_MARKER}`,\n 'export const __workflowRouteStub = true;',\n ].join('\\n');\n const workflowGeneratedDir = join(outputDir, '.well-known/workflow/v1');\n\n await mkdir(join(workflowGeneratedDir, 'flow'), { recursive: true });\n await mkdir(join(workflowGeneratedDir, 'webhook/[token]'), {\n recursive: true,\n });\n\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, '.gitignore'),\n '*'\n );\n\n // V2: Only flow + webhook stubs needed (no separate step route).\n // Stubs are replaced by generated output once discovery finishes.\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, 'flow/route.js'),\n routeStubContent\n );\n await this.writeFileIfChanged(\n join(workflowGeneratedDir, 'webhook/[token]/route.js'),\n routeStubContent\n );\n }\n\n protected async getInputFiles(): Promise<string[]> {\n // Read Next.js's app-paths-manifest.json from a previous build to\n // determine which files are actual route entrypoints. This avoids\n // predicting Next.js conventions with regexes and instead reads\n // from Next.js's own output.\n const nextDir = join(this.config.workingDir, '.next');\n const manifestPath = join(nextDir, 'app-paths-manifest.json');\n try {\n const manifestContent = readFileSync(manifestPath, 'utf-8');\n const manifest = JSON.parse(manifestContent) as Record<string, string>;\n // The manifest maps route paths to their source files.\n // Extract the source file paths and resolve them.\n const manifestFiles = new Set<string>();\n for (const sourcePath of Object.values(manifest)) {\n const resolved = resolve(nextDir, 'server', sourcePath);\n // The manifest points to built output; find the source file\n // by matching against the base builder's full file list.\n manifestFiles.add(resolved);\n }\n\n // Use the manifest route paths to filter the input files.\n // A file is included if it matches a known route segment from\n // the manifest (e.g., app/api/route contains 'app/api/route').\n const inputFiles = await super.getInputFiles();\n const routeSegments = Object.keys(manifest).map((route) =>\n route.replace(/^\\//, '').replace(/\\/route$/, '')\n );\n return inputFiles.filter((item) =>\n routeSegments.some((segment) => item.includes(segment))\n );\n } catch {\n // No manifest from a previous build — fall back to the base\n // builder's full file scan. This is safe but slower; subsequent\n // builds will use the manifest.\n return super.getInputFiles();\n }\n }\n\n private async writeFunctionsConfig(outputDir: string) {\n // we don't run this in development mode as it's not needed\n if (process.env.NODE_ENV === 'development') {\n return;\n }\n // V2: Single combined trigger handles both workflow and step execution\n const generatedConfig = {\n version: '0',\n workflows: {\n maxDuration: 'max',\n experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],\n },\n };\n\n await this.writeFileIfChanged(\n join(outputDir, '.well-known/workflow/v1/config.json'),\n JSON.stringify(generatedConfig, null, 2)\n );\n }\n\n private async writeFileIfChanged(\n filePath: string,\n contents: string | Buffer\n ): Promise<boolean> {\n const nextBuffer = Buffer.isBuffer(contents)\n ? contents\n : Buffer.from(contents);\n\n try {\n const currentBuffer = await readFile(filePath);\n if (currentBuffer.equals(nextBuffer)) {\n return false;\n }\n } catch {\n // File does not exist yet or cannot be read; write a fresh copy.\n }\n\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, nextBuffer);\n return true;\n }\n\n private async copyFileIfChanged(\n sourcePath: string,\n destinationPath: string\n ): Promise<boolean> {\n const sourceContents = await readFile(sourcePath);\n return this.writeFileIfChanged(destinationPath, sourceContents);\n }\n\n private sortJsonValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => this.sortJsonValue(item));\n }\n if (value && typeof value === 'object') {\n const sortedEntries = Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, entryValue]) => [key, this.sortJsonValue(entryValue)]);\n return Object.fromEntries(sortedEntries);\n }\n return value;\n }\n\n private async rewriteJsonFileWithStableKeyOrder(\n filePath: string\n ): Promise<void> {\n try {\n const contents = await readFile(filePath, 'utf-8');\n const parsed = JSON.parse(contents) as unknown;\n const normalized = this.sortJsonValue(parsed);\n await this.writeFileIfChanged(\n filePath,\n `${JSON.stringify(normalized, null, 2)}\\n`\n );\n } catch {\n // Manifest may not exist (e.g. manifest generation failed); ignore.\n }\n }\n\n private resolveCopiedStepImportTargetPath(targetPath: string): string {\n if (existsSync(targetPath)) {\n return targetPath;\n }\n\n const extensionMatch = targetPath.match(/(\\.[^./\\\\]+)$/);\n const extension = extensionMatch?.[1]?.toLowerCase();\n if (!extension) {\n return targetPath;\n }\n\n const extensionFallbacks =\n extension === '.js'\n ? ['.ts', '.tsx', '.mts', '.cts']\n : extension === '.mjs'\n ? ['.mts']\n : extension === '.cjs'\n ? ['.cts']\n : extension === '.jsx'\n ? ['.tsx']\n : [];\n\n if (extensionFallbacks.length === 0) {\n return targetPath;\n }\n\n const targetWithoutExtension = targetPath.slice(0, -extension.length);\n for (const fallbackExtension of extensionFallbacks) {\n const fallbackPath = `${targetWithoutExtension}${fallbackExtension}`;\n if (existsSync(fallbackPath)) {\n return fallbackPath;\n }\n }\n\n return targetPath;\n }\n\n private extractRelativeImportSpecifiers(source: string): string[] {\n return this.extractImportSpecifiers(source).filter((specifier) =>\n specifier.startsWith('.')\n );\n }\n\n private extractImportSpecifiers(source: string): string[] {\n const relativeSpecifiers = new Set<string>();\n const importPatterns = [\n /from\\s+['\"]([^'\"]+)['\"]/g,\n /import\\s+['\"]([^'\"]+)['\"]/g,\n /import\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n ];\n\n for (const importPattern of importPatterns) {\n for (const match of source.matchAll(importPattern)) {\n const specifier = match[1];\n if (specifier) {\n relativeSpecifiers.add(specifier);\n }\n }\n }\n\n return Array.from(relativeSpecifiers);\n }\n\n private async getRelativeFilenameForSwc(filePath: string): Promise<string> {\n const workingDir = this.config.workingDir;\n const normalizedWorkingDir = workingDir\n .replace(/\\\\/g, '/')\n .replace(/\\/$/, '');\n const normalizedFilepath = filePath.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 relativeFilename = normalizedFilepath.substring(\n normalizedWorkingDir.length + 1\n );\n } else if (lowerPath === lowerWd) {\n relativeFilename = '.';\n } else {\n relativeFilename = relative(workingDir, filePath).replace(/\\\\/g, '/');\n if (relativeFilename.startsWith('../')) {\n const aliasedRelativePath = await resolveWorkflowAliasRelativePath(\n filePath,\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 if (relativeFilename.includes(':') || relativeFilename.startsWith('/')) {\n relativeFilename = basename(normalizedFilepath);\n }\n\n return relativeFilename;\n }\n\n private resolveImportTargetWithExtensionFallbacks(\n targetPath: string\n ): string {\n if (existsSync(targetPath)) {\n return targetPath;\n }\n\n const extensionMatch = targetPath.match(/(\\.[^./\\\\]+)$/);\n const extension = extensionMatch?.[1]?.toLowerCase();\n if (!extension) {\n return targetPath;\n }\n\n const extensionFallbacks =\n extension === '.js'\n ? ['.ts', '.tsx', '.mts', '.cts']\n : extension === '.mjs'\n ? ['.mts']\n : extension === '.cjs'\n ? ['.cts']\n : extension === '.jsx'\n ? ['.tsx']\n : [];\n\n if (extensionFallbacks.length === 0) {\n return targetPath;\n }\n\n const targetWithoutExtension = targetPath.slice(0, -extension.length);\n for (const fallbackExtension of extensionFallbacks) {\n const fallbackPath = `${targetWithoutExtension}${fallbackExtension}`;\n if (existsSync(fallbackPath)) {\n return fallbackPath;\n }\n }\n\n return targetPath;\n }\n\n private shouldSkipTransitiveStepFile(filePath: string): boolean {\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n const isSourceBackedPackagePath =\n this.shouldPreferSourceBackedPackagePath(filePath);\n return (\n normalizedPath.includes('/.well-known/workflow/') ||\n normalizedPath.includes('/.next/') ||\n (!isSourceBackedPackagePath &&\n (normalizedPath.includes('/node_modules/') ||\n normalizedPath.includes('/.pnpm/')))\n );\n }\n\n private async resolveTransitiveStepImportTargetPath(\n sourceFilePath: string,\n specifier: string\n ): Promise<string | null> {\n const specifierMatch = specifier.match(/^([^?#]+)(.*)$/);\n const importPath = specifierMatch?.[1] ?? specifier;\n\n if (!importPath.startsWith('.')) {\n if (importPath !== 'workflow' && !importPath.startsWith('@workflow/')) {\n return null;\n }\n\n try {\n const resolvedPath =\n createRequire(sourceFilePath).resolve(importPath);\n const normalizedResolvedPath =\n this.normalizeDiscoveredFilePath(resolvedPath);\n if (this.shouldSkipTransitiveStepFile(normalizedResolvedPath)) {\n return null;\n }\n\n const fileStats = await stat(normalizedResolvedPath);\n return fileStats.isFile() ? normalizedResolvedPath : null;\n } catch {\n return null;\n }\n }\n\n const absoluteTargetPath = resolve(dirname(sourceFilePath), importPath);\n\n const candidatePaths = new Set<string>([\n this.resolveImportTargetWithExtensionFallbacks(absoluteTargetPath),\n ]);\n\n if (!extname(absoluteTargetPath)) {\n const extensionCandidates = [\n '.ts',\n '.tsx',\n '.mts',\n '.cts',\n '.js',\n '.jsx',\n '.mjs',\n '.cjs',\n ];\n for (const extensionCandidate of extensionCandidates) {\n candidatePaths.add(`${absoluteTargetPath}${extensionCandidate}`);\n candidatePaths.add(\n join(absoluteTargetPath, `index${extensionCandidate}`)\n );\n }\n }\n\n for (const candidatePath of candidatePaths) {\n const resolvedPath =\n this.resolveImportTargetWithExtensionFallbacks(candidatePath);\n const normalizedResolvedPath =\n this.normalizeDiscoveredFilePath(resolvedPath);\n\n if (this.shouldSkipTransitiveStepFile(normalizedResolvedPath)) {\n continue;\n }\n\n try {\n const fileStats = await stat(normalizedResolvedPath);\n if (fileStats.isFile()) {\n return normalizedResolvedPath;\n }\n } catch {\n // Try the next candidate path.\n }\n }\n\n return null;\n }\n\n private async collectTransitiveStepFiles({\n entryFiles,\n stepFiles,\n }: {\n entryFiles: string[];\n stepFiles: string[];\n }): Promise<string[]> {\n const normalizedEntryFiles = Array.from(\n new Set(\n entryFiles.map((entryFile) =>\n this.normalizeDiscoveredFilePath(entryFile)\n )\n )\n ).sort();\n const normalizedStepSeedFiles = Array.from(\n new Set(\n stepFiles.map((stepFile) =>\n this.normalizeDiscoveredFilePath(stepFile)\n )\n )\n ).sort();\n const discoveredStepFiles = new Set<string>(normalizedStepSeedFiles);\n const queuedFiles = Array.from(\n new Set([...normalizedEntryFiles, ...normalizedStepSeedFiles])\n );\n const visitedFiles = new Set<string>();\n const sourceCache = new Map<string, string | null>();\n const patternCache = new Map<\n string,\n ReturnType<typeof detectWorkflowPatterns> | null\n >();\n\n const getSource = async (filePath: string): Promise<string | null> => {\n if (sourceCache.has(filePath)) {\n return sourceCache.get(filePath) ?? null;\n }\n try {\n const source = await readFile(filePath, 'utf-8');\n sourceCache.set(filePath, source);\n return source;\n } catch {\n sourceCache.set(filePath, null);\n return null;\n }\n };\n\n const getPatterns = async (\n filePath: string\n ): Promise<ReturnType<typeof detectWorkflowPatterns> | null> => {\n if (patternCache.has(filePath)) {\n return patternCache.get(filePath) ?? null;\n }\n const source = await getSource(filePath);\n if (source === null) {\n patternCache.set(filePath, null);\n return null;\n }\n const patterns = detectWorkflowPatterns(source);\n patternCache.set(filePath, patterns);\n return patterns;\n };\n\n while (queuedFiles.length > 0) {\n const currentFile = queuedFiles.pop();\n if (!currentFile || visitedFiles.has(currentFile)) {\n continue;\n }\n visitedFiles.add(currentFile);\n\n const currentSource = await getSource(currentFile);\n if (currentSource === null) {\n continue;\n }\n\n const importSpecifiers = this.extractImportSpecifiers(currentSource);\n for (const specifier of importSpecifiers) {\n const resolvedImportPath =\n await this.resolveTransitiveStepImportTargetPath(\n currentFile,\n specifier\n );\n if (!resolvedImportPath) {\n continue;\n }\n\n if (!visitedFiles.has(resolvedImportPath)) {\n queuedFiles.push(resolvedImportPath);\n }\n\n const importPatterns = await getPatterns(resolvedImportPath);\n if (importPatterns?.hasUseStep) {\n discoveredStepFiles.add(resolvedImportPath);\n }\n }\n }\n\n return Array.from(discoveredStepFiles).sort();\n }\n\n private async collectTransitiveSerdeFiles({\n entryFiles,\n serdeFiles,\n }: {\n entryFiles: string[];\n serdeFiles: string[];\n }): Promise<string[]> {\n const normalizedEntryFiles = Array.from(\n new Set(\n entryFiles.map((entryFile) =>\n this.normalizeDiscoveredFilePath(entryFile)\n )\n )\n ).sort();\n const normalizedSerdeSeedFiles = Array.from(\n new Set(\n serdeFiles.map((serdeFile) =>\n this.normalizeDiscoveredFilePath(serdeFile)\n )\n )\n ).sort();\n // Intentionally re-validate serde seeds against source patterns.\n // This keeps previously discovered/manual seed entries from sticking when\n // files no longer match serde patterns.\n const discoveredSerdeFiles = new Set<string>();\n const queuedFiles = Array.from(\n new Set([...normalizedEntryFiles, ...normalizedSerdeSeedFiles])\n );\n const visitedFiles = new Set<string>();\n const sourceCache = new Map<string, string | null>();\n const patternCache = new Map<\n string,\n ReturnType<typeof detectWorkflowPatterns> | null\n >();\n\n const getSource = async (filePath: string): Promise<string | null> => {\n if (sourceCache.has(filePath)) {\n return sourceCache.get(filePath) ?? null;\n }\n try {\n const source = await readFile(filePath, 'utf-8');\n sourceCache.set(filePath, source);\n return source;\n } catch {\n sourceCache.set(filePath, null);\n return null;\n }\n };\n\n const getPatterns = async (\n filePath: string\n ): Promise<ReturnType<typeof detectWorkflowPatterns> | null> => {\n if (patternCache.has(filePath)) {\n return patternCache.get(filePath) ?? null;\n }\n const source = await getSource(filePath);\n if (source === null) {\n patternCache.set(filePath, null);\n return null;\n }\n const patterns = detectWorkflowPatterns(source);\n patternCache.set(filePath, patterns);\n return patterns;\n };\n\n for (const serdeSeedFile of normalizedSerdeSeedFiles) {\n const seedPatterns = await getPatterns(serdeSeedFile);\n if (seedPatterns?.hasSerde) {\n discoveredSerdeFiles.add(serdeSeedFile);\n }\n }\n\n while (queuedFiles.length > 0) {\n const currentFile = queuedFiles.pop();\n if (!currentFile || visitedFiles.has(currentFile)) {\n continue;\n }\n visitedFiles.add(currentFile);\n\n const currentSource = await getSource(currentFile);\n if (currentSource === null) {\n continue;\n }\n\n const relativeImportSpecifiers =\n this.extractRelativeImportSpecifiers(currentSource);\n for (const specifier of relativeImportSpecifiers) {\n const resolvedImportPath =\n await this.resolveTransitiveStepImportTargetPath(\n currentFile,\n specifier\n );\n if (!resolvedImportPath) {\n continue;\n }\n\n if (!visitedFiles.has(resolvedImportPath)) {\n queuedFiles.push(resolvedImportPath);\n }\n\n const importPatterns = await getPatterns(resolvedImportPath);\n if (importPatterns?.hasSerde) {\n discoveredSerdeFiles.add(resolvedImportPath);\n }\n }\n }\n\n // AST-level verification: run SWC detect mode on regex-matched candidates\n // to confirm they actually define serde classes. This prevents SDK internal\n // files (which match serde regex patterns but define no classes) from being\n // bundled into the workflow sandbox.\n const projectRoot = this.config.projectRoot || this.config.workingDir;\n const verifiedSerdeFiles: string[] = [];\n await Promise.all(\n Array.from(discoveredSerdeFiles).map(async (filePath) => {\n const source = await getSource(filePath);\n if (!source) return;\n try {\n const relativeFilename =\n await this.getRelativeFilenameForSwc(filePath);\n const { workflowManifest } = await applySwcTransform(\n relativeFilename,\n source,\n 'detect',\n filePath,\n projectRoot\n );\n // Only include files that actually define serde classes\n const hasClasses =\n workflowManifest.classes &&\n Object.values(workflowManifest.classes).some(\n (entries) => Object.keys(entries).length > 0\n );\n if (hasClasses) {\n verifiedSerdeFiles.push(filePath);\n }\n } catch {\n // If detect fails, include the file to be safe\n verifiedSerdeFiles.push(filePath);\n }\n })\n );\n\n return verifiedSerdeFiles.sort();\n }\n\n private async buildWebhookRoute({\n workflowGeneratedDir,\n routeFileName = 'route.js',\n }: {\n workflowGeneratedDir: string;\n routeFileName?: string;\n }): Promise<void> {\n const webhookRouteFile = join(\n workflowGeneratedDir,\n `webhook/[token]/${routeFileName}`\n );\n await this.createWebhookBundle({\n outfile: webhookRouteFile,\n bundle: false, // Next.js doesn't need bundling\n });\n }\n\n private async findAppDirectory(): Promise<string> {\n const appDir = resolve(this.config.workingDir, 'app');\n const srcAppDir = resolve(this.config.workingDir, 'src/app');\n const pagesDir = resolve(this.config.workingDir, 'pages');\n const srcPagesDir = resolve(this.config.workingDir, 'src/pages');\n\n // Helper to check if a path exists and is a directory\n const isDirectory = async (path: string): Promise<boolean> => {\n try {\n await access(path, constants.F_OK);\n const stats = await stat(path);\n if (!stats.isDirectory()) {\n throw new Error(`Path exists but is not a directory: ${path}`);\n }\n return true;\n } catch (e) {\n if (e instanceof Error && e.message.includes('not a directory')) {\n throw e;\n }\n return false;\n }\n };\n\n // Check if app directory exists\n if (await isDirectory(appDir)) {\n return appDir;\n }\n\n // Check if src/app directory exists\n if (await isDirectory(srcAppDir)) {\n return srcAppDir;\n }\n\n // If no app directory exists, check for pages directory and create app next to it\n if (await isDirectory(pagesDir)) {\n // Create app directory next to pages directory\n await mkdir(appDir, { recursive: true });\n return appDir;\n }\n\n if (await isDirectory(srcPagesDir)) {\n // Create src/app directory next to src/pages directory\n await mkdir(srcAppDir, { recursive: true });\n return srcAppDir;\n }\n\n throw new Error(\n 'Could not find Next.js app or pages directory. Expected one of: \"app\", \"src/app\", \"pages\", or \"src/pages\" to exist.'\n );\n }\n }\n\n CachedNextBuilderDeferred = NextDeferredBuilder;\n return NextDeferredBuilder;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAWA,wBAAsB,mBAAmB,iBA0fxC"}
|