next 15.4.2-canary.51 → 15.4.2-canary.53

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.

Potentially problematic release.


This version of next might be problematic. Click here for more details.

Files changed (43) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/swc/index.js +1 -1
  4. package/dist/build/webpack-config.js +2 -2
  5. package/dist/client/app-bootstrap.js +1 -1
  6. package/dist/client/index.js +1 -1
  7. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
  8. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
  9. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
  10. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
  11. package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
  12. package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
  13. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  14. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  15. package/dist/esm/build/index.js +2 -2
  16. package/dist/esm/build/swc/index.js +1 -1
  17. package/dist/esm/build/webpack-config.js +2 -2
  18. package/dist/esm/client/app-bootstrap.js +1 -1
  19. package/dist/esm/client/index.js +1 -1
  20. package/dist/esm/server/dev/hot-reloader-turbopack.js +3 -2
  21. package/dist/esm/server/dev/hot-reloader-turbopack.js.map +1 -1
  22. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  23. package/dist/esm/server/lib/app-info-log.js +1 -1
  24. package/dist/esm/server/lib/router-utils/route-types-utils.js +10 -10
  25. package/dist/esm/server/lib/router-utils/route-types-utils.js.map +1 -1
  26. package/dist/esm/server/lib/router-utils/typegen.js +87 -33
  27. package/dist/esm/server/lib/router-utils/typegen.js.map +1 -1
  28. package/dist/esm/server/lib/start-server.js +1 -1
  29. package/dist/esm/shared/lib/canary-only.js +1 -1
  30. package/dist/server/dev/hot-reloader-turbopack.js +3 -2
  31. package/dist/server/dev/hot-reloader-turbopack.js.map +1 -1
  32. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  33. package/dist/server/lib/app-info-log.js +1 -1
  34. package/dist/server/lib/router-utils/route-types-utils.js +10 -10
  35. package/dist/server/lib/router-utils/route-types-utils.js.map +1 -1
  36. package/dist/server/lib/router-utils/typegen.js +87 -33
  37. package/dist/server/lib/router-utils/typegen.js.map +1 -1
  38. package/dist/server/lib/start-server.js +1 -1
  39. package/dist/shared/lib/canary-only.js +1 -1
  40. package/dist/telemetry/anonymous-meta.js +1 -1
  41. package/dist/telemetry/events/session-stopped.js +2 -2
  42. package/dist/telemetry/events/version.js +2 -2
  43. package/package.json +15 -15
@@ -299,7 +299,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
299
299
  const nextBuildSpan = trace('next-build', undefined, {
300
300
  buildMode: experimentalBuildMode,
301
301
  isTurboBuild: String(isTurbopack),
302
- version: "15.4.2-canary.51"
302
+ version: "15.4.2-canary.53"
303
303
  });
304
304
  NextBuildContext.nextBuildSpan = nextBuildSpan;
305
305
  NextBuildContext.dir = dir;
@@ -754,7 +754,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
754
754
  // Files outside of the distDir can be "type": "module"
755
755
  await writeFileUtf8(path.join(distDir, 'package.json'), '{"type": "commonjs"}');
756
756
  // These are written to distDir, so they need to come after creating and cleaning distDr.
757
- await recordFrameworkVersion("15.4.2-canary.51");
757
+ await recordFrameworkVersion("15.4.2-canary.53");
758
758
  await updateBuildDiagnostics({
759
759
  buildStage: 'start'
760
760
  });
@@ -11,7 +11,7 @@ import { isDeepStrictEqual } from 'util';
11
11
  import { getDefineEnv } from '../define-env';
12
12
  import { getReactCompilerLoader } from '../get-babel-loader-config';
13
13
  import { throwTurbopackInternalError } from '../../shared/lib/turbopack/internal-error';
14
- const nextVersion = "15.4.2-canary.51";
14
+ const nextVersion = "15.4.2-canary.53";
15
15
  const ArchName = arch();
16
16
  const PlatformName = platform();
17
17
  function infoLog(...args) {
@@ -1608,7 +1608,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1608
1608
  isClient && new CopyFilePlugin({
1609
1609
  // file path to build output of `@next/polyfill-nomodule`
1610
1610
  filePath: require.resolve('./polyfills/polyfill-nomodule'),
1611
- cacheKey: "15.4.2-canary.51",
1611
+ cacheKey: "15.4.2-canary.53",
1612
1612
  name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
1613
1613
  minimize: false,
1614
1614
  info: {
@@ -1787,7 +1787,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1787
1787
  // - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
1788
1788
  // - Next.js version
1789
1789
  // - next.config.js keys that affect compilation
1790
- version: `${__dirname}|${"15.4.2-canary.51"}|${configVars}`,
1790
+ version: `${__dirname}|${"15.4.2-canary.53"}|${configVars}`,
1791
1791
  cacheDirectory: path.join(distDir, 'cache', 'webpack'),
1792
1792
  // For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
1793
1793
  // So we disable compression here and allow the build runner to take care of compressing the cache as a whole.
@@ -4,7 +4,7 @@
4
4
  * - Polyfills
5
5
  * - next/script with `beforeInteractive` strategy
6
6
  */ import { setAttributesFromProps } from './set-attributes-from-props';
7
- const version = "15.4.2-canary.51";
7
+ const version = "15.4.2-canary.53";
8
8
  window.next = {
9
9
  version,
10
10
  appDir: true
@@ -26,7 +26,7 @@ import { SearchParamsContext, PathParamsContext } from '../shared/lib/hooks-clie
26
26
  import { onRecoverableError } from './react-client-callbacks/on-recoverable-error';
27
27
  import tracer from './tracing/tracer';
28
28
  import { isNextRouterError } from './components/is-next-router-error';
29
- export const version = "15.4.2-canary.51";
29
+ export const version = "15.4.2-canary.53";
30
30
  export let router;
31
31
  export const emitter = mitt();
32
32
  const looseToArray = (input)=>[].slice.call(input);
@@ -89,7 +89,7 @@ export async function createHotReloaderTurbopack(opts, serverFields, distDir, re
89
89
  }
90
90
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
91
91
  const hotReloaderSpan = trace('hot-reloader', undefined, {
92
- version: "15.4.2-canary.51"
92
+ version: "15.4.2-canary.53"
93
93
  });
94
94
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
95
95
  // of the current `next dev` invocation.
@@ -144,7 +144,8 @@ export async function createHotReloaderTurbopack(opts, serverFields, distDir, re
144
144
  });
145
145
  backgroundLogCompilationEvents(project, {
146
146
  eventTypes: [
147
- 'StartupCacheInvalidationEvent'
147
+ 'StartupCacheInvalidationEvent',
148
+ 'TimingEvent'
148
149
  ]
149
150
  });
150
151
  setBundlerFindSourceMapImplementation(getSourceMapFromTurbopack.bind(null, project, projectPath));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/server/dev/hot-reloader-turbopack.ts"],"sourcesContent":["import type { Socket } from 'net'\nimport { mkdir, writeFile } from 'fs/promises'\nimport { join, extname, relative } from 'path'\nimport { pathToFileURL } from 'url'\n\nimport ws from 'next/dist/compiled/ws'\n\nimport type { OutputState } from '../../build/output/store'\nimport { store as consoleStore } from '../../build/output/store'\nimport type {\n CompilationError,\n HMR_ACTION_TYPES,\n NextJsHotReloaderInterface,\n ReloadPageAction,\n SyncAction,\n TurbopackConnectedAction,\n} from './hot-reloader-types'\nimport { HMR_ACTIONS_SENT_TO_BROWSER } from './hot-reloader-types'\nimport type {\n Update as TurbopackUpdate,\n Endpoint,\n WrittenEndpoint,\n TurbopackResult,\n Project,\n Entrypoints,\n} from '../../build/swc/types'\nimport { createDefineEnv } from '../../build/swc'\nimport * as Log from '../../build/output/log'\nimport {\n getVersionInfo,\n matchNextPageBundleRequest,\n} from './hot-reloader-webpack'\nimport { BLOCKED_PAGES } from '../../shared/lib/constants'\nimport {\n getOverlayMiddleware,\n getSourceMapMiddleware,\n} from './middleware-turbopack'\nimport { PageNotFoundError } from '../../shared/lib/utils'\nimport { debounce } from '../utils'\nimport { deleteCache } from './require-cache'\nimport {\n clearAllModuleContexts,\n clearModuleContext,\n} from '../lib/render-server'\nimport { denormalizePagePath } from '../../shared/lib/page-path/denormalize-page-path'\nimport { trace } from '../../trace'\nimport {\n AssetMapper,\n type ChangeSubscriptions,\n type ClientState,\n handleEntrypoints,\n handlePagesErrorRoute,\n handleRouteType,\n hasEntrypointForKey,\n msToNs,\n type ReadyIds,\n type SendHmr,\n type StartBuilding,\n processTopLevelIssues,\n printNonFatalIssue,\n normalizedPageToTurbopackStructureRoute,\n} from './turbopack-utils'\nimport {\n propagateServerField,\n type ServerFields,\n type SetupOpts,\n} from '../lib/router-utils/setup-dev-bundler'\nimport { TurbopackManifestLoader } from '../../shared/lib/turbopack/manifest-loader'\nimport { findPagePathData } from './on-demand-entry-handler'\nimport type { RouteDefinition } from '../route-definitions/route-definition'\nimport {\n type EntryKey,\n getEntryKey,\n splitEntryKey,\n} from '../../shared/lib/turbopack/entry-key'\nimport { FAST_REFRESH_RUNTIME_RELOAD } from './messages'\nimport { generateEncryptionKeyBase64 } from '../app-render/encryption-utils-server'\nimport { isAppPageRouteDefinition } from '../route-definitions/app-page-route-definition'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport type { ModernSourceMapPayload } from '../lib/source-maps'\nimport { getNodeDebugType } from '../lib/utils'\nimport { isMetadataRouteFile } from '../../lib/metadata/is-metadata-route'\nimport { setBundlerFindSourceMapImplementation } from '../patch-error-inspect'\nimport { getNextErrorFeedbackMiddleware } from '../../next-devtools/server/get-next-error-feedback-middleware'\nimport {\n formatIssue,\n getTurbopackJsConfig,\n isPersistentCachingEnabled,\n isWellKnownError,\n processIssues,\n renderStyledStringToErrorAnsi,\n type EntryIssuesMap,\n type TopLevelIssuesMap,\n} from '../../shared/lib/turbopack/utils'\nimport { getDevOverlayFontMiddleware } from '../../next-devtools/server/font/get-dev-overlay-font-middleware'\nimport { devIndicatorServerState } from './dev-indicator-server-state'\nimport { getDisableDevIndicatorMiddleware } from '../../next-devtools/server/dev-indicator-middleware'\nimport { getRestartDevServerMiddleware } from '../../next-devtools/server/restart-dev-server-middleware'\nimport { backgroundLogCompilationEvents } from '../../shared/lib/turbopack/compilation-events'\nimport { getSupportedBrowsers } from '../../build/utils'\nimport { receiveBrowserLogsTurbopack } from './browser-logs/receive-logs'\nimport { normalizePath } from '../../lib/normalize-path'\nimport {\n devToolsConfigMiddleware,\n getDevToolsConfig,\n} from '../../next-devtools/server/devtools-config-middleware'\n\nconst wsServer = new ws.Server({ noServer: true })\nconst isTestMode = !!(\n process.env.NEXT_TEST_MODE ||\n process.env.__NEXT_TEST_MODE ||\n process.env.DEBUG\n)\n\nconst sessionId = Math.floor(Number.MAX_SAFE_INTEGER * Math.random())\n\ndeclare const __next__clear_chunk_cache__: (() => void) | null | undefined\n\n/**\n * Replaces turbopack:///[project] with the specified project in the `source` field.\n */\nfunction rewriteTurbopackSources(\n projectRoot: string,\n sourceMap: ModernSourceMapPayload\n): void {\n if ('sections' in sourceMap) {\n for (const section of sourceMap.sections) {\n rewriteTurbopackSources(projectRoot, section.map)\n }\n } else {\n for (let i = 0; i < sourceMap.sources.length; i++) {\n sourceMap.sources[i] = pathToFileURL(\n join(\n projectRoot,\n sourceMap.sources[i].replace(/turbopack:\\/\\/\\/\\[project\\]/, '')\n )\n ).toString()\n }\n }\n}\n\nfunction getSourceMapFromTurbopack(\n project: Project,\n projectRoot: string,\n sourceURL: string\n): ModernSourceMapPayload | undefined {\n let sourceMapJson: string | null = null\n\n try {\n sourceMapJson = project.getSourceMapSync(sourceURL)\n } catch (err) {}\n\n if (sourceMapJson === null) {\n return undefined\n } else {\n const payload: ModernSourceMapPayload = JSON.parse(sourceMapJson)\n // The sourcemap from Turbopack is not yet written to disk so its `sources`\n // are not absolute paths yet. We need to rewrite them to be absolute paths.\n rewriteTurbopackSources(projectRoot, payload)\n return payload\n }\n}\n\nexport async function createHotReloaderTurbopack(\n opts: SetupOpts & { isSrcDir: boolean },\n serverFields: ServerFields,\n distDir: string,\n resetFetch: () => void\n): Promise<NextJsHotReloaderInterface> {\n const dev = true\n const buildId = 'development'\n const { nextConfig, dir: projectPath } = opts\n\n const { loadBindings } =\n require('../../build/swc') as typeof import('../../build/swc')\n\n let bindings = await loadBindings()\n\n // For the debugging purpose, check if createNext or equivalent next instance setup in test cases\n // works correctly. Normally `run-test` hides output so only will be visible when `--debug` flag is used.\n if (isTestMode) {\n ;(require('console') as typeof import('console')).log(\n 'Creating turbopack project',\n {\n dir: projectPath,\n testMode: isTestMode,\n }\n )\n }\n\n const hasRewrites =\n opts.fsChecker.rewrites.afterFiles.length > 0 ||\n opts.fsChecker.rewrites.beforeFiles.length > 0 ||\n opts.fsChecker.rewrites.fallback.length > 0\n\n const hotReloaderSpan = trace('hot-reloader', undefined, {\n version: process.env.__NEXT_VERSION as string,\n })\n // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing\n // of the current `next dev` invocation.\n hotReloaderSpan.stop()\n\n const encryptionKey = await generateEncryptionKeyBase64({\n isBuild: false,\n distDir,\n })\n\n // TODO: Implement\n let clientRouterFilters: any\n if (nextConfig.experimental.clientRouterFilter) {\n // TODO this need to be set correctly for persistent caching to work\n }\n\n const supportedBrowsers = getSupportedBrowsers(projectPath, dev)\n const currentNodeJsVersion = process.versions.node\n\n const rootPath =\n opts.nextConfig.turbopack?.root ||\n opts.nextConfig.outputFileTracingRoot ||\n projectPath\n const project = await bindings.turbo.createProject(\n {\n rootPath,\n projectPath: normalizePath(relative(rootPath, projectPath) || '.'),\n distDir,\n nextConfig: opts.nextConfig,\n jsConfig: await getTurbopackJsConfig(projectPath, nextConfig),\n watch: {\n enable: dev,\n pollIntervalMs: nextConfig.watchOptions?.pollIntervalMs,\n },\n dev,\n env: process.env as Record<string, string>,\n defineEnv: createDefineEnv({\n isTurbopack: true,\n clientRouterFilters,\n config: nextConfig,\n dev,\n distDir,\n projectPath,\n fetchCacheKeyPrefix: opts.nextConfig.experimental.fetchCacheKeyPrefix,\n hasRewrites,\n // TODO: Implement\n middlewareMatchers: undefined,\n rewrites: opts.fsChecker.rewrites,\n }),\n buildId,\n encryptionKey,\n previewProps: opts.fsChecker.prerenderManifest.preview,\n browserslistQuery: supportedBrowsers.join(', '),\n noMangling: false,\n currentNodeJsVersion,\n },\n {\n persistentCaching: isPersistentCachingEnabled(opts.nextConfig),\n memoryLimit: opts.nextConfig.experimental?.turbopackMemoryLimit,\n isShortSession: false,\n }\n )\n backgroundLogCompilationEvents(project, {\n eventTypes: ['StartupCacheInvalidationEvent'],\n })\n setBundlerFindSourceMapImplementation(\n getSourceMapFromTurbopack.bind(null, project, projectPath)\n )\n opts.onDevServerCleanup?.(async () => {\n setBundlerFindSourceMapImplementation(() => undefined)\n await project.onExit()\n })\n const entrypointsSubscription = project.entrypointsSubscribe()\n\n const currentWrittenEntrypoints: Map<EntryKey, WrittenEndpoint> = new Map()\n const currentEntrypoints: Entrypoints = {\n global: {\n app: undefined,\n document: undefined,\n error: undefined,\n\n middleware: undefined,\n instrumentation: undefined,\n },\n\n page: new Map(),\n app: new Map(),\n }\n\n const currentTopLevelIssues: TopLevelIssuesMap = new Map()\n const currentEntryIssues: EntryIssuesMap = new Map()\n\n const manifestLoader = new TurbopackManifestLoader({\n buildId,\n distDir,\n encryptionKey,\n })\n\n // Dev specific\n const changeSubscriptions: ChangeSubscriptions = new Map()\n const serverPathState = new Map<string, string>()\n const readyIds: ReadyIds = new Set()\n let currentEntriesHandlingResolve: ((value?: unknown) => void) | undefined\n let currentEntriesHandling = new Promise(\n (resolve) => (currentEntriesHandlingResolve = resolve)\n )\n\n const assetMapper = new AssetMapper()\n\n function clearRequireCache(\n key: EntryKey,\n writtenEndpoint: WrittenEndpoint,\n {\n force,\n }: {\n // Always clear the cache, don't check if files have changed\n force?: boolean\n } = {}\n ): boolean {\n if (force) {\n for (const { path, contentHash } of writtenEndpoint.serverPaths) {\n serverPathState.set(path, contentHash)\n }\n } else {\n // Figure out if the server files have changed\n let hasChange = false\n for (const { path, contentHash } of writtenEndpoint.serverPaths) {\n // We ignore source maps\n if (path.endsWith('.map')) continue\n const localKey = `${key}:${path}`\n const localHash = serverPathState.get(localKey)\n const globalHash = serverPathState.get(path)\n if (\n (localHash && localHash !== contentHash) ||\n (globalHash && globalHash !== contentHash)\n ) {\n hasChange = true\n serverPathState.set(key, contentHash)\n serverPathState.set(path, contentHash)\n } else {\n if (!localHash) {\n serverPathState.set(key, contentHash)\n }\n if (!globalHash) {\n serverPathState.set(path, contentHash)\n }\n }\n }\n\n if (!hasChange) {\n return false\n }\n }\n\n resetFetch()\n\n // Not available in:\n // - Pages Router (no server-side HMR)\n // - Edge Runtime (uses browser runtime which already disposes chunks individually)\n if (typeof __next__clear_chunk_cache__ === 'function') {\n __next__clear_chunk_cache__()\n }\n\n const serverPaths = writtenEndpoint.serverPaths.map(({ path: p }) =>\n join(distDir, p)\n )\n\n for (const file of serverPaths) {\n clearModuleContext(file)\n deleteCache(file)\n }\n\n return true\n }\n\n const buildingIds = new Set()\n\n const startBuilding: StartBuilding = (id, requestUrl, forceRebuild) => {\n if (!forceRebuild && readyIds.has(id)) {\n return () => {}\n }\n if (buildingIds.size === 0) {\n consoleStore.setState(\n {\n loading: true,\n trigger: id,\n url: requestUrl,\n } as OutputState,\n true\n )\n }\n buildingIds.add(id)\n return function finishBuilding() {\n if (buildingIds.size === 0) {\n return\n }\n readyIds.add(id)\n buildingIds.delete(id)\n if (buildingIds.size === 0) {\n hmrEventHappened = false\n consoleStore.setState(\n {\n loading: false,\n } as OutputState,\n true\n )\n }\n }\n }\n\n let hmrEventHappened = false\n let hmrHash = 0\n\n const clients = new Set<ws>()\n const clientStates = new WeakMap<ws, ClientState>()\n\n function sendToClient(client: ws, payload: HMR_ACTION_TYPES) {\n client.send(JSON.stringify(payload))\n }\n\n function sendEnqueuedMessages() {\n for (const [, issueMap] of currentEntryIssues) {\n if (\n [...issueMap.values()].filter((i) => i.severity !== 'warning').length >\n 0\n ) {\n // During compilation errors we want to delay the HMR events until errors are fixed\n return\n }\n }\n\n for (const client of clients) {\n const state = clientStates.get(client)\n if (!state) {\n continue\n }\n\n for (const [, issueMap] of state.clientIssues) {\n if (\n [...issueMap.values()].filter((i) => i.severity !== 'warning')\n .length > 0\n ) {\n // During compilation errors we want to delay the HMR events until errors are fixed\n return\n }\n }\n\n for (const payload of state.hmrPayloads.values()) {\n sendToClient(client, payload)\n }\n state.hmrPayloads.clear()\n\n if (state.turbopackUpdates.length > 0) {\n sendToClient(client, {\n action: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: state.turbopackUpdates,\n })\n state.turbopackUpdates.length = 0\n }\n }\n }\n const sendEnqueuedMessagesDebounce = debounce(sendEnqueuedMessages, 2)\n\n const sendHmr: SendHmr = (id: string, payload: HMR_ACTION_TYPES) => {\n for (const client of clients) {\n clientStates.get(client)?.hmrPayloads.set(id, payload)\n }\n\n hmrEventHappened = true\n sendEnqueuedMessagesDebounce()\n }\n\n function sendTurbopackMessage(payload: TurbopackUpdate) {\n // TODO(PACK-2049): For some reason we end up emitting hundreds of issues messages on bigger apps,\n // a lot of which are duplicates.\n // They are currently not handled on the client at all, so might as well not send them for now.\n payload.diagnostics = []\n payload.issues = []\n\n for (const client of clients) {\n clientStates.get(client)?.turbopackUpdates.push(payload)\n }\n\n hmrEventHappened = true\n sendEnqueuedMessagesDebounce()\n }\n\n async function subscribeToChanges(\n key: EntryKey,\n includeIssues: boolean,\n endpoint: Endpoint,\n makePayload: (\n change: TurbopackResult,\n hash: string\n ) => Promise<HMR_ACTION_TYPES> | HMR_ACTION_TYPES | void,\n onError?: (\n error: Error\n ) => Promise<HMR_ACTION_TYPES> | HMR_ACTION_TYPES | void\n ) {\n if (changeSubscriptions.has(key)) {\n return\n }\n\n const { side } = splitEntryKey(key)\n\n const changedPromise = endpoint[`${side}Changed`](includeIssues)\n changeSubscriptions.set(key, changedPromise)\n try {\n const changed = await changedPromise\n\n for await (const change of changed) {\n processIssues(currentEntryIssues, key, change, false, true)\n // TODO: Get an actual content hash from Turbopack.\n const payload = await makePayload(change, String(++hmrHash))\n if (payload) {\n sendHmr(key, payload)\n }\n }\n } catch (e) {\n changeSubscriptions.delete(key)\n const payload = await onError?.(e as Error)\n if (payload) {\n sendHmr(key, payload)\n }\n return\n }\n changeSubscriptions.delete(key)\n }\n\n async function unsubscribeFromChanges(key: EntryKey) {\n const subscription = await changeSubscriptions.get(key)\n if (subscription) {\n await subscription.return?.()\n changeSubscriptions.delete(key)\n }\n currentEntryIssues.delete(key)\n }\n\n async function subscribeToHmrEvents(client: ws, id: string) {\n const key = getEntryKey('assets', 'client', id)\n if (!hasEntrypointForKey(currentEntrypoints, key, assetMapper)) {\n // maybe throw an error / force the client to reload?\n return\n }\n\n const state = clientStates.get(client)\n if (!state || state.subscriptions.has(id)) {\n return\n }\n\n const subscription = project!.hmrEvents(id)\n state.subscriptions.set(id, subscription)\n\n // The subscription will always emit once, which is the initial\n // computation. This is not a change, so swallow it.\n try {\n await subscription.next()\n\n for await (const data of subscription) {\n processIssues(state.clientIssues, key, data, false, true)\n if (data.type !== 'issues') {\n sendTurbopackMessage(data)\n }\n }\n } catch (e) {\n // The client might be using an HMR session from a previous server, tell them\n // to fully reload the page to resolve the issue. We can't use\n // `hotReloader.send` since that would force every connected client to\n // reload, only this client is out of date.\n const reloadAction: ReloadPageAction = {\n action: HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE,\n data: `error in HMR event subscription for ${id}: ${e}`,\n }\n sendToClient(client, reloadAction)\n client.close()\n return\n }\n }\n\n function unsubscribeFromHmrEvents(client: ws, id: string) {\n const state = clientStates.get(client)\n if (!state) {\n return\n }\n\n const subscription = state.subscriptions.get(id)\n subscription?.return!()\n\n const key = getEntryKey('assets', 'client', id)\n state.clientIssues.delete(key)\n }\n\n async function handleEntrypointsSubscription() {\n for await (const entrypoints of entrypointsSubscription) {\n if (!currentEntriesHandlingResolve) {\n currentEntriesHandling = new Promise(\n // eslint-disable-next-line no-loop-func\n (resolve) => (currentEntriesHandlingResolve = resolve)\n )\n }\n\n processTopLevelIssues(currentTopLevelIssues, entrypoints)\n\n await handleEntrypoints({\n entrypoints,\n\n currentEntrypoints,\n\n currentEntryIssues,\n manifestLoader,\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n logErrors: true,\n\n dev: {\n assetMapper,\n changeSubscriptions,\n clients,\n clientStates,\n serverFields,\n\n hooks: {\n handleWrittenEndpoint: (id, result, forceDeleteCache) => {\n currentWrittenEntrypoints.set(id, result)\n return clearRequireCache(id, result, { force: forceDeleteCache })\n },\n propagateServerField: propagateServerField.bind(null, opts),\n sendHmr,\n startBuilding,\n subscribeToChanges,\n unsubscribeFromChanges,\n unsubscribeFromHmrEvents,\n },\n },\n })\n\n currentEntriesHandlingResolve!()\n currentEntriesHandlingResolve = undefined\n }\n }\n\n await mkdir(join(distDir, 'server'), { recursive: true })\n await mkdir(join(distDir, 'static', buildId), { recursive: true })\n await writeFile(\n join(distDir, 'package.json'),\n JSON.stringify(\n {\n type: 'commonjs',\n },\n null,\n 2\n )\n )\n\n const middlewares = [\n getOverlayMiddleware({\n project,\n projectPath,\n isSrcDir: opts.isSrcDir,\n }),\n getSourceMapMiddleware(project),\n getNextErrorFeedbackMiddleware(opts.telemetry),\n getDevOverlayFontMiddleware(),\n getDisableDevIndicatorMiddleware(),\n getRestartDevServerMiddleware({\n telemetry: opts.telemetry,\n turbopackProject: project,\n }),\n devToolsConfigMiddleware({\n distDir,\n sendUpdateSignal: (data) => {\n hotReloader.send({\n action: HMR_ACTIONS_SENT_TO_BROWSER.DEVTOOLS_CONFIG,\n data,\n })\n },\n }),\n ]\n\n const versionInfoPromise = getVersionInfo()\n\n let devtoolsFrontendUrl: string | undefined\n const nodeDebugType = getNodeDebugType()\n if (nodeDebugType) {\n const debugPort = process.debugPort\n let debugInfo\n try {\n // It requires to use 127.0.0.1 instead of localhost for server-side fetching.\n const debugInfoList = await fetch(\n `http://127.0.0.1:${debugPort}/json/list`\n ).then((res) => res.json())\n debugInfo = debugInfoList[0]\n } catch {}\n if (debugInfo) {\n devtoolsFrontendUrl = debugInfo.devtoolsFrontendUrl\n }\n }\n\n const hotReloader: NextJsHotReloaderInterface = {\n turbopackProject: project,\n activeWebpackConfigs: undefined,\n serverStats: null,\n edgeServerStats: null,\n async run(req, res, _parsedUrl) {\n // intercept page chunks request and ensure them with turbopack\n if (req.url?.startsWith('/_next/static/chunks/pages/')) {\n const params = matchNextPageBundleRequest(req.url)\n\n if (params) {\n const decodedPagePath = `/${params.path\n .map((param: string) => decodeURIComponent(param))\n .join('/')}`\n\n const denormalizedPagePath = denormalizePagePath(decodedPagePath)\n\n await hotReloader\n .ensurePage({\n page: denormalizedPagePath,\n clientOnly: false,\n definition: undefined,\n url: req.url,\n })\n .catch(console.error)\n }\n }\n\n for (const middleware of middlewares) {\n let calledNext = false\n\n await middleware(req, res, () => {\n calledNext = true\n })\n\n if (!calledNext) {\n return { finished: true }\n }\n }\n\n // Request was not finished.\n return { finished: undefined }\n },\n\n // TODO: Figure out if socket type can match the NextJsHotReloaderInterface\n onHMR(req, socket: Socket, head, onUpgrade) {\n wsServer.handleUpgrade(req, socket, head, (client) => {\n onUpgrade(client)\n const clientIssues: EntryIssuesMap = new Map()\n const subscriptions: Map<string, AsyncIterator<any>> = new Map()\n\n clients.add(client)\n clientStates.set(client, {\n clientIssues,\n hmrPayloads: new Map(),\n turbopackUpdates: [],\n subscriptions,\n })\n\n client.on('close', () => {\n // Remove active subscriptions\n for (const subscription of subscriptions.values()) {\n subscription.return?.()\n }\n clientStates.delete(client)\n clients.delete(client)\n })\n\n client.addEventListener('message', async ({ data }) => {\n const parsedData = JSON.parse(\n typeof data !== 'string' ? data.toString() : data\n )\n\n // Next.js messages\n switch (parsedData.event) {\n case 'span-end': {\n hotReloaderSpan.manualTraceChild(\n parsedData.spanName,\n msToNs(parsedData.startTime),\n msToNs(parsedData.endTime),\n parsedData.attributes\n )\n break\n }\n case 'client-hmr-latency': // { id, startTime, endTime, page, updatedModules, isPageHidden }\n hotReloaderSpan.manualTraceChild(\n parsedData.event,\n msToNs(parsedData.startTime),\n msToNs(parsedData.endTime),\n {\n updatedModules: parsedData.updatedModules,\n page: parsedData.page,\n isPageHidden: parsedData.isPageHidden,\n }\n )\n break\n\n case 'client-error': // { errorCount, clientId }\n case 'client-warning': // { warningCount, clientId }\n case 'client-success': // { clientId }\n case 'server-component-reload-page': // { clientId }\n case 'client-reload-page': // { clientId }\n case 'client-removed-page': // { page }\n case 'client-full-reload': // { stackTrace, hadRuntimeError }\n const { hadRuntimeError, dependencyChain } = parsedData\n if (hadRuntimeError) {\n Log.warn(FAST_REFRESH_RUNTIME_RELOAD)\n }\n if (\n Array.isArray(dependencyChain) &&\n typeof dependencyChain[0] === 'string'\n ) {\n const cleanedModulePath = dependencyChain[0]\n .replace(/^\\[project\\]/, '.')\n .replace(/ \\[.*\\] \\(.*\\)$/, '')\n Log.warn(\n `Fast Refresh had to perform a full reload when ${cleanedModulePath} changed. Read more: https://nextjs.org/docs/messages/fast-refresh-reload`\n )\n }\n break\n case 'client-added-page':\n // TODO\n break\n case 'browser-logs': {\n if (nextConfig.experimental.browserDebugInfoInTerminal) {\n await receiveBrowserLogsTurbopack({\n entries: parsedData.entries,\n router: parsedData.router,\n sourceType: parsedData.sourceType,\n project,\n projectPath,\n distDir,\n config: nextConfig.experimental.browserDebugInfoInTerminal,\n })\n }\n break\n }\n\n default:\n // Might be a Turbopack message...\n if (!parsedData.type) {\n throw new Error(`unrecognized HMR message \"${data}\"`)\n }\n }\n\n // Turbopack messages\n switch (parsedData.type) {\n case 'turbopack-subscribe':\n subscribeToHmrEvents(client, parsedData.path)\n break\n\n case 'turbopack-unsubscribe':\n unsubscribeFromHmrEvents(client, parsedData.path)\n break\n\n default:\n if (!parsedData.event) {\n throw new Error(`unrecognized Turbopack HMR message \"${data}\"`)\n }\n }\n })\n\n const turbopackConnected: TurbopackConnectedAction = {\n action: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n data: { sessionId },\n }\n sendToClient(client, turbopackConnected)\n\n const errors: CompilationError[] = []\n\n for (const entryIssues of currentEntryIssues.values()) {\n for (const issue of entryIssues.values()) {\n if (issue.severity !== 'warning') {\n errors.push({\n message: formatIssue(issue),\n })\n } else {\n printNonFatalIssue(issue)\n }\n }\n }\n\n if (devIndicatorServerState.disabledUntil < Date.now()) {\n devIndicatorServerState.disabledUntil = 0\n }\n\n ;(async function () {\n const versionInfo = await versionInfoPromise\n const devToolsConfig = await getDevToolsConfig(distDir)\n\n const sync: SyncAction = {\n action: HMR_ACTIONS_SENT_TO_BROWSER.SYNC,\n errors,\n warnings: [],\n hash: '',\n versionInfo,\n debug: {\n devtoolsFrontendUrl,\n },\n devIndicator: devIndicatorServerState,\n devToolsConfig,\n }\n\n sendToClient(client, sync)\n })()\n })\n },\n\n send(action) {\n const payload = JSON.stringify(action)\n for (const client of clients) {\n client.send(payload)\n }\n },\n\n setHmrServerError(_error) {\n // Not implemented yet.\n },\n clearHmrServerError() {\n // Not implemented yet.\n },\n async start() {},\n async getCompilationErrors(page) {\n const appEntryKey = getEntryKey('app', 'server', page)\n const pagesEntryKey = getEntryKey('pages', 'server', page)\n\n const topLevelIssues = currentTopLevelIssues.values()\n\n const thisEntryIssues =\n currentEntryIssues.get(appEntryKey) ??\n currentEntryIssues.get(pagesEntryKey)\n\n if (thisEntryIssues !== undefined && thisEntryIssues.size > 0) {\n // If there is an error related to the requesting page we display it instead of the first error\n return [...topLevelIssues, ...thisEntryIssues.values()]\n .map((issue) => {\n const formattedIssue = formatIssue(issue)\n if (issue.severity === 'warning') {\n printNonFatalIssue(issue)\n return null\n } else if (isWellKnownError(issue)) {\n Log.error(formattedIssue)\n }\n\n return new Error(formattedIssue)\n })\n .filter((error) => error !== null)\n }\n\n // Otherwise, return all errors across pages\n const errors = []\n for (const issue of topLevelIssues) {\n if (issue.severity !== 'warning') {\n errors.push(new Error(formatIssue(issue)))\n }\n }\n for (const entryIssues of currentEntryIssues.values()) {\n for (const issue of entryIssues.values()) {\n if (issue.severity !== 'warning') {\n const message = formatIssue(issue)\n errors.push(new Error(message))\n } else {\n printNonFatalIssue(issue)\n }\n }\n }\n return errors\n },\n async invalidate({\n // .env files or tsconfig/jsconfig change\n reloadAfterInvalidation,\n }) {\n if (reloadAfterInvalidation) {\n for (const [key, entrypoint] of currentWrittenEntrypoints) {\n clearRequireCache(key, entrypoint, { force: true })\n }\n\n await clearAllModuleContexts()\n this.send({\n action: HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES,\n hash: String(++hmrHash),\n })\n }\n },\n async buildFallbackError() {\n // Not implemented yet.\n },\n async ensurePage({\n page: inputPage,\n // Unused parameters\n // clientOnly,\n appPaths,\n definition,\n isApp,\n url: requestUrl,\n }) {\n // When there is no route definition this is an internal file not a route the user added.\n // Middleware and instrumentation are handled in turbpack-utils.ts handleEntrypoints instead.\n if (!definition) {\n if (inputPage === '/middleware') return\n if (inputPage === '/src/middleware') return\n if (inputPage === '/instrumentation') return\n if (inputPage === '/src/instrumentation') return\n }\n\n return hotReloaderSpan\n .traceChild('ensure-page', {\n inputPage,\n })\n .traceAsyncFn(async () => {\n if (BLOCKED_PAGES.includes(inputPage) && inputPage !== '/_error') {\n return\n }\n\n await currentEntriesHandling\n\n // TODO We shouldn't look into the filesystem again. This should use the information from entrypoints\n let routeDef: Pick<\n RouteDefinition,\n 'filename' | 'bundlePath' | 'page'\n > =\n definition ??\n (await findPagePathData(\n projectPath,\n inputPage,\n nextConfig.pageExtensions,\n opts.pagesDir,\n opts.appDir,\n !!nextConfig.experimental.globalNotFound\n ))\n\n // If the route is actually an app page route, then we should have access\n // to the app route definition, and therefore, the appPaths from it.\n if (!appPaths && definition && isAppPageRouteDefinition(definition)) {\n appPaths = definition.appPaths\n }\n\n let page = routeDef.page\n if (appPaths) {\n const normalizedPage = normalizeAppPath(page)\n\n // filter out paths that are not exact matches (e.g. catchall)\n const matchingAppPaths = appPaths.filter(\n (path) => normalizeAppPath(path) === normalizedPage\n )\n\n // the last item in the array is the root page, if there are parallel routes\n page = matchingAppPaths[matchingAppPaths.length - 1]\n }\n\n const pathname = definition?.pathname ?? inputPage\n\n if (page === '/_error') {\n let finishBuilding = startBuilding(pathname, requestUrl, false)\n try {\n await handlePagesErrorRoute({\n currentEntryIssues,\n entrypoints: currentEntrypoints,\n manifestLoader,\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n logErrors: true,\n hooks: {\n subscribeToChanges,\n handleWrittenEndpoint: (id, result, forceDeleteCache) => {\n currentWrittenEntrypoints.set(id, result)\n assetMapper.setPathsForKey(id, result.clientPaths)\n return clearRequireCache(id, result, {\n force: forceDeleteCache,\n })\n },\n },\n })\n } finally {\n finishBuilding()\n }\n return\n }\n\n const isInsideAppDir = routeDef.bundlePath.startsWith('app/')\n const isEntryMetadataRouteFile = isMetadataRouteFile(\n routeDef.filename.replace(opts.appDir || '', ''),\n nextConfig.pageExtensions,\n true\n )\n const normalizedAppPage = isEntryMetadataRouteFile\n ? normalizedPageToTurbopackStructureRoute(\n page,\n extname(routeDef.filename)\n )\n : page\n\n const route = isInsideAppDir\n ? currentEntrypoints.app.get(normalizedAppPage)\n : currentEntrypoints.page.get(page)\n\n if (!route) {\n // TODO: why is this entry missing in turbopack?\n if (page === '/middleware') return\n if (page === '/src/middleware') return\n if (page === '/instrumentation') return\n if (page === '/src/instrumentation') return\n\n throw new PageNotFoundError(`route not found ${page}`)\n }\n\n // We don't throw on ensureOpts.isApp === true for page-api\n // since this can happen when app pages make\n // api requests to page API routes.\n if (isApp && route.type === 'page') {\n throw new Error(`mis-matched route type: isApp && page for ${page}`)\n }\n\n const finishBuilding = startBuilding(pathname, requestUrl, false)\n try {\n await handleRouteType({\n dev,\n page,\n pathname,\n route,\n currentEntryIssues,\n entrypoints: currentEntrypoints,\n manifestLoader,\n readyIds,\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n logErrors: true,\n\n hooks: {\n subscribeToChanges,\n handleWrittenEndpoint: (id, result, forceDeleteCache) => {\n currentWrittenEntrypoints.set(id, result)\n assetMapper.setPathsForKey(id, result.clientPaths)\n return clearRequireCache(id, result, {\n force: forceDeleteCache,\n })\n },\n },\n })\n } finally {\n finishBuilding()\n }\n })\n },\n close() {\n for (const wsClient of clients) {\n // it's okay to not cleanly close these websocket connections, this is dev\n wsClient.terminate()\n }\n clients.clear()\n },\n }\n\n handleEntrypointsSubscription().catch((err) => {\n console.error(err)\n process.exit(1)\n })\n\n // Write empty manifests\n await currentEntriesHandling\n await manifestLoader.writeManifests({\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n entrypoints: currentEntrypoints,\n })\n\n async function handleProjectUpdates() {\n for await (const updateMessage of project.updateInfoSubscribe(30)) {\n switch (updateMessage.updateType) {\n case 'start': {\n hotReloader.send({ action: HMR_ACTIONS_SENT_TO_BROWSER.BUILDING })\n break\n }\n case 'end': {\n sendEnqueuedMessages()\n\n function addErrors(\n errorsMap: Map<string, CompilationError>,\n issues: EntryIssuesMap\n ) {\n for (const issueMap of issues.values()) {\n for (const [key, issue] of issueMap) {\n if (issue.severity === 'warning') continue\n if (errorsMap.has(key)) continue\n\n const message = formatIssue(issue)\n\n errorsMap.set(key, {\n message,\n details: issue.detail\n ? renderStyledStringToErrorAnsi(issue.detail)\n : undefined,\n })\n }\n }\n }\n\n const errors = new Map<string, CompilationError>()\n addErrors(errors, currentEntryIssues)\n\n for (const client of clients) {\n const state = clientStates.get(client)\n if (!state) {\n continue\n }\n\n const clientErrors = new Map(errors)\n addErrors(clientErrors, state.clientIssues)\n\n sendToClient(client, {\n action: HMR_ACTIONS_SENT_TO_BROWSER.BUILT,\n hash: String(++hmrHash),\n errors: [...clientErrors.values()],\n warnings: [],\n })\n }\n\n if (hmrEventHappened) {\n const time = updateMessage.value.duration\n const timeMessage =\n time > 2000 ? `${Math.round(time / 100) / 10}s` : `${time}ms`\n Log.event(`Compiled in ${timeMessage}`)\n hmrEventHappened = false\n }\n break\n }\n default:\n }\n }\n }\n\n handleProjectUpdates().catch((err) => {\n console.error(err)\n process.exit(1)\n })\n\n return hotReloader\n}\n"],"names":["mkdir","writeFile","join","extname","relative","pathToFileURL","ws","store","consoleStore","HMR_ACTIONS_SENT_TO_BROWSER","createDefineEnv","Log","getVersionInfo","matchNextPageBundleRequest","BLOCKED_PAGES","getOverlayMiddleware","getSourceMapMiddleware","PageNotFoundError","debounce","deleteCache","clearAllModuleContexts","clearModuleContext","denormalizePagePath","trace","AssetMapper","handleEntrypoints","handlePagesErrorRoute","handleRouteType","hasEntrypointForKey","msToNs","processTopLevelIssues","printNonFatalIssue","normalizedPageToTurbopackStructureRoute","propagateServerField","TurbopackManifestLoader","findPagePathData","getEntryKey","splitEntryKey","FAST_REFRESH_RUNTIME_RELOAD","generateEncryptionKeyBase64","isAppPageRouteDefinition","normalizeAppPath","getNodeDebugType","isMetadataRouteFile","setBundlerFindSourceMapImplementation","getNextErrorFeedbackMiddleware","formatIssue","getTurbopackJsConfig","isPersistentCachingEnabled","isWellKnownError","processIssues","renderStyledStringToErrorAnsi","getDevOverlayFontMiddleware","devIndicatorServerState","getDisableDevIndicatorMiddleware","getRestartDevServerMiddleware","backgroundLogCompilationEvents","getSupportedBrowsers","receiveBrowserLogsTurbopack","normalizePath","devToolsConfigMiddleware","getDevToolsConfig","wsServer","Server","noServer","isTestMode","process","env","NEXT_TEST_MODE","__NEXT_TEST_MODE","DEBUG","sessionId","Math","floor","Number","MAX_SAFE_INTEGER","random","rewriteTurbopackSources","projectRoot","sourceMap","section","sections","map","i","sources","length","replace","toString","getSourceMapFromTurbopack","project","sourceURL","sourceMapJson","getSourceMapSync","err","undefined","payload","JSON","parse","createHotReloaderTurbopack","opts","serverFields","distDir","resetFetch","nextConfig","dev","buildId","dir","projectPath","loadBindings","require","bindings","log","testMode","hasRewrites","fsChecker","rewrites","afterFiles","beforeFiles","fallback","hotReloaderSpan","version","__NEXT_VERSION","stop","encryptionKey","isBuild","clientRouterFilters","experimental","clientRouterFilter","supportedBrowsers","currentNodeJsVersion","versions","node","rootPath","turbopack","root","outputFileTracingRoot","turbo","createProject","jsConfig","watch","enable","pollIntervalMs","watchOptions","defineEnv","isTurbopack","config","fetchCacheKeyPrefix","middlewareMatchers","previewProps","prerenderManifest","preview","browserslistQuery","noMangling","persistentCaching","memoryLimit","turbopackMemoryLimit","isShortSession","eventTypes","bind","onDevServerCleanup","onExit","entrypointsSubscription","entrypointsSubscribe","currentWrittenEntrypoints","Map","currentEntrypoints","global","app","document","error","middleware","instrumentation","page","currentTopLevelIssues","currentEntryIssues","manifestLoader","changeSubscriptions","serverPathState","readyIds","Set","currentEntriesHandlingResolve","currentEntriesHandling","Promise","resolve","assetMapper","clearRequireCache","key","writtenEndpoint","force","path","contentHash","serverPaths","set","hasChange","endsWith","localKey","localHash","get","globalHash","__next__clear_chunk_cache__","p","file","buildingIds","startBuilding","id","requestUrl","forceRebuild","has","size","setState","loading","trigger","url","add","finishBuilding","delete","hmrEventHappened","hmrHash","clients","clientStates","WeakMap","sendToClient","client","send","stringify","sendEnqueuedMessages","issueMap","values","filter","severity","state","clientIssues","hmrPayloads","clear","turbopackUpdates","action","TURBOPACK_MESSAGE","data","sendEnqueuedMessagesDebounce","sendHmr","sendTurbopackMessage","diagnostics","issues","push","subscribeToChanges","includeIssues","endpoint","makePayload","onError","side","changedPromise","changed","change","String","e","unsubscribeFromChanges","subscription","return","subscribeToHmrEvents","subscriptions","hmrEvents","next","type","reloadAction","RELOAD_PAGE","close","unsubscribeFromHmrEvents","handleEntrypointsSubscription","entrypoints","devRewrites","productionRewrites","logErrors","hooks","handleWrittenEndpoint","result","forceDeleteCache","recursive","middlewares","isSrcDir","telemetry","turbopackProject","sendUpdateSignal","hotReloader","DEVTOOLS_CONFIG","versionInfoPromise","devtoolsFrontendUrl","nodeDebugType","debugPort","debugInfo","debugInfoList","fetch","then","res","json","activeWebpackConfigs","serverStats","edgeServerStats","run","req","_parsedUrl","startsWith","params","decodedPagePath","param","decodeURIComponent","denormalizedPagePath","ensurePage","clientOnly","definition","catch","console","calledNext","finished","onHMR","socket","head","onUpgrade","handleUpgrade","on","addEventListener","parsedData","event","manualTraceChild","spanName","startTime","endTime","attributes","updatedModules","isPageHidden","hadRuntimeError","dependencyChain","warn","Array","isArray","cleanedModulePath","browserDebugInfoInTerminal","entries","router","sourceType","Error","turbopackConnected","TURBOPACK_CONNECTED","errors","entryIssues","issue","message","disabledUntil","Date","now","versionInfo","devToolsConfig","sync","SYNC","warnings","hash","debug","devIndicator","setHmrServerError","_error","clearHmrServerError","start","getCompilationErrors","appEntryKey","pagesEntryKey","topLevelIssues","thisEntryIssues","formattedIssue","invalidate","reloadAfterInvalidation","entrypoint","SERVER_COMPONENT_CHANGES","buildFallbackError","inputPage","appPaths","isApp","traceChild","traceAsyncFn","includes","routeDef","pageExtensions","pagesDir","appDir","globalNotFound","normalizedPage","matchingAppPaths","pathname","setPathsForKey","clientPaths","isInsideAppDir","bundlePath","isEntryMetadataRouteFile","filename","normalizedAppPage","route","wsClient","terminate","exit","writeManifests","handleProjectUpdates","updateMessage","updateInfoSubscribe","updateType","BUILDING","addErrors","errorsMap","details","detail","clientErrors","BUILT","time","value","duration","timeMessage","round"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../src/server/dev/hot-reloader-turbopack.ts"],"sourcesContent":["import type { Socket } from 'net'\nimport { mkdir, writeFile } from 'fs/promises'\nimport { join, extname, relative } from 'path'\nimport { pathToFileURL } from 'url'\n\nimport ws from 'next/dist/compiled/ws'\n\nimport type { OutputState } from '../../build/output/store'\nimport { store as consoleStore } from '../../build/output/store'\nimport type {\n CompilationError,\n HMR_ACTION_TYPES,\n NextJsHotReloaderInterface,\n ReloadPageAction,\n SyncAction,\n TurbopackConnectedAction,\n} from './hot-reloader-types'\nimport { HMR_ACTIONS_SENT_TO_BROWSER } from './hot-reloader-types'\nimport type {\n Update as TurbopackUpdate,\n Endpoint,\n WrittenEndpoint,\n TurbopackResult,\n Project,\n Entrypoints,\n} from '../../build/swc/types'\nimport { createDefineEnv } from '../../build/swc'\nimport * as Log from '../../build/output/log'\nimport {\n getVersionInfo,\n matchNextPageBundleRequest,\n} from './hot-reloader-webpack'\nimport { BLOCKED_PAGES } from '../../shared/lib/constants'\nimport {\n getOverlayMiddleware,\n getSourceMapMiddleware,\n} from './middleware-turbopack'\nimport { PageNotFoundError } from '../../shared/lib/utils'\nimport { debounce } from '../utils'\nimport { deleteCache } from './require-cache'\nimport {\n clearAllModuleContexts,\n clearModuleContext,\n} from '../lib/render-server'\nimport { denormalizePagePath } from '../../shared/lib/page-path/denormalize-page-path'\nimport { trace } from '../../trace'\nimport {\n AssetMapper,\n type ChangeSubscriptions,\n type ClientState,\n handleEntrypoints,\n handlePagesErrorRoute,\n handleRouteType,\n hasEntrypointForKey,\n msToNs,\n type ReadyIds,\n type SendHmr,\n type StartBuilding,\n processTopLevelIssues,\n printNonFatalIssue,\n normalizedPageToTurbopackStructureRoute,\n} from './turbopack-utils'\nimport {\n propagateServerField,\n type ServerFields,\n type SetupOpts,\n} from '../lib/router-utils/setup-dev-bundler'\nimport { TurbopackManifestLoader } from '../../shared/lib/turbopack/manifest-loader'\nimport { findPagePathData } from './on-demand-entry-handler'\nimport type { RouteDefinition } from '../route-definitions/route-definition'\nimport {\n type EntryKey,\n getEntryKey,\n splitEntryKey,\n} from '../../shared/lib/turbopack/entry-key'\nimport { FAST_REFRESH_RUNTIME_RELOAD } from './messages'\nimport { generateEncryptionKeyBase64 } from '../app-render/encryption-utils-server'\nimport { isAppPageRouteDefinition } from '../route-definitions/app-page-route-definition'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport type { ModernSourceMapPayload } from '../lib/source-maps'\nimport { getNodeDebugType } from '../lib/utils'\nimport { isMetadataRouteFile } from '../../lib/metadata/is-metadata-route'\nimport { setBundlerFindSourceMapImplementation } from '../patch-error-inspect'\nimport { getNextErrorFeedbackMiddleware } from '../../next-devtools/server/get-next-error-feedback-middleware'\nimport {\n formatIssue,\n getTurbopackJsConfig,\n isPersistentCachingEnabled,\n isWellKnownError,\n processIssues,\n renderStyledStringToErrorAnsi,\n type EntryIssuesMap,\n type TopLevelIssuesMap,\n} from '../../shared/lib/turbopack/utils'\nimport { getDevOverlayFontMiddleware } from '../../next-devtools/server/font/get-dev-overlay-font-middleware'\nimport { devIndicatorServerState } from './dev-indicator-server-state'\nimport { getDisableDevIndicatorMiddleware } from '../../next-devtools/server/dev-indicator-middleware'\nimport { getRestartDevServerMiddleware } from '../../next-devtools/server/restart-dev-server-middleware'\nimport { backgroundLogCompilationEvents } from '../../shared/lib/turbopack/compilation-events'\nimport { getSupportedBrowsers } from '../../build/utils'\nimport { receiveBrowserLogsTurbopack } from './browser-logs/receive-logs'\nimport { normalizePath } from '../../lib/normalize-path'\nimport {\n devToolsConfigMiddleware,\n getDevToolsConfig,\n} from '../../next-devtools/server/devtools-config-middleware'\n\nconst wsServer = new ws.Server({ noServer: true })\nconst isTestMode = !!(\n process.env.NEXT_TEST_MODE ||\n process.env.__NEXT_TEST_MODE ||\n process.env.DEBUG\n)\n\nconst sessionId = Math.floor(Number.MAX_SAFE_INTEGER * Math.random())\n\ndeclare const __next__clear_chunk_cache__: (() => void) | null | undefined\n\n/**\n * Replaces turbopack:///[project] with the specified project in the `source` field.\n */\nfunction rewriteTurbopackSources(\n projectRoot: string,\n sourceMap: ModernSourceMapPayload\n): void {\n if ('sections' in sourceMap) {\n for (const section of sourceMap.sections) {\n rewriteTurbopackSources(projectRoot, section.map)\n }\n } else {\n for (let i = 0; i < sourceMap.sources.length; i++) {\n sourceMap.sources[i] = pathToFileURL(\n join(\n projectRoot,\n sourceMap.sources[i].replace(/turbopack:\\/\\/\\/\\[project\\]/, '')\n )\n ).toString()\n }\n }\n}\n\nfunction getSourceMapFromTurbopack(\n project: Project,\n projectRoot: string,\n sourceURL: string\n): ModernSourceMapPayload | undefined {\n let sourceMapJson: string | null = null\n\n try {\n sourceMapJson = project.getSourceMapSync(sourceURL)\n } catch (err) {}\n\n if (sourceMapJson === null) {\n return undefined\n } else {\n const payload: ModernSourceMapPayload = JSON.parse(sourceMapJson)\n // The sourcemap from Turbopack is not yet written to disk so its `sources`\n // are not absolute paths yet. We need to rewrite them to be absolute paths.\n rewriteTurbopackSources(projectRoot, payload)\n return payload\n }\n}\n\nexport async function createHotReloaderTurbopack(\n opts: SetupOpts & { isSrcDir: boolean },\n serverFields: ServerFields,\n distDir: string,\n resetFetch: () => void\n): Promise<NextJsHotReloaderInterface> {\n const dev = true\n const buildId = 'development'\n const { nextConfig, dir: projectPath } = opts\n\n const { loadBindings } =\n require('../../build/swc') as typeof import('../../build/swc')\n\n let bindings = await loadBindings()\n\n // For the debugging purpose, check if createNext or equivalent next instance setup in test cases\n // works correctly. Normally `run-test` hides output so only will be visible when `--debug` flag is used.\n if (isTestMode) {\n ;(require('console') as typeof import('console')).log(\n 'Creating turbopack project',\n {\n dir: projectPath,\n testMode: isTestMode,\n }\n )\n }\n\n const hasRewrites =\n opts.fsChecker.rewrites.afterFiles.length > 0 ||\n opts.fsChecker.rewrites.beforeFiles.length > 0 ||\n opts.fsChecker.rewrites.fallback.length > 0\n\n const hotReloaderSpan = trace('hot-reloader', undefined, {\n version: process.env.__NEXT_VERSION as string,\n })\n // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing\n // of the current `next dev` invocation.\n hotReloaderSpan.stop()\n\n const encryptionKey = await generateEncryptionKeyBase64({\n isBuild: false,\n distDir,\n })\n\n // TODO: Implement\n let clientRouterFilters: any\n if (nextConfig.experimental.clientRouterFilter) {\n // TODO this need to be set correctly for persistent caching to work\n }\n\n const supportedBrowsers = getSupportedBrowsers(projectPath, dev)\n const currentNodeJsVersion = process.versions.node\n\n const rootPath =\n opts.nextConfig.turbopack?.root ||\n opts.nextConfig.outputFileTracingRoot ||\n projectPath\n const project = await bindings.turbo.createProject(\n {\n rootPath,\n projectPath: normalizePath(relative(rootPath, projectPath) || '.'),\n distDir,\n nextConfig: opts.nextConfig,\n jsConfig: await getTurbopackJsConfig(projectPath, nextConfig),\n watch: {\n enable: dev,\n pollIntervalMs: nextConfig.watchOptions?.pollIntervalMs,\n },\n dev,\n env: process.env as Record<string, string>,\n defineEnv: createDefineEnv({\n isTurbopack: true,\n clientRouterFilters,\n config: nextConfig,\n dev,\n distDir,\n projectPath,\n fetchCacheKeyPrefix: opts.nextConfig.experimental.fetchCacheKeyPrefix,\n hasRewrites,\n // TODO: Implement\n middlewareMatchers: undefined,\n rewrites: opts.fsChecker.rewrites,\n }),\n buildId,\n encryptionKey,\n previewProps: opts.fsChecker.prerenderManifest.preview,\n browserslistQuery: supportedBrowsers.join(', '),\n noMangling: false,\n currentNodeJsVersion,\n },\n {\n persistentCaching: isPersistentCachingEnabled(opts.nextConfig),\n memoryLimit: opts.nextConfig.experimental?.turbopackMemoryLimit,\n isShortSession: false,\n }\n )\n backgroundLogCompilationEvents(project, {\n eventTypes: ['StartupCacheInvalidationEvent', 'TimingEvent'],\n })\n setBundlerFindSourceMapImplementation(\n getSourceMapFromTurbopack.bind(null, project, projectPath)\n )\n opts.onDevServerCleanup?.(async () => {\n setBundlerFindSourceMapImplementation(() => undefined)\n await project.onExit()\n })\n const entrypointsSubscription = project.entrypointsSubscribe()\n\n const currentWrittenEntrypoints: Map<EntryKey, WrittenEndpoint> = new Map()\n const currentEntrypoints: Entrypoints = {\n global: {\n app: undefined,\n document: undefined,\n error: undefined,\n\n middleware: undefined,\n instrumentation: undefined,\n },\n\n page: new Map(),\n app: new Map(),\n }\n\n const currentTopLevelIssues: TopLevelIssuesMap = new Map()\n const currentEntryIssues: EntryIssuesMap = new Map()\n\n const manifestLoader = new TurbopackManifestLoader({\n buildId,\n distDir,\n encryptionKey,\n })\n\n // Dev specific\n const changeSubscriptions: ChangeSubscriptions = new Map()\n const serverPathState = new Map<string, string>()\n const readyIds: ReadyIds = new Set()\n let currentEntriesHandlingResolve: ((value?: unknown) => void) | undefined\n let currentEntriesHandling = new Promise(\n (resolve) => (currentEntriesHandlingResolve = resolve)\n )\n\n const assetMapper = new AssetMapper()\n\n function clearRequireCache(\n key: EntryKey,\n writtenEndpoint: WrittenEndpoint,\n {\n force,\n }: {\n // Always clear the cache, don't check if files have changed\n force?: boolean\n } = {}\n ): boolean {\n if (force) {\n for (const { path, contentHash } of writtenEndpoint.serverPaths) {\n serverPathState.set(path, contentHash)\n }\n } else {\n // Figure out if the server files have changed\n let hasChange = false\n for (const { path, contentHash } of writtenEndpoint.serverPaths) {\n // We ignore source maps\n if (path.endsWith('.map')) continue\n const localKey = `${key}:${path}`\n const localHash = serverPathState.get(localKey)\n const globalHash = serverPathState.get(path)\n if (\n (localHash && localHash !== contentHash) ||\n (globalHash && globalHash !== contentHash)\n ) {\n hasChange = true\n serverPathState.set(key, contentHash)\n serverPathState.set(path, contentHash)\n } else {\n if (!localHash) {\n serverPathState.set(key, contentHash)\n }\n if (!globalHash) {\n serverPathState.set(path, contentHash)\n }\n }\n }\n\n if (!hasChange) {\n return false\n }\n }\n\n resetFetch()\n\n // Not available in:\n // - Pages Router (no server-side HMR)\n // - Edge Runtime (uses browser runtime which already disposes chunks individually)\n if (typeof __next__clear_chunk_cache__ === 'function') {\n __next__clear_chunk_cache__()\n }\n\n const serverPaths = writtenEndpoint.serverPaths.map(({ path: p }) =>\n join(distDir, p)\n )\n\n for (const file of serverPaths) {\n clearModuleContext(file)\n deleteCache(file)\n }\n\n return true\n }\n\n const buildingIds = new Set()\n\n const startBuilding: StartBuilding = (id, requestUrl, forceRebuild) => {\n if (!forceRebuild && readyIds.has(id)) {\n return () => {}\n }\n if (buildingIds.size === 0) {\n consoleStore.setState(\n {\n loading: true,\n trigger: id,\n url: requestUrl,\n } as OutputState,\n true\n )\n }\n buildingIds.add(id)\n return function finishBuilding() {\n if (buildingIds.size === 0) {\n return\n }\n readyIds.add(id)\n buildingIds.delete(id)\n if (buildingIds.size === 0) {\n hmrEventHappened = false\n consoleStore.setState(\n {\n loading: false,\n } as OutputState,\n true\n )\n }\n }\n }\n\n let hmrEventHappened = false\n let hmrHash = 0\n\n const clients = new Set<ws>()\n const clientStates = new WeakMap<ws, ClientState>()\n\n function sendToClient(client: ws, payload: HMR_ACTION_TYPES) {\n client.send(JSON.stringify(payload))\n }\n\n function sendEnqueuedMessages() {\n for (const [, issueMap] of currentEntryIssues) {\n if (\n [...issueMap.values()].filter((i) => i.severity !== 'warning').length >\n 0\n ) {\n // During compilation errors we want to delay the HMR events until errors are fixed\n return\n }\n }\n\n for (const client of clients) {\n const state = clientStates.get(client)\n if (!state) {\n continue\n }\n\n for (const [, issueMap] of state.clientIssues) {\n if (\n [...issueMap.values()].filter((i) => i.severity !== 'warning')\n .length > 0\n ) {\n // During compilation errors we want to delay the HMR events until errors are fixed\n return\n }\n }\n\n for (const payload of state.hmrPayloads.values()) {\n sendToClient(client, payload)\n }\n state.hmrPayloads.clear()\n\n if (state.turbopackUpdates.length > 0) {\n sendToClient(client, {\n action: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: state.turbopackUpdates,\n })\n state.turbopackUpdates.length = 0\n }\n }\n }\n const sendEnqueuedMessagesDebounce = debounce(sendEnqueuedMessages, 2)\n\n const sendHmr: SendHmr = (id: string, payload: HMR_ACTION_TYPES) => {\n for (const client of clients) {\n clientStates.get(client)?.hmrPayloads.set(id, payload)\n }\n\n hmrEventHappened = true\n sendEnqueuedMessagesDebounce()\n }\n\n function sendTurbopackMessage(payload: TurbopackUpdate) {\n // TODO(PACK-2049): For some reason we end up emitting hundreds of issues messages on bigger apps,\n // a lot of which are duplicates.\n // They are currently not handled on the client at all, so might as well not send them for now.\n payload.diagnostics = []\n payload.issues = []\n\n for (const client of clients) {\n clientStates.get(client)?.turbopackUpdates.push(payload)\n }\n\n hmrEventHappened = true\n sendEnqueuedMessagesDebounce()\n }\n\n async function subscribeToChanges(\n key: EntryKey,\n includeIssues: boolean,\n endpoint: Endpoint,\n makePayload: (\n change: TurbopackResult,\n hash: string\n ) => Promise<HMR_ACTION_TYPES> | HMR_ACTION_TYPES | void,\n onError?: (\n error: Error\n ) => Promise<HMR_ACTION_TYPES> | HMR_ACTION_TYPES | void\n ) {\n if (changeSubscriptions.has(key)) {\n return\n }\n\n const { side } = splitEntryKey(key)\n\n const changedPromise = endpoint[`${side}Changed`](includeIssues)\n changeSubscriptions.set(key, changedPromise)\n try {\n const changed = await changedPromise\n\n for await (const change of changed) {\n processIssues(currentEntryIssues, key, change, false, true)\n // TODO: Get an actual content hash from Turbopack.\n const payload = await makePayload(change, String(++hmrHash))\n if (payload) {\n sendHmr(key, payload)\n }\n }\n } catch (e) {\n changeSubscriptions.delete(key)\n const payload = await onError?.(e as Error)\n if (payload) {\n sendHmr(key, payload)\n }\n return\n }\n changeSubscriptions.delete(key)\n }\n\n async function unsubscribeFromChanges(key: EntryKey) {\n const subscription = await changeSubscriptions.get(key)\n if (subscription) {\n await subscription.return?.()\n changeSubscriptions.delete(key)\n }\n currentEntryIssues.delete(key)\n }\n\n async function subscribeToHmrEvents(client: ws, id: string) {\n const key = getEntryKey('assets', 'client', id)\n if (!hasEntrypointForKey(currentEntrypoints, key, assetMapper)) {\n // maybe throw an error / force the client to reload?\n return\n }\n\n const state = clientStates.get(client)\n if (!state || state.subscriptions.has(id)) {\n return\n }\n\n const subscription = project!.hmrEvents(id)\n state.subscriptions.set(id, subscription)\n\n // The subscription will always emit once, which is the initial\n // computation. This is not a change, so swallow it.\n try {\n await subscription.next()\n\n for await (const data of subscription) {\n processIssues(state.clientIssues, key, data, false, true)\n if (data.type !== 'issues') {\n sendTurbopackMessage(data)\n }\n }\n } catch (e) {\n // The client might be using an HMR session from a previous server, tell them\n // to fully reload the page to resolve the issue. We can't use\n // `hotReloader.send` since that would force every connected client to\n // reload, only this client is out of date.\n const reloadAction: ReloadPageAction = {\n action: HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE,\n data: `error in HMR event subscription for ${id}: ${e}`,\n }\n sendToClient(client, reloadAction)\n client.close()\n return\n }\n }\n\n function unsubscribeFromHmrEvents(client: ws, id: string) {\n const state = clientStates.get(client)\n if (!state) {\n return\n }\n\n const subscription = state.subscriptions.get(id)\n subscription?.return!()\n\n const key = getEntryKey('assets', 'client', id)\n state.clientIssues.delete(key)\n }\n\n async function handleEntrypointsSubscription() {\n for await (const entrypoints of entrypointsSubscription) {\n if (!currentEntriesHandlingResolve) {\n currentEntriesHandling = new Promise(\n // eslint-disable-next-line no-loop-func\n (resolve) => (currentEntriesHandlingResolve = resolve)\n )\n }\n\n processTopLevelIssues(currentTopLevelIssues, entrypoints)\n\n await handleEntrypoints({\n entrypoints,\n\n currentEntrypoints,\n\n currentEntryIssues,\n manifestLoader,\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n logErrors: true,\n\n dev: {\n assetMapper,\n changeSubscriptions,\n clients,\n clientStates,\n serverFields,\n\n hooks: {\n handleWrittenEndpoint: (id, result, forceDeleteCache) => {\n currentWrittenEntrypoints.set(id, result)\n return clearRequireCache(id, result, { force: forceDeleteCache })\n },\n propagateServerField: propagateServerField.bind(null, opts),\n sendHmr,\n startBuilding,\n subscribeToChanges,\n unsubscribeFromChanges,\n unsubscribeFromHmrEvents,\n },\n },\n })\n\n currentEntriesHandlingResolve!()\n currentEntriesHandlingResolve = undefined\n }\n }\n\n await mkdir(join(distDir, 'server'), { recursive: true })\n await mkdir(join(distDir, 'static', buildId), { recursive: true })\n await writeFile(\n join(distDir, 'package.json'),\n JSON.stringify(\n {\n type: 'commonjs',\n },\n null,\n 2\n )\n )\n\n const middlewares = [\n getOverlayMiddleware({\n project,\n projectPath,\n isSrcDir: opts.isSrcDir,\n }),\n getSourceMapMiddleware(project),\n getNextErrorFeedbackMiddleware(opts.telemetry),\n getDevOverlayFontMiddleware(),\n getDisableDevIndicatorMiddleware(),\n getRestartDevServerMiddleware({\n telemetry: opts.telemetry,\n turbopackProject: project,\n }),\n devToolsConfigMiddleware({\n distDir,\n sendUpdateSignal: (data) => {\n hotReloader.send({\n action: HMR_ACTIONS_SENT_TO_BROWSER.DEVTOOLS_CONFIG,\n data,\n })\n },\n }),\n ]\n\n const versionInfoPromise = getVersionInfo()\n\n let devtoolsFrontendUrl: string | undefined\n const nodeDebugType = getNodeDebugType()\n if (nodeDebugType) {\n const debugPort = process.debugPort\n let debugInfo\n try {\n // It requires to use 127.0.0.1 instead of localhost for server-side fetching.\n const debugInfoList = await fetch(\n `http://127.0.0.1:${debugPort}/json/list`\n ).then((res) => res.json())\n debugInfo = debugInfoList[0]\n } catch {}\n if (debugInfo) {\n devtoolsFrontendUrl = debugInfo.devtoolsFrontendUrl\n }\n }\n\n const hotReloader: NextJsHotReloaderInterface = {\n turbopackProject: project,\n activeWebpackConfigs: undefined,\n serverStats: null,\n edgeServerStats: null,\n async run(req, res, _parsedUrl) {\n // intercept page chunks request and ensure them with turbopack\n if (req.url?.startsWith('/_next/static/chunks/pages/')) {\n const params = matchNextPageBundleRequest(req.url)\n\n if (params) {\n const decodedPagePath = `/${params.path\n .map((param: string) => decodeURIComponent(param))\n .join('/')}`\n\n const denormalizedPagePath = denormalizePagePath(decodedPagePath)\n\n await hotReloader\n .ensurePage({\n page: denormalizedPagePath,\n clientOnly: false,\n definition: undefined,\n url: req.url,\n })\n .catch(console.error)\n }\n }\n\n for (const middleware of middlewares) {\n let calledNext = false\n\n await middleware(req, res, () => {\n calledNext = true\n })\n\n if (!calledNext) {\n return { finished: true }\n }\n }\n\n // Request was not finished.\n return { finished: undefined }\n },\n\n // TODO: Figure out if socket type can match the NextJsHotReloaderInterface\n onHMR(req, socket: Socket, head, onUpgrade) {\n wsServer.handleUpgrade(req, socket, head, (client) => {\n onUpgrade(client)\n const clientIssues: EntryIssuesMap = new Map()\n const subscriptions: Map<string, AsyncIterator<any>> = new Map()\n\n clients.add(client)\n clientStates.set(client, {\n clientIssues,\n hmrPayloads: new Map(),\n turbopackUpdates: [],\n subscriptions,\n })\n\n client.on('close', () => {\n // Remove active subscriptions\n for (const subscription of subscriptions.values()) {\n subscription.return?.()\n }\n clientStates.delete(client)\n clients.delete(client)\n })\n\n client.addEventListener('message', async ({ data }) => {\n const parsedData = JSON.parse(\n typeof data !== 'string' ? data.toString() : data\n )\n\n // Next.js messages\n switch (parsedData.event) {\n case 'span-end': {\n hotReloaderSpan.manualTraceChild(\n parsedData.spanName,\n msToNs(parsedData.startTime),\n msToNs(parsedData.endTime),\n parsedData.attributes\n )\n break\n }\n case 'client-hmr-latency': // { id, startTime, endTime, page, updatedModules, isPageHidden }\n hotReloaderSpan.manualTraceChild(\n parsedData.event,\n msToNs(parsedData.startTime),\n msToNs(parsedData.endTime),\n {\n updatedModules: parsedData.updatedModules,\n page: parsedData.page,\n isPageHidden: parsedData.isPageHidden,\n }\n )\n break\n\n case 'client-error': // { errorCount, clientId }\n case 'client-warning': // { warningCount, clientId }\n case 'client-success': // { clientId }\n case 'server-component-reload-page': // { clientId }\n case 'client-reload-page': // { clientId }\n case 'client-removed-page': // { page }\n case 'client-full-reload': // { stackTrace, hadRuntimeError }\n const { hadRuntimeError, dependencyChain } = parsedData\n if (hadRuntimeError) {\n Log.warn(FAST_REFRESH_RUNTIME_RELOAD)\n }\n if (\n Array.isArray(dependencyChain) &&\n typeof dependencyChain[0] === 'string'\n ) {\n const cleanedModulePath = dependencyChain[0]\n .replace(/^\\[project\\]/, '.')\n .replace(/ \\[.*\\] \\(.*\\)$/, '')\n Log.warn(\n `Fast Refresh had to perform a full reload when ${cleanedModulePath} changed. Read more: https://nextjs.org/docs/messages/fast-refresh-reload`\n )\n }\n break\n case 'client-added-page':\n // TODO\n break\n case 'browser-logs': {\n if (nextConfig.experimental.browserDebugInfoInTerminal) {\n await receiveBrowserLogsTurbopack({\n entries: parsedData.entries,\n router: parsedData.router,\n sourceType: parsedData.sourceType,\n project,\n projectPath,\n distDir,\n config: nextConfig.experimental.browserDebugInfoInTerminal,\n })\n }\n break\n }\n\n default:\n // Might be a Turbopack message...\n if (!parsedData.type) {\n throw new Error(`unrecognized HMR message \"${data}\"`)\n }\n }\n\n // Turbopack messages\n switch (parsedData.type) {\n case 'turbopack-subscribe':\n subscribeToHmrEvents(client, parsedData.path)\n break\n\n case 'turbopack-unsubscribe':\n unsubscribeFromHmrEvents(client, parsedData.path)\n break\n\n default:\n if (!parsedData.event) {\n throw new Error(`unrecognized Turbopack HMR message \"${data}\"`)\n }\n }\n })\n\n const turbopackConnected: TurbopackConnectedAction = {\n action: HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n data: { sessionId },\n }\n sendToClient(client, turbopackConnected)\n\n const errors: CompilationError[] = []\n\n for (const entryIssues of currentEntryIssues.values()) {\n for (const issue of entryIssues.values()) {\n if (issue.severity !== 'warning') {\n errors.push({\n message: formatIssue(issue),\n })\n } else {\n printNonFatalIssue(issue)\n }\n }\n }\n\n if (devIndicatorServerState.disabledUntil < Date.now()) {\n devIndicatorServerState.disabledUntil = 0\n }\n\n ;(async function () {\n const versionInfo = await versionInfoPromise\n const devToolsConfig = await getDevToolsConfig(distDir)\n\n const sync: SyncAction = {\n action: HMR_ACTIONS_SENT_TO_BROWSER.SYNC,\n errors,\n warnings: [],\n hash: '',\n versionInfo,\n debug: {\n devtoolsFrontendUrl,\n },\n devIndicator: devIndicatorServerState,\n devToolsConfig,\n }\n\n sendToClient(client, sync)\n })()\n })\n },\n\n send(action) {\n const payload = JSON.stringify(action)\n for (const client of clients) {\n client.send(payload)\n }\n },\n\n setHmrServerError(_error) {\n // Not implemented yet.\n },\n clearHmrServerError() {\n // Not implemented yet.\n },\n async start() {},\n async getCompilationErrors(page) {\n const appEntryKey = getEntryKey('app', 'server', page)\n const pagesEntryKey = getEntryKey('pages', 'server', page)\n\n const topLevelIssues = currentTopLevelIssues.values()\n\n const thisEntryIssues =\n currentEntryIssues.get(appEntryKey) ??\n currentEntryIssues.get(pagesEntryKey)\n\n if (thisEntryIssues !== undefined && thisEntryIssues.size > 0) {\n // If there is an error related to the requesting page we display it instead of the first error\n return [...topLevelIssues, ...thisEntryIssues.values()]\n .map((issue) => {\n const formattedIssue = formatIssue(issue)\n if (issue.severity === 'warning') {\n printNonFatalIssue(issue)\n return null\n } else if (isWellKnownError(issue)) {\n Log.error(formattedIssue)\n }\n\n return new Error(formattedIssue)\n })\n .filter((error) => error !== null)\n }\n\n // Otherwise, return all errors across pages\n const errors = []\n for (const issue of topLevelIssues) {\n if (issue.severity !== 'warning') {\n errors.push(new Error(formatIssue(issue)))\n }\n }\n for (const entryIssues of currentEntryIssues.values()) {\n for (const issue of entryIssues.values()) {\n if (issue.severity !== 'warning') {\n const message = formatIssue(issue)\n errors.push(new Error(message))\n } else {\n printNonFatalIssue(issue)\n }\n }\n }\n return errors\n },\n async invalidate({\n // .env files or tsconfig/jsconfig change\n reloadAfterInvalidation,\n }) {\n if (reloadAfterInvalidation) {\n for (const [key, entrypoint] of currentWrittenEntrypoints) {\n clearRequireCache(key, entrypoint, { force: true })\n }\n\n await clearAllModuleContexts()\n this.send({\n action: HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES,\n hash: String(++hmrHash),\n })\n }\n },\n async buildFallbackError() {\n // Not implemented yet.\n },\n async ensurePage({\n page: inputPage,\n // Unused parameters\n // clientOnly,\n appPaths,\n definition,\n isApp,\n url: requestUrl,\n }) {\n // When there is no route definition this is an internal file not a route the user added.\n // Middleware and instrumentation are handled in turbpack-utils.ts handleEntrypoints instead.\n if (!definition) {\n if (inputPage === '/middleware') return\n if (inputPage === '/src/middleware') return\n if (inputPage === '/instrumentation') return\n if (inputPage === '/src/instrumentation') return\n }\n\n return hotReloaderSpan\n .traceChild('ensure-page', {\n inputPage,\n })\n .traceAsyncFn(async () => {\n if (BLOCKED_PAGES.includes(inputPage) && inputPage !== '/_error') {\n return\n }\n\n await currentEntriesHandling\n\n // TODO We shouldn't look into the filesystem again. This should use the information from entrypoints\n let routeDef: Pick<\n RouteDefinition,\n 'filename' | 'bundlePath' | 'page'\n > =\n definition ??\n (await findPagePathData(\n projectPath,\n inputPage,\n nextConfig.pageExtensions,\n opts.pagesDir,\n opts.appDir,\n !!nextConfig.experimental.globalNotFound\n ))\n\n // If the route is actually an app page route, then we should have access\n // to the app route definition, and therefore, the appPaths from it.\n if (!appPaths && definition && isAppPageRouteDefinition(definition)) {\n appPaths = definition.appPaths\n }\n\n let page = routeDef.page\n if (appPaths) {\n const normalizedPage = normalizeAppPath(page)\n\n // filter out paths that are not exact matches (e.g. catchall)\n const matchingAppPaths = appPaths.filter(\n (path) => normalizeAppPath(path) === normalizedPage\n )\n\n // the last item in the array is the root page, if there are parallel routes\n page = matchingAppPaths[matchingAppPaths.length - 1]\n }\n\n const pathname = definition?.pathname ?? inputPage\n\n if (page === '/_error') {\n let finishBuilding = startBuilding(pathname, requestUrl, false)\n try {\n await handlePagesErrorRoute({\n currentEntryIssues,\n entrypoints: currentEntrypoints,\n manifestLoader,\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n logErrors: true,\n hooks: {\n subscribeToChanges,\n handleWrittenEndpoint: (id, result, forceDeleteCache) => {\n currentWrittenEntrypoints.set(id, result)\n assetMapper.setPathsForKey(id, result.clientPaths)\n return clearRequireCache(id, result, {\n force: forceDeleteCache,\n })\n },\n },\n })\n } finally {\n finishBuilding()\n }\n return\n }\n\n const isInsideAppDir = routeDef.bundlePath.startsWith('app/')\n const isEntryMetadataRouteFile = isMetadataRouteFile(\n routeDef.filename.replace(opts.appDir || '', ''),\n nextConfig.pageExtensions,\n true\n )\n const normalizedAppPage = isEntryMetadataRouteFile\n ? normalizedPageToTurbopackStructureRoute(\n page,\n extname(routeDef.filename)\n )\n : page\n\n const route = isInsideAppDir\n ? currentEntrypoints.app.get(normalizedAppPage)\n : currentEntrypoints.page.get(page)\n\n if (!route) {\n // TODO: why is this entry missing in turbopack?\n if (page === '/middleware') return\n if (page === '/src/middleware') return\n if (page === '/instrumentation') return\n if (page === '/src/instrumentation') return\n\n throw new PageNotFoundError(`route not found ${page}`)\n }\n\n // We don't throw on ensureOpts.isApp === true for page-api\n // since this can happen when app pages make\n // api requests to page API routes.\n if (isApp && route.type === 'page') {\n throw new Error(`mis-matched route type: isApp && page for ${page}`)\n }\n\n const finishBuilding = startBuilding(pathname, requestUrl, false)\n try {\n await handleRouteType({\n dev,\n page,\n pathname,\n route,\n currentEntryIssues,\n entrypoints: currentEntrypoints,\n manifestLoader,\n readyIds,\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n logErrors: true,\n\n hooks: {\n subscribeToChanges,\n handleWrittenEndpoint: (id, result, forceDeleteCache) => {\n currentWrittenEntrypoints.set(id, result)\n assetMapper.setPathsForKey(id, result.clientPaths)\n return clearRequireCache(id, result, {\n force: forceDeleteCache,\n })\n },\n },\n })\n } finally {\n finishBuilding()\n }\n })\n },\n close() {\n for (const wsClient of clients) {\n // it's okay to not cleanly close these websocket connections, this is dev\n wsClient.terminate()\n }\n clients.clear()\n },\n }\n\n handleEntrypointsSubscription().catch((err) => {\n console.error(err)\n process.exit(1)\n })\n\n // Write empty manifests\n await currentEntriesHandling\n await manifestLoader.writeManifests({\n devRewrites: opts.fsChecker.rewrites,\n productionRewrites: undefined,\n entrypoints: currentEntrypoints,\n })\n\n async function handleProjectUpdates() {\n for await (const updateMessage of project.updateInfoSubscribe(30)) {\n switch (updateMessage.updateType) {\n case 'start': {\n hotReloader.send({ action: HMR_ACTIONS_SENT_TO_BROWSER.BUILDING })\n break\n }\n case 'end': {\n sendEnqueuedMessages()\n\n function addErrors(\n errorsMap: Map<string, CompilationError>,\n issues: EntryIssuesMap\n ) {\n for (const issueMap of issues.values()) {\n for (const [key, issue] of issueMap) {\n if (issue.severity === 'warning') continue\n if (errorsMap.has(key)) continue\n\n const message = formatIssue(issue)\n\n errorsMap.set(key, {\n message,\n details: issue.detail\n ? renderStyledStringToErrorAnsi(issue.detail)\n : undefined,\n })\n }\n }\n }\n\n const errors = new Map<string, CompilationError>()\n addErrors(errors, currentEntryIssues)\n\n for (const client of clients) {\n const state = clientStates.get(client)\n if (!state) {\n continue\n }\n\n const clientErrors = new Map(errors)\n addErrors(clientErrors, state.clientIssues)\n\n sendToClient(client, {\n action: HMR_ACTIONS_SENT_TO_BROWSER.BUILT,\n hash: String(++hmrHash),\n errors: [...clientErrors.values()],\n warnings: [],\n })\n }\n\n if (hmrEventHappened) {\n const time = updateMessage.value.duration\n const timeMessage =\n time > 2000 ? `${Math.round(time / 100) / 10}s` : `${time}ms`\n Log.event(`Compiled in ${timeMessage}`)\n hmrEventHappened = false\n }\n break\n }\n default:\n }\n }\n }\n\n handleProjectUpdates().catch((err) => {\n console.error(err)\n process.exit(1)\n })\n\n return hotReloader\n}\n"],"names":["mkdir","writeFile","join","extname","relative","pathToFileURL","ws","store","consoleStore","HMR_ACTIONS_SENT_TO_BROWSER","createDefineEnv","Log","getVersionInfo","matchNextPageBundleRequest","BLOCKED_PAGES","getOverlayMiddleware","getSourceMapMiddleware","PageNotFoundError","debounce","deleteCache","clearAllModuleContexts","clearModuleContext","denormalizePagePath","trace","AssetMapper","handleEntrypoints","handlePagesErrorRoute","handleRouteType","hasEntrypointForKey","msToNs","processTopLevelIssues","printNonFatalIssue","normalizedPageToTurbopackStructureRoute","propagateServerField","TurbopackManifestLoader","findPagePathData","getEntryKey","splitEntryKey","FAST_REFRESH_RUNTIME_RELOAD","generateEncryptionKeyBase64","isAppPageRouteDefinition","normalizeAppPath","getNodeDebugType","isMetadataRouteFile","setBundlerFindSourceMapImplementation","getNextErrorFeedbackMiddleware","formatIssue","getTurbopackJsConfig","isPersistentCachingEnabled","isWellKnownError","processIssues","renderStyledStringToErrorAnsi","getDevOverlayFontMiddleware","devIndicatorServerState","getDisableDevIndicatorMiddleware","getRestartDevServerMiddleware","backgroundLogCompilationEvents","getSupportedBrowsers","receiveBrowserLogsTurbopack","normalizePath","devToolsConfigMiddleware","getDevToolsConfig","wsServer","Server","noServer","isTestMode","process","env","NEXT_TEST_MODE","__NEXT_TEST_MODE","DEBUG","sessionId","Math","floor","Number","MAX_SAFE_INTEGER","random","rewriteTurbopackSources","projectRoot","sourceMap","section","sections","map","i","sources","length","replace","toString","getSourceMapFromTurbopack","project","sourceURL","sourceMapJson","getSourceMapSync","err","undefined","payload","JSON","parse","createHotReloaderTurbopack","opts","serverFields","distDir","resetFetch","nextConfig","dev","buildId","dir","projectPath","loadBindings","require","bindings","log","testMode","hasRewrites","fsChecker","rewrites","afterFiles","beforeFiles","fallback","hotReloaderSpan","version","__NEXT_VERSION","stop","encryptionKey","isBuild","clientRouterFilters","experimental","clientRouterFilter","supportedBrowsers","currentNodeJsVersion","versions","node","rootPath","turbopack","root","outputFileTracingRoot","turbo","createProject","jsConfig","watch","enable","pollIntervalMs","watchOptions","defineEnv","isTurbopack","config","fetchCacheKeyPrefix","middlewareMatchers","previewProps","prerenderManifest","preview","browserslistQuery","noMangling","persistentCaching","memoryLimit","turbopackMemoryLimit","isShortSession","eventTypes","bind","onDevServerCleanup","onExit","entrypointsSubscription","entrypointsSubscribe","currentWrittenEntrypoints","Map","currentEntrypoints","global","app","document","error","middleware","instrumentation","page","currentTopLevelIssues","currentEntryIssues","manifestLoader","changeSubscriptions","serverPathState","readyIds","Set","currentEntriesHandlingResolve","currentEntriesHandling","Promise","resolve","assetMapper","clearRequireCache","key","writtenEndpoint","force","path","contentHash","serverPaths","set","hasChange","endsWith","localKey","localHash","get","globalHash","__next__clear_chunk_cache__","p","file","buildingIds","startBuilding","id","requestUrl","forceRebuild","has","size","setState","loading","trigger","url","add","finishBuilding","delete","hmrEventHappened","hmrHash","clients","clientStates","WeakMap","sendToClient","client","send","stringify","sendEnqueuedMessages","issueMap","values","filter","severity","state","clientIssues","hmrPayloads","clear","turbopackUpdates","action","TURBOPACK_MESSAGE","data","sendEnqueuedMessagesDebounce","sendHmr","sendTurbopackMessage","diagnostics","issues","push","subscribeToChanges","includeIssues","endpoint","makePayload","onError","side","changedPromise","changed","change","String","e","unsubscribeFromChanges","subscription","return","subscribeToHmrEvents","subscriptions","hmrEvents","next","type","reloadAction","RELOAD_PAGE","close","unsubscribeFromHmrEvents","handleEntrypointsSubscription","entrypoints","devRewrites","productionRewrites","logErrors","hooks","handleWrittenEndpoint","result","forceDeleteCache","recursive","middlewares","isSrcDir","telemetry","turbopackProject","sendUpdateSignal","hotReloader","DEVTOOLS_CONFIG","versionInfoPromise","devtoolsFrontendUrl","nodeDebugType","debugPort","debugInfo","debugInfoList","fetch","then","res","json","activeWebpackConfigs","serverStats","edgeServerStats","run","req","_parsedUrl","startsWith","params","decodedPagePath","param","decodeURIComponent","denormalizedPagePath","ensurePage","clientOnly","definition","catch","console","calledNext","finished","onHMR","socket","head","onUpgrade","handleUpgrade","on","addEventListener","parsedData","event","manualTraceChild","spanName","startTime","endTime","attributes","updatedModules","isPageHidden","hadRuntimeError","dependencyChain","warn","Array","isArray","cleanedModulePath","browserDebugInfoInTerminal","entries","router","sourceType","Error","turbopackConnected","TURBOPACK_CONNECTED","errors","entryIssues","issue","message","disabledUntil","Date","now","versionInfo","devToolsConfig","sync","SYNC","warnings","hash","debug","devIndicator","setHmrServerError","_error","clearHmrServerError","start","getCompilationErrors","appEntryKey","pagesEntryKey","topLevelIssues","thisEntryIssues","formattedIssue","invalidate","reloadAfterInvalidation","entrypoint","SERVER_COMPONENT_CHANGES","buildFallbackError","inputPage","appPaths","isApp","traceChild","traceAsyncFn","includes","routeDef","pageExtensions","pagesDir","appDir","globalNotFound","normalizedPage","matchingAppPaths","pathname","setPathsForKey","clientPaths","isInsideAppDir","bundlePath","isEntryMetadataRouteFile","filename","normalizedAppPage","route","wsClient","terminate","exit","writeManifests","handleProjectUpdates","updateMessage","updateInfoSubscribe","updateType","BUILDING","addErrors","errorsMap","details","detail","clientErrors","BUILT","time","value","duration","timeMessage","round"],"mappings":"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","ignoreList":[0]}
@@ -186,7 +186,7 @@ export default class HotReloaderWebpack {
186
186
  this.previewProps = previewProps;
187
187
  this.rewrites = rewrites;
188
188
  this.hotReloaderSpan = trace('hot-reloader', undefined, {
189
- version: "15.4.2-canary.51"
189
+ version: "15.4.2-canary.53"
190
190
  });
191
191
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
192
192
  // of the current `next dev` invocation.
@@ -12,7 +12,7 @@ export function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures
12
12
  } else {
13
13
  bundlerSuffix = '';
14
14
  }
15
- Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.2-canary.51"}`))}${bundlerSuffix}`);
15
+ Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.2-canary.53"}`))}${bundlerSuffix}`);
16
16
  if (appUrl) {
17
17
  Log.bootstrap(`- Local: ${appUrl}`);
18
18
  }
@@ -111,30 +111,30 @@ export function convertCustomRouteSource(source) {
111
111
  appRouteHandlerRoutes: {},
112
112
  redirectRoutes: {},
113
113
  rewriteRoutes: {},
114
- appRouteHandlers: new Set(appRouteHandlers.map(({ filePath })=>filePath)),
115
- pageApiRoutes: new Set(pageApiRoutes.map(({ filePath })=>filePath)),
116
- appPagePaths: new Set(appRoutes.map(({ filePath })=>filePath)),
117
- pagesRouterPagePaths: new Set(pageRoutes.map(({ filePath })=>filePath)),
118
- layoutPaths: new Set(layoutRoutes.map(({ filePath })=>filePath)),
114
+ appRouteHandlers: new Set(appRouteHandlers.map(({ filePath })=>getRelativePath(filePath))),
115
+ pageApiRoutes: new Set(pageApiRoutes.map(({ filePath })=>getRelativePath(filePath))),
116
+ appPagePaths: new Set(appRoutes.map(({ filePath })=>getRelativePath(filePath))),
117
+ pagesRouterPagePaths: new Set(pageRoutes.map(({ filePath })=>getRelativePath(filePath))),
118
+ layoutPaths: new Set(layoutRoutes.map(({ filePath })=>getRelativePath(filePath))),
119
119
  filePathToRoute: new Map([
120
120
  ...appRoutes.map(({ route, filePath })=>[
121
- filePath,
121
+ getRelativePath(filePath),
122
122
  resolveInterceptingRoute(route)
123
123
  ]),
124
124
  ...layoutRoutes.map(({ route, filePath })=>[
125
- filePath,
125
+ getRelativePath(filePath),
126
126
  resolveInterceptingRoute(route)
127
127
  ]),
128
128
  ...appRouteHandlers.map(({ route, filePath })=>[
129
- filePath,
129
+ getRelativePath(filePath),
130
130
  resolveInterceptingRoute(route)
131
131
  ]),
132
132
  ...pageRoutes.map(({ route, filePath })=>[
133
- filePath,
133
+ getRelativePath(filePath),
134
134
  route
135
135
  ]),
136
136
  ...pageApiRoutes.map(({ route, filePath })=>[
137
- filePath,
137
+ getRelativePath(filePath),
138
138
  route
139
139
  ])
140
140
  ])
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/server/lib/router-utils/route-types-utils.ts"],"sourcesContent":["import path from 'path'\nimport {\n getRouteRegex,\n type Group,\n} from '../../../shared/lib/router/utils/route-regex'\nimport type { NextConfigComplete } from '../../config-shared'\n\nimport fs from 'fs'\nimport {\n generateRouteTypesFile,\n generateLinkTypesFile,\n generateValidatorFile,\n} from './typegen'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from '../../../shared/lib/router/utils/interception-routes'\n\ninterface RouteInfo {\n path: string\n groups: { [groupName: string]: Group }\n}\n\nexport interface RouteTypesManifest {\n appRoutes: Record<string, RouteInfo>\n pageRoutes: Record<string, RouteInfo>\n layoutRoutes: Record<string, RouteInfo & { slots: string[] }>\n appRouteHandlerRoutes: Record<string, RouteInfo>\n /** Map of redirect source => RouteInfo */\n redirectRoutes: Record<string, RouteInfo>\n /** Map of rewrite source => RouteInfo */\n rewriteRoutes: Record<string, RouteInfo>\n /** File paths for validation */\n appPagePaths: Set<string>\n pagesRouterPagePaths: Set<string>\n layoutPaths: Set<string>\n appRouteHandlers: Set<string>\n pageApiRoutes: Set<string>\n /** Direct mapping from file paths to routes for validation */\n filePathToRoute: Map<string, string>\n}\n\n// Convert a custom-route source string (`/blog/:slug`, `/docs/:path*`, ...)\n// into the bracket-syntax used by other Next.js route helpers so that we can\n// reuse `getRouteRegex()` to extract groups.\nexport function convertCustomRouteSource(source: string): string[] {\n const parseResult = tryToParsePath(source)\n\n if (parseResult.error || !parseResult.tokens) {\n // Fallback to original source if parsing fails\n return source.startsWith('/') ? [source] : ['/' + source]\n }\n\n const possibleNormalizedRoutes = ['']\n let slugCnt = 1\n\n function append(suffix: string) {\n for (let i = 0; i < possibleNormalizedRoutes.length; i++) {\n possibleNormalizedRoutes[i] += suffix\n }\n }\n\n function fork(suffix: string) {\n const currentLength = possibleNormalizedRoutes.length\n for (let i = 0; i < currentLength; i++) {\n possibleNormalizedRoutes.push(possibleNormalizedRoutes[i] + suffix)\n }\n }\n\n for (const token of parseResult.tokens) {\n if (typeof token === 'object') {\n // Make sure the slug is always named.\n const slug = token.name || (slugCnt++ === 1 ? 'slug' : `slug${slugCnt}`)\n if (token.modifier === '*') {\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.modifier === '+') {\n append(`${token.prefix}[...${slug}]`)\n } else if (token.modifier === '') {\n if (token.pattern === '[^\\\\/#\\\\?]+?') {\n // A safe slug\n append(`${token.prefix}[${slug}]`)\n } else if (token.pattern === '.*') {\n // An optional catch-all slug\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.pattern === '.+') {\n // A catch-all slug\n append(`${token.prefix}[...${slug}]`)\n } else {\n // Other regex patterns are not supported. Skip this route.\n return []\n }\n } else if (token.modifier === '?') {\n if (/^[a-zA-Z0-9_/]*$/.test(token.pattern)) {\n // An optional slug with plain text only, fork the route.\n append(token.prefix)\n fork(token.pattern)\n } else {\n // Optional modifier `?` and regex patterns are not supported.\n return []\n }\n }\n } else if (typeof token === 'string') {\n append(token)\n }\n }\n\n // Ensure leading slash\n return possibleNormalizedRoutes.map((route) =>\n route.startsWith('/') ? route : '/' + route\n )\n}\n\n/**\n * Extracts route parameters from a route pattern\n */\nexport function extractRouteParams(route: string) {\n const regex = getRouteRegex(route)\n return regex.groups\n}\n\n/**\n * Resolves an intercepting route to its canonical equivalent\n * Example: /gallery/test/(..)photo/[id] -> /gallery/photo/[id]\n */\nfunction resolveInterceptingRoute(route: string): string {\n // Reuse centralized interception route normalization logic\n try {\n if (!isInterceptionRouteAppPath(route)) return route\n const { interceptedRoute } = extractInterceptionRouteInformation(route)\n return interceptedRoute\n } catch {\n // If parsing fails, fall back to the original route\n return route\n }\n}\n\n/**\n * Creates a route types manifest from processed route data\n * (used for both build and dev)\n */\nexport async function createRouteTypesManifest({\n dir,\n pageRoutes,\n appRoutes,\n appRouteHandlers,\n pageApiRoutes,\n layoutRoutes,\n slots,\n redirects,\n rewrites,\n validatorFilePath,\n}: {\n dir: string\n pageRoutes: Array<{ route: string; filePath: string }>\n appRoutes: Array<{ route: string; filePath: string }>\n appRouteHandlers: Array<{ route: string; filePath: string }>\n pageApiRoutes: Array<{ route: string; filePath: string }>\n layoutRoutes: Array<{ route: string; filePath: string }>\n slots: Array<{ name: string; parent: string }>\n redirects?: NextConfigComplete['redirects']\n rewrites?: NextConfigComplete['rewrites']\n validatorFilePath?: string\n}): Promise<RouteTypesManifest> {\n // Helper function to calculate the correct relative path\n const getRelativePath = (filePath: string) => {\n if (validatorFilePath) {\n // For validator generation, calculate path relative to validator directory\n return path.relative(path.dirname(validatorFilePath), filePath)\n }\n // For other uses, calculate path relative to project directory\n return path.relative(dir, filePath)\n }\n\n const manifest: RouteTypesManifest = {\n appRoutes: {},\n pageRoutes: {},\n layoutRoutes: {},\n appRouteHandlerRoutes: {},\n redirectRoutes: {},\n rewriteRoutes: {},\n appRouteHandlers: new Set(appRouteHandlers.map(({ filePath }) => filePath)),\n pageApiRoutes: new Set(pageApiRoutes.map(({ filePath }) => filePath)),\n appPagePaths: new Set(appRoutes.map(({ filePath }) => filePath)),\n pagesRouterPagePaths: new Set(pageRoutes.map(({ filePath }) => filePath)),\n layoutPaths: new Set(layoutRoutes.map(({ filePath }) => filePath)),\n filePathToRoute: new Map([\n ...appRoutes.map(\n ({ route, filePath }) =>\n [filePath, resolveInterceptingRoute(route)] as [string, string]\n ),\n ...layoutRoutes.map(\n ({ route, filePath }) =>\n [filePath, resolveInterceptingRoute(route)] as [string, string]\n ),\n ...appRouteHandlers.map(\n ({ route, filePath }) =>\n [filePath, resolveInterceptingRoute(route)] as [string, string]\n ),\n ...pageRoutes.map(\n ({ route, filePath }) => [filePath, route] as [string, string]\n ),\n ...pageApiRoutes.map(\n ({ route, filePath }) => [filePath, route] as [string, string]\n ),\n ]),\n }\n\n // Process page routes\n for (const { route, filePath } of pageRoutes) {\n manifest.pageRoutes[route] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(route),\n }\n }\n\n // Process layout routes\n for (const { route, filePath } of layoutRoutes) {\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.layoutRoutes[resolvedRoute]) {\n manifest.layoutRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n slots: [],\n }\n }\n }\n\n // Process slots\n for (const slot of slots) {\n if (manifest.layoutRoutes[slot.parent]) {\n manifest.layoutRoutes[slot.parent].slots.push(slot.name)\n }\n }\n\n // Process app routes\n for (const { route, filePath } of appRoutes) {\n // Don't include metadata routes or pages\n if (\n !filePath.endsWith('page.ts') &&\n !filePath.endsWith('page.tsx') &&\n !filePath.endsWith('.mdx') &&\n !filePath.endsWith('.md')\n ) {\n continue\n }\n\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRoutes[resolvedRoute]) {\n manifest.appRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process app route handlers\n for (const { route, filePath } of appRouteHandlers) {\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRouteHandlerRoutes[resolvedRoute]) {\n manifest.appRouteHandlerRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process redirects\n if (typeof redirects === 'function') {\n const rd = await redirects()\n\n for (const item of rd) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.redirectRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n // Process rewrites\n if (typeof rewrites === 'function') {\n const rw = await rewrites()\n\n const allSources = Array.isArray(rw)\n ? rw\n : [\n ...(rw?.beforeFiles || []),\n ...(rw?.afterFiles || []),\n ...(rw?.fallback || []),\n ]\n\n for (const item of allSources) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.rewriteRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n return manifest\n}\n\nexport async function writeRouteTypesManifest(\n manifest: RouteTypesManifest,\n filePath: string,\n config: NextConfigComplete\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n // Write the main routes.d.ts file\n await fs.promises.writeFile(filePath, generateRouteTypesFile(manifest))\n\n // Write the link.d.ts file if typedRoutes is enabled\n if (config.experimental?.typedRoutes === true) {\n const linkTypesPath = path.join(dirname, 'link.d.ts')\n await fs.promises.writeFile(linkTypesPath, generateLinkTypesFile(manifest))\n }\n}\n\nexport async function writeValidatorFile(\n manifest: RouteTypesManifest,\n filePath: string\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n await fs.promises.writeFile(filePath, generateValidatorFile(manifest))\n}\n"],"names":["path","getRouteRegex","fs","generateRouteTypesFile","generateLinkTypesFile","generateValidatorFile","tryToParsePath","extractInterceptionRouteInformation","isInterceptionRouteAppPath","convertCustomRouteSource","source","parseResult","error","tokens","startsWith","possibleNormalizedRoutes","slugCnt","append","suffix","i","length","fork","currentLength","push","token","slug","name","modifier","prefix","pattern","test","map","route","extractRouteParams","regex","groups","resolveInterceptingRoute","interceptedRoute","createRouteTypesManifest","dir","pageRoutes","appRoutes","appRouteHandlers","pageApiRoutes","layoutRoutes","slots","redirects","rewrites","validatorFilePath","getRelativePath","filePath","relative","dirname","manifest","appRouteHandlerRoutes","redirectRoutes","rewriteRoutes","Set","appPagePaths","pagesRouterPagePaths","layoutPaths","filePathToRoute","Map","resolvedRoute","slot","parent","endsWith","rd","item","possibleRoutes","rw","allSources","Array","isArray","beforeFiles","afterFiles","fallback","writeRouteTypesManifest","config","existsSync","promises","mkdir","recursive","writeFile","experimental","typedRoutes","linkTypesPath","join","writeValidatorFile"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../src/server/lib/router-utils/route-types-utils.ts"],"sourcesContent":["import path from 'path'\nimport {\n getRouteRegex,\n type Group,\n} from '../../../shared/lib/router/utils/route-regex'\nimport type { NextConfigComplete } from '../../config-shared'\n\nimport fs from 'fs'\nimport {\n generateRouteTypesFile,\n generateLinkTypesFile,\n generateValidatorFile,\n} from './typegen'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from '../../../shared/lib/router/utils/interception-routes'\n\ninterface RouteInfo {\n path: string\n groups: { [groupName: string]: Group }\n}\n\nexport interface RouteTypesManifest {\n appRoutes: Record<string, RouteInfo>\n pageRoutes: Record<string, RouteInfo>\n layoutRoutes: Record<string, RouteInfo & { slots: string[] }>\n appRouteHandlerRoutes: Record<string, RouteInfo>\n /** Map of redirect source => RouteInfo */\n redirectRoutes: Record<string, RouteInfo>\n /** Map of rewrite source => RouteInfo */\n rewriteRoutes: Record<string, RouteInfo>\n /** File paths for validation */\n appPagePaths: Set<string>\n pagesRouterPagePaths: Set<string>\n layoutPaths: Set<string>\n appRouteHandlers: Set<string>\n pageApiRoutes: Set<string>\n /** Direct mapping from file paths to routes for validation */\n filePathToRoute: Map<string, string>\n}\n\n// Convert a custom-route source string (`/blog/:slug`, `/docs/:path*`, ...)\n// into the bracket-syntax used by other Next.js route helpers so that we can\n// reuse `getRouteRegex()` to extract groups.\nexport function convertCustomRouteSource(source: string): string[] {\n const parseResult = tryToParsePath(source)\n\n if (parseResult.error || !parseResult.tokens) {\n // Fallback to original source if parsing fails\n return source.startsWith('/') ? [source] : ['/' + source]\n }\n\n const possibleNormalizedRoutes = ['']\n let slugCnt = 1\n\n function append(suffix: string) {\n for (let i = 0; i < possibleNormalizedRoutes.length; i++) {\n possibleNormalizedRoutes[i] += suffix\n }\n }\n\n function fork(suffix: string) {\n const currentLength = possibleNormalizedRoutes.length\n for (let i = 0; i < currentLength; i++) {\n possibleNormalizedRoutes.push(possibleNormalizedRoutes[i] + suffix)\n }\n }\n\n for (const token of parseResult.tokens) {\n if (typeof token === 'object') {\n // Make sure the slug is always named.\n const slug = token.name || (slugCnt++ === 1 ? 'slug' : `slug${slugCnt}`)\n if (token.modifier === '*') {\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.modifier === '+') {\n append(`${token.prefix}[...${slug}]`)\n } else if (token.modifier === '') {\n if (token.pattern === '[^\\\\/#\\\\?]+?') {\n // A safe slug\n append(`${token.prefix}[${slug}]`)\n } else if (token.pattern === '.*') {\n // An optional catch-all slug\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.pattern === '.+') {\n // A catch-all slug\n append(`${token.prefix}[...${slug}]`)\n } else {\n // Other regex patterns are not supported. Skip this route.\n return []\n }\n } else if (token.modifier === '?') {\n if (/^[a-zA-Z0-9_/]*$/.test(token.pattern)) {\n // An optional slug with plain text only, fork the route.\n append(token.prefix)\n fork(token.pattern)\n } else {\n // Optional modifier `?` and regex patterns are not supported.\n return []\n }\n }\n } else if (typeof token === 'string') {\n append(token)\n }\n }\n\n // Ensure leading slash\n return possibleNormalizedRoutes.map((route) =>\n route.startsWith('/') ? route : '/' + route\n )\n}\n\n/**\n * Extracts route parameters from a route pattern\n */\nexport function extractRouteParams(route: string) {\n const regex = getRouteRegex(route)\n return regex.groups\n}\n\n/**\n * Resolves an intercepting route to its canonical equivalent\n * Example: /gallery/test/(..)photo/[id] -> /gallery/photo/[id]\n */\nfunction resolveInterceptingRoute(route: string): string {\n // Reuse centralized interception route normalization logic\n try {\n if (!isInterceptionRouteAppPath(route)) return route\n const { interceptedRoute } = extractInterceptionRouteInformation(route)\n return interceptedRoute\n } catch {\n // If parsing fails, fall back to the original route\n return route\n }\n}\n\n/**\n * Creates a route types manifest from processed route data\n * (used for both build and dev)\n */\nexport async function createRouteTypesManifest({\n dir,\n pageRoutes,\n appRoutes,\n appRouteHandlers,\n pageApiRoutes,\n layoutRoutes,\n slots,\n redirects,\n rewrites,\n validatorFilePath,\n}: {\n dir: string\n pageRoutes: Array<{ route: string; filePath: string }>\n appRoutes: Array<{ route: string; filePath: string }>\n appRouteHandlers: Array<{ route: string; filePath: string }>\n pageApiRoutes: Array<{ route: string; filePath: string }>\n layoutRoutes: Array<{ route: string; filePath: string }>\n slots: Array<{ name: string; parent: string }>\n redirects?: NextConfigComplete['redirects']\n rewrites?: NextConfigComplete['rewrites']\n validatorFilePath?: string\n}): Promise<RouteTypesManifest> {\n // Helper function to calculate the correct relative path\n const getRelativePath = (filePath: string) => {\n if (validatorFilePath) {\n // For validator generation, calculate path relative to validator directory\n return path.relative(path.dirname(validatorFilePath), filePath)\n }\n // For other uses, calculate path relative to project directory\n return path.relative(dir, filePath)\n }\n\n const manifest: RouteTypesManifest = {\n appRoutes: {},\n pageRoutes: {},\n layoutRoutes: {},\n appRouteHandlerRoutes: {},\n redirectRoutes: {},\n rewriteRoutes: {},\n appRouteHandlers: new Set(\n appRouteHandlers.map(({ filePath }) => getRelativePath(filePath))\n ),\n pageApiRoutes: new Set(\n pageApiRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n appPagePaths: new Set(\n appRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n pagesRouterPagePaths: new Set(\n pageRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n layoutPaths: new Set(\n layoutRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n filePathToRoute: new Map([\n ...appRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...layoutRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...appRouteHandlers.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...pageRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), route] as [string, string]\n ),\n ...pageApiRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), route] as [string, string]\n ),\n ]),\n }\n\n // Process page routes\n for (const { route, filePath } of pageRoutes) {\n manifest.pageRoutes[route] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(route),\n }\n }\n\n // Process layout routes\n for (const { route, filePath } of layoutRoutes) {\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.layoutRoutes[resolvedRoute]) {\n manifest.layoutRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n slots: [],\n }\n }\n }\n\n // Process slots\n for (const slot of slots) {\n if (manifest.layoutRoutes[slot.parent]) {\n manifest.layoutRoutes[slot.parent].slots.push(slot.name)\n }\n }\n\n // Process app routes\n for (const { route, filePath } of appRoutes) {\n // Don't include metadata routes or pages\n if (\n !filePath.endsWith('page.ts') &&\n !filePath.endsWith('page.tsx') &&\n !filePath.endsWith('.mdx') &&\n !filePath.endsWith('.md')\n ) {\n continue\n }\n\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRoutes[resolvedRoute]) {\n manifest.appRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process app route handlers\n for (const { route, filePath } of appRouteHandlers) {\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRouteHandlerRoutes[resolvedRoute]) {\n manifest.appRouteHandlerRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process redirects\n if (typeof redirects === 'function') {\n const rd = await redirects()\n\n for (const item of rd) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.redirectRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n // Process rewrites\n if (typeof rewrites === 'function') {\n const rw = await rewrites()\n\n const allSources = Array.isArray(rw)\n ? rw\n : [\n ...(rw?.beforeFiles || []),\n ...(rw?.afterFiles || []),\n ...(rw?.fallback || []),\n ]\n\n for (const item of allSources) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.rewriteRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n return manifest\n}\n\nexport async function writeRouteTypesManifest(\n manifest: RouteTypesManifest,\n filePath: string,\n config: NextConfigComplete\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n // Write the main routes.d.ts file\n await fs.promises.writeFile(filePath, generateRouteTypesFile(manifest))\n\n // Write the link.d.ts file if typedRoutes is enabled\n if (config.experimental?.typedRoutes === true) {\n const linkTypesPath = path.join(dirname, 'link.d.ts')\n await fs.promises.writeFile(linkTypesPath, generateLinkTypesFile(manifest))\n }\n}\n\nexport async function writeValidatorFile(\n manifest: RouteTypesManifest,\n filePath: string\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n await fs.promises.writeFile(filePath, generateValidatorFile(manifest))\n}\n"],"names":["path","getRouteRegex","fs","generateRouteTypesFile","generateLinkTypesFile","generateValidatorFile","tryToParsePath","extractInterceptionRouteInformation","isInterceptionRouteAppPath","convertCustomRouteSource","source","parseResult","error","tokens","startsWith","possibleNormalizedRoutes","slugCnt","append","suffix","i","length","fork","currentLength","push","token","slug","name","modifier","prefix","pattern","test","map","route","extractRouteParams","regex","groups","resolveInterceptingRoute","interceptedRoute","createRouteTypesManifest","dir","pageRoutes","appRoutes","appRouteHandlers","pageApiRoutes","layoutRoutes","slots","redirects","rewrites","validatorFilePath","getRelativePath","filePath","relative","dirname","manifest","appRouteHandlerRoutes","redirectRoutes","rewriteRoutes","Set","appPagePaths","pagesRouterPagePaths","layoutPaths","filePathToRoute","Map","resolvedRoute","slot","parent","endsWith","rd","item","possibleRoutes","rw","allSources","Array","isArray","beforeFiles","afterFiles","fallback","writeRouteTypesManifest","config","existsSync","promises","mkdir","recursive","writeFile","experimental","typedRoutes","linkTypesPath","join","writeValidatorFile"],"mappings":"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","ignoreList":[0]}