| self.__BUILD_MANIFEST = { | ||
| "__rewrites": { | ||
| "afterFiles": [], | ||
| "beforeFiles": [], | ||
| "fallback": [] | ||
| }, | ||
| "sortedPages": [ | ||
| "/_app", | ||
| "/_error" | ||
| ] | ||
| };self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() |
| self.__MIDDLEWARE_MATCHERS = [];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB() |
| self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() |
| import { createAsyncLocalStorage } from '../../app-render/async-local-storage'; | ||
| // This storage covers the part of BaseServer request handling that runs before | ||
| // App Render creates workAsyncStorage. Once available, workStore remains the | ||
| // primary identity source for locally recorded spans. | ||
| const REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY = Symbol.for('@next/request-insights-identity-storage'); | ||
| function getRequestInsightsIdentityStorage() { | ||
| const globalStore = globalThis; | ||
| return globalStore[REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY] ??= createAsyncLocalStorage(); | ||
| } | ||
| export function runWithRequestInsightsIdentity(identity, fn) { | ||
| return getRequestInsightsIdentityStorage().run(identity, fn); | ||
| } | ||
| export function getRequestInsightsIdentity() { | ||
| return getRequestInsightsIdentityStorage().getStore(); | ||
| } | ||
| //# sourceMappingURL=request-insights-identity.js.map |
| {"version":3,"sources":["../../../../../src/server/lib/trace/request-insights-identity.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\nimport { createAsyncLocalStorage } from '../../app-render/async-local-storage'\n\nexport type RequestInsightsIdentity = {\n requestId: string\n htmlRequestId: string\n url: string | undefined\n}\n\n// This storage covers the part of BaseServer request handling that runs before\n// App Render creates workAsyncStorage. Once available, workStore remains the\n// primary identity source for locally recorded spans.\nconst REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY = Symbol.for(\n '@next/request-insights-identity-storage'\n)\n\nfunction getRequestInsightsIdentityStorage(): AsyncLocalStorage<RequestInsightsIdentity> {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY]?: AsyncLocalStorage<RequestInsightsIdentity>\n }\n\n return (globalStore[REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY] ??=\n createAsyncLocalStorage())\n}\n\nexport function runWithRequestInsightsIdentity<T>(\n identity: RequestInsightsIdentity,\n fn: () => T\n): T {\n return getRequestInsightsIdentityStorage().run(identity, fn)\n}\n\nexport function getRequestInsightsIdentity():\n | RequestInsightsIdentity\n | undefined {\n return getRequestInsightsIdentityStorage().getStore()\n}\n"],"names":["createAsyncLocalStorage","REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY","Symbol","for","getRequestInsightsIdentityStorage","globalStore","globalThis","runWithRequestInsightsIdentity","identity","fn","run","getRequestInsightsIdentity","getStore"],"mappings":"AACA,SAASA,uBAAuB,QAAQ,uCAAsC;AAQ9E,+EAA+E;AAC/E,6EAA6E;AAC7E,sDAAsD;AACtD,MAAMC,wCAAwCC,OAAOC,GAAG,CACtD;AAGF,SAASC;IACP,MAAMC,cAAcC;IAIpB,OAAQD,WAAW,CAACJ,sCAAsC,KACxDD;AACJ;AAEA,OAAO,SAASO,+BACdC,QAAiC,EACjCC,EAAW;IAEX,OAAOL,oCAAoCM,GAAG,CAACF,UAAUC;AAC3D;AAEA,OAAO,SAASE;IAGd,OAAOP,oCAAoCQ,QAAQ;AACrD","ignoreList":[0]} |
| export type RequestInsightsIdentity = { | ||
| requestId: string; | ||
| htmlRequestId: string; | ||
| url: string | undefined; | ||
| }; | ||
| export declare function runWithRequestInsightsIdentity<T>(identity: RequestInsightsIdentity, fn: () => T): T; | ||
| export declare function getRequestInsightsIdentity(): RequestInsightsIdentity | undefined; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| 0 && (module.exports = { | ||
| getRequestInsightsIdentity: null, | ||
| runWithRequestInsightsIdentity: null | ||
| }); | ||
| function _export(target, all) { | ||
| for(var name in all)Object.defineProperty(target, name, { | ||
| enumerable: true, | ||
| get: all[name] | ||
| }); | ||
| } | ||
| _export(exports, { | ||
| getRequestInsightsIdentity: function() { | ||
| return getRequestInsightsIdentity; | ||
| }, | ||
| runWithRequestInsightsIdentity: function() { | ||
| return runWithRequestInsightsIdentity; | ||
| } | ||
| }); | ||
| const _asynclocalstorage = require("../../app-render/async-local-storage"); | ||
| // This storage covers the part of BaseServer request handling that runs before | ||
| // App Render creates workAsyncStorage. Once available, workStore remains the | ||
| // primary identity source for locally recorded spans. | ||
| const REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY = Symbol.for('@next/request-insights-identity-storage'); | ||
| function getRequestInsightsIdentityStorage() { | ||
| const globalStore = globalThis; | ||
| return globalStore[REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY] ??= (0, _asynclocalstorage.createAsyncLocalStorage)(); | ||
| } | ||
| function runWithRequestInsightsIdentity(identity, fn) { | ||
| return getRequestInsightsIdentityStorage().run(identity, fn); | ||
| } | ||
| function getRequestInsightsIdentity() { | ||
| return getRequestInsightsIdentityStorage().getStore(); | ||
| } | ||
| //# sourceMappingURL=request-insights-identity.js.map |
| {"version":3,"sources":["../../../../src/server/lib/trace/request-insights-identity.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\nimport { createAsyncLocalStorage } from '../../app-render/async-local-storage'\n\nexport type RequestInsightsIdentity = {\n requestId: string\n htmlRequestId: string\n url: string | undefined\n}\n\n// This storage covers the part of BaseServer request handling that runs before\n// App Render creates workAsyncStorage. Once available, workStore remains the\n// primary identity source for locally recorded spans.\nconst REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY = Symbol.for(\n '@next/request-insights-identity-storage'\n)\n\nfunction getRequestInsightsIdentityStorage(): AsyncLocalStorage<RequestInsightsIdentity> {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY]?: AsyncLocalStorage<RequestInsightsIdentity>\n }\n\n return (globalStore[REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY] ??=\n createAsyncLocalStorage())\n}\n\nexport function runWithRequestInsightsIdentity<T>(\n identity: RequestInsightsIdentity,\n fn: () => T\n): T {\n return getRequestInsightsIdentityStorage().run(identity, fn)\n}\n\nexport function getRequestInsightsIdentity():\n | RequestInsightsIdentity\n | undefined {\n return getRequestInsightsIdentityStorage().getStore()\n}\n"],"names":["getRequestInsightsIdentity","runWithRequestInsightsIdentity","REQUEST_INSIGHTS_IDENTITY_STORAGE_KEY","Symbol","for","getRequestInsightsIdentityStorage","globalStore","globalThis","createAsyncLocalStorage","identity","fn","run","getStore"],"mappings":";;;;;;;;;;;;;;;IAgCgBA,0BAA0B;eAA1BA;;IAPAC,8BAA8B;eAA9BA;;;mCAxBwB;AAQxC,+EAA+E;AAC/E,6EAA6E;AAC7E,sDAAsD;AACtD,MAAMC,wCAAwCC,OAAOC,GAAG,CACtD;AAGF,SAASC;IACP,MAAMC,cAAcC;IAIpB,OAAQD,WAAW,CAACJ,sCAAsC,KACxDM,IAAAA,0CAAuB;AAC3B;AAEO,SAASP,+BACdQ,QAAiC,EACjCC,EAAW;IAEX,OAAOL,oCAAoCM,GAAG,CAACF,UAAUC;AAC3D;AAEO,SAASV;IAGd,OAAOK,oCAAoCO,QAAQ;AACrD","ignoreList":[0]} |
@@ -84,2 +84,3 @@ "use strict"; | ||
| 'process.env.__NEXT_APP_NEW_SCROLL_HANDLER': Boolean(config.experimental.appNewScrollHandler), | ||
| 'process.env.__NEXT_TURBOPACK_SHARED_RUNTIME': Boolean(config.experimental.turbopackSharedRuntime), | ||
| 'process.env.__NEXT_PPR': isPPREnabled, | ||
@@ -207,3 +208,2 @@ 'process.env.__NEXT_CACHE_COMPONENTS': isCacheComponentsEnabled, | ||
| 'process.env.__NEXT_INSTRUMENTATION_CLIENT_ROUTER_TRANSITION_EVENTS': config.experimental.instrumentationClientRouterTransitionEvents ?? false, | ||
| 'process.env.__NEXT_APP_SHELLS': config.experimental.appShells ?? false, | ||
| 'process.env.__NEXT_VARY_PARAMS': config.experimental.varyParams ?? false, | ||
@@ -210,0 +210,0 @@ 'process.env.__NEXT_EXPOSE_TESTING_API': dev || config.experimental.exposeTestingApiInProductionBuild === true, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/build/define-env.ts"],"sourcesContent":["import type {\n I18NConfig,\n I18NDomains,\n NextConfigComplete,\n} from '../server/config-shared'\nimport type { ProxyMatcher } from './analysis/get-page-static-info'\nimport type { Rewrite } from '../lib/load-custom-routes'\nimport path from 'node:path'\nimport { needsExperimentalReact } from '../lib/needs-experimental-react'\nimport { checkIsAppPPREnabled } from '../server/lib/experimental/ppr'\nimport {\n getNextConfigEnv,\n getNextPublicEnvironmentVariables,\n} from '../lib/static-env'\n\ntype BloomFilter = ReturnType<\n import('../shared/lib/bloom-filter').BloomFilter['export']\n>\n\nexport interface DefineEnvOptions {\n isTurbopack: boolean\n clientRouterFilters?: {\n staticFilter: BloomFilter\n dynamicFilter: BloomFilter\n }\n config: NextConfigComplete\n dev: boolean\n distDir: string\n projectPath: string\n fetchCacheKeyPrefix: string | undefined\n hasRewrites: boolean\n isClient: boolean\n isEdgeServer: boolean\n isNodeServer: boolean\n middlewareMatchers: ProxyMatcher[] | undefined\n omitNonDeterministic?: boolean\n rewrites: {\n beforeFiles: Rewrite[]\n afterFiles: Rewrite[]\n fallback: Rewrite[]\n }\n}\n\nconst DEFINE_ENV_EXPRESSION = Symbol('DEFINE_ENV_EXPRESSION')\n\ninterface DefineEnv {\n [key: string]:\n | string\n | number\n | string[]\n | boolean\n | { [DEFINE_ENV_EXPRESSION]: string }\n | ProxyMatcher[]\n | BloomFilter\n | Partial<NextConfigComplete['images']>\n | NextConfigComplete['cacheLife']\n | I18NDomains\n | I18NConfig\n}\n\ninterface SerializedDefineEnv {\n [key: string]: string\n}\n\n/**\n * Serializes the DefineEnv config so that it can be inserted into the code by Webpack/Turbopack, JSON stringifies each value.\n */\nfunction serializeDefineEnv(defineEnv: DefineEnv): SerializedDefineEnv {\n const defineEnvStringified: SerializedDefineEnv = Object.fromEntries(\n Object.entries(defineEnv).map(([key, value]) => [\n key,\n typeof value === 'object' && DEFINE_ENV_EXPRESSION in value\n ? value[DEFINE_ENV_EXPRESSION]\n : JSON.stringify(value),\n ])\n )\n return defineEnvStringified\n}\n\nfunction getImageConfig(\n config: NextConfigComplete,\n dev: boolean\n): { 'process.env.__NEXT_IMAGE_OPTS': Partial<NextConfigComplete['images']> } {\n return {\n 'process.env.__NEXT_IMAGE_OPTS': {\n deviceSizes: config.images.deviceSizes,\n imageSizes: config.images.imageSizes,\n qualities: config.images.qualities,\n path: config.images.path,\n loader: config.images.loader,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n unoptimized: config?.images?.unoptimized,\n ...(dev\n ? {\n // additional config in dev to allow validating on the client\n domains: config.images.domains,\n remotePatterns: config.images?.remotePatterns,\n localPatterns: config.images?.localPatterns,\n output: config.output,\n }\n : {}),\n },\n }\n}\n\nexport function getDefineEnv({\n isTurbopack,\n clientRouterFilters,\n config,\n dev,\n distDir,\n projectPath,\n fetchCacheKeyPrefix,\n hasRewrites,\n isClient,\n isEdgeServer,\n isNodeServer,\n middlewareMatchers,\n omitNonDeterministic,\n rewrites,\n}: DefineEnvOptions): SerializedDefineEnv {\n const nextPublicEnv = getNextPublicEnvironmentVariables()\n const nextConfigEnv = getNextConfigEnv(config)\n\n const isPPREnabled = checkIsAppPPREnabled(config.experimental.ppr)\n const isCacheComponentsEnabled = !!config.cacheComponents\n const isUseCacheEnabled = !!config.experimental.useCache\n\n const defineEnv: DefineEnv = {\n // internal field to identify the plugin config\n __NEXT_DEFINE_ENV: true,\n\n ...nextPublicEnv,\n ...nextConfigEnv,\n ...(!isEdgeServer\n ? {}\n : {\n EdgeRuntime:\n /**\n * Cloud providers can set this environment variable to allow users\n * and library authors to have different implementations based on\n * the runtime they are running with, if it's not using `edge-runtime`\n */\n process.env.NEXT_EDGE_RUNTIME_PROVIDER ?? 'edge-runtime',\n\n // process should be only { env: {...} } for edge runtime.\n // For ignore avoid warn on `process.emit` usage but directly omit it.\n 'process.emit': false,\n }),\n 'process.turbopack': isTurbopack,\n 'process.env.TURBOPACK': isTurbopack,\n 'process.env.__NEXT_BUNDLER': isTurbopack\n ? 'Turbopack'\n : process.env.NEXT_RSPACK\n ? 'Rspack'\n : 'Webpack',\n // TODO: enforce `NODE_ENV` on `process.env`, and add a test:\n 'process.env.NODE_ENV':\n dev || config.experimental.allowDevelopmentBuild\n ? 'development'\n : 'production',\n 'process.env.__NEXT_DEV_SERVER': dev ? '1' : '',\n 'process.env.__NEXT_DISABLE_DEV_OVERLAY_UX':\n process.env.NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX === '1',\n 'process.env.NEXT_RUNTIME': isEdgeServer\n ? 'edge'\n : isNodeServer\n ? 'nodejs'\n : '',\n 'process.env.NEXT_MINIMAL': '',\n 'process.env.__NEXT_APP_NAV_FAIL_HANDLING': Boolean(\n config.experimental.appNavFailHandling\n ),\n 'process.env.__NEXT_APP_NEW_SCROLL_HANDLER': Boolean(\n config.experimental.appNewScrollHandler\n ),\n 'process.env.__NEXT_PPR': isPPREnabled,\n 'process.env.__NEXT_CACHE_COMPONENTS': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS': Boolean(\n config.experimental.cachedNavigations\n ),\n 'process.env.__NEXT_INSTANT_NAV_TOGGLE': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_COLD_CACHE_BADGE': Boolean(\n config.experimental.coldCacheBadge\n ),\n 'process.env.__NEXT_REQUEST_INSIGHTS':\n dev && !!config.experimental.requestInsights,\n 'process.env.__NEXT_USE_CACHE': isUseCacheEnabled,\n 'process.env.__NEXT_USE_NODE_STREAMS': isEdgeServer ? false : true,\n\n 'process.env.NEXT_SUPPORTS_IMMUTABLE_ASSETS':\n config.experimental.supportsImmutableAssets || false,\n\n ...(config.experimental?.useSkewCookie || !config.deploymentId\n ? {\n 'process.env.NEXT_DEPLOYMENT_ID': false,\n }\n : isClient\n ? isTurbopack\n ? {\n // This is set at runtime by packages/next/src/client/register-deployment-id-global.ts\n 'process.env.NEXT_DEPLOYMENT_ID': {\n [DEFINE_ENV_EXPRESSION]: 'globalThis.NEXT_DEPLOYMENT_ID',\n },\n }\n : {\n // For Webpack, we currently don't use the non-inlining globalThis.NEXT_DEPLOYMENT_ID\n // approach because we cannot forward this global variable to web workers easily.\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }\n : config.experimental?.runtimeServerDeploymentId\n ? {\n // Don't inline at all, keep process.env.NEXT_DEPLOYMENT_ID as is\n }\n : {\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }),\n\n // Propagates the `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` environment\n // variable to the client.\n 'process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING':\n process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING || false,\n 'process.env.__NEXT_FETCH_CACHE_KEY_PREFIX': fetchCacheKeyPrefix ?? '',\n ...(isTurbopack\n ? {}\n : {\n 'process.env.__NEXT_MIDDLEWARE_MATCHERS': middlewareMatchers ?? [],\n }),\n 'process.env.__NEXT_MANUAL_CLIENT_BASE_PATH':\n config.experimental.manualClientBasePath ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.dynamic))\n ? 0\n : config.experimental.staleTimes?.dynamic\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.static))\n ? 5 * 60 // 5 minutes\n : config.experimental.staleTimes?.static\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED':\n config.experimental.clientRouterFilter ?? true,\n 'process.env.__NEXT_CLIENT_ROUTER_S_FILTER':\n clientRouterFilters?.staticFilter ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_D_FILTER':\n clientRouterFilters?.dynamicFilter ?? false,\n 'process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS': Boolean(\n config.experimental.validateRSCRequestHeaders\n ),\n 'process.env.__NEXT_SERVER_COMPONENTS_HMR_CANCELLATION': Boolean(\n config.experimental.serverComponentsHmrCancellation\n ),\n 'process.env.__NEXT_DYNAMIC_ON_HOVER': Boolean(\n config.experimental.dynamicOnHover\n ),\n 'process.env.__NEXT_USE_OFFLINE': Boolean(config.experimental.useOffline),\n 'process.env.__NEXT_PREFETCH_INLINING': Boolean(\n config.experimental.prefetchInlining\n ),\n 'process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE':\n config.experimental.optimisticClientCache ?? true,\n 'process.env.__NEXT_MIDDLEWARE_PREFETCH':\n config.experimental.proxyPrefetch ?? 'flexible',\n 'process.env.__NEXT_CROSS_ORIGIN': config.crossOrigin,\n 'process.browser': isClient,\n 'process.env.__NEXT_TEST_MODE': process.env.__NEXT_TEST_MODE ?? false,\n // This is used in client/dev-error-overlay/hot-dev-client.js to replace the dist directory\n ...(dev && (isClient ?? isEdgeServer)\n ? {\n 'process.env.__NEXT_DIST_DIR': distDir,\n }\n : {}),\n // This is used in devtools to strip the project path in edge runtime,\n // as there's only a dummy `dir` value (`.`) as edge runtime doesn't have concept of file system.\n ...(dev && isEdgeServer\n ? {\n 'process.env.__NEXT_EDGE_PROJECT_DIR': isTurbopack\n ? path.relative(process.cwd(), projectPath)\n : projectPath,\n }\n : {}),\n 'process.env.__NEXT_BASE_PATH': config.basePath,\n 'process.env.__NEXT_CASE_SENSITIVE_ROUTES': Boolean(\n config.experimental.caseSensitiveRoutes\n ),\n 'process.env.__NEXT_REWRITES': rewrites as any,\n 'process.env.__NEXT_TRAILING_SLASH': config.trailingSlash,\n 'process.env.__NEXT_DEV_INDICATOR': config.devIndicators !== false,\n 'process.env.__NEXT_DEV_INDICATOR_POSITION':\n config.devIndicators === false\n ? 'bottom-left' // This will not be used as the indicator is disabled.\n : (config.devIndicators.position ?? 'bottom-left'),\n 'process.env.__NEXT_STRICT_MODE':\n config.reactStrictMode === null ? false : config.reactStrictMode,\n 'process.env.__NEXT_STRICT_MODE_APP':\n // When next.config.js does not have reactStrictMode it's enabled by default.\n config.reactStrictMode === null ? true : config.reactStrictMode,\n 'process.env.__NEXT_OPTIMIZE_CSS':\n (config.experimental.optimizeCss && !dev) ?? false,\n 'process.env.__NEXT_SCRIPT_WORKERS':\n (config.experimental.nextScriptWorkers && !dev) ?? false,\n 'process.env.__NEXT_SCROLL_RESTORATION':\n config.experimental.scrollRestoration ?? false,\n ...getImageConfig(config, dev),\n 'process.env.__NEXT_ROUTER_BASEPATH': config.basePath,\n 'process.env.__NEXT_HAS_REWRITES': hasRewrites,\n 'process.env.__NEXT_CONFIG_OUTPUT': config.output,\n 'process.env.__NEXT_I18N_SUPPORT': !!config.i18n,\n 'process.env.__NEXT_I18N_DOMAINS': config.i18n?.domains ?? false,\n 'process.env.__NEXT_I18N_CONFIG': config.i18n || '',\n 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE':\n config.skipProxyUrlNormalize,\n 'process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE':\n config.experimental.externalProxyRewritesResolve ?? false,\n 'process.env.__NEXT_MANUAL_TRAILING_SLASH':\n config.skipTrailingSlashRedirect,\n 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION':\n (config.experimental.webVitalsAttribution &&\n config.experimental.webVitalsAttribution.length > 0) ??\n false,\n 'process.env.__NEXT_WEB_VITALS_ATTRIBUTION':\n config.experimental.webVitalsAttribution ?? false,\n 'process.env.__NEXT_LINK_NO_TOUCH_START':\n config.experimental.linkNoTouchStart ?? false,\n 'process.env.__NEXT_ASSET_PREFIX': config.assetPrefix,\n 'process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS':\n !!config.experimental.authInterrupts,\n 'process.env.__NEXT_TELEMETRY_DISABLED': Boolean(\n process.env.NEXT_TELEMETRY_DISABLED\n ),\n ...(isNodeServer || isEdgeServer\n ? {\n // Fix bad-actors in the npm ecosystem (e.g. `node-formidable`)\n // This is typically found in unmaintained modules from the\n // pre-webpack era (common in server-side code)\n 'global.GENTLY': false,\n }\n : undefined),\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_EXPERIMENTAL_REACT':\n needsExperimentalReact(config),\n }\n : undefined),\n\n 'process.env.__NEXT_MULTI_ZONE_DRAFT_MODE':\n config.experimental.multiZoneDraftMode ?? false,\n 'process.env.__NEXT_TRUST_HOST_HEADER':\n config.experimental.trustHostHeader ?? false,\n 'process.env.__NEXT_ALLOWED_REVALIDATE_HEADERS':\n config.experimental.allowedRevalidateHeaderKeys ?? [],\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_RELATIVE_DIST_DIR': config.distDir,\n 'process.env.__NEXT_RELATIVE_PROJECT_DIR': path.relative(\n process.cwd(),\n projectPath\n ),\n }\n : {}),\n\n 'process.env.__NEXT_BROWSER_DEBUG_INFO_IN_TERMINAL': JSON.stringify(\n (config.logging && config.logging.browserToTerminal) || false\n ),\n 'process.env.__NEXT_MCP_SERVER': !!config.experimental.mcpServer,\n\n // The devtools need to know whether or not to show an option to clear the\n // bundler cache. This option may be removed later once Turbopack's\n // filesystem cache feature is more stable.\n //\n // This environment value is currently best-effort:\n // - It's possible to disable the webpack filesystem cache, but it's\n // unlikely for a user to do that.\n // - Rspack's filesystem cache is unstable and requires a different\n // configuration than webpack to enable (which we don't do).\n //\n // In the worst case we'll show an option to clear the cache, but it'll be a\n // no-op that just restarts the development server.\n 'process.env.__NEXT_BUNDLER_HAS_PERSISTENT_CACHE':\n !isTurbopack ||\n (config.experimental.turbopackFileSystemCacheForDev ?? false),\n 'process.env.__NEXT_REACT_DEBUG_CHANNEL':\n config.experimental.reactDebugChannel ?? false,\n 'process.env.__NEXT_TRANSITION_INDICATOR':\n config.experimental.transitionIndicator ?? false,\n 'process.env.__NEXT_GESTURE_TRANSITION':\n config.experimental.gestureTransition ?? false,\n 'process.env.__NEXT_OPTIMISTIC_ROUTING':\n config.experimental.optimisticRouting ?? false,\n 'process.env.__NEXT_INSTRUMENTATION_CLIENT_ROUTER_TRANSITION_EVENTS':\n config.experimental.instrumentationClientRouterTransitionEvents ?? false,\n 'process.env.__NEXT_APP_SHELLS': config.experimental.appShells ?? false,\n 'process.env.__NEXT_VARY_PARAMS': config.experimental.varyParams ?? false,\n 'process.env.__NEXT_EXPOSE_TESTING_API':\n dev || config.experimental.exposeTestingApiInProductionBuild === true,\n 'process.env.__NEXT_CACHE_LIFE': config.cacheLife,\n 'process.env.__NEXT_CLIENT_PARAM_PARSING_ORIGINS':\n config.experimental.clientParamParsingOrigins || [],\n }\n\n const userDefines = config.compiler?.define ?? {}\n for (const key in userDefines) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.define\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefines[key]\n }\n\n if (isNodeServer || isEdgeServer) {\n const userDefinesServer = config.compiler?.defineServer ?? {}\n for (const key in userDefinesServer) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.defineServer\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefinesServer[key]\n }\n }\n\n const serializedDefineEnv = serializeDefineEnv(defineEnv)\n\n // we delay inlining these values until after the build\n // with flying shuttle enabled so we can update them\n // without invalidating entries\n if (!dev && omitNonDeterministic) {\n // client uses window. instead of leaving process.env\n // in case process isn't polyfilled on client already\n // since by this point it won't be added by webpack\n const safeKey = (key: string) =>\n isClient ? `window.${key.split('.').pop()}` : key\n\n for (const key in nextPublicEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n for (const key in nextConfigEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n if (!config.experimental.runtimeServerDeploymentId) {\n for (const key of ['process.env.NEXT_DEPLOYMENT_ID']) {\n serializedDefineEnv[key] = safeKey(key)\n }\n }\n }\n\n return serializedDefineEnv\n}\n"],"names":["getDefineEnv","DEFINE_ENV_EXPRESSION","Symbol","serializeDefineEnv","defineEnv","defineEnvStringified","Object","fromEntries","entries","map","key","value","JSON","stringify","getImageConfig","config","dev","deviceSizes","images","imageSizes","qualities","path","loader","dangerouslyAllowSVG","unoptimized","domains","remotePatterns","localPatterns","output","isTurbopack","clientRouterFilters","distDir","projectPath","fetchCacheKeyPrefix","hasRewrites","isClient","isEdgeServer","isNodeServer","middlewareMatchers","omitNonDeterministic","rewrites","nextPublicEnv","getNextPublicEnvironmentVariables","nextConfigEnv","getNextConfigEnv","isPPREnabled","checkIsAppPPREnabled","experimental","ppr","isCacheComponentsEnabled","cacheComponents","isUseCacheEnabled","useCache","__NEXT_DEFINE_ENV","EdgeRuntime","process","env","NEXT_EDGE_RUNTIME_PROVIDER","NEXT_RSPACK","allowDevelopmentBuild","NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX","Boolean","appNavFailHandling","appNewScrollHandler","cachedNavigations","coldCacheBadge","requestInsights","supportsImmutableAssets","useSkewCookie","deploymentId","runtimeServerDeploymentId","__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING","manualClientBasePath","isNaN","Number","staleTimes","dynamic","static","clientRouterFilter","staticFilter","dynamicFilter","validateRSCRequestHeaders","serverComponentsHmrCancellation","dynamicOnHover","useOffline","prefetchInlining","optimisticClientCache","proxyPrefetch","crossOrigin","__NEXT_TEST_MODE","relative","cwd","basePath","caseSensitiveRoutes","trailingSlash","devIndicators","position","reactStrictMode","optimizeCss","nextScriptWorkers","scrollRestoration","i18n","skipProxyUrlNormalize","externalProxyRewritesResolve","skipTrailingSlashRedirect","webVitalsAttribution","length","linkNoTouchStart","assetPrefix","authInterrupts","NEXT_TELEMETRY_DISABLED","undefined","needsExperimentalReact","multiZoneDraftMode","trustHostHeader","allowedRevalidateHeaderKeys","logging","browserToTerminal","mcpServer","turbopackFileSystemCacheForDev","reactDebugChannel","transitionIndicator","gestureTransition","optimisticRouting","instrumentationClientRouterTransitionEvents","appShells","varyParams","exposeTestingApiInProductionBuild","cacheLife","clientParamParsingOrigins","userDefines","compiler","define","hasOwnProperty","Error","userDefinesServer","defineServer","serializedDefineEnv","safeKey","split","pop"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../src/build/define-env.ts"],"sourcesContent":["import type {\n I18NConfig,\n I18NDomains,\n NextConfigComplete,\n} from '../server/config-shared'\nimport type { ProxyMatcher } from './analysis/get-page-static-info'\nimport type { Rewrite } from '../lib/load-custom-routes'\nimport path from 'node:path'\nimport { needsExperimentalReact } from '../lib/needs-experimental-react'\nimport { checkIsAppPPREnabled } from '../server/lib/experimental/ppr'\nimport {\n getNextConfigEnv,\n getNextPublicEnvironmentVariables,\n} from '../lib/static-env'\n\ntype BloomFilter = ReturnType<\n import('../shared/lib/bloom-filter').BloomFilter['export']\n>\n\nexport interface DefineEnvOptions {\n isTurbopack: boolean\n clientRouterFilters?: {\n staticFilter: BloomFilter\n dynamicFilter: BloomFilter\n }\n config: NextConfigComplete\n dev: boolean\n distDir: string\n projectPath: string\n fetchCacheKeyPrefix: string | undefined\n hasRewrites: boolean\n isClient: boolean\n isEdgeServer: boolean\n isNodeServer: boolean\n middlewareMatchers: ProxyMatcher[] | undefined\n omitNonDeterministic?: boolean\n rewrites: {\n beforeFiles: Rewrite[]\n afterFiles: Rewrite[]\n fallback: Rewrite[]\n }\n}\n\nconst DEFINE_ENV_EXPRESSION = Symbol('DEFINE_ENV_EXPRESSION')\n\ninterface DefineEnv {\n [key: string]:\n | string\n | number\n | string[]\n | boolean\n | { [DEFINE_ENV_EXPRESSION]: string }\n | ProxyMatcher[]\n | BloomFilter\n | Partial<NextConfigComplete['images']>\n | NextConfigComplete['cacheLife']\n | I18NDomains\n | I18NConfig\n}\n\ninterface SerializedDefineEnv {\n [key: string]: string\n}\n\n/**\n * Serializes the DefineEnv config so that it can be inserted into the code by Webpack/Turbopack, JSON stringifies each value.\n */\nfunction serializeDefineEnv(defineEnv: DefineEnv): SerializedDefineEnv {\n const defineEnvStringified: SerializedDefineEnv = Object.fromEntries(\n Object.entries(defineEnv).map(([key, value]) => [\n key,\n typeof value === 'object' && DEFINE_ENV_EXPRESSION in value\n ? value[DEFINE_ENV_EXPRESSION]\n : JSON.stringify(value),\n ])\n )\n return defineEnvStringified\n}\n\nfunction getImageConfig(\n config: NextConfigComplete,\n dev: boolean\n): { 'process.env.__NEXT_IMAGE_OPTS': Partial<NextConfigComplete['images']> } {\n return {\n 'process.env.__NEXT_IMAGE_OPTS': {\n deviceSizes: config.images.deviceSizes,\n imageSizes: config.images.imageSizes,\n qualities: config.images.qualities,\n path: config.images.path,\n loader: config.images.loader,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n unoptimized: config?.images?.unoptimized,\n ...(dev\n ? {\n // additional config in dev to allow validating on the client\n domains: config.images.domains,\n remotePatterns: config.images?.remotePatterns,\n localPatterns: config.images?.localPatterns,\n output: config.output,\n }\n : {}),\n },\n }\n}\n\nexport function getDefineEnv({\n isTurbopack,\n clientRouterFilters,\n config,\n dev,\n distDir,\n projectPath,\n fetchCacheKeyPrefix,\n hasRewrites,\n isClient,\n isEdgeServer,\n isNodeServer,\n middlewareMatchers,\n omitNonDeterministic,\n rewrites,\n}: DefineEnvOptions): SerializedDefineEnv {\n const nextPublicEnv = getNextPublicEnvironmentVariables()\n const nextConfigEnv = getNextConfigEnv(config)\n\n const isPPREnabled = checkIsAppPPREnabled(config.experimental.ppr)\n const isCacheComponentsEnabled = !!config.cacheComponents\n const isUseCacheEnabled = !!config.experimental.useCache\n\n const defineEnv: DefineEnv = {\n // internal field to identify the plugin config\n __NEXT_DEFINE_ENV: true,\n\n ...nextPublicEnv,\n ...nextConfigEnv,\n ...(!isEdgeServer\n ? {}\n : {\n EdgeRuntime:\n /**\n * Cloud providers can set this environment variable to allow users\n * and library authors to have different implementations based on\n * the runtime they are running with, if it's not using `edge-runtime`\n */\n process.env.NEXT_EDGE_RUNTIME_PROVIDER ?? 'edge-runtime',\n\n // process should be only { env: {...} } for edge runtime.\n // For ignore avoid warn on `process.emit` usage but directly omit it.\n 'process.emit': false,\n }),\n 'process.turbopack': isTurbopack,\n 'process.env.TURBOPACK': isTurbopack,\n 'process.env.__NEXT_BUNDLER': isTurbopack\n ? 'Turbopack'\n : process.env.NEXT_RSPACK\n ? 'Rspack'\n : 'Webpack',\n // TODO: enforce `NODE_ENV` on `process.env`, and add a test:\n 'process.env.NODE_ENV':\n dev || config.experimental.allowDevelopmentBuild\n ? 'development'\n : 'production',\n 'process.env.__NEXT_DEV_SERVER': dev ? '1' : '',\n 'process.env.__NEXT_DISABLE_DEV_OVERLAY_UX':\n process.env.NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX === '1',\n 'process.env.NEXT_RUNTIME': isEdgeServer\n ? 'edge'\n : isNodeServer\n ? 'nodejs'\n : '',\n 'process.env.NEXT_MINIMAL': '',\n 'process.env.__NEXT_APP_NAV_FAIL_HANDLING': Boolean(\n config.experimental.appNavFailHandling\n ),\n 'process.env.__NEXT_APP_NEW_SCROLL_HANDLER': Boolean(\n config.experimental.appNewScrollHandler\n ),\n 'process.env.__NEXT_TURBOPACK_SHARED_RUNTIME': Boolean(\n config.experimental.turbopackSharedRuntime\n ),\n 'process.env.__NEXT_PPR': isPPREnabled,\n 'process.env.__NEXT_CACHE_COMPONENTS': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS': Boolean(\n config.experimental.cachedNavigations\n ),\n 'process.env.__NEXT_INSTANT_NAV_TOGGLE': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_COLD_CACHE_BADGE': Boolean(\n config.experimental.coldCacheBadge\n ),\n 'process.env.__NEXT_REQUEST_INSIGHTS':\n dev && !!config.experimental.requestInsights,\n 'process.env.__NEXT_USE_CACHE': isUseCacheEnabled,\n 'process.env.__NEXT_USE_NODE_STREAMS': isEdgeServer ? false : true,\n\n 'process.env.NEXT_SUPPORTS_IMMUTABLE_ASSETS':\n config.experimental.supportsImmutableAssets || false,\n\n ...(config.experimental?.useSkewCookie || !config.deploymentId\n ? {\n 'process.env.NEXT_DEPLOYMENT_ID': false,\n }\n : isClient\n ? isTurbopack\n ? {\n // This is set at runtime by packages/next/src/client/register-deployment-id-global.ts\n 'process.env.NEXT_DEPLOYMENT_ID': {\n [DEFINE_ENV_EXPRESSION]: 'globalThis.NEXT_DEPLOYMENT_ID',\n },\n }\n : {\n // For Webpack, we currently don't use the non-inlining globalThis.NEXT_DEPLOYMENT_ID\n // approach because we cannot forward this global variable to web workers easily.\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }\n : config.experimental?.runtimeServerDeploymentId\n ? {\n // Don't inline at all, keep process.env.NEXT_DEPLOYMENT_ID as is\n }\n : {\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }),\n\n // Propagates the `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` environment\n // variable to the client.\n 'process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING':\n process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING || false,\n 'process.env.__NEXT_FETCH_CACHE_KEY_PREFIX': fetchCacheKeyPrefix ?? '',\n ...(isTurbopack\n ? {}\n : {\n 'process.env.__NEXT_MIDDLEWARE_MATCHERS': middlewareMatchers ?? [],\n }),\n 'process.env.__NEXT_MANUAL_CLIENT_BASE_PATH':\n config.experimental.manualClientBasePath ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.dynamic))\n ? 0\n : config.experimental.staleTimes?.dynamic\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.static))\n ? 5 * 60 // 5 minutes\n : config.experimental.staleTimes?.static\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED':\n config.experimental.clientRouterFilter ?? true,\n 'process.env.__NEXT_CLIENT_ROUTER_S_FILTER':\n clientRouterFilters?.staticFilter ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_D_FILTER':\n clientRouterFilters?.dynamicFilter ?? false,\n 'process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS': Boolean(\n config.experimental.validateRSCRequestHeaders\n ),\n 'process.env.__NEXT_SERVER_COMPONENTS_HMR_CANCELLATION': Boolean(\n config.experimental.serverComponentsHmrCancellation\n ),\n 'process.env.__NEXT_DYNAMIC_ON_HOVER': Boolean(\n config.experimental.dynamicOnHover\n ),\n 'process.env.__NEXT_USE_OFFLINE': Boolean(config.experimental.useOffline),\n 'process.env.__NEXT_PREFETCH_INLINING': Boolean(\n config.experimental.prefetchInlining\n ),\n 'process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE':\n config.experimental.optimisticClientCache ?? true,\n 'process.env.__NEXT_MIDDLEWARE_PREFETCH':\n config.experimental.proxyPrefetch ?? 'flexible',\n 'process.env.__NEXT_CROSS_ORIGIN': config.crossOrigin,\n 'process.browser': isClient,\n 'process.env.__NEXT_TEST_MODE': process.env.__NEXT_TEST_MODE ?? false,\n // This is used in client/dev-error-overlay/hot-dev-client.js to replace the dist directory\n ...(dev && (isClient ?? isEdgeServer)\n ? {\n 'process.env.__NEXT_DIST_DIR': distDir,\n }\n : {}),\n // This is used in devtools to strip the project path in edge runtime,\n // as there's only a dummy `dir` value (`.`) as edge runtime doesn't have concept of file system.\n ...(dev && isEdgeServer\n ? {\n 'process.env.__NEXT_EDGE_PROJECT_DIR': isTurbopack\n ? path.relative(process.cwd(), projectPath)\n : projectPath,\n }\n : {}),\n 'process.env.__NEXT_BASE_PATH': config.basePath,\n 'process.env.__NEXT_CASE_SENSITIVE_ROUTES': Boolean(\n config.experimental.caseSensitiveRoutes\n ),\n 'process.env.__NEXT_REWRITES': rewrites as any,\n 'process.env.__NEXT_TRAILING_SLASH': config.trailingSlash,\n 'process.env.__NEXT_DEV_INDICATOR': config.devIndicators !== false,\n 'process.env.__NEXT_DEV_INDICATOR_POSITION':\n config.devIndicators === false\n ? 'bottom-left' // This will not be used as the indicator is disabled.\n : (config.devIndicators.position ?? 'bottom-left'),\n 'process.env.__NEXT_STRICT_MODE':\n config.reactStrictMode === null ? false : config.reactStrictMode,\n 'process.env.__NEXT_STRICT_MODE_APP':\n // When next.config.js does not have reactStrictMode it's enabled by default.\n config.reactStrictMode === null ? true : config.reactStrictMode,\n 'process.env.__NEXT_OPTIMIZE_CSS':\n (config.experimental.optimizeCss && !dev) ?? false,\n 'process.env.__NEXT_SCRIPT_WORKERS':\n (config.experimental.nextScriptWorkers && !dev) ?? false,\n 'process.env.__NEXT_SCROLL_RESTORATION':\n config.experimental.scrollRestoration ?? false,\n ...getImageConfig(config, dev),\n 'process.env.__NEXT_ROUTER_BASEPATH': config.basePath,\n 'process.env.__NEXT_HAS_REWRITES': hasRewrites,\n 'process.env.__NEXT_CONFIG_OUTPUT': config.output,\n 'process.env.__NEXT_I18N_SUPPORT': !!config.i18n,\n 'process.env.__NEXT_I18N_DOMAINS': config.i18n?.domains ?? false,\n 'process.env.__NEXT_I18N_CONFIG': config.i18n || '',\n 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE':\n config.skipProxyUrlNormalize,\n 'process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE':\n config.experimental.externalProxyRewritesResolve ?? false,\n 'process.env.__NEXT_MANUAL_TRAILING_SLASH':\n config.skipTrailingSlashRedirect,\n 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION':\n (config.experimental.webVitalsAttribution &&\n config.experimental.webVitalsAttribution.length > 0) ??\n false,\n 'process.env.__NEXT_WEB_VITALS_ATTRIBUTION':\n config.experimental.webVitalsAttribution ?? false,\n 'process.env.__NEXT_LINK_NO_TOUCH_START':\n config.experimental.linkNoTouchStart ?? false,\n 'process.env.__NEXT_ASSET_PREFIX': config.assetPrefix,\n 'process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS':\n !!config.experimental.authInterrupts,\n 'process.env.__NEXT_TELEMETRY_DISABLED': Boolean(\n process.env.NEXT_TELEMETRY_DISABLED\n ),\n ...(isNodeServer || isEdgeServer\n ? {\n // Fix bad-actors in the npm ecosystem (e.g. `node-formidable`)\n // This is typically found in unmaintained modules from the\n // pre-webpack era (common in server-side code)\n 'global.GENTLY': false,\n }\n : undefined),\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_EXPERIMENTAL_REACT':\n needsExperimentalReact(config),\n }\n : undefined),\n\n 'process.env.__NEXT_MULTI_ZONE_DRAFT_MODE':\n config.experimental.multiZoneDraftMode ?? false,\n 'process.env.__NEXT_TRUST_HOST_HEADER':\n config.experimental.trustHostHeader ?? false,\n 'process.env.__NEXT_ALLOWED_REVALIDATE_HEADERS':\n config.experimental.allowedRevalidateHeaderKeys ?? [],\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_RELATIVE_DIST_DIR': config.distDir,\n 'process.env.__NEXT_RELATIVE_PROJECT_DIR': path.relative(\n process.cwd(),\n projectPath\n ),\n }\n : {}),\n\n 'process.env.__NEXT_BROWSER_DEBUG_INFO_IN_TERMINAL': JSON.stringify(\n (config.logging && config.logging.browserToTerminal) || false\n ),\n 'process.env.__NEXT_MCP_SERVER': !!config.experimental.mcpServer,\n\n // The devtools need to know whether or not to show an option to clear the\n // bundler cache. This option may be removed later once Turbopack's\n // filesystem cache feature is more stable.\n //\n // This environment value is currently best-effort:\n // - It's possible to disable the webpack filesystem cache, but it's\n // unlikely for a user to do that.\n // - Rspack's filesystem cache is unstable and requires a different\n // configuration than webpack to enable (which we don't do).\n //\n // In the worst case we'll show an option to clear the cache, but it'll be a\n // no-op that just restarts the development server.\n 'process.env.__NEXT_BUNDLER_HAS_PERSISTENT_CACHE':\n !isTurbopack ||\n (config.experimental.turbopackFileSystemCacheForDev ?? false),\n 'process.env.__NEXT_REACT_DEBUG_CHANNEL':\n config.experimental.reactDebugChannel ?? false,\n 'process.env.__NEXT_TRANSITION_INDICATOR':\n config.experimental.transitionIndicator ?? false,\n 'process.env.__NEXT_GESTURE_TRANSITION':\n config.experimental.gestureTransition ?? false,\n 'process.env.__NEXT_OPTIMISTIC_ROUTING':\n config.experimental.optimisticRouting ?? false,\n 'process.env.__NEXT_INSTRUMENTATION_CLIENT_ROUTER_TRANSITION_EVENTS':\n config.experimental.instrumentationClientRouterTransitionEvents ?? false,\n 'process.env.__NEXT_VARY_PARAMS': config.experimental.varyParams ?? false,\n 'process.env.__NEXT_EXPOSE_TESTING_API':\n dev || config.experimental.exposeTestingApiInProductionBuild === true,\n 'process.env.__NEXT_CACHE_LIFE': config.cacheLife,\n 'process.env.__NEXT_CLIENT_PARAM_PARSING_ORIGINS':\n config.experimental.clientParamParsingOrigins || [],\n }\n\n const userDefines = config.compiler?.define ?? {}\n for (const key in userDefines) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.define\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefines[key]\n }\n\n if (isNodeServer || isEdgeServer) {\n const userDefinesServer = config.compiler?.defineServer ?? {}\n for (const key in userDefinesServer) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.defineServer\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefinesServer[key]\n }\n }\n\n const serializedDefineEnv = serializeDefineEnv(defineEnv)\n\n // we delay inlining these values until after the build\n // with flying shuttle enabled so we can update them\n // without invalidating entries\n if (!dev && omitNonDeterministic) {\n // client uses window. instead of leaving process.env\n // in case process isn't polyfilled on client already\n // since by this point it won't be added by webpack\n const safeKey = (key: string) =>\n isClient ? `window.${key.split('.').pop()}` : key\n\n for (const key in nextPublicEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n for (const key in nextConfigEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n if (!config.experimental.runtimeServerDeploymentId) {\n for (const key of ['process.env.NEXT_DEPLOYMENT_ID']) {\n serializedDefineEnv[key] = safeKey(key)\n }\n }\n }\n\n return serializedDefineEnv\n}\n"],"names":["getDefineEnv","DEFINE_ENV_EXPRESSION","Symbol","serializeDefineEnv","defineEnv","defineEnvStringified","Object","fromEntries","entries","map","key","value","JSON","stringify","getImageConfig","config","dev","deviceSizes","images","imageSizes","qualities","path","loader","dangerouslyAllowSVG","unoptimized","domains","remotePatterns","localPatterns","output","isTurbopack","clientRouterFilters","distDir","projectPath","fetchCacheKeyPrefix","hasRewrites","isClient","isEdgeServer","isNodeServer","middlewareMatchers","omitNonDeterministic","rewrites","nextPublicEnv","getNextPublicEnvironmentVariables","nextConfigEnv","getNextConfigEnv","isPPREnabled","checkIsAppPPREnabled","experimental","ppr","isCacheComponentsEnabled","cacheComponents","isUseCacheEnabled","useCache","__NEXT_DEFINE_ENV","EdgeRuntime","process","env","NEXT_EDGE_RUNTIME_PROVIDER","NEXT_RSPACK","allowDevelopmentBuild","NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX","Boolean","appNavFailHandling","appNewScrollHandler","turbopackSharedRuntime","cachedNavigations","coldCacheBadge","requestInsights","supportsImmutableAssets","useSkewCookie","deploymentId","runtimeServerDeploymentId","__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING","manualClientBasePath","isNaN","Number","staleTimes","dynamic","static","clientRouterFilter","staticFilter","dynamicFilter","validateRSCRequestHeaders","serverComponentsHmrCancellation","dynamicOnHover","useOffline","prefetchInlining","optimisticClientCache","proxyPrefetch","crossOrigin","__NEXT_TEST_MODE","relative","cwd","basePath","caseSensitiveRoutes","trailingSlash","devIndicators","position","reactStrictMode","optimizeCss","nextScriptWorkers","scrollRestoration","i18n","skipProxyUrlNormalize","externalProxyRewritesResolve","skipTrailingSlashRedirect","webVitalsAttribution","length","linkNoTouchStart","assetPrefix","authInterrupts","NEXT_TELEMETRY_DISABLED","undefined","needsExperimentalReact","multiZoneDraftMode","trustHostHeader","allowedRevalidateHeaderKeys","logging","browserToTerminal","mcpServer","turbopackFileSystemCacheForDev","reactDebugChannel","transitionIndicator","gestureTransition","optimisticRouting","instrumentationClientRouterTransitionEvents","varyParams","exposeTestingApiInProductionBuild","cacheLife","clientParamParsingOrigins","userDefines","compiler","define","hasOwnProperty","Error","userDefinesServer","defineServer","serializedDefineEnv","safeKey","split","pop"],"mappings":"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","ignoreList":[0]} |
@@ -138,3 +138,3 @@ "use strict"; | ||
| }({}); | ||
| const nextVersion = "16.3.0-canary.87"; | ||
| const nextVersion = "16.3.0-canary.88"; | ||
| const ArchName = (0, _os.arch)(); | ||
@@ -141,0 +141,0 @@ const PlatformName = (0, _os.platform)(); |
@@ -189,3 +189,2 @@ "use strict"; | ||
| cachedNavigations: nextConfig.experimental.cachedNavigations ?? false, | ||
| appShells: nextConfig.experimental.appShells, | ||
| clientTraceMetadata: nextConfig.experimental.clientTraceMetadata || [], | ||
@@ -192,0 +191,0 @@ clientParamParsingOrigins: nextConfig.experimental.clientParamParsingOrigins, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/build/templates/edge-ssr-app.ts"],"sourcesContent":["import '../../server/web/globals'\nimport {\n adapter,\n type EdgeHandler,\n type NextRequestHint,\n} from '../../server/web/adapter'\nimport { IncrementalCache } from '../../server/lib/incremental-cache'\n\nimport * as pageMod from 'VAR_USERLAND'\n\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport * as cacheHandlers from '../../server/use-cache/handlers'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport {\n getTracer,\n SpanKind,\n SpanStatusCode,\n type Span,\n} from '../../server/lib/trace/tracer'\nimport { WebNextRequest, WebNextResponse } from '../../server/base-http/web'\nimport type { NextFetchEvent } from '../../server/web/spec-extension/fetch-event'\nimport type {\n AppPageRouteHandlerContext,\n AppPageRouteModule,\n} from '../../server/route-modules/app-page/module.compiled'\nimport type { AppPageRenderResultMetadata } from '../../server/render-result'\nimport type RenderResult from '../../server/render-result'\nimport { getIsPossibleServerAction } from '../../server/lib/server-action-request-meta'\nimport { getBotType } from '../../shared/lib/router/utils/is-bot'\nimport { interopDefault } from '../../lib/interop-default'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { checkIsOnDemandRevalidate } from '../../server/api-utils'\nimport { CloseController } from '../../server/web/web-on-close'\nimport { parseMaxPostponedStateSize } from '../../shared/lib/size-limit'\nimport { toNodeOutgoingHttpHeaders } from '../../server/web/utils'\nimport type { RequestMeta } from '../../server/request-meta'\n\ndeclare const incrementalCacheHandler: any\n// OPTIONAL_IMPORT:incrementalCacheHandler\n// INJECT_RAW:cacheHandlerImports\n\nconst maybeJSONParse = (str?: string) => (str ? JSON.parse(str) : undefined)\n\nconst rscManifest = self.__RSC_MANIFEST?.['VAR_PAGE']\nconst rscServerManifest = maybeJSONParse(self.__RSC_SERVER_MANIFEST)\n\nif (rscManifest && rscServerManifest) {\n setManifestsSingleton({\n page: 'VAR_PAGE',\n clientReferenceManifest: rscManifest,\n serverActionsManifest: rscServerManifest,\n })\n}\n\nexport const ComponentMod = pageMod\n\nasync function requestHandler(\n req: NextRequestHint,\n event: NextFetchEvent\n): Promise<Response> {\n let srcPage = 'VAR_PAGE'\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n const relativeUrl = `${req.nextUrl.pathname}${req.nextUrl.search}`\n const baseReq = new WebNextRequest(req)\n const baseRes = new WebNextResponse(undefined)\n\n const pageRouteModule = pageMod.routeModule as AppPageRouteModule\n const prepareResult = await pageRouteModule.prepare(baseReq, null, {\n srcPage,\n multiZoneDraftMode: false,\n })\n\n if (!prepareResult) {\n return new Response('Bad Request', {\n status: 400,\n })\n }\n const {\n query,\n params,\n buildId,\n nextConfig,\n buildManifest,\n prerenderManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n nextFontManifest,\n resolvedPathname,\n interceptionRoutePatterns,\n routerServerContext,\n deploymentId,\n clientAssetToken,\n } = prepareResult\n\n // Initialize the cache handlers interface.\n cacheHandlers.initializeCacheHandlers(nextConfig.cacheMaxMemorySize)\n // INJECT_RAW:cacheHandlerRegistration\n\n const isPossibleServerAction = getIsPossibleServerAction(req)\n const botType = getBotType(req.headers.get('User-Agent') || '')\n const { isOnDemandRevalidate } = checkIsOnDemandRevalidate(\n req.headers,\n prerenderManifest.preview\n )\n\n const closeController = new CloseController()\n\n const renderContext: AppPageRouteHandlerContext = {\n page: normalizedSrcPage,\n query,\n params,\n\n sharedContext: {\n buildId,\n deploymentId,\n clientAssetToken,\n },\n fallbackRouteParams: null,\n\n renderOpts: {\n App: () => null,\n Document: () => null,\n pageConfig: {},\n ComponentMod,\n Component: interopDefault(ComponentMod),\n routeModule: pageRouteModule,\n\n params,\n page: srcPage,\n postponed: undefined,\n shouldWaitOnAllReady: false,\n serveStreamingMetadata: true,\n supportsDynamicResponse: true,\n buildManifest,\n nextFontManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n setIsrStatus: routerServerContext?.setIsrStatus,\n\n dir: pageRouteModule.relativeProjectDir,\n botType,\n isDraftMode: false,\n isOnDemandRevalidate,\n isPossibleServerAction,\n assetPrefix: nextConfig.assetPrefix,\n nextConfigOutput: nextConfig.output,\n crossOrigin: nextConfig.crossOrigin,\n trailingSlash: nextConfig.trailingSlash,\n images: nextConfig.images,\n previewProps: prerenderManifest.preview,\n enableTainting: nextConfig.experimental.taint,\n htmlLimitedBots: nextConfig.htmlLimitedBots,\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n\n multiZoneDraftMode: false,\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n basePath: nextConfig.basePath,\n serverActions: nextConfig.experimental.serverActions,\n logServerFunctions:\n typeof nextConfig.logging === 'object' &&\n Boolean(nextConfig.logging.serverFunctions),\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n experimental: {\n isRoutePPREnabled: false,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),\n optimisticRouting: Boolean(nextConfig.experimental.optimisticRouting),\n inlineCss: Boolean(nextConfig.experimental.inlineCss),\n prefetchInlining: nextConfig.experimental.prefetchInlining ?? false,\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n // Edge has no Node response-close signal, so HMR cancellation is a\n // no-op.\n serverComponentsHmrCancellation: false,\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n cachedNavigations: nextConfig.experimental.cachedNavigations ?? false,\n appShells: nextConfig.experimental.appShells,\n clientTraceMetadata:\n nextConfig.experimental.clientTraceMetadata || ([] as any),\n clientParamParsingOrigins:\n nextConfig.experimental.clientParamParsingOrigins,\n maxPostponedStateSizeBytes: parseMaxPostponedStateSize(\n nextConfig.experimental.maxPostponedStateSize\n ),\n exposeTestingApi:\n pageRouteModule.isDev === true ||\n nextConfig.experimental.exposeTestingApiInProductionBuild === true,\n },\n\n incrementalCache: await pageRouteModule.getIncrementalCache(\n baseReq,\n nextConfig,\n prerenderManifest,\n true\n ),\n\n waitUntil: event.waitUntil.bind(event),\n onClose: (cb) => {\n closeController.onClose(cb)\n },\n onAfterTaskError: () => {},\n\n onInstrumentationRequestError: (\n error,\n _request,\n errorContext,\n silenceLog\n ) =>\n pageRouteModule.onRequestError(\n baseReq,\n error,\n errorContext,\n silenceLog,\n routerServerContext\n ),\n },\n }\n let finalStatus = 200\n\n const renderResultToResponse = (\n result: RenderResult<AppPageRenderResultMetadata>\n ): Response => {\n const varyHeader = pageRouteModule.getVaryHeader(\n resolvedPathname,\n interceptionRoutePatterns\n )\n // Handle null responses\n if (result.isNull) {\n finalStatus = 500\n closeController.dispatchClose()\n return new Response(null, { status: 500 })\n }\n\n // Extract metadata\n const { metadata } = result\n const headers = new Headers()\n finalStatus = metadata.statusCode || baseRes.statusCode || 200\n // Pull any fetch metrics from the render onto the request.\n ;(req as any).fetchMetrics = metadata.fetchMetrics\n\n // Set content type\n const contentType = result.contentType || 'text/html; charset=utf-8'\n headers.set('Content-Type', contentType)\n headers.set('x-edge-runtime', '1')\n\n if (varyHeader) {\n headers.set('Vary', varyHeader)\n }\n\n // Add existing headers\n for (const [key, value] of Object.entries({\n ...baseRes.getHeaders(),\n ...metadata.headers,\n })) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle multiple header values\n for (const v of value) {\n headers.append(key, String(v))\n }\n } else {\n headers.set(key, String(value))\n }\n }\n }\n\n // Handle static response\n if (!result.isDynamic) {\n const body = result.toUnchunkedString()\n headers.set(\n 'Content-Length',\n String(new TextEncoder().encode(body).length)\n )\n closeController.dispatchClose()\n return new Response(body, {\n status: finalStatus,\n headers,\n })\n }\n\n // Handle dynamic/streaming response\n // For edge runtime, we need to create a readable stream that pipes from the result\n const { readable, writable } = new TransformStream()\n\n // Start piping the result to the writable stream\n // This is done asynchronously to avoid blocking the response creation\n result\n .pipeTo(writable)\n .catch((err: unknown) => {\n console.error('Error piping RenderResult to response:', err)\n })\n .finally(() => closeController.dispatchClose())\n\n return new Response(readable, {\n status: finalStatus,\n headers,\n })\n }\n\n const invokeRender = async (span?: Span): Promise<Response> => {\n try {\n const result = await pageRouteModule\n .render(baseReq, baseRes, renderContext)\n .finally(() => {\n if (!span) return\n\n span.setAttributes({\n 'http.status_code': finalStatus,\n 'next.rsc': false,\n })\n\n if (finalStatus && finalStatus >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n span.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n span.setAttribute('error.type', finalStatus.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = normalizedSrcPage\n if (route) {\n const name = `${req.method} ${route}`\n\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n span.updateName(name)\n } else {\n span.updateName(`${req.method} ${srcPage}`)\n }\n })\n\n return renderResultToResponse(result)\n } catch (err) {\n const silenceLog = false\n await pageRouteModule.onRequestError(\n baseReq,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'render',\n revalidateReason: undefined,\n },\n silenceLog\n )\n // rethrow so that we can handle serving error page\n throw err\n }\n }\n\n const tracer = getTracer()\n\n return tracer.withPropagatedContext(req.headers, () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${req.method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': req.method,\n 'http.target': relativeUrl,\n 'http.route': normalizedSrcPage,\n },\n },\n invokeRender\n )\n )\n}\n\nconst internalHandler: EdgeHandler = (opts) => {\n return adapter({\n ...opts,\n IncrementalCache,\n handler: requestHandler,\n incrementalCacheHandler,\n page: 'VAR_PAGE',\n })\n}\n\nexport async function handler(\n request: Request,\n ctx: {\n waitUntil?: (prom: Promise<void>) => void\n signal?: AbortSignal\n requestMeta?: RequestMeta\n }\n): Promise<Response> {\n const result = await internalHandler({\n request: {\n url: request.url,\n method: request.method,\n headers: toNodeOutgoingHttpHeaders(request.headers),\n nextConfig: {\n basePath: process.env.__NEXT_BASE_PATH,\n i18n: process.env.__NEXT_I18N_CONFIG as any,\n trailingSlash: Boolean(process.env.__NEXT_TRAILING_SLASH),\n experimental: {\n cacheLife: process.env.__NEXT_CACHE_LIFE as any,\n authInterrupts: Boolean(\n process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS\n ),\n clientParamParsingOrigins: process.env\n .__NEXT_CLIENT_PARAM_PARSING_ORIGINS as any,\n },\n },\n page: {\n name: 'VAR_PAGE',\n },\n body:\n request.method !== 'GET' && request.method !== 'HEAD'\n ? (request.body ?? undefined)\n : undefined,\n waitUntil: ctx.waitUntil,\n requestMeta: ctx.requestMeta,\n signal: ctx.signal || new AbortController().signal,\n },\n })\n\n ctx.waitUntil?.(result.waitUntil)\n\n return result.response\n}\n\n// backwards compat\nexport default internalHandler\n"],"names":["ComponentMod","handler","self","maybeJSONParse","str","JSON","parse","undefined","rscManifest","__RSC_MANIFEST","rscServerManifest","__RSC_SERVER_MANIFEST","setManifestsSingleton","page","clientReferenceManifest","serverActionsManifest","pageMod","requestHandler","req","event","srcPage","normalizedSrcPage","normalizeAppPath","relativeUrl","nextUrl","pathname","search","baseReq","WebNextRequest","baseRes","WebNextResponse","pageRouteModule","routeModule","prepareResult","prepare","multiZoneDraftMode","Response","status","query","params","buildId","nextConfig","buildManifest","prerenderManifest","reactLoadableManifest","subresourceIntegrityManifest","dynamicCssManifest","nextFontManifest","resolvedPathname","interceptionRoutePatterns","routerServerContext","deploymentId","clientAssetToken","cacheHandlers","initializeCacheHandlers","cacheMaxMemorySize","isPossibleServerAction","getIsPossibleServerAction","botType","getBotType","headers","get","isOnDemandRevalidate","checkIsOnDemandRevalidate","preview","closeController","CloseController","renderContext","sharedContext","fallbackRouteParams","renderOpts","App","Document","pageConfig","Component","interopDefault","postponed","shouldWaitOnAllReady","serveStreamingMetadata","supportsDynamicResponse","setIsrStatus","dir","relativeProjectDir","isDraftMode","assetPrefix","nextConfigOutput","output","crossOrigin","trailingSlash","images","previewProps","enableTainting","experimental","taint","htmlLimitedBots","reactMaxHeadersLength","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","basePath","serverActions","logServerFunctions","logging","Boolean","serverFunctions","cacheComponents","validationLevel","instantInsights","isRoutePPREnabled","expireTime","staleTimes","dynamicOnHover","optimisticRouting","inlineCss","prefetchInlining","authInterrupts","serverComponentsHmrCancellation","useCacheTimeout","cachedNavigations","appShells","clientTraceMetadata","clientParamParsingOrigins","maxPostponedStateSizeBytes","parseMaxPostponedStateSize","maxPostponedStateSize","exposeTestingApi","isDev","exposeTestingApiInProductionBuild","incrementalCache","getIncrementalCache","waitUntil","bind","onClose","cb","onAfterTaskError","onInstrumentationRequestError","error","_request","errorContext","silenceLog","onRequestError","finalStatus","renderResultToResponse","result","varyHeader","getVaryHeader","isNull","dispatchClose","metadata","Headers","statusCode","fetchMetrics","contentType","set","key","value","Object","entries","getHeaders","Array","isArray","v","append","String","isDynamic","body","toUnchunkedString","TextEncoder","encode","length","readable","writable","TransformStream","pipeTo","catch","err","console","finally","invokeRender","span","render","setAttributes","setStatus","code","SpanStatusCode","ERROR","setAttribute","toString","rootSpanAttributes","tracer","getRootSpanAttributes","BaseServerSpan","handleRequest","warn","route","name","method","updateName","routerKind","routePath","routeType","revalidateReason","getTracer","withPropagatedContext","trace","spanName","kind","SpanKind","SERVER","attributes","internalHandler","opts","adapter","IncrementalCache","incrementalCacheHandler","request","ctx","url","toNodeOutgoingHttpHeaders","process","env","__NEXT_BASE_PATH","i18n","__NEXT_I18N_CONFIG","__NEXT_TRAILING_SLASH","__NEXT_CACHE_LIFE","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","__NEXT_CLIENT_PARAM_PARSING_ORIGINS","requestMeta","signal","AbortController","response"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/build/templates/edge-ssr-app.ts"],"sourcesContent":["import '../../server/web/globals'\nimport {\n adapter,\n type EdgeHandler,\n type NextRequestHint,\n} from '../../server/web/adapter'\nimport { IncrementalCache } from '../../server/lib/incremental-cache'\n\nimport * as pageMod from 'VAR_USERLAND'\n\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport * as cacheHandlers from '../../server/use-cache/handlers'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport {\n getTracer,\n SpanKind,\n SpanStatusCode,\n type Span,\n} from '../../server/lib/trace/tracer'\nimport { WebNextRequest, WebNextResponse } from '../../server/base-http/web'\nimport type { NextFetchEvent } from '../../server/web/spec-extension/fetch-event'\nimport type {\n AppPageRouteHandlerContext,\n AppPageRouteModule,\n} from '../../server/route-modules/app-page/module.compiled'\nimport type { AppPageRenderResultMetadata } from '../../server/render-result'\nimport type RenderResult from '../../server/render-result'\nimport { getIsPossibleServerAction } from '../../server/lib/server-action-request-meta'\nimport { getBotType } from '../../shared/lib/router/utils/is-bot'\nimport { interopDefault } from '../../lib/interop-default'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { checkIsOnDemandRevalidate } from '../../server/api-utils'\nimport { CloseController } from '../../server/web/web-on-close'\nimport { parseMaxPostponedStateSize } from '../../shared/lib/size-limit'\nimport { toNodeOutgoingHttpHeaders } from '../../server/web/utils'\nimport type { RequestMeta } from '../../server/request-meta'\n\ndeclare const incrementalCacheHandler: any\n// OPTIONAL_IMPORT:incrementalCacheHandler\n// INJECT_RAW:cacheHandlerImports\n\nconst maybeJSONParse = (str?: string) => (str ? JSON.parse(str) : undefined)\n\nconst rscManifest = self.__RSC_MANIFEST?.['VAR_PAGE']\nconst rscServerManifest = maybeJSONParse(self.__RSC_SERVER_MANIFEST)\n\nif (rscManifest && rscServerManifest) {\n setManifestsSingleton({\n page: 'VAR_PAGE',\n clientReferenceManifest: rscManifest,\n serverActionsManifest: rscServerManifest,\n })\n}\n\nexport const ComponentMod = pageMod\n\nasync function requestHandler(\n req: NextRequestHint,\n event: NextFetchEvent\n): Promise<Response> {\n let srcPage = 'VAR_PAGE'\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n const relativeUrl = `${req.nextUrl.pathname}${req.nextUrl.search}`\n const baseReq = new WebNextRequest(req)\n const baseRes = new WebNextResponse(undefined)\n\n const pageRouteModule = pageMod.routeModule as AppPageRouteModule\n const prepareResult = await pageRouteModule.prepare(baseReq, null, {\n srcPage,\n multiZoneDraftMode: false,\n })\n\n if (!prepareResult) {\n return new Response('Bad Request', {\n status: 400,\n })\n }\n const {\n query,\n params,\n buildId,\n nextConfig,\n buildManifest,\n prerenderManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n nextFontManifest,\n resolvedPathname,\n interceptionRoutePatterns,\n routerServerContext,\n deploymentId,\n clientAssetToken,\n } = prepareResult\n\n // Initialize the cache handlers interface.\n cacheHandlers.initializeCacheHandlers(nextConfig.cacheMaxMemorySize)\n // INJECT_RAW:cacheHandlerRegistration\n\n const isPossibleServerAction = getIsPossibleServerAction(req)\n const botType = getBotType(req.headers.get('User-Agent') || '')\n const { isOnDemandRevalidate } = checkIsOnDemandRevalidate(\n req.headers,\n prerenderManifest.preview\n )\n\n const closeController = new CloseController()\n\n const renderContext: AppPageRouteHandlerContext = {\n page: normalizedSrcPage,\n query,\n params,\n\n sharedContext: {\n buildId,\n deploymentId,\n clientAssetToken,\n },\n fallbackRouteParams: null,\n\n renderOpts: {\n App: () => null,\n Document: () => null,\n pageConfig: {},\n ComponentMod,\n Component: interopDefault(ComponentMod),\n routeModule: pageRouteModule,\n\n params,\n page: srcPage,\n postponed: undefined,\n shouldWaitOnAllReady: false,\n serveStreamingMetadata: true,\n supportsDynamicResponse: true,\n buildManifest,\n nextFontManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n setIsrStatus: routerServerContext?.setIsrStatus,\n\n dir: pageRouteModule.relativeProjectDir,\n botType,\n isDraftMode: false,\n isOnDemandRevalidate,\n isPossibleServerAction,\n assetPrefix: nextConfig.assetPrefix,\n nextConfigOutput: nextConfig.output,\n crossOrigin: nextConfig.crossOrigin,\n trailingSlash: nextConfig.trailingSlash,\n images: nextConfig.images,\n previewProps: prerenderManifest.preview,\n enableTainting: nextConfig.experimental.taint,\n htmlLimitedBots: nextConfig.htmlLimitedBots,\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n\n multiZoneDraftMode: false,\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n basePath: nextConfig.basePath,\n serverActions: nextConfig.experimental.serverActions,\n logServerFunctions:\n typeof nextConfig.logging === 'object' &&\n Boolean(nextConfig.logging.serverFunctions),\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n experimental: {\n isRoutePPREnabled: false,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),\n optimisticRouting: Boolean(nextConfig.experimental.optimisticRouting),\n inlineCss: Boolean(nextConfig.experimental.inlineCss),\n prefetchInlining: nextConfig.experimental.prefetchInlining ?? false,\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n // Edge has no Node response-close signal, so HMR cancellation is a\n // no-op.\n serverComponentsHmrCancellation: false,\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n cachedNavigations: nextConfig.experimental.cachedNavigations ?? false,\n clientTraceMetadata:\n nextConfig.experimental.clientTraceMetadata || ([] as any),\n clientParamParsingOrigins:\n nextConfig.experimental.clientParamParsingOrigins,\n maxPostponedStateSizeBytes: parseMaxPostponedStateSize(\n nextConfig.experimental.maxPostponedStateSize\n ),\n exposeTestingApi:\n pageRouteModule.isDev === true ||\n nextConfig.experimental.exposeTestingApiInProductionBuild === true,\n },\n\n incrementalCache: await pageRouteModule.getIncrementalCache(\n baseReq,\n nextConfig,\n prerenderManifest,\n true\n ),\n\n waitUntil: event.waitUntil.bind(event),\n onClose: (cb) => {\n closeController.onClose(cb)\n },\n onAfterTaskError: () => {},\n\n onInstrumentationRequestError: (\n error,\n _request,\n errorContext,\n silenceLog\n ) =>\n pageRouteModule.onRequestError(\n baseReq,\n error,\n errorContext,\n silenceLog,\n routerServerContext\n ),\n },\n }\n let finalStatus = 200\n\n const renderResultToResponse = (\n result: RenderResult<AppPageRenderResultMetadata>\n ): Response => {\n const varyHeader = pageRouteModule.getVaryHeader(\n resolvedPathname,\n interceptionRoutePatterns\n )\n // Handle null responses\n if (result.isNull) {\n finalStatus = 500\n closeController.dispatchClose()\n return new Response(null, { status: 500 })\n }\n\n // Extract metadata\n const { metadata } = result\n const headers = new Headers()\n finalStatus = metadata.statusCode || baseRes.statusCode || 200\n // Pull any fetch metrics from the render onto the request.\n ;(req as any).fetchMetrics = metadata.fetchMetrics\n\n // Set content type\n const contentType = result.contentType || 'text/html; charset=utf-8'\n headers.set('Content-Type', contentType)\n headers.set('x-edge-runtime', '1')\n\n if (varyHeader) {\n headers.set('Vary', varyHeader)\n }\n\n // Add existing headers\n for (const [key, value] of Object.entries({\n ...baseRes.getHeaders(),\n ...metadata.headers,\n })) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle multiple header values\n for (const v of value) {\n headers.append(key, String(v))\n }\n } else {\n headers.set(key, String(value))\n }\n }\n }\n\n // Handle static response\n if (!result.isDynamic) {\n const body = result.toUnchunkedString()\n headers.set(\n 'Content-Length',\n String(new TextEncoder().encode(body).length)\n )\n closeController.dispatchClose()\n return new Response(body, {\n status: finalStatus,\n headers,\n })\n }\n\n // Handle dynamic/streaming response\n // For edge runtime, we need to create a readable stream that pipes from the result\n const { readable, writable } = new TransformStream()\n\n // Start piping the result to the writable stream\n // This is done asynchronously to avoid blocking the response creation\n result\n .pipeTo(writable)\n .catch((err: unknown) => {\n console.error('Error piping RenderResult to response:', err)\n })\n .finally(() => closeController.dispatchClose())\n\n return new Response(readable, {\n status: finalStatus,\n headers,\n })\n }\n\n const invokeRender = async (span?: Span): Promise<Response> => {\n try {\n const result = await pageRouteModule\n .render(baseReq, baseRes, renderContext)\n .finally(() => {\n if (!span) return\n\n span.setAttributes({\n 'http.status_code': finalStatus,\n 'next.rsc': false,\n })\n\n if (finalStatus && finalStatus >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n span.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n span.setAttribute('error.type', finalStatus.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = normalizedSrcPage\n if (route) {\n const name = `${req.method} ${route}`\n\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n span.updateName(name)\n } else {\n span.updateName(`${req.method} ${srcPage}`)\n }\n })\n\n return renderResultToResponse(result)\n } catch (err) {\n const silenceLog = false\n await pageRouteModule.onRequestError(\n baseReq,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'render',\n revalidateReason: undefined,\n },\n silenceLog\n )\n // rethrow so that we can handle serving error page\n throw err\n }\n }\n\n const tracer = getTracer()\n\n return tracer.withPropagatedContext(req.headers, () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${req.method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': req.method,\n 'http.target': relativeUrl,\n 'http.route': normalizedSrcPage,\n },\n },\n invokeRender\n )\n )\n}\n\nconst internalHandler: EdgeHandler = (opts) => {\n return adapter({\n ...opts,\n IncrementalCache,\n handler: requestHandler,\n incrementalCacheHandler,\n page: 'VAR_PAGE',\n })\n}\n\nexport async function handler(\n request: Request,\n ctx: {\n waitUntil?: (prom: Promise<void>) => void\n signal?: AbortSignal\n requestMeta?: RequestMeta\n }\n): Promise<Response> {\n const result = await internalHandler({\n request: {\n url: request.url,\n method: request.method,\n headers: toNodeOutgoingHttpHeaders(request.headers),\n nextConfig: {\n basePath: process.env.__NEXT_BASE_PATH,\n i18n: process.env.__NEXT_I18N_CONFIG as any,\n trailingSlash: Boolean(process.env.__NEXT_TRAILING_SLASH),\n experimental: {\n cacheLife: process.env.__NEXT_CACHE_LIFE as any,\n authInterrupts: Boolean(\n process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS\n ),\n clientParamParsingOrigins: process.env\n .__NEXT_CLIENT_PARAM_PARSING_ORIGINS as any,\n },\n },\n page: {\n name: 'VAR_PAGE',\n },\n body:\n request.method !== 'GET' && request.method !== 'HEAD'\n ? (request.body ?? undefined)\n : undefined,\n waitUntil: ctx.waitUntil,\n requestMeta: ctx.requestMeta,\n signal: ctx.signal || new AbortController().signal,\n },\n })\n\n ctx.waitUntil?.(result.waitUntil)\n\n return result.response\n}\n\n// backwards compat\nexport default internalHandler\n"],"names":["ComponentMod","handler","self","maybeJSONParse","str","JSON","parse","undefined","rscManifest","__RSC_MANIFEST","rscServerManifest","__RSC_SERVER_MANIFEST","setManifestsSingleton","page","clientReferenceManifest","serverActionsManifest","pageMod","requestHandler","req","event","srcPage","normalizedSrcPage","normalizeAppPath","relativeUrl","nextUrl","pathname","search","baseReq","WebNextRequest","baseRes","WebNextResponse","pageRouteModule","routeModule","prepareResult","prepare","multiZoneDraftMode","Response","status","query","params","buildId","nextConfig","buildManifest","prerenderManifest","reactLoadableManifest","subresourceIntegrityManifest","dynamicCssManifest","nextFontManifest","resolvedPathname","interceptionRoutePatterns","routerServerContext","deploymentId","clientAssetToken","cacheHandlers","initializeCacheHandlers","cacheMaxMemorySize","isPossibleServerAction","getIsPossibleServerAction","botType","getBotType","headers","get","isOnDemandRevalidate","checkIsOnDemandRevalidate","preview","closeController","CloseController","renderContext","sharedContext","fallbackRouteParams","renderOpts","App","Document","pageConfig","Component","interopDefault","postponed","shouldWaitOnAllReady","serveStreamingMetadata","supportsDynamicResponse","setIsrStatus","dir","relativeProjectDir","isDraftMode","assetPrefix","nextConfigOutput","output","crossOrigin","trailingSlash","images","previewProps","enableTainting","experimental","taint","htmlLimitedBots","reactMaxHeadersLength","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","basePath","serverActions","logServerFunctions","logging","Boolean","serverFunctions","cacheComponents","validationLevel","instantInsights","isRoutePPREnabled","expireTime","staleTimes","dynamicOnHover","optimisticRouting","inlineCss","prefetchInlining","authInterrupts","serverComponentsHmrCancellation","useCacheTimeout","cachedNavigations","clientTraceMetadata","clientParamParsingOrigins","maxPostponedStateSizeBytes","parseMaxPostponedStateSize","maxPostponedStateSize","exposeTestingApi","isDev","exposeTestingApiInProductionBuild","incrementalCache","getIncrementalCache","waitUntil","bind","onClose","cb","onAfterTaskError","onInstrumentationRequestError","error","_request","errorContext","silenceLog","onRequestError","finalStatus","renderResultToResponse","result","varyHeader","getVaryHeader","isNull","dispatchClose","metadata","Headers","statusCode","fetchMetrics","contentType","set","key","value","Object","entries","getHeaders","Array","isArray","v","append","String","isDynamic","body","toUnchunkedString","TextEncoder","encode","length","readable","writable","TransformStream","pipeTo","catch","err","console","finally","invokeRender","span","render","setAttributes","setStatus","code","SpanStatusCode","ERROR","setAttribute","toString","rootSpanAttributes","tracer","getRootSpanAttributes","BaseServerSpan","handleRequest","warn","route","name","method","updateName","routerKind","routePath","routeType","revalidateReason","getTracer","withPropagatedContext","trace","spanName","kind","SpanKind","SERVER","attributes","internalHandler","opts","adapter","IncrementalCache","incrementalCacheHandler","request","ctx","url","toNodeOutgoingHttpHeaders","process","env","__NEXT_BASE_PATH","i18n","__NEXT_I18N_CONFIG","__NEXT_TRAILING_SLASH","__NEXT_CACHE_LIFE","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","__NEXT_CLIENT_PARAM_PARSING_ORIGINS","requestMeta","signal","AbortController","response"],"mappings":";;;;;;;;;;;;;;;;IAsDaA,YAAY;eAAZA;;IA4Yb,mBAAmB;IACnB,OAA8B;eAA9B;;IA7CsBC,OAAO;eAAPA;;;QAtZf;yBAKA;kCAC0B;sEAER;oCAEa;kEACP;2BACA;wBAMxB;qBACyC;yCAQN;uBACf;gCACI;0BACE;0BACS;4BACV;2BACW;uBACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAStBC;AALpB,0CAA0C;AAC1C,iCAAiC;AAEjC,MAAMC,iBAAiB,CAACC,MAAkBA,MAAMC,KAAKC,KAAK,CAACF,OAAOG;AAElE,MAAMC,eAAcN,uBAAAA,KAAKO,cAAc,qBAAnBP,oBAAqB,CAAC,WAAW;AACrD,MAAMQ,oBAAoBP,eAAeD,KAAKS,qBAAqB;AAEnE,IAAIH,eAAeE,mBAAmB;IACpCE,IAAAA,yCAAqB,EAAC;QACpBC,MAAM;QACNC,yBAAyBN;QACzBO,uBAAuBL;IACzB;AACF;AAEO,MAAMV,eAAegB;AAE5B,eAAeC,eACbC,GAAoB,EACpBC,KAAqB;IAErB,IAAIC,UAAU;IAEd,MAAMC,oBAAoBC,IAAAA,0BAAgB,EAACF;IAC3C,MAAMG,cAAc,GAAGL,IAAIM,OAAO,CAACC,QAAQ,GAAGP,IAAIM,OAAO,CAACE,MAAM,EAAE;IAClE,MAAMC,UAAU,IAAIC,mBAAc,CAACV;IACnC,MAAMW,UAAU,IAAIC,oBAAe,CAACvB;IAEpC,MAAMwB,kBAAkBf,cAAQgB,WAAW;IAC3C,MAAMC,gBAAgB,MAAMF,gBAAgBG,OAAO,CAACP,SAAS,MAAM;QACjEP;QACAe,oBAAoB;IACtB;IAEA,IAAI,CAACF,eAAe;QAClB,OAAO,IAAIG,SAAS,eAAe;YACjCC,QAAQ;QACV;IACF;IACA,MAAM,EACJC,KAAK,EACLC,MAAM,EACNC,OAAO,EACPC,UAAU,EACVC,aAAa,EACbC,iBAAiB,EACjBC,qBAAqB,EACrBC,4BAA4B,EAC5BC,kBAAkB,EAClBC,gBAAgB,EAChBC,gBAAgB,EAChBC,yBAAyB,EACzBC,mBAAmB,EACnBC,YAAY,EACZC,gBAAgB,EACjB,GAAGnB;IAEJ,2CAA2C;IAC3CoB,UAAcC,uBAAuB,CAACb,WAAWc,kBAAkB;IACnE,sCAAsC;IAEtC,MAAMC,yBAAyBC,IAAAA,kDAAyB,EAACvC;IACzD,MAAMwC,UAAUC,IAAAA,iBAAU,EAACzC,IAAI0C,OAAO,CAACC,GAAG,CAAC,iBAAiB;IAC5D,MAAM,EAAEC,oBAAoB,EAAE,GAAGC,IAAAA,mCAAyB,EACxD7C,IAAI0C,OAAO,EACXjB,kBAAkBqB,OAAO;IAG3B,MAAMC,kBAAkB,IAAIC,2BAAe;IAE3C,MAAMC,gBAA4C;QAChDtD,MAAMQ;QACNiB;QACAC;QAEA6B,eAAe;YACb5B;YACAW;YACAC;QACF;QACAiB,qBAAqB;QAErBC,YAAY;YACVC,KAAK,IAAM;YACXC,UAAU,IAAM;YAChBC,YAAY,CAAC;YACbzE;YACA0E,WAAWC,IAAAA,8BAAc,EAAC3E;YAC1BgC,aAAaD;YAEbQ;YACA1B,MAAMO;YACNwD,WAAWrE;YACXsE,sBAAsB;YACtBC,wBAAwB;YACxBC,yBAAyB;YACzBrC;YACAK;YACAH;YACAC;YACAC;YACAkC,YAAY,EAAE9B,uCAAAA,oBAAqB8B,YAAY;YAE/CC,KAAKlD,gBAAgBmD,kBAAkB;YACvCxB;YACAyB,aAAa;YACbrB;YACAN;YACA4B,aAAa3C,WAAW2C,WAAW;YACnCC,kBAAkB5C,WAAW6C,MAAM;YACnCC,aAAa9C,WAAW8C,WAAW;YACnCC,eAAe/C,WAAW+C,aAAa;YACvCC,QAAQhD,WAAWgD,MAAM;YACzBC,cAAc/C,kBAAkBqB,OAAO;YACvC2B,gBAAgBlD,WAAWmD,YAAY,CAACC,KAAK;YAC7CC,iBAAiBrD,WAAWqD,eAAe;YAC3CC,uBAAuBtD,WAAWsD,qBAAqB;YAEvD5D,oBAAoB;YACpB6D,mBAAmBvD,WAAWwD,SAAS;YACvCC,6BAA6BzD,WAAWyD,2BAA2B;YACnEC,UAAU1D,WAAW0D,QAAQ;YAC7BC,eAAe3D,WAAWmD,YAAY,CAACQ,aAAa;YACpDC,oBACE,OAAO5D,WAAW6D,OAAO,KAAK,YAC9BC,QAAQ9D,WAAW6D,OAAO,CAACE,eAAe;YAC5CC,iBAAiBF,QAAQ9D,WAAWgE,eAAe;YACnDC,iBAAiBjE,WAAWmD,YAAY,CAACe,eAAe,CAACD,eAAe;YACxEd,cAAc;gBACZgB,mBAAmB;gBACnBC,YAAYpE,WAAWoE,UAAU;gBACjCC,YAAYrE,WAAWmD,YAAY,CAACkB,UAAU;gBAC9CC,gBAAgBR,QAAQ9D,WAAWmD,YAAY,CAACmB,cAAc;gBAC9DC,mBAAmBT,QAAQ9D,WAAWmD,YAAY,CAACoB,iBAAiB;gBACpEC,WAAWV,QAAQ9D,WAAWmD,YAAY,CAACqB,SAAS;gBACpDC,kBAAkBzE,WAAWmD,YAAY,CAACsB,gBAAgB,IAAI;gBAC9DC,gBAAgBZ,QAAQ9D,WAAWmD,YAAY,CAACuB,cAAc;gBAC9D,mEAAmE;gBACnE,SAAS;gBACTC,iCAAiC;gBACjCC,iBAAiB5E,WAAWmD,YAAY,CAACyB,eAAe;gBACxDC,mBAAmB7E,WAAWmD,YAAY,CAAC0B,iBAAiB,IAAI;gBAChEC,qBACE9E,WAAWmD,YAAY,CAAC2B,mBAAmB,IAAK,EAAE;gBACpDC,2BACE/E,WAAWmD,YAAY,CAAC4B,yBAAyB;gBACnDC,4BAA4BC,IAAAA,qCAA0B,EACpDjF,WAAWmD,YAAY,CAAC+B,qBAAqB;gBAE/CC,kBACE7F,gBAAgB8F,KAAK,KAAK,QAC1BpF,WAAWmD,YAAY,CAACkC,iCAAiC,KAAK;YAClE;YAEAC,kBAAkB,MAAMhG,gBAAgBiG,mBAAmB,CACzDrG,SACAc,YACAE,mBACA;YAGFsF,WAAW9G,MAAM8G,SAAS,CAACC,IAAI,CAAC/G;YAChCgH,SAAS,CAACC;gBACRnE,gBAAgBkE,OAAO,CAACC;YAC1B;YACAC,kBAAkB,KAAO;YAEzBC,+BAA+B,CAC7BC,OACAC,UACAC,cACAC,aAEA3G,gBAAgB4G,cAAc,CAC5BhH,SACA4G,OACAE,cACAC,YACAxF;QAEN;IACF;IACA,IAAI0F,cAAc;IAElB,MAAMC,yBAAyB,CAC7BC;QAEA,MAAMC,aAAahH,gBAAgBiH,aAAa,CAC9ChG,kBACAC;QAEF,wBAAwB;QACxB,IAAI6F,OAAOG,MAAM,EAAE;YACjBL,cAAc;YACd3E,gBAAgBiF,aAAa;YAC7B,OAAO,IAAI9G,SAAS,MAAM;gBAAEC,QAAQ;YAAI;QAC1C;QAEA,mBAAmB;QACnB,MAAM,EAAE8G,QAAQ,EAAE,GAAGL;QACrB,MAAMlF,UAAU,IAAIwF;QACpBR,cAAcO,SAASE,UAAU,IAAIxH,QAAQwH,UAAU,IAAI;QAEzDnI,IAAYoI,YAAY,GAAGH,SAASG,YAAY;QAElD,mBAAmB;QACnB,MAAMC,cAAcT,OAAOS,WAAW,IAAI;QAC1C3F,QAAQ4F,GAAG,CAAC,gBAAgBD;QAC5B3F,QAAQ4F,GAAG,CAAC,kBAAkB;QAE9B,IAAIT,YAAY;YACdnF,QAAQ4F,GAAG,CAAC,QAAQT;QACtB;QAEA,uBAAuB;QACvB,KAAK,MAAM,CAACU,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAAC;YACxC,GAAG/H,QAAQgI,UAAU,EAAE;YACvB,GAAGV,SAASvF,OAAO;QACrB,GAAI;YACF,IAAI8F,UAAUnJ,WAAW;gBACvB,IAAIuJ,MAAMC,OAAO,CAACL,QAAQ;oBACxB,gCAAgC;oBAChC,KAAK,MAAMM,KAAKN,MAAO;wBACrB9F,QAAQqG,MAAM,CAACR,KAAKS,OAAOF;oBAC7B;gBACF,OAAO;oBACLpG,QAAQ4F,GAAG,CAACC,KAAKS,OAAOR;gBAC1B;YACF;QACF;QAEA,yBAAyB;QACzB,IAAI,CAACZ,OAAOqB,SAAS,EAAE;YACrB,MAAMC,OAAOtB,OAAOuB,iBAAiB;YACrCzG,QAAQ4F,GAAG,CACT,kBACAU,OAAO,IAAII,cAAcC,MAAM,CAACH,MAAMI,MAAM;YAE9CvG,gBAAgBiF,aAAa;YAC7B,OAAO,IAAI9G,SAASgI,MAAM;gBACxB/H,QAAQuG;gBACRhF;YACF;QACF;QAEA,oCAAoC;QACpC,mFAAmF;QACnF,MAAM,EAAE6G,QAAQ,EAAEC,QAAQ,EAAE,GAAG,IAAIC;QAEnC,iDAAiD;QACjD,sEAAsE;QACtE7B,OACG8B,MAAM,CAACF,UACPG,KAAK,CAAC,CAACC;YACNC,QAAQxC,KAAK,CAAC,0CAA0CuC;QAC1D,GACCE,OAAO,CAAC,IAAM/G,gBAAgBiF,aAAa;QAE9C,OAAO,IAAI9G,SAASqI,UAAU;YAC5BpI,QAAQuG;YACRhF;QACF;IACF;IAEA,MAAMqH,eAAe,OAAOC;QAC1B,IAAI;YACF,MAAMpC,SAAS,MAAM/G,gBAClBoJ,MAAM,CAACxJ,SAASE,SAASsC,eACzB6G,OAAO,CAAC;gBACP,IAAI,CAACE,MAAM;gBAEXA,KAAKE,aAAa,CAAC;oBACjB,oBAAoBxC;oBACpB,YAAY;gBACd;gBAEA,IAAIA,eAAeA,eAAe,KAAK;oBACrC,8DAA8D;oBAC9D,6EAA6E;oBAC7EsC,KAAKG,SAAS,CAAC;wBACbC,MAAMC,sBAAc,CAACC,KAAK;oBAC5B;oBACA,8DAA8D;oBAC9DN,KAAKO,YAAY,CAAC,cAAc7C,YAAY8C,QAAQ;gBACtD;gBAEA,MAAMC,qBAAqBC,OAAOC,qBAAqB;gBACvD,iEAAiE;gBACjE,IAAI,CAACF,oBAAoB;oBACvB;gBACF;gBAEA,IACEA,mBAAmB9H,GAAG,CAAC,sBACvBiI,yBAAc,CAACC,aAAa,EAC5B;oBACAhB,QAAQiB,IAAI,CACV,CAAC,2BAA2B,EAAEL,mBAAmB9H,GAAG,CAClD,kBACA,qEAAqE,CAAC;oBAE1E;gBACF;gBAEA,MAAMoI,QAAQ5K;gBACd,IAAI4K,OAAO;oBACT,MAAMC,OAAO,GAAGhL,IAAIiL,MAAM,CAAC,CAAC,EAAEF,OAAO;oBAErCf,KAAKE,aAAa,CAAC;wBACjB,cAAca;wBACd,cAAcA;wBACd,kBAAkBC;oBACpB;oBACAhB,KAAKkB,UAAU,CAACF;gBAClB,OAAO;oBACLhB,KAAKkB,UAAU,CAAC,GAAGlL,IAAIiL,MAAM,CAAC,CAAC,EAAE/K,SAAS;gBAC5C;YACF;YAEF,OAAOyH,uBAAuBC;QAChC,EAAE,OAAOgC,KAAK;YACZ,MAAMpC,aAAa;YACnB,MAAM3G,gBAAgB4G,cAAc,CAClChH,SACAmJ,KACA;gBACEuB,YAAY;gBACZC,WAAWjL;gBACXkL,WAAW;gBACXC,kBAAkBjM;YACpB,GACAmI;YAEF,mDAAmD;YACnD,MAAMoC;QACR;IACF;IAEA,MAAMc,SAASa,IAAAA,iBAAS;IAExB,OAAOb,OAAOc,qBAAqB,CAACxL,IAAI0C,OAAO,EAAE,IAC/CgI,OAAOe,KAAK,CACVb,yBAAc,CAACC,aAAa,EAC5B;YACEa,UAAU,GAAG1L,IAAIiL,MAAM,CAAC,CAAC,EAAE/K,SAAS;YACpCyL,MAAMC,gBAAQ,CAACC,MAAM;YACrBC,YAAY;gBACV,eAAe9L,IAAIiL,MAAM;gBACzB,eAAe5K;gBACf,cAAcF;YAChB;QACF,GACA4J;AAGN;AAEA,MAAMgC,kBAA+B,CAACC;IACpC,OAAOC,IAAAA,gBAAO,EAAC;QACb,GAAGD,IAAI;QACPE,kBAAAA,kCAAgB;QAChBnN,SAASgB;QACToM;QACAxM,MAAM;IACR;AACF;AAEO,eAAeZ,QACpBqN,OAAgB,EAChBC,GAIC;IAED,MAAMzE,SAAS,MAAMmE,gBAAgB;QACnCK,SAAS;YACPE,KAAKF,QAAQE,GAAG;YAChBrB,QAAQmB,QAAQnB,MAAM;YACtBvI,SAAS6J,IAAAA,gCAAyB,EAACH,QAAQ1J,OAAO;YAClDnB,YAAY;gBACV0D,UAAUuH,QAAQC,GAAG,CAACC,gBAAgB;gBACtCC,MAAMH,QAAQC,GAAG,CAACG,kBAAkB;gBACpCtI,eAAee,QAAQmH,QAAQC,GAAG,CAACI,qBAAqB;gBACxDnI,cAAc;oBACZK,WAAWyH,QAAQC,GAAG,CAACK,iBAAiB;oBACxC7G,gBAAgBZ,QACdmH,QAAQC,GAAG,CAACM,mCAAmC;oBAEjDzG,2BAA2BkG,QAAQC,GAAG,CACnCO,mCAAmC;gBACxC;YACF;YACArN,MAAM;gBACJqL,MAAM;YACR;YACA9B,MACEkD,QAAQnB,MAAM,KAAK,SAASmB,QAAQnB,MAAM,KAAK,SAC1CmB,QAAQlD,IAAI,IAAI7J,YACjBA;YACN0H,WAAWsF,IAAItF,SAAS;YACxBkG,aAAaZ,IAAIY,WAAW;YAC5BC,QAAQb,IAAIa,MAAM,IAAI,IAAIC,kBAAkBD,MAAM;QACpD;IACF;IAEAb,IAAItF,SAAS,oBAAbsF,IAAItF,SAAS,MAAbsF,KAAgBzE,OAAOb,SAAS;IAEhC,OAAOa,OAAOwF,QAAQ;AACxB;MAGA,WAAerB","ignoreList":[0]} |
@@ -96,3 +96,3 @@ "use strict"; | ||
| isPersistentCachingEnabled: persistentCaching, | ||
| nextVersion: "16.3.0-canary.87" | ||
| nextVersion: "16.3.0-canary.88" | ||
| }, { | ||
@@ -99,0 +99,0 @@ turbopackMemoryEviction: config.experimental.turbopackMemoryEvictionMode, |
@@ -118,3 +118,3 @@ // Import cpu-profile first to start profiling early if enabled | ||
| deferredEntries: config.experimental.deferredEntries, | ||
| nextVersion: "16.3.0-canary.87" | ||
| nextVersion: "16.3.0-canary.88" | ||
| }; | ||
@@ -121,0 +121,0 @@ const sharedTurboOptions = { |
@@ -6,5 +6,5 @@ 1:"$Sreact.fragment" | ||
| 7:"$Sreact.suspense" | ||
| 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/00zzm.mitlhgp.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/00zzm.mitlhgp.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"MqhfAIJelFcfY-r3VPpLx"} | ||
| 4:{} | ||
| 5:"$0:rsc:props:children:0:props:serverProvidedParams:params" | ||
| 8:null |
@@ -12,3 +12,3 @@ 1:"$Sreact.fragment" | ||
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/00zzm.mitlhgp.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/00zzm.mitlhgp.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"MqhfAIJelFcfY-r3VPpLx"} | ||
| 6:{} | ||
@@ -15,0 +15,0 @@ 7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params" |
@@ -5,2 +5,2 @@ 1:"$Sreact.fragment" | ||
| 4:"$Sreact.suspense" | ||
| 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Next.js Bundle Analyzer"}],["$","meta","1",{"name":"description","content":"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis"}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Next.js Bundle Analyzer"}],["$","meta","1",{"name":"description","content":"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis"}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"MqhfAIJelFcfY-r3VPpLx"} |
@@ -5,2 +5,2 @@ 1:"$Sreact.fragment" | ||
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"MqhfAIJelFcfY-r3VPpLx"} |
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"MqhfAIJelFcfY-r3VPpLx"} |
@@ -10,2 +10,2 @@ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0i88bcw_h0tc6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/04et33i0l5-ap.js"/><script src="/_next/static/chunks/0x43bbysh579q.js" async=""></script><script src="/_next/static/chunks/0k64_6z2ysh4p.js" async=""></script><script src="/_next/static/chunks/turbopack-0qfznfy~bo8b-.js" async=""></script><script src="/_next/static/chunks/0o_gj_.8u191e.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Next.js Bundle Analyzer</title><meta name="description" content="Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis"/><script> | ||
| })(); | ||
| </script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/04et33i0l5-ap.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32318,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n3:I[59856,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n4:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ViewportBoundary\"]\na:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"MetadataBoundary\"]\nc:I[26637,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0o_gj_.8u191e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\\n document.documentElement.classList.toggle('dark', theme === 'dark');\\n\\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) =\u003e {\\n document.documentElement.classList.toggle('dark', e.matches);\\n });\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"suX0JsyrtO_LycAVegwv4\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Next.js Bundle Analyzer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis\"}]]\n"])</script></body></html> | ||
| </script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/04et33i0l5-ap.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32318,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n3:I[59856,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n4:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ViewportBoundary\"]\na:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"MetadataBoundary\"]\nc:I[26637,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0o_gj_.8u191e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\\n document.documentElement.classList.toggle('dark', theme === 'dark');\\n\\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) =\u003e {\\n document.documentElement.classList.toggle('dark', e.matches);\\n });\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"MqhfAIJelFcfY-r3VPpLx\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Next.js Bundle Analyzer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis\"}]]\n"])</script></body></html> |
@@ -10,3 +10,3 @@ 1:"$Sreact.fragment" | ||
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],null]}],false]],"m":"$undefined","G":["$c",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],null]}],false]],"m":"$undefined","G":["$c",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"MqhfAIJelFcfY-r3VPpLx"} | ||
| d:[] | ||
@@ -13,0 +13,0 @@ 7:"$Wd" |
@@ -10,3 +10,3 @@ 1:"$Sreact.fragment" | ||
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],null]}],false]],"m":"$undefined","G":["$c",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],null]}],false]],"m":"$undefined","G":["$c",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"MqhfAIJelFcfY-r3VPpLx"} | ||
| d:[] | ||
@@ -13,0 +13,0 @@ 7:"$Wd" |
@@ -5,2 +5,2 @@ 1:"$Sreact.fragment" | ||
| 4:"$Sreact.suspense" | ||
| 0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Next.js Bundle Analyzer"}],["$","meta","1",{"name":"description","content":"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis"}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Next.js Bundle Analyzer"}],["$","meta","1",{"name":"description","content":"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis"}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"MqhfAIJelFcfY-r3VPpLx"} |
@@ -5,2 +5,2 @@ 1:"$Sreact.fragment" | ||
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"MqhfAIJelFcfY-r3VPpLx"} |
| 1:"$Sreact.fragment" | ||
| 2:I[39685,["/_next/static/chunks/0o_gj_.8u191e.js"],"OutletBoundary"] | ||
| 3:"$Sreact.suspense" | ||
| 0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"MqhfAIJelFcfY-r3VPpLx"} | ||
| 4:null |
@@ -5,2 +5,2 @@ 1:"$Sreact.fragment" | ||
| 4:[] | ||
| 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"MqhfAIJelFcfY-r3VPpLx"} |
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"/_not-found","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"/_not-found","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"MqhfAIJelFcfY-r3VPpLx"} |
@@ -10,2 +10,2 @@ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0i88bcw_h0tc6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/04et33i0l5-ap.js"/><script src="/_next/static/chunks/0x43bbysh579q.js" async=""></script><script src="/_next/static/chunks/0k64_6z2ysh4p.js" async=""></script><script src="/_next/static/chunks/turbopack-0qfznfy~bo8b-.js" async=""></script><script src="/_next/static/chunks/0o_gj_.8u191e.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Next.js Bundle Analyzer</title><meta name="description" content="Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis"/><script> | ||
| })(); | ||
| </script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/04et33i0l5-ap.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32318,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n3:I[59856,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n4:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ViewportBoundary\"]\na:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"MetadataBoundary\"]\nc:I[26637,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0o_gj_.8u191e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\\n document.documentElement.classList.toggle('dark', theme === 'dark');\\n\\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) =\u003e {\\n document.documentElement.classList.toggle('dark', e.matches);\\n });\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"suX0JsyrtO_LycAVegwv4\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Next.js Bundle Analyzer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis\"}]]\n"])</script></body></html> | ||
| </script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/04et33i0l5-ap.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32318,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n3:I[59856,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n4:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ViewportBoundary\"]\na:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"MetadataBoundary\"]\nc:I[26637,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0o_gj_.8u191e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\\n document.documentElement.classList.toggle('dark', theme === 'dark');\\n\\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) =\u003e {\\n document.documentElement.classList.toggle('dark', e.matches);\\n });\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"MqhfAIJelFcfY-r3VPpLx\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Next.js Bundle Analyzer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis\"}]]\n"])</script></body></html> |
@@ -10,2 +10,2 @@ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0i88bcw_h0tc6.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/04et33i0l5-ap.js"/><script src="/_next/static/chunks/0x43bbysh579q.js" async=""></script><script src="/_next/static/chunks/0k64_6z2ysh4p.js" async=""></script><script src="/_next/static/chunks/turbopack-0qfznfy~bo8b-.js" async=""></script><script src="/_next/static/chunks/0o_gj_.8u191e.js" async=""></script><script src="/_next/static/chunks/00zzm.mitlhgp.js" async=""></script><title>Next.js Bundle Analyzer</title><meta name="description" content="Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis"/><script> | ||
| })(); | ||
| </script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><main class="h-screen flex flex-col bg-background"><div class="flex-none px-4 py-2 border-b border-border flex items-center gap-3"><div class="flex-1 flex"><div class="flex items-center gap-2 min-w-64 max-w-full"><button class="inline-flex items-center gap-2 whitespace-nowrap rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 flex-grow-1 w-full justify-between font-mono text-sm" role="combobox" aria-expanded="false" disabled="" type="button" aria-haspopup="dialog" aria-controls="radix-_R_lbtb_" data-state="closed"><div class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader mr-2 inline animate-spin" aria-hidden="true"><path d="M12 2v4"></path><path d="m16.2 7.8 2.9-2.9"></path><path d="M18 12h4"></path><path d="m16.2 16.2 2.9 2.9"></path><path d="M12 18v4"></path><path d="m4.9 19.1 2.9-2.9"></path><path d="M2 12h4"></path><path d="m4.9 4.9 2.9 2.9"></path></svg>Loading routes...</div><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down h-4 w-4 shrink-0 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></div></button></div></div><div class="flex items-center gap-2"></div></div><div class="flex-1 flex min-h-0"><div class="flex-1 min-w-0 p-4 bg-background"><div class="h-full w-full grid grid-cols-12 grid-rows-8 gap-2"><div class="animate-pulse rounded-md bg-muted col-span-5 row-span-4"></div><div class="animate-pulse rounded-md bg-muted col-span-4 row-span-3"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-3"></div><div class="animate-pulse rounded-md bg-muted col-span-4 row-span-1"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-4"></div><div class="animate-pulse rounded-md bg-muted col-span-2 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-2 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-4 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-2 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-2"></div></div></div><button type="button" class="flex-none w-1 bg-border cursor-col-resize transition-colors" disabled="" aria-label="Resize sidebar"></button><div class="flex-none bg-muted border-l border-border overflow-y-auto" style="width:20%"><div class="flex-1 p-3 space-y-4 overflow-y-auto"><div class="animate-pulse rounded-md bg-muted h-4 w-3/4"></div><div class="animate-pulse rounded-md bg-muted h-4 w-full"></div><div class="animate-pulse rounded-md bg-muted h-4 w-5/6"></div><div class="mt-4 space-y-2"><div class="animate-pulse rounded-md bg-muted h-3 w-full"></div><div class="animate-pulse rounded-md bg-muted h-3 w-full"></div><div class="animate-pulse rounded-md bg-muted h-3 w-4/5"></div></div></div></div></div></main><!--$--><!--/$--><script src="/_next/static/chunks/04et33i0l5-ap.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32318,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n3:I[59856,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n4:I[80929,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ClientPageRoot\"]\n5:I[79331,[\"/_next/static/chunks/0o_gj_.8u191e.js\",\"/_next/static/chunks/00zzm.mitlhgp.js\"],\"default\"]\n8:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ViewportBoundary\"]\nd:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"MetadataBoundary\"]\nf:I[26637,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0o_gj_.8u191e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\\n document.documentElement.classList.toggle('dark', theme === 'dark');\\n\\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) =\u003e {\\n document.documentElement.classList.toggle('dark', e.matches);\\n });\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/00zzm.mitlhgp.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"suX0JsyrtO_LycAVegwv4\"}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"a:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"Next.js Bundle Analyzer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis\"}]]\n"])</script></body></html> | ||
| </script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><main class="h-screen flex flex-col bg-background"><div class="flex-none px-4 py-2 border-b border-border flex items-center gap-3"><div class="flex-1 flex"><div class="flex items-center gap-2 min-w-64 max-w-full"><button class="inline-flex items-center gap-2 whitespace-nowrap rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 flex-grow-1 w-full justify-between font-mono text-sm" role="combobox" aria-expanded="false" disabled="" type="button" aria-haspopup="dialog" aria-controls="radix-_R_lbtb_" data-state="closed"><div class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader mr-2 inline animate-spin" aria-hidden="true"><path d="M12 2v4"></path><path d="m16.2 7.8 2.9-2.9"></path><path d="M18 12h4"></path><path d="m16.2 16.2 2.9 2.9"></path><path d="M12 18v4"></path><path d="m4.9 19.1 2.9-2.9"></path><path d="M2 12h4"></path><path d="m4.9 4.9 2.9 2.9"></path></svg>Loading routes...</div><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down h-4 w-4 shrink-0 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></div></button></div></div><div class="flex items-center gap-2"></div></div><div class="flex-1 flex min-h-0"><div class="flex-1 min-w-0 p-4 bg-background"><div class="h-full w-full grid grid-cols-12 grid-rows-8 gap-2"><div class="animate-pulse rounded-md bg-muted col-span-5 row-span-4"></div><div class="animate-pulse rounded-md bg-muted col-span-4 row-span-3"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-3"></div><div class="animate-pulse rounded-md bg-muted col-span-4 row-span-1"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-4"></div><div class="animate-pulse rounded-md bg-muted col-span-2 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-2 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-4 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-2 row-span-2"></div><div class="animate-pulse rounded-md bg-muted col-span-3 row-span-2"></div></div></div><button type="button" class="flex-none w-1 bg-border cursor-col-resize transition-colors" disabled="" aria-label="Resize sidebar"></button><div class="flex-none bg-muted border-l border-border overflow-y-auto" style="width:20%"><div class="flex-1 p-3 space-y-4 overflow-y-auto"><div class="animate-pulse rounded-md bg-muted h-4 w-3/4"></div><div class="animate-pulse rounded-md bg-muted h-4 w-full"></div><div class="animate-pulse rounded-md bg-muted h-4 w-5/6"></div><div class="mt-4 space-y-2"><div class="animate-pulse rounded-md bg-muted h-3 w-full"></div><div class="animate-pulse rounded-md bg-muted h-3 w-full"></div><div class="animate-pulse rounded-md bg-muted h-3 w-4/5"></div></div></div></div></div></main><!--$--><!--/$--><script src="/_next/static/chunks/04et33i0l5-ap.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32318,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n3:I[59856,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\"]\n4:I[80929,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ClientPageRoot\"]\n5:I[79331,[\"/_next/static/chunks/0o_gj_.8u191e.js\",\"/_next/static/chunks/00zzm.mitlhgp.js\"],\"default\"]\n8:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"ViewportBoundary\"]\nd:I[39685,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"MetadataBoundary\"]\nf:I[26637,[\"/_next/static/chunks/0o_gj_.8u191e.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0o_gj_.8u191e.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\\n document.documentElement.classList.toggle('dark', theme === 'dark');\\n\\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) =\u003e {\\n document.documentElement.classList.toggle('dark', e.matches);\\n });\\n })();\\n \"}}]}],[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/00zzm.mitlhgp.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0i88bcw_h0tc6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"MqhfAIJelFcfY-r3VPpLx\"}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"a:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"Next.js Bundle Analyzer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize and analyze your Next.js bundle sizes with interactive treemap and dependency analysis\"}]]\n"])</script></body></html> |
@@ -12,3 +12,3 @@ 1:"$Sreact.fragment" | ||
| :HL["/_next/static/chunks/0i88bcw_h0tc6.css","style"] | ||
| 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/00zzm.mitlhgp.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"suX0JsyrtO_LycAVegwv4"} | ||
| 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o_gj_.8u191e.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n document.documentElement.classList.toggle('dark', theme === 'dark');\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\n document.documentElement.classList.toggle('dark', e.matches);\n });\n })();\n "}}]}],["$","body",null,{"className":"font-sans antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/00zzm.mitlhgp.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0i88bcw_h0tc6.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"MqhfAIJelFcfY-r3VPpLx"} | ||
| 6:{} | ||
@@ -15,0 +15,0 @@ 7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params" |
@@ -42,3 +42,3 @@ #!/usr/bin/env node | ||
| const nextBuild = async (options, directory)=>{ | ||
| process.title = `next-build (v${"16.3.0-canary.87"})`; | ||
| process.title = `next-build (v${"16.3.0-canary.88"})`; | ||
| process.on('SIGTERM', ()=>{ | ||
@@ -45,0 +45,0 @@ (0, _cpuprofile.saveCpuProfile)(); |
@@ -43,3 +43,3 @@ #!/usr/bin/env node | ||
| const bindings = await (0, _swc.loadBindings)((_config_experimental1 = config.experimental) == null ? void 0 : _config_experimental1.useWasmBinary); | ||
| await bindings.turbo.databaseCompact(cachePath, "16.3.0-canary.87"); | ||
| await bindings.turbo.databaseCompact(cachePath, "16.3.0-canary.88"); | ||
| console.log('Turbopack database compaction complete.'); | ||
@@ -46,0 +46,0 @@ }; |
@@ -18,3 +18,3 @@ /** | ||
| const _setattributesfromprops = require("./set-attributes-from-props"); | ||
| const version = "16.3.0-canary.87"; | ||
| const version = "16.3.0-canary.88"; | ||
| window.next = { | ||
@@ -21,0 +21,0 @@ version, |
@@ -38,30 +38,2 @@ "use strict"; | ||
| const globalMutable = {}; | ||
| // A Back/Forward press between a reload and hydration moves the browser to | ||
| // a different history entry than the one the document was activated on, and | ||
| // the resulting popstate fires before any listener exists. When that | ||
| // happened, the initial history write is skipped so the traversed entry's | ||
| // state is not overwritten, and the missed popstate is replayed once the | ||
| // router has mounted. | ||
| let missedTraversalBeforeHydration = 'unchecked'; | ||
| /** | ||
| * Handles a popstate event (or one that was missed before hydration). | ||
| * By default dispatches ACTION_RESTORE, however if the history entry was not | ||
| * pushed/replaced by app-router it will reload the page. | ||
| * That case can happen when the old router injected the history entry. | ||
| */ function handlePopState(state) { | ||
| if (!state) { | ||
| // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case. | ||
| return; | ||
| } | ||
| // This case happens when the history entry was pushed by the `pages` router. | ||
| if (!state.__NA) { | ||
| window.location.reload(); | ||
| return; | ||
| } | ||
| // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously | ||
| // Without startTransition works if the cache is there for this path | ||
| (0, _react.startTransition)(()=>{ | ||
| (0, _approuterinstance.dispatchTraverseAction)(window.location.href, state.__PRIVATE_NEXTJS_INTERNALS_TREE); | ||
| }); | ||
| } | ||
| function HistoryUpdater({ appRouterState }) { | ||
@@ -75,18 +47,2 @@ (0, _react.useInsertionEffect)(()=>{ | ||
| const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState; | ||
| if (missedTraversalBeforeHydration === 'unchecked') { | ||
| missedTraversalBeforeHydration = 'none'; | ||
| if (typeof window.navigation !== 'undefined') { | ||
| // Entry keys are stable across replaceState but not traversals. | ||
| const activationEntry = window.navigation.activation?.entry; | ||
| const currentEntry = window.navigation.currentEntry; | ||
| if (activationEntry != null && currentEntry != null && activationEntry.key !== currentEntry.key && // Only entries written by the app router can be restored; on any | ||
| // other entry the traversal is left unhandled, as before. | ||
| window.history.state?.__NA === true) { | ||
| missedTraversalBeforeHydration = 'missed'; | ||
| // The tree was rendered even though the history write is skipped. | ||
| (0, _committedstate.setLastCommittedTree)(tree); | ||
| return; | ||
| } | ||
| } | ||
| } | ||
| const appHistoryState = { | ||
@@ -326,14 +282,24 @@ tree, | ||
| }; | ||
| const onPopState = (event)=>handlePopState(event.state); | ||
| /** | ||
| * Handle popstate event, this is used to handle back/forward in the browser. | ||
| * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page. | ||
| * That case can happen when the old router injected the history entry. | ||
| */ const onPopState = (event)=>{ | ||
| if (!event.state) { | ||
| // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case. | ||
| return; | ||
| } | ||
| // This case happens when the history entry was pushed by the `pages` router. | ||
| if (!event.state.__NA) { | ||
| window.location.reload(); | ||
| return; | ||
| } | ||
| // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously | ||
| // Without startTransition works if the cache is there for this path | ||
| (0, _react.startTransition)(()=>{ | ||
| (0, _approuterinstance.dispatchTraverseAction)(window.location.href, event.state.__PRIVATE_NEXTJS_INTERNALS_TREE); | ||
| }); | ||
| }; | ||
| // Register popstate event to call onPopstate. | ||
| window.addEventListener('popstate', onPopState); | ||
| if (missedTraversalBeforeHydration === 'missed') { | ||
| missedTraversalBeforeHydration = 'none'; | ||
| // The entry's state may have been rewritten by a third-party script | ||
| // since the traversal was detected. | ||
| const entryHistoryState = window.history.state; | ||
| if (entryHistoryState?.__NA) { | ||
| handlePopState(entryHistoryState); | ||
| } | ||
| } | ||
| return ()=>{ | ||
@@ -340,0 +306,0 @@ window.history.pushState = originalPushState; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/client/components/app-router.tsx"],"sourcesContent":["import React, {\n useEffect,\n useMemo,\n startTransition,\n useInsertionEffect,\n useDeferredValue,\n} from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n GlobalLayoutRouterContext,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { CacheNode } from '../../shared/lib/app-router-types'\nimport { ACTION_RESTORE } from './router-reducer/router-reducer-types'\nimport type {\n AppHistoryState,\n AppRouterState,\n} from './router-reducer/router-reducer-types'\nimport { createHrefFromUrl } from './router-reducer/create-href-from-url'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport { dispatchAppRouterAction, useActionQueue } from './use-action-queue'\nimport { setLastCommittedTree } from './router-reducer/reducers/committed-state'\nimport { AppRouterAnnouncer } from './app-router-announcer'\nimport { RedirectBoundary } from './redirect-boundary'\nimport { findHeadInCache } from './router-reducer/reducers/find-head-in-cache'\nimport { unresolvedThenable } from './unresolved-thenable'\nimport { removeBasePath } from '../remove-base-path'\nimport { hasBasePath } from '../has-base-path'\nimport {\n extractSourcePageFromFlightRouterState,\n getSelectedParams,\n} from './router-reducer/compute-changed-path'\nimport { useNavFailureHandler } from './nav-failure-handler'\nimport {\n dispatchTraverseAction,\n publicAppRouterInstance,\n type AppRouterActionQueue,\n type GlobalErrorState,\n} from './app-router-instance'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { isRedirectError } from './redirect-error'\nimport { pingVisibleLinks } from './links'\nimport RootErrorBoundary from './errors/root-error-boundary'\nimport DefaultGlobalError from './builtin/global-error'\nimport { RootLayoutBoundary } from '../../lib/framework/boundary-components'\nimport type { StaticIndicatorState } from '../dev/hot-reloader/app/hot-reloader-app'\nimport { getAssetTokenQuery } from '../../shared/lib/deployment-id'\n\nconst globalMutable: {\n pendingMpaPath?: string\n} = {}\n\n// A Back/Forward press between a reload and hydration moves the browser to\n// a different history entry than the one the document was activated on, and\n// the resulting popstate fires before any listener exists. When that\n// happened, the initial history write is skipped so the traversed entry's\n// state is not overwritten, and the missed popstate is replayed once the\n// router has mounted.\nlet missedTraversalBeforeHydration: 'unchecked' | 'missed' | 'none' =\n 'unchecked'\n\n/**\n * Handles a popstate event (or one that was missed before hydration).\n * By default dispatches ACTION_RESTORE, however if the history entry was not\n * pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */\nfunction handlePopState(state: PopStateEvent['state']): void {\n if (!state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return\n }\n\n // This case happens when the history entry was pushed by the `pages` router.\n if (!state.__NA) {\n window.location.reload()\n return\n }\n\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n startTransition(() => {\n dispatchTraverseAction(\n window.location.href,\n state.__PRIVATE_NEXTJS_INTERNALS_TREE\n )\n })\n}\n\nfunction HistoryUpdater({\n appRouterState,\n}: {\n appRouterState: AppRouterState\n}) {\n useInsertionEffect(() => {\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n // clear pending URL as navigation is no longer\n // in flight\n window.next.__pendingUrl = undefined\n }\n\n const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState\n\n if (missedTraversalBeforeHydration === 'unchecked') {\n missedTraversalBeforeHydration = 'none'\n if (typeof window.navigation !== 'undefined') {\n // Entry keys are stable across replaceState but not traversals.\n const activationEntry = window.navigation.activation?.entry\n const currentEntry = window.navigation.currentEntry\n if (\n activationEntry != null &&\n currentEntry != null &&\n activationEntry.key !== currentEntry.key &&\n // Only entries written by the app router can be restored; on any\n // other entry the traversal is left unhandled, as before.\n window.history.state?.__NA === true\n ) {\n missedTraversalBeforeHydration = 'missed'\n // The tree was rendered even though the history write is skipped.\n setLastCommittedTree(tree)\n return\n }\n }\n }\n\n const appHistoryState: AppHistoryState = {\n tree,\n renderedSearch,\n }\n\n // TODO: Use Navigation API if available\n const historyState = {\n ...(pushRef.preserveCustomHistoryState ? window.history.state : {}),\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState,\n }\n if (\n pushRef.pendingPush &&\n // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n createHrefFromUrl(new URL(window.location.href)) !== canonicalUrl\n ) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false\n window.history.pushState(historyState, '', canonicalUrl)\n } else {\n window.history.replaceState(historyState, '', canonicalUrl)\n }\n\n setLastCommittedTree(tree)\n }, [appRouterState])\n\n useEffect(() => {\n // The Next-Url and the base tree may affect the result of a prefetch\n // task. Re-prefetch all visible links with the updated values. In most\n // cases, this will not result in any new network requests, only if\n // the prefetch result actually varies on one of these inputs.\n pingVisibleLinks(appRouterState.nextUrl, appRouterState.tree)\n }, [appRouterState.nextUrl, appRouterState.tree])\n\n return null\n}\n\nfunction copyNextJsInternalHistoryState(data: any) {\n if (data == null) data = {}\n const currentState = window.history.state\n const __NA = currentState?.__NA\n if (__NA) {\n data.__NA = __NA\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE =\n currentState?.__PRIVATE_NEXTJS_INTERNALS_TREE\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE\n }\n\n return data\n}\n\nfunction Head({\n headCacheNode,\n}: {\n headCacheNode: CacheNode | null\n}): React.ReactNode {\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null\n const prefetchHead =\n headCacheNode !== null ? headCacheNode.prefetchHead : null\n\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head\n\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n return useDeferredValue(head, resolvedPrefetchRsc)\n}\n\n/**\n * The global router that wraps the application components.\n */\nfunction Router({\n actionQueue,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n const state = useActionQueue(actionQueue)\n const { canonicalUrl } = state\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = useMemo(() => {\n const url = new URL(\n canonicalUrl,\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: hasBasePath(url.pathname)\n ? removeBasePath(url.pathname)\n : url.pathname,\n }\n }, [canonicalUrl])\n\n if (process.env.NODE_ENV !== 'production') {\n const { cache, tree } = state\n\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: publicAppRouterInstance,\n cache,\n tree,\n }\n }, [cache, tree])\n }\n\n useEffect(() => {\n const sourcePage = extractSourcePageFromFlightRouterState(state.tree)\n\n if (sourcePage !== undefined) {\n window.next.__internal_src_page = sourcePage\n } else {\n delete window.next.__internal_src_page\n }\n }, [state.tree])\n\n useEffect(() => {\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event: PageTransitionEvent) {\n if (\n !event.persisted ||\n !window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n ) {\n return\n }\n\n // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n // of the last MPA navigation.\n globalMutable.pendingMpaPath = undefined\n\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(window.location.href),\n historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE,\n })\n }\n\n window.addEventListener('pageshow', handlePageShow)\n\n return () => {\n window.removeEventListener('pageshow', handlePageShow)\n }\n }, [])\n\n useEffect(() => {\n // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n // are caught and handled by the router.\n function handleUnhandledRedirect(\n event: ErrorEvent | PromiseRejectionEvent\n ) {\n const error = 'reason' in event ? event.reason : event.error\n if (isRedirectError(error)) {\n event.preventDefault()\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n // TODO: This should access the router methods directly, rather than\n // go through the public interface.\n if (redirectType === 'push') {\n publicAppRouterInstance.push(url, {})\n } else {\n publicAppRouterInstance.replace(url, {})\n }\n }\n }\n window.addEventListener('error', handleUnhandledRedirect)\n window.addEventListener('unhandledrejection', handleUnhandledRedirect)\n\n return () => {\n window.removeEventListener('error', handleUnhandledRedirect)\n window.removeEventListener('unhandledrejection', handleUnhandledRedirect)\n }\n }, [])\n\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = state\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location = window.location\n if (pushRef.pendingPush) {\n location.assign(canonicalUrl)\n } else {\n location.replace(canonicalUrl)\n }\n\n globalMutable.pendingMpaPath = canonicalUrl\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n // NOTE: This is intentionally using `throw` instead of `use` because we're\n // inside an externally mutable condition (pushRef.mpaNavigation), which\n // violates the rules of hooks.\n throw unresolvedThenable\n }\n\n useEffect(() => {\n const originalPushState = window.history.pushState.bind(window.history)\n const originalReplaceState = window.history.replaceState.bind(\n window.history\n )\n\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (\n url: string | URL | null | undefined\n ) => {\n const href = window.location.href\n const appHistoryState: AppHistoryState | undefined =\n window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(url ?? href, href),\n historyState: appHistoryState,\n })\n })\n }\n\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.pushState = function pushState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalPushState(data, _unused, url)\n }\n\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n\n return originalPushState(data, _unused, url)\n }\n\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.replaceState = function replaceState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalReplaceState(data, _unused, url)\n }\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n return originalReplaceState(data, _unused, url)\n }\n\n const onPopState = (event: PopStateEvent) => handlePopState(event.state)\n\n // Register popstate event to call onPopstate.\n window.addEventListener('popstate', onPopState)\n\n if (missedTraversalBeforeHydration === 'missed') {\n missedTraversalBeforeHydration = 'none'\n // The entry's state may have been rewritten by a third-party script\n // since the traversal was detected.\n const entryHistoryState = window.history.state\n if (entryHistoryState?.__NA) {\n handlePopState(entryHistoryState)\n }\n }\n\n return () => {\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n window.removeEventListener('popstate', onPopState)\n }\n }, [])\n\n const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state\n\n const matchingHead = useMemo(() => {\n return findHeadInCache(cache, tree[1])\n }, [cache, tree])\n\n // Add memoized pathParams for useParams.\n const pathParams = useMemo(() => {\n return getSelectedParams(tree)\n }, [tree])\n\n // Create instrumented promises for navigation hooks (dev-only)\n // These are specially instrumented promises to show in the Suspense DevTools\n // Promises are cached outside of render to survive suspense retries.\n let instrumentedNavigationPromises: NavigationPromises | null = null\n if (process.env.NODE_ENV !== 'production') {\n const { createRootNavigationPromises } =\n require('./navigation-devtools') as typeof import('./navigation-devtools')\n\n instrumentedNavigationPromises = createRootNavigationPromises(\n tree,\n pathname,\n searchParams,\n pathParams\n )\n }\n\n const layoutRouterContext = useMemo(() => {\n return {\n parentTree: tree,\n parentCacheNode: cache,\n parentSegmentPath: null,\n parentParams: {},\n parentLoadingData: null,\n // This is the <Activity> \"name\" that shows up in the Suspense DevTools.\n // It represents the root of the app.\n debugNameContext: '/',\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl,\n // Root segment is always active\n isActive: true,\n }\n }, [tree, cache, canonicalUrl])\n\n const globalLayoutRouterContext = useMemo(() => {\n return {\n tree,\n focusAndScrollRef,\n nextUrl,\n previousNextUrl,\n }\n }, [tree, focusAndScrollRef, nextUrl, previousNextUrl])\n\n let head\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead\n\n head = (\n <Head\n key={\n // Necessary for PPR: omit search params from the key to match prerendered keys\n typeof window === 'undefined' ? headKeyWithoutSearchParams : headKey\n }\n headCacheNode={headCacheNode}\n />\n )\n } else {\n head = null\n }\n\n let content = (\n <RedirectBoundary>\n {head}\n {/* RootLayoutBoundary enables detection of Suspense boundaries around the root layout.\n When users wrap their layout in <Suspense>, this creates the component stack pattern\n \"Suspense -> RootLayoutBoundary\" which dynamic-rendering.ts uses to allow dynamic rendering. */}\n <RootLayoutBoundary>{cache.rsc}</RootLayoutBoundary>\n <AppRouterAnnouncer tree={tree} />\n </RedirectBoundary>\n )\n\n if (process.env.__NEXT_DEV_SERVER) {\n // In development, we apply few error boundaries and hot-reloader:\n // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n // - HotReloader:\n // - hot-reload the app when the code changes\n // - render dev overlay\n // - catch runtime errors and display global-error when necessary\n if (typeof window !== 'undefined') {\n const { DevRootHTTPAccessFallbackBoundary } =\n // TODO(browser-variant): migrate to a .ts/.browser.ts split so the browser bundle drops the server branch; see scripts/generate-browser-variant-aliases.mjs\n // ast-grep-ignore: no-typeof-window-require-tsx\n require('./dev-root-http-access-fallback-boundary') as typeof import('./dev-root-http-access-fallback-boundary')\n content = (\n <DevRootHTTPAccessFallbackBoundary>\n {content}\n </DevRootHTTPAccessFallbackBoundary>\n )\n }\n const HotReloader: typeof import('../dev/hot-reloader/app/hot-reloader-app').default =\n (\n require('../dev/hot-reloader/app/hot-reloader-app') as typeof import('../dev/hot-reloader/app/hot-reloader-app')\n ).default\n\n content = (\n <HotReloader\n globalError={globalError}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n >\n {content}\n </HotReloader>\n )\n } else {\n content = (\n <RootErrorBoundary\n errorComponent={globalError[0]}\n errorStyles={globalError[1]}\n >\n {content}\n </RootErrorBoundary>\n )\n }\n\n if (process.env.__NEXT_USE_OFFLINE) {\n const { OfflineProvider } =\n require('./use-offline') as typeof import('./use-offline')\n content = <OfflineProvider>{content}</OfflineProvider>\n }\n\n return (\n <>\n <HistoryUpdater appRouterState={state} />\n {process.env.TURBOPACK ? null : <RuntimeStylesForWebpack />}\n <NavigationPromisesContext.Provider\n value={instrumentedNavigationPromises}\n >\n <PathParamsContext.Provider value={pathParams}>\n <PathnameContext.Provider value={pathname}>\n <SearchParamsContext.Provider value={searchParams}>\n <GlobalLayoutRouterContext.Provider\n value={globalLayoutRouterContext}\n >\n {/* TODO: We should be able to remove this context. useRouter\n should import from app-router-instance instead. It's only\n necessary because useRouter is shared between Pages and\n App Router. We should fork that module, then remove this\n context provider. */}\n <AppRouterContext.Provider value={publicAppRouterInstance}>\n <LayoutRouterContext.Provider value={layoutRouterContext}>\n {content}\n </LayoutRouterContext.Provider>\n </AppRouterContext.Provider>\n </GlobalLayoutRouterContext.Provider>\n </SearchParamsContext.Provider>\n </PathnameContext.Provider>\n </PathParamsContext.Provider>\n </NavigationPromisesContext.Provider>\n </>\n )\n}\n\nexport default function AppRouter({\n actionQueue,\n globalErrorState,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalErrorState: GlobalErrorState\n webSocket?: WebSocket\n staticIndicatorState?: StaticIndicatorState\n}) {\n useNavFailureHandler()\n\n const router = (\n <Router\n actionQueue={actionQueue}\n globalError={globalErrorState}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n />\n )\n\n // At the very top level, use the default GlobalError component as the final fallback.\n // When the app router itself fails, which means the framework itself fails, we show the default error.\n return (\n <RootErrorBoundary errorComponent={DefaultGlobalError}>\n {router}\n </RootErrorBoundary>\n )\n}\n\nlet runtimeStyles: Set<string> | undefined\nlet runtimeStyleChanged: Set<() => void> | undefined\nif (!process.env.TURBOPACK && typeof window !== 'undefined') {\n runtimeStyles = new Set<string>()\n runtimeStyleChanged = new Set<() => void>()\n\n globalThis._N_E_STYLE_LOAD = function (href: string) {\n if (!runtimeStyles || !runtimeStyleChanged) return Promise.resolve()\n let len = runtimeStyles.size\n runtimeStyles.add(href)\n if (runtimeStyles.size !== len) {\n runtimeStyleChanged.forEach((cb) => cb())\n }\n // TODO figure out how to get a promise here\n // But maybe it's not necessary as react would block rendering until it's loaded\n return Promise.resolve()\n }\n}\n\nfunction RuntimeStylesForWebpack() {\n const [, forceUpdate] = React.useState(0)\n const renderedStylesSize = runtimeStyles?.size ?? 0\n useEffect(() => {\n if (!runtimeStyles || !runtimeStyleChanged) return\n const changed = () => forceUpdate((c) => c + 1)\n runtimeStyleChanged.add(changed)\n if (renderedStylesSize !== runtimeStyles.size) {\n changed()\n }\n return () => {\n runtimeStyleChanged.delete(changed)\n }\n }, [renderedStylesSize, forceUpdate])\n\n const query = getAssetTokenQuery()\n return [...(runtimeStyles || [])].map((href, i) => (\n <link\n key={i}\n rel=\"stylesheet\"\n href={`${href}${query}`}\n // @ts-ignore\n precedence=\"next\"\n // TODO figure out crossOrigin and nonce\n // crossOrigin={TODO}\n // nonce={TODO}\n />\n ))\n}\n"],"names":["AppRouter","globalMutable","missedTraversalBeforeHydration","handlePopState","state","__NA","window","location","reload","startTransition","dispatchTraverseAction","href","__PRIVATE_NEXTJS_INTERNALS_TREE","HistoryUpdater","appRouterState","useInsertionEffect","process","env","__NEXT_APP_NAV_FAIL_HANDLING","next","__pendingUrl","undefined","tree","pushRef","canonicalUrl","renderedSearch","navigation","activationEntry","activation","entry","currentEntry","key","history","setLastCommittedTree","appHistoryState","historyState","preserveCustomHistoryState","pendingPush","createHrefFromUrl","URL","pushState","replaceState","useEffect","pingVisibleLinks","nextUrl","copyNextJsInternalHistoryState","data","currentState","Head","headCacheNode","head","prefetchHead","resolvedPrefetchRsc","useDeferredValue","Router","actionQueue","globalError","webSocket","staticIndicatorState","useActionQueue","searchParams","pathname","useMemo","url","hasBasePath","removeBasePath","NODE_ENV","cache","nd","router","publicAppRouterInstance","sourcePage","extractSourcePageFromFlightRouterState","__internal_src_page","handlePageShow","event","persisted","pendingMpaPath","dispatchAppRouterAction","type","ACTION_RESTORE","addEventListener","removeEventListener","handleUnhandledRedirect","error","reason","isRedirectError","preventDefault","getURLFromRedirectError","redirectType","getRedirectTypeFromError","push","replace","mpaNavigation","assign","unresolvedThenable","originalPushState","bind","originalReplaceState","applyUrlFromHistoryPushReplace","_unused","_N","onPopState","entryHistoryState","focusAndScrollRef","previousNextUrl","matchingHead","findHeadInCache","pathParams","getSelectedParams","instrumentedNavigationPromises","createRootNavigationPromises","require","layoutRouterContext","parentTree","parentCacheNode","parentSegmentPath","parentParams","parentLoadingData","debugNameContext","isActive","globalLayoutRouterContext","headKey","headKeyWithoutSearchParams","content","RedirectBoundary","RootLayoutBoundary","rsc","AppRouterAnnouncer","__NEXT_DEV_SERVER","DevRootHTTPAccessFallbackBoundary","HotReloader","default","RootErrorBoundary","errorComponent","errorStyles","__NEXT_USE_OFFLINE","OfflineProvider","TURBOPACK","RuntimeStylesForWebpack","NavigationPromisesContext","Provider","value","PathParamsContext","PathnameContext","SearchParamsContext","GlobalLayoutRouterContext","AppRouterContext","LayoutRouterContext","globalErrorState","useNavFailureHandler","DefaultGlobalError","runtimeStyles","runtimeStyleChanged","Set","globalThis","_N_E_STYLE_LOAD","Promise","resolve","len","size","add","forEach","cb","forceUpdate","React","useState","renderedStylesSize","changed","c","delete","query","getAssetTokenQuery","map","i","link","rel","precedence"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/client/components/app-router.tsx"],"sourcesContent":["import React, {\n useEffect,\n useMemo,\n startTransition,\n useInsertionEffect,\n useDeferredValue,\n} from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n GlobalLayoutRouterContext,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { CacheNode } from '../../shared/lib/app-router-types'\nimport { ACTION_RESTORE } from './router-reducer/router-reducer-types'\nimport type {\n AppHistoryState,\n AppRouterState,\n} from './router-reducer/router-reducer-types'\nimport { createHrefFromUrl } from './router-reducer/create-href-from-url'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport { dispatchAppRouterAction, useActionQueue } from './use-action-queue'\nimport { setLastCommittedTree } from './router-reducer/reducers/committed-state'\nimport { AppRouterAnnouncer } from './app-router-announcer'\nimport { RedirectBoundary } from './redirect-boundary'\nimport { findHeadInCache } from './router-reducer/reducers/find-head-in-cache'\nimport { unresolvedThenable } from './unresolved-thenable'\nimport { removeBasePath } from '../remove-base-path'\nimport { hasBasePath } from '../has-base-path'\nimport {\n extractSourcePageFromFlightRouterState,\n getSelectedParams,\n} from './router-reducer/compute-changed-path'\nimport { useNavFailureHandler } from './nav-failure-handler'\nimport {\n dispatchTraverseAction,\n publicAppRouterInstance,\n type AppRouterActionQueue,\n type GlobalErrorState,\n} from './app-router-instance'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { isRedirectError } from './redirect-error'\nimport { pingVisibleLinks } from './links'\nimport RootErrorBoundary from './errors/root-error-boundary'\nimport DefaultGlobalError from './builtin/global-error'\nimport { RootLayoutBoundary } from '../../lib/framework/boundary-components'\nimport type { StaticIndicatorState } from '../dev/hot-reloader/app/hot-reloader-app'\nimport { getAssetTokenQuery } from '../../shared/lib/deployment-id'\n\nconst globalMutable: {\n pendingMpaPath?: string\n} = {}\n\nfunction HistoryUpdater({\n appRouterState,\n}: {\n appRouterState: AppRouterState\n}) {\n useInsertionEffect(() => {\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n // clear pending URL as navigation is no longer\n // in flight\n window.next.__pendingUrl = undefined\n }\n\n const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState\n\n const appHistoryState: AppHistoryState = {\n tree,\n renderedSearch,\n }\n\n // TODO: Use Navigation API if available\n const historyState = {\n ...(pushRef.preserveCustomHistoryState ? window.history.state : {}),\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState,\n }\n if (\n pushRef.pendingPush &&\n // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n createHrefFromUrl(new URL(window.location.href)) !== canonicalUrl\n ) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false\n window.history.pushState(historyState, '', canonicalUrl)\n } else {\n window.history.replaceState(historyState, '', canonicalUrl)\n }\n\n setLastCommittedTree(tree)\n }, [appRouterState])\n\n useEffect(() => {\n // The Next-Url and the base tree may affect the result of a prefetch\n // task. Re-prefetch all visible links with the updated values. In most\n // cases, this will not result in any new network requests, only if\n // the prefetch result actually varies on one of these inputs.\n pingVisibleLinks(appRouterState.nextUrl, appRouterState.tree)\n }, [appRouterState.nextUrl, appRouterState.tree])\n\n return null\n}\n\nfunction copyNextJsInternalHistoryState(data: any) {\n if (data == null) data = {}\n const currentState = window.history.state\n const __NA = currentState?.__NA\n if (__NA) {\n data.__NA = __NA\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE =\n currentState?.__PRIVATE_NEXTJS_INTERNALS_TREE\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE\n }\n\n return data\n}\n\nfunction Head({\n headCacheNode,\n}: {\n headCacheNode: CacheNode | null\n}): React.ReactNode {\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null\n const prefetchHead =\n headCacheNode !== null ? headCacheNode.prefetchHead : null\n\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head\n\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n return useDeferredValue(head, resolvedPrefetchRsc)\n}\n\n/**\n * The global router that wraps the application components.\n */\nfunction Router({\n actionQueue,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n const state = useActionQueue(actionQueue)\n const { canonicalUrl } = state\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = useMemo(() => {\n const url = new URL(\n canonicalUrl,\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: hasBasePath(url.pathname)\n ? removeBasePath(url.pathname)\n : url.pathname,\n }\n }, [canonicalUrl])\n\n if (process.env.NODE_ENV !== 'production') {\n const { cache, tree } = state\n\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: publicAppRouterInstance,\n cache,\n tree,\n }\n }, [cache, tree])\n }\n\n useEffect(() => {\n const sourcePage = extractSourcePageFromFlightRouterState(state.tree)\n\n if (sourcePage !== undefined) {\n window.next.__internal_src_page = sourcePage\n } else {\n delete window.next.__internal_src_page\n }\n }, [state.tree])\n\n useEffect(() => {\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event: PageTransitionEvent) {\n if (\n !event.persisted ||\n !window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n ) {\n return\n }\n\n // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n // of the last MPA navigation.\n globalMutable.pendingMpaPath = undefined\n\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(window.location.href),\n historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE,\n })\n }\n\n window.addEventListener('pageshow', handlePageShow)\n\n return () => {\n window.removeEventListener('pageshow', handlePageShow)\n }\n }, [])\n\n useEffect(() => {\n // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n // are caught and handled by the router.\n function handleUnhandledRedirect(\n event: ErrorEvent | PromiseRejectionEvent\n ) {\n const error = 'reason' in event ? event.reason : event.error\n if (isRedirectError(error)) {\n event.preventDefault()\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n // TODO: This should access the router methods directly, rather than\n // go through the public interface.\n if (redirectType === 'push') {\n publicAppRouterInstance.push(url, {})\n } else {\n publicAppRouterInstance.replace(url, {})\n }\n }\n }\n window.addEventListener('error', handleUnhandledRedirect)\n window.addEventListener('unhandledrejection', handleUnhandledRedirect)\n\n return () => {\n window.removeEventListener('error', handleUnhandledRedirect)\n window.removeEventListener('unhandledrejection', handleUnhandledRedirect)\n }\n }, [])\n\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = state\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location = window.location\n if (pushRef.pendingPush) {\n location.assign(canonicalUrl)\n } else {\n location.replace(canonicalUrl)\n }\n\n globalMutable.pendingMpaPath = canonicalUrl\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n // NOTE: This is intentionally using `throw` instead of `use` because we're\n // inside an externally mutable condition (pushRef.mpaNavigation), which\n // violates the rules of hooks.\n throw unresolvedThenable\n }\n\n useEffect(() => {\n const originalPushState = window.history.pushState.bind(window.history)\n const originalReplaceState = window.history.replaceState.bind(\n window.history\n )\n\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (\n url: string | URL | null | undefined\n ) => {\n const href = window.location.href\n const appHistoryState: AppHistoryState | undefined =\n window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(url ?? href, href),\n historyState: appHistoryState,\n })\n })\n }\n\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.pushState = function pushState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalPushState(data, _unused, url)\n }\n\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n\n return originalPushState(data, _unused, url)\n }\n\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.replaceState = function replaceState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalReplaceState(data, _unused, url)\n }\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n return originalReplaceState(data, _unused, url)\n }\n\n /**\n * Handle popstate event, this is used to handle back/forward in the browser.\n * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */\n const onPopState = (event: PopStateEvent) => {\n if (!event.state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return\n }\n\n // This case happens when the history entry was pushed by the `pages` router.\n if (!event.state.__NA) {\n window.location.reload()\n return\n }\n\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n startTransition(() => {\n dispatchTraverseAction(\n window.location.href,\n event.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n )\n })\n }\n\n // Register popstate event to call onPopstate.\n window.addEventListener('popstate', onPopState)\n return () => {\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n window.removeEventListener('popstate', onPopState)\n }\n }, [])\n\n const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state\n\n const matchingHead = useMemo(() => {\n return findHeadInCache(cache, tree[1])\n }, [cache, tree])\n\n // Add memoized pathParams for useParams.\n const pathParams = useMemo(() => {\n return getSelectedParams(tree)\n }, [tree])\n\n // Create instrumented promises for navigation hooks (dev-only)\n // These are specially instrumented promises to show in the Suspense DevTools\n // Promises are cached outside of render to survive suspense retries.\n let instrumentedNavigationPromises: NavigationPromises | null = null\n if (process.env.NODE_ENV !== 'production') {\n const { createRootNavigationPromises } =\n require('./navigation-devtools') as typeof import('./navigation-devtools')\n\n instrumentedNavigationPromises = createRootNavigationPromises(\n tree,\n pathname,\n searchParams,\n pathParams\n )\n }\n\n const layoutRouterContext = useMemo(() => {\n return {\n parentTree: tree,\n parentCacheNode: cache,\n parentSegmentPath: null,\n parentParams: {},\n parentLoadingData: null,\n // This is the <Activity> \"name\" that shows up in the Suspense DevTools.\n // It represents the root of the app.\n debugNameContext: '/',\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl,\n // Root segment is always active\n isActive: true,\n }\n }, [tree, cache, canonicalUrl])\n\n const globalLayoutRouterContext = useMemo(() => {\n return {\n tree,\n focusAndScrollRef,\n nextUrl,\n previousNextUrl,\n }\n }, [tree, focusAndScrollRef, nextUrl, previousNextUrl])\n\n let head\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead\n\n head = (\n <Head\n key={\n // Necessary for PPR: omit search params from the key to match prerendered keys\n typeof window === 'undefined' ? headKeyWithoutSearchParams : headKey\n }\n headCacheNode={headCacheNode}\n />\n )\n } else {\n head = null\n }\n\n let content = (\n <RedirectBoundary>\n {head}\n {/* RootLayoutBoundary enables detection of Suspense boundaries around the root layout.\n When users wrap their layout in <Suspense>, this creates the component stack pattern\n \"Suspense -> RootLayoutBoundary\" which dynamic-rendering.ts uses to allow dynamic rendering. */}\n <RootLayoutBoundary>{cache.rsc}</RootLayoutBoundary>\n <AppRouterAnnouncer tree={tree} />\n </RedirectBoundary>\n )\n\n if (process.env.__NEXT_DEV_SERVER) {\n // In development, we apply few error boundaries and hot-reloader:\n // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n // - HotReloader:\n // - hot-reload the app when the code changes\n // - render dev overlay\n // - catch runtime errors and display global-error when necessary\n if (typeof window !== 'undefined') {\n const { DevRootHTTPAccessFallbackBoundary } =\n // TODO(browser-variant): migrate to a .ts/.browser.ts split so the browser bundle drops the server branch; see scripts/generate-browser-variant-aliases.mjs\n // ast-grep-ignore: no-typeof-window-require-tsx\n require('./dev-root-http-access-fallback-boundary') as typeof import('./dev-root-http-access-fallback-boundary')\n content = (\n <DevRootHTTPAccessFallbackBoundary>\n {content}\n </DevRootHTTPAccessFallbackBoundary>\n )\n }\n const HotReloader: typeof import('../dev/hot-reloader/app/hot-reloader-app').default =\n (\n require('../dev/hot-reloader/app/hot-reloader-app') as typeof import('../dev/hot-reloader/app/hot-reloader-app')\n ).default\n\n content = (\n <HotReloader\n globalError={globalError}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n >\n {content}\n </HotReloader>\n )\n } else {\n content = (\n <RootErrorBoundary\n errorComponent={globalError[0]}\n errorStyles={globalError[1]}\n >\n {content}\n </RootErrorBoundary>\n )\n }\n\n if (process.env.__NEXT_USE_OFFLINE) {\n const { OfflineProvider } =\n require('./use-offline') as typeof import('./use-offline')\n content = <OfflineProvider>{content}</OfflineProvider>\n }\n\n return (\n <>\n <HistoryUpdater appRouterState={state} />\n {process.env.TURBOPACK ? null : <RuntimeStylesForWebpack />}\n <NavigationPromisesContext.Provider\n value={instrumentedNavigationPromises}\n >\n <PathParamsContext.Provider value={pathParams}>\n <PathnameContext.Provider value={pathname}>\n <SearchParamsContext.Provider value={searchParams}>\n <GlobalLayoutRouterContext.Provider\n value={globalLayoutRouterContext}\n >\n {/* TODO: We should be able to remove this context. useRouter\n should import from app-router-instance instead. It's only\n necessary because useRouter is shared between Pages and\n App Router. We should fork that module, then remove this\n context provider. */}\n <AppRouterContext.Provider value={publicAppRouterInstance}>\n <LayoutRouterContext.Provider value={layoutRouterContext}>\n {content}\n </LayoutRouterContext.Provider>\n </AppRouterContext.Provider>\n </GlobalLayoutRouterContext.Provider>\n </SearchParamsContext.Provider>\n </PathnameContext.Provider>\n </PathParamsContext.Provider>\n </NavigationPromisesContext.Provider>\n </>\n )\n}\n\nexport default function AppRouter({\n actionQueue,\n globalErrorState,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalErrorState: GlobalErrorState\n webSocket?: WebSocket\n staticIndicatorState?: StaticIndicatorState\n}) {\n useNavFailureHandler()\n\n const router = (\n <Router\n actionQueue={actionQueue}\n globalError={globalErrorState}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n />\n )\n\n // At the very top level, use the default GlobalError component as the final fallback.\n // When the app router itself fails, which means the framework itself fails, we show the default error.\n return (\n <RootErrorBoundary errorComponent={DefaultGlobalError}>\n {router}\n </RootErrorBoundary>\n )\n}\n\nlet runtimeStyles: Set<string> | undefined\nlet runtimeStyleChanged: Set<() => void> | undefined\nif (!process.env.TURBOPACK && typeof window !== 'undefined') {\n runtimeStyles = new Set<string>()\n runtimeStyleChanged = new Set<() => void>()\n\n globalThis._N_E_STYLE_LOAD = function (href: string) {\n if (!runtimeStyles || !runtimeStyleChanged) return Promise.resolve()\n let len = runtimeStyles.size\n runtimeStyles.add(href)\n if (runtimeStyles.size !== len) {\n runtimeStyleChanged.forEach((cb) => cb())\n }\n // TODO figure out how to get a promise here\n // But maybe it's not necessary as react would block rendering until it's loaded\n return Promise.resolve()\n }\n}\n\nfunction RuntimeStylesForWebpack() {\n const [, forceUpdate] = React.useState(0)\n const renderedStylesSize = runtimeStyles?.size ?? 0\n useEffect(() => {\n if (!runtimeStyles || !runtimeStyleChanged) return\n const changed = () => forceUpdate((c) => c + 1)\n runtimeStyleChanged.add(changed)\n if (renderedStylesSize !== runtimeStyles.size) {\n changed()\n }\n return () => {\n runtimeStyleChanged.delete(changed)\n }\n }, [renderedStylesSize, forceUpdate])\n\n const query = getAssetTokenQuery()\n return [...(runtimeStyles || [])].map((href, i) => (\n <link\n key={i}\n rel=\"stylesheet\"\n href={`${href}${query}`}\n // @ts-ignore\n precedence=\"next\"\n // TODO figure out crossOrigin and nonce\n // crossOrigin={TODO}\n // nonce={TODO}\n />\n ))\n}\n"],"names":["AppRouter","globalMutable","HistoryUpdater","appRouterState","useInsertionEffect","process","env","__NEXT_APP_NAV_FAIL_HANDLING","window","next","__pendingUrl","undefined","tree","pushRef","canonicalUrl","renderedSearch","appHistoryState","historyState","preserveCustomHistoryState","history","state","__NA","__PRIVATE_NEXTJS_INTERNALS_TREE","pendingPush","createHrefFromUrl","URL","location","href","pushState","replaceState","setLastCommittedTree","useEffect","pingVisibleLinks","nextUrl","copyNextJsInternalHistoryState","data","currentState","Head","headCacheNode","head","prefetchHead","resolvedPrefetchRsc","useDeferredValue","Router","actionQueue","globalError","webSocket","staticIndicatorState","useActionQueue","searchParams","pathname","useMemo","url","hasBasePath","removeBasePath","NODE_ENV","cache","nd","router","publicAppRouterInstance","sourcePage","extractSourcePageFromFlightRouterState","__internal_src_page","handlePageShow","event","persisted","pendingMpaPath","dispatchAppRouterAction","type","ACTION_RESTORE","addEventListener","removeEventListener","handleUnhandledRedirect","error","reason","isRedirectError","preventDefault","getURLFromRedirectError","redirectType","getRedirectTypeFromError","push","replace","mpaNavigation","assign","unresolvedThenable","originalPushState","bind","originalReplaceState","applyUrlFromHistoryPushReplace","startTransition","_unused","_N","onPopState","reload","dispatchTraverseAction","focusAndScrollRef","previousNextUrl","matchingHead","findHeadInCache","pathParams","getSelectedParams","instrumentedNavigationPromises","createRootNavigationPromises","require","layoutRouterContext","parentTree","parentCacheNode","parentSegmentPath","parentParams","parentLoadingData","debugNameContext","isActive","globalLayoutRouterContext","headKey","headKeyWithoutSearchParams","content","RedirectBoundary","RootLayoutBoundary","rsc","AppRouterAnnouncer","__NEXT_DEV_SERVER","DevRootHTTPAccessFallbackBoundary","HotReloader","default","RootErrorBoundary","errorComponent","errorStyles","__NEXT_USE_OFFLINE","OfflineProvider","TURBOPACK","RuntimeStylesForWebpack","NavigationPromisesContext","Provider","value","PathParamsContext","PathnameContext","SearchParamsContext","GlobalLayoutRouterContext","AppRouterContext","LayoutRouterContext","globalErrorState","useNavFailureHandler","DefaultGlobalError","runtimeStyles","runtimeStyleChanged","Set","globalThis","_N_E_STYLE_LOAD","Promise","resolve","len","size","add","forEach","cb","forceUpdate","React","useState","renderedStylesSize","changed","c","delete","query","getAssetTokenQuery","map","i","link","rel","precedence"],"mappings":"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","ignoreList":[0]} |
@@ -63,3 +63,3 @@ /* global location */ // imports polyfill from `@next/polyfill-module` after build. | ||
| const _isnextroutererror = require("./components/is-next-router-error"); | ||
| const version = "16.3.0-canary.87"; | ||
| const version = "16.3.0-canary.88"; | ||
| let router; | ||
@@ -66,0 +66,0 @@ const emitter = (0, _mitt.default)(); |
@@ -8,2 +8,4 @@ import type { ComponentType } from 'react'; | ||
| __BUILD_MANIFEST_CB?: Function; | ||
| __TURBOPACK_PAGE_BOOTSTRAP?: Record<string, unknown>; | ||
| __TURBOPACK_CHUNK_LOADING_GLOBAL?: string; | ||
| __SERVER_FILES_MANIFEST?: RequiredServerFilesManifest; | ||
@@ -10,0 +12,0 @@ __MIDDLEWARE_MATCHERS?: ProxyMatcher[]; |
@@ -178,2 +178,17 @@ "use strict"; | ||
| const routes = new Map(); | ||
| const bootstrappedRoutes = new Set(); | ||
| // Bootstrap a client-loaded route (navigation/prefetch) so its entry registers via | ||
| // `window.__NEXT_P`. The initial page is bootstrapped in the document. | ||
| function bootstrapRoute(route) { | ||
| // Gated for DCE | ||
| if (!process.env.__NEXT_TURBOPACK_SHARED_RUNTIME) return; | ||
| if (process.env.NODE_ENV === 'development') return; | ||
| if (bootstrappedRoutes.has(route)) return; | ||
| const params = self.__TURBOPACK_PAGE_BOOTSTRAP?.[route]; | ||
| const global = self.__TURBOPACK_CHUNK_LOADING_GLOBAL; | ||
| if (params == null) return; | ||
| // `global` is always defined alongside the params map (see manifest-loader). | ||
| bootstrappedRoutes.add(route); | ||
| self[global].push(params); | ||
| } | ||
| function maybeExecuteScript(src) { | ||
@@ -263,3 +278,6 @@ // With HMR we might need to "reload" scripts when they are | ||
| return Promise.all([ | ||
| entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)), | ||
| entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)).then((r)=>{ | ||
| bootstrapRoute(route); | ||
| return r; | ||
| }), | ||
| Promise.all(css.map(fetchStyleSheet)) | ||
@@ -266,0 +284,0 @@ ]); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/client/route-loader.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { ProxyMatcher } from '../build/analysis/get-page-static-info'\nimport type { RequiredServerFilesManifest } from '../build'\nimport getAssetPathFromRoute from '../shared/lib/router/utils/get-asset-path-from-route'\nimport { __unsafeCreateTrustedScriptURL } from './trusted-types'\nimport { requestIdleCallback } from './request-idle-callback'\nimport { getAssetTokenQuery } from '../shared/lib/deployment-id'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport { resolvePromiseWithTimeout } from './lib/promise'\n\ndeclare global {\n interface Window {\n __BUILD_MANIFEST?: Record<string, string[]>\n __BUILD_MANIFEST_CB?: Function\n __SERVER_FILES_MANIFEST?: RequiredServerFilesManifest\n __MIDDLEWARE_MATCHERS?: ProxyMatcher[]\n __MIDDLEWARE_MATCHERS_CB?: Function\n __REACT_LOADABLE_MANIFEST?: any\n __DYNAMIC_CSS_MANIFEST?: any\n __RSC_MANIFEST?: any\n __RSC_SERVER_MANIFEST?: any\n __NEXT_FONT_MANIFEST?: any\n __SUBRESOURCE_INTEGRITY_MANIFEST?: string\n __INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string\n }\n}\n\ninterface LoadedEntrypointSuccess {\n component: ComponentType\n exports: any\n}\ninterface LoadedEntrypointFailure {\n error: unknown\n}\ntype RouteEntrypoint = LoadedEntrypointSuccess | LoadedEntrypointFailure\n\ninterface RouteStyleSheet {\n href: string\n content: string\n}\n\ninterface LoadedRouteSuccess extends LoadedEntrypointSuccess {\n styles: RouteStyleSheet[]\n}\ninterface LoadedRouteFailure {\n error: unknown\n}\ntype RouteLoaderEntry = LoadedRouteSuccess | LoadedRouteFailure\n\ninterface Future<V> {\n resolve: (entrypoint: V) => void\n future: Promise<V>\n}\nfunction withFuture<T extends object>(\n key: string,\n map: Map<string, Future<T> | T>,\n generator?: () => Promise<T>\n): Promise<T> {\n let entry = map.get(key)\n if (entry) {\n if ('future' in entry) {\n return entry.future\n }\n return Promise.resolve(entry)\n }\n let resolver: (entrypoint: T) => void\n const prom: Promise<T> = new Promise<T>((resolve) => {\n resolver = resolve\n })\n map.set(key, { resolve: resolver!, future: prom })\n return generator\n ? generator()\n .then((value) => {\n resolver(value)\n return value\n })\n .catch((err) => {\n map.delete(key)\n throw err\n })\n : prom\n}\n\nexport interface RouteLoader {\n whenEntrypoint(route: string): Promise<RouteEntrypoint>\n onEntrypoint(route: string, execute: () => unknown): void\n loadRoute(route: string, prefetch?: boolean): Promise<RouteLoaderEntry>\n prefetch(route: string): Promise<void>\n}\n\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR')\n// TODO: unexport\nexport function markAssetError(err: Error): Error {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {})\n}\n\nexport function isAssetError(err?: Error): boolean | undefined {\n return err && ASSET_LOAD_ERROR in err\n}\n\nfunction hasPrefetch(link?: HTMLLinkElement): boolean {\n try {\n link = document.createElement('link')\n return (\n // detect IE11 since it supports prefetch but isn't detected\n // with relList.support\n (!!window.MSInputMethodContext && !!(document as any).documentMode) ||\n link.relList.supports('prefetch')\n )\n } catch {\n return false\n }\n}\n\nconst canPrefetch: boolean = hasPrefetch()\n\nfunction prefetchViaDom(\n href: string,\n as: string,\n link?: HTMLLinkElement\n): Promise<any> {\n return new Promise<void>((resolve, reject) => {\n const selector = `\n link[rel=\"prefetch\"][href^=\"${href}\"],\n link[rel=\"preload\"][href^=\"${href}\"],\n script[src^=\"${href}\"]`\n if (document.querySelector(selector)) {\n return resolve()\n }\n\n link = document.createElement('link')\n\n // The order of property assignment here is intentional:\n if (as) link!.as = as\n link!.rel = `prefetch`\n link!.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n link!.onload = resolve as any\n link!.onerror = () =>\n reject(markAssetError(new Error(`Failed to prefetch: ${href}`)))\n\n // `href` should always be last:\n link!.href = href\n\n document.head.appendChild(link)\n })\n}\n\nfunction appendScript(\n src: TrustedScriptURL | string,\n script?: HTMLScriptElement\n): Promise<unknown> {\n return new Promise((resolve, reject) => {\n script = document.createElement('script')\n\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve\n script.onerror = () =>\n reject(markAssetError(new Error(`Failed to load script: ${src}`)))\n\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src as string\n document.body.appendChild(script)\n })\n}\n\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise: Promise<void> | undefined\n\n// TODO: stop exporting or cache the failure\n// It'd be best to stop exporting this. It's an implementation detail. We're\n// only exporting it for backwards compatibility with the `page-loader`.\n// Only cache this response as a last resort if we cannot eliminate all other\n// code branches that use the Build Manifest Callback and push them through\n// the Route Loader interface.\nexport function getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST)\n }\n\n const onBuildManifest = new Promise<Record<string, string[]>>((resolve) => {\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB\n self.__BUILD_MANIFEST_CB = () => {\n resolve(self.__BUILD_MANIFEST!)\n cb && cb()\n }\n })\n\n return resolvePromiseWithTimeout(\n onBuildManifest,\n markAssetError(new Error('Failed to load client build manifest')),\n devBuildPromise\n )\n}\n\ninterface RouteFiles {\n scripts: (TrustedScriptURL | string)[]\n css: string[]\n}\nfunction getFilesForRoute(\n assetPrefix: string,\n route: string\n): Promise<RouteFiles> {\n if (process.env.NODE_ENV === 'development') {\n const scriptUrl =\n assetPrefix +\n '/_next/static/chunks/pages' +\n encodeURIPath(getAssetPathFromRoute(route, '.js')) +\n getAssetTokenQuery()\n return Promise.resolve({\n scripts: [__unsafeCreateTrustedScriptURL(scriptUrl)],\n // Styles are handled by `style-loader` in development:\n css: [],\n })\n }\n return getClientBuildManifest().then((manifest) => {\n if (!(route in manifest)) {\n throw markAssetError(new Error(`Failed to lookup route: ${route}`))\n }\n const allFiles = manifest[route].map(\n (entry) => assetPrefix + '/_next/' + encodeURIPath(entry)\n )\n return {\n scripts: allFiles\n .filter((v) => v.endsWith('.js'))\n .map((v) => __unsafeCreateTrustedScriptURL(v) + getAssetTokenQuery()),\n css: allFiles\n .filter((v) => v.endsWith('.css'))\n .map((v) => v + getAssetTokenQuery()),\n }\n })\n}\n\nexport function createRouteLoader(assetPrefix: string): RouteLoader {\n const entrypoints: Map<string, Future<RouteEntrypoint> | RouteEntrypoint> =\n new Map()\n const loadedScripts: Map<string, Promise<unknown>> = new Map()\n const styleSheets: Map<string, Promise<RouteStyleSheet>> = new Map()\n const routes: Map<string, Future<RouteLoaderEntry> | RouteLoaderEntry> =\n new Map()\n\n function maybeExecuteScript(\n src: TrustedScriptURL | string\n ): Promise<unknown> {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (process.env.NODE_ENV !== 'development') {\n let prom: Promise<unknown> | undefined = loadedScripts.get(src.toString())\n if (prom) {\n return prom\n }\n\n // Skip executing script if it's already in the DOM:\n if (document.querySelector(`script[src^=\"${src}\"]`)) {\n return Promise.resolve()\n }\n\n loadedScripts.set(src.toString(), (prom = appendScript(src)))\n return prom\n } else {\n return appendScript(src)\n }\n }\n\n function fetchStyleSheet(href: string): Promise<RouteStyleSheet> {\n let prom: Promise<RouteStyleSheet> | undefined = styleSheets.get(href)\n if (prom) {\n return prom\n }\n\n styleSheets.set(\n href,\n (prom = fetch(href, { credentials: 'same-origin' })\n .then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to load stylesheet: ${href}`)\n }\n return res.text().then((text) => ({ href: href, content: text }))\n })\n .catch((err) => {\n throw markAssetError(err)\n }))\n )\n return prom\n }\n\n return {\n whenEntrypoint(route: string) {\n return withFuture(route, entrypoints)\n },\n onEntrypoint(route: string, execute: undefined | (() => unknown)) {\n ;(execute\n ? Promise.resolve()\n .then(() => execute())\n .then(\n (exports: any) => ({\n component: (exports && exports.default) || exports,\n exports: exports,\n }),\n (err) => ({ error: err })\n )\n : Promise.resolve(undefined)\n ).then((input: RouteEntrypoint | undefined) => {\n const old = entrypoints.get(route)\n if (old && 'resolve' in old) {\n if (input) {\n entrypoints.set(route, input)\n old.resolve(input)\n }\n } else {\n if (input) {\n entrypoints.set(route, input)\n } else {\n entrypoints.delete(route)\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route)\n }\n })\n },\n loadRoute(route: string, prefetch?: boolean) {\n return withFuture<RouteLoaderEntry>(route, routes, () => {\n let devBuildPromiseResolve: () => void\n\n if (process.env.NODE_ENV === 'development') {\n devBuildPromise = new Promise<void>((resolve) => {\n devBuildPromiseResolve = resolve\n })\n }\n\n return resolvePromiseWithTimeout(\n getFilesForRoute(assetPrefix, route)\n .then(({ scripts, css }) => {\n return Promise.all([\n entrypoints.has(route)\n ? []\n : Promise.all(scripts.map(maybeExecuteScript)),\n Promise.all(css.map(fetchStyleSheet)),\n ] as const)\n })\n .then((res) => {\n return this.whenEntrypoint(route).then((entrypoint) => ({\n entrypoint,\n styles: res[1],\n }))\n }),\n markAssetError(new Error(`Route did not complete loading: ${route}`)),\n devBuildPromise\n )\n .then(({ entrypoint, styles }) => {\n const res: RouteLoaderEntry = Object.assign<\n { styles: RouteStyleSheet[] },\n RouteEntrypoint\n >({ styles: styles! }, entrypoint)\n return 'error' in entrypoint ? entrypoint : res\n })\n .catch((err) => {\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err\n }\n return { error: err }\n })\n .finally(() => devBuildPromiseResolve?.())\n })\n },\n prefetch(route: string): Promise<void> {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn\n if ((cn = (navigator as any).connection)) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve()\n }\n return getFilesForRoute(assetPrefix, route)\n .then((output) =>\n Promise.all(\n canPrefetch\n ? output.scripts.map((script) =>\n prefetchViaDom(script.toString(), 'script')\n )\n : []\n )\n )\n .then(() => {\n requestIdleCallback(() => this.loadRoute(route, true).catch(() => {}))\n })\n .catch(\n // swallow prefetch errors\n () => {}\n )\n },\n }\n}\n"],"names":["createRouteLoader","getClientBuildManifest","isAssetError","markAssetError","withFuture","key","map","generator","entry","get","future","Promise","resolve","resolver","prom","set","then","value","catch","err","delete","ASSET_LOAD_ERROR","Symbol","Object","defineProperty","hasPrefetch","link","document","createElement","window","MSInputMethodContext","documentMode","relList","supports","canPrefetch","prefetchViaDom","href","as","reject","selector","querySelector","rel","crossOrigin","process","env","__NEXT_CROSS_ORIGIN","onload","onerror","Error","head","appendChild","appendScript","src","script","body","devBuildPromise","self","__BUILD_MANIFEST","onBuildManifest","cb","__BUILD_MANIFEST_CB","resolvePromiseWithTimeout","getFilesForRoute","assetPrefix","route","NODE_ENV","scriptUrl","encodeURIPath","getAssetPathFromRoute","getAssetTokenQuery","scripts","__unsafeCreateTrustedScriptURL","css","manifest","allFiles","filter","v","endsWith","entrypoints","Map","loadedScripts","styleSheets","routes","maybeExecuteScript","toString","fetchStyleSheet","fetch","credentials","res","ok","text","content","whenEntrypoint","onEntrypoint","execute","exports","component","default","error","undefined","input","old","loadRoute","prefetch","devBuildPromiseResolve","all","has","entrypoint","styles","assign","finally","cn","navigator","connection","saveData","test","effectiveType","output","requestIdleCallback"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../src/client/route-loader.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { ProxyMatcher } from '../build/analysis/get-page-static-info'\nimport type { RequiredServerFilesManifest } from '../build'\nimport getAssetPathFromRoute from '../shared/lib/router/utils/get-asset-path-from-route'\nimport { __unsafeCreateTrustedScriptURL } from './trusted-types'\nimport { requestIdleCallback } from './request-idle-callback'\nimport { getAssetTokenQuery } from '../shared/lib/deployment-id'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport { resolvePromiseWithTimeout } from './lib/promise'\n\ndeclare global {\n interface Window {\n __BUILD_MANIFEST?: Record<string, string[]>\n __BUILD_MANIFEST_CB?: Function\n __TURBOPACK_PAGE_BOOTSTRAP?: Record<string, unknown>\n __TURBOPACK_CHUNK_LOADING_GLOBAL?: string\n __SERVER_FILES_MANIFEST?: RequiredServerFilesManifest\n __MIDDLEWARE_MATCHERS?: ProxyMatcher[]\n __MIDDLEWARE_MATCHERS_CB?: Function\n __REACT_LOADABLE_MANIFEST?: any\n __DYNAMIC_CSS_MANIFEST?: any\n __RSC_MANIFEST?: any\n __RSC_SERVER_MANIFEST?: any\n __NEXT_FONT_MANIFEST?: any\n __SUBRESOURCE_INTEGRITY_MANIFEST?: string\n __INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string\n }\n}\n\ninterface LoadedEntrypointSuccess {\n component: ComponentType\n exports: any\n}\ninterface LoadedEntrypointFailure {\n error: unknown\n}\ntype RouteEntrypoint = LoadedEntrypointSuccess | LoadedEntrypointFailure\n\ninterface RouteStyleSheet {\n href: string\n content: string\n}\n\ninterface LoadedRouteSuccess extends LoadedEntrypointSuccess {\n styles: RouteStyleSheet[]\n}\ninterface LoadedRouteFailure {\n error: unknown\n}\ntype RouteLoaderEntry = LoadedRouteSuccess | LoadedRouteFailure\n\ninterface Future<V> {\n resolve: (entrypoint: V) => void\n future: Promise<V>\n}\nfunction withFuture<T extends object>(\n key: string,\n map: Map<string, Future<T> | T>,\n generator?: () => Promise<T>\n): Promise<T> {\n let entry = map.get(key)\n if (entry) {\n if ('future' in entry) {\n return entry.future\n }\n return Promise.resolve(entry)\n }\n let resolver: (entrypoint: T) => void\n const prom: Promise<T> = new Promise<T>((resolve) => {\n resolver = resolve\n })\n map.set(key, { resolve: resolver!, future: prom })\n return generator\n ? generator()\n .then((value) => {\n resolver(value)\n return value\n })\n .catch((err) => {\n map.delete(key)\n throw err\n })\n : prom\n}\n\nexport interface RouteLoader {\n whenEntrypoint(route: string): Promise<RouteEntrypoint>\n onEntrypoint(route: string, execute: () => unknown): void\n loadRoute(route: string, prefetch?: boolean): Promise<RouteLoaderEntry>\n prefetch(route: string): Promise<void>\n}\n\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR')\n// TODO: unexport\nexport function markAssetError(err: Error): Error {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {})\n}\n\nexport function isAssetError(err?: Error): boolean | undefined {\n return err && ASSET_LOAD_ERROR in err\n}\n\nfunction hasPrefetch(link?: HTMLLinkElement): boolean {\n try {\n link = document.createElement('link')\n return (\n // detect IE11 since it supports prefetch but isn't detected\n // with relList.support\n (!!window.MSInputMethodContext && !!(document as any).documentMode) ||\n link.relList.supports('prefetch')\n )\n } catch {\n return false\n }\n}\n\nconst canPrefetch: boolean = hasPrefetch()\n\nfunction prefetchViaDom(\n href: string,\n as: string,\n link?: HTMLLinkElement\n): Promise<any> {\n return new Promise<void>((resolve, reject) => {\n const selector = `\n link[rel=\"prefetch\"][href^=\"${href}\"],\n link[rel=\"preload\"][href^=\"${href}\"],\n script[src^=\"${href}\"]`\n if (document.querySelector(selector)) {\n return resolve()\n }\n\n link = document.createElement('link')\n\n // The order of property assignment here is intentional:\n if (as) link!.as = as\n link!.rel = `prefetch`\n link!.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n link!.onload = resolve as any\n link!.onerror = () =>\n reject(markAssetError(new Error(`Failed to prefetch: ${href}`)))\n\n // `href` should always be last:\n link!.href = href\n\n document.head.appendChild(link)\n })\n}\n\nfunction appendScript(\n src: TrustedScriptURL | string,\n script?: HTMLScriptElement\n): Promise<unknown> {\n return new Promise((resolve, reject) => {\n script = document.createElement('script')\n\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve\n script.onerror = () =>\n reject(markAssetError(new Error(`Failed to load script: ${src}`)))\n\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src as string\n document.body.appendChild(script)\n })\n}\n\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise: Promise<void> | undefined\n\n// TODO: stop exporting or cache the failure\n// It'd be best to stop exporting this. It's an implementation detail. We're\n// only exporting it for backwards compatibility with the `page-loader`.\n// Only cache this response as a last resort if we cannot eliminate all other\n// code branches that use the Build Manifest Callback and push them through\n// the Route Loader interface.\nexport function getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST)\n }\n\n const onBuildManifest = new Promise<Record<string, string[]>>((resolve) => {\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB\n self.__BUILD_MANIFEST_CB = () => {\n resolve(self.__BUILD_MANIFEST!)\n cb && cb()\n }\n })\n\n return resolvePromiseWithTimeout(\n onBuildManifest,\n markAssetError(new Error('Failed to load client build manifest')),\n devBuildPromise\n )\n}\n\ninterface RouteFiles {\n scripts: (TrustedScriptURL | string)[]\n css: string[]\n}\nfunction getFilesForRoute(\n assetPrefix: string,\n route: string\n): Promise<RouteFiles> {\n if (process.env.NODE_ENV === 'development') {\n const scriptUrl =\n assetPrefix +\n '/_next/static/chunks/pages' +\n encodeURIPath(getAssetPathFromRoute(route, '.js')) +\n getAssetTokenQuery()\n return Promise.resolve({\n scripts: [__unsafeCreateTrustedScriptURL(scriptUrl)],\n // Styles are handled by `style-loader` in development:\n css: [],\n })\n }\n return getClientBuildManifest().then((manifest) => {\n if (!(route in manifest)) {\n throw markAssetError(new Error(`Failed to lookup route: ${route}`))\n }\n const allFiles = manifest[route].map(\n (entry) => assetPrefix + '/_next/' + encodeURIPath(entry)\n )\n return {\n scripts: allFiles\n .filter((v) => v.endsWith('.js'))\n .map((v) => __unsafeCreateTrustedScriptURL(v) + getAssetTokenQuery()),\n css: allFiles\n .filter((v) => v.endsWith('.css'))\n .map((v) => v + getAssetTokenQuery()),\n }\n })\n}\n\nexport function createRouteLoader(assetPrefix: string): RouteLoader {\n const entrypoints: Map<string, Future<RouteEntrypoint> | RouteEntrypoint> =\n new Map()\n const loadedScripts: Map<string, Promise<unknown>> = new Map()\n const styleSheets: Map<string, Promise<RouteStyleSheet>> = new Map()\n const routes: Map<string, Future<RouteLoaderEntry> | RouteLoaderEntry> =\n new Map()\n const bootstrappedRoutes: Set<string> = new Set()\n\n // Bootstrap a client-loaded route (navigation/prefetch) so its entry registers via\n // `window.__NEXT_P`. The initial page is bootstrapped in the document.\n function bootstrapRoute(route: string): void {\n // Gated for DCE\n if (!process.env.__NEXT_TURBOPACK_SHARED_RUNTIME) return\n if (process.env.NODE_ENV === 'development') return\n if (bootstrappedRoutes.has(route)) return\n const params = self.__TURBOPACK_PAGE_BOOTSTRAP?.[route]\n const global = self.__TURBOPACK_CHUNK_LOADING_GLOBAL\n if (params == null) return\n // `global` is always defined alongside the params map (see manifest-loader).\n bootstrappedRoutes.add(route)\n ;(self as any)[global!].push(params)\n }\n\n function maybeExecuteScript(\n src: TrustedScriptURL | string\n ): Promise<unknown> {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (process.env.NODE_ENV !== 'development') {\n let prom: Promise<unknown> | undefined = loadedScripts.get(src.toString())\n if (prom) {\n return prom\n }\n\n // Skip executing script if it's already in the DOM:\n if (document.querySelector(`script[src^=\"${src}\"]`)) {\n return Promise.resolve()\n }\n\n loadedScripts.set(src.toString(), (prom = appendScript(src)))\n return prom\n } else {\n return appendScript(src)\n }\n }\n\n function fetchStyleSheet(href: string): Promise<RouteStyleSheet> {\n let prom: Promise<RouteStyleSheet> | undefined = styleSheets.get(href)\n if (prom) {\n return prom\n }\n\n styleSheets.set(\n href,\n (prom = fetch(href, { credentials: 'same-origin' })\n .then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to load stylesheet: ${href}`)\n }\n return res.text().then((text) => ({ href: href, content: text }))\n })\n .catch((err) => {\n throw markAssetError(err)\n }))\n )\n return prom\n }\n\n return {\n whenEntrypoint(route: string) {\n return withFuture(route, entrypoints)\n },\n onEntrypoint(route: string, execute: undefined | (() => unknown)) {\n ;(execute\n ? Promise.resolve()\n .then(() => execute())\n .then(\n (exports: any) => ({\n component: (exports && exports.default) || exports,\n exports: exports,\n }),\n (err) => ({ error: err })\n )\n : Promise.resolve(undefined)\n ).then((input: RouteEntrypoint | undefined) => {\n const old = entrypoints.get(route)\n if (old && 'resolve' in old) {\n if (input) {\n entrypoints.set(route, input)\n old.resolve(input)\n }\n } else {\n if (input) {\n entrypoints.set(route, input)\n } else {\n entrypoints.delete(route)\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route)\n }\n })\n },\n loadRoute(route: string, prefetch?: boolean) {\n return withFuture<RouteLoaderEntry>(route, routes, () => {\n let devBuildPromiseResolve: () => void\n\n if (process.env.NODE_ENV === 'development') {\n devBuildPromise = new Promise<void>((resolve) => {\n devBuildPromiseResolve = resolve\n })\n }\n\n return resolvePromiseWithTimeout(\n getFilesForRoute(assetPrefix, route)\n .then(({ scripts, css }) => {\n return Promise.all([\n entrypoints.has(route)\n ? []\n : Promise.all(scripts.map(maybeExecuteScript)).then((r) => {\n bootstrapRoute(route)\n return r\n }),\n Promise.all(css.map(fetchStyleSheet)),\n ] as const)\n })\n .then((res) => {\n return this.whenEntrypoint(route).then((entrypoint) => ({\n entrypoint,\n styles: res[1],\n }))\n }),\n markAssetError(new Error(`Route did not complete loading: ${route}`)),\n devBuildPromise\n )\n .then(({ entrypoint, styles }) => {\n const res: RouteLoaderEntry = Object.assign<\n { styles: RouteStyleSheet[] },\n RouteEntrypoint\n >({ styles: styles! }, entrypoint)\n return 'error' in entrypoint ? entrypoint : res\n })\n .catch((err) => {\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err\n }\n return { error: err }\n })\n .finally(() => devBuildPromiseResolve?.())\n })\n },\n prefetch(route: string): Promise<void> {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn\n if ((cn = (navigator as any).connection)) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve()\n }\n return getFilesForRoute(assetPrefix, route)\n .then((output) =>\n Promise.all(\n canPrefetch\n ? output.scripts.map((script) =>\n prefetchViaDom(script.toString(), 'script')\n )\n : []\n )\n )\n .then(() => {\n requestIdleCallback(() => this.loadRoute(route, true).catch(() => {}))\n })\n .catch(\n // swallow prefetch errors\n () => {}\n )\n },\n }\n}\n"],"names":["createRouteLoader","getClientBuildManifest","isAssetError","markAssetError","withFuture","key","map","generator","entry","get","future","Promise","resolve","resolver","prom","set","then","value","catch","err","delete","ASSET_LOAD_ERROR","Symbol","Object","defineProperty","hasPrefetch","link","document","createElement","window","MSInputMethodContext","documentMode","relList","supports","canPrefetch","prefetchViaDom","href","as","reject","selector","querySelector","rel","crossOrigin","process","env","__NEXT_CROSS_ORIGIN","onload","onerror","Error","head","appendChild","appendScript","src","script","body","devBuildPromise","self","__BUILD_MANIFEST","onBuildManifest","cb","__BUILD_MANIFEST_CB","resolvePromiseWithTimeout","getFilesForRoute","assetPrefix","route","NODE_ENV","scriptUrl","encodeURIPath","getAssetPathFromRoute","getAssetTokenQuery","scripts","__unsafeCreateTrustedScriptURL","css","manifest","allFiles","filter","v","endsWith","entrypoints","Map","loadedScripts","styleSheets","routes","bootstrappedRoutes","Set","bootstrapRoute","__NEXT_TURBOPACK_SHARED_RUNTIME","has","params","__TURBOPACK_PAGE_BOOTSTRAP","global","__TURBOPACK_CHUNK_LOADING_GLOBAL","add","push","maybeExecuteScript","toString","fetchStyleSheet","fetch","credentials","res","ok","text","content","whenEntrypoint","onEntrypoint","execute","exports","component","default","error","undefined","input","old","loadRoute","prefetch","devBuildPromiseResolve","all","r","entrypoint","styles","assign","finally","cn","navigator","connection","saveData","test","effectiveType","output","requestIdleCallback"],"mappings":";;;;;;;;;;;;;;;;;IAmPgBA,iBAAiB;eAAjBA;;IA3DAC,sBAAsB;eAAtBA;;IAtFAC,YAAY;eAAZA;;IAJAC,cAAc;eAAdA;;;;gFA3FkB;8BACa;qCACX;8BACD;+BACL;yBACY;AA+C1C,SAASC,WACPC,GAAW,EACXC,GAA+B,EAC/BC,SAA4B;IAE5B,IAAIC,QAAQF,IAAIG,GAAG,CAACJ;IACpB,IAAIG,OAAO;QACT,IAAI,YAAYA,OAAO;YACrB,OAAOA,MAAME,MAAM;QACrB;QACA,OAAOC,QAAQC,OAAO,CAACJ;IACzB;IACA,IAAIK;IACJ,MAAMC,OAAmB,IAAIH,QAAW,CAACC;QACvCC,WAAWD;IACb;IACAN,IAAIS,GAAG,CAACV,KAAK;QAAEO,SAASC;QAAWH,QAAQI;IAAK;IAChD,OAAOP,YACHA,YACGS,IAAI,CAAC,CAACC;QACLJ,SAASI;QACT,OAAOA;IACT,GACCC,KAAK,CAAC,CAACC;QACNb,IAAIc,MAAM,CAACf;QACX,MAAMc;IACR,KACFL;AACN;AASA,MAAMO,mBAAmBC,OAAO;AAEzB,SAASnB,eAAegB,GAAU;IACvC,OAAOI,OAAOC,cAAc,CAACL,KAAKE,kBAAkB,CAAC;AACvD;AAEO,SAASnB,aAAaiB,GAAW;IACtC,OAAOA,OAAOE,oBAAoBF;AACpC;AAEA,SAASM,YAAYC,IAAsB;IACzC,IAAI;QACFA,OAAOC,SAASC,aAAa,CAAC;QAC9B,OAGE,AAFA,4DAA4D;QAC5D,uBAAuB;QACtB,CAAC,CAACC,OAAOC,oBAAoB,IAAI,CAAC,CAAC,AAACH,SAAiBI,YAAY,IAClEL,KAAKM,OAAO,CAACC,QAAQ,CAAC;IAE1B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA,MAAMC,cAAuBT;AAE7B,SAASU,eACPC,IAAY,EACZC,EAAU,EACVX,IAAsB;IAEtB,OAAO,IAAIf,QAAc,CAACC,SAAS0B;QACjC,MAAMC,WAAW,CAAC;kCACY,EAAEH,KAAK;iCACR,EAAEA,KAAK;mBACrB,EAAEA,KAAK,EAAE,CAAC;QACzB,IAAIT,SAASa,aAAa,CAACD,WAAW;YACpC,OAAO3B;QACT;QAEAc,OAAOC,SAASC,aAAa,CAAC;QAE9B,wDAAwD;QACxD,IAAIS,IAAIX,KAAMW,EAAE,GAAGA;QACnBX,KAAMe,GAAG,GAAG,CAAC,QAAQ,CAAC;QACtBf,KAAMgB,WAAW,GAAGC,QAAQC,GAAG,CAACC,mBAAmB;QACnDnB,KAAMoB,MAAM,GAAGlC;QACfc,KAAMqB,OAAO,GAAG,IACdT,OAAOnC,eAAe,qBAAwC,CAAxC,IAAI6C,MAAM,CAAC,oBAAoB,EAAEZ,MAAM,GAAvC,qBAAA;uBAAA;4BAAA;8BAAA;YAAuC;QAE/D,gCAAgC;QAChCV,KAAMU,IAAI,GAAGA;QAEbT,SAASsB,IAAI,CAACC,WAAW,CAACxB;IAC5B;AACF;AAEA,SAASyB,aACPC,GAA8B,EAC9BC,MAA0B;IAE1B,OAAO,IAAI1C,QAAQ,CAACC,SAAS0B;QAC3Be,SAAS1B,SAASC,aAAa,CAAC;QAEhC,wDAAwD;QACxD,mEAAmE;QACnE,iCAAiC;QACjCyB,OAAOP,MAAM,GAAGlC;QAChByC,OAAON,OAAO,GAAG,IACfT,OAAOnC,eAAe,qBAA0C,CAA1C,IAAI6C,MAAM,CAAC,uBAAuB,EAAEI,KAAK,GAAzC,qBAAA;uBAAA;4BAAA;8BAAA;YAAyC;QAEjE,2EAA2E;QAC3E,8BAA8B;QAC9BC,OAAOX,WAAW,GAAGC,QAAQC,GAAG,CAACC,mBAAmB;QAEpD,uEAAuE;QACvE,6CAA6C;QAC7CQ,OAAOD,GAAG,GAAGA;QACbzB,SAAS2B,IAAI,CAACJ,WAAW,CAACG;IAC5B;AACF;AAEA,4EAA4E;AAC5E,qEAAqE;AACrE,IAAIE;AAQG,SAAStD;IACd,IAAIuD,KAAKC,gBAAgB,EAAE;QACzB,OAAO9C,QAAQC,OAAO,CAAC4C,KAAKC,gBAAgB;IAC9C;IAEA,MAAMC,kBAAkB,IAAI/C,QAAkC,CAACC;QAC7D,iDAAiD;QACjD,MAAM+C,KAAKH,KAAKI,mBAAmB;QACnCJ,KAAKI,mBAAmB,GAAG;YACzBhD,QAAQ4C,KAAKC,gBAAgB;YAC7BE,MAAMA;QACR;IACF;IAEA,OAAOE,IAAAA,kCAAyB,EAC9BH,iBACAvD,eAAe,qBAAiD,CAAjD,IAAI6C,MAAM,yCAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAgD,KAC/DO;AAEJ;AAMA,SAASO,iBACPC,WAAmB,EACnBC,KAAa;IAEb,IAAIrB,QAAQC,GAAG,CAACqB,QAAQ,KAAK,eAAe;QAC1C,MAAMC,YACJH,cACA,+BACAI,IAAAA,4BAAa,EAACC,IAAAA,8BAAqB,EAACJ,OAAO,UAC3CK,IAAAA,gCAAkB;QACpB,OAAO1D,QAAQC,OAAO,CAAC;YACrB0D,SAAS;gBAACC,IAAAA,4CAA8B,EAACL;aAAW;YACpD,uDAAuD;YACvDM,KAAK,EAAE;QACT;IACF;IACA,OAAOvE,yBAAyBe,IAAI,CAAC,CAACyD;QACpC,IAAI,CAAET,CAAAA,SAASS,QAAO,GAAI;YACxB,MAAMtE,eAAe,qBAA6C,CAA7C,IAAI6C,MAAM,CAAC,wBAAwB,EAAEgB,OAAO,GAA5C,qBAAA;uBAAA;4BAAA;8BAAA;YAA4C;QACnE;QACA,MAAMU,WAAWD,QAAQ,CAACT,MAAM,CAAC1D,GAAG,CAClC,CAACE,QAAUuD,cAAc,YAAYI,IAAAA,4BAAa,EAAC3D;QAErD,OAAO;YACL8D,SAASI,SACNC,MAAM,CAAC,CAACC,IAAMA,EAAEC,QAAQ,CAAC,QACzBvE,GAAG,CAAC,CAACsE,IAAML,IAAAA,4CAA8B,EAACK,KAAKP,IAAAA,gCAAkB;YACpEG,KAAKE,SACFC,MAAM,CAAC,CAACC,IAAMA,EAAEC,QAAQ,CAAC,SACzBvE,GAAG,CAAC,CAACsE,IAAMA,IAAIP,IAAAA,gCAAkB;QACtC;IACF;AACF;AAEO,SAASrE,kBAAkB+D,WAAmB;IACnD,MAAMe,cACJ,IAAIC;IACN,MAAMC,gBAA+C,IAAID;IACzD,MAAME,cAAqD,IAAIF;IAC/D,MAAMG,SACJ,IAAIH;IACN,MAAMI,qBAAkC,IAAIC;IAE5C,mFAAmF;IACnF,uEAAuE;IACvE,SAASC,eAAerB,KAAa;QACnC,gBAAgB;QAChB,IAAI,CAACrB,QAAQC,GAAG,CAAC0C,+BAA+B,EAAE;QAClD,IAAI3C,QAAQC,GAAG,CAACqB,QAAQ,KAAK,eAAe;QAC5C,IAAIkB,mBAAmBI,GAAG,CAACvB,QAAQ;QACnC,MAAMwB,SAAShC,KAAKiC,0BAA0B,EAAE,CAACzB,MAAM;QACvD,MAAM0B,SAASlC,KAAKmC,gCAAgC;QACpD,IAAIH,UAAU,MAAM;QACpB,6EAA6E;QAC7EL,mBAAmBS,GAAG,CAAC5B;QACrBR,IAAY,CAACkC,OAAQ,CAACG,IAAI,CAACL;IAC/B;IAEA,SAASM,mBACP1C,GAA8B;QAE9B,2DAA2D;QAC3D,kEAAkE;QAClE,cAAc;QACd,IAAIT,QAAQC,GAAG,CAACqB,QAAQ,KAAK,eAAe;YAC1C,IAAInD,OAAqCkE,cAAcvE,GAAG,CAAC2C,IAAI2C,QAAQ;YACvE,IAAIjF,MAAM;gBACR,OAAOA;YACT;YAEA,oDAAoD;YACpD,IAAIa,SAASa,aAAa,CAAC,CAAC,aAAa,EAAEY,IAAI,EAAE,CAAC,GAAG;gBACnD,OAAOzC,QAAQC,OAAO;YACxB;YAEAoE,cAAcjE,GAAG,CAACqC,IAAI2C,QAAQ,IAAKjF,OAAOqC,aAAaC;YACvD,OAAOtC;QACT,OAAO;YACL,OAAOqC,aAAaC;QACtB;IACF;IAEA,SAAS4C,gBAAgB5D,IAAY;QACnC,IAAItB,OAA6CmE,YAAYxE,GAAG,CAAC2B;QACjE,IAAItB,MAAM;YACR,OAAOA;QACT;QAEAmE,YAAYlE,GAAG,CACbqB,MACCtB,OAAOmF,MAAM7D,MAAM;YAAE8D,aAAa;QAAc,GAC9ClF,IAAI,CAAC,CAACmF;YACL,IAAI,CAACA,IAAIC,EAAE,EAAE;gBACX,MAAM,qBAA+C,CAA/C,IAAIpD,MAAM,CAAC,2BAA2B,EAAEZ,MAAM,GAA9C,qBAAA;2BAAA;gCAAA;kCAAA;gBAA8C;YACtD;YACA,OAAO+D,IAAIE,IAAI,GAAGrF,IAAI,CAAC,CAACqF,OAAU,CAAA;oBAAEjE,MAAMA;oBAAMkE,SAASD;gBAAK,CAAA;QAChE,GACCnF,KAAK,CAAC,CAACC;YACN,MAAMhB,eAAegB;QACvB;QAEJ,OAAOL;IACT;IAEA,OAAO;QACLyF,gBAAevC,KAAa;YAC1B,OAAO5D,WAAW4D,OAAOc;QAC3B;QACA0B,cAAaxC,KAAa,EAAEyC,OAAoC;;YAC5DA,CAAAA,UACE9F,QAAQC,OAAO,GACZI,IAAI,CAAC,IAAMyF,WACXzF,IAAI,CACH,CAAC0F,WAAkB,CAAA;oBACjBC,WAAW,AAACD,YAAWA,SAAQE,OAAO,IAAKF;oBAC3CA,SAASA;gBACX,CAAA,GACA,CAACvF,MAAS,CAAA;oBAAE0F,OAAO1F;gBAAI,CAAA,KAE3BR,QAAQC,OAAO,CAACkG,UAAS,EAC3B9F,IAAI,CAAC,CAAC+F;gBACN,MAAMC,MAAMlC,YAAYrE,GAAG,CAACuD;gBAC5B,IAAIgD,OAAO,aAAaA,KAAK;oBAC3B,IAAID,OAAO;wBACTjC,YAAY/D,GAAG,CAACiD,OAAO+C;wBACvBC,IAAIpG,OAAO,CAACmG;oBACd;gBACF,OAAO;oBACL,IAAIA,OAAO;wBACTjC,YAAY/D,GAAG,CAACiD,OAAO+C;oBACzB,OAAO;wBACLjC,YAAY1D,MAAM,CAAC4C;oBACrB;oBACA,gDAAgD;oBAChD,kDAAkD;oBAClD,mBAAmB;oBACnBkB,OAAO9D,MAAM,CAAC4C;gBAChB;YACF;QACF;QACAiD,WAAUjD,KAAa,EAAEkD,QAAkB;YACzC,OAAO9G,WAA6B4D,OAAOkB,QAAQ;gBACjD,IAAIiC;gBAEJ,IAAIxE,QAAQC,GAAG,CAACqB,QAAQ,KAAK,eAAe;oBAC1CV,kBAAkB,IAAI5C,QAAc,CAACC;wBACnCuG,yBAAyBvG;oBAC3B;gBACF;gBAEA,OAAOiD,IAAAA,kCAAyB,EAC9BC,iBAAiBC,aAAaC,OAC3BhD,IAAI,CAAC,CAAC,EAAEsD,OAAO,EAAEE,GAAG,EAAE;oBACrB,OAAO7D,QAAQyG,GAAG,CAAC;wBACjBtC,YAAYS,GAAG,CAACvB,SACZ,EAAE,GACFrD,QAAQyG,GAAG,CAAC9C,QAAQhE,GAAG,CAACwF,qBAAqB9E,IAAI,CAAC,CAACqG;4BACjDhC,eAAerB;4BACf,OAAOqD;wBACT;wBACJ1G,QAAQyG,GAAG,CAAC5C,IAAIlE,GAAG,CAAC0F;qBACrB;gBACH,GACChF,IAAI,CAAC,CAACmF;oBACL,OAAO,IAAI,CAACI,cAAc,CAACvC,OAAOhD,IAAI,CAAC,CAACsG,aAAgB,CAAA;4BACtDA;4BACAC,QAAQpB,GAAG,CAAC,EAAE;wBAChB,CAAA;gBACF,IACFhG,eAAe,qBAAqD,CAArD,IAAI6C,MAAM,CAAC,gCAAgC,EAAEgB,OAAO,GAApD,qBAAA;2BAAA;gCAAA;kCAAA;gBAAoD,KACnET,iBAECvC,IAAI,CAAC,CAAC,EAAEsG,UAAU,EAAEC,MAAM,EAAE;oBAC3B,MAAMpB,MAAwB5E,OAAOiG,MAAM,CAGzC;wBAAED,QAAQA;oBAAQ,GAAGD;oBACvB,OAAO,WAAWA,aAAaA,aAAanB;gBAC9C,GACCjF,KAAK,CAAC,CAACC;oBACN,IAAI+F,UAAU;wBACZ,gDAAgD;wBAChD,MAAM/F;oBACR;oBACA,OAAO;wBAAE0F,OAAO1F;oBAAI;gBACtB,GACCsG,OAAO,CAAC,IAAMN;YACnB;QACF;QACAD,UAASlD,KAAa;YACpB,sHAAsH;YACtH,sBAAsB;YACtB,IAAI0D;YACJ,IAAKA,KAAK,AAACC,UAAkBC,UAAU,EAAG;gBACxC,yDAAyD;gBACzD,IAAIF,GAAGG,QAAQ,IAAI,KAAKC,IAAI,CAACJ,GAAGK,aAAa,GAAG,OAAOpH,QAAQC,OAAO;YACxE;YACA,OAAOkD,iBAAiBC,aAAaC,OAClChD,IAAI,CAAC,CAACgH,SACLrH,QAAQyG,GAAG,CACTlF,cACI8F,OAAO1D,OAAO,CAAChE,GAAG,CAAC,CAAC+C,SAClBlB,eAAekB,OAAO0C,QAAQ,IAAI,aAEpC,EAAE,GAGT/E,IAAI,CAAC;gBACJiH,IAAAA,wCAAmB,EAAC,IAAM,IAAI,CAAChB,SAAS,CAACjD,OAAO,MAAM9C,KAAK,CAAC,KAAO;YACrE,GACCA,KAAK,CACJ,0BAA0B;YAC1B,KAAO;QAEb;IACF;AACF","ignoreList":[0]} |
@@ -69,2 +69,3 @@ import path from 'node:path'; | ||
| 'process.env.__NEXT_APP_NEW_SCROLL_HANDLER': Boolean(config.experimental.appNewScrollHandler), | ||
| 'process.env.__NEXT_TURBOPACK_SHARED_RUNTIME': Boolean(config.experimental.turbopackSharedRuntime), | ||
| 'process.env.__NEXT_PPR': isPPREnabled, | ||
@@ -192,3 +193,2 @@ 'process.env.__NEXT_CACHE_COMPONENTS': isCacheComponentsEnabled, | ||
| 'process.env.__NEXT_INSTRUMENTATION_CLIENT_ROUTER_TRANSITION_EVENTS': config.experimental.instrumentationClientRouterTransitionEvents ?? false, | ||
| 'process.env.__NEXT_APP_SHELLS': config.experimental.appShells ?? false, | ||
| 'process.env.__NEXT_VARY_PARAMS': config.experimental.varyParams ?? false, | ||
@@ -195,0 +195,0 @@ 'process.env.__NEXT_EXPOSE_TESTING_API': dev || config.experimental.exposeTestingApiInProductionBuild === true, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/build/define-env.ts"],"sourcesContent":["import type {\n I18NConfig,\n I18NDomains,\n NextConfigComplete,\n} from '../server/config-shared'\nimport type { ProxyMatcher } from './analysis/get-page-static-info'\nimport type { Rewrite } from '../lib/load-custom-routes'\nimport path from 'node:path'\nimport { needsExperimentalReact } from '../lib/needs-experimental-react'\nimport { checkIsAppPPREnabled } from '../server/lib/experimental/ppr'\nimport {\n getNextConfigEnv,\n getNextPublicEnvironmentVariables,\n} from '../lib/static-env'\n\ntype BloomFilter = ReturnType<\n import('../shared/lib/bloom-filter').BloomFilter['export']\n>\n\nexport interface DefineEnvOptions {\n isTurbopack: boolean\n clientRouterFilters?: {\n staticFilter: BloomFilter\n dynamicFilter: BloomFilter\n }\n config: NextConfigComplete\n dev: boolean\n distDir: string\n projectPath: string\n fetchCacheKeyPrefix: string | undefined\n hasRewrites: boolean\n isClient: boolean\n isEdgeServer: boolean\n isNodeServer: boolean\n middlewareMatchers: ProxyMatcher[] | undefined\n omitNonDeterministic?: boolean\n rewrites: {\n beforeFiles: Rewrite[]\n afterFiles: Rewrite[]\n fallback: Rewrite[]\n }\n}\n\nconst DEFINE_ENV_EXPRESSION = Symbol('DEFINE_ENV_EXPRESSION')\n\ninterface DefineEnv {\n [key: string]:\n | string\n | number\n | string[]\n | boolean\n | { [DEFINE_ENV_EXPRESSION]: string }\n | ProxyMatcher[]\n | BloomFilter\n | Partial<NextConfigComplete['images']>\n | NextConfigComplete['cacheLife']\n | I18NDomains\n | I18NConfig\n}\n\ninterface SerializedDefineEnv {\n [key: string]: string\n}\n\n/**\n * Serializes the DefineEnv config so that it can be inserted into the code by Webpack/Turbopack, JSON stringifies each value.\n */\nfunction serializeDefineEnv(defineEnv: DefineEnv): SerializedDefineEnv {\n const defineEnvStringified: SerializedDefineEnv = Object.fromEntries(\n Object.entries(defineEnv).map(([key, value]) => [\n key,\n typeof value === 'object' && DEFINE_ENV_EXPRESSION in value\n ? value[DEFINE_ENV_EXPRESSION]\n : JSON.stringify(value),\n ])\n )\n return defineEnvStringified\n}\n\nfunction getImageConfig(\n config: NextConfigComplete,\n dev: boolean\n): { 'process.env.__NEXT_IMAGE_OPTS': Partial<NextConfigComplete['images']> } {\n return {\n 'process.env.__NEXT_IMAGE_OPTS': {\n deviceSizes: config.images.deviceSizes,\n imageSizes: config.images.imageSizes,\n qualities: config.images.qualities,\n path: config.images.path,\n loader: config.images.loader,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n unoptimized: config?.images?.unoptimized,\n ...(dev\n ? {\n // additional config in dev to allow validating on the client\n domains: config.images.domains,\n remotePatterns: config.images?.remotePatterns,\n localPatterns: config.images?.localPatterns,\n output: config.output,\n }\n : {}),\n },\n }\n}\n\nexport function getDefineEnv({\n isTurbopack,\n clientRouterFilters,\n config,\n dev,\n distDir,\n projectPath,\n fetchCacheKeyPrefix,\n hasRewrites,\n isClient,\n isEdgeServer,\n isNodeServer,\n middlewareMatchers,\n omitNonDeterministic,\n rewrites,\n}: DefineEnvOptions): SerializedDefineEnv {\n const nextPublicEnv = getNextPublicEnvironmentVariables()\n const nextConfigEnv = getNextConfigEnv(config)\n\n const isPPREnabled = checkIsAppPPREnabled(config.experimental.ppr)\n const isCacheComponentsEnabled = !!config.cacheComponents\n const isUseCacheEnabled = !!config.experimental.useCache\n\n const defineEnv: DefineEnv = {\n // internal field to identify the plugin config\n __NEXT_DEFINE_ENV: true,\n\n ...nextPublicEnv,\n ...nextConfigEnv,\n ...(!isEdgeServer\n ? {}\n : {\n EdgeRuntime:\n /**\n * Cloud providers can set this environment variable to allow users\n * and library authors to have different implementations based on\n * the runtime they are running with, if it's not using `edge-runtime`\n */\n process.env.NEXT_EDGE_RUNTIME_PROVIDER ?? 'edge-runtime',\n\n // process should be only { env: {...} } for edge runtime.\n // For ignore avoid warn on `process.emit` usage but directly omit it.\n 'process.emit': false,\n }),\n 'process.turbopack': isTurbopack,\n 'process.env.TURBOPACK': isTurbopack,\n 'process.env.__NEXT_BUNDLER': isTurbopack\n ? 'Turbopack'\n : process.env.NEXT_RSPACK\n ? 'Rspack'\n : 'Webpack',\n // TODO: enforce `NODE_ENV` on `process.env`, and add a test:\n 'process.env.NODE_ENV':\n dev || config.experimental.allowDevelopmentBuild\n ? 'development'\n : 'production',\n 'process.env.__NEXT_DEV_SERVER': dev ? '1' : '',\n 'process.env.__NEXT_DISABLE_DEV_OVERLAY_UX':\n process.env.NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX === '1',\n 'process.env.NEXT_RUNTIME': isEdgeServer\n ? 'edge'\n : isNodeServer\n ? 'nodejs'\n : '',\n 'process.env.NEXT_MINIMAL': '',\n 'process.env.__NEXT_APP_NAV_FAIL_HANDLING': Boolean(\n config.experimental.appNavFailHandling\n ),\n 'process.env.__NEXT_APP_NEW_SCROLL_HANDLER': Boolean(\n config.experimental.appNewScrollHandler\n ),\n 'process.env.__NEXT_PPR': isPPREnabled,\n 'process.env.__NEXT_CACHE_COMPONENTS': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS': Boolean(\n config.experimental.cachedNavigations\n ),\n 'process.env.__NEXT_INSTANT_NAV_TOGGLE': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_COLD_CACHE_BADGE': Boolean(\n config.experimental.coldCacheBadge\n ),\n 'process.env.__NEXT_REQUEST_INSIGHTS':\n dev && !!config.experimental.requestInsights,\n 'process.env.__NEXT_USE_CACHE': isUseCacheEnabled,\n 'process.env.__NEXT_USE_NODE_STREAMS': isEdgeServer ? false : true,\n\n 'process.env.NEXT_SUPPORTS_IMMUTABLE_ASSETS':\n config.experimental.supportsImmutableAssets || false,\n\n ...(config.experimental?.useSkewCookie || !config.deploymentId\n ? {\n 'process.env.NEXT_DEPLOYMENT_ID': false,\n }\n : isClient\n ? isTurbopack\n ? {\n // This is set at runtime by packages/next/src/client/register-deployment-id-global.ts\n 'process.env.NEXT_DEPLOYMENT_ID': {\n [DEFINE_ENV_EXPRESSION]: 'globalThis.NEXT_DEPLOYMENT_ID',\n },\n }\n : {\n // For Webpack, we currently don't use the non-inlining globalThis.NEXT_DEPLOYMENT_ID\n // approach because we cannot forward this global variable to web workers easily.\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }\n : config.experimental?.runtimeServerDeploymentId\n ? {\n // Don't inline at all, keep process.env.NEXT_DEPLOYMENT_ID as is\n }\n : {\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }),\n\n // Propagates the `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` environment\n // variable to the client.\n 'process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING':\n process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING || false,\n 'process.env.__NEXT_FETCH_CACHE_KEY_PREFIX': fetchCacheKeyPrefix ?? '',\n ...(isTurbopack\n ? {}\n : {\n 'process.env.__NEXT_MIDDLEWARE_MATCHERS': middlewareMatchers ?? [],\n }),\n 'process.env.__NEXT_MANUAL_CLIENT_BASE_PATH':\n config.experimental.manualClientBasePath ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.dynamic))\n ? 0\n : config.experimental.staleTimes?.dynamic\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.static))\n ? 5 * 60 // 5 minutes\n : config.experimental.staleTimes?.static\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED':\n config.experimental.clientRouterFilter ?? true,\n 'process.env.__NEXT_CLIENT_ROUTER_S_FILTER':\n clientRouterFilters?.staticFilter ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_D_FILTER':\n clientRouterFilters?.dynamicFilter ?? false,\n 'process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS': Boolean(\n config.experimental.validateRSCRequestHeaders\n ),\n 'process.env.__NEXT_SERVER_COMPONENTS_HMR_CANCELLATION': Boolean(\n config.experimental.serverComponentsHmrCancellation\n ),\n 'process.env.__NEXT_DYNAMIC_ON_HOVER': Boolean(\n config.experimental.dynamicOnHover\n ),\n 'process.env.__NEXT_USE_OFFLINE': Boolean(config.experimental.useOffline),\n 'process.env.__NEXT_PREFETCH_INLINING': Boolean(\n config.experimental.prefetchInlining\n ),\n 'process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE':\n config.experimental.optimisticClientCache ?? true,\n 'process.env.__NEXT_MIDDLEWARE_PREFETCH':\n config.experimental.proxyPrefetch ?? 'flexible',\n 'process.env.__NEXT_CROSS_ORIGIN': config.crossOrigin,\n 'process.browser': isClient,\n 'process.env.__NEXT_TEST_MODE': process.env.__NEXT_TEST_MODE ?? false,\n // This is used in client/dev-error-overlay/hot-dev-client.js to replace the dist directory\n ...(dev && (isClient ?? isEdgeServer)\n ? {\n 'process.env.__NEXT_DIST_DIR': distDir,\n }\n : {}),\n // This is used in devtools to strip the project path in edge runtime,\n // as there's only a dummy `dir` value (`.`) as edge runtime doesn't have concept of file system.\n ...(dev && isEdgeServer\n ? {\n 'process.env.__NEXT_EDGE_PROJECT_DIR': isTurbopack\n ? path.relative(process.cwd(), projectPath)\n : projectPath,\n }\n : {}),\n 'process.env.__NEXT_BASE_PATH': config.basePath,\n 'process.env.__NEXT_CASE_SENSITIVE_ROUTES': Boolean(\n config.experimental.caseSensitiveRoutes\n ),\n 'process.env.__NEXT_REWRITES': rewrites as any,\n 'process.env.__NEXT_TRAILING_SLASH': config.trailingSlash,\n 'process.env.__NEXT_DEV_INDICATOR': config.devIndicators !== false,\n 'process.env.__NEXT_DEV_INDICATOR_POSITION':\n config.devIndicators === false\n ? 'bottom-left' // This will not be used as the indicator is disabled.\n : (config.devIndicators.position ?? 'bottom-left'),\n 'process.env.__NEXT_STRICT_MODE':\n config.reactStrictMode === null ? false : config.reactStrictMode,\n 'process.env.__NEXT_STRICT_MODE_APP':\n // When next.config.js does not have reactStrictMode it's enabled by default.\n config.reactStrictMode === null ? true : config.reactStrictMode,\n 'process.env.__NEXT_OPTIMIZE_CSS':\n (config.experimental.optimizeCss && !dev) ?? false,\n 'process.env.__NEXT_SCRIPT_WORKERS':\n (config.experimental.nextScriptWorkers && !dev) ?? false,\n 'process.env.__NEXT_SCROLL_RESTORATION':\n config.experimental.scrollRestoration ?? false,\n ...getImageConfig(config, dev),\n 'process.env.__NEXT_ROUTER_BASEPATH': config.basePath,\n 'process.env.__NEXT_HAS_REWRITES': hasRewrites,\n 'process.env.__NEXT_CONFIG_OUTPUT': config.output,\n 'process.env.__NEXT_I18N_SUPPORT': !!config.i18n,\n 'process.env.__NEXT_I18N_DOMAINS': config.i18n?.domains ?? false,\n 'process.env.__NEXT_I18N_CONFIG': config.i18n || '',\n 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE':\n config.skipProxyUrlNormalize,\n 'process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE':\n config.experimental.externalProxyRewritesResolve ?? false,\n 'process.env.__NEXT_MANUAL_TRAILING_SLASH':\n config.skipTrailingSlashRedirect,\n 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION':\n (config.experimental.webVitalsAttribution &&\n config.experimental.webVitalsAttribution.length > 0) ??\n false,\n 'process.env.__NEXT_WEB_VITALS_ATTRIBUTION':\n config.experimental.webVitalsAttribution ?? false,\n 'process.env.__NEXT_LINK_NO_TOUCH_START':\n config.experimental.linkNoTouchStart ?? false,\n 'process.env.__NEXT_ASSET_PREFIX': config.assetPrefix,\n 'process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS':\n !!config.experimental.authInterrupts,\n 'process.env.__NEXT_TELEMETRY_DISABLED': Boolean(\n process.env.NEXT_TELEMETRY_DISABLED\n ),\n ...(isNodeServer || isEdgeServer\n ? {\n // Fix bad-actors in the npm ecosystem (e.g. `node-formidable`)\n // This is typically found in unmaintained modules from the\n // pre-webpack era (common in server-side code)\n 'global.GENTLY': false,\n }\n : undefined),\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_EXPERIMENTAL_REACT':\n needsExperimentalReact(config),\n }\n : undefined),\n\n 'process.env.__NEXT_MULTI_ZONE_DRAFT_MODE':\n config.experimental.multiZoneDraftMode ?? false,\n 'process.env.__NEXT_TRUST_HOST_HEADER':\n config.experimental.trustHostHeader ?? false,\n 'process.env.__NEXT_ALLOWED_REVALIDATE_HEADERS':\n config.experimental.allowedRevalidateHeaderKeys ?? [],\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_RELATIVE_DIST_DIR': config.distDir,\n 'process.env.__NEXT_RELATIVE_PROJECT_DIR': path.relative(\n process.cwd(),\n projectPath\n ),\n }\n : {}),\n\n 'process.env.__NEXT_BROWSER_DEBUG_INFO_IN_TERMINAL': JSON.stringify(\n (config.logging && config.logging.browserToTerminal) || false\n ),\n 'process.env.__NEXT_MCP_SERVER': !!config.experimental.mcpServer,\n\n // The devtools need to know whether or not to show an option to clear the\n // bundler cache. This option may be removed later once Turbopack's\n // filesystem cache feature is more stable.\n //\n // This environment value is currently best-effort:\n // - It's possible to disable the webpack filesystem cache, but it's\n // unlikely for a user to do that.\n // - Rspack's filesystem cache is unstable and requires a different\n // configuration than webpack to enable (which we don't do).\n //\n // In the worst case we'll show an option to clear the cache, but it'll be a\n // no-op that just restarts the development server.\n 'process.env.__NEXT_BUNDLER_HAS_PERSISTENT_CACHE':\n !isTurbopack ||\n (config.experimental.turbopackFileSystemCacheForDev ?? false),\n 'process.env.__NEXT_REACT_DEBUG_CHANNEL':\n config.experimental.reactDebugChannel ?? false,\n 'process.env.__NEXT_TRANSITION_INDICATOR':\n config.experimental.transitionIndicator ?? false,\n 'process.env.__NEXT_GESTURE_TRANSITION':\n config.experimental.gestureTransition ?? false,\n 'process.env.__NEXT_OPTIMISTIC_ROUTING':\n config.experimental.optimisticRouting ?? false,\n 'process.env.__NEXT_INSTRUMENTATION_CLIENT_ROUTER_TRANSITION_EVENTS':\n config.experimental.instrumentationClientRouterTransitionEvents ?? false,\n 'process.env.__NEXT_APP_SHELLS': config.experimental.appShells ?? false,\n 'process.env.__NEXT_VARY_PARAMS': config.experimental.varyParams ?? false,\n 'process.env.__NEXT_EXPOSE_TESTING_API':\n dev || config.experimental.exposeTestingApiInProductionBuild === true,\n 'process.env.__NEXT_CACHE_LIFE': config.cacheLife,\n 'process.env.__NEXT_CLIENT_PARAM_PARSING_ORIGINS':\n config.experimental.clientParamParsingOrigins || [],\n }\n\n const userDefines = config.compiler?.define ?? {}\n for (const key in userDefines) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.define\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefines[key]\n }\n\n if (isNodeServer || isEdgeServer) {\n const userDefinesServer = config.compiler?.defineServer ?? {}\n for (const key in userDefinesServer) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.defineServer\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefinesServer[key]\n }\n }\n\n const serializedDefineEnv = serializeDefineEnv(defineEnv)\n\n // we delay inlining these values until after the build\n // with flying shuttle enabled so we can update them\n // without invalidating entries\n if (!dev && omitNonDeterministic) {\n // client uses window. instead of leaving process.env\n // in case process isn't polyfilled on client already\n // since by this point it won't be added by webpack\n const safeKey = (key: string) =>\n isClient ? `window.${key.split('.').pop()}` : key\n\n for (const key in nextPublicEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n for (const key in nextConfigEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n if (!config.experimental.runtimeServerDeploymentId) {\n for (const key of ['process.env.NEXT_DEPLOYMENT_ID']) {\n serializedDefineEnv[key] = safeKey(key)\n }\n }\n }\n\n return serializedDefineEnv\n}\n"],"names":["path","needsExperimentalReact","checkIsAppPPREnabled","getNextConfigEnv","getNextPublicEnvironmentVariables","DEFINE_ENV_EXPRESSION","Symbol","serializeDefineEnv","defineEnv","defineEnvStringified","Object","fromEntries","entries","map","key","value","JSON","stringify","getImageConfig","config","dev","deviceSizes","images","imageSizes","qualities","loader","dangerouslyAllowSVG","unoptimized","domains","remotePatterns","localPatterns","output","getDefineEnv","isTurbopack","clientRouterFilters","distDir","projectPath","fetchCacheKeyPrefix","hasRewrites","isClient","isEdgeServer","isNodeServer","middlewareMatchers","omitNonDeterministic","rewrites","nextPublicEnv","nextConfigEnv","isPPREnabled","experimental","ppr","isCacheComponentsEnabled","cacheComponents","isUseCacheEnabled","useCache","__NEXT_DEFINE_ENV","EdgeRuntime","process","env","NEXT_EDGE_RUNTIME_PROVIDER","NEXT_RSPACK","allowDevelopmentBuild","NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX","Boolean","appNavFailHandling","appNewScrollHandler","cachedNavigations","coldCacheBadge","requestInsights","supportsImmutableAssets","useSkewCookie","deploymentId","runtimeServerDeploymentId","__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING","manualClientBasePath","isNaN","Number","staleTimes","dynamic","static","clientRouterFilter","staticFilter","dynamicFilter","validateRSCRequestHeaders","serverComponentsHmrCancellation","dynamicOnHover","useOffline","prefetchInlining","optimisticClientCache","proxyPrefetch","crossOrigin","__NEXT_TEST_MODE","relative","cwd","basePath","caseSensitiveRoutes","trailingSlash","devIndicators","position","reactStrictMode","optimizeCss","nextScriptWorkers","scrollRestoration","i18n","skipProxyUrlNormalize","externalProxyRewritesResolve","skipTrailingSlashRedirect","webVitalsAttribution","length","linkNoTouchStart","assetPrefix","authInterrupts","NEXT_TELEMETRY_DISABLED","undefined","multiZoneDraftMode","trustHostHeader","allowedRevalidateHeaderKeys","logging","browserToTerminal","mcpServer","turbopackFileSystemCacheForDev","reactDebugChannel","transitionIndicator","gestureTransition","optimisticRouting","instrumentationClientRouterTransitionEvents","appShells","varyParams","exposeTestingApiInProductionBuild","cacheLife","clientParamParsingOrigins","userDefines","compiler","define","hasOwnProperty","Error","userDefinesServer","defineServer","serializedDefineEnv","safeKey","split","pop"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/build/define-env.ts"],"sourcesContent":["import type {\n I18NConfig,\n I18NDomains,\n NextConfigComplete,\n} from '../server/config-shared'\nimport type { ProxyMatcher } from './analysis/get-page-static-info'\nimport type { Rewrite } from '../lib/load-custom-routes'\nimport path from 'node:path'\nimport { needsExperimentalReact } from '../lib/needs-experimental-react'\nimport { checkIsAppPPREnabled } from '../server/lib/experimental/ppr'\nimport {\n getNextConfigEnv,\n getNextPublicEnvironmentVariables,\n} from '../lib/static-env'\n\ntype BloomFilter = ReturnType<\n import('../shared/lib/bloom-filter').BloomFilter['export']\n>\n\nexport interface DefineEnvOptions {\n isTurbopack: boolean\n clientRouterFilters?: {\n staticFilter: BloomFilter\n dynamicFilter: BloomFilter\n }\n config: NextConfigComplete\n dev: boolean\n distDir: string\n projectPath: string\n fetchCacheKeyPrefix: string | undefined\n hasRewrites: boolean\n isClient: boolean\n isEdgeServer: boolean\n isNodeServer: boolean\n middlewareMatchers: ProxyMatcher[] | undefined\n omitNonDeterministic?: boolean\n rewrites: {\n beforeFiles: Rewrite[]\n afterFiles: Rewrite[]\n fallback: Rewrite[]\n }\n}\n\nconst DEFINE_ENV_EXPRESSION = Symbol('DEFINE_ENV_EXPRESSION')\n\ninterface DefineEnv {\n [key: string]:\n | string\n | number\n | string[]\n | boolean\n | { [DEFINE_ENV_EXPRESSION]: string }\n | ProxyMatcher[]\n | BloomFilter\n | Partial<NextConfigComplete['images']>\n | NextConfigComplete['cacheLife']\n | I18NDomains\n | I18NConfig\n}\n\ninterface SerializedDefineEnv {\n [key: string]: string\n}\n\n/**\n * Serializes the DefineEnv config so that it can be inserted into the code by Webpack/Turbopack, JSON stringifies each value.\n */\nfunction serializeDefineEnv(defineEnv: DefineEnv): SerializedDefineEnv {\n const defineEnvStringified: SerializedDefineEnv = Object.fromEntries(\n Object.entries(defineEnv).map(([key, value]) => [\n key,\n typeof value === 'object' && DEFINE_ENV_EXPRESSION in value\n ? value[DEFINE_ENV_EXPRESSION]\n : JSON.stringify(value),\n ])\n )\n return defineEnvStringified\n}\n\nfunction getImageConfig(\n config: NextConfigComplete,\n dev: boolean\n): { 'process.env.__NEXT_IMAGE_OPTS': Partial<NextConfigComplete['images']> } {\n return {\n 'process.env.__NEXT_IMAGE_OPTS': {\n deviceSizes: config.images.deviceSizes,\n imageSizes: config.images.imageSizes,\n qualities: config.images.qualities,\n path: config.images.path,\n loader: config.images.loader,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n unoptimized: config?.images?.unoptimized,\n ...(dev\n ? {\n // additional config in dev to allow validating on the client\n domains: config.images.domains,\n remotePatterns: config.images?.remotePatterns,\n localPatterns: config.images?.localPatterns,\n output: config.output,\n }\n : {}),\n },\n }\n}\n\nexport function getDefineEnv({\n isTurbopack,\n clientRouterFilters,\n config,\n dev,\n distDir,\n projectPath,\n fetchCacheKeyPrefix,\n hasRewrites,\n isClient,\n isEdgeServer,\n isNodeServer,\n middlewareMatchers,\n omitNonDeterministic,\n rewrites,\n}: DefineEnvOptions): SerializedDefineEnv {\n const nextPublicEnv = getNextPublicEnvironmentVariables()\n const nextConfigEnv = getNextConfigEnv(config)\n\n const isPPREnabled = checkIsAppPPREnabled(config.experimental.ppr)\n const isCacheComponentsEnabled = !!config.cacheComponents\n const isUseCacheEnabled = !!config.experimental.useCache\n\n const defineEnv: DefineEnv = {\n // internal field to identify the plugin config\n __NEXT_DEFINE_ENV: true,\n\n ...nextPublicEnv,\n ...nextConfigEnv,\n ...(!isEdgeServer\n ? {}\n : {\n EdgeRuntime:\n /**\n * Cloud providers can set this environment variable to allow users\n * and library authors to have different implementations based on\n * the runtime they are running with, if it's not using `edge-runtime`\n */\n process.env.NEXT_EDGE_RUNTIME_PROVIDER ?? 'edge-runtime',\n\n // process should be only { env: {...} } for edge runtime.\n // For ignore avoid warn on `process.emit` usage but directly omit it.\n 'process.emit': false,\n }),\n 'process.turbopack': isTurbopack,\n 'process.env.TURBOPACK': isTurbopack,\n 'process.env.__NEXT_BUNDLER': isTurbopack\n ? 'Turbopack'\n : process.env.NEXT_RSPACK\n ? 'Rspack'\n : 'Webpack',\n // TODO: enforce `NODE_ENV` on `process.env`, and add a test:\n 'process.env.NODE_ENV':\n dev || config.experimental.allowDevelopmentBuild\n ? 'development'\n : 'production',\n 'process.env.__NEXT_DEV_SERVER': dev ? '1' : '',\n 'process.env.__NEXT_DISABLE_DEV_OVERLAY_UX':\n process.env.NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX === '1',\n 'process.env.NEXT_RUNTIME': isEdgeServer\n ? 'edge'\n : isNodeServer\n ? 'nodejs'\n : '',\n 'process.env.NEXT_MINIMAL': '',\n 'process.env.__NEXT_APP_NAV_FAIL_HANDLING': Boolean(\n config.experimental.appNavFailHandling\n ),\n 'process.env.__NEXT_APP_NEW_SCROLL_HANDLER': Boolean(\n config.experimental.appNewScrollHandler\n ),\n 'process.env.__NEXT_TURBOPACK_SHARED_RUNTIME': Boolean(\n config.experimental.turbopackSharedRuntime\n ),\n 'process.env.__NEXT_PPR': isPPREnabled,\n 'process.env.__NEXT_CACHE_COMPONENTS': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS': Boolean(\n config.experimental.cachedNavigations\n ),\n 'process.env.__NEXT_INSTANT_NAV_TOGGLE': isCacheComponentsEnabled,\n 'process.env.__NEXT_EXPERIMENTAL_COLD_CACHE_BADGE': Boolean(\n config.experimental.coldCacheBadge\n ),\n 'process.env.__NEXT_REQUEST_INSIGHTS':\n dev && !!config.experimental.requestInsights,\n 'process.env.__NEXT_USE_CACHE': isUseCacheEnabled,\n 'process.env.__NEXT_USE_NODE_STREAMS': isEdgeServer ? false : true,\n\n 'process.env.NEXT_SUPPORTS_IMMUTABLE_ASSETS':\n config.experimental.supportsImmutableAssets || false,\n\n ...(config.experimental?.useSkewCookie || !config.deploymentId\n ? {\n 'process.env.NEXT_DEPLOYMENT_ID': false,\n }\n : isClient\n ? isTurbopack\n ? {\n // This is set at runtime by packages/next/src/client/register-deployment-id-global.ts\n 'process.env.NEXT_DEPLOYMENT_ID': {\n [DEFINE_ENV_EXPRESSION]: 'globalThis.NEXT_DEPLOYMENT_ID',\n },\n }\n : {\n // For Webpack, we currently don't use the non-inlining globalThis.NEXT_DEPLOYMENT_ID\n // approach because we cannot forward this global variable to web workers easily.\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }\n : config.experimental?.runtimeServerDeploymentId\n ? {\n // Don't inline at all, keep process.env.NEXT_DEPLOYMENT_ID as is\n }\n : {\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n }),\n\n // Propagates the `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` environment\n // variable to the client.\n 'process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING':\n process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING || false,\n 'process.env.__NEXT_FETCH_CACHE_KEY_PREFIX': fetchCacheKeyPrefix ?? '',\n ...(isTurbopack\n ? {}\n : {\n 'process.env.__NEXT_MIDDLEWARE_MATCHERS': middlewareMatchers ?? [],\n }),\n 'process.env.__NEXT_MANUAL_CLIENT_BASE_PATH':\n config.experimental.manualClientBasePath ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.dynamic))\n ? 0\n : config.experimental.staleTimes?.dynamic\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.static))\n ? 5 * 60 // 5 minutes\n : config.experimental.staleTimes?.static\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED':\n config.experimental.clientRouterFilter ?? true,\n 'process.env.__NEXT_CLIENT_ROUTER_S_FILTER':\n clientRouterFilters?.staticFilter ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_D_FILTER':\n clientRouterFilters?.dynamicFilter ?? false,\n 'process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS': Boolean(\n config.experimental.validateRSCRequestHeaders\n ),\n 'process.env.__NEXT_SERVER_COMPONENTS_HMR_CANCELLATION': Boolean(\n config.experimental.serverComponentsHmrCancellation\n ),\n 'process.env.__NEXT_DYNAMIC_ON_HOVER': Boolean(\n config.experimental.dynamicOnHover\n ),\n 'process.env.__NEXT_USE_OFFLINE': Boolean(config.experimental.useOffline),\n 'process.env.__NEXT_PREFETCH_INLINING': Boolean(\n config.experimental.prefetchInlining\n ),\n 'process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE':\n config.experimental.optimisticClientCache ?? true,\n 'process.env.__NEXT_MIDDLEWARE_PREFETCH':\n config.experimental.proxyPrefetch ?? 'flexible',\n 'process.env.__NEXT_CROSS_ORIGIN': config.crossOrigin,\n 'process.browser': isClient,\n 'process.env.__NEXT_TEST_MODE': process.env.__NEXT_TEST_MODE ?? false,\n // This is used in client/dev-error-overlay/hot-dev-client.js to replace the dist directory\n ...(dev && (isClient ?? isEdgeServer)\n ? {\n 'process.env.__NEXT_DIST_DIR': distDir,\n }\n : {}),\n // This is used in devtools to strip the project path in edge runtime,\n // as there's only a dummy `dir` value (`.`) as edge runtime doesn't have concept of file system.\n ...(dev && isEdgeServer\n ? {\n 'process.env.__NEXT_EDGE_PROJECT_DIR': isTurbopack\n ? path.relative(process.cwd(), projectPath)\n : projectPath,\n }\n : {}),\n 'process.env.__NEXT_BASE_PATH': config.basePath,\n 'process.env.__NEXT_CASE_SENSITIVE_ROUTES': Boolean(\n config.experimental.caseSensitiveRoutes\n ),\n 'process.env.__NEXT_REWRITES': rewrites as any,\n 'process.env.__NEXT_TRAILING_SLASH': config.trailingSlash,\n 'process.env.__NEXT_DEV_INDICATOR': config.devIndicators !== false,\n 'process.env.__NEXT_DEV_INDICATOR_POSITION':\n config.devIndicators === false\n ? 'bottom-left' // This will not be used as the indicator is disabled.\n : (config.devIndicators.position ?? 'bottom-left'),\n 'process.env.__NEXT_STRICT_MODE':\n config.reactStrictMode === null ? false : config.reactStrictMode,\n 'process.env.__NEXT_STRICT_MODE_APP':\n // When next.config.js does not have reactStrictMode it's enabled by default.\n config.reactStrictMode === null ? true : config.reactStrictMode,\n 'process.env.__NEXT_OPTIMIZE_CSS':\n (config.experimental.optimizeCss && !dev) ?? false,\n 'process.env.__NEXT_SCRIPT_WORKERS':\n (config.experimental.nextScriptWorkers && !dev) ?? false,\n 'process.env.__NEXT_SCROLL_RESTORATION':\n config.experimental.scrollRestoration ?? false,\n ...getImageConfig(config, dev),\n 'process.env.__NEXT_ROUTER_BASEPATH': config.basePath,\n 'process.env.__NEXT_HAS_REWRITES': hasRewrites,\n 'process.env.__NEXT_CONFIG_OUTPUT': config.output,\n 'process.env.__NEXT_I18N_SUPPORT': !!config.i18n,\n 'process.env.__NEXT_I18N_DOMAINS': config.i18n?.domains ?? false,\n 'process.env.__NEXT_I18N_CONFIG': config.i18n || '',\n 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE':\n config.skipProxyUrlNormalize,\n 'process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE':\n config.experimental.externalProxyRewritesResolve ?? false,\n 'process.env.__NEXT_MANUAL_TRAILING_SLASH':\n config.skipTrailingSlashRedirect,\n 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION':\n (config.experimental.webVitalsAttribution &&\n config.experimental.webVitalsAttribution.length > 0) ??\n false,\n 'process.env.__NEXT_WEB_VITALS_ATTRIBUTION':\n config.experimental.webVitalsAttribution ?? false,\n 'process.env.__NEXT_LINK_NO_TOUCH_START':\n config.experimental.linkNoTouchStart ?? false,\n 'process.env.__NEXT_ASSET_PREFIX': config.assetPrefix,\n 'process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS':\n !!config.experimental.authInterrupts,\n 'process.env.__NEXT_TELEMETRY_DISABLED': Boolean(\n process.env.NEXT_TELEMETRY_DISABLED\n ),\n ...(isNodeServer || isEdgeServer\n ? {\n // Fix bad-actors in the npm ecosystem (e.g. `node-formidable`)\n // This is typically found in unmaintained modules from the\n // pre-webpack era (common in server-side code)\n 'global.GENTLY': false,\n }\n : undefined),\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_EXPERIMENTAL_REACT':\n needsExperimentalReact(config),\n }\n : undefined),\n\n 'process.env.__NEXT_MULTI_ZONE_DRAFT_MODE':\n config.experimental.multiZoneDraftMode ?? false,\n 'process.env.__NEXT_TRUST_HOST_HEADER':\n config.experimental.trustHostHeader ?? false,\n 'process.env.__NEXT_ALLOWED_REVALIDATE_HEADERS':\n config.experimental.allowedRevalidateHeaderKeys ?? [],\n ...(isNodeServer || isEdgeServer\n ? {\n 'process.env.__NEXT_RELATIVE_DIST_DIR': config.distDir,\n 'process.env.__NEXT_RELATIVE_PROJECT_DIR': path.relative(\n process.cwd(),\n projectPath\n ),\n }\n : {}),\n\n 'process.env.__NEXT_BROWSER_DEBUG_INFO_IN_TERMINAL': JSON.stringify(\n (config.logging && config.logging.browserToTerminal) || false\n ),\n 'process.env.__NEXT_MCP_SERVER': !!config.experimental.mcpServer,\n\n // The devtools need to know whether or not to show an option to clear the\n // bundler cache. This option may be removed later once Turbopack's\n // filesystem cache feature is more stable.\n //\n // This environment value is currently best-effort:\n // - It's possible to disable the webpack filesystem cache, but it's\n // unlikely for a user to do that.\n // - Rspack's filesystem cache is unstable and requires a different\n // configuration than webpack to enable (which we don't do).\n //\n // In the worst case we'll show an option to clear the cache, but it'll be a\n // no-op that just restarts the development server.\n 'process.env.__NEXT_BUNDLER_HAS_PERSISTENT_CACHE':\n !isTurbopack ||\n (config.experimental.turbopackFileSystemCacheForDev ?? false),\n 'process.env.__NEXT_REACT_DEBUG_CHANNEL':\n config.experimental.reactDebugChannel ?? false,\n 'process.env.__NEXT_TRANSITION_INDICATOR':\n config.experimental.transitionIndicator ?? false,\n 'process.env.__NEXT_GESTURE_TRANSITION':\n config.experimental.gestureTransition ?? false,\n 'process.env.__NEXT_OPTIMISTIC_ROUTING':\n config.experimental.optimisticRouting ?? false,\n 'process.env.__NEXT_INSTRUMENTATION_CLIENT_ROUTER_TRANSITION_EVENTS':\n config.experimental.instrumentationClientRouterTransitionEvents ?? false,\n 'process.env.__NEXT_VARY_PARAMS': config.experimental.varyParams ?? false,\n 'process.env.__NEXT_EXPOSE_TESTING_API':\n dev || config.experimental.exposeTestingApiInProductionBuild === true,\n 'process.env.__NEXT_CACHE_LIFE': config.cacheLife,\n 'process.env.__NEXT_CLIENT_PARAM_PARSING_ORIGINS':\n config.experimental.clientParamParsingOrigins || [],\n }\n\n const userDefines = config.compiler?.define ?? {}\n for (const key in userDefines) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.define\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefines[key]\n }\n\n if (isNodeServer || isEdgeServer) {\n const userDefinesServer = config.compiler?.defineServer ?? {}\n for (const key in userDefinesServer) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.defineServer\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured.`\n )\n }\n defineEnv[key] = userDefinesServer[key]\n }\n }\n\n const serializedDefineEnv = serializeDefineEnv(defineEnv)\n\n // we delay inlining these values until after the build\n // with flying shuttle enabled so we can update them\n // without invalidating entries\n if (!dev && omitNonDeterministic) {\n // client uses window. instead of leaving process.env\n // in case process isn't polyfilled on client already\n // since by this point it won't be added by webpack\n const safeKey = (key: string) =>\n isClient ? `window.${key.split('.').pop()}` : key\n\n for (const key in nextPublicEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n for (const key in nextConfigEnv) {\n serializedDefineEnv[key] = safeKey(key)\n }\n if (!config.experimental.runtimeServerDeploymentId) {\n for (const key of ['process.env.NEXT_DEPLOYMENT_ID']) {\n serializedDefineEnv[key] = safeKey(key)\n }\n }\n }\n\n return serializedDefineEnv\n}\n"],"names":["path","needsExperimentalReact","checkIsAppPPREnabled","getNextConfigEnv","getNextPublicEnvironmentVariables","DEFINE_ENV_EXPRESSION","Symbol","serializeDefineEnv","defineEnv","defineEnvStringified","Object","fromEntries","entries","map","key","value","JSON","stringify","getImageConfig","config","dev","deviceSizes","images","imageSizes","qualities","loader","dangerouslyAllowSVG","unoptimized","domains","remotePatterns","localPatterns","output","getDefineEnv","isTurbopack","clientRouterFilters","distDir","projectPath","fetchCacheKeyPrefix","hasRewrites","isClient","isEdgeServer","isNodeServer","middlewareMatchers","omitNonDeterministic","rewrites","nextPublicEnv","nextConfigEnv","isPPREnabled","experimental","ppr","isCacheComponentsEnabled","cacheComponents","isUseCacheEnabled","useCache","__NEXT_DEFINE_ENV","EdgeRuntime","process","env","NEXT_EDGE_RUNTIME_PROVIDER","NEXT_RSPACK","allowDevelopmentBuild","NEXT_PRIVATE_DISABLE_DEV_OVERLAY_UX","Boolean","appNavFailHandling","appNewScrollHandler","turbopackSharedRuntime","cachedNavigations","coldCacheBadge","requestInsights","supportsImmutableAssets","useSkewCookie","deploymentId","runtimeServerDeploymentId","__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING","manualClientBasePath","isNaN","Number","staleTimes","dynamic","static","clientRouterFilter","staticFilter","dynamicFilter","validateRSCRequestHeaders","serverComponentsHmrCancellation","dynamicOnHover","useOffline","prefetchInlining","optimisticClientCache","proxyPrefetch","crossOrigin","__NEXT_TEST_MODE","relative","cwd","basePath","caseSensitiveRoutes","trailingSlash","devIndicators","position","reactStrictMode","optimizeCss","nextScriptWorkers","scrollRestoration","i18n","skipProxyUrlNormalize","externalProxyRewritesResolve","skipTrailingSlashRedirect","webVitalsAttribution","length","linkNoTouchStart","assetPrefix","authInterrupts","NEXT_TELEMETRY_DISABLED","undefined","multiZoneDraftMode","trustHostHeader","allowedRevalidateHeaderKeys","logging","browserToTerminal","mcpServer","turbopackFileSystemCacheForDev","reactDebugChannel","transitionIndicator","gestureTransition","optimisticRouting","instrumentationClientRouterTransitionEvents","varyParams","exposeTestingApiInProductionBuild","cacheLife","clientParamParsingOrigins","userDefines","compiler","define","hasOwnProperty","Error","userDefinesServer","defineServer","serializedDefineEnv","safeKey","split","pop"],"mappings":"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","ignoreList":[0]} |
@@ -14,3 +14,3 @@ import path from 'path'; | ||
| }({}); | ||
| const nextVersion = "16.3.0-canary.87"; | ||
| const nextVersion = "16.3.0-canary.88"; | ||
| const ArchName = arch(); | ||
@@ -17,0 +17,0 @@ const PlatformName = platform(); |
@@ -121,3 +121,2 @@ var _self___RSC_MANIFEST; | ||
| cachedNavigations: nextConfig.experimental.cachedNavigations ?? false, | ||
| appShells: nextConfig.experimental.appShells, | ||
| clientTraceMetadata: nextConfig.experimental.clientTraceMetadata || [], | ||
@@ -124,0 +123,0 @@ clientParamParsingOrigins: nextConfig.experimental.clientParamParsingOrigins, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/build/templates/edge-ssr-app.ts"],"sourcesContent":["import '../../server/web/globals'\nimport {\n adapter,\n type EdgeHandler,\n type NextRequestHint,\n} from '../../server/web/adapter'\nimport { IncrementalCache } from '../../server/lib/incremental-cache'\n\nimport * as pageMod from 'VAR_USERLAND'\n\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport * as cacheHandlers from '../../server/use-cache/handlers'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport {\n getTracer,\n SpanKind,\n SpanStatusCode,\n type Span,\n} from '../../server/lib/trace/tracer'\nimport { WebNextRequest, WebNextResponse } from '../../server/base-http/web'\nimport type { NextFetchEvent } from '../../server/web/spec-extension/fetch-event'\nimport type {\n AppPageRouteHandlerContext,\n AppPageRouteModule,\n} from '../../server/route-modules/app-page/module.compiled'\nimport type { AppPageRenderResultMetadata } from '../../server/render-result'\nimport type RenderResult from '../../server/render-result'\nimport { getIsPossibleServerAction } from '../../server/lib/server-action-request-meta'\nimport { getBotType } from '../../shared/lib/router/utils/is-bot'\nimport { interopDefault } from '../../lib/interop-default'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { checkIsOnDemandRevalidate } from '../../server/api-utils'\nimport { CloseController } from '../../server/web/web-on-close'\nimport { parseMaxPostponedStateSize } from '../../shared/lib/size-limit'\nimport { toNodeOutgoingHttpHeaders } from '../../server/web/utils'\nimport type { RequestMeta } from '../../server/request-meta'\n\ndeclare const incrementalCacheHandler: any\n// OPTIONAL_IMPORT:incrementalCacheHandler\n// INJECT_RAW:cacheHandlerImports\n\nconst maybeJSONParse = (str?: string) => (str ? JSON.parse(str) : undefined)\n\nconst rscManifest = self.__RSC_MANIFEST?.['VAR_PAGE']\nconst rscServerManifest = maybeJSONParse(self.__RSC_SERVER_MANIFEST)\n\nif (rscManifest && rscServerManifest) {\n setManifestsSingleton({\n page: 'VAR_PAGE',\n clientReferenceManifest: rscManifest,\n serverActionsManifest: rscServerManifest,\n })\n}\n\nexport const ComponentMod = pageMod\n\nasync function requestHandler(\n req: NextRequestHint,\n event: NextFetchEvent\n): Promise<Response> {\n let srcPage = 'VAR_PAGE'\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n const relativeUrl = `${req.nextUrl.pathname}${req.nextUrl.search}`\n const baseReq = new WebNextRequest(req)\n const baseRes = new WebNextResponse(undefined)\n\n const pageRouteModule = pageMod.routeModule as AppPageRouteModule\n const prepareResult = await pageRouteModule.prepare(baseReq, null, {\n srcPage,\n multiZoneDraftMode: false,\n })\n\n if (!prepareResult) {\n return new Response('Bad Request', {\n status: 400,\n })\n }\n const {\n query,\n params,\n buildId,\n nextConfig,\n buildManifest,\n prerenderManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n nextFontManifest,\n resolvedPathname,\n interceptionRoutePatterns,\n routerServerContext,\n deploymentId,\n clientAssetToken,\n } = prepareResult\n\n // Initialize the cache handlers interface.\n cacheHandlers.initializeCacheHandlers(nextConfig.cacheMaxMemorySize)\n // INJECT_RAW:cacheHandlerRegistration\n\n const isPossibleServerAction = getIsPossibleServerAction(req)\n const botType = getBotType(req.headers.get('User-Agent') || '')\n const { isOnDemandRevalidate } = checkIsOnDemandRevalidate(\n req.headers,\n prerenderManifest.preview\n )\n\n const closeController = new CloseController()\n\n const renderContext: AppPageRouteHandlerContext = {\n page: normalizedSrcPage,\n query,\n params,\n\n sharedContext: {\n buildId,\n deploymentId,\n clientAssetToken,\n },\n fallbackRouteParams: null,\n\n renderOpts: {\n App: () => null,\n Document: () => null,\n pageConfig: {},\n ComponentMod,\n Component: interopDefault(ComponentMod),\n routeModule: pageRouteModule,\n\n params,\n page: srcPage,\n postponed: undefined,\n shouldWaitOnAllReady: false,\n serveStreamingMetadata: true,\n supportsDynamicResponse: true,\n buildManifest,\n nextFontManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n setIsrStatus: routerServerContext?.setIsrStatus,\n\n dir: pageRouteModule.relativeProjectDir,\n botType,\n isDraftMode: false,\n isOnDemandRevalidate,\n isPossibleServerAction,\n assetPrefix: nextConfig.assetPrefix,\n nextConfigOutput: nextConfig.output,\n crossOrigin: nextConfig.crossOrigin,\n trailingSlash: nextConfig.trailingSlash,\n images: nextConfig.images,\n previewProps: prerenderManifest.preview,\n enableTainting: nextConfig.experimental.taint,\n htmlLimitedBots: nextConfig.htmlLimitedBots,\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n\n multiZoneDraftMode: false,\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n basePath: nextConfig.basePath,\n serverActions: nextConfig.experimental.serverActions,\n logServerFunctions:\n typeof nextConfig.logging === 'object' &&\n Boolean(nextConfig.logging.serverFunctions),\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n experimental: {\n isRoutePPREnabled: false,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),\n optimisticRouting: Boolean(nextConfig.experimental.optimisticRouting),\n inlineCss: Boolean(nextConfig.experimental.inlineCss),\n prefetchInlining: nextConfig.experimental.prefetchInlining ?? false,\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n // Edge has no Node response-close signal, so HMR cancellation is a\n // no-op.\n serverComponentsHmrCancellation: false,\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n cachedNavigations: nextConfig.experimental.cachedNavigations ?? false,\n appShells: nextConfig.experimental.appShells,\n clientTraceMetadata:\n nextConfig.experimental.clientTraceMetadata || ([] as any),\n clientParamParsingOrigins:\n nextConfig.experimental.clientParamParsingOrigins,\n maxPostponedStateSizeBytes: parseMaxPostponedStateSize(\n nextConfig.experimental.maxPostponedStateSize\n ),\n exposeTestingApi:\n pageRouteModule.isDev === true ||\n nextConfig.experimental.exposeTestingApiInProductionBuild === true,\n },\n\n incrementalCache: await pageRouteModule.getIncrementalCache(\n baseReq,\n nextConfig,\n prerenderManifest,\n true\n ),\n\n waitUntil: event.waitUntil.bind(event),\n onClose: (cb) => {\n closeController.onClose(cb)\n },\n onAfterTaskError: () => {},\n\n onInstrumentationRequestError: (\n error,\n _request,\n errorContext,\n silenceLog\n ) =>\n pageRouteModule.onRequestError(\n baseReq,\n error,\n errorContext,\n silenceLog,\n routerServerContext\n ),\n },\n }\n let finalStatus = 200\n\n const renderResultToResponse = (\n result: RenderResult<AppPageRenderResultMetadata>\n ): Response => {\n const varyHeader = pageRouteModule.getVaryHeader(\n resolvedPathname,\n interceptionRoutePatterns\n )\n // Handle null responses\n if (result.isNull) {\n finalStatus = 500\n closeController.dispatchClose()\n return new Response(null, { status: 500 })\n }\n\n // Extract metadata\n const { metadata } = result\n const headers = new Headers()\n finalStatus = metadata.statusCode || baseRes.statusCode || 200\n // Pull any fetch metrics from the render onto the request.\n ;(req as any).fetchMetrics = metadata.fetchMetrics\n\n // Set content type\n const contentType = result.contentType || 'text/html; charset=utf-8'\n headers.set('Content-Type', contentType)\n headers.set('x-edge-runtime', '1')\n\n if (varyHeader) {\n headers.set('Vary', varyHeader)\n }\n\n // Add existing headers\n for (const [key, value] of Object.entries({\n ...baseRes.getHeaders(),\n ...metadata.headers,\n })) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle multiple header values\n for (const v of value) {\n headers.append(key, String(v))\n }\n } else {\n headers.set(key, String(value))\n }\n }\n }\n\n // Handle static response\n if (!result.isDynamic) {\n const body = result.toUnchunkedString()\n headers.set(\n 'Content-Length',\n String(new TextEncoder().encode(body).length)\n )\n closeController.dispatchClose()\n return new Response(body, {\n status: finalStatus,\n headers,\n })\n }\n\n // Handle dynamic/streaming response\n // For edge runtime, we need to create a readable stream that pipes from the result\n const { readable, writable } = new TransformStream()\n\n // Start piping the result to the writable stream\n // This is done asynchronously to avoid blocking the response creation\n result\n .pipeTo(writable)\n .catch((err: unknown) => {\n console.error('Error piping RenderResult to response:', err)\n })\n .finally(() => closeController.dispatchClose())\n\n return new Response(readable, {\n status: finalStatus,\n headers,\n })\n }\n\n const invokeRender = async (span?: Span): Promise<Response> => {\n try {\n const result = await pageRouteModule\n .render(baseReq, baseRes, renderContext)\n .finally(() => {\n if (!span) return\n\n span.setAttributes({\n 'http.status_code': finalStatus,\n 'next.rsc': false,\n })\n\n if (finalStatus && finalStatus >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n span.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n span.setAttribute('error.type', finalStatus.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = normalizedSrcPage\n if (route) {\n const name = `${req.method} ${route}`\n\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n span.updateName(name)\n } else {\n span.updateName(`${req.method} ${srcPage}`)\n }\n })\n\n return renderResultToResponse(result)\n } catch (err) {\n const silenceLog = false\n await pageRouteModule.onRequestError(\n baseReq,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'render',\n revalidateReason: undefined,\n },\n silenceLog\n )\n // rethrow so that we can handle serving error page\n throw err\n }\n }\n\n const tracer = getTracer()\n\n return tracer.withPropagatedContext(req.headers, () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${req.method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': req.method,\n 'http.target': relativeUrl,\n 'http.route': normalizedSrcPage,\n },\n },\n invokeRender\n )\n )\n}\n\nconst internalHandler: EdgeHandler = (opts) => {\n return adapter({\n ...opts,\n IncrementalCache,\n handler: requestHandler,\n incrementalCacheHandler,\n page: 'VAR_PAGE',\n })\n}\n\nexport async function handler(\n request: Request,\n ctx: {\n waitUntil?: (prom: Promise<void>) => void\n signal?: AbortSignal\n requestMeta?: RequestMeta\n }\n): Promise<Response> {\n const result = await internalHandler({\n request: {\n url: request.url,\n method: request.method,\n headers: toNodeOutgoingHttpHeaders(request.headers),\n nextConfig: {\n basePath: process.env.__NEXT_BASE_PATH,\n i18n: process.env.__NEXT_I18N_CONFIG as any,\n trailingSlash: Boolean(process.env.__NEXT_TRAILING_SLASH),\n experimental: {\n cacheLife: process.env.__NEXT_CACHE_LIFE as any,\n authInterrupts: Boolean(\n process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS\n ),\n clientParamParsingOrigins: process.env\n .__NEXT_CLIENT_PARAM_PARSING_ORIGINS as any,\n },\n },\n page: {\n name: 'VAR_PAGE',\n },\n body:\n request.method !== 'GET' && request.method !== 'HEAD'\n ? (request.body ?? undefined)\n : undefined,\n waitUntil: ctx.waitUntil,\n requestMeta: ctx.requestMeta,\n signal: ctx.signal || new AbortController().signal,\n },\n })\n\n ctx.waitUntil?.(result.waitUntil)\n\n return result.response\n}\n\n// backwards compat\nexport default internalHandler\n"],"names":["self","adapter","IncrementalCache","pageMod","setManifestsSingleton","cacheHandlers","BaseServerSpan","getTracer","SpanKind","SpanStatusCode","WebNextRequest","WebNextResponse","getIsPossibleServerAction","getBotType","interopDefault","normalizeAppPath","checkIsOnDemandRevalidate","CloseController","parseMaxPostponedStateSize","toNodeOutgoingHttpHeaders","maybeJSONParse","str","JSON","parse","undefined","rscManifest","__RSC_MANIFEST","rscServerManifest","__RSC_SERVER_MANIFEST","page","clientReferenceManifest","serverActionsManifest","ComponentMod","requestHandler","req","event","srcPage","normalizedSrcPage","relativeUrl","nextUrl","pathname","search","baseReq","baseRes","pageRouteModule","routeModule","prepareResult","prepare","multiZoneDraftMode","Response","status","query","params","buildId","nextConfig","buildManifest","prerenderManifest","reactLoadableManifest","subresourceIntegrityManifest","dynamicCssManifest","nextFontManifest","resolvedPathname","interceptionRoutePatterns","routerServerContext","deploymentId","clientAssetToken","initializeCacheHandlers","cacheMaxMemorySize","isPossibleServerAction","botType","headers","get","isOnDemandRevalidate","preview","closeController","renderContext","sharedContext","fallbackRouteParams","renderOpts","App","Document","pageConfig","Component","postponed","shouldWaitOnAllReady","serveStreamingMetadata","supportsDynamicResponse","setIsrStatus","dir","relativeProjectDir","isDraftMode","assetPrefix","nextConfigOutput","output","crossOrigin","trailingSlash","images","previewProps","enableTainting","experimental","taint","htmlLimitedBots","reactMaxHeadersLength","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","basePath","serverActions","logServerFunctions","logging","Boolean","serverFunctions","cacheComponents","validationLevel","instantInsights","isRoutePPREnabled","expireTime","staleTimes","dynamicOnHover","optimisticRouting","inlineCss","prefetchInlining","authInterrupts","serverComponentsHmrCancellation","useCacheTimeout","cachedNavigations","appShells","clientTraceMetadata","clientParamParsingOrigins","maxPostponedStateSizeBytes","maxPostponedStateSize","exposeTestingApi","isDev","exposeTestingApiInProductionBuild","incrementalCache","getIncrementalCache","waitUntil","bind","onClose","cb","onAfterTaskError","onInstrumentationRequestError","error","_request","errorContext","silenceLog","onRequestError","finalStatus","renderResultToResponse","result","varyHeader","getVaryHeader","isNull","dispatchClose","metadata","Headers","statusCode","fetchMetrics","contentType","set","key","value","Object","entries","getHeaders","Array","isArray","v","append","String","isDynamic","body","toUnchunkedString","TextEncoder","encode","length","readable","writable","TransformStream","pipeTo","catch","err","console","finally","invokeRender","span","render","setAttributes","setStatus","code","ERROR","setAttribute","toString","rootSpanAttributes","tracer","getRootSpanAttributes","handleRequest","warn","route","name","method","updateName","routerKind","routePath","routeType","revalidateReason","withPropagatedContext","trace","spanName","kind","SERVER","attributes","internalHandler","opts","handler","incrementalCacheHandler","request","ctx","url","process","env","__NEXT_BASE_PATH","i18n","__NEXT_I18N_CONFIG","__NEXT_TRAILING_SLASH","__NEXT_CACHE_LIFE","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","__NEXT_CLIENT_PARAM_PARSING_ORIGINS","requestMeta","signal","AbortController","response"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/build/templates/edge-ssr-app.ts"],"sourcesContent":["import '../../server/web/globals'\nimport {\n adapter,\n type EdgeHandler,\n type NextRequestHint,\n} from '../../server/web/adapter'\nimport { IncrementalCache } from '../../server/lib/incremental-cache'\n\nimport * as pageMod from 'VAR_USERLAND'\n\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport * as cacheHandlers from '../../server/use-cache/handlers'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport {\n getTracer,\n SpanKind,\n SpanStatusCode,\n type Span,\n} from '../../server/lib/trace/tracer'\nimport { WebNextRequest, WebNextResponse } from '../../server/base-http/web'\nimport type { NextFetchEvent } from '../../server/web/spec-extension/fetch-event'\nimport type {\n AppPageRouteHandlerContext,\n AppPageRouteModule,\n} from '../../server/route-modules/app-page/module.compiled'\nimport type { AppPageRenderResultMetadata } from '../../server/render-result'\nimport type RenderResult from '../../server/render-result'\nimport { getIsPossibleServerAction } from '../../server/lib/server-action-request-meta'\nimport { getBotType } from '../../shared/lib/router/utils/is-bot'\nimport { interopDefault } from '../../lib/interop-default'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { checkIsOnDemandRevalidate } from '../../server/api-utils'\nimport { CloseController } from '../../server/web/web-on-close'\nimport { parseMaxPostponedStateSize } from '../../shared/lib/size-limit'\nimport { toNodeOutgoingHttpHeaders } from '../../server/web/utils'\nimport type { RequestMeta } from '../../server/request-meta'\n\ndeclare const incrementalCacheHandler: any\n// OPTIONAL_IMPORT:incrementalCacheHandler\n// INJECT_RAW:cacheHandlerImports\n\nconst maybeJSONParse = (str?: string) => (str ? JSON.parse(str) : undefined)\n\nconst rscManifest = self.__RSC_MANIFEST?.['VAR_PAGE']\nconst rscServerManifest = maybeJSONParse(self.__RSC_SERVER_MANIFEST)\n\nif (rscManifest && rscServerManifest) {\n setManifestsSingleton({\n page: 'VAR_PAGE',\n clientReferenceManifest: rscManifest,\n serverActionsManifest: rscServerManifest,\n })\n}\n\nexport const ComponentMod = pageMod\n\nasync function requestHandler(\n req: NextRequestHint,\n event: NextFetchEvent\n): Promise<Response> {\n let srcPage = 'VAR_PAGE'\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n const relativeUrl = `${req.nextUrl.pathname}${req.nextUrl.search}`\n const baseReq = new WebNextRequest(req)\n const baseRes = new WebNextResponse(undefined)\n\n const pageRouteModule = pageMod.routeModule as AppPageRouteModule\n const prepareResult = await pageRouteModule.prepare(baseReq, null, {\n srcPage,\n multiZoneDraftMode: false,\n })\n\n if (!prepareResult) {\n return new Response('Bad Request', {\n status: 400,\n })\n }\n const {\n query,\n params,\n buildId,\n nextConfig,\n buildManifest,\n prerenderManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n nextFontManifest,\n resolvedPathname,\n interceptionRoutePatterns,\n routerServerContext,\n deploymentId,\n clientAssetToken,\n } = prepareResult\n\n // Initialize the cache handlers interface.\n cacheHandlers.initializeCacheHandlers(nextConfig.cacheMaxMemorySize)\n // INJECT_RAW:cacheHandlerRegistration\n\n const isPossibleServerAction = getIsPossibleServerAction(req)\n const botType = getBotType(req.headers.get('User-Agent') || '')\n const { isOnDemandRevalidate } = checkIsOnDemandRevalidate(\n req.headers,\n prerenderManifest.preview\n )\n\n const closeController = new CloseController()\n\n const renderContext: AppPageRouteHandlerContext = {\n page: normalizedSrcPage,\n query,\n params,\n\n sharedContext: {\n buildId,\n deploymentId,\n clientAssetToken,\n },\n fallbackRouteParams: null,\n\n renderOpts: {\n App: () => null,\n Document: () => null,\n pageConfig: {},\n ComponentMod,\n Component: interopDefault(ComponentMod),\n routeModule: pageRouteModule,\n\n params,\n page: srcPage,\n postponed: undefined,\n shouldWaitOnAllReady: false,\n serveStreamingMetadata: true,\n supportsDynamicResponse: true,\n buildManifest,\n nextFontManifest,\n reactLoadableManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n setIsrStatus: routerServerContext?.setIsrStatus,\n\n dir: pageRouteModule.relativeProjectDir,\n botType,\n isDraftMode: false,\n isOnDemandRevalidate,\n isPossibleServerAction,\n assetPrefix: nextConfig.assetPrefix,\n nextConfigOutput: nextConfig.output,\n crossOrigin: nextConfig.crossOrigin,\n trailingSlash: nextConfig.trailingSlash,\n images: nextConfig.images,\n previewProps: prerenderManifest.preview,\n enableTainting: nextConfig.experimental.taint,\n htmlLimitedBots: nextConfig.htmlLimitedBots,\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n\n multiZoneDraftMode: false,\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n basePath: nextConfig.basePath,\n serverActions: nextConfig.experimental.serverActions,\n logServerFunctions:\n typeof nextConfig.logging === 'object' &&\n Boolean(nextConfig.logging.serverFunctions),\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n experimental: {\n isRoutePPREnabled: false,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),\n optimisticRouting: Boolean(nextConfig.experimental.optimisticRouting),\n inlineCss: Boolean(nextConfig.experimental.inlineCss),\n prefetchInlining: nextConfig.experimental.prefetchInlining ?? false,\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n // Edge has no Node response-close signal, so HMR cancellation is a\n // no-op.\n serverComponentsHmrCancellation: false,\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n cachedNavigations: nextConfig.experimental.cachedNavigations ?? false,\n clientTraceMetadata:\n nextConfig.experimental.clientTraceMetadata || ([] as any),\n clientParamParsingOrigins:\n nextConfig.experimental.clientParamParsingOrigins,\n maxPostponedStateSizeBytes: parseMaxPostponedStateSize(\n nextConfig.experimental.maxPostponedStateSize\n ),\n exposeTestingApi:\n pageRouteModule.isDev === true ||\n nextConfig.experimental.exposeTestingApiInProductionBuild === true,\n },\n\n incrementalCache: await pageRouteModule.getIncrementalCache(\n baseReq,\n nextConfig,\n prerenderManifest,\n true\n ),\n\n waitUntil: event.waitUntil.bind(event),\n onClose: (cb) => {\n closeController.onClose(cb)\n },\n onAfterTaskError: () => {},\n\n onInstrumentationRequestError: (\n error,\n _request,\n errorContext,\n silenceLog\n ) =>\n pageRouteModule.onRequestError(\n baseReq,\n error,\n errorContext,\n silenceLog,\n routerServerContext\n ),\n },\n }\n let finalStatus = 200\n\n const renderResultToResponse = (\n result: RenderResult<AppPageRenderResultMetadata>\n ): Response => {\n const varyHeader = pageRouteModule.getVaryHeader(\n resolvedPathname,\n interceptionRoutePatterns\n )\n // Handle null responses\n if (result.isNull) {\n finalStatus = 500\n closeController.dispatchClose()\n return new Response(null, { status: 500 })\n }\n\n // Extract metadata\n const { metadata } = result\n const headers = new Headers()\n finalStatus = metadata.statusCode || baseRes.statusCode || 200\n // Pull any fetch metrics from the render onto the request.\n ;(req as any).fetchMetrics = metadata.fetchMetrics\n\n // Set content type\n const contentType = result.contentType || 'text/html; charset=utf-8'\n headers.set('Content-Type', contentType)\n headers.set('x-edge-runtime', '1')\n\n if (varyHeader) {\n headers.set('Vary', varyHeader)\n }\n\n // Add existing headers\n for (const [key, value] of Object.entries({\n ...baseRes.getHeaders(),\n ...metadata.headers,\n })) {\n if (value !== undefined) {\n if (Array.isArray(value)) {\n // Handle multiple header values\n for (const v of value) {\n headers.append(key, String(v))\n }\n } else {\n headers.set(key, String(value))\n }\n }\n }\n\n // Handle static response\n if (!result.isDynamic) {\n const body = result.toUnchunkedString()\n headers.set(\n 'Content-Length',\n String(new TextEncoder().encode(body).length)\n )\n closeController.dispatchClose()\n return new Response(body, {\n status: finalStatus,\n headers,\n })\n }\n\n // Handle dynamic/streaming response\n // For edge runtime, we need to create a readable stream that pipes from the result\n const { readable, writable } = new TransformStream()\n\n // Start piping the result to the writable stream\n // This is done asynchronously to avoid blocking the response creation\n result\n .pipeTo(writable)\n .catch((err: unknown) => {\n console.error('Error piping RenderResult to response:', err)\n })\n .finally(() => closeController.dispatchClose())\n\n return new Response(readable, {\n status: finalStatus,\n headers,\n })\n }\n\n const invokeRender = async (span?: Span): Promise<Response> => {\n try {\n const result = await pageRouteModule\n .render(baseReq, baseRes, renderContext)\n .finally(() => {\n if (!span) return\n\n span.setAttributes({\n 'http.status_code': finalStatus,\n 'next.rsc': false,\n })\n\n if (finalStatus && finalStatus >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n span.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n span.setAttribute('error.type', finalStatus.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = normalizedSrcPage\n if (route) {\n const name = `${req.method} ${route}`\n\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n span.updateName(name)\n } else {\n span.updateName(`${req.method} ${srcPage}`)\n }\n })\n\n return renderResultToResponse(result)\n } catch (err) {\n const silenceLog = false\n await pageRouteModule.onRequestError(\n baseReq,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'render',\n revalidateReason: undefined,\n },\n silenceLog\n )\n // rethrow so that we can handle serving error page\n throw err\n }\n }\n\n const tracer = getTracer()\n\n return tracer.withPropagatedContext(req.headers, () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${req.method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': req.method,\n 'http.target': relativeUrl,\n 'http.route': normalizedSrcPage,\n },\n },\n invokeRender\n )\n )\n}\n\nconst internalHandler: EdgeHandler = (opts) => {\n return adapter({\n ...opts,\n IncrementalCache,\n handler: requestHandler,\n incrementalCacheHandler,\n page: 'VAR_PAGE',\n })\n}\n\nexport async function handler(\n request: Request,\n ctx: {\n waitUntil?: (prom: Promise<void>) => void\n signal?: AbortSignal\n requestMeta?: RequestMeta\n }\n): Promise<Response> {\n const result = await internalHandler({\n request: {\n url: request.url,\n method: request.method,\n headers: toNodeOutgoingHttpHeaders(request.headers),\n nextConfig: {\n basePath: process.env.__NEXT_BASE_PATH,\n i18n: process.env.__NEXT_I18N_CONFIG as any,\n trailingSlash: Boolean(process.env.__NEXT_TRAILING_SLASH),\n experimental: {\n cacheLife: process.env.__NEXT_CACHE_LIFE as any,\n authInterrupts: Boolean(\n process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS\n ),\n clientParamParsingOrigins: process.env\n .__NEXT_CLIENT_PARAM_PARSING_ORIGINS as any,\n },\n },\n page: {\n name: 'VAR_PAGE',\n },\n body:\n request.method !== 'GET' && request.method !== 'HEAD'\n ? (request.body ?? undefined)\n : undefined,\n waitUntil: ctx.waitUntil,\n requestMeta: ctx.requestMeta,\n signal: ctx.signal || new AbortController().signal,\n },\n })\n\n ctx.waitUntil?.(result.waitUntil)\n\n return result.response\n}\n\n// backwards compat\nexport default internalHandler\n"],"names":["self","adapter","IncrementalCache","pageMod","setManifestsSingleton","cacheHandlers","BaseServerSpan","getTracer","SpanKind","SpanStatusCode","WebNextRequest","WebNextResponse","getIsPossibleServerAction","getBotType","interopDefault","normalizeAppPath","checkIsOnDemandRevalidate","CloseController","parseMaxPostponedStateSize","toNodeOutgoingHttpHeaders","maybeJSONParse","str","JSON","parse","undefined","rscManifest","__RSC_MANIFEST","rscServerManifest","__RSC_SERVER_MANIFEST","page","clientReferenceManifest","serverActionsManifest","ComponentMod","requestHandler","req","event","srcPage","normalizedSrcPage","relativeUrl","nextUrl","pathname","search","baseReq","baseRes","pageRouteModule","routeModule","prepareResult","prepare","multiZoneDraftMode","Response","status","query","params","buildId","nextConfig","buildManifest","prerenderManifest","reactLoadableManifest","subresourceIntegrityManifest","dynamicCssManifest","nextFontManifest","resolvedPathname","interceptionRoutePatterns","routerServerContext","deploymentId","clientAssetToken","initializeCacheHandlers","cacheMaxMemorySize","isPossibleServerAction","botType","headers","get","isOnDemandRevalidate","preview","closeController","renderContext","sharedContext","fallbackRouteParams","renderOpts","App","Document","pageConfig","Component","postponed","shouldWaitOnAllReady","serveStreamingMetadata","supportsDynamicResponse","setIsrStatus","dir","relativeProjectDir","isDraftMode","assetPrefix","nextConfigOutput","output","crossOrigin","trailingSlash","images","previewProps","enableTainting","experimental","taint","htmlLimitedBots","reactMaxHeadersLength","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","basePath","serverActions","logServerFunctions","logging","Boolean","serverFunctions","cacheComponents","validationLevel","instantInsights","isRoutePPREnabled","expireTime","staleTimes","dynamicOnHover","optimisticRouting","inlineCss","prefetchInlining","authInterrupts","serverComponentsHmrCancellation","useCacheTimeout","cachedNavigations","clientTraceMetadata","clientParamParsingOrigins","maxPostponedStateSizeBytes","maxPostponedStateSize","exposeTestingApi","isDev","exposeTestingApiInProductionBuild","incrementalCache","getIncrementalCache","waitUntil","bind","onClose","cb","onAfterTaskError","onInstrumentationRequestError","error","_request","errorContext","silenceLog","onRequestError","finalStatus","renderResultToResponse","result","varyHeader","getVaryHeader","isNull","dispatchClose","metadata","Headers","statusCode","fetchMetrics","contentType","set","key","value","Object","entries","getHeaders","Array","isArray","v","append","String","isDynamic","body","toUnchunkedString","TextEncoder","encode","length","readable","writable","TransformStream","pipeTo","catch","err","console","finally","invokeRender","span","render","setAttributes","setStatus","code","ERROR","setAttribute","toString","rootSpanAttributes","tracer","getRootSpanAttributes","handleRequest","warn","route","name","method","updateName","routerKind","routePath","routeType","revalidateReason","withPropagatedContext","trace","spanName","kind","SERVER","attributes","internalHandler","opts","handler","incrementalCacheHandler","request","ctx","url","process","env","__NEXT_BASE_PATH","i18n","__NEXT_I18N_CONFIG","__NEXT_TRAILING_SLASH","__NEXT_CACHE_LIFE","__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS","__NEXT_CLIENT_PARAM_PARSING_ORIGINS","requestMeta","signal","AbortController","response"],"mappings":"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","ignoreList":[0]} |
@@ -69,3 +69,3 @@ import path from 'path'; | ||
| isPersistentCachingEnabled: persistentCaching, | ||
| nextVersion: "16.3.0-canary.87" | ||
| nextVersion: "16.3.0-canary.88" | ||
| }, { | ||
@@ -72,0 +72,0 @@ turbopackMemoryEviction: config.experimental.turbopackMemoryEvictionMode, |
@@ -87,3 +87,3 @@ // Import cpu-profile first to start profiling early if enabled | ||
| deferredEntries: config.experimental.deferredEntries, | ||
| nextVersion: "16.3.0-canary.87" | ||
| nextVersion: "16.3.0-canary.88" | ||
| }; | ||
@@ -90,0 +90,0 @@ const sharedTurboOptions = { |
@@ -8,3 +8,3 @@ /** | ||
| import { setAttributesFromProps } from './set-attributes-from-props'; | ||
| const version = "16.3.0-canary.87"; | ||
| const version = "16.3.0-canary.88"; | ||
| window.next = { | ||
@@ -11,0 +11,0 @@ version, |
@@ -26,30 +26,2 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; | ||
| const globalMutable = {}; | ||
| // A Back/Forward press between a reload and hydration moves the browser to | ||
| // a different history entry than the one the document was activated on, and | ||
| // the resulting popstate fires before any listener exists. When that | ||
| // happened, the initial history write is skipped so the traversed entry's | ||
| // state is not overwritten, and the missed popstate is replayed once the | ||
| // router has mounted. | ||
| let missedTraversalBeforeHydration = 'unchecked'; | ||
| /** | ||
| * Handles a popstate event (or one that was missed before hydration). | ||
| * By default dispatches ACTION_RESTORE, however if the history entry was not | ||
| * pushed/replaced by app-router it will reload the page. | ||
| * That case can happen when the old router injected the history entry. | ||
| */ function handlePopState(state) { | ||
| if (!state) { | ||
| // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case. | ||
| return; | ||
| } | ||
| // This case happens when the history entry was pushed by the `pages` router. | ||
| if (!state.__NA) { | ||
| window.location.reload(); | ||
| return; | ||
| } | ||
| // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously | ||
| // Without startTransition works if the cache is there for this path | ||
| startTransition(()=>{ | ||
| dispatchTraverseAction(window.location.href, state.__PRIVATE_NEXTJS_INTERNALS_TREE); | ||
| }); | ||
| } | ||
| function HistoryUpdater({ appRouterState }) { | ||
@@ -63,18 +35,2 @@ useInsertionEffect(()=>{ | ||
| const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState; | ||
| if (missedTraversalBeforeHydration === 'unchecked') { | ||
| missedTraversalBeforeHydration = 'none'; | ||
| if (typeof window.navigation !== 'undefined') { | ||
| // Entry keys are stable across replaceState but not traversals. | ||
| const activationEntry = window.navigation.activation?.entry; | ||
| const currentEntry = window.navigation.currentEntry; | ||
| if (activationEntry != null && currentEntry != null && activationEntry.key !== currentEntry.key && // Only entries written by the app router can be restored; on any | ||
| // other entry the traversal is left unhandled, as before. | ||
| window.history.state?.__NA === true) { | ||
| missedTraversalBeforeHydration = 'missed'; | ||
| // The tree was rendered even though the history write is skipped. | ||
| setLastCommittedTree(tree); | ||
| return; | ||
| } | ||
| } | ||
| } | ||
| const appHistoryState = { | ||
@@ -314,14 +270,24 @@ tree, | ||
| }; | ||
| const onPopState = (event)=>handlePopState(event.state); | ||
| /** | ||
| * Handle popstate event, this is used to handle back/forward in the browser. | ||
| * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page. | ||
| * That case can happen when the old router injected the history entry. | ||
| */ const onPopState = (event)=>{ | ||
| if (!event.state) { | ||
| // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case. | ||
| return; | ||
| } | ||
| // This case happens when the history entry was pushed by the `pages` router. | ||
| if (!event.state.__NA) { | ||
| window.location.reload(); | ||
| return; | ||
| } | ||
| // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously | ||
| // Without startTransition works if the cache is there for this path | ||
| startTransition(()=>{ | ||
| dispatchTraverseAction(window.location.href, event.state.__PRIVATE_NEXTJS_INTERNALS_TREE); | ||
| }); | ||
| }; | ||
| // Register popstate event to call onPopstate. | ||
| window.addEventListener('popstate', onPopState); | ||
| if (missedTraversalBeforeHydration === 'missed') { | ||
| missedTraversalBeforeHydration = 'none'; | ||
| // The entry's state may have been rewritten by a third-party script | ||
| // since the traversal was detected. | ||
| const entryHistoryState = window.history.state; | ||
| if (entryHistoryState?.__NA) { | ||
| handlePopState(entryHistoryState); | ||
| } | ||
| } | ||
| return ()=>{ | ||
@@ -328,0 +294,0 @@ window.history.pushState = originalPushState; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/client/components/app-router.tsx"],"sourcesContent":["import React, {\n useEffect,\n useMemo,\n startTransition,\n useInsertionEffect,\n useDeferredValue,\n} from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n GlobalLayoutRouterContext,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { CacheNode } from '../../shared/lib/app-router-types'\nimport { ACTION_RESTORE } from './router-reducer/router-reducer-types'\nimport type {\n AppHistoryState,\n AppRouterState,\n} from './router-reducer/router-reducer-types'\nimport { createHrefFromUrl } from './router-reducer/create-href-from-url'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport { dispatchAppRouterAction, useActionQueue } from './use-action-queue'\nimport { setLastCommittedTree } from './router-reducer/reducers/committed-state'\nimport { AppRouterAnnouncer } from './app-router-announcer'\nimport { RedirectBoundary } from './redirect-boundary'\nimport { findHeadInCache } from './router-reducer/reducers/find-head-in-cache'\nimport { unresolvedThenable } from './unresolved-thenable'\nimport { removeBasePath } from '../remove-base-path'\nimport { hasBasePath } from '../has-base-path'\nimport {\n extractSourcePageFromFlightRouterState,\n getSelectedParams,\n} from './router-reducer/compute-changed-path'\nimport { useNavFailureHandler } from './nav-failure-handler'\nimport {\n dispatchTraverseAction,\n publicAppRouterInstance,\n type AppRouterActionQueue,\n type GlobalErrorState,\n} from './app-router-instance'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { isRedirectError } from './redirect-error'\nimport { pingVisibleLinks } from './links'\nimport RootErrorBoundary from './errors/root-error-boundary'\nimport DefaultGlobalError from './builtin/global-error'\nimport { RootLayoutBoundary } from '../../lib/framework/boundary-components'\nimport type { StaticIndicatorState } from '../dev/hot-reloader/app/hot-reloader-app'\nimport { getAssetTokenQuery } from '../../shared/lib/deployment-id'\n\nconst globalMutable: {\n pendingMpaPath?: string\n} = {}\n\n// A Back/Forward press between a reload and hydration moves the browser to\n// a different history entry than the one the document was activated on, and\n// the resulting popstate fires before any listener exists. When that\n// happened, the initial history write is skipped so the traversed entry's\n// state is not overwritten, and the missed popstate is replayed once the\n// router has mounted.\nlet missedTraversalBeforeHydration: 'unchecked' | 'missed' | 'none' =\n 'unchecked'\n\n/**\n * Handles a popstate event (or one that was missed before hydration).\n * By default dispatches ACTION_RESTORE, however if the history entry was not\n * pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */\nfunction handlePopState(state: PopStateEvent['state']): void {\n if (!state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return\n }\n\n // This case happens when the history entry was pushed by the `pages` router.\n if (!state.__NA) {\n window.location.reload()\n return\n }\n\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n startTransition(() => {\n dispatchTraverseAction(\n window.location.href,\n state.__PRIVATE_NEXTJS_INTERNALS_TREE\n )\n })\n}\n\nfunction HistoryUpdater({\n appRouterState,\n}: {\n appRouterState: AppRouterState\n}) {\n useInsertionEffect(() => {\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n // clear pending URL as navigation is no longer\n // in flight\n window.next.__pendingUrl = undefined\n }\n\n const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState\n\n if (missedTraversalBeforeHydration === 'unchecked') {\n missedTraversalBeforeHydration = 'none'\n if (typeof window.navigation !== 'undefined') {\n // Entry keys are stable across replaceState but not traversals.\n const activationEntry = window.navigation.activation?.entry\n const currentEntry = window.navigation.currentEntry\n if (\n activationEntry != null &&\n currentEntry != null &&\n activationEntry.key !== currentEntry.key &&\n // Only entries written by the app router can be restored; on any\n // other entry the traversal is left unhandled, as before.\n window.history.state?.__NA === true\n ) {\n missedTraversalBeforeHydration = 'missed'\n // The tree was rendered even though the history write is skipped.\n setLastCommittedTree(tree)\n return\n }\n }\n }\n\n const appHistoryState: AppHistoryState = {\n tree,\n renderedSearch,\n }\n\n // TODO: Use Navigation API if available\n const historyState = {\n ...(pushRef.preserveCustomHistoryState ? window.history.state : {}),\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState,\n }\n if (\n pushRef.pendingPush &&\n // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n createHrefFromUrl(new URL(window.location.href)) !== canonicalUrl\n ) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false\n window.history.pushState(historyState, '', canonicalUrl)\n } else {\n window.history.replaceState(historyState, '', canonicalUrl)\n }\n\n setLastCommittedTree(tree)\n }, [appRouterState])\n\n useEffect(() => {\n // The Next-Url and the base tree may affect the result of a prefetch\n // task. Re-prefetch all visible links with the updated values. In most\n // cases, this will not result in any new network requests, only if\n // the prefetch result actually varies on one of these inputs.\n pingVisibleLinks(appRouterState.nextUrl, appRouterState.tree)\n }, [appRouterState.nextUrl, appRouterState.tree])\n\n return null\n}\n\nfunction copyNextJsInternalHistoryState(data: any) {\n if (data == null) data = {}\n const currentState = window.history.state\n const __NA = currentState?.__NA\n if (__NA) {\n data.__NA = __NA\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE =\n currentState?.__PRIVATE_NEXTJS_INTERNALS_TREE\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE\n }\n\n return data\n}\n\nfunction Head({\n headCacheNode,\n}: {\n headCacheNode: CacheNode | null\n}): React.ReactNode {\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null\n const prefetchHead =\n headCacheNode !== null ? headCacheNode.prefetchHead : null\n\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head\n\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n return useDeferredValue(head, resolvedPrefetchRsc)\n}\n\n/**\n * The global router that wraps the application components.\n */\nfunction Router({\n actionQueue,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n const state = useActionQueue(actionQueue)\n const { canonicalUrl } = state\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = useMemo(() => {\n const url = new URL(\n canonicalUrl,\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: hasBasePath(url.pathname)\n ? removeBasePath(url.pathname)\n : url.pathname,\n }\n }, [canonicalUrl])\n\n if (process.env.NODE_ENV !== 'production') {\n const { cache, tree } = state\n\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: publicAppRouterInstance,\n cache,\n tree,\n }\n }, [cache, tree])\n }\n\n useEffect(() => {\n const sourcePage = extractSourcePageFromFlightRouterState(state.tree)\n\n if (sourcePage !== undefined) {\n window.next.__internal_src_page = sourcePage\n } else {\n delete window.next.__internal_src_page\n }\n }, [state.tree])\n\n useEffect(() => {\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event: PageTransitionEvent) {\n if (\n !event.persisted ||\n !window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n ) {\n return\n }\n\n // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n // of the last MPA navigation.\n globalMutable.pendingMpaPath = undefined\n\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(window.location.href),\n historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE,\n })\n }\n\n window.addEventListener('pageshow', handlePageShow)\n\n return () => {\n window.removeEventListener('pageshow', handlePageShow)\n }\n }, [])\n\n useEffect(() => {\n // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n // are caught and handled by the router.\n function handleUnhandledRedirect(\n event: ErrorEvent | PromiseRejectionEvent\n ) {\n const error = 'reason' in event ? event.reason : event.error\n if (isRedirectError(error)) {\n event.preventDefault()\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n // TODO: This should access the router methods directly, rather than\n // go through the public interface.\n if (redirectType === 'push') {\n publicAppRouterInstance.push(url, {})\n } else {\n publicAppRouterInstance.replace(url, {})\n }\n }\n }\n window.addEventListener('error', handleUnhandledRedirect)\n window.addEventListener('unhandledrejection', handleUnhandledRedirect)\n\n return () => {\n window.removeEventListener('error', handleUnhandledRedirect)\n window.removeEventListener('unhandledrejection', handleUnhandledRedirect)\n }\n }, [])\n\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = state\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location = window.location\n if (pushRef.pendingPush) {\n location.assign(canonicalUrl)\n } else {\n location.replace(canonicalUrl)\n }\n\n globalMutable.pendingMpaPath = canonicalUrl\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n // NOTE: This is intentionally using `throw` instead of `use` because we're\n // inside an externally mutable condition (pushRef.mpaNavigation), which\n // violates the rules of hooks.\n throw unresolvedThenable\n }\n\n useEffect(() => {\n const originalPushState = window.history.pushState.bind(window.history)\n const originalReplaceState = window.history.replaceState.bind(\n window.history\n )\n\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (\n url: string | URL | null | undefined\n ) => {\n const href = window.location.href\n const appHistoryState: AppHistoryState | undefined =\n window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(url ?? href, href),\n historyState: appHistoryState,\n })\n })\n }\n\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.pushState = function pushState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalPushState(data, _unused, url)\n }\n\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n\n return originalPushState(data, _unused, url)\n }\n\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.replaceState = function replaceState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalReplaceState(data, _unused, url)\n }\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n return originalReplaceState(data, _unused, url)\n }\n\n const onPopState = (event: PopStateEvent) => handlePopState(event.state)\n\n // Register popstate event to call onPopstate.\n window.addEventListener('popstate', onPopState)\n\n if (missedTraversalBeforeHydration === 'missed') {\n missedTraversalBeforeHydration = 'none'\n // The entry's state may have been rewritten by a third-party script\n // since the traversal was detected.\n const entryHistoryState = window.history.state\n if (entryHistoryState?.__NA) {\n handlePopState(entryHistoryState)\n }\n }\n\n return () => {\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n window.removeEventListener('popstate', onPopState)\n }\n }, [])\n\n const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state\n\n const matchingHead = useMemo(() => {\n return findHeadInCache(cache, tree[1])\n }, [cache, tree])\n\n // Add memoized pathParams for useParams.\n const pathParams = useMemo(() => {\n return getSelectedParams(tree)\n }, [tree])\n\n // Create instrumented promises for navigation hooks (dev-only)\n // These are specially instrumented promises to show in the Suspense DevTools\n // Promises are cached outside of render to survive suspense retries.\n let instrumentedNavigationPromises: NavigationPromises | null = null\n if (process.env.NODE_ENV !== 'production') {\n const { createRootNavigationPromises } =\n require('./navigation-devtools') as typeof import('./navigation-devtools')\n\n instrumentedNavigationPromises = createRootNavigationPromises(\n tree,\n pathname,\n searchParams,\n pathParams\n )\n }\n\n const layoutRouterContext = useMemo(() => {\n return {\n parentTree: tree,\n parentCacheNode: cache,\n parentSegmentPath: null,\n parentParams: {},\n parentLoadingData: null,\n // This is the <Activity> \"name\" that shows up in the Suspense DevTools.\n // It represents the root of the app.\n debugNameContext: '/',\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl,\n // Root segment is always active\n isActive: true,\n }\n }, [tree, cache, canonicalUrl])\n\n const globalLayoutRouterContext = useMemo(() => {\n return {\n tree,\n focusAndScrollRef,\n nextUrl,\n previousNextUrl,\n }\n }, [tree, focusAndScrollRef, nextUrl, previousNextUrl])\n\n let head\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead\n\n head = (\n <Head\n key={\n // Necessary for PPR: omit search params from the key to match prerendered keys\n typeof window === 'undefined' ? headKeyWithoutSearchParams : headKey\n }\n headCacheNode={headCacheNode}\n />\n )\n } else {\n head = null\n }\n\n let content = (\n <RedirectBoundary>\n {head}\n {/* RootLayoutBoundary enables detection of Suspense boundaries around the root layout.\n When users wrap their layout in <Suspense>, this creates the component stack pattern\n \"Suspense -> RootLayoutBoundary\" which dynamic-rendering.ts uses to allow dynamic rendering. */}\n <RootLayoutBoundary>{cache.rsc}</RootLayoutBoundary>\n <AppRouterAnnouncer tree={tree} />\n </RedirectBoundary>\n )\n\n if (process.env.__NEXT_DEV_SERVER) {\n // In development, we apply few error boundaries and hot-reloader:\n // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n // - HotReloader:\n // - hot-reload the app when the code changes\n // - render dev overlay\n // - catch runtime errors and display global-error when necessary\n if (typeof window !== 'undefined') {\n const { DevRootHTTPAccessFallbackBoundary } =\n // TODO(browser-variant): migrate to a .ts/.browser.ts split so the browser bundle drops the server branch; see scripts/generate-browser-variant-aliases.mjs\n // ast-grep-ignore: no-typeof-window-require-tsx\n require('./dev-root-http-access-fallback-boundary') as typeof import('./dev-root-http-access-fallback-boundary')\n content = (\n <DevRootHTTPAccessFallbackBoundary>\n {content}\n </DevRootHTTPAccessFallbackBoundary>\n )\n }\n const HotReloader: typeof import('../dev/hot-reloader/app/hot-reloader-app').default =\n (\n require('../dev/hot-reloader/app/hot-reloader-app') as typeof import('../dev/hot-reloader/app/hot-reloader-app')\n ).default\n\n content = (\n <HotReloader\n globalError={globalError}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n >\n {content}\n </HotReloader>\n )\n } else {\n content = (\n <RootErrorBoundary\n errorComponent={globalError[0]}\n errorStyles={globalError[1]}\n >\n {content}\n </RootErrorBoundary>\n )\n }\n\n if (process.env.__NEXT_USE_OFFLINE) {\n const { OfflineProvider } =\n require('./use-offline') as typeof import('./use-offline')\n content = <OfflineProvider>{content}</OfflineProvider>\n }\n\n return (\n <>\n <HistoryUpdater appRouterState={state} />\n {process.env.TURBOPACK ? null : <RuntimeStylesForWebpack />}\n <NavigationPromisesContext.Provider\n value={instrumentedNavigationPromises}\n >\n <PathParamsContext.Provider value={pathParams}>\n <PathnameContext.Provider value={pathname}>\n <SearchParamsContext.Provider value={searchParams}>\n <GlobalLayoutRouterContext.Provider\n value={globalLayoutRouterContext}\n >\n {/* TODO: We should be able to remove this context. useRouter\n should import from app-router-instance instead. It's only\n necessary because useRouter is shared between Pages and\n App Router. We should fork that module, then remove this\n context provider. */}\n <AppRouterContext.Provider value={publicAppRouterInstance}>\n <LayoutRouterContext.Provider value={layoutRouterContext}>\n {content}\n </LayoutRouterContext.Provider>\n </AppRouterContext.Provider>\n </GlobalLayoutRouterContext.Provider>\n </SearchParamsContext.Provider>\n </PathnameContext.Provider>\n </PathParamsContext.Provider>\n </NavigationPromisesContext.Provider>\n </>\n )\n}\n\nexport default function AppRouter({\n actionQueue,\n globalErrorState,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalErrorState: GlobalErrorState\n webSocket?: WebSocket\n staticIndicatorState?: StaticIndicatorState\n}) {\n useNavFailureHandler()\n\n const router = (\n <Router\n actionQueue={actionQueue}\n globalError={globalErrorState}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n />\n )\n\n // At the very top level, use the default GlobalError component as the final fallback.\n // When the app router itself fails, which means the framework itself fails, we show the default error.\n return (\n <RootErrorBoundary errorComponent={DefaultGlobalError}>\n {router}\n </RootErrorBoundary>\n )\n}\n\nlet runtimeStyles: Set<string> | undefined\nlet runtimeStyleChanged: Set<() => void> | undefined\nif (!process.env.TURBOPACK && typeof window !== 'undefined') {\n runtimeStyles = new Set<string>()\n runtimeStyleChanged = new Set<() => void>()\n\n globalThis._N_E_STYLE_LOAD = function (href: string) {\n if (!runtimeStyles || !runtimeStyleChanged) return Promise.resolve()\n let len = runtimeStyles.size\n runtimeStyles.add(href)\n if (runtimeStyles.size !== len) {\n runtimeStyleChanged.forEach((cb) => cb())\n }\n // TODO figure out how to get a promise here\n // But maybe it's not necessary as react would block rendering until it's loaded\n return Promise.resolve()\n }\n}\n\nfunction RuntimeStylesForWebpack() {\n const [, forceUpdate] = React.useState(0)\n const renderedStylesSize = runtimeStyles?.size ?? 0\n useEffect(() => {\n if (!runtimeStyles || !runtimeStyleChanged) return\n const changed = () => forceUpdate((c) => c + 1)\n runtimeStyleChanged.add(changed)\n if (renderedStylesSize !== runtimeStyles.size) {\n changed()\n }\n return () => {\n runtimeStyleChanged.delete(changed)\n }\n }, [renderedStylesSize, forceUpdate])\n\n const query = getAssetTokenQuery()\n return [...(runtimeStyles || [])].map((href, i) => (\n <link\n key={i}\n rel=\"stylesheet\"\n href={`${href}${query}`}\n // @ts-ignore\n precedence=\"next\"\n // TODO figure out crossOrigin and nonce\n // crossOrigin={TODO}\n // nonce={TODO}\n />\n ))\n}\n"],"names":["React","useEffect","useMemo","startTransition","useInsertionEffect","useDeferredValue","AppRouterContext","LayoutRouterContext","GlobalLayoutRouterContext","ACTION_RESTORE","createHrefFromUrl","SearchParamsContext","PathnameContext","PathParamsContext","NavigationPromisesContext","dispatchAppRouterAction","useActionQueue","setLastCommittedTree","AppRouterAnnouncer","RedirectBoundary","findHeadInCache","unresolvedThenable","removeBasePath","hasBasePath","extractSourcePageFromFlightRouterState","getSelectedParams","useNavFailureHandler","dispatchTraverseAction","publicAppRouterInstance","getRedirectTypeFromError","getURLFromRedirectError","isRedirectError","pingVisibleLinks","RootErrorBoundary","DefaultGlobalError","RootLayoutBoundary","getAssetTokenQuery","globalMutable","missedTraversalBeforeHydration","handlePopState","state","__NA","window","location","reload","href","__PRIVATE_NEXTJS_INTERNALS_TREE","HistoryUpdater","appRouterState","process","env","__NEXT_APP_NAV_FAIL_HANDLING","next","__pendingUrl","undefined","tree","pushRef","canonicalUrl","renderedSearch","navigation","activationEntry","activation","entry","currentEntry","key","history","appHistoryState","historyState","preserveCustomHistoryState","pendingPush","URL","pushState","replaceState","nextUrl","copyNextJsInternalHistoryState","data","currentState","Head","headCacheNode","head","prefetchHead","resolvedPrefetchRsc","Router","actionQueue","globalError","webSocket","staticIndicatorState","searchParams","pathname","url","NODE_ENV","cache","nd","router","sourcePage","__internal_src_page","handlePageShow","event","persisted","pendingMpaPath","type","addEventListener","removeEventListener","handleUnhandledRedirect","error","reason","preventDefault","redirectType","push","replace","mpaNavigation","assign","originalPushState","bind","originalReplaceState","applyUrlFromHistoryPushReplace","_unused","_N","onPopState","entryHistoryState","focusAndScrollRef","previousNextUrl","matchingHead","pathParams","instrumentedNavigationPromises","createRootNavigationPromises","require","layoutRouterContext","parentTree","parentCacheNode","parentSegmentPath","parentParams","parentLoadingData","debugNameContext","isActive","globalLayoutRouterContext","headKey","headKeyWithoutSearchParams","content","rsc","__NEXT_DEV_SERVER","DevRootHTTPAccessFallbackBoundary","HotReloader","default","errorComponent","errorStyles","__NEXT_USE_OFFLINE","OfflineProvider","TURBOPACK","RuntimeStylesForWebpack","Provider","value","AppRouter","globalErrorState","runtimeStyles","runtimeStyleChanged","Set","globalThis","_N_E_STYLE_LOAD","Promise","resolve","len","size","add","forEach","cb","forceUpdate","useState","renderedStylesSize","changed","c","delete","query","map","i","link","rel","precedence"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/client/components/app-router.tsx"],"sourcesContent":["import React, {\n useEffect,\n useMemo,\n startTransition,\n useInsertionEffect,\n useDeferredValue,\n} from 'react'\nimport {\n AppRouterContext,\n LayoutRouterContext,\n GlobalLayoutRouterContext,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { CacheNode } from '../../shared/lib/app-router-types'\nimport { ACTION_RESTORE } from './router-reducer/router-reducer-types'\nimport type {\n AppHistoryState,\n AppRouterState,\n} from './router-reducer/router-reducer-types'\nimport { createHrefFromUrl } from './router-reducer/create-href-from-url'\nimport {\n SearchParamsContext,\n PathnameContext,\n PathParamsContext,\n NavigationPromisesContext,\n type NavigationPromises,\n} from '../../shared/lib/hooks-client-context.shared-runtime'\nimport { dispatchAppRouterAction, useActionQueue } from './use-action-queue'\nimport { setLastCommittedTree } from './router-reducer/reducers/committed-state'\nimport { AppRouterAnnouncer } from './app-router-announcer'\nimport { RedirectBoundary } from './redirect-boundary'\nimport { findHeadInCache } from './router-reducer/reducers/find-head-in-cache'\nimport { unresolvedThenable } from './unresolved-thenable'\nimport { removeBasePath } from '../remove-base-path'\nimport { hasBasePath } from '../has-base-path'\nimport {\n extractSourcePageFromFlightRouterState,\n getSelectedParams,\n} from './router-reducer/compute-changed-path'\nimport { useNavFailureHandler } from './nav-failure-handler'\nimport {\n dispatchTraverseAction,\n publicAppRouterInstance,\n type AppRouterActionQueue,\n type GlobalErrorState,\n} from './app-router-instance'\nimport { getRedirectTypeFromError, getURLFromRedirectError } from './redirect'\nimport { isRedirectError } from './redirect-error'\nimport { pingVisibleLinks } from './links'\nimport RootErrorBoundary from './errors/root-error-boundary'\nimport DefaultGlobalError from './builtin/global-error'\nimport { RootLayoutBoundary } from '../../lib/framework/boundary-components'\nimport type { StaticIndicatorState } from '../dev/hot-reloader/app/hot-reloader-app'\nimport { getAssetTokenQuery } from '../../shared/lib/deployment-id'\n\nconst globalMutable: {\n pendingMpaPath?: string\n} = {}\n\nfunction HistoryUpdater({\n appRouterState,\n}: {\n appRouterState: AppRouterState\n}) {\n useInsertionEffect(() => {\n if (process.env.__NEXT_APP_NAV_FAIL_HANDLING) {\n // clear pending URL as navigation is no longer\n // in flight\n window.next.__pendingUrl = undefined\n }\n\n const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState\n\n const appHistoryState: AppHistoryState = {\n tree,\n renderedSearch,\n }\n\n // TODO: Use Navigation API if available\n const historyState = {\n ...(pushRef.preserveCustomHistoryState ? window.history.state : {}),\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState,\n }\n if (\n pushRef.pendingPush &&\n // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n createHrefFromUrl(new URL(window.location.href)) !== canonicalUrl\n ) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false\n window.history.pushState(historyState, '', canonicalUrl)\n } else {\n window.history.replaceState(historyState, '', canonicalUrl)\n }\n\n setLastCommittedTree(tree)\n }, [appRouterState])\n\n useEffect(() => {\n // The Next-Url and the base tree may affect the result of a prefetch\n // task. Re-prefetch all visible links with the updated values. In most\n // cases, this will not result in any new network requests, only if\n // the prefetch result actually varies on one of these inputs.\n pingVisibleLinks(appRouterState.nextUrl, appRouterState.tree)\n }, [appRouterState.nextUrl, appRouterState.tree])\n\n return null\n}\n\nfunction copyNextJsInternalHistoryState(data: any) {\n if (data == null) data = {}\n const currentState = window.history.state\n const __NA = currentState?.__NA\n if (__NA) {\n data.__NA = __NA\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE =\n currentState?.__PRIVATE_NEXTJS_INTERNALS_TREE\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE\n }\n\n return data\n}\n\nfunction Head({\n headCacheNode,\n}: {\n headCacheNode: CacheNode | null\n}): React.ReactNode {\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null\n const prefetchHead =\n headCacheNode !== null ? headCacheNode.prefetchHead : null\n\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head\n\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n return useDeferredValue(head, resolvedPrefetchRsc)\n}\n\n/**\n * The global router that wraps the application components.\n */\nfunction Router({\n actionQueue,\n globalError,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalError: GlobalErrorState\n webSocket: WebSocket | undefined\n staticIndicatorState: StaticIndicatorState | undefined\n}) {\n const state = useActionQueue(actionQueue)\n const { canonicalUrl } = state\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = useMemo(() => {\n const url = new URL(\n canonicalUrl,\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: hasBasePath(url.pathname)\n ? removeBasePath(url.pathname)\n : url.pathname,\n }\n }, [canonicalUrl])\n\n if (process.env.NODE_ENV !== 'production') {\n const { cache, tree } = state\n\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: publicAppRouterInstance,\n cache,\n tree,\n }\n }, [cache, tree])\n }\n\n useEffect(() => {\n const sourcePage = extractSourcePageFromFlightRouterState(state.tree)\n\n if (sourcePage !== undefined) {\n window.next.__internal_src_page = sourcePage\n } else {\n delete window.next.__internal_src_page\n }\n }, [state.tree])\n\n useEffect(() => {\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event: PageTransitionEvent) {\n if (\n !event.persisted ||\n !window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n ) {\n return\n }\n\n // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n // of the last MPA navigation.\n globalMutable.pendingMpaPath = undefined\n\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(window.location.href),\n historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE,\n })\n }\n\n window.addEventListener('pageshow', handlePageShow)\n\n return () => {\n window.removeEventListener('pageshow', handlePageShow)\n }\n }, [])\n\n useEffect(() => {\n // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n // are caught and handled by the router.\n function handleUnhandledRedirect(\n event: ErrorEvent | PromiseRejectionEvent\n ) {\n const error = 'reason' in event ? event.reason : event.error\n if (isRedirectError(error)) {\n event.preventDefault()\n const url = getURLFromRedirectError(error)\n const redirectType = getRedirectTypeFromError(error)\n // TODO: This should access the router methods directly, rather than\n // go through the public interface.\n if (redirectType === 'push') {\n publicAppRouterInstance.push(url, {})\n } else {\n publicAppRouterInstance.replace(url, {})\n }\n }\n }\n window.addEventListener('error', handleUnhandledRedirect)\n window.addEventListener('unhandledrejection', handleUnhandledRedirect)\n\n return () => {\n window.removeEventListener('error', handleUnhandledRedirect)\n window.removeEventListener('unhandledrejection', handleUnhandledRedirect)\n }\n }, [])\n\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = state\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location = window.location\n if (pushRef.pendingPush) {\n location.assign(canonicalUrl)\n } else {\n location.replace(canonicalUrl)\n }\n\n globalMutable.pendingMpaPath = canonicalUrl\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n // NOTE: This is intentionally using `throw` instead of `use` because we're\n // inside an externally mutable condition (pushRef.mpaNavigation), which\n // violates the rules of hooks.\n throw unresolvedThenable\n }\n\n useEffect(() => {\n const originalPushState = window.history.pushState.bind(window.history)\n const originalReplaceState = window.history.replaceState.bind(\n window.history\n )\n\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (\n url: string | URL | null | undefined\n ) => {\n const href = window.location.href\n const appHistoryState: AppHistoryState | undefined =\n window.history.state?.__PRIVATE_NEXTJS_INTERNALS_TREE\n\n startTransition(() => {\n dispatchAppRouterAction({\n type: ACTION_RESTORE,\n url: new URL(url ?? href, href),\n historyState: appHistoryState,\n })\n })\n }\n\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.pushState = function pushState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalPushState(data, _unused, url)\n }\n\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n\n return originalPushState(data, _unused, url)\n }\n\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */\n window.history.replaceState = function replaceState(\n data: any,\n _unused: string,\n url?: string | URL | null\n ): void {\n // TODO: Warn when Navigation API is available (navigation.navigate() should be used)\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if (data?.__NA || data?._N) {\n return originalReplaceState(data, _unused, url)\n }\n data = copyNextJsInternalHistoryState(data)\n\n if (url) {\n applyUrlFromHistoryPushReplace(url)\n }\n return originalReplaceState(data, _unused, url)\n }\n\n /**\n * Handle popstate event, this is used to handle back/forward in the browser.\n * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */\n const onPopState = (event: PopStateEvent) => {\n if (!event.state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return\n }\n\n // This case happens when the history entry was pushed by the `pages` router.\n if (!event.state.__NA) {\n window.location.reload()\n return\n }\n\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n startTransition(() => {\n dispatchTraverseAction(\n window.location.href,\n event.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n )\n })\n }\n\n // Register popstate event to call onPopstate.\n window.addEventListener('popstate', onPopState)\n return () => {\n window.history.pushState = originalPushState\n window.history.replaceState = originalReplaceState\n window.removeEventListener('popstate', onPopState)\n }\n }, [])\n\n const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state\n\n const matchingHead = useMemo(() => {\n return findHeadInCache(cache, tree[1])\n }, [cache, tree])\n\n // Add memoized pathParams for useParams.\n const pathParams = useMemo(() => {\n return getSelectedParams(tree)\n }, [tree])\n\n // Create instrumented promises for navigation hooks (dev-only)\n // These are specially instrumented promises to show in the Suspense DevTools\n // Promises are cached outside of render to survive suspense retries.\n let instrumentedNavigationPromises: NavigationPromises | null = null\n if (process.env.NODE_ENV !== 'production') {\n const { createRootNavigationPromises } =\n require('./navigation-devtools') as typeof import('./navigation-devtools')\n\n instrumentedNavigationPromises = createRootNavigationPromises(\n tree,\n pathname,\n searchParams,\n pathParams\n )\n }\n\n const layoutRouterContext = useMemo(() => {\n return {\n parentTree: tree,\n parentCacheNode: cache,\n parentSegmentPath: null,\n parentParams: {},\n parentLoadingData: null,\n // This is the <Activity> \"name\" that shows up in the Suspense DevTools.\n // It represents the root of the app.\n debugNameContext: '/',\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl,\n // Root segment is always active\n isActive: true,\n }\n }, [tree, cache, canonicalUrl])\n\n const globalLayoutRouterContext = useMemo(() => {\n return {\n tree,\n focusAndScrollRef,\n nextUrl,\n previousNextUrl,\n }\n }, [tree, focusAndScrollRef, nextUrl, previousNextUrl])\n\n let head\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead\n\n head = (\n <Head\n key={\n // Necessary for PPR: omit search params from the key to match prerendered keys\n typeof window === 'undefined' ? headKeyWithoutSearchParams : headKey\n }\n headCacheNode={headCacheNode}\n />\n )\n } else {\n head = null\n }\n\n let content = (\n <RedirectBoundary>\n {head}\n {/* RootLayoutBoundary enables detection of Suspense boundaries around the root layout.\n When users wrap their layout in <Suspense>, this creates the component stack pattern\n \"Suspense -> RootLayoutBoundary\" which dynamic-rendering.ts uses to allow dynamic rendering. */}\n <RootLayoutBoundary>{cache.rsc}</RootLayoutBoundary>\n <AppRouterAnnouncer tree={tree} />\n </RedirectBoundary>\n )\n\n if (process.env.__NEXT_DEV_SERVER) {\n // In development, we apply few error boundaries and hot-reloader:\n // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n // - HotReloader:\n // - hot-reload the app when the code changes\n // - render dev overlay\n // - catch runtime errors and display global-error when necessary\n if (typeof window !== 'undefined') {\n const { DevRootHTTPAccessFallbackBoundary } =\n // TODO(browser-variant): migrate to a .ts/.browser.ts split so the browser bundle drops the server branch; see scripts/generate-browser-variant-aliases.mjs\n // ast-grep-ignore: no-typeof-window-require-tsx\n require('./dev-root-http-access-fallback-boundary') as typeof import('./dev-root-http-access-fallback-boundary')\n content = (\n <DevRootHTTPAccessFallbackBoundary>\n {content}\n </DevRootHTTPAccessFallbackBoundary>\n )\n }\n const HotReloader: typeof import('../dev/hot-reloader/app/hot-reloader-app').default =\n (\n require('../dev/hot-reloader/app/hot-reloader-app') as typeof import('../dev/hot-reloader/app/hot-reloader-app')\n ).default\n\n content = (\n <HotReloader\n globalError={globalError}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n >\n {content}\n </HotReloader>\n )\n } else {\n content = (\n <RootErrorBoundary\n errorComponent={globalError[0]}\n errorStyles={globalError[1]}\n >\n {content}\n </RootErrorBoundary>\n )\n }\n\n if (process.env.__NEXT_USE_OFFLINE) {\n const { OfflineProvider } =\n require('./use-offline') as typeof import('./use-offline')\n content = <OfflineProvider>{content}</OfflineProvider>\n }\n\n return (\n <>\n <HistoryUpdater appRouterState={state} />\n {process.env.TURBOPACK ? null : <RuntimeStylesForWebpack />}\n <NavigationPromisesContext.Provider\n value={instrumentedNavigationPromises}\n >\n <PathParamsContext.Provider value={pathParams}>\n <PathnameContext.Provider value={pathname}>\n <SearchParamsContext.Provider value={searchParams}>\n <GlobalLayoutRouterContext.Provider\n value={globalLayoutRouterContext}\n >\n {/* TODO: We should be able to remove this context. useRouter\n should import from app-router-instance instead. It's only\n necessary because useRouter is shared between Pages and\n App Router. We should fork that module, then remove this\n context provider. */}\n <AppRouterContext.Provider value={publicAppRouterInstance}>\n <LayoutRouterContext.Provider value={layoutRouterContext}>\n {content}\n </LayoutRouterContext.Provider>\n </AppRouterContext.Provider>\n </GlobalLayoutRouterContext.Provider>\n </SearchParamsContext.Provider>\n </PathnameContext.Provider>\n </PathParamsContext.Provider>\n </NavigationPromisesContext.Provider>\n </>\n )\n}\n\nexport default function AppRouter({\n actionQueue,\n globalErrorState,\n webSocket,\n staticIndicatorState,\n}: {\n actionQueue: AppRouterActionQueue\n globalErrorState: GlobalErrorState\n webSocket?: WebSocket\n staticIndicatorState?: StaticIndicatorState\n}) {\n useNavFailureHandler()\n\n const router = (\n <Router\n actionQueue={actionQueue}\n globalError={globalErrorState}\n webSocket={webSocket}\n staticIndicatorState={staticIndicatorState}\n />\n )\n\n // At the very top level, use the default GlobalError component as the final fallback.\n // When the app router itself fails, which means the framework itself fails, we show the default error.\n return (\n <RootErrorBoundary errorComponent={DefaultGlobalError}>\n {router}\n </RootErrorBoundary>\n )\n}\n\nlet runtimeStyles: Set<string> | undefined\nlet runtimeStyleChanged: Set<() => void> | undefined\nif (!process.env.TURBOPACK && typeof window !== 'undefined') {\n runtimeStyles = new Set<string>()\n runtimeStyleChanged = new Set<() => void>()\n\n globalThis._N_E_STYLE_LOAD = function (href: string) {\n if (!runtimeStyles || !runtimeStyleChanged) return Promise.resolve()\n let len = runtimeStyles.size\n runtimeStyles.add(href)\n if (runtimeStyles.size !== len) {\n runtimeStyleChanged.forEach((cb) => cb())\n }\n // TODO figure out how to get a promise here\n // But maybe it's not necessary as react would block rendering until it's loaded\n return Promise.resolve()\n }\n}\n\nfunction RuntimeStylesForWebpack() {\n const [, forceUpdate] = React.useState(0)\n const renderedStylesSize = runtimeStyles?.size ?? 0\n useEffect(() => {\n if (!runtimeStyles || !runtimeStyleChanged) return\n const changed = () => forceUpdate((c) => c + 1)\n runtimeStyleChanged.add(changed)\n if (renderedStylesSize !== runtimeStyles.size) {\n changed()\n }\n return () => {\n runtimeStyleChanged.delete(changed)\n }\n }, [renderedStylesSize, forceUpdate])\n\n const query = getAssetTokenQuery()\n return [...(runtimeStyles || [])].map((href, i) => (\n <link\n key={i}\n rel=\"stylesheet\"\n href={`${href}${query}`}\n // @ts-ignore\n precedence=\"next\"\n // TODO figure out crossOrigin and nonce\n // crossOrigin={TODO}\n // nonce={TODO}\n />\n ))\n}\n"],"names":["React","useEffect","useMemo","startTransition","useInsertionEffect","useDeferredValue","AppRouterContext","LayoutRouterContext","GlobalLayoutRouterContext","ACTION_RESTORE","createHrefFromUrl","SearchParamsContext","PathnameContext","PathParamsContext","NavigationPromisesContext","dispatchAppRouterAction","useActionQueue","setLastCommittedTree","AppRouterAnnouncer","RedirectBoundary","findHeadInCache","unresolvedThenable","removeBasePath","hasBasePath","extractSourcePageFromFlightRouterState","getSelectedParams","useNavFailureHandler","dispatchTraverseAction","publicAppRouterInstance","getRedirectTypeFromError","getURLFromRedirectError","isRedirectError","pingVisibleLinks","RootErrorBoundary","DefaultGlobalError","RootLayoutBoundary","getAssetTokenQuery","globalMutable","HistoryUpdater","appRouterState","process","env","__NEXT_APP_NAV_FAIL_HANDLING","window","next","__pendingUrl","undefined","tree","pushRef","canonicalUrl","renderedSearch","appHistoryState","historyState","preserveCustomHistoryState","history","state","__NA","__PRIVATE_NEXTJS_INTERNALS_TREE","pendingPush","URL","location","href","pushState","replaceState","nextUrl","copyNextJsInternalHistoryState","data","currentState","Head","headCacheNode","head","prefetchHead","resolvedPrefetchRsc","Router","actionQueue","globalError","webSocket","staticIndicatorState","searchParams","pathname","url","NODE_ENV","cache","nd","router","sourcePage","__internal_src_page","handlePageShow","event","persisted","pendingMpaPath","type","addEventListener","removeEventListener","handleUnhandledRedirect","error","reason","preventDefault","redirectType","push","replace","mpaNavigation","assign","originalPushState","bind","originalReplaceState","applyUrlFromHistoryPushReplace","_unused","_N","onPopState","reload","focusAndScrollRef","previousNextUrl","matchingHead","pathParams","instrumentedNavigationPromises","createRootNavigationPromises","require","layoutRouterContext","parentTree","parentCacheNode","parentSegmentPath","parentParams","parentLoadingData","debugNameContext","isActive","globalLayoutRouterContext","headKey","headKeyWithoutSearchParams","content","rsc","__NEXT_DEV_SERVER","DevRootHTTPAccessFallbackBoundary","HotReloader","default","errorComponent","errorStyles","__NEXT_USE_OFFLINE","OfflineProvider","TURBOPACK","RuntimeStylesForWebpack","Provider","value","AppRouter","globalErrorState","runtimeStyles","runtimeStyleChanged","Set","globalThis","_N_E_STYLE_LOAD","Promise","resolve","len","size","add","forEach","cb","forceUpdate","useState","renderedStylesSize","changed","c","delete","query","map","i","link","rel","precedence"],"mappings":"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","ignoreList":[0]} |
@@ -28,3 +28,3 @@ /* global location */ // imports polyfill from `@next/polyfill-module` after build. | ||
| import { isNextRouterError } from './components/is-next-router-error'; | ||
| export const version = "16.3.0-canary.87"; | ||
| export const version = "16.3.0-canary.88"; | ||
| export let router; | ||
@@ -31,0 +31,0 @@ export const emitter = mitt(); |
@@ -154,2 +154,17 @@ import getAssetPathFromRoute from '../shared/lib/router/utils/get-asset-path-from-route'; | ||
| const routes = new Map(); | ||
| const bootstrappedRoutes = new Set(); | ||
| // Bootstrap a client-loaded route (navigation/prefetch) so its entry registers via | ||
| // `window.__NEXT_P`. The initial page is bootstrapped in the document. | ||
| function bootstrapRoute(route) { | ||
| // Gated for DCE | ||
| if (!process.env.__NEXT_TURBOPACK_SHARED_RUNTIME) return; | ||
| if (process.env.NODE_ENV === 'development') return; | ||
| if (bootstrappedRoutes.has(route)) return; | ||
| const params = self.__TURBOPACK_PAGE_BOOTSTRAP?.[route]; | ||
| const global = self.__TURBOPACK_CHUNK_LOADING_GLOBAL; | ||
| if (params == null) return; | ||
| // `global` is always defined alongside the params map (see manifest-loader). | ||
| bootstrappedRoutes.add(route); | ||
| self[global].push(params); | ||
| } | ||
| function maybeExecuteScript(src) { | ||
@@ -239,3 +254,6 @@ // With HMR we might need to "reload" scripts when they are | ||
| return Promise.all([ | ||
| entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)), | ||
| entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)).then((r)=>{ | ||
| bootstrapRoute(route); | ||
| return r; | ||
| }), | ||
| Promise.all(css.map(fetchStyleSheet)) | ||
@@ -242,0 +260,0 @@ ]); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/client/route-loader.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { ProxyMatcher } from '../build/analysis/get-page-static-info'\nimport type { RequiredServerFilesManifest } from '../build'\nimport getAssetPathFromRoute from '../shared/lib/router/utils/get-asset-path-from-route'\nimport { __unsafeCreateTrustedScriptURL } from './trusted-types'\nimport { requestIdleCallback } from './request-idle-callback'\nimport { getAssetTokenQuery } from '../shared/lib/deployment-id'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport { resolvePromiseWithTimeout } from './lib/promise'\n\ndeclare global {\n interface Window {\n __BUILD_MANIFEST?: Record<string, string[]>\n __BUILD_MANIFEST_CB?: Function\n __SERVER_FILES_MANIFEST?: RequiredServerFilesManifest\n __MIDDLEWARE_MATCHERS?: ProxyMatcher[]\n __MIDDLEWARE_MATCHERS_CB?: Function\n __REACT_LOADABLE_MANIFEST?: any\n __DYNAMIC_CSS_MANIFEST?: any\n __RSC_MANIFEST?: any\n __RSC_SERVER_MANIFEST?: any\n __NEXT_FONT_MANIFEST?: any\n __SUBRESOURCE_INTEGRITY_MANIFEST?: string\n __INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string\n }\n}\n\ninterface LoadedEntrypointSuccess {\n component: ComponentType\n exports: any\n}\ninterface LoadedEntrypointFailure {\n error: unknown\n}\ntype RouteEntrypoint = LoadedEntrypointSuccess | LoadedEntrypointFailure\n\ninterface RouteStyleSheet {\n href: string\n content: string\n}\n\ninterface LoadedRouteSuccess extends LoadedEntrypointSuccess {\n styles: RouteStyleSheet[]\n}\ninterface LoadedRouteFailure {\n error: unknown\n}\ntype RouteLoaderEntry = LoadedRouteSuccess | LoadedRouteFailure\n\ninterface Future<V> {\n resolve: (entrypoint: V) => void\n future: Promise<V>\n}\nfunction withFuture<T extends object>(\n key: string,\n map: Map<string, Future<T> | T>,\n generator?: () => Promise<T>\n): Promise<T> {\n let entry = map.get(key)\n if (entry) {\n if ('future' in entry) {\n return entry.future\n }\n return Promise.resolve(entry)\n }\n let resolver: (entrypoint: T) => void\n const prom: Promise<T> = new Promise<T>((resolve) => {\n resolver = resolve\n })\n map.set(key, { resolve: resolver!, future: prom })\n return generator\n ? generator()\n .then((value) => {\n resolver(value)\n return value\n })\n .catch((err) => {\n map.delete(key)\n throw err\n })\n : prom\n}\n\nexport interface RouteLoader {\n whenEntrypoint(route: string): Promise<RouteEntrypoint>\n onEntrypoint(route: string, execute: () => unknown): void\n loadRoute(route: string, prefetch?: boolean): Promise<RouteLoaderEntry>\n prefetch(route: string): Promise<void>\n}\n\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR')\n// TODO: unexport\nexport function markAssetError(err: Error): Error {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {})\n}\n\nexport function isAssetError(err?: Error): boolean | undefined {\n return err && ASSET_LOAD_ERROR in err\n}\n\nfunction hasPrefetch(link?: HTMLLinkElement): boolean {\n try {\n link = document.createElement('link')\n return (\n // detect IE11 since it supports prefetch but isn't detected\n // with relList.support\n (!!window.MSInputMethodContext && !!(document as any).documentMode) ||\n link.relList.supports('prefetch')\n )\n } catch {\n return false\n }\n}\n\nconst canPrefetch: boolean = hasPrefetch()\n\nfunction prefetchViaDom(\n href: string,\n as: string,\n link?: HTMLLinkElement\n): Promise<any> {\n return new Promise<void>((resolve, reject) => {\n const selector = `\n link[rel=\"prefetch\"][href^=\"${href}\"],\n link[rel=\"preload\"][href^=\"${href}\"],\n script[src^=\"${href}\"]`\n if (document.querySelector(selector)) {\n return resolve()\n }\n\n link = document.createElement('link')\n\n // The order of property assignment here is intentional:\n if (as) link!.as = as\n link!.rel = `prefetch`\n link!.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n link!.onload = resolve as any\n link!.onerror = () =>\n reject(markAssetError(new Error(`Failed to prefetch: ${href}`)))\n\n // `href` should always be last:\n link!.href = href\n\n document.head.appendChild(link)\n })\n}\n\nfunction appendScript(\n src: TrustedScriptURL | string,\n script?: HTMLScriptElement\n): Promise<unknown> {\n return new Promise((resolve, reject) => {\n script = document.createElement('script')\n\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve\n script.onerror = () =>\n reject(markAssetError(new Error(`Failed to load script: ${src}`)))\n\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src as string\n document.body.appendChild(script)\n })\n}\n\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise: Promise<void> | undefined\n\n// TODO: stop exporting or cache the failure\n// It'd be best to stop exporting this. It's an implementation detail. We're\n// only exporting it for backwards compatibility with the `page-loader`.\n// Only cache this response as a last resort if we cannot eliminate all other\n// code branches that use the Build Manifest Callback and push them through\n// the Route Loader interface.\nexport function getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST)\n }\n\n const onBuildManifest = new Promise<Record<string, string[]>>((resolve) => {\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB\n self.__BUILD_MANIFEST_CB = () => {\n resolve(self.__BUILD_MANIFEST!)\n cb && cb()\n }\n })\n\n return resolvePromiseWithTimeout(\n onBuildManifest,\n markAssetError(new Error('Failed to load client build manifest')),\n devBuildPromise\n )\n}\n\ninterface RouteFiles {\n scripts: (TrustedScriptURL | string)[]\n css: string[]\n}\nfunction getFilesForRoute(\n assetPrefix: string,\n route: string\n): Promise<RouteFiles> {\n if (process.env.NODE_ENV === 'development') {\n const scriptUrl =\n assetPrefix +\n '/_next/static/chunks/pages' +\n encodeURIPath(getAssetPathFromRoute(route, '.js')) +\n getAssetTokenQuery()\n return Promise.resolve({\n scripts: [__unsafeCreateTrustedScriptURL(scriptUrl)],\n // Styles are handled by `style-loader` in development:\n css: [],\n })\n }\n return getClientBuildManifest().then((manifest) => {\n if (!(route in manifest)) {\n throw markAssetError(new Error(`Failed to lookup route: ${route}`))\n }\n const allFiles = manifest[route].map(\n (entry) => assetPrefix + '/_next/' + encodeURIPath(entry)\n )\n return {\n scripts: allFiles\n .filter((v) => v.endsWith('.js'))\n .map((v) => __unsafeCreateTrustedScriptURL(v) + getAssetTokenQuery()),\n css: allFiles\n .filter((v) => v.endsWith('.css'))\n .map((v) => v + getAssetTokenQuery()),\n }\n })\n}\n\nexport function createRouteLoader(assetPrefix: string): RouteLoader {\n const entrypoints: Map<string, Future<RouteEntrypoint> | RouteEntrypoint> =\n new Map()\n const loadedScripts: Map<string, Promise<unknown>> = new Map()\n const styleSheets: Map<string, Promise<RouteStyleSheet>> = new Map()\n const routes: Map<string, Future<RouteLoaderEntry> | RouteLoaderEntry> =\n new Map()\n\n function maybeExecuteScript(\n src: TrustedScriptURL | string\n ): Promise<unknown> {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (process.env.NODE_ENV !== 'development') {\n let prom: Promise<unknown> | undefined = loadedScripts.get(src.toString())\n if (prom) {\n return prom\n }\n\n // Skip executing script if it's already in the DOM:\n if (document.querySelector(`script[src^=\"${src}\"]`)) {\n return Promise.resolve()\n }\n\n loadedScripts.set(src.toString(), (prom = appendScript(src)))\n return prom\n } else {\n return appendScript(src)\n }\n }\n\n function fetchStyleSheet(href: string): Promise<RouteStyleSheet> {\n let prom: Promise<RouteStyleSheet> | undefined = styleSheets.get(href)\n if (prom) {\n return prom\n }\n\n styleSheets.set(\n href,\n (prom = fetch(href, { credentials: 'same-origin' })\n .then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to load stylesheet: ${href}`)\n }\n return res.text().then((text) => ({ href: href, content: text }))\n })\n .catch((err) => {\n throw markAssetError(err)\n }))\n )\n return prom\n }\n\n return {\n whenEntrypoint(route: string) {\n return withFuture(route, entrypoints)\n },\n onEntrypoint(route: string, execute: undefined | (() => unknown)) {\n ;(execute\n ? Promise.resolve()\n .then(() => execute())\n .then(\n (exports: any) => ({\n component: (exports && exports.default) || exports,\n exports: exports,\n }),\n (err) => ({ error: err })\n )\n : Promise.resolve(undefined)\n ).then((input: RouteEntrypoint | undefined) => {\n const old = entrypoints.get(route)\n if (old && 'resolve' in old) {\n if (input) {\n entrypoints.set(route, input)\n old.resolve(input)\n }\n } else {\n if (input) {\n entrypoints.set(route, input)\n } else {\n entrypoints.delete(route)\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route)\n }\n })\n },\n loadRoute(route: string, prefetch?: boolean) {\n return withFuture<RouteLoaderEntry>(route, routes, () => {\n let devBuildPromiseResolve: () => void\n\n if (process.env.NODE_ENV === 'development') {\n devBuildPromise = new Promise<void>((resolve) => {\n devBuildPromiseResolve = resolve\n })\n }\n\n return resolvePromiseWithTimeout(\n getFilesForRoute(assetPrefix, route)\n .then(({ scripts, css }) => {\n return Promise.all([\n entrypoints.has(route)\n ? []\n : Promise.all(scripts.map(maybeExecuteScript)),\n Promise.all(css.map(fetchStyleSheet)),\n ] as const)\n })\n .then((res) => {\n return this.whenEntrypoint(route).then((entrypoint) => ({\n entrypoint,\n styles: res[1],\n }))\n }),\n markAssetError(new Error(`Route did not complete loading: ${route}`)),\n devBuildPromise\n )\n .then(({ entrypoint, styles }) => {\n const res: RouteLoaderEntry = Object.assign<\n { styles: RouteStyleSheet[] },\n RouteEntrypoint\n >({ styles: styles! }, entrypoint)\n return 'error' in entrypoint ? entrypoint : res\n })\n .catch((err) => {\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err\n }\n return { error: err }\n })\n .finally(() => devBuildPromiseResolve?.())\n })\n },\n prefetch(route: string): Promise<void> {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn\n if ((cn = (navigator as any).connection)) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve()\n }\n return getFilesForRoute(assetPrefix, route)\n .then((output) =>\n Promise.all(\n canPrefetch\n ? output.scripts.map((script) =>\n prefetchViaDom(script.toString(), 'script')\n )\n : []\n )\n )\n .then(() => {\n requestIdleCallback(() => this.loadRoute(route, true).catch(() => {}))\n })\n .catch(\n // swallow prefetch errors\n () => {}\n )\n },\n }\n}\n"],"names":["getAssetPathFromRoute","__unsafeCreateTrustedScriptURL","requestIdleCallback","getAssetTokenQuery","encodeURIPath","resolvePromiseWithTimeout","withFuture","key","map","generator","entry","get","future","Promise","resolve","resolver","prom","set","then","value","catch","err","delete","ASSET_LOAD_ERROR","Symbol","markAssetError","Object","defineProperty","isAssetError","hasPrefetch","link","document","createElement","window","MSInputMethodContext","documentMode","relList","supports","canPrefetch","prefetchViaDom","href","as","reject","selector","querySelector","rel","crossOrigin","process","env","__NEXT_CROSS_ORIGIN","onload","onerror","Error","head","appendChild","appendScript","src","script","body","devBuildPromise","getClientBuildManifest","self","__BUILD_MANIFEST","onBuildManifest","cb","__BUILD_MANIFEST_CB","getFilesForRoute","assetPrefix","route","NODE_ENV","scriptUrl","scripts","css","manifest","allFiles","filter","v","endsWith","createRouteLoader","entrypoints","Map","loadedScripts","styleSheets","routes","maybeExecuteScript","toString","fetchStyleSheet","fetch","credentials","res","ok","text","content","whenEntrypoint","onEntrypoint","execute","exports","component","default","error","undefined","input","old","loadRoute","prefetch","devBuildPromiseResolve","all","has","entrypoint","styles","assign","finally","cn","navigator","connection","saveData","test","effectiveType","output"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/client/route-loader.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { ProxyMatcher } from '../build/analysis/get-page-static-info'\nimport type { RequiredServerFilesManifest } from '../build'\nimport getAssetPathFromRoute from '../shared/lib/router/utils/get-asset-path-from-route'\nimport { __unsafeCreateTrustedScriptURL } from './trusted-types'\nimport { requestIdleCallback } from './request-idle-callback'\nimport { getAssetTokenQuery } from '../shared/lib/deployment-id'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport { resolvePromiseWithTimeout } from './lib/promise'\n\ndeclare global {\n interface Window {\n __BUILD_MANIFEST?: Record<string, string[]>\n __BUILD_MANIFEST_CB?: Function\n __TURBOPACK_PAGE_BOOTSTRAP?: Record<string, unknown>\n __TURBOPACK_CHUNK_LOADING_GLOBAL?: string\n __SERVER_FILES_MANIFEST?: RequiredServerFilesManifest\n __MIDDLEWARE_MATCHERS?: ProxyMatcher[]\n __MIDDLEWARE_MATCHERS_CB?: Function\n __REACT_LOADABLE_MANIFEST?: any\n __DYNAMIC_CSS_MANIFEST?: any\n __RSC_MANIFEST?: any\n __RSC_SERVER_MANIFEST?: any\n __NEXT_FONT_MANIFEST?: any\n __SUBRESOURCE_INTEGRITY_MANIFEST?: string\n __INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string\n }\n}\n\ninterface LoadedEntrypointSuccess {\n component: ComponentType\n exports: any\n}\ninterface LoadedEntrypointFailure {\n error: unknown\n}\ntype RouteEntrypoint = LoadedEntrypointSuccess | LoadedEntrypointFailure\n\ninterface RouteStyleSheet {\n href: string\n content: string\n}\n\ninterface LoadedRouteSuccess extends LoadedEntrypointSuccess {\n styles: RouteStyleSheet[]\n}\ninterface LoadedRouteFailure {\n error: unknown\n}\ntype RouteLoaderEntry = LoadedRouteSuccess | LoadedRouteFailure\n\ninterface Future<V> {\n resolve: (entrypoint: V) => void\n future: Promise<V>\n}\nfunction withFuture<T extends object>(\n key: string,\n map: Map<string, Future<T> | T>,\n generator?: () => Promise<T>\n): Promise<T> {\n let entry = map.get(key)\n if (entry) {\n if ('future' in entry) {\n return entry.future\n }\n return Promise.resolve(entry)\n }\n let resolver: (entrypoint: T) => void\n const prom: Promise<T> = new Promise<T>((resolve) => {\n resolver = resolve\n })\n map.set(key, { resolve: resolver!, future: prom })\n return generator\n ? generator()\n .then((value) => {\n resolver(value)\n return value\n })\n .catch((err) => {\n map.delete(key)\n throw err\n })\n : prom\n}\n\nexport interface RouteLoader {\n whenEntrypoint(route: string): Promise<RouteEntrypoint>\n onEntrypoint(route: string, execute: () => unknown): void\n loadRoute(route: string, prefetch?: boolean): Promise<RouteLoaderEntry>\n prefetch(route: string): Promise<void>\n}\n\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR')\n// TODO: unexport\nexport function markAssetError(err: Error): Error {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {})\n}\n\nexport function isAssetError(err?: Error): boolean | undefined {\n return err && ASSET_LOAD_ERROR in err\n}\n\nfunction hasPrefetch(link?: HTMLLinkElement): boolean {\n try {\n link = document.createElement('link')\n return (\n // detect IE11 since it supports prefetch but isn't detected\n // with relList.support\n (!!window.MSInputMethodContext && !!(document as any).documentMode) ||\n link.relList.supports('prefetch')\n )\n } catch {\n return false\n }\n}\n\nconst canPrefetch: boolean = hasPrefetch()\n\nfunction prefetchViaDom(\n href: string,\n as: string,\n link?: HTMLLinkElement\n): Promise<any> {\n return new Promise<void>((resolve, reject) => {\n const selector = `\n link[rel=\"prefetch\"][href^=\"${href}\"],\n link[rel=\"preload\"][href^=\"${href}\"],\n script[src^=\"${href}\"]`\n if (document.querySelector(selector)) {\n return resolve()\n }\n\n link = document.createElement('link')\n\n // The order of property assignment here is intentional:\n if (as) link!.as = as\n link!.rel = `prefetch`\n link!.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n link!.onload = resolve as any\n link!.onerror = () =>\n reject(markAssetError(new Error(`Failed to prefetch: ${href}`)))\n\n // `href` should always be last:\n link!.href = href\n\n document.head.appendChild(link)\n })\n}\n\nfunction appendScript(\n src: TrustedScriptURL | string,\n script?: HTMLScriptElement\n): Promise<unknown> {\n return new Promise((resolve, reject) => {\n script = document.createElement('script')\n\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve\n script.onerror = () =>\n reject(markAssetError(new Error(`Failed to load script: ${src}`)))\n\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = process.env.__NEXT_CROSS_ORIGIN!\n\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src as string\n document.body.appendChild(script)\n })\n}\n\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise: Promise<void> | undefined\n\n// TODO: stop exporting or cache the failure\n// It'd be best to stop exporting this. It's an implementation detail. We're\n// only exporting it for backwards compatibility with the `page-loader`.\n// Only cache this response as a last resort if we cannot eliminate all other\n// code branches that use the Build Manifest Callback and push them through\n// the Route Loader interface.\nexport function getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST)\n }\n\n const onBuildManifest = new Promise<Record<string, string[]>>((resolve) => {\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB\n self.__BUILD_MANIFEST_CB = () => {\n resolve(self.__BUILD_MANIFEST!)\n cb && cb()\n }\n })\n\n return resolvePromiseWithTimeout(\n onBuildManifest,\n markAssetError(new Error('Failed to load client build manifest')),\n devBuildPromise\n )\n}\n\ninterface RouteFiles {\n scripts: (TrustedScriptURL | string)[]\n css: string[]\n}\nfunction getFilesForRoute(\n assetPrefix: string,\n route: string\n): Promise<RouteFiles> {\n if (process.env.NODE_ENV === 'development') {\n const scriptUrl =\n assetPrefix +\n '/_next/static/chunks/pages' +\n encodeURIPath(getAssetPathFromRoute(route, '.js')) +\n getAssetTokenQuery()\n return Promise.resolve({\n scripts: [__unsafeCreateTrustedScriptURL(scriptUrl)],\n // Styles are handled by `style-loader` in development:\n css: [],\n })\n }\n return getClientBuildManifest().then((manifest) => {\n if (!(route in manifest)) {\n throw markAssetError(new Error(`Failed to lookup route: ${route}`))\n }\n const allFiles = manifest[route].map(\n (entry) => assetPrefix + '/_next/' + encodeURIPath(entry)\n )\n return {\n scripts: allFiles\n .filter((v) => v.endsWith('.js'))\n .map((v) => __unsafeCreateTrustedScriptURL(v) + getAssetTokenQuery()),\n css: allFiles\n .filter((v) => v.endsWith('.css'))\n .map((v) => v + getAssetTokenQuery()),\n }\n })\n}\n\nexport function createRouteLoader(assetPrefix: string): RouteLoader {\n const entrypoints: Map<string, Future<RouteEntrypoint> | RouteEntrypoint> =\n new Map()\n const loadedScripts: Map<string, Promise<unknown>> = new Map()\n const styleSheets: Map<string, Promise<RouteStyleSheet>> = new Map()\n const routes: Map<string, Future<RouteLoaderEntry> | RouteLoaderEntry> =\n new Map()\n const bootstrappedRoutes: Set<string> = new Set()\n\n // Bootstrap a client-loaded route (navigation/prefetch) so its entry registers via\n // `window.__NEXT_P`. The initial page is bootstrapped in the document.\n function bootstrapRoute(route: string): void {\n // Gated for DCE\n if (!process.env.__NEXT_TURBOPACK_SHARED_RUNTIME) return\n if (process.env.NODE_ENV === 'development') return\n if (bootstrappedRoutes.has(route)) return\n const params = self.__TURBOPACK_PAGE_BOOTSTRAP?.[route]\n const global = self.__TURBOPACK_CHUNK_LOADING_GLOBAL\n if (params == null) return\n // `global` is always defined alongside the params map (see manifest-loader).\n bootstrappedRoutes.add(route)\n ;(self as any)[global!].push(params)\n }\n\n function maybeExecuteScript(\n src: TrustedScriptURL | string\n ): Promise<unknown> {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (process.env.NODE_ENV !== 'development') {\n let prom: Promise<unknown> | undefined = loadedScripts.get(src.toString())\n if (prom) {\n return prom\n }\n\n // Skip executing script if it's already in the DOM:\n if (document.querySelector(`script[src^=\"${src}\"]`)) {\n return Promise.resolve()\n }\n\n loadedScripts.set(src.toString(), (prom = appendScript(src)))\n return prom\n } else {\n return appendScript(src)\n }\n }\n\n function fetchStyleSheet(href: string): Promise<RouteStyleSheet> {\n let prom: Promise<RouteStyleSheet> | undefined = styleSheets.get(href)\n if (prom) {\n return prom\n }\n\n styleSheets.set(\n href,\n (prom = fetch(href, { credentials: 'same-origin' })\n .then((res) => {\n if (!res.ok) {\n throw new Error(`Failed to load stylesheet: ${href}`)\n }\n return res.text().then((text) => ({ href: href, content: text }))\n })\n .catch((err) => {\n throw markAssetError(err)\n }))\n )\n return prom\n }\n\n return {\n whenEntrypoint(route: string) {\n return withFuture(route, entrypoints)\n },\n onEntrypoint(route: string, execute: undefined | (() => unknown)) {\n ;(execute\n ? Promise.resolve()\n .then(() => execute())\n .then(\n (exports: any) => ({\n component: (exports && exports.default) || exports,\n exports: exports,\n }),\n (err) => ({ error: err })\n )\n : Promise.resolve(undefined)\n ).then((input: RouteEntrypoint | undefined) => {\n const old = entrypoints.get(route)\n if (old && 'resolve' in old) {\n if (input) {\n entrypoints.set(route, input)\n old.resolve(input)\n }\n } else {\n if (input) {\n entrypoints.set(route, input)\n } else {\n entrypoints.delete(route)\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route)\n }\n })\n },\n loadRoute(route: string, prefetch?: boolean) {\n return withFuture<RouteLoaderEntry>(route, routes, () => {\n let devBuildPromiseResolve: () => void\n\n if (process.env.NODE_ENV === 'development') {\n devBuildPromise = new Promise<void>((resolve) => {\n devBuildPromiseResolve = resolve\n })\n }\n\n return resolvePromiseWithTimeout(\n getFilesForRoute(assetPrefix, route)\n .then(({ scripts, css }) => {\n return Promise.all([\n entrypoints.has(route)\n ? []\n : Promise.all(scripts.map(maybeExecuteScript)).then((r) => {\n bootstrapRoute(route)\n return r\n }),\n Promise.all(css.map(fetchStyleSheet)),\n ] as const)\n })\n .then((res) => {\n return this.whenEntrypoint(route).then((entrypoint) => ({\n entrypoint,\n styles: res[1],\n }))\n }),\n markAssetError(new Error(`Route did not complete loading: ${route}`)),\n devBuildPromise\n )\n .then(({ entrypoint, styles }) => {\n const res: RouteLoaderEntry = Object.assign<\n { styles: RouteStyleSheet[] },\n RouteEntrypoint\n >({ styles: styles! }, entrypoint)\n return 'error' in entrypoint ? entrypoint : res\n })\n .catch((err) => {\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err\n }\n return { error: err }\n })\n .finally(() => devBuildPromiseResolve?.())\n })\n },\n prefetch(route: string): Promise<void> {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn\n if ((cn = (navigator as any).connection)) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve()\n }\n return getFilesForRoute(assetPrefix, route)\n .then((output) =>\n Promise.all(\n canPrefetch\n ? output.scripts.map((script) =>\n prefetchViaDom(script.toString(), 'script')\n )\n : []\n )\n )\n .then(() => {\n requestIdleCallback(() => this.loadRoute(route, true).catch(() => {}))\n })\n .catch(\n // swallow prefetch errors\n () => {}\n )\n },\n }\n}\n"],"names":["getAssetPathFromRoute","__unsafeCreateTrustedScriptURL","requestIdleCallback","getAssetTokenQuery","encodeURIPath","resolvePromiseWithTimeout","withFuture","key","map","generator","entry","get","future","Promise","resolve","resolver","prom","set","then","value","catch","err","delete","ASSET_LOAD_ERROR","Symbol","markAssetError","Object","defineProperty","isAssetError","hasPrefetch","link","document","createElement","window","MSInputMethodContext","documentMode","relList","supports","canPrefetch","prefetchViaDom","href","as","reject","selector","querySelector","rel","crossOrigin","process","env","__NEXT_CROSS_ORIGIN","onload","onerror","Error","head","appendChild","appendScript","src","script","body","devBuildPromise","getClientBuildManifest","self","__BUILD_MANIFEST","onBuildManifest","cb","__BUILD_MANIFEST_CB","getFilesForRoute","assetPrefix","route","NODE_ENV","scriptUrl","scripts","css","manifest","allFiles","filter","v","endsWith","createRouteLoader","entrypoints","Map","loadedScripts","styleSheets","routes","bootstrappedRoutes","Set","bootstrapRoute","__NEXT_TURBOPACK_SHARED_RUNTIME","has","params","__TURBOPACK_PAGE_BOOTSTRAP","global","__TURBOPACK_CHUNK_LOADING_GLOBAL","add","push","maybeExecuteScript","toString","fetchStyleSheet","fetch","credentials","res","ok","text","content","whenEntrypoint","onEntrypoint","execute","exports","component","default","error","undefined","input","old","loadRoute","prefetch","devBuildPromiseResolve","all","r","entrypoint","styles","assign","finally","cn","navigator","connection","saveData","test","effectiveType","output"],"mappings":"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","ignoreList":[0]} |
@@ -362,3 +362,2 @@ import { createStaticWorker } from '../build'; | ||
| cachedNavigations: nextConfig.experimental.cachedNavigations ?? false, | ||
| appShells: nextConfig.experimental.appShells, | ||
| maxPostponedStateSizeBytes: parseMaxPostponedStateSize(nextConfig.experimental.maxPostponedStateSize), | ||
@@ -365,0 +364,0 @@ exposeTestingApi: nextConfig.experimental.exposeTestingApiInProductionBuild === true |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["import type {\n ExportAppResult,\n ExportAppOptions,\n WorkerRenderOptsPartial,\n ExportPagesResult,\n ExportPathEntry,\n} from './types'\nimport {\n createStaticWorker,\n type PrerenderManifest,\n type StaticWorker,\n} from '../build'\nimport type { PagesManifest } from '../build/webpack/plugins/pages-manifest-plugin'\n\nimport { bold, yellow } from '../lib/picocolors'\nimport findUp from 'next/dist/compiled/find-up'\nimport { existsSync, promises as fs } from 'fs'\n\nimport '../server/require-hook'\n\nimport { dirname, join, resolve, sep, relative } from 'path'\nimport * as Log from '../build/output/log'\nimport {\n RSC_SEGMENT_SUFFIX,\n RSC_SEGMENTS_DIR_SUFFIX,\n RSC_SUFFIX,\n SSG_FALLBACK_EXPORT_ERROR,\n} from '../lib/constants'\nimport { recursiveCopy } from '../lib/recursive-copy'\nimport {\n BUILD_ID_FILE,\n CLIENT_PUBLIC_FILES_PATH,\n CLIENT_STATIC_FILES_PATH,\n EXPORT_DETAIL,\n EXPORT_MARKER,\n NEXT_FONT_MANIFEST,\n MIDDLEWARE_MANIFEST,\n PAGES_MANIFEST,\n PHASE_EXPORT,\n PRERENDER_MANIFEST,\n SERVER_DIRECTORY,\n SERVER_REFERENCE_MANIFEST,\n APP_PATH_ROUTES_MANIFEST,\n ROUTES_MANIFEST,\n FUNCTIONS_CONFIG_MANIFEST,\n} from '../shared/lib/constants'\nimport loadConfig from '../server/config'\nimport type { ExportPathMap } from '../server/config-shared'\nimport { parseMaxPostponedStateSize } from '../server/config-shared'\nimport { eventCliSession } from '../telemetry/events'\nimport { hasNextSupport } from '../server/ci-info'\nimport { Telemetry } from '../telemetry/storage'\nimport { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'\nimport { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path'\nimport { loadEnvConfig } from '@next/env'\nimport { isAPIRoute } from '../lib/is-api-route'\nimport { getPagePath } from '../server/require'\nimport type { Span } from '../trace'\nimport type { MiddlewareManifest } from '../build/webpack/plugins/middleware-plugin'\nimport { isAppRouteRoute } from '../lib/is-app-route-route'\nimport { isAppPageRoute } from '../lib/is-app-page-route'\nimport isError from '../lib/is-error'\nimport { formatManifest } from '../build/manifests/formatter/format-manifest'\nimport { TurborepoAccessTraceResult } from '../build/turborepo-access-trace'\nimport { createProgress } from '../build/progress'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { isInterceptionRouteRewrite } from '../lib/is-interception-route-rewrite'\nimport type { ActionManifest } from '../build/webpack/plugins/flight-client-entry-plugin'\nimport { extractInfoFromServerReferenceId } from '../shared/lib/server-reference-info'\nimport { convertSegmentPathToStaticExportFilename } from '../shared/lib/segment-cache/segment-value-encoding'\nimport { getNextBuildDebuggerPortOffset } from '../lib/worker'\nimport { getParams } from './helpers/get-params'\nimport { isDynamicRoute } from '../shared/lib/router/utils/is-dynamic'\nimport { normalizeAppPath } from '../shared/lib/router/utils/app-paths'\nimport type { Params } from '../server/request/params'\nimport { Bundler } from '../lib/bundler'\n\nexport class ExportError extends Error {\n code = 'NEXT_EXPORT_ERROR'\n}\n\n/**\n * Picks an RDC seed by matching on the params that are\n * already known, so fallback shells use a seed that has already\n * computed those known params.\n */\nfunction buildRDCCacheByPage(\n results: ExportPagesResult,\n finalPhaseExportPaths: ExportPathEntry[]\n): Record<string, string> {\n const renderResumeDataCachesByPage: Record<string, string> = {}\n const seedCandidatesByPage = new Map<\n string,\n Array<{ path: string; renderResumeDataCache: string }>\n >()\n\n for (const { page, path, result } of results) {\n if (!result) {\n continue\n }\n\n if ('renderResumeDataCache' in result && result.renderResumeDataCache) {\n // Collect all RDC seeds for this page so we can pick the best match\n // for each fallback shell later (e.g. locale-specific variants).\n const candidates = seedCandidatesByPage.get(page) ?? []\n candidates.push({\n path,\n renderResumeDataCache: result.renderResumeDataCache,\n })\n seedCandidatesByPage.set(page, candidates)\n // Remove the RDC string from the result so that it can be garbage\n // collected, when there are more results for the same page.\n result.renderResumeDataCache = undefined\n }\n }\n\n const getKnownParamsKey = (\n normalizedPage: string,\n path: string,\n fallbackParamNames: Set<string>\n ): string | null => {\n let params: Params\n try {\n params = getParams(normalizedPage, path)\n } catch {\n return null\n }\n\n // Only keep params that are known, then sort\n // for a stable key so we can match a compatible seed.\n const entries = Object.entries(params).filter(\n ([key]) => !fallbackParamNames.has(key)\n )\n\n entries.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n return JSON.stringify(entries)\n }\n\n for (const exportPath of finalPhaseExportPaths) {\n const { page, path, _fallbackRouteParams = [] } = exportPath\n if (!isDynamicRoute(page)) {\n continue\n }\n\n // Normalize app pages before param matching.\n const normalizedPage = normalizeAppPath(page)\n const pageKey = page !== path ? `${page}: ${path}` : path\n const fallbackParamNames = new Set(\n _fallbackRouteParams.map((param) => param.paramName)\n )\n // Build a key from the known params for this fallback shell so we can\n // select a seed from a compatible prerendered route.\n const targetKey = getKnownParamsKey(\n normalizedPage,\n path,\n fallbackParamNames\n )\n\n if (!targetKey) {\n continue\n }\n\n const candidates = seedCandidatesByPage.get(page)\n\n // No suitable candidates, so there's no RDC seed to select\n if (!candidates || candidates.length === 0) {\n continue\n }\n\n let selected: string | null = null\n for (const candidate of candidates) {\n // Pick the seed whose known params match this fallback shell.\n const candidateKey = getKnownParamsKey(\n normalizedPage,\n candidate.path,\n fallbackParamNames\n )\n if (candidateKey === targetKey) {\n selected = candidate.renderResumeDataCache\n break\n }\n }\n\n if (selected) {\n renderResumeDataCachesByPage[pageKey] = selected\n }\n }\n\n return renderResumeDataCachesByPage\n}\n\nasync function exportAppImpl(\n dir: string,\n options: Readonly<ExportAppOptions>,\n span: Span,\n staticWorker?: StaticWorker\n): Promise<ExportAppResult | null> {\n dir = resolve(dir)\n\n // attempt to load global env values so they are available in next.config.js\n span.traceChild('load-dotenv').traceFn(() => loadEnvConfig(dir, false, Log))\n\n const { enabledDirectories } = options\n\n const nextConfig =\n options.nextConfig ||\n (await span.traceChild('load-next-config').traceAsyncFn(() =>\n loadConfig(PHASE_EXPORT, dir, {\n debugPrerender: options.debugPrerender,\n })\n ))\n\n const distDir = join(dir, nextConfig.distDir)\n const telemetry = options.buildExport ? null : new Telemetry({ distDir })\n\n if (telemetry) {\n telemetry.record(\n eventCliSession(nextConfig, {\n webpackVersion: null,\n cliCommand: 'export',\n isSrcDir: null,\n hasNowJson: !!(await findUp('now.json', { cwd: dir })),\n isCustomServer: null,\n turboFlag: options.bundler === Bundler.Turbopack,\n pagesDir: null,\n appDir: null,\n })\n )\n }\n\n const subFolders = nextConfig.trailingSlash && !options.buildExport\n\n if (!options.silent && !options.buildExport) {\n Log.info(`using build directory: ${distDir}`)\n }\n\n const buildIdFile = join(distDir, BUILD_ID_FILE)\n\n if (!existsSync(buildIdFile)) {\n throw new ExportError(\n `Could not find a production build in the '${distDir}' directory. Try building your app with 'next build' before starting the static export. https://nextjs.org/docs/messages/next-export-no-build-id`\n )\n }\n\n const customRoutes = (['rewrites', 'redirects', 'headers'] as const).filter(\n (config) => typeof nextConfig[config] === 'function'\n )\n\n if (!hasNextSupport && !options.buildExport && customRoutes.length > 0) {\n Log.warn(\n `rewrites, redirects, and headers are not applied when exporting your application, detected (${customRoutes.join(\n ', '\n )}). See more info here: https://nextjs.org/docs/messages/export-no-custom-routes`\n )\n }\n\n const buildId = await fs.readFile(buildIdFile, 'utf8')\n\n const pagesManifest =\n !options.pages &&\n (require(join(distDir, SERVER_DIRECTORY, PAGES_MANIFEST)) as PagesManifest)\n\n let prerenderManifest: DeepReadonly<PrerenderManifest> | undefined\n try {\n prerenderManifest = require(join(distDir, PRERENDER_MANIFEST))\n } catch {}\n\n let appRoutePathManifest: Record<string, string> | undefined\n try {\n appRoutePathManifest = require(join(distDir, APP_PATH_ROUTES_MANIFEST))\n } catch (err) {\n if (\n isError(err) &&\n (err.code === 'ENOENT' || err.code === 'MODULE_NOT_FOUND')\n ) {\n // the manifest doesn't exist which will happen when using\n // \"pages\" dir instead of \"app\" dir.\n appRoutePathManifest = undefined\n } else {\n // the manifest is malformed (invalid json)\n throw err\n }\n }\n\n const excludedPrerenderRoutes = new Set<string>()\n const pages = options.pages || Object.keys(pagesManifest)\n const defaultPathMap: ExportPathMap = {}\n\n let hasApiRoutes = false\n for (const page of pages) {\n // _document and _app are not real pages\n // _error is exported as 404.html later on\n // API Routes are Node.js functions\n\n if (isAPIRoute(page)) {\n hasApiRoutes = true\n continue\n }\n\n if (page === '/_document' || page === '/_app' || page === '/_error') {\n continue\n }\n\n // iSSG pages that are dynamic should not export templated version by\n // default. In most cases, this would never work. There is no server that\n // could run `getStaticProps`. If users make their page work lazily, they\n // can manually add it to the `exportPathMap`.\n if (prerenderManifest?.dynamicRoutes[page]) {\n excludedPrerenderRoutes.add(page)\n continue\n }\n\n defaultPathMap[page] = { page }\n }\n\n const mapAppRouteToPage = new Map<string, string>()\n if (!options.buildExport && appRoutePathManifest) {\n for (const [pageName, routePath] of Object.entries(appRoutePathManifest)) {\n mapAppRouteToPage.set(routePath, pageName)\n if (\n isAppPageRoute(pageName) &&\n !prerenderManifest?.routes[routePath] &&\n !prerenderManifest?.dynamicRoutes[routePath]\n ) {\n defaultPathMap[routePath] = {\n page: pageName,\n _isAppDir: true,\n }\n }\n }\n }\n\n // Initialize the output directory\n const outDir = options.outdir\n\n if (outDir === join(dir, 'public')) {\n throw new ExportError(\n `The 'public' directory is reserved in Next.js and can not be used as the export out directory. https://nextjs.org/docs/messages/can-not-output-to-public`\n )\n }\n\n if (outDir === join(dir, 'static')) {\n throw new ExportError(\n `The 'static' directory is reserved in Next.js and can not be used as the export out directory. https://nextjs.org/docs/messages/can-not-output-to-static`\n )\n }\n\n if (!options.buildExport) {\n await fs.rm(outDir, { recursive: true, force: true })\n await fs.mkdir(join(outDir, '_next', buildId), { recursive: true })\n }\n\n await fs.writeFile(\n join(distDir, EXPORT_DETAIL),\n formatManifest({\n version: 1,\n outDirectory: outDir,\n success: false,\n }),\n 'utf8'\n )\n\n // Copy static directory\n if (!options.buildExport && existsSync(join(dir, 'static'))) {\n if (!options.silent) {\n Log.info('Copying \"static\" directory')\n }\n await span\n .traceChild('copy-static-directory')\n .traceAsyncFn(() =>\n recursiveCopy(join(dir, 'static'), join(outDir, 'static'))\n )\n }\n\n // Copy .next/static directory\n if (\n !options.buildExport &&\n existsSync(join(distDir, CLIENT_STATIC_FILES_PATH))\n ) {\n if (!options.silent) {\n Log.info('Copying \"static build\" directory')\n }\n await span\n .traceChild('copy-next-static-directory')\n .traceAsyncFn(() =>\n recursiveCopy(\n join(distDir, CLIENT_STATIC_FILES_PATH),\n join(outDir, '_next', CLIENT_STATIC_FILES_PATH)\n )\n )\n }\n\n // Get the exportPathMap from the config file\n if (typeof nextConfig.exportPathMap !== 'function') {\n nextConfig.exportPathMap = async (defaultMap) => {\n return defaultMap\n }\n }\n\n const {\n i18n,\n images: { loader = 'default', unoptimized },\n } = nextConfig\n\n if (i18n && !options.buildExport) {\n throw new ExportError(\n `i18n support is not compatible with next export. See here for more info on deploying: https://nextjs.org/docs/messages/export-no-custom-routes`\n )\n }\n\n if (!options.buildExport) {\n const { isNextImageImported } = await span\n .traceChild('is-next-image-imported')\n .traceAsyncFn(() =>\n fs\n .readFile(join(distDir, EXPORT_MARKER), 'utf8')\n .then((text) => JSON.parse(text))\n .catch(() => ({}))\n )\n\n if (\n isNextImageImported &&\n loader === 'default' &&\n !unoptimized &&\n !hasNextSupport\n ) {\n throw new ExportError(\n `Image Optimization using the default loader is not compatible with export.\n Possible solutions:\n - Use \\`next start\\` to run a server, which includes the Image Optimization API.\n - Configure \\`images.unoptimized = true\\` in \\`next.config.js\\` to disable the Image Optimization API.\n Read more: https://nextjs.org/docs/messages/export-image-api`\n )\n }\n }\n\n let serverActionsManifest: ActionManifest | undefined\n if (enabledDirectories.app) {\n serverActionsManifest = require(\n join(distDir, SERVER_DIRECTORY, SERVER_REFERENCE_MANIFEST + '.json')\n ) as ActionManifest\n\n if (nextConfig.output === 'export') {\n const routesManifest = require(join(distDir, ROUTES_MANIFEST))\n\n // We already prevent rewrites earlier in the process, however Next.js will insert rewrites\n // for interception routes so we need to check for that here.\n if (routesManifest?.rewrites?.beforeFiles?.length > 0) {\n const hasInterceptionRouteRewrite =\n routesManifest.rewrites.beforeFiles.some(isInterceptionRouteRewrite)\n\n if (hasInterceptionRouteRewrite) {\n throw new ExportError(\n `Intercepting routes are not supported with static export.\\nRead more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports#unsupported-features`\n )\n }\n }\n\n const actionIds = [\n ...Object.keys(serverActionsManifest.node),\n ...Object.keys(serverActionsManifest.edge),\n ]\n\n if (\n actionIds.some(\n (actionId) =>\n extractInfoFromServerReferenceId(actionId).type === 'server-action'\n )\n ) {\n throw new ExportError(\n `Server Actions are not supported with static export.\\nRead more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports#unsupported-features`\n )\n }\n }\n }\n\n // Start the rendering process\n const renderOpts: WorkerRenderOptsPartial = {\n previewProps: prerenderManifest?.preview,\n isBuildTimePrerendering: true,\n assetPrefix: nextConfig.assetPrefix.replace(/\\/$/, ''),\n distDir,\n basePath: nextConfig.basePath,\n cacheComponents: nextConfig.cacheComponents ?? false,\n partialPrefetching: nextConfig.partialPrefetching,\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n trailingSlash: nextConfig.trailingSlash,\n locales: i18n?.locales,\n locale: i18n?.defaultLocale,\n defaultLocale: i18n?.defaultLocale,\n domainLocales: i18n?.domains,\n disableOptimizedLoading: nextConfig.experimental.disableOptimizedLoading,\n // Exported pages do not currently support dynamic HTML.\n supportsDynamicResponse: false,\n crossOrigin: nextConfig.crossOrigin,\n optimizeCss: nextConfig.experimental.optimizeCss,\n nextConfigOutput: nextConfig.output,\n nextScriptWorkers: nextConfig.experimental.nextScriptWorkers,\n largePageDataBytes: nextConfig.experimental.largePageDataBytes,\n serverActions: nextConfig.experimental.serverActions,\n serverComponents: enabledDirectories.app,\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n nextFontManifest: require(\n join(distDir, 'server', `${NEXT_FONT_MANIFEST}.json`)\n ),\n images: nextConfig.images,\n htmlLimitedBots: nextConfig.htmlLimitedBots.source,\n experimental: {\n clientTraceMetadata: nextConfig.experimental.clientTraceMetadata,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n clientParamParsingOrigins:\n nextConfig.experimental.clientParamParsingOrigins,\n dynamicOnHover: nextConfig.experimental.dynamicOnHover ?? false,\n optimisticRouting: nextConfig.experimental.optimisticRouting ?? false,\n inlineCss: nextConfig.experimental.inlineCss ?? false,\n prefetchInlining: nextConfig.experimental.prefetchInlining ?? false,\n authInterrupts: !!nextConfig.experimental.authInterrupts,\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n cachedNavigations: nextConfig.experimental.cachedNavigations ?? false,\n appShells: nextConfig.experimental.appShells,\n maxPostponedStateSizeBytes: parseMaxPostponedStateSize(\n nextConfig.experimental.maxPostponedStateSize\n ),\n exposeTestingApi:\n nextConfig.experimental.exposeTestingApiInProductionBuild === true,\n },\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n }\n\n // We need this for server rendering the Link component.\n ;(globalThis as any).__NEXT_DATA__ = {\n nextExport: true,\n }\n\n const exportPathMap = await span\n .traceChild('run-export-path-map')\n .traceAsyncFn(async () => {\n const exportMap = await nextConfig.exportPathMap(defaultPathMap, {\n dev: false,\n dir,\n outDir,\n distDir,\n buildId,\n })\n return exportMap\n })\n\n // During static export, remove export 404/500 of pages router\n // when only app router presents\n if (!options.buildExport && options.appDirOnly) {\n delete exportPathMap['/404']\n delete exportPathMap['/500']\n }\n\n // only add missing 404 page when `buildExport` is false\n if (!options.buildExport && !options.appDirOnly) {\n // only add missing /404 if not specified in `exportPathMap`\n if (!exportPathMap['/404']) {\n exportPathMap['/404'] = { page: '/_error' }\n }\n\n /**\n * exports 404.html for backwards compat\n * E.g. GitHub Pages, GitLab Pages, Cloudflare Pages, Netlify\n */\n if (!exportPathMap['/404.html'] && exportPathMap['/404']) {\n // alias /404.html to /404 to be compatible with custom 404 / _error page\n exportPathMap['/404.html'] = exportPathMap['/404']\n }\n }\n\n const allExportPaths: ExportPathEntry[] = []\n const seenExportPaths = new Set<string>()\n const fallbackEnabledPages = new Set<string>()\n\n for (const [path, entry] of Object.entries(exportPathMap)) {\n // make sure to prevent duplicates\n const normalizedPath = denormalizePagePath(normalizePagePath(path))\n\n if (seenExportPaths.has(normalizedPath)) {\n continue\n }\n\n seenExportPaths.add(normalizedPath)\n\n if (!entry._isAppDir && isAPIRoute(entry.page)) {\n hasApiRoutes = true\n continue\n }\n\n allExportPaths.push({ ...entry, path: normalizedPath })\n\n if (prerenderManifest && !options.buildExport) {\n const prerenderInfo = prerenderManifest.dynamicRoutes[entry.page]\n\n if (prerenderInfo && prerenderInfo.fallback !== false) {\n fallbackEnabledPages.add(entry.page)\n }\n }\n }\n\n if (allExportPaths.length === 0) {\n if (!prerenderManifest) {\n return null\n }\n }\n\n if (fallbackEnabledPages.size > 0) {\n throw new ExportError(\n `Found pages with \\`fallback\\` enabled:\\n${[...fallbackEnabledPages].join(\n '\\n'\n )}\\n${SSG_FALLBACK_EXPORT_ERROR}\\n`\n )\n }\n\n let hasMiddleware = false\n\n if (!options.buildExport) {\n try {\n const middlewareManifest = require(\n join(distDir, SERVER_DIRECTORY, MIDDLEWARE_MANIFEST)\n ) as MiddlewareManifest\n\n const functionsConfigManifest = require(\n join(distDir, SERVER_DIRECTORY, FUNCTIONS_CONFIG_MANIFEST)\n )\n\n hasMiddleware =\n Object.keys(middlewareManifest.middleware).length > 0 ||\n Boolean(functionsConfigManifest.functions?.['/_middleware'])\n } catch {}\n\n // Warn if the user defines a path for an API page\n if (hasApiRoutes || hasMiddleware) {\n if (nextConfig.output === 'export') {\n Log.warn(\n yellow(\n `Statically exporting a Next.js application via \\`next export\\` disables API routes and middleware.`\n ) +\n `\\n` +\n yellow(\n `This command is meant for static-only hosts, and is` +\n ' ' +\n bold(`not necessary to make your application static.`)\n ) +\n `\\n` +\n yellow(\n `Pages in your application without server-side data dependencies will be automatically statically exported by \\`next build\\`, including pages powered by \\`getStaticProps\\`.`\n ) +\n `\\n` +\n yellow(\n `Learn more: https://nextjs.org/docs/messages/api-routes-static-export`\n )\n )\n }\n }\n }\n\n const pagesDataDir = options.buildExport\n ? join(distDir, 'server', 'pages')\n : join(outDir, '_next/data', buildId)\n\n const publicDir = join(dir, CLIENT_PUBLIC_FILES_PATH)\n // Copy public directory\n if (!options.buildExport && existsSync(publicDir)) {\n if (!options.silent) {\n Log.info('Copying \"public\" directory')\n }\n await span.traceChild('copy-public-directory').traceAsyncFn(() =>\n recursiveCopy(publicDir, outDir, {\n filter(path) {\n // Exclude paths used by pages\n return !exportPathMap[path]\n },\n })\n )\n }\n\n const exportPagesInBatches = async (\n worker: StaticWorker,\n exportPaths: ExportPathEntry[],\n renderResumeDataCachesByPage?: Record<string, string>\n ): Promise<ExportPagesResult> => {\n // Batch filtered pages into smaller batches, and call the export worker on\n // each batch. We've set a default minimum of 25 pages per batch to ensure\n // that even setups with only a few static pages can leverage a shared\n // incremental cache, however this value can be configured.\n const minPageCountPerBatch =\n nextConfig.experimental.staticGenerationMinPagesPerWorker ?? 25\n\n // Calculate the number of workers needed to ensure each batch has at least\n // minPageCountPerBatch pages.\n const numWorkers = Math.min(\n options.numWorkers,\n Math.ceil(exportPaths.length / minPageCountPerBatch)\n )\n\n // Calculate the page count per batch based on the number of workers.\n const pageCountPerBatch = Math.ceil(exportPaths.length / numWorkers)\n\n const batches = Array.from({ length: numWorkers }, (_, i) =>\n exportPaths.slice(i * pageCountPerBatch, (i + 1) * pageCountPerBatch)\n )\n\n // Distribute remaining pages.\n const remainingPages = exportPaths.slice(numWorkers * pageCountPerBatch)\n remainingPages.forEach((page, index) => {\n batches[index % batches.length].push(page)\n })\n\n return (\n await Promise.all(\n batches.map(async (batch) =>\n worker.exportPages({\n buildId,\n deploymentId: nextConfig.deploymentId,\n clientAssetToken: nextConfig.experimental.supportsImmutableAssets\n ? ''\n : nextConfig.deploymentId,\n exportPaths: batch,\n parentSpanId: span.getId(),\n pagesDataDir,\n renderOpts,\n options,\n dir,\n distDir,\n outDir: options.buildExport\n ? join(distDir, 'server', 'pages')\n : outDir,\n nextConfig,\n cacheHandler: nextConfig.cacheHandler,\n cacheMaxMemorySize: nextConfig.cacheMaxMemorySize,\n fetchCache: true,\n fetchCacheKeyPrefix: nextConfig.experimental.fetchCacheKeyPrefix,\n renderResumeDataCachesByPage,\n })\n )\n )\n ).flat()\n }\n\n let initialPhaseExportPaths: ExportPathEntry[] = []\n const finalPhaseExportPaths: ExportPathEntry[] = []\n\n if (renderOpts.cacheComponents) {\n // Only run instant validation once per route, even if multiple param sets from generateStaticParams exist.\n const routesWithInstantValidation = new Set<string>()\n\n for (const exportPath of allExportPaths) {\n if (exportPath._allowEmptyStaticShell) {\n finalPhaseExportPaths.push(exportPath)\n } else {\n initialPhaseExportPaths.push(exportPath)\n }\n\n // Always mark routes for potential build validation. The actual\n // decision of whether to validate is made per-route by\n // anySegmentNeedsInstantValidationInBuild, which checks both the\n // default validation level and per-segment level overrides.\n const route = exportPath.page\n if (!routesWithInstantValidation.has(route)) {\n exportPath._runInstantValidation = true\n routesWithInstantValidation.add(route)\n }\n }\n } else {\n initialPhaseExportPaths = allExportPaths\n }\n\n const totalExportPaths =\n initialPhaseExportPaths.length + finalPhaseExportPaths.length\n let worker: StaticWorker | null = null\n let results: ExportPagesResult = []\n\n if (totalExportPaths > 0) {\n const progress = createProgress(\n totalExportPaths,\n options.statusMessage ??\n `Exporting using ${options.numWorkers} worker${options.numWorkers > 1 ? 's' : ''}`\n )\n\n if (staticWorker) {\n // TODO: progress shouldn't rely on \"activity\" event sent from `exportPage`.\n staticWorker.setOnActivity(progress.run)\n staticWorker.setOnActivityAbort(progress.clear)\n worker = staticWorker\n } else {\n worker = createStaticWorker(nextConfig, {\n debuggerPortOffset: getNextBuildDebuggerPortOffset({\n kind: 'export-page',\n }),\n numberOfWorkers: options.numWorkers,\n progress,\n })\n }\n\n results = await exportPagesInBatches(worker, initialPhaseExportPaths)\n\n if (finalPhaseExportPaths.length > 0) {\n const renderResumeDataCachesByPage = buildRDCCacheByPage(\n results,\n finalPhaseExportPaths\n )\n\n const finalPhaseResults = await exportPagesInBatches(\n worker,\n finalPhaseExportPaths,\n renderResumeDataCachesByPage\n )\n\n results.push(...finalPhaseResults)\n }\n }\n\n const collector: ExportAppResult = {\n byPath: new Map(),\n byPage: new Map(),\n ssgNotFoundPaths: new Set(),\n turborepoAccessTraceResults: new Map(),\n }\n\n const failedExportAttemptsByPage: Map<string, boolean> = new Map()\n\n for (const { result, path, page, pageKey } of results) {\n if (!result) continue\n if ('error' in result) {\n failedExportAttemptsByPage.set(pageKey, true)\n continue\n }\n\n if (result.turborepoAccessTraceResult) {\n collector.turborepoAccessTraceResults?.set(\n path,\n TurborepoAccessTraceResult.fromSerialized(\n result.turborepoAccessTraceResult\n )\n )\n }\n\n if (options.buildExport) {\n // Update path info by path.\n const info = collector.byPath.get(path) ?? {}\n if (result.cacheControl) {\n info.cacheControl = result.cacheControl\n }\n if (typeof result.metadata !== 'undefined') {\n info.metadata = result.metadata\n }\n\n if (typeof result.hasEmptyStaticShell !== 'undefined') {\n info.hasEmptyStaticShell = result.hasEmptyStaticShell\n }\n\n if (typeof result.hasPostponed !== 'undefined') {\n info.hasPostponed = result.hasPostponed\n }\n\n if (typeof result.hasStaticRsc !== 'undefined') {\n info.hasStaticRsc = result.hasStaticRsc\n }\n\n if (typeof result.fetchMetrics !== 'undefined') {\n info.fetchMetrics = result.fetchMetrics\n }\n\n collector.byPath.set(path, info)\n\n // Update not found.\n if (result.ssgNotFound === true) {\n collector.ssgNotFoundPaths.add(path)\n }\n\n // Update durations.\n const durations = collector.byPage.get(page) ?? {\n durationsByPath: new Map<string, number>(),\n }\n durations.durationsByPath.set(path, result.duration)\n collector.byPage.set(page, durations)\n }\n }\n\n // Export mode provide static outputs that are not compatible with PPR mode.\n if (!options.buildExport && nextConfig.experimental.ppr) {\n // TODO: add message\n throw new Error('Invariant: PPR cannot be enabled in export mode')\n }\n\n // copy prerendered routes to outDir\n if (!options.buildExport && prerenderManifest) {\n await Promise.all(\n Object.keys(prerenderManifest.routes).map(async (unnormalizedRoute) => {\n // Special handling: map app /_not-found to 404.html (and 404/index.html when trailingSlash)\n if (unnormalizedRoute === '/_not-found') {\n const { srcRoute } = prerenderManifest!.routes[unnormalizedRoute]\n const appPageName = mapAppRouteToPage.get(srcRoute || '')\n const pageName = appPageName || srcRoute || unnormalizedRoute\n const isAppPath = Boolean(appPageName)\n const route = normalizePagePath(unnormalizedRoute)\n\n const pagePath = getPagePath(pageName, distDir, undefined, isAppPath)\n const distPagesDir = join(\n pagePath,\n pageName\n .slice(1)\n .split('/')\n .map(() => '..')\n .join('/')\n )\n\n const orig = join(distPagesDir, route)\n const htmlSrc = `${orig}.html`\n\n // write 404.html at root\n const htmlDest404 = join(outDir, '404.html')\n await fs.mkdir(dirname(htmlDest404), { recursive: true })\n await fs.copyFile(htmlSrc, htmlDest404)\n\n // When trailingSlash, also write 404/index.html\n if (subFolders) {\n const htmlDest404Index = join(outDir, '404', 'index.html')\n await fs.mkdir(dirname(htmlDest404Index), { recursive: true })\n await fs.copyFile(htmlSrc, htmlDest404Index)\n }\n }\n // Skip 500.html in static export\n if (unnormalizedRoute === '/_global-error') {\n return\n }\n const { srcRoute } = prerenderManifest!.routes[unnormalizedRoute]\n const appPageName = mapAppRouteToPage.get(srcRoute || '')\n const pageName = appPageName || srcRoute || unnormalizedRoute\n const isAppPath = Boolean(appPageName)\n const isAppRouteHandler = appPageName && isAppRouteRoute(appPageName)\n\n // returning notFound: true from getStaticProps will not\n // output html/json files during the build\n if (prerenderManifest!.notFoundRoutes.includes(unnormalizedRoute)) {\n return\n }\n // TODO: This rewrites /index/foo to /index/index/foo. Investigate and\n // fix. I presume this was because normalizePagePath was designed for\n // some other use case and then reused here for static exports without\n // realizing the implications.\n const route = normalizePagePath(unnormalizedRoute)\n\n let orig: string\n if (isAppPath) {\n const pagePath = getPagePath(pageName, distDir, undefined, isAppPath)\n const distPagesDir = join(\n pagePath,\n // strip leading / and then recurse number of nested dirs\n // to place from base folder\n pageName\n .slice(1)\n .split('/')\n .map(() => '..')\n .join('/')\n )\n orig = join(distPagesDir, route)\n } else {\n // Pages router files are written directly to server/pages/\n // by the export worker during build, so read from there.\n orig = join(distDir, 'server', 'pages', route)\n }\n const handlerSrc = `${orig}.body`\n const handlerDest = join(outDir, route)\n\n if (isAppRouteHandler && existsSync(handlerSrc)) {\n await fs.mkdir(dirname(handlerDest), { recursive: true })\n await fs.copyFile(handlerSrc, handlerDest)\n return\n }\n\n const htmlDest = join(\n outDir,\n `${route}${\n subFolders && route !== '/index' ? `${sep}index` : ''\n }.html`\n )\n const jsonDest = isAppPath\n ? join(\n outDir,\n `${route}${\n subFolders && route !== '/index' ? `${sep}index` : ''\n }.txt`\n )\n : join(pagesDataDir, `${route}.json`)\n\n await fs.mkdir(dirname(htmlDest), { recursive: true })\n await fs.mkdir(dirname(jsonDest), { recursive: true })\n\n const htmlSrc = `${orig}.html`\n const jsonSrc = `${orig}${isAppPath ? RSC_SUFFIX : '.json'}`\n\n await fs.copyFile(htmlSrc, htmlDest)\n await fs.copyFile(jsonSrc, jsonDest)\n\n const segmentsDir = `${orig}${RSC_SEGMENTS_DIR_SUFFIX}`\n\n if (isAppPath && existsSync(segmentsDir)) {\n // Output a data file for each of this page's segments\n //\n // These files are requested by the client router's internal\n // prefetcher, not the user directly. So we don't need to account for\n // things like trailing slash handling.\n //\n // To keep the protocol simple, we can use the non-normalized route\n // path instead of the normalized one (which, among other things,\n // rewrites `/` to `/index`).\n const segmentsDirDest = join(outDir, unnormalizedRoute)\n const segmentPaths = await collectSegmentPaths(segmentsDir)\n await Promise.all(\n segmentPaths.map(async (segmentFileSrc) => {\n const segmentPath =\n '/' + segmentFileSrc.slice(0, -RSC_SEGMENT_SUFFIX.length)\n const segmentFilename =\n convertSegmentPathToStaticExportFilename(segmentPath)\n const segmentFileDest = join(segmentsDirDest, segmentFilename)\n await fs.mkdir(dirname(segmentFileDest), { recursive: true })\n await fs.copyFile(\n join(segmentsDir, segmentFileSrc),\n segmentFileDest\n )\n })\n )\n }\n })\n )\n }\n\n if (failedExportAttemptsByPage.size > 0) {\n const failedPages = Array.from(failedExportAttemptsByPage.keys())\n throw new ExportError(\n `Export encountered errors on ${failedPages.length} ${failedPages.length === 1 ? 'path' : 'paths'}:\\n\\t${failedPages\n .sort()\n .join('\\n\\t')}`\n )\n }\n\n await fs.writeFile(\n join(distDir, EXPORT_DETAIL),\n formatManifest({\n version: 1,\n outDirectory: outDir,\n success: true,\n }),\n 'utf8'\n )\n\n if (telemetry) {\n await telemetry.flush()\n }\n\n // Clean up activity listeners for progress.\n if (staticWorker) {\n staticWorker.setOnActivity(undefined)\n staticWorker.setOnActivityAbort(undefined)\n }\n\n if (!staticWorker && worker) {\n await worker.end()\n }\n\n return collector\n}\n\nasync function collectSegmentPaths(segmentsDirectory: string) {\n const results: Array<string> = []\n await collectSegmentPathsImpl(segmentsDirectory, segmentsDirectory, results)\n return results\n}\n\nasync function collectSegmentPathsImpl(\n segmentsDirectory: string,\n directory: string,\n results: Array<string>\n) {\n const segmentFiles = await fs.readdir(directory, {\n withFileTypes: true,\n })\n await Promise.all(\n segmentFiles.map(async (segmentFile) => {\n if (segmentFile.isDirectory()) {\n await collectSegmentPathsImpl(\n segmentsDirectory,\n join(directory, segmentFile.name),\n results\n )\n return\n }\n if (!segmentFile.name.endsWith(RSC_SEGMENT_SUFFIX)) {\n return\n }\n results.push(\n relative(segmentsDirectory, join(directory, segmentFile.name))\n )\n })\n )\n}\n\nexport default async function exportApp(\n dir: string,\n options: ExportAppOptions,\n span: Span,\n staticWorker?: StaticWorker\n): Promise<ExportAppResult | null> {\n const nextExportSpan = span.traceChild('next-export')\n\n return nextExportSpan.traceAsyncFn(async () => {\n return await exportAppImpl(dir, options, nextExportSpan, staticWorker)\n })\n}\n"],"names":["createStaticWorker","bold","yellow","findUp","existsSync","promises","fs","dirname","join","resolve","sep","relative","Log","RSC_SEGMENT_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","RSC_SUFFIX","SSG_FALLBACK_EXPORT_ERROR","recursiveCopy","BUILD_ID_FILE","CLIENT_PUBLIC_FILES_PATH","CLIENT_STATIC_FILES_PATH","EXPORT_DETAIL","EXPORT_MARKER","NEXT_FONT_MANIFEST","MIDDLEWARE_MANIFEST","PAGES_MANIFEST","PHASE_EXPORT","PRERENDER_MANIFEST","SERVER_DIRECTORY","SERVER_REFERENCE_MANIFEST","APP_PATH_ROUTES_MANIFEST","ROUTES_MANIFEST","FUNCTIONS_CONFIG_MANIFEST","loadConfig","parseMaxPostponedStateSize","eventCliSession","hasNextSupport","Telemetry","normalizePagePath","denormalizePagePath","loadEnvConfig","isAPIRoute","getPagePath","isAppRouteRoute","isAppPageRoute","isError","formatManifest","TurborepoAccessTraceResult","createProgress","isInterceptionRouteRewrite","extractInfoFromServerReferenceId","convertSegmentPathToStaticExportFilename","getNextBuildDebuggerPortOffset","getParams","isDynamicRoute","normalizeAppPath","Bundler","ExportError","Error","code","buildRDCCacheByPage","results","finalPhaseExportPaths","renderResumeDataCachesByPage","seedCandidatesByPage","Map","page","path","result","renderResumeDataCache","candidates","get","push","set","undefined","getKnownParamsKey","normalizedPage","fallbackParamNames","params","entries","Object","filter","key","has","sort","a","b","JSON","stringify","exportPath","_fallbackRouteParams","pageKey","Set","map","param","paramName","targetKey","length","selected","candidate","candidateKey","exportAppImpl","dir","options","span","staticWorker","traceChild","traceFn","enabledDirectories","nextConfig","traceAsyncFn","debugPrerender","distDir","telemetry","buildExport","record","webpackVersion","cliCommand","isSrcDir","hasNowJson","cwd","isCustomServer","turboFlag","bundler","Turbopack","pagesDir","appDir","subFolders","trailingSlash","silent","info","buildIdFile","customRoutes","config","warn","buildId","readFile","pagesManifest","pages","require","prerenderManifest","appRoutePathManifest","err","excludedPrerenderRoutes","keys","defaultPathMap","hasApiRoutes","dynamicRoutes","add","mapAppRouteToPage","pageName","routePath","routes","_isAppDir","outDir","outdir","rm","recursive","force","mkdir","writeFile","version","outDirectory","success","exportPathMap","defaultMap","i18n","images","loader","unoptimized","isNextImageImported","then","text","parse","catch","serverActionsManifest","app","output","routesManifest","rewrites","beforeFiles","hasInterceptionRouteRewrite","some","actionIds","node","edge","actionId","type","renderOpts","previewProps","preview","isBuildTimePrerendering","assetPrefix","replace","basePath","cacheComponents","partialPrefetching","validationLevel","experimental","instantInsights","locales","locale","defaultLocale","domainLocales","domains","disableOptimizedLoading","supportsDynamicResponse","crossOrigin","optimizeCss","nextConfigOutput","nextScriptWorkers","largePageDataBytes","serverActions","serverComponents","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","nextFontManifest","htmlLimitedBots","source","clientTraceMetadata","expireTime","staleTimes","clientParamParsingOrigins","dynamicOnHover","optimisticRouting","inlineCss","prefetchInlining","authInterrupts","useCacheTimeout","cachedNavigations","appShells","maxPostponedStateSizeBytes","maxPostponedStateSize","exposeTestingApi","exposeTestingApiInProductionBuild","reactMaxHeadersLength","globalThis","__NEXT_DATA__","nextExport","exportMap","dev","appDirOnly","allExportPaths","seenExportPaths","fallbackEnabledPages","entry","normalizedPath","prerenderInfo","fallback","size","hasMiddleware","functionsConfigManifest","middlewareManifest","middleware","Boolean","functions","pagesDataDir","publicDir","exportPagesInBatches","worker","exportPaths","minPageCountPerBatch","staticGenerationMinPagesPerWorker","numWorkers","Math","min","ceil","pageCountPerBatch","batches","Array","from","_","i","slice","remainingPages","forEach","index","Promise","all","batch","exportPages","deploymentId","clientAssetToken","supportsImmutableAssets","parentSpanId","getId","cacheHandler","cacheMaxMemorySize","fetchCache","fetchCacheKeyPrefix","flat","initialPhaseExportPaths","routesWithInstantValidation","_allowEmptyStaticShell","route","_runInstantValidation","totalExportPaths","progress","statusMessage","setOnActivity","run","setOnActivityAbort","clear","debuggerPortOffset","kind","numberOfWorkers","finalPhaseResults","collector","byPath","byPage","ssgNotFoundPaths","turborepoAccessTraceResults","failedExportAttemptsByPage","turborepoAccessTraceResult","fromSerialized","cacheControl","metadata","hasEmptyStaticShell","hasPostponed","hasStaticRsc","fetchMetrics","ssgNotFound","durations","durationsByPath","duration","ppr","unnormalizedRoute","srcRoute","appPageName","isAppPath","pagePath","distPagesDir","split","orig","htmlSrc","htmlDest404","copyFile","htmlDest404Index","isAppRouteHandler","notFoundRoutes","includes","handlerSrc","handlerDest","htmlDest","jsonDest","jsonSrc","segmentsDir","segmentsDirDest","segmentPaths","collectSegmentPaths","segmentFileSrc","segmentPath","segmentFilename","segmentFileDest","failedPages","flush","end","segmentsDirectory","collectSegmentPathsImpl","directory","segmentFiles","readdir","withFileTypes","segmentFile","isDirectory","name","endsWith","exportApp","nextExportSpan"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["import type {\n ExportAppResult,\n ExportAppOptions,\n WorkerRenderOptsPartial,\n ExportPagesResult,\n ExportPathEntry,\n} from './types'\nimport {\n createStaticWorker,\n type PrerenderManifest,\n type StaticWorker,\n} from '../build'\nimport type { PagesManifest } from '../build/webpack/plugins/pages-manifest-plugin'\n\nimport { bold, yellow } from '../lib/picocolors'\nimport findUp from 'next/dist/compiled/find-up'\nimport { existsSync, promises as fs } from 'fs'\n\nimport '../server/require-hook'\n\nimport { dirname, join, resolve, sep, relative } from 'path'\nimport * as Log from '../build/output/log'\nimport {\n RSC_SEGMENT_SUFFIX,\n RSC_SEGMENTS_DIR_SUFFIX,\n RSC_SUFFIX,\n SSG_FALLBACK_EXPORT_ERROR,\n} from '../lib/constants'\nimport { recursiveCopy } from '../lib/recursive-copy'\nimport {\n BUILD_ID_FILE,\n CLIENT_PUBLIC_FILES_PATH,\n CLIENT_STATIC_FILES_PATH,\n EXPORT_DETAIL,\n EXPORT_MARKER,\n NEXT_FONT_MANIFEST,\n MIDDLEWARE_MANIFEST,\n PAGES_MANIFEST,\n PHASE_EXPORT,\n PRERENDER_MANIFEST,\n SERVER_DIRECTORY,\n SERVER_REFERENCE_MANIFEST,\n APP_PATH_ROUTES_MANIFEST,\n ROUTES_MANIFEST,\n FUNCTIONS_CONFIG_MANIFEST,\n} from '../shared/lib/constants'\nimport loadConfig from '../server/config'\nimport type { ExportPathMap } from '../server/config-shared'\nimport { parseMaxPostponedStateSize } from '../server/config-shared'\nimport { eventCliSession } from '../telemetry/events'\nimport { hasNextSupport } from '../server/ci-info'\nimport { Telemetry } from '../telemetry/storage'\nimport { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'\nimport { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path'\nimport { loadEnvConfig } from '@next/env'\nimport { isAPIRoute } from '../lib/is-api-route'\nimport { getPagePath } from '../server/require'\nimport type { Span } from '../trace'\nimport type { MiddlewareManifest } from '../build/webpack/plugins/middleware-plugin'\nimport { isAppRouteRoute } from '../lib/is-app-route-route'\nimport { isAppPageRoute } from '../lib/is-app-page-route'\nimport isError from '../lib/is-error'\nimport { formatManifest } from '../build/manifests/formatter/format-manifest'\nimport { TurborepoAccessTraceResult } from '../build/turborepo-access-trace'\nimport { createProgress } from '../build/progress'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { isInterceptionRouteRewrite } from '../lib/is-interception-route-rewrite'\nimport type { ActionManifest } from '../build/webpack/plugins/flight-client-entry-plugin'\nimport { extractInfoFromServerReferenceId } from '../shared/lib/server-reference-info'\nimport { convertSegmentPathToStaticExportFilename } from '../shared/lib/segment-cache/segment-value-encoding'\nimport { getNextBuildDebuggerPortOffset } from '../lib/worker'\nimport { getParams } from './helpers/get-params'\nimport { isDynamicRoute } from '../shared/lib/router/utils/is-dynamic'\nimport { normalizeAppPath } from '../shared/lib/router/utils/app-paths'\nimport type { Params } from '../server/request/params'\nimport { Bundler } from '../lib/bundler'\n\nexport class ExportError extends Error {\n code = 'NEXT_EXPORT_ERROR'\n}\n\n/**\n * Picks an RDC seed by matching on the params that are\n * already known, so fallback shells use a seed that has already\n * computed those known params.\n */\nfunction buildRDCCacheByPage(\n results: ExportPagesResult,\n finalPhaseExportPaths: ExportPathEntry[]\n): Record<string, string> {\n const renderResumeDataCachesByPage: Record<string, string> = {}\n const seedCandidatesByPage = new Map<\n string,\n Array<{ path: string; renderResumeDataCache: string }>\n >()\n\n for (const { page, path, result } of results) {\n if (!result) {\n continue\n }\n\n if ('renderResumeDataCache' in result && result.renderResumeDataCache) {\n // Collect all RDC seeds for this page so we can pick the best match\n // for each fallback shell later (e.g. locale-specific variants).\n const candidates = seedCandidatesByPage.get(page) ?? []\n candidates.push({\n path,\n renderResumeDataCache: result.renderResumeDataCache,\n })\n seedCandidatesByPage.set(page, candidates)\n // Remove the RDC string from the result so that it can be garbage\n // collected, when there are more results for the same page.\n result.renderResumeDataCache = undefined\n }\n }\n\n const getKnownParamsKey = (\n normalizedPage: string,\n path: string,\n fallbackParamNames: Set<string>\n ): string | null => {\n let params: Params\n try {\n params = getParams(normalizedPage, path)\n } catch {\n return null\n }\n\n // Only keep params that are known, then sort\n // for a stable key so we can match a compatible seed.\n const entries = Object.entries(params).filter(\n ([key]) => !fallbackParamNames.has(key)\n )\n\n entries.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n return JSON.stringify(entries)\n }\n\n for (const exportPath of finalPhaseExportPaths) {\n const { page, path, _fallbackRouteParams = [] } = exportPath\n if (!isDynamicRoute(page)) {\n continue\n }\n\n // Normalize app pages before param matching.\n const normalizedPage = normalizeAppPath(page)\n const pageKey = page !== path ? `${page}: ${path}` : path\n const fallbackParamNames = new Set(\n _fallbackRouteParams.map((param) => param.paramName)\n )\n // Build a key from the known params for this fallback shell so we can\n // select a seed from a compatible prerendered route.\n const targetKey = getKnownParamsKey(\n normalizedPage,\n path,\n fallbackParamNames\n )\n\n if (!targetKey) {\n continue\n }\n\n const candidates = seedCandidatesByPage.get(page)\n\n // No suitable candidates, so there's no RDC seed to select\n if (!candidates || candidates.length === 0) {\n continue\n }\n\n let selected: string | null = null\n for (const candidate of candidates) {\n // Pick the seed whose known params match this fallback shell.\n const candidateKey = getKnownParamsKey(\n normalizedPage,\n candidate.path,\n fallbackParamNames\n )\n if (candidateKey === targetKey) {\n selected = candidate.renderResumeDataCache\n break\n }\n }\n\n if (selected) {\n renderResumeDataCachesByPage[pageKey] = selected\n }\n }\n\n return renderResumeDataCachesByPage\n}\n\nasync function exportAppImpl(\n dir: string,\n options: Readonly<ExportAppOptions>,\n span: Span,\n staticWorker?: StaticWorker\n): Promise<ExportAppResult | null> {\n dir = resolve(dir)\n\n // attempt to load global env values so they are available in next.config.js\n span.traceChild('load-dotenv').traceFn(() => loadEnvConfig(dir, false, Log))\n\n const { enabledDirectories } = options\n\n const nextConfig =\n options.nextConfig ||\n (await span.traceChild('load-next-config').traceAsyncFn(() =>\n loadConfig(PHASE_EXPORT, dir, {\n debugPrerender: options.debugPrerender,\n })\n ))\n\n const distDir = join(dir, nextConfig.distDir)\n const telemetry = options.buildExport ? null : new Telemetry({ distDir })\n\n if (telemetry) {\n telemetry.record(\n eventCliSession(nextConfig, {\n webpackVersion: null,\n cliCommand: 'export',\n isSrcDir: null,\n hasNowJson: !!(await findUp('now.json', { cwd: dir })),\n isCustomServer: null,\n turboFlag: options.bundler === Bundler.Turbopack,\n pagesDir: null,\n appDir: null,\n })\n )\n }\n\n const subFolders = nextConfig.trailingSlash && !options.buildExport\n\n if (!options.silent && !options.buildExport) {\n Log.info(`using build directory: ${distDir}`)\n }\n\n const buildIdFile = join(distDir, BUILD_ID_FILE)\n\n if (!existsSync(buildIdFile)) {\n throw new ExportError(\n `Could not find a production build in the '${distDir}' directory. Try building your app with 'next build' before starting the static export. https://nextjs.org/docs/messages/next-export-no-build-id`\n )\n }\n\n const customRoutes = (['rewrites', 'redirects', 'headers'] as const).filter(\n (config) => typeof nextConfig[config] === 'function'\n )\n\n if (!hasNextSupport && !options.buildExport && customRoutes.length > 0) {\n Log.warn(\n `rewrites, redirects, and headers are not applied when exporting your application, detected (${customRoutes.join(\n ', '\n )}). See more info here: https://nextjs.org/docs/messages/export-no-custom-routes`\n )\n }\n\n const buildId = await fs.readFile(buildIdFile, 'utf8')\n\n const pagesManifest =\n !options.pages &&\n (require(join(distDir, SERVER_DIRECTORY, PAGES_MANIFEST)) as PagesManifest)\n\n let prerenderManifest: DeepReadonly<PrerenderManifest> | undefined\n try {\n prerenderManifest = require(join(distDir, PRERENDER_MANIFEST))\n } catch {}\n\n let appRoutePathManifest: Record<string, string> | undefined\n try {\n appRoutePathManifest = require(join(distDir, APP_PATH_ROUTES_MANIFEST))\n } catch (err) {\n if (\n isError(err) &&\n (err.code === 'ENOENT' || err.code === 'MODULE_NOT_FOUND')\n ) {\n // the manifest doesn't exist which will happen when using\n // \"pages\" dir instead of \"app\" dir.\n appRoutePathManifest = undefined\n } else {\n // the manifest is malformed (invalid json)\n throw err\n }\n }\n\n const excludedPrerenderRoutes = new Set<string>()\n const pages = options.pages || Object.keys(pagesManifest)\n const defaultPathMap: ExportPathMap = {}\n\n let hasApiRoutes = false\n for (const page of pages) {\n // _document and _app are not real pages\n // _error is exported as 404.html later on\n // API Routes are Node.js functions\n\n if (isAPIRoute(page)) {\n hasApiRoutes = true\n continue\n }\n\n if (page === '/_document' || page === '/_app' || page === '/_error') {\n continue\n }\n\n // iSSG pages that are dynamic should not export templated version by\n // default. In most cases, this would never work. There is no server that\n // could run `getStaticProps`. If users make their page work lazily, they\n // can manually add it to the `exportPathMap`.\n if (prerenderManifest?.dynamicRoutes[page]) {\n excludedPrerenderRoutes.add(page)\n continue\n }\n\n defaultPathMap[page] = { page }\n }\n\n const mapAppRouteToPage = new Map<string, string>()\n if (!options.buildExport && appRoutePathManifest) {\n for (const [pageName, routePath] of Object.entries(appRoutePathManifest)) {\n mapAppRouteToPage.set(routePath, pageName)\n if (\n isAppPageRoute(pageName) &&\n !prerenderManifest?.routes[routePath] &&\n !prerenderManifest?.dynamicRoutes[routePath]\n ) {\n defaultPathMap[routePath] = {\n page: pageName,\n _isAppDir: true,\n }\n }\n }\n }\n\n // Initialize the output directory\n const outDir = options.outdir\n\n if (outDir === join(dir, 'public')) {\n throw new ExportError(\n `The 'public' directory is reserved in Next.js and can not be used as the export out directory. https://nextjs.org/docs/messages/can-not-output-to-public`\n )\n }\n\n if (outDir === join(dir, 'static')) {\n throw new ExportError(\n `The 'static' directory is reserved in Next.js and can not be used as the export out directory. https://nextjs.org/docs/messages/can-not-output-to-static`\n )\n }\n\n if (!options.buildExport) {\n await fs.rm(outDir, { recursive: true, force: true })\n await fs.mkdir(join(outDir, '_next', buildId), { recursive: true })\n }\n\n await fs.writeFile(\n join(distDir, EXPORT_DETAIL),\n formatManifest({\n version: 1,\n outDirectory: outDir,\n success: false,\n }),\n 'utf8'\n )\n\n // Copy static directory\n if (!options.buildExport && existsSync(join(dir, 'static'))) {\n if (!options.silent) {\n Log.info('Copying \"static\" directory')\n }\n await span\n .traceChild('copy-static-directory')\n .traceAsyncFn(() =>\n recursiveCopy(join(dir, 'static'), join(outDir, 'static'))\n )\n }\n\n // Copy .next/static directory\n if (\n !options.buildExport &&\n existsSync(join(distDir, CLIENT_STATIC_FILES_PATH))\n ) {\n if (!options.silent) {\n Log.info('Copying \"static build\" directory')\n }\n await span\n .traceChild('copy-next-static-directory')\n .traceAsyncFn(() =>\n recursiveCopy(\n join(distDir, CLIENT_STATIC_FILES_PATH),\n join(outDir, '_next', CLIENT_STATIC_FILES_PATH)\n )\n )\n }\n\n // Get the exportPathMap from the config file\n if (typeof nextConfig.exportPathMap !== 'function') {\n nextConfig.exportPathMap = async (defaultMap) => {\n return defaultMap\n }\n }\n\n const {\n i18n,\n images: { loader = 'default', unoptimized },\n } = nextConfig\n\n if (i18n && !options.buildExport) {\n throw new ExportError(\n `i18n support is not compatible with next export. See here for more info on deploying: https://nextjs.org/docs/messages/export-no-custom-routes`\n )\n }\n\n if (!options.buildExport) {\n const { isNextImageImported } = await span\n .traceChild('is-next-image-imported')\n .traceAsyncFn(() =>\n fs\n .readFile(join(distDir, EXPORT_MARKER), 'utf8')\n .then((text) => JSON.parse(text))\n .catch(() => ({}))\n )\n\n if (\n isNextImageImported &&\n loader === 'default' &&\n !unoptimized &&\n !hasNextSupport\n ) {\n throw new ExportError(\n `Image Optimization using the default loader is not compatible with export.\n Possible solutions:\n - Use \\`next start\\` to run a server, which includes the Image Optimization API.\n - Configure \\`images.unoptimized = true\\` in \\`next.config.js\\` to disable the Image Optimization API.\n Read more: https://nextjs.org/docs/messages/export-image-api`\n )\n }\n }\n\n let serverActionsManifest: ActionManifest | undefined\n if (enabledDirectories.app) {\n serverActionsManifest = require(\n join(distDir, SERVER_DIRECTORY, SERVER_REFERENCE_MANIFEST + '.json')\n ) as ActionManifest\n\n if (nextConfig.output === 'export') {\n const routesManifest = require(join(distDir, ROUTES_MANIFEST))\n\n // We already prevent rewrites earlier in the process, however Next.js will insert rewrites\n // for interception routes so we need to check for that here.\n if (routesManifest?.rewrites?.beforeFiles?.length > 0) {\n const hasInterceptionRouteRewrite =\n routesManifest.rewrites.beforeFiles.some(isInterceptionRouteRewrite)\n\n if (hasInterceptionRouteRewrite) {\n throw new ExportError(\n `Intercepting routes are not supported with static export.\\nRead more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports#unsupported-features`\n )\n }\n }\n\n const actionIds = [\n ...Object.keys(serverActionsManifest.node),\n ...Object.keys(serverActionsManifest.edge),\n ]\n\n if (\n actionIds.some(\n (actionId) =>\n extractInfoFromServerReferenceId(actionId).type === 'server-action'\n )\n ) {\n throw new ExportError(\n `Server Actions are not supported with static export.\\nRead more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports#unsupported-features`\n )\n }\n }\n }\n\n // Start the rendering process\n const renderOpts: WorkerRenderOptsPartial = {\n previewProps: prerenderManifest?.preview,\n isBuildTimePrerendering: true,\n assetPrefix: nextConfig.assetPrefix.replace(/\\/$/, ''),\n distDir,\n basePath: nextConfig.basePath,\n cacheComponents: nextConfig.cacheComponents ?? false,\n partialPrefetching: nextConfig.partialPrefetching,\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n trailingSlash: nextConfig.trailingSlash,\n locales: i18n?.locales,\n locale: i18n?.defaultLocale,\n defaultLocale: i18n?.defaultLocale,\n domainLocales: i18n?.domains,\n disableOptimizedLoading: nextConfig.experimental.disableOptimizedLoading,\n // Exported pages do not currently support dynamic HTML.\n supportsDynamicResponse: false,\n crossOrigin: nextConfig.crossOrigin,\n optimizeCss: nextConfig.experimental.optimizeCss,\n nextConfigOutput: nextConfig.output,\n nextScriptWorkers: nextConfig.experimental.nextScriptWorkers,\n largePageDataBytes: nextConfig.experimental.largePageDataBytes,\n serverActions: nextConfig.experimental.serverActions,\n serverComponents: enabledDirectories.app,\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n nextFontManifest: require(\n join(distDir, 'server', `${NEXT_FONT_MANIFEST}.json`)\n ),\n images: nextConfig.images,\n htmlLimitedBots: nextConfig.htmlLimitedBots.source,\n experimental: {\n clientTraceMetadata: nextConfig.experimental.clientTraceMetadata,\n expireTime: nextConfig.expireTime,\n staleTimes: nextConfig.experimental.staleTimes,\n clientParamParsingOrigins:\n nextConfig.experimental.clientParamParsingOrigins,\n dynamicOnHover: nextConfig.experimental.dynamicOnHover ?? false,\n optimisticRouting: nextConfig.experimental.optimisticRouting ?? false,\n inlineCss: nextConfig.experimental.inlineCss ?? false,\n prefetchInlining: nextConfig.experimental.prefetchInlining ?? false,\n authInterrupts: !!nextConfig.experimental.authInterrupts,\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n cachedNavigations: nextConfig.experimental.cachedNavigations ?? false,\n maxPostponedStateSizeBytes: parseMaxPostponedStateSize(\n nextConfig.experimental.maxPostponedStateSize\n ),\n exposeTestingApi:\n nextConfig.experimental.exposeTestingApiInProductionBuild === true,\n },\n reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,\n }\n\n // We need this for server rendering the Link component.\n ;(globalThis as any).__NEXT_DATA__ = {\n nextExport: true,\n }\n\n const exportPathMap = await span\n .traceChild('run-export-path-map')\n .traceAsyncFn(async () => {\n const exportMap = await nextConfig.exportPathMap(defaultPathMap, {\n dev: false,\n dir,\n outDir,\n distDir,\n buildId,\n })\n return exportMap\n })\n\n // During static export, remove export 404/500 of pages router\n // when only app router presents\n if (!options.buildExport && options.appDirOnly) {\n delete exportPathMap['/404']\n delete exportPathMap['/500']\n }\n\n // only add missing 404 page when `buildExport` is false\n if (!options.buildExport && !options.appDirOnly) {\n // only add missing /404 if not specified in `exportPathMap`\n if (!exportPathMap['/404']) {\n exportPathMap['/404'] = { page: '/_error' }\n }\n\n /**\n * exports 404.html for backwards compat\n * E.g. GitHub Pages, GitLab Pages, Cloudflare Pages, Netlify\n */\n if (!exportPathMap['/404.html'] && exportPathMap['/404']) {\n // alias /404.html to /404 to be compatible with custom 404 / _error page\n exportPathMap['/404.html'] = exportPathMap['/404']\n }\n }\n\n const allExportPaths: ExportPathEntry[] = []\n const seenExportPaths = new Set<string>()\n const fallbackEnabledPages = new Set<string>()\n\n for (const [path, entry] of Object.entries(exportPathMap)) {\n // make sure to prevent duplicates\n const normalizedPath = denormalizePagePath(normalizePagePath(path))\n\n if (seenExportPaths.has(normalizedPath)) {\n continue\n }\n\n seenExportPaths.add(normalizedPath)\n\n if (!entry._isAppDir && isAPIRoute(entry.page)) {\n hasApiRoutes = true\n continue\n }\n\n allExportPaths.push({ ...entry, path: normalizedPath })\n\n if (prerenderManifest && !options.buildExport) {\n const prerenderInfo = prerenderManifest.dynamicRoutes[entry.page]\n\n if (prerenderInfo && prerenderInfo.fallback !== false) {\n fallbackEnabledPages.add(entry.page)\n }\n }\n }\n\n if (allExportPaths.length === 0) {\n if (!prerenderManifest) {\n return null\n }\n }\n\n if (fallbackEnabledPages.size > 0) {\n throw new ExportError(\n `Found pages with \\`fallback\\` enabled:\\n${[...fallbackEnabledPages].join(\n '\\n'\n )}\\n${SSG_FALLBACK_EXPORT_ERROR}\\n`\n )\n }\n\n let hasMiddleware = false\n\n if (!options.buildExport) {\n try {\n const middlewareManifest = require(\n join(distDir, SERVER_DIRECTORY, MIDDLEWARE_MANIFEST)\n ) as MiddlewareManifest\n\n const functionsConfigManifest = require(\n join(distDir, SERVER_DIRECTORY, FUNCTIONS_CONFIG_MANIFEST)\n )\n\n hasMiddleware =\n Object.keys(middlewareManifest.middleware).length > 0 ||\n Boolean(functionsConfigManifest.functions?.['/_middleware'])\n } catch {}\n\n // Warn if the user defines a path for an API page\n if (hasApiRoutes || hasMiddleware) {\n if (nextConfig.output === 'export') {\n Log.warn(\n yellow(\n `Statically exporting a Next.js application via \\`next export\\` disables API routes and middleware.`\n ) +\n `\\n` +\n yellow(\n `This command is meant for static-only hosts, and is` +\n ' ' +\n bold(`not necessary to make your application static.`)\n ) +\n `\\n` +\n yellow(\n `Pages in your application without server-side data dependencies will be automatically statically exported by \\`next build\\`, including pages powered by \\`getStaticProps\\`.`\n ) +\n `\\n` +\n yellow(\n `Learn more: https://nextjs.org/docs/messages/api-routes-static-export`\n )\n )\n }\n }\n }\n\n const pagesDataDir = options.buildExport\n ? join(distDir, 'server', 'pages')\n : join(outDir, '_next/data', buildId)\n\n const publicDir = join(dir, CLIENT_PUBLIC_FILES_PATH)\n // Copy public directory\n if (!options.buildExport && existsSync(publicDir)) {\n if (!options.silent) {\n Log.info('Copying \"public\" directory')\n }\n await span.traceChild('copy-public-directory').traceAsyncFn(() =>\n recursiveCopy(publicDir, outDir, {\n filter(path) {\n // Exclude paths used by pages\n return !exportPathMap[path]\n },\n })\n )\n }\n\n const exportPagesInBatches = async (\n worker: StaticWorker,\n exportPaths: ExportPathEntry[],\n renderResumeDataCachesByPage?: Record<string, string>\n ): Promise<ExportPagesResult> => {\n // Batch filtered pages into smaller batches, and call the export worker on\n // each batch. We've set a default minimum of 25 pages per batch to ensure\n // that even setups with only a few static pages can leverage a shared\n // incremental cache, however this value can be configured.\n const minPageCountPerBatch =\n nextConfig.experimental.staticGenerationMinPagesPerWorker ?? 25\n\n // Calculate the number of workers needed to ensure each batch has at least\n // minPageCountPerBatch pages.\n const numWorkers = Math.min(\n options.numWorkers,\n Math.ceil(exportPaths.length / minPageCountPerBatch)\n )\n\n // Calculate the page count per batch based on the number of workers.\n const pageCountPerBatch = Math.ceil(exportPaths.length / numWorkers)\n\n const batches = Array.from({ length: numWorkers }, (_, i) =>\n exportPaths.slice(i * pageCountPerBatch, (i + 1) * pageCountPerBatch)\n )\n\n // Distribute remaining pages.\n const remainingPages = exportPaths.slice(numWorkers * pageCountPerBatch)\n remainingPages.forEach((page, index) => {\n batches[index % batches.length].push(page)\n })\n\n return (\n await Promise.all(\n batches.map(async (batch) =>\n worker.exportPages({\n buildId,\n deploymentId: nextConfig.deploymentId,\n clientAssetToken: nextConfig.experimental.supportsImmutableAssets\n ? ''\n : nextConfig.deploymentId,\n exportPaths: batch,\n parentSpanId: span.getId(),\n pagesDataDir,\n renderOpts,\n options,\n dir,\n distDir,\n outDir: options.buildExport\n ? join(distDir, 'server', 'pages')\n : outDir,\n nextConfig,\n cacheHandler: nextConfig.cacheHandler,\n cacheMaxMemorySize: nextConfig.cacheMaxMemorySize,\n fetchCache: true,\n fetchCacheKeyPrefix: nextConfig.experimental.fetchCacheKeyPrefix,\n renderResumeDataCachesByPage,\n })\n )\n )\n ).flat()\n }\n\n let initialPhaseExportPaths: ExportPathEntry[] = []\n const finalPhaseExportPaths: ExportPathEntry[] = []\n\n if (renderOpts.cacheComponents) {\n // Only run instant validation once per route, even if multiple param sets from generateStaticParams exist.\n const routesWithInstantValidation = new Set<string>()\n\n for (const exportPath of allExportPaths) {\n if (exportPath._allowEmptyStaticShell) {\n finalPhaseExportPaths.push(exportPath)\n } else {\n initialPhaseExportPaths.push(exportPath)\n }\n\n // Always mark routes for potential build validation. The actual\n // decision of whether to validate is made per-route by\n // anySegmentNeedsInstantValidationInBuild, which checks both the\n // default validation level and per-segment level overrides.\n const route = exportPath.page\n if (!routesWithInstantValidation.has(route)) {\n exportPath._runInstantValidation = true\n routesWithInstantValidation.add(route)\n }\n }\n } else {\n initialPhaseExportPaths = allExportPaths\n }\n\n const totalExportPaths =\n initialPhaseExportPaths.length + finalPhaseExportPaths.length\n let worker: StaticWorker | null = null\n let results: ExportPagesResult = []\n\n if (totalExportPaths > 0) {\n const progress = createProgress(\n totalExportPaths,\n options.statusMessage ??\n `Exporting using ${options.numWorkers} worker${options.numWorkers > 1 ? 's' : ''}`\n )\n\n if (staticWorker) {\n // TODO: progress shouldn't rely on \"activity\" event sent from `exportPage`.\n staticWorker.setOnActivity(progress.run)\n staticWorker.setOnActivityAbort(progress.clear)\n worker = staticWorker\n } else {\n worker = createStaticWorker(nextConfig, {\n debuggerPortOffset: getNextBuildDebuggerPortOffset({\n kind: 'export-page',\n }),\n numberOfWorkers: options.numWorkers,\n progress,\n })\n }\n\n results = await exportPagesInBatches(worker, initialPhaseExportPaths)\n\n if (finalPhaseExportPaths.length > 0) {\n const renderResumeDataCachesByPage = buildRDCCacheByPage(\n results,\n finalPhaseExportPaths\n )\n\n const finalPhaseResults = await exportPagesInBatches(\n worker,\n finalPhaseExportPaths,\n renderResumeDataCachesByPage\n )\n\n results.push(...finalPhaseResults)\n }\n }\n\n const collector: ExportAppResult = {\n byPath: new Map(),\n byPage: new Map(),\n ssgNotFoundPaths: new Set(),\n turborepoAccessTraceResults: new Map(),\n }\n\n const failedExportAttemptsByPage: Map<string, boolean> = new Map()\n\n for (const { result, path, page, pageKey } of results) {\n if (!result) continue\n if ('error' in result) {\n failedExportAttemptsByPage.set(pageKey, true)\n continue\n }\n\n if (result.turborepoAccessTraceResult) {\n collector.turborepoAccessTraceResults?.set(\n path,\n TurborepoAccessTraceResult.fromSerialized(\n result.turborepoAccessTraceResult\n )\n )\n }\n\n if (options.buildExport) {\n // Update path info by path.\n const info = collector.byPath.get(path) ?? {}\n if (result.cacheControl) {\n info.cacheControl = result.cacheControl\n }\n if (typeof result.metadata !== 'undefined') {\n info.metadata = result.metadata\n }\n\n if (typeof result.hasEmptyStaticShell !== 'undefined') {\n info.hasEmptyStaticShell = result.hasEmptyStaticShell\n }\n\n if (typeof result.hasPostponed !== 'undefined') {\n info.hasPostponed = result.hasPostponed\n }\n\n if (typeof result.hasStaticRsc !== 'undefined') {\n info.hasStaticRsc = result.hasStaticRsc\n }\n\n if (typeof result.fetchMetrics !== 'undefined') {\n info.fetchMetrics = result.fetchMetrics\n }\n\n collector.byPath.set(path, info)\n\n // Update not found.\n if (result.ssgNotFound === true) {\n collector.ssgNotFoundPaths.add(path)\n }\n\n // Update durations.\n const durations = collector.byPage.get(page) ?? {\n durationsByPath: new Map<string, number>(),\n }\n durations.durationsByPath.set(path, result.duration)\n collector.byPage.set(page, durations)\n }\n }\n\n // Export mode provide static outputs that are not compatible with PPR mode.\n if (!options.buildExport && nextConfig.experimental.ppr) {\n // TODO: add message\n throw new Error('Invariant: PPR cannot be enabled in export mode')\n }\n\n // copy prerendered routes to outDir\n if (!options.buildExport && prerenderManifest) {\n await Promise.all(\n Object.keys(prerenderManifest.routes).map(async (unnormalizedRoute) => {\n // Special handling: map app /_not-found to 404.html (and 404/index.html when trailingSlash)\n if (unnormalizedRoute === '/_not-found') {\n const { srcRoute } = prerenderManifest!.routes[unnormalizedRoute]\n const appPageName = mapAppRouteToPage.get(srcRoute || '')\n const pageName = appPageName || srcRoute || unnormalizedRoute\n const isAppPath = Boolean(appPageName)\n const route = normalizePagePath(unnormalizedRoute)\n\n const pagePath = getPagePath(pageName, distDir, undefined, isAppPath)\n const distPagesDir = join(\n pagePath,\n pageName\n .slice(1)\n .split('/')\n .map(() => '..')\n .join('/')\n )\n\n const orig = join(distPagesDir, route)\n const htmlSrc = `${orig}.html`\n\n // write 404.html at root\n const htmlDest404 = join(outDir, '404.html')\n await fs.mkdir(dirname(htmlDest404), { recursive: true })\n await fs.copyFile(htmlSrc, htmlDest404)\n\n // When trailingSlash, also write 404/index.html\n if (subFolders) {\n const htmlDest404Index = join(outDir, '404', 'index.html')\n await fs.mkdir(dirname(htmlDest404Index), { recursive: true })\n await fs.copyFile(htmlSrc, htmlDest404Index)\n }\n }\n // Skip 500.html in static export\n if (unnormalizedRoute === '/_global-error') {\n return\n }\n const { srcRoute } = prerenderManifest!.routes[unnormalizedRoute]\n const appPageName = mapAppRouteToPage.get(srcRoute || '')\n const pageName = appPageName || srcRoute || unnormalizedRoute\n const isAppPath = Boolean(appPageName)\n const isAppRouteHandler = appPageName && isAppRouteRoute(appPageName)\n\n // returning notFound: true from getStaticProps will not\n // output html/json files during the build\n if (prerenderManifest!.notFoundRoutes.includes(unnormalizedRoute)) {\n return\n }\n // TODO: This rewrites /index/foo to /index/index/foo. Investigate and\n // fix. I presume this was because normalizePagePath was designed for\n // some other use case and then reused here for static exports without\n // realizing the implications.\n const route = normalizePagePath(unnormalizedRoute)\n\n let orig: string\n if (isAppPath) {\n const pagePath = getPagePath(pageName, distDir, undefined, isAppPath)\n const distPagesDir = join(\n pagePath,\n // strip leading / and then recurse number of nested dirs\n // to place from base folder\n pageName\n .slice(1)\n .split('/')\n .map(() => '..')\n .join('/')\n )\n orig = join(distPagesDir, route)\n } else {\n // Pages router files are written directly to server/pages/\n // by the export worker during build, so read from there.\n orig = join(distDir, 'server', 'pages', route)\n }\n const handlerSrc = `${orig}.body`\n const handlerDest = join(outDir, route)\n\n if (isAppRouteHandler && existsSync(handlerSrc)) {\n await fs.mkdir(dirname(handlerDest), { recursive: true })\n await fs.copyFile(handlerSrc, handlerDest)\n return\n }\n\n const htmlDest = join(\n outDir,\n `${route}${\n subFolders && route !== '/index' ? `${sep}index` : ''\n }.html`\n )\n const jsonDest = isAppPath\n ? join(\n outDir,\n `${route}${\n subFolders && route !== '/index' ? `${sep}index` : ''\n }.txt`\n )\n : join(pagesDataDir, `${route}.json`)\n\n await fs.mkdir(dirname(htmlDest), { recursive: true })\n await fs.mkdir(dirname(jsonDest), { recursive: true })\n\n const htmlSrc = `${orig}.html`\n const jsonSrc = `${orig}${isAppPath ? RSC_SUFFIX : '.json'}`\n\n await fs.copyFile(htmlSrc, htmlDest)\n await fs.copyFile(jsonSrc, jsonDest)\n\n const segmentsDir = `${orig}${RSC_SEGMENTS_DIR_SUFFIX}`\n\n if (isAppPath && existsSync(segmentsDir)) {\n // Output a data file for each of this page's segments\n //\n // These files are requested by the client router's internal\n // prefetcher, not the user directly. So we don't need to account for\n // things like trailing slash handling.\n //\n // To keep the protocol simple, we can use the non-normalized route\n // path instead of the normalized one (which, among other things,\n // rewrites `/` to `/index`).\n const segmentsDirDest = join(outDir, unnormalizedRoute)\n const segmentPaths = await collectSegmentPaths(segmentsDir)\n await Promise.all(\n segmentPaths.map(async (segmentFileSrc) => {\n const segmentPath =\n '/' + segmentFileSrc.slice(0, -RSC_SEGMENT_SUFFIX.length)\n const segmentFilename =\n convertSegmentPathToStaticExportFilename(segmentPath)\n const segmentFileDest = join(segmentsDirDest, segmentFilename)\n await fs.mkdir(dirname(segmentFileDest), { recursive: true })\n await fs.copyFile(\n join(segmentsDir, segmentFileSrc),\n segmentFileDest\n )\n })\n )\n }\n })\n )\n }\n\n if (failedExportAttemptsByPage.size > 0) {\n const failedPages = Array.from(failedExportAttemptsByPage.keys())\n throw new ExportError(\n `Export encountered errors on ${failedPages.length} ${failedPages.length === 1 ? 'path' : 'paths'}:\\n\\t${failedPages\n .sort()\n .join('\\n\\t')}`\n )\n }\n\n await fs.writeFile(\n join(distDir, EXPORT_DETAIL),\n formatManifest({\n version: 1,\n outDirectory: outDir,\n success: true,\n }),\n 'utf8'\n )\n\n if (telemetry) {\n await telemetry.flush()\n }\n\n // Clean up activity listeners for progress.\n if (staticWorker) {\n staticWorker.setOnActivity(undefined)\n staticWorker.setOnActivityAbort(undefined)\n }\n\n if (!staticWorker && worker) {\n await worker.end()\n }\n\n return collector\n}\n\nasync function collectSegmentPaths(segmentsDirectory: string) {\n const results: Array<string> = []\n await collectSegmentPathsImpl(segmentsDirectory, segmentsDirectory, results)\n return results\n}\n\nasync function collectSegmentPathsImpl(\n segmentsDirectory: string,\n directory: string,\n results: Array<string>\n) {\n const segmentFiles = await fs.readdir(directory, {\n withFileTypes: true,\n })\n await Promise.all(\n segmentFiles.map(async (segmentFile) => {\n if (segmentFile.isDirectory()) {\n await collectSegmentPathsImpl(\n segmentsDirectory,\n join(directory, segmentFile.name),\n results\n )\n return\n }\n if (!segmentFile.name.endsWith(RSC_SEGMENT_SUFFIX)) {\n return\n }\n results.push(\n relative(segmentsDirectory, join(directory, segmentFile.name))\n )\n })\n )\n}\n\nexport default async function exportApp(\n dir: string,\n options: ExportAppOptions,\n span: Span,\n staticWorker?: StaticWorker\n): Promise<ExportAppResult | null> {\n const nextExportSpan = span.traceChild('next-export')\n\n return nextExportSpan.traceAsyncFn(async () => {\n return await exportAppImpl(dir, options, nextExportSpan, staticWorker)\n })\n}\n"],"names":["createStaticWorker","bold","yellow","findUp","existsSync","promises","fs","dirname","join","resolve","sep","relative","Log","RSC_SEGMENT_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","RSC_SUFFIX","SSG_FALLBACK_EXPORT_ERROR","recursiveCopy","BUILD_ID_FILE","CLIENT_PUBLIC_FILES_PATH","CLIENT_STATIC_FILES_PATH","EXPORT_DETAIL","EXPORT_MARKER","NEXT_FONT_MANIFEST","MIDDLEWARE_MANIFEST","PAGES_MANIFEST","PHASE_EXPORT","PRERENDER_MANIFEST","SERVER_DIRECTORY","SERVER_REFERENCE_MANIFEST","APP_PATH_ROUTES_MANIFEST","ROUTES_MANIFEST","FUNCTIONS_CONFIG_MANIFEST","loadConfig","parseMaxPostponedStateSize","eventCliSession","hasNextSupport","Telemetry","normalizePagePath","denormalizePagePath","loadEnvConfig","isAPIRoute","getPagePath","isAppRouteRoute","isAppPageRoute","isError","formatManifest","TurborepoAccessTraceResult","createProgress","isInterceptionRouteRewrite","extractInfoFromServerReferenceId","convertSegmentPathToStaticExportFilename","getNextBuildDebuggerPortOffset","getParams","isDynamicRoute","normalizeAppPath","Bundler","ExportError","Error","code","buildRDCCacheByPage","results","finalPhaseExportPaths","renderResumeDataCachesByPage","seedCandidatesByPage","Map","page","path","result","renderResumeDataCache","candidates","get","push","set","undefined","getKnownParamsKey","normalizedPage","fallbackParamNames","params","entries","Object","filter","key","has","sort","a","b","JSON","stringify","exportPath","_fallbackRouteParams","pageKey","Set","map","param","paramName","targetKey","length","selected","candidate","candidateKey","exportAppImpl","dir","options","span","staticWorker","traceChild","traceFn","enabledDirectories","nextConfig","traceAsyncFn","debugPrerender","distDir","telemetry","buildExport","record","webpackVersion","cliCommand","isSrcDir","hasNowJson","cwd","isCustomServer","turboFlag","bundler","Turbopack","pagesDir","appDir","subFolders","trailingSlash","silent","info","buildIdFile","customRoutes","config","warn","buildId","readFile","pagesManifest","pages","require","prerenderManifest","appRoutePathManifest","err","excludedPrerenderRoutes","keys","defaultPathMap","hasApiRoutes","dynamicRoutes","add","mapAppRouteToPage","pageName","routePath","routes","_isAppDir","outDir","outdir","rm","recursive","force","mkdir","writeFile","version","outDirectory","success","exportPathMap","defaultMap","i18n","images","loader","unoptimized","isNextImageImported","then","text","parse","catch","serverActionsManifest","app","output","routesManifest","rewrites","beforeFiles","hasInterceptionRouteRewrite","some","actionIds","node","edge","actionId","type","renderOpts","previewProps","preview","isBuildTimePrerendering","assetPrefix","replace","basePath","cacheComponents","partialPrefetching","validationLevel","experimental","instantInsights","locales","locale","defaultLocale","domainLocales","domains","disableOptimizedLoading","supportsDynamicResponse","crossOrigin","optimizeCss","nextConfigOutput","nextScriptWorkers","largePageDataBytes","serverActions","serverComponents","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","nextFontManifest","htmlLimitedBots","source","clientTraceMetadata","expireTime","staleTimes","clientParamParsingOrigins","dynamicOnHover","optimisticRouting","inlineCss","prefetchInlining","authInterrupts","useCacheTimeout","cachedNavigations","maxPostponedStateSizeBytes","maxPostponedStateSize","exposeTestingApi","exposeTestingApiInProductionBuild","reactMaxHeadersLength","globalThis","__NEXT_DATA__","nextExport","exportMap","dev","appDirOnly","allExportPaths","seenExportPaths","fallbackEnabledPages","entry","normalizedPath","prerenderInfo","fallback","size","hasMiddleware","functionsConfigManifest","middlewareManifest","middleware","Boolean","functions","pagesDataDir","publicDir","exportPagesInBatches","worker","exportPaths","minPageCountPerBatch","staticGenerationMinPagesPerWorker","numWorkers","Math","min","ceil","pageCountPerBatch","batches","Array","from","_","i","slice","remainingPages","forEach","index","Promise","all","batch","exportPages","deploymentId","clientAssetToken","supportsImmutableAssets","parentSpanId","getId","cacheHandler","cacheMaxMemorySize","fetchCache","fetchCacheKeyPrefix","flat","initialPhaseExportPaths","routesWithInstantValidation","_allowEmptyStaticShell","route","_runInstantValidation","totalExportPaths","progress","statusMessage","setOnActivity","run","setOnActivityAbort","clear","debuggerPortOffset","kind","numberOfWorkers","finalPhaseResults","collector","byPath","byPage","ssgNotFoundPaths","turborepoAccessTraceResults","failedExportAttemptsByPage","turborepoAccessTraceResult","fromSerialized","cacheControl","metadata","hasEmptyStaticShell","hasPostponed","hasStaticRsc","fetchMetrics","ssgNotFound","durations","durationsByPath","duration","ppr","unnormalizedRoute","srcRoute","appPageName","isAppPath","pagePath","distPagesDir","split","orig","htmlSrc","htmlDest404","copyFile","htmlDest404Index","isAppRouteHandler","notFoundRoutes","includes","handlerSrc","handlerDest","htmlDest","jsonDest","jsonSrc","segmentsDir","segmentsDirDest","segmentPaths","collectSegmentPaths","segmentFileSrc","segmentPath","segmentFilename","segmentFileDest","failedPages","flush","end","segmentsDirectory","collectSegmentPathsImpl","directory","segmentFiles","readdir","withFileTypes","segmentFile","isDirectory","name","endsWith","exportApp","nextExportSpan"],"mappings":"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","ignoreList":[0]} |
@@ -20,3 +20,3 @@ import { readFileSync, writeFileSync } from 'fs'; | ||
| const data = await res.json(); | ||
| const versionData = data.versions["16.3.0-canary.87"]; | ||
| const versionData = data.versions["16.3.0-canary.88"]; | ||
| return { | ||
@@ -54,3 +54,3 @@ os: versionData.os, | ||
| lockfileParsed.dependencies[pkg] = { | ||
| version: "16.3.0-canary.87", | ||
| version: "16.3.0-canary.88", | ||
| resolved: pkgData.tarball, | ||
@@ -63,3 +63,3 @@ integrity: pkgData.integrity, | ||
| lockfileParsed.packages[pkg] = { | ||
| version: "16.3.0-canary.87", | ||
| version: "16.3.0-canary.88", | ||
| resolved: pkgData.tarball, | ||
@@ -66,0 +66,0 @@ integrity: pkgData.integrity, |
@@ -6,3 +6,3 @@ /// <reference types="webpack/module.d.ts" /> | ||
| import { NEXT_BUILTIN_DOCUMENT } from '../shared/lib/constants'; | ||
| import { getPageFiles } from '../server/get-page-files'; | ||
| import { getPageFiles, getTurbopackChunkGroupBootstrap } from '../server/get-page-files'; | ||
| import { htmlEscapeJsonString } from '../shared/lib/htmlescape'; | ||
@@ -57,2 +57,24 @@ import isError from '../lib/is-error'; | ||
| } | ||
| // Builds one inline <script> seeding the runtime queue with the shared (`/_app`) and | ||
| // current route's bootstrap params, before the shared runtime chunk drains it. | ||
| function getInlineBootstrapScript(context, props) { | ||
| const { buildManifest, __NEXT_DATA__, crossOrigin } = context; | ||
| // Only Turbopack production builds populate these; nothing to inline otherwise. | ||
| if (!buildManifest.pagesChunkGroupBootstrapParams || !buildManifest.chunkLoadingGlobal) { | ||
| return null; | ||
| } | ||
| const bootstrap = getTurbopackChunkGroupBootstrap(buildManifest.pagesChunkGroupBootstrapParams, buildManifest.chunkLoadingGlobal, [ | ||
| '/_app', | ||
| __NEXT_DATA__.page | ||
| ]); | ||
| if (!bootstrap) return null; | ||
| const html = htmlEscapeJsonString(bootstrap); | ||
| return /*#__PURE__*/ _jsx("script", { | ||
| nonce: props.nonce, | ||
| crossOrigin: props.crossOrigin || crossOrigin, | ||
| dangerouslySetInnerHTML: { | ||
| __html: html | ||
| } | ||
| }, "turbopack-bootstrap"); | ||
| } | ||
| function getScripts(context, props, files) { | ||
@@ -63,3 +85,3 @@ var _buildManifest_lowPriorityFiles; | ||
| const lowPriorityScripts = (_buildManifest_lowPriorityFiles = buildManifest.lowPriorityFiles) == null ? void 0 : _buildManifest_lowPriorityFiles.filter((file)=>file.endsWith('.js')); | ||
| return [ | ||
| const scripts = [ | ||
| ...normalScripts, | ||
@@ -79,2 +101,8 @@ ...lowPriorityScripts | ||
| }); | ||
| // Emit the bootstrap before the chunk <script>s so the queue exists first. | ||
| const bootstrapScript = getInlineBootstrapScript(context, props); | ||
| return bootstrapScript ? [ | ||
| bootstrapScript, | ||
| ...scripts | ||
| ] : scripts; | ||
| } | ||
@@ -81,0 +109,0 @@ function getPreNextWorkerScripts(context, props) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/pages/_document.tsx"],"sourcesContent":["/// <reference types=\"webpack/module.d.ts\" />\n\nimport React, { type JSX } from 'react'\nimport { NEXT_BUILTIN_DOCUMENT } from '../shared/lib/constants'\nimport type {\n DocumentContext,\n DocumentInitialProps,\n DocumentProps,\n DocumentType,\n NEXT_DATA,\n} from '../shared/lib/utils'\nimport type { ScriptProps } from '../client/script'\nimport type { NextFontManifest } from '../build/webpack/plugins/next-font-manifest-plugin'\n\nimport { getPageFiles } from '../server/get-page-files'\nimport type { BuildManifest } from '../server/get-page-files'\nimport { htmlEscapeJsonString } from '../shared/lib/htmlescape'\nimport isError from '../lib/is-error'\n\nimport {\n HtmlContext,\n useHtmlContext,\n} from '../shared/lib/html-context.shared-runtime'\nimport type { HtmlProps } from '../shared/lib/html-context.shared-runtime'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { getTracer } from '../server/lib/trace/tracer'\nimport { getTracedMetadata } from '../server/lib/trace/utils'\n\nexport type { DocumentContext, DocumentInitialProps, DocumentProps }\n\nexport type OriginProps = {\n nonce?: string\n crossOrigin?: 'anonymous' | 'use-credentials' | '' | undefined\n children?: React.ReactNode\n}\n\ntype DocumentFiles = {\n sharedFiles: readonly string[]\n pageFiles: readonly string[]\n allFiles: readonly string[]\n}\n\ntype HeadHTMLProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLHeadElement>,\n HTMLHeadElement\n>\n\ntype HeadProps = OriginProps & HeadHTMLProps\n\n/** Set of pages that have triggered a large data warning on production mode. */\nconst largePageDataWarnings = new Set<string>()\n\nfunction getDocumentFiles(\n buildManifest: BuildManifest,\n pathname: string\n): DocumentFiles {\n const sharedFiles: readonly string[] = getPageFiles(buildManifest, '/_app')\n const pageFiles: readonly string[] = getPageFiles(buildManifest, pathname)\n\n return {\n sharedFiles,\n pageFiles,\n allFiles: [...new Set([...sharedFiles, ...pageFiles])],\n }\n}\n\nfunction getPolyfillScripts(context: HtmlProps, props: OriginProps) {\n // polyfills.js has to be rendered as nomodule without async\n // It also has to be the first script to load\n const {\n assetPrefix,\n buildManifest,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return buildManifest.polyfillFiles\n .filter(\n (polyfill) => polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')\n )\n .map((polyfill) => (\n <script\n key={polyfill}\n defer={!disableOptimizedLoading}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n noModule={true}\n src={`${assetPrefix}/_next/${encodeURIPath(\n polyfill\n )}${assetQueryString}`}\n />\n ))\n}\n\nfunction hasComponentProps(child: any): child is React.ReactElement<any> {\n return !!child && !!child.props\n}\n\nfunction getDynamicChunks(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n dynamicImports,\n assetPrefix,\n isDevelopment,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return dynamicImports.map((file) => {\n if (!file.endsWith('.js') || files.allFiles.includes(file)) return null\n\n return (\n <script\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${assetQueryString}`}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n}\n\nfunction getScripts(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n assetPrefix,\n buildManifest,\n isDevelopment,\n assetQueryString,\n mutableAssetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n const normalScripts = files.allFiles.filter((file) => file.endsWith('.js'))\n const lowPriorityScripts = buildManifest.lowPriorityFiles?.filter((file) =>\n file.endsWith('.js')\n )\n\n return [...normalScripts, ...lowPriorityScripts].map((file) => {\n // static/immutable/chunks/51e975e7b637a580.js should use the immutable id, while\n // static/Yj152X97rfGgF7NPcJEZs/_ssgManifest.js should use the deployment id\n const query = file.startsWith('static/immutable/chunks')\n ? assetQueryString\n : mutableAssetQueryString\n return (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${query}`}\n nonce={props.nonce}\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n}\n\nfunction getPreNextWorkerScripts(context: HtmlProps, props: OriginProps) {\n const { assetPrefix, scriptLoader, crossOrigin, nextScriptWorkers } = context\n\n // disable `nextScriptWorkers` in edge runtime\n if (!nextScriptWorkers || process.env.NEXT_RUNTIME === 'edge') return null\n\n try {\n // @ts-expect-error: Prevent webpack from processing this require\n let { partytownSnippet } = __non_webpack_require__(\n '@builder.io/partytown/integration'!\n )\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n // Check to see if the user has defined their own Partytown configuration\n const userDefinedConfig = children.find(\n (child) =>\n hasComponentProps(child) &&\n child?.props?.dangerouslySetInnerHTML?.__html.length &&\n 'data-partytown-config' in child.props\n )\n\n return (\n <>\n {!userDefinedConfig && (\n <script\n data-partytown-config=\"\"\n dangerouslySetInnerHTML={{\n __html: `\n partytown = {\n lib: \"${assetPrefix}/_next/static/~partytown/\"\n };\n `,\n }}\n />\n )}\n <script\n data-partytown=\"\"\n dangerouslySetInnerHTML={{\n __html: partytownSnippet(),\n }}\n />\n {(scriptLoader.worker || []).map((file: ScriptProps, index: number) => {\n const {\n strategy,\n src,\n children: scriptChildren,\n dangerouslySetInnerHTML,\n ...scriptProps\n } = file\n\n let srcProps: {\n src?: string\n dangerouslySetInnerHTML?: ScriptProps['dangerouslySetInnerHTML']\n } = {}\n\n if (src) {\n // Use external src if provided\n srcProps.src = src\n } else if (\n dangerouslySetInnerHTML &&\n dangerouslySetInnerHTML.__html\n ) {\n // Embed inline script if provided with dangerouslySetInnerHTML\n srcProps.dangerouslySetInnerHTML = {\n __html: dangerouslySetInnerHTML.__html,\n }\n } else if (scriptChildren) {\n // Embed inline script if provided with children\n srcProps.dangerouslySetInnerHTML = {\n __html:\n typeof scriptChildren === 'string'\n ? scriptChildren\n : Array.isArray(scriptChildren)\n ? scriptChildren.join('')\n : '',\n }\n } else {\n throw new Error(\n 'Invalid usage of next/script. Did you forget to include a src attribute or an inline script? https://nextjs.org/docs/messages/invalid-script'\n )\n }\n\n return (\n <script\n {...srcProps}\n {...scriptProps}\n type=\"text/partytown\"\n key={src || index}\n nonce={props.nonce}\n data-nscript=\"worker\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })}\n </>\n )\n } catch (err) {\n if (isError(err) && err.code !== 'MODULE_NOT_FOUND') {\n console.warn(`Warning: ${err.message}`)\n }\n return null\n }\n}\n\nfunction getPreNextScripts(context: HtmlProps, props: OriginProps) {\n const { scriptLoader, disableOptimizedLoading, crossOrigin } = context\n\n const webWorkerScripts = getPreNextWorkerScripts(context, props)\n\n const beforeInteractiveScripts = (scriptLoader.beforeInteractive || [])\n .filter((script) => script.src)\n .map((file: ScriptProps, index: number) => {\n const { strategy, ...scriptProps } = file\n return (\n <script\n {...scriptProps}\n key={scriptProps.src || index}\n defer={scriptProps.defer ?? !disableOptimizedLoading}\n nonce={scriptProps.nonce || props.nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n\n return (\n <>\n {webWorkerScripts}\n {beforeInteractiveScripts}\n </>\n )\n}\n\nfunction getHeadHTMLProps(props: HeadProps) {\n const { crossOrigin, nonce, ...restProps } = props\n\n // This assignment is necessary for additional type checking to avoid unsupported attributes in <head>\n const headProps: HeadHTMLProps & {\n [P in Exclude<keyof HeadProps, keyof HeadHTMLProps>]?: never\n } = restProps\n\n return headProps\n}\n\nfunction getNextFontLinkTags(\n nextFontManifest: DeepReadonly<NextFontManifest> | undefined,\n dangerousAsPath: string,\n assetPrefix: string = '',\n assetQueryString: string = ''\n) {\n if (!nextFontManifest) {\n return {\n preconnect: null,\n preload: null,\n }\n }\n\n const appFontsEntry = nextFontManifest.pages['/_app']\n const pageFontsEntry = nextFontManifest.pages[dangerousAsPath]\n\n const preloadedFontFiles = Array.from(\n new Set([...(appFontsEntry ?? []), ...(pageFontsEntry ?? [])])\n )\n\n // If no font files should preload but there's an entry for the path, add a preconnect tag.\n const preconnectToSelf = !!(\n preloadedFontFiles.length === 0 &&\n (appFontsEntry || pageFontsEntry)\n )\n\n return {\n preconnect: preconnectToSelf ? (\n <link\n data-next-font={\n nextFontManifest.pagesUsingSizeAdjust ? 'size-adjust' : ''\n }\n rel=\"preconnect\"\n href=\"/\"\n crossOrigin=\"anonymous\"\n />\n ) : null,\n preload: preloadedFontFiles\n ? preloadedFontFiles.map((fontFile) => {\n const ext = /\\.(woff|woff2|eot|ttf|otf)$/.exec(fontFile)![1]\n return (\n <link\n key={fontFile}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(fontFile)}${assetQueryString}`}\n as=\"font\"\n type={`font/${ext}`}\n crossOrigin=\"anonymous\"\n data-next-font={fontFile.includes('-s') ? 'size-adjust' : ''}\n />\n )\n })\n : null,\n }\n}\n\n// Use `React.Component` to avoid errors from the RSC checks because\n// it can't be imported directly in Server Components:\n//\n// import { Component } from 'react'\n//\n// More info: https://github.com/vercel/next.js/pull/40686\nexport class Head extends React.Component<HeadProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getCssLinks(files: DocumentFiles): JSX.Element[] | null {\n const {\n assetPrefix,\n cssAssetQueryString,\n dynamicImports,\n dynamicCssManifest,\n crossOrigin,\n optimizeCss,\n } = this.context\n const cssFiles = files.allFiles.filter((f) => f.endsWith('.css'))\n const sharedFiles: Set<string> = new Set(files.sharedFiles)\n\n // Unmanaged files are CSS files that will be handled directly by the\n // webpack runtime (`mini-css-extract-plugin`).\n let unmanagedFiles: Set<string> = new Set([])\n let localDynamicCssFiles = Array.from(\n new Set(dynamicImports.filter((file) => file.endsWith('.css')))\n )\n if (localDynamicCssFiles.length) {\n const existing = new Set(cssFiles)\n localDynamicCssFiles = localDynamicCssFiles.filter(\n (f) => !(existing.has(f) || sharedFiles.has(f))\n )\n unmanagedFiles = new Set(localDynamicCssFiles)\n cssFiles.push(...localDynamicCssFiles)\n }\n\n let cssLinkElements: JSX.Element[] = []\n cssFiles.forEach((file) => {\n const isSharedFile = sharedFiles.has(file)\n const isUnmanagedFile = unmanagedFiles.has(file)\n const isFileInDynamicCssManifest = dynamicCssManifest.has(file)\n\n if (!optimizeCss) {\n cssLinkElements.push(\n <link\n key={`${file}-preload`}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n as=\"style\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n }\n\n cssLinkElements.push(\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"stylesheet\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n data-n-g={isUnmanagedFile ? undefined : isSharedFile ? '' : undefined}\n data-n-p={\n isSharedFile || isUnmanagedFile || isFileInDynamicCssManifest\n ? undefined\n : ''\n }\n />\n )\n })\n\n return cssLinkElements.length === 0 ? null : cssLinkElements\n }\n\n getPreloadDynamicChunks() {\n const { dynamicImports, assetPrefix, assetQueryString, crossOrigin } =\n this.context\n\n return (\n dynamicImports\n .map((file) => {\n if (!file.endsWith('.js')) {\n return null\n }\n\n return (\n <link\n rel=\"preload\"\n key={file}\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n })\n // Filter out nulled scripts\n .filter(Boolean)\n )\n }\n\n getPreloadMainLinks(files: DocumentFiles): JSX.Element[] | null {\n const { assetPrefix, assetQueryString, scriptLoader, crossOrigin } =\n this.context\n const preloadFiles = files.allFiles.filter((file: string) => {\n return file.endsWith('.js')\n })\n\n return [\n ...(scriptLoader.beforeInteractive || []).map((file) => (\n <link\n key={file.src}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={file.src}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ...preloadFiles.map((file: string) => (\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ]\n }\n\n getBeforeInteractiveInlineScripts() {\n const { scriptLoader } = this.context\n const { nonce, crossOrigin } = this.props\n\n return (scriptLoader.beforeInteractive || [])\n .filter(\n (script) =>\n !script.src && (script.dangerouslySetInnerHTML || script.children)\n )\n .map((file: ScriptProps, index: number) => {\n const {\n strategy,\n children,\n dangerouslySetInnerHTML,\n src,\n ...scriptProps\n } = file\n let html: NonNullable<\n ScriptProps['dangerouslySetInnerHTML']\n >['__html'] = ''\n\n if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n html = dangerouslySetInnerHTML.__html\n } else if (children) {\n html =\n typeof children === 'string'\n ? children\n : Array.isArray(children)\n ? children.join('')\n : ''\n }\n\n return (\n <script\n {...scriptProps}\n dangerouslySetInnerHTML={{ __html: html }}\n key={scriptProps.id || index}\n nonce={nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={\n crossOrigin ||\n (process.env.__NEXT_CROSS_ORIGIN as typeof crossOrigin)\n }\n />\n )\n })\n }\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n render() {\n const {\n styles,\n __NEXT_DATA__,\n dangerousAsPath,\n headTags,\n unstable_runtimeJS,\n unstable_JsPreload,\n disableOptimizedLoading,\n optimizeCss,\n assetPrefix,\n nextFontManifest,\n cssAssetQueryString,\n } = this.context\n\n const disableRuntimeJS = unstable_runtimeJS === false\n const disableJsPreload =\n unstable_JsPreload === false || !disableOptimizedLoading\n\n this.context.docComponentsRendered.Head = true\n\n let { head } = this.context\n let cssPreloads: Array<JSX.Element> = []\n let otherHeadElements: Array<JSX.Element> = []\n if (head) {\n head.forEach((child) => {\n if (\n child &&\n child.type === 'link' &&\n child.props['rel'] === 'preload' &&\n child.props['as'] === 'style'\n ) {\n cssPreloads.push(child)\n } else {\n if (child) {\n otherHeadElements.push(\n React.cloneElement(child, { 'data-next-head': '' })\n )\n }\n }\n })\n head = cssPreloads.concat(otherHeadElements)\n }\n let children: React.ReactNode[] = React.Children.toArray(\n this.props.children\n ).filter(Boolean)\n // show a warning if Head contains <title> (only in development)\n if (process.env.NODE_ENV !== 'production') {\n children = React.Children.map(children, (child: any) => {\n const isReactHelmet = child?.props?.['data-react-helmet']\n if (!isReactHelmet) {\n if (child?.type === 'title') {\n console.warn(\n \"Warning: <title> should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-title\"\n )\n } else if (\n child?.type === 'meta' &&\n child?.props?.name === 'viewport'\n ) {\n console.warn(\n \"Warning: viewport meta tags should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-viewport-meta\"\n )\n }\n }\n return child\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n })!\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `Head` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n const nextFontLinkTags = getNextFontLinkTags(\n nextFontManifest,\n dangerousAsPath,\n assetPrefix,\n cssAssetQueryString\n )\n\n const tracingMetadata = getTracedMetadata(\n getTracer().getTracePropagationData(),\n this.context.experimentalClientTraceMetadata\n )\n\n const traceMetaTags = (tracingMetadata || []).map(\n ({ key, value }, index) => (\n <meta key={`next-trace-data-${index}`} name={key} content={value} />\n )\n )\n\n return (\n <head {...getHeadHTMLProps(this.props)}>\n {this.context.isDevelopment && (\n <>\n <style\n data-next-hide-fouc\n dangerouslySetInnerHTML={{\n __html: `body{display:none}`,\n }}\n />\n <noscript data-next-hide-fouc>\n <style\n dangerouslySetInnerHTML={{\n __html: `body{display:block}`,\n }}\n />\n </noscript>\n </>\n )}\n {head}\n\n {children}\n\n {nextFontLinkTags.preconnect}\n {nextFontLinkTags.preload}\n\n {this.getBeforeInteractiveInlineScripts()}\n {!optimizeCss && this.getCssLinks(files)}\n {!optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadDynamicChunks()}\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadMainLinks(files)}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getScripts(files)}\n\n {optimizeCss && this.getCssLinks(files)}\n {optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n {this.context.isDevelopment && (\n // this element is used to mount development styles so the\n // ordering matches production\n // (by default, style-loader injects at the bottom of <head />)\n <noscript id=\"__next_css__DO_NOT_USE__\" />\n )}\n {traceMetaTags}\n {styles || null}\n\n {React.createElement(React.Fragment, {}, ...(headTags || []))}\n </head>\n )\n }\n}\n\nfunction handleDocumentScriptLoaderItems(\n scriptLoader: { beforeInteractive?: any[] },\n __NEXT_DATA__: NEXT_DATA,\n props: any\n): void {\n if (!props.children) return\n\n const scriptLoaderItems: ScriptProps[] = []\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n const headChildren = children.find(\n (child: React.ReactElement) => child.type === Head\n )?.props?.children\n const bodyChildren = children.find(\n (child: React.ReactElement) => child.type === 'body'\n )?.props?.children\n\n // Scripts with beforeInteractive can be placed inside Head or <body> so children of both needs to be traversed\n const combinedChildren = [\n ...(Array.isArray(headChildren) ? headChildren : [headChildren]),\n ...(Array.isArray(bodyChildren) ? bodyChildren : [bodyChildren]),\n ]\n\n React.Children.forEach(combinedChildren, (child: any) => {\n if (!child) return\n\n // When using the `next/script` component, register it in script loader.\n if (child.type?.__nextScript) {\n if (child.props.strategy === 'beforeInteractive') {\n scriptLoader.beforeInteractive = (\n scriptLoader.beforeInteractive || []\n ).concat([\n {\n ...child.props,\n },\n ])\n return\n } else if (\n ['lazyOnload', 'afterInteractive', 'worker'].includes(\n child.props.strategy\n )\n ) {\n scriptLoaderItems.push(child.props)\n return\n } else if (typeof child.props.strategy === 'undefined') {\n scriptLoaderItems.push({ ...child.props, strategy: 'afterInteractive' })\n return\n }\n }\n })\n\n __NEXT_DATA__.scriptLoader = scriptLoaderItems\n}\n\nexport class NextScript extends React.Component<OriginProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n static getInlineScriptSource(context: Readonly<HtmlProps>): string {\n const { __NEXT_DATA__, largePageDataBytes } = context\n try {\n const data = JSON.stringify(__NEXT_DATA__)\n\n if (largePageDataWarnings.has(__NEXT_DATA__.page)) {\n return htmlEscapeJsonString(data)\n }\n\n const bytes =\n process.env.NEXT_RUNTIME === 'edge'\n ? new TextEncoder().encode(data).buffer.byteLength\n : Buffer.from(data).byteLength\n const prettyBytes = (\n require('../lib/pretty-bytes') as typeof import('../lib/pretty-bytes')\n ).default\n\n if (largePageDataBytes && bytes > largePageDataBytes) {\n if (process.env.NODE_ENV === 'production') {\n largePageDataWarnings.add(__NEXT_DATA__.page)\n }\n\n console.warn(\n `Warning: data for page \"${__NEXT_DATA__.page}\"${\n __NEXT_DATA__.page === context.dangerousAsPath\n ? ''\n : ` (path \"${context.dangerousAsPath}\")`\n } is ${prettyBytes(\n bytes\n )} which exceeds the threshold of ${prettyBytes(\n largePageDataBytes\n )}, this amount of data can reduce performance.\\nSee more info here: https://nextjs.org/docs/messages/large-page-data`\n )\n }\n\n return htmlEscapeJsonString(data)\n } catch (err) {\n if (isError(err) && err.message.indexOf('circular structure') !== -1) {\n throw new Error(\n `Circular structure in \"getInitialProps\" result of page \"${__NEXT_DATA__.page}\". https://nextjs.org/docs/messages/circular-structure`\n )\n }\n throw err\n }\n }\n\n render() {\n const {\n assetPrefix,\n buildManifest,\n unstable_runtimeJS,\n docComponentsRendered,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = this.context\n const disableRuntimeJS = unstable_runtimeJS === false\n\n docComponentsRendered.NextScript = true\n\n if (process.env.NODE_ENV !== 'production') {\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `NextScript` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n return (\n <>\n {!disableRuntimeJS && buildManifest.devFiles\n ? buildManifest.devFiles.map((file: string) => (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n ))\n : null}\n {disableRuntimeJS ? null : (\n <script\n id=\"__NEXT_DATA__\"\n type=\"application/json\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n dangerouslySetInnerHTML={{\n __html: NextScript.getInlineScriptSource(this.context),\n }}\n />\n )}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files)}\n </>\n )\n }\n}\n\nexport function Html(\n props: React.DetailedHTMLProps<\n React.HtmlHTMLAttributes<HTMLHtmlElement>,\n HTMLHtmlElement\n >\n) {\n const {\n docComponentsRendered,\n locale,\n scriptLoader,\n deploymentId,\n __NEXT_DATA__,\n } = useHtmlContext()\n\n docComponentsRendered.Html = true\n handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props)\n\n return (\n <html\n {...props}\n lang={props.lang || locale || undefined}\n data-dpl-id={deploymentId || undefined}\n />\n )\n}\n\nexport function Main() {\n const { docComponentsRendered } = useHtmlContext()\n docComponentsRendered.Main = true\n // @ts-ignore\n return <next-js-internal-body-render-target />\n}\n\n/**\n * `Document` component handles the initial `document` markup and renders only on the server side.\n * Commonly used for implementing server side rendering for `css-in-js` libraries.\n */\nexport default class Document<P = {}> extends React.Component<\n DocumentProps & P\n> {\n /**\n * `getInitialProps` hook returns the context object with the addition of `renderPage`.\n * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers\n */\n static getInitialProps(ctx: DocumentContext): Promise<DocumentInitialProps> {\n return ctx.defaultGetInitialProps(ctx)\n }\n\n render() {\n return (\n <Html>\n <Head nonce={this.props.nonce} />\n <body>\n <Main />\n <NextScript nonce={this.props.nonce} />\n </body>\n </Html>\n )\n }\n}\n\n// Add a special property to the built-in `Document` component so later we can\n// identify if a user customized `Document` is used or not.\nconst InternalFunctionDocument: DocumentType =\n function InternalFunctionDocument() {\n return (\n <Html>\n <Head />\n <body>\n <Main />\n <NextScript />\n </body>\n </Html>\n )\n }\n;(Document as any)[NEXT_BUILTIN_DOCUMENT] = InternalFunctionDocument\n"],"names":["React","NEXT_BUILTIN_DOCUMENT","getPageFiles","htmlEscapeJsonString","isError","HtmlContext","useHtmlContext","encodeURIPath","getTracer","getTracedMetadata","largePageDataWarnings","Set","getDocumentFiles","buildManifest","pathname","sharedFiles","pageFiles","allFiles","getPolyfillScripts","context","props","assetPrefix","assetQueryString","disableOptimizedLoading","crossOrigin","polyfillFiles","filter","polyfill","endsWith","map","script","defer","nonce","noModule","src","hasComponentProps","child","getDynamicChunks","files","dynamicImports","isDevelopment","file","includes","async","getScripts","mutableAssetQueryString","normalScripts","lowPriorityScripts","lowPriorityFiles","query","startsWith","getPreNextWorkerScripts","scriptLoader","nextScriptWorkers","process","env","NEXT_RUNTIME","partytownSnippet","__non_webpack_require__","children","Array","isArray","userDefinedConfig","find","dangerouslySetInnerHTML","__html","length","data-partytown-config","data-partytown","worker","index","strategy","scriptChildren","scriptProps","srcProps","join","Error","type","key","data-nscript","err","code","console","warn","message","getPreNextScripts","webWorkerScripts","beforeInteractiveScripts","beforeInteractive","getHeadHTMLProps","restProps","headProps","getNextFontLinkTags","nextFontManifest","dangerousAsPath","preconnect","preload","appFontsEntry","pages","pageFontsEntry","preloadedFontFiles","from","preconnectToSelf","link","data-next-font","pagesUsingSizeAdjust","rel","href","fontFile","ext","exec","as","Head","Component","contextType","getCssLinks","cssAssetQueryString","dynamicCssManifest","optimizeCss","cssFiles","f","unmanagedFiles","localDynamicCssFiles","existing","has","push","cssLinkElements","forEach","isSharedFile","isUnmanagedFile","isFileInDynamicCssManifest","data-n-g","undefined","data-n-p","getPreloadDynamicChunks","Boolean","getPreloadMainLinks","preloadFiles","getBeforeInteractiveInlineScripts","html","id","__NEXT_CROSS_ORIGIN","render","styles","__NEXT_DATA__","headTags","unstable_runtimeJS","unstable_JsPreload","disableRuntimeJS","disableJsPreload","docComponentsRendered","head","cssPreloads","otherHeadElements","cloneElement","concat","Children","toArray","NODE_ENV","isReactHelmet","name","page","nextFontLinkTags","tracingMetadata","getTracePropagationData","experimentalClientTraceMetadata","traceMetaTags","value","meta","content","style","data-next-hide-fouc","noscript","data-n-css","createElement","Fragment","handleDocumentScriptLoaderItems","scriptLoaderItems","headChildren","bodyChildren","combinedChildren","__nextScript","NextScript","getInlineScriptSource","largePageDataBytes","data","JSON","stringify","bytes","TextEncoder","encode","buffer","byteLength","Buffer","prettyBytes","require","default","add","indexOf","devFiles","Html","locale","deploymentId","lang","data-dpl-id","Main","next-js-internal-body-render-target","Document","getInitialProps","ctx","defaultGetInitialProps","body","InternalFunctionDocument"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/pages/_document.tsx"],"sourcesContent":["/// <reference types=\"webpack/module.d.ts\" />\n\nimport React, { type JSX } from 'react'\nimport { NEXT_BUILTIN_DOCUMENT } from '../shared/lib/constants'\nimport type {\n DocumentContext,\n DocumentInitialProps,\n DocumentProps,\n DocumentType,\n NEXT_DATA,\n} from '../shared/lib/utils'\nimport type { ScriptProps } from '../client/script'\nimport type { NextFontManifest } from '../build/webpack/plugins/next-font-manifest-plugin'\n\nimport {\n getPageFiles,\n getTurbopackChunkGroupBootstrap,\n} from '../server/get-page-files'\nimport type { BuildManifest } from '../server/get-page-files'\nimport { htmlEscapeJsonString } from '../shared/lib/htmlescape'\nimport isError from '../lib/is-error'\n\nimport {\n HtmlContext,\n useHtmlContext,\n} from '../shared/lib/html-context.shared-runtime'\nimport type { HtmlProps } from '../shared/lib/html-context.shared-runtime'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { getTracer } from '../server/lib/trace/tracer'\nimport { getTracedMetadata } from '../server/lib/trace/utils'\n\nexport type { DocumentContext, DocumentInitialProps, DocumentProps }\n\nexport type OriginProps = {\n nonce?: string\n crossOrigin?: 'anonymous' | 'use-credentials' | '' | undefined\n children?: React.ReactNode\n}\n\ntype DocumentFiles = {\n sharedFiles: readonly string[]\n pageFiles: readonly string[]\n allFiles: readonly string[]\n}\n\ntype HeadHTMLProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLHeadElement>,\n HTMLHeadElement\n>\n\ntype HeadProps = OriginProps & HeadHTMLProps\n\n/** Set of pages that have triggered a large data warning on production mode. */\nconst largePageDataWarnings = new Set<string>()\n\nfunction getDocumentFiles(\n buildManifest: BuildManifest,\n pathname: string\n): DocumentFiles {\n const sharedFiles: readonly string[] = getPageFiles(buildManifest, '/_app')\n const pageFiles: readonly string[] = getPageFiles(buildManifest, pathname)\n\n return {\n sharedFiles,\n pageFiles,\n allFiles: [...new Set([...sharedFiles, ...pageFiles])],\n }\n}\n\nfunction getPolyfillScripts(context: HtmlProps, props: OriginProps) {\n // polyfills.js has to be rendered as nomodule without async\n // It also has to be the first script to load\n const {\n assetPrefix,\n buildManifest,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return buildManifest.polyfillFiles\n .filter(\n (polyfill) => polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')\n )\n .map((polyfill) => (\n <script\n key={polyfill}\n defer={!disableOptimizedLoading}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n noModule={true}\n src={`${assetPrefix}/_next/${encodeURIPath(\n polyfill\n )}${assetQueryString}`}\n />\n ))\n}\n\nfunction hasComponentProps(child: any): child is React.ReactElement<any> {\n return !!child && !!child.props\n}\n\nfunction getDynamicChunks(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n dynamicImports,\n assetPrefix,\n isDevelopment,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return dynamicImports.map((file) => {\n if (!file.endsWith('.js') || files.allFiles.includes(file)) return null\n\n return (\n <script\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${assetQueryString}`}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n}\n\n// Builds one inline <script> seeding the runtime queue with the shared (`/_app`) and\n// current route's bootstrap params, before the shared runtime chunk drains it.\nfunction getInlineBootstrapScript(context: HtmlProps, props: OriginProps) {\n const { buildManifest, __NEXT_DATA__, crossOrigin } = context\n // Only Turbopack production builds populate these; nothing to inline otherwise.\n if (\n !buildManifest.pagesChunkGroupBootstrapParams ||\n !buildManifest.chunkLoadingGlobal\n ) {\n return null\n }\n const bootstrap = getTurbopackChunkGroupBootstrap(\n buildManifest.pagesChunkGroupBootstrapParams,\n buildManifest.chunkLoadingGlobal,\n ['/_app', __NEXT_DATA__.page]\n )\n if (!bootstrap) return null\n\n const html = htmlEscapeJsonString(bootstrap)\n return (\n <script\n key=\"turbopack-bootstrap\"\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n\nfunction getScripts(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n assetPrefix,\n buildManifest,\n isDevelopment,\n assetQueryString,\n mutableAssetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n const normalScripts = files.allFiles.filter((file) => file.endsWith('.js'))\n const lowPriorityScripts = buildManifest.lowPriorityFiles?.filter((file) =>\n file.endsWith('.js')\n )\n\n const scripts = [...normalScripts, ...lowPriorityScripts].map((file) => {\n // static/immutable/chunks/51e975e7b637a580.js should use the immutable id, while\n // static/Yj152X97rfGgF7NPcJEZs/_ssgManifest.js should use the deployment id\n const query = file.startsWith('static/immutable/chunks')\n ? assetQueryString\n : mutableAssetQueryString\n return (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${query}`}\n nonce={props.nonce}\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n\n // Emit the bootstrap before the chunk <script>s so the queue exists first.\n const bootstrapScript = getInlineBootstrapScript(context, props)\n return bootstrapScript ? [bootstrapScript, ...scripts] : scripts\n}\n\nfunction getPreNextWorkerScripts(context: HtmlProps, props: OriginProps) {\n const { assetPrefix, scriptLoader, crossOrigin, nextScriptWorkers } = context\n\n // disable `nextScriptWorkers` in edge runtime\n if (!nextScriptWorkers || process.env.NEXT_RUNTIME === 'edge') return null\n\n try {\n // @ts-expect-error: Prevent webpack from processing this require\n let { partytownSnippet } = __non_webpack_require__(\n '@builder.io/partytown/integration'!\n )\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n // Check to see if the user has defined their own Partytown configuration\n const userDefinedConfig = children.find(\n (child) =>\n hasComponentProps(child) &&\n child?.props?.dangerouslySetInnerHTML?.__html.length &&\n 'data-partytown-config' in child.props\n )\n\n return (\n <>\n {!userDefinedConfig && (\n <script\n data-partytown-config=\"\"\n dangerouslySetInnerHTML={{\n __html: `\n partytown = {\n lib: \"${assetPrefix}/_next/static/~partytown/\"\n };\n `,\n }}\n />\n )}\n <script\n data-partytown=\"\"\n dangerouslySetInnerHTML={{\n __html: partytownSnippet(),\n }}\n />\n {(scriptLoader.worker || []).map((file: ScriptProps, index: number) => {\n const {\n strategy,\n src,\n children: scriptChildren,\n dangerouslySetInnerHTML,\n ...scriptProps\n } = file\n\n let srcProps: {\n src?: string\n dangerouslySetInnerHTML?: ScriptProps['dangerouslySetInnerHTML']\n } = {}\n\n if (src) {\n // Use external src if provided\n srcProps.src = src\n } else if (\n dangerouslySetInnerHTML &&\n dangerouslySetInnerHTML.__html\n ) {\n // Embed inline script if provided with dangerouslySetInnerHTML\n srcProps.dangerouslySetInnerHTML = {\n __html: dangerouslySetInnerHTML.__html,\n }\n } else if (scriptChildren) {\n // Embed inline script if provided with children\n srcProps.dangerouslySetInnerHTML = {\n __html:\n typeof scriptChildren === 'string'\n ? scriptChildren\n : Array.isArray(scriptChildren)\n ? scriptChildren.join('')\n : '',\n }\n } else {\n throw new Error(\n 'Invalid usage of next/script. Did you forget to include a src attribute or an inline script? https://nextjs.org/docs/messages/invalid-script'\n )\n }\n\n return (\n <script\n {...srcProps}\n {...scriptProps}\n type=\"text/partytown\"\n key={src || index}\n nonce={props.nonce}\n data-nscript=\"worker\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })}\n </>\n )\n } catch (err) {\n if (isError(err) && err.code !== 'MODULE_NOT_FOUND') {\n console.warn(`Warning: ${err.message}`)\n }\n return null\n }\n}\n\nfunction getPreNextScripts(context: HtmlProps, props: OriginProps) {\n const { scriptLoader, disableOptimizedLoading, crossOrigin } = context\n\n const webWorkerScripts = getPreNextWorkerScripts(context, props)\n\n const beforeInteractiveScripts = (scriptLoader.beforeInteractive || [])\n .filter((script) => script.src)\n .map((file: ScriptProps, index: number) => {\n const { strategy, ...scriptProps } = file\n return (\n <script\n {...scriptProps}\n key={scriptProps.src || index}\n defer={scriptProps.defer ?? !disableOptimizedLoading}\n nonce={scriptProps.nonce || props.nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n\n return (\n <>\n {webWorkerScripts}\n {beforeInteractiveScripts}\n </>\n )\n}\n\nfunction getHeadHTMLProps(props: HeadProps) {\n const { crossOrigin, nonce, ...restProps } = props\n\n // This assignment is necessary for additional type checking to avoid unsupported attributes in <head>\n const headProps: HeadHTMLProps & {\n [P in Exclude<keyof HeadProps, keyof HeadHTMLProps>]?: never\n } = restProps\n\n return headProps\n}\n\nfunction getNextFontLinkTags(\n nextFontManifest: DeepReadonly<NextFontManifest> | undefined,\n dangerousAsPath: string,\n assetPrefix: string = '',\n assetQueryString: string = ''\n) {\n if (!nextFontManifest) {\n return {\n preconnect: null,\n preload: null,\n }\n }\n\n const appFontsEntry = nextFontManifest.pages['/_app']\n const pageFontsEntry = nextFontManifest.pages[dangerousAsPath]\n\n const preloadedFontFiles = Array.from(\n new Set([...(appFontsEntry ?? []), ...(pageFontsEntry ?? [])])\n )\n\n // If no font files should preload but there's an entry for the path, add a preconnect tag.\n const preconnectToSelf = !!(\n preloadedFontFiles.length === 0 &&\n (appFontsEntry || pageFontsEntry)\n )\n\n return {\n preconnect: preconnectToSelf ? (\n <link\n data-next-font={\n nextFontManifest.pagesUsingSizeAdjust ? 'size-adjust' : ''\n }\n rel=\"preconnect\"\n href=\"/\"\n crossOrigin=\"anonymous\"\n />\n ) : null,\n preload: preloadedFontFiles\n ? preloadedFontFiles.map((fontFile) => {\n const ext = /\\.(woff|woff2|eot|ttf|otf)$/.exec(fontFile)![1]\n return (\n <link\n key={fontFile}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(fontFile)}${assetQueryString}`}\n as=\"font\"\n type={`font/${ext}`}\n crossOrigin=\"anonymous\"\n data-next-font={fontFile.includes('-s') ? 'size-adjust' : ''}\n />\n )\n })\n : null,\n }\n}\n\n// Use `React.Component` to avoid errors from the RSC checks because\n// it can't be imported directly in Server Components:\n//\n// import { Component } from 'react'\n//\n// More info: https://github.com/vercel/next.js/pull/40686\nexport class Head extends React.Component<HeadProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getCssLinks(files: DocumentFiles): JSX.Element[] | null {\n const {\n assetPrefix,\n cssAssetQueryString,\n dynamicImports,\n dynamicCssManifest,\n crossOrigin,\n optimizeCss,\n } = this.context\n const cssFiles = files.allFiles.filter((f) => f.endsWith('.css'))\n const sharedFiles: Set<string> = new Set(files.sharedFiles)\n\n // Unmanaged files are CSS files that will be handled directly by the\n // webpack runtime (`mini-css-extract-plugin`).\n let unmanagedFiles: Set<string> = new Set([])\n let localDynamicCssFiles = Array.from(\n new Set(dynamicImports.filter((file) => file.endsWith('.css')))\n )\n if (localDynamicCssFiles.length) {\n const existing = new Set(cssFiles)\n localDynamicCssFiles = localDynamicCssFiles.filter(\n (f) => !(existing.has(f) || sharedFiles.has(f))\n )\n unmanagedFiles = new Set(localDynamicCssFiles)\n cssFiles.push(...localDynamicCssFiles)\n }\n\n let cssLinkElements: JSX.Element[] = []\n cssFiles.forEach((file) => {\n const isSharedFile = sharedFiles.has(file)\n const isUnmanagedFile = unmanagedFiles.has(file)\n const isFileInDynamicCssManifest = dynamicCssManifest.has(file)\n\n if (!optimizeCss) {\n cssLinkElements.push(\n <link\n key={`${file}-preload`}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n as=\"style\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n }\n\n cssLinkElements.push(\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"stylesheet\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n data-n-g={isUnmanagedFile ? undefined : isSharedFile ? '' : undefined}\n data-n-p={\n isSharedFile || isUnmanagedFile || isFileInDynamicCssManifest\n ? undefined\n : ''\n }\n />\n )\n })\n\n return cssLinkElements.length === 0 ? null : cssLinkElements\n }\n\n getPreloadDynamicChunks() {\n const { dynamicImports, assetPrefix, assetQueryString, crossOrigin } =\n this.context\n\n return (\n dynamicImports\n .map((file) => {\n if (!file.endsWith('.js')) {\n return null\n }\n\n return (\n <link\n rel=\"preload\"\n key={file}\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n })\n // Filter out nulled scripts\n .filter(Boolean)\n )\n }\n\n getPreloadMainLinks(files: DocumentFiles): JSX.Element[] | null {\n const { assetPrefix, assetQueryString, scriptLoader, crossOrigin } =\n this.context\n const preloadFiles = files.allFiles.filter((file: string) => {\n return file.endsWith('.js')\n })\n\n return [\n ...(scriptLoader.beforeInteractive || []).map((file) => (\n <link\n key={file.src}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={file.src}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ...preloadFiles.map((file: string) => (\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ]\n }\n\n getBeforeInteractiveInlineScripts() {\n const { scriptLoader } = this.context\n const { nonce, crossOrigin } = this.props\n\n return (scriptLoader.beforeInteractive || [])\n .filter(\n (script) =>\n !script.src && (script.dangerouslySetInnerHTML || script.children)\n )\n .map((file: ScriptProps, index: number) => {\n const {\n strategy,\n children,\n dangerouslySetInnerHTML,\n src,\n ...scriptProps\n } = file\n let html: NonNullable<\n ScriptProps['dangerouslySetInnerHTML']\n >['__html'] = ''\n\n if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n html = dangerouslySetInnerHTML.__html\n } else if (children) {\n html =\n typeof children === 'string'\n ? children\n : Array.isArray(children)\n ? children.join('')\n : ''\n }\n\n return (\n <script\n {...scriptProps}\n dangerouslySetInnerHTML={{ __html: html }}\n key={scriptProps.id || index}\n nonce={nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={\n crossOrigin ||\n (process.env.__NEXT_CROSS_ORIGIN as typeof crossOrigin)\n }\n />\n )\n })\n }\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n render() {\n const {\n styles,\n __NEXT_DATA__,\n dangerousAsPath,\n headTags,\n unstable_runtimeJS,\n unstable_JsPreload,\n disableOptimizedLoading,\n optimizeCss,\n assetPrefix,\n nextFontManifest,\n cssAssetQueryString,\n } = this.context\n\n const disableRuntimeJS = unstable_runtimeJS === false\n const disableJsPreload =\n unstable_JsPreload === false || !disableOptimizedLoading\n\n this.context.docComponentsRendered.Head = true\n\n let { head } = this.context\n let cssPreloads: Array<JSX.Element> = []\n let otherHeadElements: Array<JSX.Element> = []\n if (head) {\n head.forEach((child) => {\n if (\n child &&\n child.type === 'link' &&\n child.props['rel'] === 'preload' &&\n child.props['as'] === 'style'\n ) {\n cssPreloads.push(child)\n } else {\n if (child) {\n otherHeadElements.push(\n React.cloneElement(child, { 'data-next-head': '' })\n )\n }\n }\n })\n head = cssPreloads.concat(otherHeadElements)\n }\n let children: React.ReactNode[] = React.Children.toArray(\n this.props.children\n ).filter(Boolean)\n // show a warning if Head contains <title> (only in development)\n if (process.env.NODE_ENV !== 'production') {\n children = React.Children.map(children, (child: any) => {\n const isReactHelmet = child?.props?.['data-react-helmet']\n if (!isReactHelmet) {\n if (child?.type === 'title') {\n console.warn(\n \"Warning: <title> should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-title\"\n )\n } else if (\n child?.type === 'meta' &&\n child?.props?.name === 'viewport'\n ) {\n console.warn(\n \"Warning: viewport meta tags should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-viewport-meta\"\n )\n }\n }\n return child\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n })!\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `Head` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n const nextFontLinkTags = getNextFontLinkTags(\n nextFontManifest,\n dangerousAsPath,\n assetPrefix,\n cssAssetQueryString\n )\n\n const tracingMetadata = getTracedMetadata(\n getTracer().getTracePropagationData(),\n this.context.experimentalClientTraceMetadata\n )\n\n const traceMetaTags = (tracingMetadata || []).map(\n ({ key, value }, index) => (\n <meta key={`next-trace-data-${index}`} name={key} content={value} />\n )\n )\n\n return (\n <head {...getHeadHTMLProps(this.props)}>\n {this.context.isDevelopment && (\n <>\n <style\n data-next-hide-fouc\n dangerouslySetInnerHTML={{\n __html: `body{display:none}`,\n }}\n />\n <noscript data-next-hide-fouc>\n <style\n dangerouslySetInnerHTML={{\n __html: `body{display:block}`,\n }}\n />\n </noscript>\n </>\n )}\n {head}\n\n {children}\n\n {nextFontLinkTags.preconnect}\n {nextFontLinkTags.preload}\n\n {this.getBeforeInteractiveInlineScripts()}\n {!optimizeCss && this.getCssLinks(files)}\n {!optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadDynamicChunks()}\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadMainLinks(files)}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getScripts(files)}\n\n {optimizeCss && this.getCssLinks(files)}\n {optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n {this.context.isDevelopment && (\n // this element is used to mount development styles so the\n // ordering matches production\n // (by default, style-loader injects at the bottom of <head />)\n <noscript id=\"__next_css__DO_NOT_USE__\" />\n )}\n {traceMetaTags}\n {styles || null}\n\n {React.createElement(React.Fragment, {}, ...(headTags || []))}\n </head>\n )\n }\n}\n\nfunction handleDocumentScriptLoaderItems(\n scriptLoader: { beforeInteractive?: any[] },\n __NEXT_DATA__: NEXT_DATA,\n props: any\n): void {\n if (!props.children) return\n\n const scriptLoaderItems: ScriptProps[] = []\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n const headChildren = children.find(\n (child: React.ReactElement) => child.type === Head\n )?.props?.children\n const bodyChildren = children.find(\n (child: React.ReactElement) => child.type === 'body'\n )?.props?.children\n\n // Scripts with beforeInteractive can be placed inside Head or <body> so children of both needs to be traversed\n const combinedChildren = [\n ...(Array.isArray(headChildren) ? headChildren : [headChildren]),\n ...(Array.isArray(bodyChildren) ? bodyChildren : [bodyChildren]),\n ]\n\n React.Children.forEach(combinedChildren, (child: any) => {\n if (!child) return\n\n // When using the `next/script` component, register it in script loader.\n if (child.type?.__nextScript) {\n if (child.props.strategy === 'beforeInteractive') {\n scriptLoader.beforeInteractive = (\n scriptLoader.beforeInteractive || []\n ).concat([\n {\n ...child.props,\n },\n ])\n return\n } else if (\n ['lazyOnload', 'afterInteractive', 'worker'].includes(\n child.props.strategy\n )\n ) {\n scriptLoaderItems.push(child.props)\n return\n } else if (typeof child.props.strategy === 'undefined') {\n scriptLoaderItems.push({ ...child.props, strategy: 'afterInteractive' })\n return\n }\n }\n })\n\n __NEXT_DATA__.scriptLoader = scriptLoaderItems\n}\n\nexport class NextScript extends React.Component<OriginProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n static getInlineScriptSource(context: Readonly<HtmlProps>): string {\n const { __NEXT_DATA__, largePageDataBytes } = context\n try {\n const data = JSON.stringify(__NEXT_DATA__)\n\n if (largePageDataWarnings.has(__NEXT_DATA__.page)) {\n return htmlEscapeJsonString(data)\n }\n\n const bytes =\n process.env.NEXT_RUNTIME === 'edge'\n ? new TextEncoder().encode(data).buffer.byteLength\n : Buffer.from(data).byteLength\n const prettyBytes = (\n require('../lib/pretty-bytes') as typeof import('../lib/pretty-bytes')\n ).default\n\n if (largePageDataBytes && bytes > largePageDataBytes) {\n if (process.env.NODE_ENV === 'production') {\n largePageDataWarnings.add(__NEXT_DATA__.page)\n }\n\n console.warn(\n `Warning: data for page \"${__NEXT_DATA__.page}\"${\n __NEXT_DATA__.page === context.dangerousAsPath\n ? ''\n : ` (path \"${context.dangerousAsPath}\")`\n } is ${prettyBytes(\n bytes\n )} which exceeds the threshold of ${prettyBytes(\n largePageDataBytes\n )}, this amount of data can reduce performance.\\nSee more info here: https://nextjs.org/docs/messages/large-page-data`\n )\n }\n\n return htmlEscapeJsonString(data)\n } catch (err) {\n if (isError(err) && err.message.indexOf('circular structure') !== -1) {\n throw new Error(\n `Circular structure in \"getInitialProps\" result of page \"${__NEXT_DATA__.page}\". https://nextjs.org/docs/messages/circular-structure`\n )\n }\n throw err\n }\n }\n\n render() {\n const {\n assetPrefix,\n buildManifest,\n unstable_runtimeJS,\n docComponentsRendered,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = this.context\n const disableRuntimeJS = unstable_runtimeJS === false\n\n docComponentsRendered.NextScript = true\n\n if (process.env.NODE_ENV !== 'production') {\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `NextScript` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n return (\n <>\n {!disableRuntimeJS && buildManifest.devFiles\n ? buildManifest.devFiles.map((file: string) => (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n ))\n : null}\n {disableRuntimeJS ? null : (\n <script\n id=\"__NEXT_DATA__\"\n type=\"application/json\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n dangerouslySetInnerHTML={{\n __html: NextScript.getInlineScriptSource(this.context),\n }}\n />\n )}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files)}\n </>\n )\n }\n}\n\nexport function Html(\n props: React.DetailedHTMLProps<\n React.HtmlHTMLAttributes<HTMLHtmlElement>,\n HTMLHtmlElement\n >\n) {\n const {\n docComponentsRendered,\n locale,\n scriptLoader,\n deploymentId,\n __NEXT_DATA__,\n } = useHtmlContext()\n\n docComponentsRendered.Html = true\n handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props)\n\n return (\n <html\n {...props}\n lang={props.lang || locale || undefined}\n data-dpl-id={deploymentId || undefined}\n />\n )\n}\n\nexport function Main() {\n const { docComponentsRendered } = useHtmlContext()\n docComponentsRendered.Main = true\n // @ts-ignore\n return <next-js-internal-body-render-target />\n}\n\n/**\n * `Document` component handles the initial `document` markup and renders only on the server side.\n * Commonly used for implementing server side rendering for `css-in-js` libraries.\n */\nexport default class Document<P = {}> extends React.Component<\n DocumentProps & P\n> {\n /**\n * `getInitialProps` hook returns the context object with the addition of `renderPage`.\n * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers\n */\n static getInitialProps(ctx: DocumentContext): Promise<DocumentInitialProps> {\n return ctx.defaultGetInitialProps(ctx)\n }\n\n render() {\n return (\n <Html>\n <Head nonce={this.props.nonce} />\n <body>\n <Main />\n <NextScript nonce={this.props.nonce} />\n </body>\n </Html>\n )\n }\n}\n\n// Add a special property to the built-in `Document` component so later we can\n// identify if a user customized `Document` is used or not.\nconst InternalFunctionDocument: DocumentType =\n function InternalFunctionDocument() {\n return (\n <Html>\n <Head />\n <body>\n <Main />\n <NextScript />\n </body>\n </Html>\n )\n }\n;(Document as any)[NEXT_BUILTIN_DOCUMENT] = InternalFunctionDocument\n"],"names":["React","NEXT_BUILTIN_DOCUMENT","getPageFiles","getTurbopackChunkGroupBootstrap","htmlEscapeJsonString","isError","HtmlContext","useHtmlContext","encodeURIPath","getTracer","getTracedMetadata","largePageDataWarnings","Set","getDocumentFiles","buildManifest","pathname","sharedFiles","pageFiles","allFiles","getPolyfillScripts","context","props","assetPrefix","assetQueryString","disableOptimizedLoading","crossOrigin","polyfillFiles","filter","polyfill","endsWith","map","script","defer","nonce","noModule","src","hasComponentProps","child","getDynamicChunks","files","dynamicImports","isDevelopment","file","includes","async","getInlineBootstrapScript","__NEXT_DATA__","pagesChunkGroupBootstrapParams","chunkLoadingGlobal","bootstrap","page","html","dangerouslySetInnerHTML","__html","getScripts","mutableAssetQueryString","normalScripts","lowPriorityScripts","lowPriorityFiles","scripts","query","startsWith","bootstrapScript","getPreNextWorkerScripts","scriptLoader","nextScriptWorkers","process","env","NEXT_RUNTIME","partytownSnippet","__non_webpack_require__","children","Array","isArray","userDefinedConfig","find","length","data-partytown-config","data-partytown","worker","index","strategy","scriptChildren","scriptProps","srcProps","join","Error","type","key","data-nscript","err","code","console","warn","message","getPreNextScripts","webWorkerScripts","beforeInteractiveScripts","beforeInteractive","getHeadHTMLProps","restProps","headProps","getNextFontLinkTags","nextFontManifest","dangerousAsPath","preconnect","preload","appFontsEntry","pages","pageFontsEntry","preloadedFontFiles","from","preconnectToSelf","link","data-next-font","pagesUsingSizeAdjust","rel","href","fontFile","ext","exec","as","Head","Component","contextType","getCssLinks","cssAssetQueryString","dynamicCssManifest","optimizeCss","cssFiles","f","unmanagedFiles","localDynamicCssFiles","existing","has","push","cssLinkElements","forEach","isSharedFile","isUnmanagedFile","isFileInDynamicCssManifest","data-n-g","undefined","data-n-p","getPreloadDynamicChunks","Boolean","getPreloadMainLinks","preloadFiles","getBeforeInteractiveInlineScripts","id","__NEXT_CROSS_ORIGIN","render","styles","headTags","unstable_runtimeJS","unstable_JsPreload","disableRuntimeJS","disableJsPreload","docComponentsRendered","head","cssPreloads","otherHeadElements","cloneElement","concat","Children","toArray","NODE_ENV","isReactHelmet","name","nextFontLinkTags","tracingMetadata","getTracePropagationData","experimentalClientTraceMetadata","traceMetaTags","value","meta","content","style","data-next-hide-fouc","noscript","data-n-css","createElement","Fragment","handleDocumentScriptLoaderItems","scriptLoaderItems","headChildren","bodyChildren","combinedChildren","__nextScript","NextScript","getInlineScriptSource","largePageDataBytes","data","JSON","stringify","bytes","TextEncoder","encode","buffer","byteLength","Buffer","prettyBytes","require","default","add","indexOf","devFiles","Html","locale","deploymentId","lang","data-dpl-id","Main","next-js-internal-body-render-target","Document","getInitialProps","ctx","defaultGetInitialProps","body","InternalFunctionDocument"],"mappings":"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","ignoreList":[0]} |
@@ -90,3 +90,6 @@ import { PrefetchHint, propagateSubtreeBits } from '../../shared/lib/app-router-types'; | ||
| } else if (prefetchConfig === 'allow-runtime') { | ||
| prefetchHints |= PrefetchHint.HasRuntimePrefetch; | ||
| // 'allow-runtime' participates in the two-phase (Shell then Speculative) | ||
| // prefetch flow, so it counts as Partial Prefetching. HasRuntimePrefetch | ||
| // additionally marks it as needing a runtime request pass. | ||
| prefetchHints |= PrefetchHint.HasRuntimePrefetch | PrefetchHint.SubtreeHasPartialPrefetching; | ||
| } | ||
@@ -93,0 +96,0 @@ // Mark the segment as "eager" unless its effective prefetch strategy is |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/app-render/create-flight-router-state-from-loader-tree.ts"],"sourcesContent":["import type { LoaderTree } from '../lib/app-dir-module'\nimport {\n PrefetchHint,\n propagateSubtreeBits,\n type FlightRouterState,\n type PrefetchHints,\n} from '../../shared/lib/app-router-types'\nimport type { GetDynamicParamFromSegment } from './app-render'\nimport { addSearchParamsIfPageSegment } from '../../shared/lib/segment'\nimport type { AppSegmentConfig } from '../../build/segment-config/app/app-segment-config'\n\nasync function createFlightRouterStateFromLoaderTreeImpl(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n didFindRootLayout: boolean\n): Promise<FlightRouterState> {\n const [segment, parallelRoutes, { layout, loading, page }] = loaderTree\n const dynamicParam = getDynamicParamFromSegment(loaderTree)\n const treeSegment = dynamicParam ? dynamicParam.treeSegment : segment\n\n const segmentTree: FlightRouterState = [\n addSearchParamsIfPageSegment(treeSegment, searchParams),\n {},\n ]\n\n // Load the layout or page module to check its instant and prefetch\n // configs. When a segment doesn't export prefetch, it defaults to\n // 'partial' if the app has opted into partial prefetching globally via the\n // `partialPrefetching` config in next.config.js.\n const mod = layout ? await layout[0]() : page ? await page[0]() : undefined\n const instantConfig = mod ? (mod as AppSegmentConfig).instant : undefined\n const prefetchConfig =\n (mod ? (mod as AppSegmentConfig).prefetch : undefined) ??\n (partialPrefetching === 'unstable_eager'\n ? 'unstable_eager'\n : partialPrefetching\n ? 'partial'\n : undefined)\n let prefetchHints = 0\n\n // Union in the precomputed build-time hints (e.g. segment inlining\n // decisions) if available. When hints are not available (e.g. dev mode or\n // if prefetch-hints.json was not generated), we fall through and still\n // compute the other hints below. In the future this should be a build\n // error, but for now we gracefully degrade.\n //\n // TODO: Move more of the hints computation (IsRootLayoutOrAbove, instant config,\n // loading boundary detection) into the build-time measurement step in\n // collectPrefetchHints, so this function only needs to union the\n // precomputed bitmask rather than re-derive hints on every render.\n if (hintTree !== null) {\n prefetchHints |= hintTree.hints\n } else if (prefetchInliningEnabled) {\n if (isBuildTimePrerendering) {\n // Prefetch inlining is enabled but no hint tree was provided during a\n // build-time prerender. This happens for the initial RSC payload\n // generated before collectPrefetchHints has run. Mark so the client\n // can expire the route cache entry and re-fetch the tree with correct\n // hints.\n prefetchHints |= PrefetchHint.InliningHintsStale\n } else if (isStaticGeneration) {\n // TODO(#91407): Temporary mitigation: when hints are missing during\n // runtime static generation, fall back to treating every segment as\n // unprefetchable. This currently happens for routes with\n // `instant = false` at the root segment, which causes the prerender\n // to run per-request instead of being cached, and the prefetch hints\n // manifest is not available.\n //\n // Once that bug is fixed, this branch should become an error again —\n // hints should always be available from the manifest during ISR.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (cacheComponents) {\n // At runtime with no hint tree, this is a fully dynamic route with no\n // manifest entry. Treat every segment as unprefetchable. Do NOT set\n // InliningHintsStale — that would cause the client to enter an\n // infinite re-fetch loop trying to get hints that will never exist.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else {\n // Without cacheComponents, dynamic pages have no static shell so\n // hints are never computed. Don't disable prefetching — just skip\n // the inlining hint system and let prefetching proceed normally.\n }\n }\n\n // Mark every segment at or above the root layout (i.e. until we descend past\n // the first segment that has a layout).\n if (!didFindRootLayout) {\n prefetchHints |= PrefetchHint.IsRootLayoutOrAbove\n if (typeof layout !== 'undefined') {\n // This segment is the root layout; its descendants are below it.\n didFindRootLayout = true\n }\n }\n\n const isInstant =\n instantConfig === true ||\n (typeof instantConfig === 'object' && instantConfig !== null)\n if (isInstant) {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (instantConfig === false) {\n // The segment explicitly opts out of Partial Prefetching. We don't change\n // the prefetch behavior, but we record it so the dev-time\n // `<Link prefetch={true}>` warning can be suppressed for this route.\n prefetchHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n\n if (prefetchConfig === 'partial') {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (prefetchConfig === 'unstable_eager') {\n // Like 'partial' (uses the PPR fetch strategy) but also marks the segment\n // as eager, so App Shells keeps prefetching it instead of relying on the\n // shared app shell.\n prefetchHints |=\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasEagerPrefetch\n } else if (prefetchConfig === 'force-disabled') {\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (prefetchConfig === 'allow-runtime') {\n prefetchHints |= PrefetchHint.HasRuntimePrefetch\n }\n\n // Mark the segment as \"eager\" unless its effective prefetch strategy is\n // 'partial' or 'allow-runtime'. A truthy instant is treated as\n // 'partial' (not eager). 'unstable_eager' already set the bit above. Under\n // App Shells, a subtree with no eager segment skips its Speculative prefetch\n // and relies on the shared app shell instead.\n if (\n !isInstant &&\n prefetchConfig !== 'partial' &&\n prefetchConfig !== 'allow-runtime'\n ) {\n prefetchHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n\n // Check if this segment has a loading boundary\n if (loading) {\n prefetchHints |= PrefetchHint.SegmentHasLoadingBoundary\n }\n\n const children: FlightRouterState[1] = {}\n for (const parallelRouteKey in parallelRoutes) {\n // Look up the child hint node by parallel route key, traversing the\n // hint tree in parallel with the loader tree.\n const childHintNode = hintTree?.slots?.[parallelRouteKey] ?? null\n\n const child = await createFlightRouterStateFromLoaderTreeImpl(\n parallelRoutes[parallelRouteKey],\n childHintNode,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n // Propagate subtree flags from children\n if (child[4] !== undefined) {\n prefetchHints = propagateSubtreeBits(prefetchHints, child[4])\n }\n children[parallelRouteKey] = child\n }\n segmentTree[1] = children\n\n if (prefetchHints !== 0) {\n segmentTree[4] = prefetchHints\n }\n\n return segmentTree\n}\n\nexport async function createFlightRouterStateFromLoaderTree(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n // Whether a root layout was already found above this loader tree slice, so a\n // slice that starts below the root layout doesn't mark a sub-layout as the\n // root layout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n\nexport async function createRouteTreePrefetch(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n // See note on createFlightRouterStateFromLoaderTree's didFindRootLayout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n // Search params should not be added to page segment's cache key during a\n // route tree prefetch request, because they do not affect the structure of\n // the route. The client cache has its own logic to handle search params.\n const searchParams = {}\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n"],"names":["PrefetchHint","propagateSubtreeBits","addSearchParamsIfPageSegment","createFlightRouterStateFromLoaderTreeImpl","loaderTree","hintTree","prefetchInliningEnabled","cacheComponents","partialPrefetching","isStaticGeneration","isBuildTimePrerendering","getDynamicParamFromSegment","searchParams","didFindRootLayout","segment","parallelRoutes","layout","loading","page","dynamicParam","treeSegment","segmentTree","mod","undefined","instantConfig","instant","prefetchConfig","prefetch","prefetchHints","hints","InliningHintsStale","PrefetchDisabled","IsRootLayoutOrAbove","isInstant","SubtreeHasPartialPrefetching","SubtreeHasInstantFalse","SubtreeHasEagerPrefetch","HasRuntimePrefetch","SegmentHasLoadingBoundary","children","parallelRouteKey","childHintNode","slots","child","createFlightRouterStateFromLoaderTree","createRouteTreePrefetch"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/app-render/create-flight-router-state-from-loader-tree.ts"],"sourcesContent":["import type { LoaderTree } from '../lib/app-dir-module'\nimport {\n PrefetchHint,\n propagateSubtreeBits,\n type FlightRouterState,\n type PrefetchHints,\n} from '../../shared/lib/app-router-types'\nimport type { GetDynamicParamFromSegment } from './app-render'\nimport { addSearchParamsIfPageSegment } from '../../shared/lib/segment'\nimport type { AppSegmentConfig } from '../../build/segment-config/app/app-segment-config'\n\nasync function createFlightRouterStateFromLoaderTreeImpl(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n didFindRootLayout: boolean\n): Promise<FlightRouterState> {\n const [segment, parallelRoutes, { layout, loading, page }] = loaderTree\n const dynamicParam = getDynamicParamFromSegment(loaderTree)\n const treeSegment = dynamicParam ? dynamicParam.treeSegment : segment\n\n const segmentTree: FlightRouterState = [\n addSearchParamsIfPageSegment(treeSegment, searchParams),\n {},\n ]\n\n // Load the layout or page module to check its instant and prefetch\n // configs. When a segment doesn't export prefetch, it defaults to\n // 'partial' if the app has opted into partial prefetching globally via the\n // `partialPrefetching` config in next.config.js.\n const mod = layout ? await layout[0]() : page ? await page[0]() : undefined\n const instantConfig = mod ? (mod as AppSegmentConfig).instant : undefined\n const prefetchConfig =\n (mod ? (mod as AppSegmentConfig).prefetch : undefined) ??\n (partialPrefetching === 'unstable_eager'\n ? 'unstable_eager'\n : partialPrefetching\n ? 'partial'\n : undefined)\n let prefetchHints = 0\n\n // Union in the precomputed build-time hints (e.g. segment inlining\n // decisions) if available. When hints are not available (e.g. dev mode or\n // if prefetch-hints.json was not generated), we fall through and still\n // compute the other hints below. In the future this should be a build\n // error, but for now we gracefully degrade.\n //\n // TODO: Move more of the hints computation (IsRootLayoutOrAbove, instant config,\n // loading boundary detection) into the build-time measurement step in\n // collectPrefetchHints, so this function only needs to union the\n // precomputed bitmask rather than re-derive hints on every render.\n if (hintTree !== null) {\n prefetchHints |= hintTree.hints\n } else if (prefetchInliningEnabled) {\n if (isBuildTimePrerendering) {\n // Prefetch inlining is enabled but no hint tree was provided during a\n // build-time prerender. This happens for the initial RSC payload\n // generated before collectPrefetchHints has run. Mark so the client\n // can expire the route cache entry and re-fetch the tree with correct\n // hints.\n prefetchHints |= PrefetchHint.InliningHintsStale\n } else if (isStaticGeneration) {\n // TODO(#91407): Temporary mitigation: when hints are missing during\n // runtime static generation, fall back to treating every segment as\n // unprefetchable. This currently happens for routes with\n // `instant = false` at the root segment, which causes the prerender\n // to run per-request instead of being cached, and the prefetch hints\n // manifest is not available.\n //\n // Once that bug is fixed, this branch should become an error again —\n // hints should always be available from the manifest during ISR.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (cacheComponents) {\n // At runtime with no hint tree, this is a fully dynamic route with no\n // manifest entry. Treat every segment as unprefetchable. Do NOT set\n // InliningHintsStale — that would cause the client to enter an\n // infinite re-fetch loop trying to get hints that will never exist.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else {\n // Without cacheComponents, dynamic pages have no static shell so\n // hints are never computed. Don't disable prefetching — just skip\n // the inlining hint system and let prefetching proceed normally.\n }\n }\n\n // Mark every segment at or above the root layout (i.e. until we descend past\n // the first segment that has a layout).\n if (!didFindRootLayout) {\n prefetchHints |= PrefetchHint.IsRootLayoutOrAbove\n if (typeof layout !== 'undefined') {\n // This segment is the root layout; its descendants are below it.\n didFindRootLayout = true\n }\n }\n\n const isInstant =\n instantConfig === true ||\n (typeof instantConfig === 'object' && instantConfig !== null)\n if (isInstant) {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (instantConfig === false) {\n // The segment explicitly opts out of Partial Prefetching. We don't change\n // the prefetch behavior, but we record it so the dev-time\n // `<Link prefetch={true}>` warning can be suppressed for this route.\n prefetchHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n\n if (prefetchConfig === 'partial') {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (prefetchConfig === 'unstable_eager') {\n // Like 'partial' (uses the PPR fetch strategy) but also marks the segment\n // as eager, so App Shells keeps prefetching it instead of relying on the\n // shared app shell.\n prefetchHints |=\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasEagerPrefetch\n } else if (prefetchConfig === 'force-disabled') {\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (prefetchConfig === 'allow-runtime') {\n // 'allow-runtime' participates in the two-phase (Shell then Speculative)\n // prefetch flow, so it counts as Partial Prefetching. HasRuntimePrefetch\n // additionally marks it as needing a runtime request pass.\n prefetchHints |=\n PrefetchHint.HasRuntimePrefetch |\n PrefetchHint.SubtreeHasPartialPrefetching\n }\n\n // Mark the segment as \"eager\" unless its effective prefetch strategy is\n // 'partial' or 'allow-runtime'. A truthy instant is treated as\n // 'partial' (not eager). 'unstable_eager' already set the bit above. Under\n // App Shells, a subtree with no eager segment skips its Speculative prefetch\n // and relies on the shared app shell instead.\n if (\n !isInstant &&\n prefetchConfig !== 'partial' &&\n prefetchConfig !== 'allow-runtime'\n ) {\n prefetchHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n\n // Check if this segment has a loading boundary\n if (loading) {\n prefetchHints |= PrefetchHint.SegmentHasLoadingBoundary\n }\n\n const children: FlightRouterState[1] = {}\n for (const parallelRouteKey in parallelRoutes) {\n // Look up the child hint node by parallel route key, traversing the\n // hint tree in parallel with the loader tree.\n const childHintNode = hintTree?.slots?.[parallelRouteKey] ?? null\n\n const child = await createFlightRouterStateFromLoaderTreeImpl(\n parallelRoutes[parallelRouteKey],\n childHintNode,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n // Propagate subtree flags from children\n if (child[4] !== undefined) {\n prefetchHints = propagateSubtreeBits(prefetchHints, child[4])\n }\n children[parallelRouteKey] = child\n }\n segmentTree[1] = children\n\n if (prefetchHints !== 0) {\n segmentTree[4] = prefetchHints\n }\n\n return segmentTree\n}\n\nexport async function createFlightRouterStateFromLoaderTree(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n // Whether a root layout was already found above this loader tree slice, so a\n // slice that starts below the root layout doesn't mark a sub-layout as the\n // root layout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n\nexport async function createRouteTreePrefetch(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n // See note on createFlightRouterStateFromLoaderTree's didFindRootLayout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n // Search params should not be added to page segment's cache key during a\n // route tree prefetch request, because they do not affect the structure of\n // the route. The client cache has its own logic to handle search params.\n const searchParams = {}\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n"],"names":["PrefetchHint","propagateSubtreeBits","addSearchParamsIfPageSegment","createFlightRouterStateFromLoaderTreeImpl","loaderTree","hintTree","prefetchInliningEnabled","cacheComponents","partialPrefetching","isStaticGeneration","isBuildTimePrerendering","getDynamicParamFromSegment","searchParams","didFindRootLayout","segment","parallelRoutes","layout","loading","page","dynamicParam","treeSegment","segmentTree","mod","undefined","instantConfig","instant","prefetchConfig","prefetch","prefetchHints","hints","InliningHintsStale","PrefetchDisabled","IsRootLayoutOrAbove","isInstant","SubtreeHasPartialPrefetching","SubtreeHasInstantFalse","SubtreeHasEagerPrefetch","HasRuntimePrefetch","SegmentHasLoadingBoundary","children","parallelRouteKey","childHintNode","slots","child","createFlightRouterStateFromLoaderTree","createRouteTreePrefetch"],"mappings":"AACA,SACEA,YAAY,EACZC,oBAAoB,QAGf,oCAAmC;AAE1C,SAASC,4BAA4B,QAAQ,2BAA0B;AAGvE,eAAeC,0CACbC,UAAsB,EACtBC,QAA8B,EAC9BC,uBAAgC,EAChCC,eAAwB,EACxBC,kBAA0D,EAC1DC,kBAA2B,EAC3BC,uBAAgC,EAChCC,0BAAsD,EACtDC,YAAiB,EACjBC,iBAA0B;IAE1B,MAAM,CAACC,SAASC,gBAAgB,EAAEC,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,CAAC,GAAGd;IAC7D,MAAMe,eAAeR,2BAA2BP;IAChD,MAAMgB,cAAcD,eAAeA,aAAaC,WAAW,GAAGN;IAE9D,MAAMO,cAAiC;QACrCnB,6BAA6BkB,aAAaR;QAC1C,CAAC;KACF;IAED,mEAAmE;IACnE,kEAAkE;IAClE,2EAA2E;IAC3E,iDAAiD;IACjD,MAAMU,MAAMN,SAAS,MAAMA,MAAM,CAAC,EAAE,KAAKE,OAAO,MAAMA,IAAI,CAAC,EAAE,KAAKK;IAClE,MAAMC,gBAAgBF,MAAM,AAACA,IAAyBG,OAAO,GAAGF;IAChE,MAAMG,iBACJ,AAACJ,CAAAA,MAAM,AAACA,IAAyBK,QAAQ,GAAGJ,SAAQ,KACnDf,CAAAA,uBAAuB,mBACpB,mBACAA,qBACE,YACAe,SAAQ;IAChB,IAAIK,gBAAgB;IAEpB,mEAAmE;IACnE,0EAA0E;IAC1E,uEAAuE;IACvE,sEAAsE;IACtE,4CAA4C;IAC5C,EAAE;IACF,iFAAiF;IACjF,sEAAsE;IACtE,iEAAiE;IACjE,mEAAmE;IACnE,IAAIvB,aAAa,MAAM;QACrBuB,iBAAiBvB,SAASwB,KAAK;IACjC,OAAO,IAAIvB,yBAAyB;QAClC,IAAII,yBAAyB;YAC3B,sEAAsE;YACtE,iEAAiE;YACjE,oEAAoE;YACpE,sEAAsE;YACtE,SAAS;YACTkB,iBAAiB5B,aAAa8B,kBAAkB;QAClD,OAAO,IAAIrB,oBAAoB;YAC7B,oEAAoE;YACpE,oEAAoE;YACpE,yDAAyD;YACzD,oEAAoE;YACpE,qEAAqE;YACrE,6BAA6B;YAC7B,EAAE;YACF,qEAAqE;YACrE,iEAAiE;YACjEmB,iBAAiB5B,aAAa+B,gBAAgB;QAChD,OAAO,IAAIxB,iBAAiB;YAC1B,sEAAsE;YACtE,oEAAoE;YACpE,+DAA+D;YAC/D,oEAAoE;YACpEqB,iBAAiB5B,aAAa+B,gBAAgB;QAChD,OAAO;QACL,iEAAiE;QACjE,kEAAkE;QAClE,iEAAiE;QACnE;IACF;IAEA,6EAA6E;IAC7E,wCAAwC;IACxC,IAAI,CAAClB,mBAAmB;QACtBe,iBAAiB5B,aAAagC,mBAAmB;QACjD,IAAI,OAAOhB,WAAW,aAAa;YACjC,iEAAiE;YACjEH,oBAAoB;QACtB;IACF;IAEA,MAAMoB,YACJT,kBAAkB,QACjB,OAAOA,kBAAkB,YAAYA,kBAAkB;IAC1D,IAAIS,WAAW;QACbL,iBAAiB5B,aAAakC,4BAA4B;IAC5D,OAAO,IAAIV,kBAAkB,OAAO;QAClC,0EAA0E;QAC1E,0DAA0D;QAC1D,qEAAqE;QACrEI,iBAAiB5B,aAAamC,sBAAsB;IACtD;IAEA,IAAIT,mBAAmB,WAAW;QAChCE,iBAAiB5B,aAAakC,4BAA4B;IAC5D,OAAO,IAAIR,mBAAmB,kBAAkB;QAC9C,0EAA0E;QAC1E,yEAAyE;QACzE,oBAAoB;QACpBE,iBACE5B,aAAakC,4BAA4B,GACzClC,aAAaoC,uBAAuB;IACxC,OAAO,IAAIV,mBAAmB,kBAAkB;QAC9CE,iBAAiB5B,aAAa+B,gBAAgB;IAChD,OAAO,IAAIL,mBAAmB,iBAAiB;QAC7C,yEAAyE;QACzE,yEAAyE;QACzE,2DAA2D;QAC3DE,iBACE5B,aAAaqC,kBAAkB,GAC/BrC,aAAakC,4BAA4B;IAC7C;IAEA,wEAAwE;IACxE,+DAA+D;IAC/D,2EAA2E;IAC3E,6EAA6E;IAC7E,8CAA8C;IAC9C,IACE,CAACD,aACDP,mBAAmB,aACnBA,mBAAmB,iBACnB;QACAE,iBAAiB5B,aAAaoC,uBAAuB;IACvD;IAEA,+CAA+C;IAC/C,IAAInB,SAAS;QACXW,iBAAiB5B,aAAasC,yBAAyB;IACzD;IAEA,MAAMC,WAAiC,CAAC;IACxC,IAAK,MAAMC,oBAAoBzB,eAAgB;YAGvBV;QAFtB,oEAAoE;QACpE,8CAA8C;QAC9C,MAAMoC,gBAAgBpC,CAAAA,6BAAAA,kBAAAA,SAAUqC,KAAK,qBAAfrC,eAAiB,CAACmC,iBAAiB,KAAI;QAE7D,MAAMG,QAAQ,MAAMxC,0CAClBY,cAAc,CAACyB,iBAAiB,EAChCC,eACAnC,yBACAC,iBACAC,oBACAC,oBACAC,yBACAC,4BACAC,cACAC;QAEF,wCAAwC;QACxC,IAAI8B,KAAK,CAAC,EAAE,KAAKpB,WAAW;YAC1BK,gBAAgB3B,qBAAqB2B,eAAee,KAAK,CAAC,EAAE;QAC9D;QACAJ,QAAQ,CAACC,iBAAiB,GAAGG;IAC/B;IACAtB,WAAW,CAAC,EAAE,GAAGkB;IAEjB,IAAIX,kBAAkB,GAAG;QACvBP,WAAW,CAAC,EAAE,GAAGO;IACnB;IAEA,OAAOP;AACT;AAEA,OAAO,eAAeuB,sCACpBxC,UAAsB,EACtBC,QAA8B,EAC9BC,uBAAgC,EAChCC,eAAwB,EACxBC,kBAA0D,EAC1DC,kBAA2B,EAC3BC,uBAAgC,EAChCC,0BAAsD,EACtDC,YAAiB,EACjB,6EAA6E;AAC7E,2EAA2E;AAC3E,eAAe;AACfC,oBAA6B,KAAK;IAElC,OAAOV,0CACLC,YACAC,UACAC,yBACAC,iBACAC,oBACAC,oBACAC,yBACAC,4BACAC,cACAC;AAEJ;AAEA,OAAO,eAAegC,wBACpBzC,UAAsB,EACtBC,QAA8B,EAC9BC,uBAAgC,EAChCC,eAAwB,EACxBC,kBAA0D,EAC1DC,kBAA2B,EAC3BC,uBAAgC,EAChCC,0BAAsD,EACtD,yEAAyE;AACzEE,oBAA6B,KAAK;IAElC,yEAAyE;IACzE,2EAA2E;IAC3E,yEAAyE;IACzE,MAAMD,eAAe,CAAC;IACtB,OAAOT,0CACLC,YACAC,UACAC,yBACAC,iBACAC,oBACAC,oBACAC,yBACAC,4BACAC,cACAC;AAEJ","ignoreList":[0]} |
@@ -513,3 +513,3 @@ import { jsx as _jsx } from "react/jsx-runtime"; | ||
| // Speculative = 2, | ||
| /** Pre-appShells behavior. */ ValidationPrefetchKind[ValidationPrefetchKind["LegacySpeculative"] = 3] = "LegacySpeculative"; | ||
| /** Behavior when Partial Prefetching is not enabled. */ ValidationPrefetchKind[ValidationPrefetchKind["LegacySpeculative"] = 3] = "LegacySpeculative"; | ||
| return ValidationPrefetchKind; | ||
@@ -516,0 +516,0 @@ }({}); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/app-render/types.ts"],"sourcesContent":["import type { LoadComponentsReturnType } from '../load-components'\nimport type { ServerRuntime, SizeLimit } from '../../types'\nimport type {\n ExperimentalConfig,\n NextConfigComplete,\n PrefetchInliningConfig,\n ValidationLevel,\n} from '../../server/config-shared'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { AppPageModule } from '../route-modules/app-page/module'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport type { ImageConfigComplete } from '../../shared/lib/image-config'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport s from 'next/dist/compiled/superstruct'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { InstrumentationOnRequestError } from '../instrumentation/types'\nimport type { NextRequestHint } from '../web/adapter'\nimport type { BaseNextRequest } from '../base-http'\nimport type { IncomingMessage } from 'http'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\nimport type { ServerCacheStatus } from '../../next-devtools/dev-overlay/cache-indicator'\nimport type { PrefetchHints } from '../../shared/lib/app-router-types'\nimport type { AnyStream } from './stream-ops'\n\nconst dynamicParamTypesSchema = s.enums([\n 'c',\n 'ci(..)(..)',\n 'ci(.)',\n 'ci(..)',\n 'ci(...)',\n 'oc',\n 'd',\n 'di(..)(..)',\n 'di(.)',\n 'di(..)',\n 'di(...)',\n])\n\nconst segmentSchema = s.union([\n s.string(),\n\n s.tuple([\n // Param name\n s.string(),\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n s.string(),\n // Dynamic param type\n dynamicParamTypesSchema,\n // Static siblings at the same URL level. Used by the client router to\n // determine if a prefetch can be reused when navigating to a static\n // sibling of a dynamic route. null means siblings are unknown.\n s.nullable(s.array(s.string())),\n ]),\n])\n\n// unfortunately the tuple is not understood well by Describe so we have to\n// use any here. This does not have any impact on the runtime type since the validation\n// does work correctly.\nexport const flightRouterStateSchema: s.Describe<any> = s.tuple([\n segmentSchema,\n s.record(\n s.string(),\n s.lazy(() => flightRouterStateSchema)\n ),\n s.optional(s.nullable(s.tuple([s.string(), s.string()]))),\n s.optional(\n s.nullable(\n s.union([\n s.literal('refetch'),\n s.literal('inside-shared-layout'),\n s.literal('metadata-only'),\n ])\n )\n ),\n s.optional(s.number()),\n])\n\nexport type ServerOnInstrumentationRequestError = (\n error: unknown,\n // The request could be middleware, node server or web server request,\n // we normalized them into an aligned format to `onRequestError` API later.\n request: NextRequestHint | BaseNextRequest | IncomingMessage,\n errorContext: Parameters<InstrumentationOnRequestError>[2],\n silenceLog: boolean\n) => void | Promise<void>\n\nexport interface RenderOptsPartial {\n dir?: string\n previewProps: __ApiPreviewProps | undefined\n err?: Error | null\n basePath: string\n cacheComponents: boolean\n partialPrefetching?: NextConfigComplete['partialPrefetching']\n validationLevel: ValidationLevel\n trailingSlash: boolean\n images: ImageConfigComplete\n supportsDynamicResponse: boolean\n runtime?: ServerRuntime\n serverComponents?: boolean\n enableTainting?: boolean\n assetPrefix?: string\n crossOrigin?: '' | 'anonymous' | 'use-credentials' | undefined\n nextFontManifest?: DeepReadonly<NextFontManifest>\n botType?: 'dom' | 'html' | undefined\n serveStreamingMetadata?: boolean\n incrementalCache?: import('../lib/incremental-cache').IncrementalCache\n cacheLifeProfiles: import('../config-shared').ResolvedCacheLifeProfiles\n staticPageGenerationTimeout: number\n isOnDemandRevalidate?: boolean\n isPossibleServerAction?: boolean\n setCacheStatus?: (status: ServerCacheStatus, htmlRequestId: string) => void\n setIsrStatus?: (key: string, value: boolean | undefined) => void\n setReactDebugChannel?: (\n debugChannel: { readable: AnyStream },\n htmlRequestId: string,\n requestId: string\n ) => void\n sendErrorsToBrowser?: (\n errorsRscStream: AnyStream,\n htmlRequestId: string\n ) => void\n isBuildTimePrerendering?: boolean\n nextConfigOutput?: 'standalone' | 'export'\n onInstrumentationRequestError?: ServerOnInstrumentationRequestError\n isDraftMode?: boolean\n onUpdateCookies?: (cookies: string[]) => void\n loadConfig?: (\n phase: string,\n dir: string,\n customConfig?: object | null,\n rawConfig?: boolean,\n silent?: boolean\n ) => Promise<NextConfigComplete>\n serverActions?: {\n bodySizeLimit?: SizeLimit\n allowedOrigins?: string[]\n }\n logServerFunctions?: boolean\n params?: ParsedUrlQuery\n isPrefetch?: boolean\n htmlLimitedBots: string | undefined\n experimental: {\n /**\n * When true, it indicates that the current page supports partial\n * prerendering.\n */\n isRoutePPREnabled?: boolean\n expireTime: number | undefined\n staleTimes: ExperimentalConfig['staleTimes'] | undefined\n clientTraceMetadata: string[] | undefined\n\n /**\n * The origins that are allowed to write the rewritten headers when\n * performing a non-relative rewrite. When undefined, no non-relative\n * rewrites will get the rewrite headers.\n */\n clientParamParsingOrigins: string[] | undefined\n dynamicOnHover: boolean\n optimisticRouting: boolean\n inlineCss: boolean\n prefetchInlining: PrefetchInliningConfig\n authInterrupts: boolean\n serverComponentsHmrCancellation?: boolean\n useCacheTimeout: number\n cachedNavigations: boolean | 'allow-runtime'\n appShells: ExperimentalConfig['appShells']\n\n /**\n * The maximum size (in bytes) of the postponed state body for PPR resume\n * requests. Used to calculate decompression limits (5x this value).\n */\n maxPostponedStateSizeBytes: number | undefined\n\n /**\n * Whether the Instant Navigation Testing API is exposed (dev mode or the\n * `exposeTestingApiInProductionBuild` flag). When true, the prerendered\n * shell and dynamic renders embed a cookie-guarded bootstrap script that\n * drives instant navigation tests.\n */\n exposeTestingApi: boolean\n }\n postponed?: string\n\n /**\n * Should wait for react stream allReady to resolve all suspense boundaries,\n * in order to perform a full page render.\n */\n shouldWaitOnAllReady?: boolean\n\n /**\n * A prefilled resume data cache. This was either generated for this page\n * during dev warmup, or when a page with defined params was previously\n * prerendered, and now its matching optional fallback shell is prerendered.\n */\n renderResumeDataCache?: RenderResumeDataCache\n\n /**\n * When true, the page will be rendered using the static rendering to detect\n * any dynamic API's that would have stopped the page from being fully\n * statically generated.\n */\n isDebugDynamicAccesses?: boolean\n\n /**\n /**\n * The maximum length of the headers that are emitted by React and added to\n * the response.\n */\n reactMaxHeadersLength: number | undefined\n\n /**\n * Per-route prefetch hints from prefetch-hints.json.\n * Loaded at server startup from the build output.\n */\n prefetchHints?: Record<string, PrefetchHints>\n\n isStaticGeneration?: boolean\n\n /**\n * When true, the page is prerendered as a fallback shell, while allowing any\n * dynamic accesses to result in an empty shell. This is the case when there\n * are also routes prerendered with a more complete set of params.\n * Prerendering those routes would catch any invalid dynamic accesses.\n */\n allowEmptyStaticShell?: boolean\n\n /**\n * When true, attempt to run build-time instant validation for this prerender.\n * Only the first prerender per page sets this, since validation uses\n * instant.unstable_samples and is independent of actual route params.\n */\n runInstantValidation?: boolean\n\n /**\n * When true, a fallback shell produced for this render could later be\n * upgraded to a concrete version (at least one of its fallback params is a\n * candidate enumerated by `generateStaticParams`). Only such shells are\n * flagged `isUpgradeableISRFallback` so the client retries the prefetch; a route that\n * can never upgrade (no `generateStaticParams`) is left unflagged.\n */\n isFallbackUpgradeable?: boolean\n}\n\nexport type RenderOpts = LoadComponentsReturnType<AppPageModule> &\n RenderOptsPartial &\n RequestLifecycleOpts\n\nexport type PreloadCallbacks = (() => void)[]\n"],"names":["s","dynamicParamTypesSchema","enums","segmentSchema","union","string","tuple","nullable","array","flightRouterStateSchema","record","lazy","optional","literal","number"],"mappings":"AAeA,OAAOA,OAAO,iCAAgC;AAW9C,MAAMC,0BAA0BD,EAAEE,KAAK,CAAC;IACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,gBAAgBH,EAAEI,KAAK,CAAC;IAC5BJ,EAAEK,MAAM;IAERL,EAAEM,KAAK,CAAC;QACN,aAAa;QACbN,EAAEK,MAAM;QACR,gEAAgE;QAChE,6BAA6B;QAC7B,yEAAyE;QACzE,oEAAoE;QACpE,qEAAqE;QACrE,2CAA2C;QAC3CL,EAAEK,MAAM;QACR,qBAAqB;QACrBJ;QACA,sEAAsE;QACtE,oEAAoE;QACpE,+DAA+D;QAC/DD,EAAEO,QAAQ,CAACP,EAAEQ,KAAK,CAACR,EAAEK,MAAM;KAC5B;CACF;AAED,2EAA2E;AAC3E,uFAAuF;AACvF,uBAAuB;AACvB,OAAO,MAAMI,0BAA2CT,EAAEM,KAAK,CAAC;IAC9DH;IACAH,EAAEU,MAAM,CACNV,EAAEK,MAAM,IACRL,EAAEW,IAAI,CAAC,IAAMF;IAEfT,EAAEY,QAAQ,CAACZ,EAAEO,QAAQ,CAACP,EAAEM,KAAK,CAAC;QAACN,EAAEK,MAAM;QAAIL,EAAEK,MAAM;KAAG;IACtDL,EAAEY,QAAQ,CACRZ,EAAEO,QAAQ,CACRP,EAAEI,KAAK,CAAC;QACNJ,EAAEa,OAAO,CAAC;QACVb,EAAEa,OAAO,CAAC;QACVb,EAAEa,OAAO,CAAC;KACX;IAGLb,EAAEY,QAAQ,CAACZ,EAAEc,MAAM;CACpB,EAAC","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/app-render/types.ts"],"sourcesContent":["import type { LoadComponentsReturnType } from '../load-components'\nimport type { ServerRuntime, SizeLimit } from '../../types'\nimport type {\n ExperimentalConfig,\n NextConfigComplete,\n PrefetchInliningConfig,\n ValidationLevel,\n} from '../../server/config-shared'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { AppPageModule } from '../route-modules/app-page/module'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport type { ImageConfigComplete } from '../../shared/lib/image-config'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport s from 'next/dist/compiled/superstruct'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { InstrumentationOnRequestError } from '../instrumentation/types'\nimport type { NextRequestHint } from '../web/adapter'\nimport type { BaseNextRequest } from '../base-http'\nimport type { IncomingMessage } from 'http'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\nimport type { ServerCacheStatus } from '../../next-devtools/dev-overlay/cache-indicator'\nimport type { PrefetchHints } from '../../shared/lib/app-router-types'\nimport type { AnyStream } from './stream-ops'\n\nconst dynamicParamTypesSchema = s.enums([\n 'c',\n 'ci(..)(..)',\n 'ci(.)',\n 'ci(..)',\n 'ci(...)',\n 'oc',\n 'd',\n 'di(..)(..)',\n 'di(.)',\n 'di(..)',\n 'di(...)',\n])\n\nconst segmentSchema = s.union([\n s.string(),\n\n s.tuple([\n // Param name\n s.string(),\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n s.string(),\n // Dynamic param type\n dynamicParamTypesSchema,\n // Static siblings at the same URL level. Used by the client router to\n // determine if a prefetch can be reused when navigating to a static\n // sibling of a dynamic route. null means siblings are unknown.\n s.nullable(s.array(s.string())),\n ]),\n])\n\n// unfortunately the tuple is not understood well by Describe so we have to\n// use any here. This does not have any impact on the runtime type since the validation\n// does work correctly.\nexport const flightRouterStateSchema: s.Describe<any> = s.tuple([\n segmentSchema,\n s.record(\n s.string(),\n s.lazy(() => flightRouterStateSchema)\n ),\n s.optional(s.nullable(s.tuple([s.string(), s.string()]))),\n s.optional(\n s.nullable(\n s.union([\n s.literal('refetch'),\n s.literal('inside-shared-layout'),\n s.literal('metadata-only'),\n ])\n )\n ),\n s.optional(s.number()),\n])\n\nexport type ServerOnInstrumentationRequestError = (\n error: unknown,\n // The request could be middleware, node server or web server request,\n // we normalized them into an aligned format to `onRequestError` API later.\n request: NextRequestHint | BaseNextRequest | IncomingMessage,\n errorContext: Parameters<InstrumentationOnRequestError>[2],\n silenceLog: boolean\n) => void | Promise<void>\n\nexport interface RenderOptsPartial {\n dir?: string\n previewProps: __ApiPreviewProps | undefined\n err?: Error | null\n basePath: string\n cacheComponents: boolean\n partialPrefetching?: NextConfigComplete['partialPrefetching']\n validationLevel: ValidationLevel\n trailingSlash: boolean\n images: ImageConfigComplete\n supportsDynamicResponse: boolean\n runtime?: ServerRuntime\n serverComponents?: boolean\n enableTainting?: boolean\n assetPrefix?: string\n crossOrigin?: '' | 'anonymous' | 'use-credentials' | undefined\n nextFontManifest?: DeepReadonly<NextFontManifest>\n botType?: 'dom' | 'html' | undefined\n serveStreamingMetadata?: boolean\n incrementalCache?: import('../lib/incremental-cache').IncrementalCache\n cacheLifeProfiles: import('../config-shared').ResolvedCacheLifeProfiles\n staticPageGenerationTimeout: number\n isOnDemandRevalidate?: boolean\n isPossibleServerAction?: boolean\n setCacheStatus?: (status: ServerCacheStatus, htmlRequestId: string) => void\n setIsrStatus?: (key: string, value: boolean | undefined) => void\n setReactDebugChannel?: (\n debugChannel: { readable: AnyStream },\n htmlRequestId: string,\n requestId: string\n ) => void\n sendErrorsToBrowser?: (\n errorsRscStream: AnyStream,\n htmlRequestId: string\n ) => void\n isBuildTimePrerendering?: boolean\n nextConfigOutput?: 'standalone' | 'export'\n onInstrumentationRequestError?: ServerOnInstrumentationRequestError\n isDraftMode?: boolean\n onUpdateCookies?: (cookies: string[]) => void\n loadConfig?: (\n phase: string,\n dir: string,\n customConfig?: object | null,\n rawConfig?: boolean,\n silent?: boolean\n ) => Promise<NextConfigComplete>\n serverActions?: {\n bodySizeLimit?: SizeLimit\n allowedOrigins?: string[]\n }\n logServerFunctions?: boolean\n params?: ParsedUrlQuery\n isPrefetch?: boolean\n htmlLimitedBots: string | undefined\n experimental: {\n /**\n * When true, it indicates that the current page supports partial\n * prerendering.\n */\n isRoutePPREnabled?: boolean\n expireTime: number | undefined\n staleTimes: ExperimentalConfig['staleTimes'] | undefined\n clientTraceMetadata: string[] | undefined\n\n /**\n * The origins that are allowed to write the rewritten headers when\n * performing a non-relative rewrite. When undefined, no non-relative\n * rewrites will get the rewrite headers.\n */\n clientParamParsingOrigins: string[] | undefined\n dynamicOnHover: boolean\n optimisticRouting: boolean\n inlineCss: boolean\n prefetchInlining: PrefetchInliningConfig\n authInterrupts: boolean\n serverComponentsHmrCancellation?: boolean\n useCacheTimeout: number\n cachedNavigations: boolean | 'allow-runtime'\n\n /**\n * The maximum size (in bytes) of the postponed state body for PPR resume\n * requests. Used to calculate decompression limits (5x this value).\n */\n maxPostponedStateSizeBytes: number | undefined\n\n /**\n * Whether the Instant Navigation Testing API is exposed (dev mode or the\n * `exposeTestingApiInProductionBuild` flag). When true, the prerendered\n * shell and dynamic renders embed a cookie-guarded bootstrap script that\n * drives instant navigation tests.\n */\n exposeTestingApi: boolean\n }\n postponed?: string\n\n /**\n * Should wait for react stream allReady to resolve all suspense boundaries,\n * in order to perform a full page render.\n */\n shouldWaitOnAllReady?: boolean\n\n /**\n * A prefilled resume data cache. This was either generated for this page\n * during dev warmup, or when a page with defined params was previously\n * prerendered, and now its matching optional fallback shell is prerendered.\n */\n renderResumeDataCache?: RenderResumeDataCache\n\n /**\n * When true, the page will be rendered using the static rendering to detect\n * any dynamic API's that would have stopped the page from being fully\n * statically generated.\n */\n isDebugDynamicAccesses?: boolean\n\n /**\n /**\n * The maximum length of the headers that are emitted by React and added to\n * the response.\n */\n reactMaxHeadersLength: number | undefined\n\n /**\n * Per-route prefetch hints from prefetch-hints.json.\n * Loaded at server startup from the build output.\n */\n prefetchHints?: Record<string, PrefetchHints>\n\n isStaticGeneration?: boolean\n\n /**\n * When true, the page is prerendered as a fallback shell, while allowing any\n * dynamic accesses to result in an empty shell. This is the case when there\n * are also routes prerendered with a more complete set of params.\n * Prerendering those routes would catch any invalid dynamic accesses.\n */\n allowEmptyStaticShell?: boolean\n\n /**\n * When true, attempt to run build-time instant validation for this prerender.\n * Only the first prerender per page sets this, since validation uses\n * instant.unstable_samples and is independent of actual route params.\n */\n runInstantValidation?: boolean\n\n /**\n * When true, a fallback shell produced for this render could later be\n * upgraded to a concrete version (at least one of its fallback params is a\n * candidate enumerated by `generateStaticParams`). Only such shells are\n * flagged `isUpgradeableISRFallback` so the client retries the prefetch; a route that\n * can never upgrade (no `generateStaticParams`) is left unflagged.\n */\n isFallbackUpgradeable?: boolean\n}\n\nexport type RenderOpts = LoadComponentsReturnType<AppPageModule> &\n RenderOptsPartial &\n RequestLifecycleOpts\n\nexport type PreloadCallbacks = (() => void)[]\n"],"names":["s","dynamicParamTypesSchema","enums","segmentSchema","union","string","tuple","nullable","array","flightRouterStateSchema","record","lazy","optional","literal","number"],"mappings":"AAeA,OAAOA,OAAO,iCAAgC;AAW9C,MAAMC,0BAA0BD,EAAEE,KAAK,CAAC;IACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,gBAAgBH,EAAEI,KAAK,CAAC;IAC5BJ,EAAEK,MAAM;IAERL,EAAEM,KAAK,CAAC;QACN,aAAa;QACbN,EAAEK,MAAM;QACR,gEAAgE;QAChE,6BAA6B;QAC7B,yEAAyE;QACzE,oEAAoE;QACpE,qEAAqE;QACrE,2CAA2C;QAC3CL,EAAEK,MAAM;QACR,qBAAqB;QACrBJ;QACA,sEAAsE;QACtE,oEAAoE;QACpE,+DAA+D;QAC/DD,EAAEO,QAAQ,CAACP,EAAEQ,KAAK,CAACR,EAAEK,MAAM;KAC5B;CACF;AAED,2EAA2E;AAC3E,uFAAuF;AACvF,uBAAuB;AACvB,OAAO,MAAMI,0BAA2CT,EAAEM,KAAK,CAAC;IAC9DH;IACAH,EAAEU,MAAM,CACNV,EAAEK,MAAM,IACRL,EAAEW,IAAI,CAAC,IAAMF;IAEfT,EAAEY,QAAQ,CAACZ,EAAEO,QAAQ,CAACP,EAAEM,KAAK,CAAC;QAACN,EAAEK,MAAM;QAAIL,EAAEK,MAAM;KAAG;IACtDL,EAAEY,QAAQ,CACRZ,EAAEO,QAAQ,CACRP,EAAEI,KAAK,CAAC;QACNJ,EAAEa,OAAO,CAAC;QACVb,EAAEa,OAAO,CAAC;QACVb,EAAEa,OAAO,CAAC;KACX;IAGLb,EAAEY,QAAQ,CAACZ,EAAEc,MAAM;CACpB,EAAC","ignoreList":[0]} |
@@ -209,3 +209,2 @@ import { VALID_LOADERS } from '../shared/lib/image-config'; | ||
| instrumentationClientRouterTransitionEvents: z.boolean().optional(), | ||
| appShells: z.boolean().optional(), | ||
| varyParams: z.boolean().optional(), | ||
@@ -382,2 +381,3 @@ prefetchInlining: z.union([ | ||
| turbopackGenerateComponentChunks: z.boolean().optional(), | ||
| turbopackSharedRuntime: z.boolean().optional(), | ||
| turbopackChunkingHeuristics: z.object({ | ||
@@ -384,0 +384,0 @@ firstPageLoadPriority: z.number().min(0).max(1).optional(), |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/server/config-schema.ts"],"sourcesContent":["import type { NextConfig } from './config'\nimport { VALID_LOADERS } from '../shared/lib/image-config'\n\nimport { z } from 'next/dist/compiled/zod'\nimport type zod from 'next/dist/compiled/zod'\n\nimport type { SizeLimit } from '../types'\nimport {\n LIGHTNINGCSS_FEATURE_NAMES,\n type ExportPathMap,\n type TurbopackLoaderItem,\n type TurbopackOptions,\n type TurbopackRuleConfigItem,\n type TurbopackRuleConfigCollection,\n type TurbopackRuleCondition,\n type TurbopackLoaderBuiltinCondition,\n} from './config-shared'\nimport type {\n Header,\n Rewrite,\n RouteHas,\n Redirect,\n} from '../lib/load-custom-routes'\nimport { SUPPORTED_TEST_RUNNERS_LIST } from '../cli/next-test'\n\n// A custom zod schema for the SizeLimit type\nconst zSizeLimit = z.custom<SizeLimit>((val) => {\n if (typeof val === 'number' || typeof val === 'string') {\n return true\n }\n return false\n})\n\nconst zExportMap: zod.ZodType<ExportPathMap> = z.record(\n z.string(),\n z.object({\n page: z.string(),\n query: z.any(), // NextParsedUrlQuery\n\n // private optional properties\n _fallbackRouteParams: z.array(z.any()).optional(),\n _isAppDir: z.boolean().optional(),\n _isDynamicError: z.boolean().optional(),\n _isRoutePPREnabled: z.boolean().optional(),\n _allowEmptyStaticShell: z.boolean().optional(),\n _isFallbackUpgradeable: z.boolean().optional(),\n })\n)\n\nconst zRouteHas: zod.ZodType<RouteHas> = z.union([\n z.object({\n type: z.enum(['header', 'query', 'cookie']),\n key: z.string(),\n value: z.string().optional(),\n }),\n z.object({\n type: z.literal('host'),\n key: z.undefined().optional(),\n value: z.string(),\n }),\n])\n\nconst zRewrite: zod.ZodType<Rewrite> = z.object({\n source: z.string(),\n destination: z.string(),\n basePath: z.literal(false).optional(),\n locale: z.literal(false).optional(),\n has: z.array(zRouteHas).optional(),\n missing: z.array(zRouteHas).optional(),\n internal: z.boolean().optional(),\n})\n\nconst zRedirect: zod.ZodType<Redirect> = z\n .object({\n source: z.string(),\n destination: z.string(),\n basePath: z.literal(false).optional(),\n locale: z.literal(false).optional(),\n has: z.array(zRouteHas).optional(),\n missing: z.array(zRouteHas).optional(),\n internal: z.boolean().optional(),\n })\n .and(\n z.union([\n z.object({\n statusCode: z.never().optional(),\n permanent: z.boolean(),\n }),\n z.object({\n statusCode: z.number(),\n permanent: z.never().optional(),\n }),\n ])\n )\n\nconst zHeader: zod.ZodType<Header> = z.object({\n source: z.string(),\n basePath: z.literal(false).optional(),\n locale: z.literal(false).optional(),\n headers: z.array(z.object({ key: z.string(), value: z.string() })),\n has: z.array(zRouteHas).optional(),\n missing: z.array(zRouteHas).optional(),\n\n internal: z.boolean().optional(),\n})\n\nconst zTurbopackLoaderItem: zod.ZodType<TurbopackLoaderItem> = z.union([\n z.string(),\n z.strictObject({\n loader: z.string(),\n // Any JSON value can be used as turbo loader options, so use z.any() here\n options: z.record(z.string(), z.any()).optional(),\n }),\n])\n\nconst zTurbopackLoaderBuiltinCondition: zod.ZodType<TurbopackLoaderBuiltinCondition> =\n z.union([\n z.literal('browser'),\n z.literal('foreign'),\n z.literal('development'),\n z.literal('production'),\n z.literal('node'),\n z.literal('edge-light'),\n ])\n\nconst zTurbopackCondition: zod.ZodType<TurbopackRuleCondition> = z.union([\n z.strictObject({ all: z.lazy(() => z.array(zTurbopackCondition)) }),\n z.strictObject({ any: z.lazy(() => z.array(zTurbopackCondition)) }),\n z.strictObject({ not: z.lazy(() => zTurbopackCondition) }),\n zTurbopackLoaderBuiltinCondition,\n z.strictObject({\n path: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n content: z.instanceof(RegExp).optional(),\n query: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n contentType: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n }),\n])\n\nconst zTurbopackModuleType = z.enum([\n 'asset',\n 'ecmascript',\n 'typescript',\n 'css',\n 'css-module',\n 'wasm',\n 'raw',\n 'node',\n 'bytes',\n])\n\nconst zTurbopackRuleConfigItem: zod.ZodType<TurbopackRuleConfigItem> =\n z.strictObject({\n loaders: z.array(zTurbopackLoaderItem).optional(),\n as: z.string().optional(),\n condition: zTurbopackCondition.optional(),\n type: zTurbopackModuleType.optional(),\n })\n\nconst zTurbopackRuleConfigCollection: zod.ZodType<TurbopackRuleConfigCollection> =\n z.union([\n zTurbopackRuleConfigItem,\n z.array(z.union([zTurbopackLoaderItem, zTurbopackRuleConfigItem])),\n ])\n\nconst zTurbopackConfig: zod.ZodType<TurbopackOptions> = z.strictObject({\n rules: z.record(z.string(), zTurbopackRuleConfigCollection).optional(),\n resolveAlias: z\n .record(\n z.string(),\n z.union([\n z.string(),\n z.array(z.string()),\n z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n ])\n )\n .optional(),\n resolveExtensions: z.array(z.string()).optional(),\n root: z.string().optional(),\n debugIds: z.boolean().optional(),\n chunkLoadingGlobal: z.string().optional(),\n ignoreIssue: z\n .array(\n z.object({\n path: z.union([z.string(), z.instanceof(RegExp)]),\n title: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n description: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n })\n )\n .optional(),\n})\n\nexport const experimentalSchema = {\n outputHashSalt: z.string().optional(),\n useSkewCookie: z.boolean().optional(),\n after: z.boolean().optional(),\n appNavFailHandling: z.boolean().optional(),\n appNewScrollHandler: z.boolean().optional(),\n coldCacheBadge: z.boolean().optional(),\n preloadEntriesOnStart: z.boolean().optional(),\n allowedRevalidateHeaderKeys: z.array(z.string()).optional(),\n staleTimes: z\n .object({\n dynamic: z.number().optional(),\n static: z.number().gte(30).optional(),\n })\n .optional(),\n cacheLife: z\n .record(\n z.object({\n stale: z.number().optional(),\n revalidate: z.number().optional(),\n expire: z.number().optional(),\n })\n )\n .optional(),\n cacheHandlers: z.record(z.string(), z.string().optional()).optional(),\n clientRouterFilter: z.boolean().optional(),\n clientRouterFilterRedirects: z.boolean().optional(),\n clientRouterFilterAllowedRate: z.number().optional(),\n cpus: z.number().optional(),\n memoryBasedWorkersCount: z.boolean().optional(),\n craCompat: z.boolean().optional(),\n caseSensitiveRoutes: z.boolean().optional(),\n clientParamParsingOrigins: z.array(z.string()).optional(),\n cachedNavigations: z\n .union([z.boolean(), z.literal('allow-runtime')])\n .optional(),\n dynamicOnHover: z.boolean().optional(),\n useOffline: z.boolean().optional(),\n optimisticRouting: z.boolean().optional(),\n instrumentationClientRouterTransitionEvents: z.boolean().optional(),\n appShells: z.boolean().optional(),\n varyParams: z.boolean().optional(),\n prefetchInlining: z\n .union([\n z.boolean(),\n z.object({\n maxSize: z.number().optional(),\n maxBundleSize: z.number().optional(),\n }),\n ])\n .optional(),\n disableOptimizedLoading: z.boolean().optional(),\n disablePostcssPresetEnv: z.boolean().optional(),\n cacheComponents: z.boolean().optional(),\n inlineCss: z.boolean().optional(),\n esmExternals: z.union([z.boolean(), z.literal('loose')]).optional(),\n serverActions: z\n .object({\n bodySizeLimit: zSizeLimit.optional(),\n allowedOrigins: z.array(z.string()).optional(),\n })\n .optional(),\n maxPostponedStateSize: zSizeLimit.optional(),\n // The original type was Record<string, any>\n extensionAlias: z.record(z.string(), z.any()).optional(),\n externalDir: z.boolean().optional(),\n externalMiddlewareRewritesResolve: z.boolean().optional(),\n externalProxyRewritesResolve: z.boolean().optional(),\n exposeTestingApiInProductionBuild: z.boolean().optional(),\n requestInsights: z.boolean().optional(),\n fallbackNodePolyfills: z.literal(false).optional(),\n fetchCacheKeyPrefix: z.string().optional(),\n forceSwcTransforms: z.boolean().optional(),\n fullySpecified: z.boolean().optional(),\n gzipSize: z.boolean().optional(),\n imgOptConcurrency: z.number().int().optional().nullable(),\n imgOptOperationCache: z.boolean().optional().nullable(),\n imgOptTimeoutInSeconds: z.number().int().optional(),\n imgOptMaxInputPixels: z.number().int().optional(),\n imgOptSequentialRead: z.boolean().optional().nullable(),\n imgOptSkipMetadata: z.boolean().optional().nullable(),\n isrFlushToDisk: z.boolean().optional(),\n largePageDataBytes: z.number().optional(),\n linkNoTouchStart: z.boolean().optional(),\n manualClientBasePath: z.boolean().optional(),\n middlewarePrefetch: z.enum(['strict', 'flexible']).optional(),\n proxyPrefetch: z.enum(['strict', 'flexible']).optional(),\n middlewareClientMaxBodySize: zSizeLimit.optional(),\n proxyClientMaxBodySize: zSizeLimit.optional(),\n multiZoneDraftMode: z.boolean().optional(),\n cssChunking: z\n .union([\n z.boolean(),\n z.literal('strict'),\n z.literal('loose'),\n z.literal('graph'),\n z.strictObject({ type: z.literal('strict') }),\n z.strictObject({ type: z.literal('loose') }),\n z.strictObject({\n type: z.literal('graph'),\n requestCost: z.number().nonnegative().finite().optional(),\n weightDistribution: z.number().nonnegative().finite().optional(),\n }),\n ])\n .optional(),\n nextScriptWorkers: z.boolean().optional(),\n // The critter option is unknown, use z.any() here\n optimizeCss: z.union([z.boolean(), z.any()]).optional(),\n optimisticClientCache: z.boolean().optional(),\n parallelServerCompiles: z.boolean().optional(),\n parallelServerBuildTraces: z.boolean().optional(),\n ppr: z\n .union([z.boolean(), z.literal('incremental')])\n .readonly()\n .optional(),\n taint: z.boolean().optional(),\n blockingSSR: z.boolean().optional(),\n prerenderEarlyExit: z.boolean().optional(),\n proxyTimeout: z.number().gte(0).optional(),\n rootParams: z.boolean().optional(),\n mcpServer: z.boolean().optional(),\n removeUncaughtErrorAndRejectionListeners: z.boolean().optional(),\n validateRSCRequestHeaders: z.boolean().optional(),\n scrollRestoration: z.boolean().optional(),\n sri: z\n .object({\n algorithm: z.enum(['sha256', 'sha384', 'sha512']).optional(),\n })\n .optional(),\n swcPlugins: z\n // The specific swc plugin's option is unknown, use z.any() here\n .array(z.tuple([z.string(), z.record(z.string(), z.any())]))\n .optional(),\n swcEnvOptions: z\n .object({\n mode: z.enum(['usage', 'entry']).optional(),\n coreJs: z.string().optional(),\n skip: z.array(z.string()).optional(),\n include: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n shippedProposals: z.boolean().optional(),\n forceAllTransforms: z.boolean().optional(),\n debug: z.boolean().optional(),\n loose: z.boolean().optional(),\n })\n .optional(),\n swcTraceProfiling: z.boolean().optional(),\n // NonNullable<webpack.Configuration['experiments']>['buildHttp']\n urlImports: z.any().optional(),\n viewTransition: z.boolean().optional(),\n workerThreads: z.boolean().optional(),\n webVitalsAttribution: z\n .array(\n z.union([\n z.literal('CLS'),\n z.literal('FCP'),\n z.literal('FID'),\n z.literal('INP'),\n z.literal('LCP'),\n z.literal('TTFB'),\n ])\n )\n .optional(),\n // This is partial set of mdx-rs transform options we support, aligned\n // with next_core::next_config::MdxRsOptions. Ensure both types are kept in sync.\n mdxRs: z\n .union([\n z.boolean(),\n z.object({\n development: z.boolean().optional(),\n jsxRuntime: z.string().optional(),\n jsxImportSource: z.string().optional(),\n providerImportSource: z.string().optional(),\n mdxType: z.enum(['gfm', 'commonmark']).optional(),\n }),\n ])\n .optional(),\n transitionIndicator: z.boolean().optional(),\n gestureTransition: z.boolean().optional(),\n typedRoutes: z.boolean().optional(),\n webpackBuildWorker: z.boolean().optional(),\n webpackMemoryOptimizations: z.boolean().optional(),\n turbopackMemoryEviction: z\n .union([z.literal(false), z.literal('full'), z.literal('auto')])\n .optional(),\n turbopackPluginRuntimeStrategy: z\n .enum(['workerThreads', 'childProcesses'])\n .optional(),\n turbopackMinify: z.boolean().optional(),\n turbopackFileSystemCacheForDev: z.boolean().optional(),\n turbopackFileSystemCacheForBuild: z.boolean().optional(),\n turbopackSourceMaps: z.boolean().optional(),\n turbopackInputSourceMaps: z.boolean().optional(),\n turbopackTreeShaking: z.boolean().optional(),\n turbopackRemoveUnusedImports: z.boolean().optional(),\n turbopackRemoveUnusedExports: z.boolean().optional(),\n turbopackScopeHoisting: z.boolean().optional(),\n turbopackGenerateComponentChunks: z.boolean().optional(),\n turbopackChunkingHeuristics: z\n .object({\n firstPageLoadPriority: z.number().min(0).max(1).optional(),\n priorityRoutes: z.array(z.instanceof(RegExp)).optional(),\n priorityBoost: z.number().min(1).optional(),\n requestCost: z.number().min(0).max(1_000_000).optional(),\n })\n .optional(),\n turbopackWorkerAssetPrefix: z.string().optional(),\n turbopackClientSideNestedAsyncChunking: z.boolean().optional(),\n turbopackServerSideNestedAsyncChunking: z.boolean().optional(),\n turbopackImportTypeBytes: z.boolean().optional(),\n turbopackUseBuiltinBabel: z.boolean().optional(),\n turbopackUseBuiltinSass: z.boolean().optional(),\n turbopackLocalPostcssConfig: z.boolean().optional(),\n turbopackModuleIds: z.enum(['named', 'deterministic']).optional(),\n turbopackInferModuleSideEffects: z.boolean().optional(),\n turbopackServerFastRefresh: z.boolean().optional(),\n optimizePackageImports: z.array(z.string()).optional(),\n optimizeServerReact: z.boolean().optional(),\n strictRouteTypes: z.boolean().optional(),\n useTypeScriptCli: z.boolean().optional(),\n clientTraceMetadata: z.array(z.string()).optional(),\n serverMinification: z.boolean().optional(),\n serverSourceMaps: z.boolean().optional(),\n useWasmBinary: z.boolean().optional(),\n useLightningcss: z.boolean().optional(),\n lightningCssFeatures: z\n .object({\n include: z.array(z.enum(LIGHTNINGCSS_FEATURE_NAMES)).optional(),\n exclude: z.array(z.enum(LIGHTNINGCSS_FEATURE_NAMES)).optional(),\n })\n .optional(),\n testProxy: z.boolean().optional(),\n defaultTestRunner: z.enum(SUPPORTED_TEST_RUNNERS_LIST).optional(),\n allowDevelopmentBuild: z.literal(true).optional(),\n\n reactDebugChannel: z.boolean().optional(),\n instantInsights: z\n .object({\n validationLevel: z\n .enum([\n 'warning',\n 'manual-warning',\n 'experimental-error',\n 'experimental-manual-error',\n ])\n .optional(),\n })\n .optional(),\n staticGenerationRetryCount: z.number().int().optional(),\n staticGenerationMaxConcurrency: z.number().int().optional(),\n staticGenerationMinPagesPerWorker: z.number().int().optional(),\n typedEnv: z.boolean().optional(),\n serverComponentsHmrCache: z.boolean().optional(),\n serverComponentsHmrCancellation: z.boolean().optional(),\n authInterrupts: z.boolean().optional(),\n useCache: z.boolean().optional(),\n durableUseCacheEntries: z.boolean().optional(),\n useCacheTimeout: z.number().positive().optional(),\n slowModuleDetection: z\n .object({\n buildTimeThresholdMs: z.number().int(),\n })\n .optional(),\n globalNotFound: z.boolean().optional(),\n turbopackRustReactCompiler: z.boolean().optional(),\n browserDebugInfoInTerminal: z\n .union([\n z.boolean(),\n z.enum(['error', 'warn', 'verbose']),\n z.object({\n level: z.enum(['error', 'warn', 'verbose']).optional(),\n depthLimit: z.number().int().positive().optional(),\n edgeLimit: z.number().int().positive().optional(),\n showSourceLocation: z.boolean().optional(),\n }),\n ])\n .optional(),\n lockDistDir: z.boolean().optional(),\n hideLogsAfterAbort: z.boolean().optional(),\n runtimeServerDeploymentId: z.boolean().optional(),\n supportsImmutableAssets: z.boolean().optional(),\n deferredEntries: z.array(z.string()).optional(),\n onBeforeDeferredEntries: z.function().returns(z.promise(z.void())).optional(),\n reportSystemEnvInlining: z.enum(['warn', 'error']).optional(),\n}\n\nexport const configSchema: zod.ZodType<NextConfig> = z.lazy(() =>\n z.strictObject({\n adapterPath: z.string().optional(),\n agentRules: z.boolean().optional(),\n allowedDevOrigins: z.array(z.string()).optional(),\n assetPrefix: z.string().optional(),\n basePath: z.string().optional(),\n bundlePagesRouterDependencies: z.boolean().optional(),\n cacheComponents: z.boolean().optional(),\n cacheHandler: z.string().min(1).optional(),\n cacheHandlers: z.record(z.string(), z.string().optional()).optional(),\n cacheLife: z\n .record(\n z.object({\n stale: z.number().optional(),\n revalidate: z.number().optional(),\n expire: z.number().optional(),\n })\n )\n .optional(),\n cacheMaxMemorySize: z.number().optional(),\n cleanDistDir: z.boolean().optional(),\n compiler: z\n .strictObject({\n emotion: z\n .union([\n z.boolean(),\n z.object({\n sourceMap: z.boolean().optional(),\n autoLabel: z\n .union([\n z.literal('always'),\n z.literal('dev-only'),\n z.literal('never'),\n ])\n .optional(),\n labelFormat: z.string().min(1).optional(),\n importMap: z\n .record(\n z.string(),\n z.record(\n z.string(),\n z.object({\n canonicalImport: z\n .tuple([z.string(), z.string()])\n .optional(),\n styledBaseImport: z\n .tuple([z.string(), z.string()])\n .optional(),\n })\n )\n )\n .optional(),\n }),\n ])\n .optional(),\n reactRemoveProperties: z\n .union([\n z.boolean().optional(),\n z.object({\n properties: z.array(z.string()).optional(),\n }),\n ])\n .optional(),\n relay: z\n .object({\n src: z.string(),\n artifactDirectory: z.string().optional(),\n language: z.enum(['javascript', 'typescript', 'flow']).optional(),\n eagerEsModules: z.boolean().optional(),\n })\n .optional(),\n removeConsole: z\n .union([\n z.boolean().optional(),\n z.object({\n exclude: z.array(z.string()).min(1).optional(),\n }),\n ])\n .optional(),\n styledComponents: z.union([\n z.boolean().optional(),\n z.object({\n displayName: z.boolean().optional(),\n topLevelImportPaths: z.array(z.string()).optional(),\n ssr: z.boolean().optional(),\n fileName: z.boolean().optional(),\n meaninglessFileNames: z.array(z.string()).optional(),\n minify: z.boolean().optional(),\n transpileTemplateLiterals: z.boolean().optional(),\n namespace: z.string().min(1).optional(),\n pure: z.boolean().optional(),\n cssProp: z.boolean().optional(),\n }),\n ]),\n styledJsx: z.union([\n z.boolean().optional(),\n z.object({\n useLightningcss: z.boolean().optional(),\n }),\n ]),\n define: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean()]))\n .optional(),\n defineServer: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean()]))\n .optional(),\n runAfterProductionCompile: z\n .function()\n .returns(z.promise(z.void()))\n .optional(),\n })\n .optional(),\n compress: z.boolean().optional(),\n configOrigin: z.string().optional(),\n crossOrigin: z\n .union([z.literal('anonymous'), z.literal('use-credentials')])\n .optional(),\n deploymentId: z.string().optional(),\n devIndicators: z\n .union([\n z.object({\n position: z\n .union([\n z.literal('bottom-left'),\n z.literal('bottom-right'),\n z.literal('top-left'),\n z.literal('top-right'),\n ])\n .optional(),\n }),\n z.literal(false),\n ])\n .optional(),\n distDir: z.string().min(1).optional(),\n env: z.record(z.string(), z.union([z.string(), z.undefined()])).optional(),\n enablePrerenderSourceMaps: z.boolean().optional(),\n excludeDefaultMomentLocales: z.boolean().optional(),\n experimental: z.strictObject(experimentalSchema).optional(),\n exportPathMap: z\n .function()\n .args(\n zExportMap,\n z.object({\n dev: z.boolean(),\n dir: z.string(),\n outDir: z.string().nullable(),\n distDir: z.string(),\n buildId: z.string(),\n })\n )\n .returns(z.union([zExportMap, z.promise(zExportMap)]))\n .optional(),\n generateBuildId: z\n .function()\n .args()\n .returns(\n z.union([\n z.string(),\n z.null(),\n z.promise(z.union([z.string(), z.null()])),\n ])\n )\n .optional(),\n generateEtags: z.boolean().optional(),\n headers: z\n .function()\n .args()\n .returns(z.promise(z.array(zHeader)))\n .optional(),\n htmlLimitedBots: z.instanceof(RegExp).optional(),\n httpAgentOptions: z\n .strictObject({ keepAlive: z.boolean().optional() })\n .optional(),\n i18n: z\n .strictObject({\n defaultLocale: z.string().min(1),\n domains: z\n .array(\n z.strictObject({\n defaultLocale: z.string().min(1),\n domain: z.string().min(1),\n http: z.literal(true).optional(),\n locales: z.array(z.string().min(1)).optional(),\n })\n )\n .optional(),\n localeDetection: z.literal(false).optional(),\n locales: z.array(z.string().min(1)),\n })\n .nullable()\n .optional(),\n images: z\n .strictObject({\n localPatterns: z\n .array(\n z.strictObject({\n pathname: z.string().optional(),\n search: z.string().optional(),\n })\n )\n .max(25)\n .optional(),\n remotePatterns: z\n .array(\n z.union([\n z.instanceof(URL),\n z.strictObject({\n hostname: z.string(),\n pathname: z.string().optional(),\n port: z.string().max(5).optional(),\n protocol: z.enum(['http', 'https']).optional(),\n search: z.string().optional(),\n }),\n ])\n )\n .max(50)\n .optional(),\n unoptimized: z.boolean().optional(),\n customCacheHandler: z.boolean().optional(),\n contentSecurityPolicy: z.string().optional(),\n contentDispositionType: z.enum(['inline', 'attachment']).optional(),\n dangerouslyAllowSVG: z.boolean().optional(),\n dangerouslyAllowLocalIP: z.boolean().optional(),\n deviceSizes: z\n .array(z.number().int().gte(1).lte(10000))\n .max(25)\n .optional(),\n disableStaticImages: z.boolean().optional(),\n domains: z.array(z.string()).max(50).optional(),\n formats: z\n .array(z.enum(['image/avif', 'image/webp']))\n .max(4)\n .optional(),\n imageSizes: z\n .array(z.number().int().gte(1).lte(10000))\n .min(0)\n .max(25)\n .optional(),\n loader: z.enum(VALID_LOADERS).optional(),\n loaderFile: z.string().optional(),\n maximumDiskCacheSize: z.number().int().min(0).optional(),\n maximumRedirects: z.number().int().min(0).max(20).optional(),\n maximumResponseBody: z\n .number()\n .int()\n .min(1)\n .max(Number.MAX_SAFE_INTEGER)\n .optional(),\n minimumCacheTTL: z.number().int().gte(0).optional(),\n path: z.string().optional(),\n qualities: z\n .array(z.number().int().gte(1).lte(100))\n .min(1)\n .max(20)\n .optional(),\n })\n .optional(),\n logging: z\n .union([\n z.object({\n fetches: z\n .object({\n fullUrl: z.boolean().optional(),\n hmrRefreshes: z.boolean().optional(),\n })\n .optional(),\n incomingRequests: z\n .union([\n z.boolean(),\n z.object({\n ignore: z.array(z.instanceof(RegExp)),\n }),\n ])\n .optional(),\n serverFunctions: z.boolean().optional(),\n browserToTerminal: z\n .union([z.boolean(), z.enum(['error', 'warn'])])\n .optional(),\n }),\n z.literal(false),\n ])\n .optional(),\n modularizeImports: z\n .record(\n z.string(),\n z.object({\n transform: z.union([z.string(), z.record(z.string(), z.string())]),\n preventFullImport: z.boolean().optional(),\n skipDefaultConversion: z.boolean().optional(),\n })\n )\n .optional(),\n onDemandEntries: z\n .strictObject({\n maxInactiveAge: z.number().optional(),\n pagesBufferLength: z.number().optional(),\n })\n .optional(),\n output: z.enum(['standalone', 'export']).optional(),\n outputFileTracingRoot: z.string().optional(),\n outputFileTracingExcludes: z\n .record(z.string(), z.array(z.string()))\n .optional(),\n outputFileTracingIncludes: z\n .record(z.string(), z.array(z.string()))\n .optional(),\n pageExtensions: z.array(z.string()).min(1).optional(),\n instrumentationClientInject: z.array(z.string()).optional(),\n partialPrefetching: z\n .union([z.boolean(), z.literal('unstable_eager')])\n .optional(),\n poweredByHeader: z.boolean().optional(),\n productionBrowserSourceMaps: z.boolean().optional(),\n reactCompiler: z.union([\n z.boolean(),\n z\n .object({\n compilationMode: z.enum(['infer', 'annotation', 'all']).optional(),\n panicThreshold: z\n .enum(['none', 'critical_errors', 'all_errors'])\n .optional(),\n })\n .optional(),\n ]),\n reactProductionProfiling: z.boolean().optional(),\n reactStrictMode: z.boolean().nullable().optional(),\n reactMaxHeadersLength: z.number().nonnegative().int().optional(),\n redirects: z\n .function()\n .args()\n .returns(z.promise(z.array(zRedirect)))\n .optional(),\n rewrites: z\n .function()\n .args()\n .returns(\n z.promise(\n z.union([\n z.array(zRewrite),\n z.object({\n beforeFiles: z.array(zRewrite),\n afterFiles: z.array(zRewrite),\n fallback: z.array(zRewrite),\n }),\n ])\n )\n )\n .optional(),\n // sassOptions properties are unknown besides implementation, use z.any() here\n sassOptions: z\n .object({\n implementation: z.string().optional(),\n })\n .catchall(z.any())\n .optional(),\n serverExternalPackages: z.array(z.string()).optional(),\n skipMiddlewareUrlNormalize: z.boolean().optional(),\n skipProxyUrlNormalize: z.boolean().optional(),\n skipTrailingSlashRedirect: z.boolean().optional(),\n staticPageGenerationTimeout: z.number().optional(),\n expireTime: z.number().optional(),\n target: z.string().optional(),\n trailingSlash: z.boolean().optional(),\n transpilePackages: z.array(z.string()).optional(),\n turbopack: zTurbopackConfig.optional(),\n typescript: z\n .strictObject({\n ignoreBuildErrors: z.boolean().optional(),\n tsconfigPath: z.string().min(1).optional(),\n })\n .optional(),\n typedRoutes: z.boolean().optional(),\n useFileSystemPublicRoutes: z.boolean().optional(),\n // The webpack config type is unknown, use z.any() here\n webpack: z.any().nullable().optional(),\n watchOptions: z\n .strictObject({\n pollIntervalMs: z.number().positive().finite().optional(),\n })\n .optional(),\n })\n)\n"],"names":["VALID_LOADERS","z","LIGHTNINGCSS_FEATURE_NAMES","SUPPORTED_TEST_RUNNERS_LIST","zSizeLimit","custom","val","zExportMap","record","string","object","page","query","any","_fallbackRouteParams","array","optional","_isAppDir","boolean","_isDynamicError","_isRoutePPREnabled","_allowEmptyStaticShell","_isFallbackUpgradeable","zRouteHas","union","type","enum","key","value","literal","undefined","zRewrite","source","destination","basePath","locale","has","missing","internal","zRedirect","and","statusCode","never","permanent","number","zHeader","headers","zTurbopackLoaderItem","strictObject","loader","options","zTurbopackLoaderBuiltinCondition","zTurbopackCondition","all","lazy","not","path","instanceof","RegExp","content","contentType","zTurbopackModuleType","zTurbopackRuleConfigItem","loaders","as","condition","zTurbopackRuleConfigCollection","zTurbopackConfig","rules","resolveAlias","resolveExtensions","root","debugIds","chunkLoadingGlobal","ignoreIssue","title","description","experimentalSchema","outputHashSalt","useSkewCookie","after","appNavFailHandling","appNewScrollHandler","coldCacheBadge","preloadEntriesOnStart","allowedRevalidateHeaderKeys","staleTimes","dynamic","static","gte","cacheLife","stale","revalidate","expire","cacheHandlers","clientRouterFilter","clientRouterFilterRedirects","clientRouterFilterAllowedRate","cpus","memoryBasedWorkersCount","craCompat","caseSensitiveRoutes","clientParamParsingOrigins","cachedNavigations","dynamicOnHover","useOffline","optimisticRouting","instrumentationClientRouterTransitionEvents","appShells","varyParams","prefetchInlining","maxSize","maxBundleSize","disableOptimizedLoading","disablePostcssPresetEnv","cacheComponents","inlineCss","esmExternals","serverActions","bodySizeLimit","allowedOrigins","maxPostponedStateSize","extensionAlias","externalDir","externalMiddlewareRewritesResolve","externalProxyRewritesResolve","exposeTestingApiInProductionBuild","requestInsights","fallbackNodePolyfills","fetchCacheKeyPrefix","forceSwcTransforms","fullySpecified","gzipSize","imgOptConcurrency","int","nullable","imgOptOperationCache","imgOptTimeoutInSeconds","imgOptMaxInputPixels","imgOptSequentialRead","imgOptSkipMetadata","isrFlushToDisk","largePageDataBytes","linkNoTouchStart","manualClientBasePath","middlewarePrefetch","proxyPrefetch","middlewareClientMaxBodySize","proxyClientMaxBodySize","multiZoneDraftMode","cssChunking","requestCost","nonnegative","finite","weightDistribution","nextScriptWorkers","optimizeCss","optimisticClientCache","parallelServerCompiles","parallelServerBuildTraces","ppr","readonly","taint","blockingSSR","prerenderEarlyExit","proxyTimeout","rootParams","mcpServer","removeUncaughtErrorAndRejectionListeners","validateRSCRequestHeaders","scrollRestoration","sri","algorithm","swcPlugins","tuple","swcEnvOptions","mode","coreJs","skip","include","exclude","shippedProposals","forceAllTransforms","debug","loose","swcTraceProfiling","urlImports","viewTransition","workerThreads","webVitalsAttribution","mdxRs","development","jsxRuntime","jsxImportSource","providerImportSource","mdxType","transitionIndicator","gestureTransition","typedRoutes","webpackBuildWorker","webpackMemoryOptimizations","turbopackMemoryEviction","turbopackPluginRuntimeStrategy","turbopackMinify","turbopackFileSystemCacheForDev","turbopackFileSystemCacheForBuild","turbopackSourceMaps","turbopackInputSourceMaps","turbopackTreeShaking","turbopackRemoveUnusedImports","turbopackRemoveUnusedExports","turbopackScopeHoisting","turbopackGenerateComponentChunks","turbopackChunkingHeuristics","firstPageLoadPriority","min","max","priorityRoutes","priorityBoost","turbopackWorkerAssetPrefix","turbopackClientSideNestedAsyncChunking","turbopackServerSideNestedAsyncChunking","turbopackImportTypeBytes","turbopackUseBuiltinBabel","turbopackUseBuiltinSass","turbopackLocalPostcssConfig","turbopackModuleIds","turbopackInferModuleSideEffects","turbopackServerFastRefresh","optimizePackageImports","optimizeServerReact","strictRouteTypes","useTypeScriptCli","clientTraceMetadata","serverMinification","serverSourceMaps","useWasmBinary","useLightningcss","lightningCssFeatures","testProxy","defaultTestRunner","allowDevelopmentBuild","reactDebugChannel","instantInsights","validationLevel","staticGenerationRetryCount","staticGenerationMaxConcurrency","staticGenerationMinPagesPerWorker","typedEnv","serverComponentsHmrCache","serverComponentsHmrCancellation","authInterrupts","useCache","durableUseCacheEntries","useCacheTimeout","positive","slowModuleDetection","buildTimeThresholdMs","globalNotFound","turbopackRustReactCompiler","browserDebugInfoInTerminal","level","depthLimit","edgeLimit","showSourceLocation","lockDistDir","hideLogsAfterAbort","runtimeServerDeploymentId","supportsImmutableAssets","deferredEntries","onBeforeDeferredEntries","function","returns","promise","void","reportSystemEnvInlining","configSchema","adapterPath","agentRules","allowedDevOrigins","assetPrefix","bundlePagesRouterDependencies","cacheHandler","cacheMaxMemorySize","cleanDistDir","compiler","emotion","sourceMap","autoLabel","labelFormat","importMap","canonicalImport","styledBaseImport","reactRemoveProperties","properties","relay","src","artifactDirectory","language","eagerEsModules","removeConsole","styledComponents","displayName","topLevelImportPaths","ssr","fileName","meaninglessFileNames","minify","transpileTemplateLiterals","namespace","pure","cssProp","styledJsx","define","defineServer","runAfterProductionCompile","compress","configOrigin","crossOrigin","deploymentId","devIndicators","position","distDir","env","enablePrerenderSourceMaps","excludeDefaultMomentLocales","experimental","exportPathMap","args","dev","dir","outDir","buildId","generateBuildId","null","generateEtags","htmlLimitedBots","httpAgentOptions","keepAlive","i18n","defaultLocale","domains","domain","http","locales","localeDetection","images","localPatterns","pathname","search","remotePatterns","URL","hostname","port","protocol","unoptimized","customCacheHandler","contentSecurityPolicy","contentDispositionType","dangerouslyAllowSVG","dangerouslyAllowLocalIP","deviceSizes","lte","disableStaticImages","formats","imageSizes","loaderFile","maximumDiskCacheSize","maximumRedirects","maximumResponseBody","Number","MAX_SAFE_INTEGER","minimumCacheTTL","qualities","logging","fetches","fullUrl","hmrRefreshes","incomingRequests","ignore","serverFunctions","browserToTerminal","modularizeImports","transform","preventFullImport","skipDefaultConversion","onDemandEntries","maxInactiveAge","pagesBufferLength","output","outputFileTracingRoot","outputFileTracingExcludes","outputFileTracingIncludes","pageExtensions","instrumentationClientInject","partialPrefetching","poweredByHeader","productionBrowserSourceMaps","reactCompiler","compilationMode","panicThreshold","reactProductionProfiling","reactStrictMode","reactMaxHeadersLength","redirects","rewrites","beforeFiles","afterFiles","fallback","sassOptions","implementation","catchall","serverExternalPackages","skipMiddlewareUrlNormalize","skipProxyUrlNormalize","skipTrailingSlashRedirect","staticPageGenerationTimeout","expireTime","target","trailingSlash","transpilePackages","turbopack","typescript","ignoreBuildErrors","tsconfigPath","useFileSystemPublicRoutes","webpack","watchOptions","pollIntervalMs"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/server/config-schema.ts"],"sourcesContent":["import type { NextConfig } from './config'\nimport { VALID_LOADERS } from '../shared/lib/image-config'\n\nimport { z } from 'next/dist/compiled/zod'\nimport type zod from 'next/dist/compiled/zod'\n\nimport type { SizeLimit } from '../types'\nimport {\n LIGHTNINGCSS_FEATURE_NAMES,\n type ExportPathMap,\n type TurbopackLoaderItem,\n type TurbopackOptions,\n type TurbopackRuleConfigItem,\n type TurbopackRuleConfigCollection,\n type TurbopackRuleCondition,\n type TurbopackLoaderBuiltinCondition,\n} from './config-shared'\nimport type {\n Header,\n Rewrite,\n RouteHas,\n Redirect,\n} from '../lib/load-custom-routes'\nimport { SUPPORTED_TEST_RUNNERS_LIST } from '../cli/next-test'\n\n// A custom zod schema for the SizeLimit type\nconst zSizeLimit = z.custom<SizeLimit>((val) => {\n if (typeof val === 'number' || typeof val === 'string') {\n return true\n }\n return false\n})\n\nconst zExportMap: zod.ZodType<ExportPathMap> = z.record(\n z.string(),\n z.object({\n page: z.string(),\n query: z.any(), // NextParsedUrlQuery\n\n // private optional properties\n _fallbackRouteParams: z.array(z.any()).optional(),\n _isAppDir: z.boolean().optional(),\n _isDynamicError: z.boolean().optional(),\n _isRoutePPREnabled: z.boolean().optional(),\n _allowEmptyStaticShell: z.boolean().optional(),\n _isFallbackUpgradeable: z.boolean().optional(),\n })\n)\n\nconst zRouteHas: zod.ZodType<RouteHas> = z.union([\n z.object({\n type: z.enum(['header', 'query', 'cookie']),\n key: z.string(),\n value: z.string().optional(),\n }),\n z.object({\n type: z.literal('host'),\n key: z.undefined().optional(),\n value: z.string(),\n }),\n])\n\nconst zRewrite: zod.ZodType<Rewrite> = z.object({\n source: z.string(),\n destination: z.string(),\n basePath: z.literal(false).optional(),\n locale: z.literal(false).optional(),\n has: z.array(zRouteHas).optional(),\n missing: z.array(zRouteHas).optional(),\n internal: z.boolean().optional(),\n})\n\nconst zRedirect: zod.ZodType<Redirect> = z\n .object({\n source: z.string(),\n destination: z.string(),\n basePath: z.literal(false).optional(),\n locale: z.literal(false).optional(),\n has: z.array(zRouteHas).optional(),\n missing: z.array(zRouteHas).optional(),\n internal: z.boolean().optional(),\n })\n .and(\n z.union([\n z.object({\n statusCode: z.never().optional(),\n permanent: z.boolean(),\n }),\n z.object({\n statusCode: z.number(),\n permanent: z.never().optional(),\n }),\n ])\n )\n\nconst zHeader: zod.ZodType<Header> = z.object({\n source: z.string(),\n basePath: z.literal(false).optional(),\n locale: z.literal(false).optional(),\n headers: z.array(z.object({ key: z.string(), value: z.string() })),\n has: z.array(zRouteHas).optional(),\n missing: z.array(zRouteHas).optional(),\n\n internal: z.boolean().optional(),\n})\n\nconst zTurbopackLoaderItem: zod.ZodType<TurbopackLoaderItem> = z.union([\n z.string(),\n z.strictObject({\n loader: z.string(),\n // Any JSON value can be used as turbo loader options, so use z.any() here\n options: z.record(z.string(), z.any()).optional(),\n }),\n])\n\nconst zTurbopackLoaderBuiltinCondition: zod.ZodType<TurbopackLoaderBuiltinCondition> =\n z.union([\n z.literal('browser'),\n z.literal('foreign'),\n z.literal('development'),\n z.literal('production'),\n z.literal('node'),\n z.literal('edge-light'),\n ])\n\nconst zTurbopackCondition: zod.ZodType<TurbopackRuleCondition> = z.union([\n z.strictObject({ all: z.lazy(() => z.array(zTurbopackCondition)) }),\n z.strictObject({ any: z.lazy(() => z.array(zTurbopackCondition)) }),\n z.strictObject({ not: z.lazy(() => zTurbopackCondition) }),\n zTurbopackLoaderBuiltinCondition,\n z.strictObject({\n path: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n content: z.instanceof(RegExp).optional(),\n query: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n contentType: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n }),\n])\n\nconst zTurbopackModuleType = z.enum([\n 'asset',\n 'ecmascript',\n 'typescript',\n 'css',\n 'css-module',\n 'wasm',\n 'raw',\n 'node',\n 'bytes',\n])\n\nconst zTurbopackRuleConfigItem: zod.ZodType<TurbopackRuleConfigItem> =\n z.strictObject({\n loaders: z.array(zTurbopackLoaderItem).optional(),\n as: z.string().optional(),\n condition: zTurbopackCondition.optional(),\n type: zTurbopackModuleType.optional(),\n })\n\nconst zTurbopackRuleConfigCollection: zod.ZodType<TurbopackRuleConfigCollection> =\n z.union([\n zTurbopackRuleConfigItem,\n z.array(z.union([zTurbopackLoaderItem, zTurbopackRuleConfigItem])),\n ])\n\nconst zTurbopackConfig: zod.ZodType<TurbopackOptions> = z.strictObject({\n rules: z.record(z.string(), zTurbopackRuleConfigCollection).optional(),\n resolveAlias: z\n .record(\n z.string(),\n z.union([\n z.string(),\n z.array(z.string()),\n z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n ])\n )\n .optional(),\n resolveExtensions: z.array(z.string()).optional(),\n root: z.string().optional(),\n debugIds: z.boolean().optional(),\n chunkLoadingGlobal: z.string().optional(),\n ignoreIssue: z\n .array(\n z.object({\n path: z.union([z.string(), z.instanceof(RegExp)]),\n title: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n description: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n })\n )\n .optional(),\n})\n\nexport const experimentalSchema = {\n outputHashSalt: z.string().optional(),\n useSkewCookie: z.boolean().optional(),\n after: z.boolean().optional(),\n appNavFailHandling: z.boolean().optional(),\n appNewScrollHandler: z.boolean().optional(),\n coldCacheBadge: z.boolean().optional(),\n preloadEntriesOnStart: z.boolean().optional(),\n allowedRevalidateHeaderKeys: z.array(z.string()).optional(),\n staleTimes: z\n .object({\n dynamic: z.number().optional(),\n static: z.number().gte(30).optional(),\n })\n .optional(),\n cacheLife: z\n .record(\n z.object({\n stale: z.number().optional(),\n revalidate: z.number().optional(),\n expire: z.number().optional(),\n })\n )\n .optional(),\n cacheHandlers: z.record(z.string(), z.string().optional()).optional(),\n clientRouterFilter: z.boolean().optional(),\n clientRouterFilterRedirects: z.boolean().optional(),\n clientRouterFilterAllowedRate: z.number().optional(),\n cpus: z.number().optional(),\n memoryBasedWorkersCount: z.boolean().optional(),\n craCompat: z.boolean().optional(),\n caseSensitiveRoutes: z.boolean().optional(),\n clientParamParsingOrigins: z.array(z.string()).optional(),\n cachedNavigations: z\n .union([z.boolean(), z.literal('allow-runtime')])\n .optional(),\n dynamicOnHover: z.boolean().optional(),\n useOffline: z.boolean().optional(),\n optimisticRouting: z.boolean().optional(),\n instrumentationClientRouterTransitionEvents: z.boolean().optional(),\n varyParams: z.boolean().optional(),\n prefetchInlining: z\n .union([\n z.boolean(),\n z.object({\n maxSize: z.number().optional(),\n maxBundleSize: z.number().optional(),\n }),\n ])\n .optional(),\n disableOptimizedLoading: z.boolean().optional(),\n disablePostcssPresetEnv: z.boolean().optional(),\n cacheComponents: z.boolean().optional(),\n inlineCss: z.boolean().optional(),\n esmExternals: z.union([z.boolean(), z.literal('loose')]).optional(),\n serverActions: z\n .object({\n bodySizeLimit: zSizeLimit.optional(),\n allowedOrigins: z.array(z.string()).optional(),\n })\n .optional(),\n maxPostponedStateSize: zSizeLimit.optional(),\n // The original type was Record<string, any>\n extensionAlias: z.record(z.string(), z.any()).optional(),\n externalDir: z.boolean().optional(),\n externalMiddlewareRewritesResolve: z.boolean().optional(),\n externalProxyRewritesResolve: z.boolean().optional(),\n exposeTestingApiInProductionBuild: z.boolean().optional(),\n requestInsights: z.boolean().optional(),\n fallbackNodePolyfills: z.literal(false).optional(),\n fetchCacheKeyPrefix: z.string().optional(),\n forceSwcTransforms: z.boolean().optional(),\n fullySpecified: z.boolean().optional(),\n gzipSize: z.boolean().optional(),\n imgOptConcurrency: z.number().int().optional().nullable(),\n imgOptOperationCache: z.boolean().optional().nullable(),\n imgOptTimeoutInSeconds: z.number().int().optional(),\n imgOptMaxInputPixels: z.number().int().optional(),\n imgOptSequentialRead: z.boolean().optional().nullable(),\n imgOptSkipMetadata: z.boolean().optional().nullable(),\n isrFlushToDisk: z.boolean().optional(),\n largePageDataBytes: z.number().optional(),\n linkNoTouchStart: z.boolean().optional(),\n manualClientBasePath: z.boolean().optional(),\n middlewarePrefetch: z.enum(['strict', 'flexible']).optional(),\n proxyPrefetch: z.enum(['strict', 'flexible']).optional(),\n middlewareClientMaxBodySize: zSizeLimit.optional(),\n proxyClientMaxBodySize: zSizeLimit.optional(),\n multiZoneDraftMode: z.boolean().optional(),\n cssChunking: z\n .union([\n z.boolean(),\n z.literal('strict'),\n z.literal('loose'),\n z.literal('graph'),\n z.strictObject({ type: z.literal('strict') }),\n z.strictObject({ type: z.literal('loose') }),\n z.strictObject({\n type: z.literal('graph'),\n requestCost: z.number().nonnegative().finite().optional(),\n weightDistribution: z.number().nonnegative().finite().optional(),\n }),\n ])\n .optional(),\n nextScriptWorkers: z.boolean().optional(),\n // The critter option is unknown, use z.any() here\n optimizeCss: z.union([z.boolean(), z.any()]).optional(),\n optimisticClientCache: z.boolean().optional(),\n parallelServerCompiles: z.boolean().optional(),\n parallelServerBuildTraces: z.boolean().optional(),\n ppr: z\n .union([z.boolean(), z.literal('incremental')])\n .readonly()\n .optional(),\n taint: z.boolean().optional(),\n blockingSSR: z.boolean().optional(),\n prerenderEarlyExit: z.boolean().optional(),\n proxyTimeout: z.number().gte(0).optional(),\n rootParams: z.boolean().optional(),\n mcpServer: z.boolean().optional(),\n removeUncaughtErrorAndRejectionListeners: z.boolean().optional(),\n validateRSCRequestHeaders: z.boolean().optional(),\n scrollRestoration: z.boolean().optional(),\n sri: z\n .object({\n algorithm: z.enum(['sha256', 'sha384', 'sha512']).optional(),\n })\n .optional(),\n swcPlugins: z\n // The specific swc plugin's option is unknown, use z.any() here\n .array(z.tuple([z.string(), z.record(z.string(), z.any())]))\n .optional(),\n swcEnvOptions: z\n .object({\n mode: z.enum(['usage', 'entry']).optional(),\n coreJs: z.string().optional(),\n skip: z.array(z.string()).optional(),\n include: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n shippedProposals: z.boolean().optional(),\n forceAllTransforms: z.boolean().optional(),\n debug: z.boolean().optional(),\n loose: z.boolean().optional(),\n })\n .optional(),\n swcTraceProfiling: z.boolean().optional(),\n // NonNullable<webpack.Configuration['experiments']>['buildHttp']\n urlImports: z.any().optional(),\n viewTransition: z.boolean().optional(),\n workerThreads: z.boolean().optional(),\n webVitalsAttribution: z\n .array(\n z.union([\n z.literal('CLS'),\n z.literal('FCP'),\n z.literal('FID'),\n z.literal('INP'),\n z.literal('LCP'),\n z.literal('TTFB'),\n ])\n )\n .optional(),\n // This is partial set of mdx-rs transform options we support, aligned\n // with next_core::next_config::MdxRsOptions. Ensure both types are kept in sync.\n mdxRs: z\n .union([\n z.boolean(),\n z.object({\n development: z.boolean().optional(),\n jsxRuntime: z.string().optional(),\n jsxImportSource: z.string().optional(),\n providerImportSource: z.string().optional(),\n mdxType: z.enum(['gfm', 'commonmark']).optional(),\n }),\n ])\n .optional(),\n transitionIndicator: z.boolean().optional(),\n gestureTransition: z.boolean().optional(),\n typedRoutes: z.boolean().optional(),\n webpackBuildWorker: z.boolean().optional(),\n webpackMemoryOptimizations: z.boolean().optional(),\n turbopackMemoryEviction: z\n .union([z.literal(false), z.literal('full'), z.literal('auto')])\n .optional(),\n turbopackPluginRuntimeStrategy: z\n .enum(['workerThreads', 'childProcesses'])\n .optional(),\n turbopackMinify: z.boolean().optional(),\n turbopackFileSystemCacheForDev: z.boolean().optional(),\n turbopackFileSystemCacheForBuild: z.boolean().optional(),\n turbopackSourceMaps: z.boolean().optional(),\n turbopackInputSourceMaps: z.boolean().optional(),\n turbopackTreeShaking: z.boolean().optional(),\n turbopackRemoveUnusedImports: z.boolean().optional(),\n turbopackRemoveUnusedExports: z.boolean().optional(),\n turbopackScopeHoisting: z.boolean().optional(),\n turbopackGenerateComponentChunks: z.boolean().optional(),\n turbopackSharedRuntime: z.boolean().optional(),\n turbopackChunkingHeuristics: z\n .object({\n firstPageLoadPriority: z.number().min(0).max(1).optional(),\n priorityRoutes: z.array(z.instanceof(RegExp)).optional(),\n priorityBoost: z.number().min(1).optional(),\n requestCost: z.number().min(0).max(1_000_000).optional(),\n })\n .optional(),\n turbopackWorkerAssetPrefix: z.string().optional(),\n turbopackClientSideNestedAsyncChunking: z.boolean().optional(),\n turbopackServerSideNestedAsyncChunking: z.boolean().optional(),\n turbopackImportTypeBytes: z.boolean().optional(),\n turbopackUseBuiltinBabel: z.boolean().optional(),\n turbopackUseBuiltinSass: z.boolean().optional(),\n turbopackLocalPostcssConfig: z.boolean().optional(),\n turbopackModuleIds: z.enum(['named', 'deterministic']).optional(),\n turbopackInferModuleSideEffects: z.boolean().optional(),\n turbopackServerFastRefresh: z.boolean().optional(),\n optimizePackageImports: z.array(z.string()).optional(),\n optimizeServerReact: z.boolean().optional(),\n strictRouteTypes: z.boolean().optional(),\n useTypeScriptCli: z.boolean().optional(),\n clientTraceMetadata: z.array(z.string()).optional(),\n serverMinification: z.boolean().optional(),\n serverSourceMaps: z.boolean().optional(),\n useWasmBinary: z.boolean().optional(),\n useLightningcss: z.boolean().optional(),\n lightningCssFeatures: z\n .object({\n include: z.array(z.enum(LIGHTNINGCSS_FEATURE_NAMES)).optional(),\n exclude: z.array(z.enum(LIGHTNINGCSS_FEATURE_NAMES)).optional(),\n })\n .optional(),\n testProxy: z.boolean().optional(),\n defaultTestRunner: z.enum(SUPPORTED_TEST_RUNNERS_LIST).optional(),\n allowDevelopmentBuild: z.literal(true).optional(),\n\n reactDebugChannel: z.boolean().optional(),\n instantInsights: z\n .object({\n validationLevel: z\n .enum([\n 'warning',\n 'manual-warning',\n 'experimental-error',\n 'experimental-manual-error',\n ])\n .optional(),\n })\n .optional(),\n staticGenerationRetryCount: z.number().int().optional(),\n staticGenerationMaxConcurrency: z.number().int().optional(),\n staticGenerationMinPagesPerWorker: z.number().int().optional(),\n typedEnv: z.boolean().optional(),\n serverComponentsHmrCache: z.boolean().optional(),\n serverComponentsHmrCancellation: z.boolean().optional(),\n authInterrupts: z.boolean().optional(),\n useCache: z.boolean().optional(),\n durableUseCacheEntries: z.boolean().optional(),\n useCacheTimeout: z.number().positive().optional(),\n slowModuleDetection: z\n .object({\n buildTimeThresholdMs: z.number().int(),\n })\n .optional(),\n globalNotFound: z.boolean().optional(),\n turbopackRustReactCompiler: z.boolean().optional(),\n browserDebugInfoInTerminal: z\n .union([\n z.boolean(),\n z.enum(['error', 'warn', 'verbose']),\n z.object({\n level: z.enum(['error', 'warn', 'verbose']).optional(),\n depthLimit: z.number().int().positive().optional(),\n edgeLimit: z.number().int().positive().optional(),\n showSourceLocation: z.boolean().optional(),\n }),\n ])\n .optional(),\n lockDistDir: z.boolean().optional(),\n hideLogsAfterAbort: z.boolean().optional(),\n runtimeServerDeploymentId: z.boolean().optional(),\n supportsImmutableAssets: z.boolean().optional(),\n deferredEntries: z.array(z.string()).optional(),\n onBeforeDeferredEntries: z.function().returns(z.promise(z.void())).optional(),\n reportSystemEnvInlining: z.enum(['warn', 'error']).optional(),\n}\n\nexport const configSchema: zod.ZodType<NextConfig> = z.lazy(() =>\n z.strictObject({\n adapterPath: z.string().optional(),\n agentRules: z.boolean().optional(),\n allowedDevOrigins: z.array(z.string()).optional(),\n assetPrefix: z.string().optional(),\n basePath: z.string().optional(),\n bundlePagesRouterDependencies: z.boolean().optional(),\n cacheComponents: z.boolean().optional(),\n cacheHandler: z.string().min(1).optional(),\n cacheHandlers: z.record(z.string(), z.string().optional()).optional(),\n cacheLife: z\n .record(\n z.object({\n stale: z.number().optional(),\n revalidate: z.number().optional(),\n expire: z.number().optional(),\n })\n )\n .optional(),\n cacheMaxMemorySize: z.number().optional(),\n cleanDistDir: z.boolean().optional(),\n compiler: z\n .strictObject({\n emotion: z\n .union([\n z.boolean(),\n z.object({\n sourceMap: z.boolean().optional(),\n autoLabel: z\n .union([\n z.literal('always'),\n z.literal('dev-only'),\n z.literal('never'),\n ])\n .optional(),\n labelFormat: z.string().min(1).optional(),\n importMap: z\n .record(\n z.string(),\n z.record(\n z.string(),\n z.object({\n canonicalImport: z\n .tuple([z.string(), z.string()])\n .optional(),\n styledBaseImport: z\n .tuple([z.string(), z.string()])\n .optional(),\n })\n )\n )\n .optional(),\n }),\n ])\n .optional(),\n reactRemoveProperties: z\n .union([\n z.boolean().optional(),\n z.object({\n properties: z.array(z.string()).optional(),\n }),\n ])\n .optional(),\n relay: z\n .object({\n src: z.string(),\n artifactDirectory: z.string().optional(),\n language: z.enum(['javascript', 'typescript', 'flow']).optional(),\n eagerEsModules: z.boolean().optional(),\n })\n .optional(),\n removeConsole: z\n .union([\n z.boolean().optional(),\n z.object({\n exclude: z.array(z.string()).min(1).optional(),\n }),\n ])\n .optional(),\n styledComponents: z.union([\n z.boolean().optional(),\n z.object({\n displayName: z.boolean().optional(),\n topLevelImportPaths: z.array(z.string()).optional(),\n ssr: z.boolean().optional(),\n fileName: z.boolean().optional(),\n meaninglessFileNames: z.array(z.string()).optional(),\n minify: z.boolean().optional(),\n transpileTemplateLiterals: z.boolean().optional(),\n namespace: z.string().min(1).optional(),\n pure: z.boolean().optional(),\n cssProp: z.boolean().optional(),\n }),\n ]),\n styledJsx: z.union([\n z.boolean().optional(),\n z.object({\n useLightningcss: z.boolean().optional(),\n }),\n ]),\n define: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean()]))\n .optional(),\n defineServer: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean()]))\n .optional(),\n runAfterProductionCompile: z\n .function()\n .returns(z.promise(z.void()))\n .optional(),\n })\n .optional(),\n compress: z.boolean().optional(),\n configOrigin: z.string().optional(),\n crossOrigin: z\n .union([z.literal('anonymous'), z.literal('use-credentials')])\n .optional(),\n deploymentId: z.string().optional(),\n devIndicators: z\n .union([\n z.object({\n position: z\n .union([\n z.literal('bottom-left'),\n z.literal('bottom-right'),\n z.literal('top-left'),\n z.literal('top-right'),\n ])\n .optional(),\n }),\n z.literal(false),\n ])\n .optional(),\n distDir: z.string().min(1).optional(),\n env: z.record(z.string(), z.union([z.string(), z.undefined()])).optional(),\n enablePrerenderSourceMaps: z.boolean().optional(),\n excludeDefaultMomentLocales: z.boolean().optional(),\n experimental: z.strictObject(experimentalSchema).optional(),\n exportPathMap: z\n .function()\n .args(\n zExportMap,\n z.object({\n dev: z.boolean(),\n dir: z.string(),\n outDir: z.string().nullable(),\n distDir: z.string(),\n buildId: z.string(),\n })\n )\n .returns(z.union([zExportMap, z.promise(zExportMap)]))\n .optional(),\n generateBuildId: z\n .function()\n .args()\n .returns(\n z.union([\n z.string(),\n z.null(),\n z.promise(z.union([z.string(), z.null()])),\n ])\n )\n .optional(),\n generateEtags: z.boolean().optional(),\n headers: z\n .function()\n .args()\n .returns(z.promise(z.array(zHeader)))\n .optional(),\n htmlLimitedBots: z.instanceof(RegExp).optional(),\n httpAgentOptions: z\n .strictObject({ keepAlive: z.boolean().optional() })\n .optional(),\n i18n: z\n .strictObject({\n defaultLocale: z.string().min(1),\n domains: z\n .array(\n z.strictObject({\n defaultLocale: z.string().min(1),\n domain: z.string().min(1),\n http: z.literal(true).optional(),\n locales: z.array(z.string().min(1)).optional(),\n })\n )\n .optional(),\n localeDetection: z.literal(false).optional(),\n locales: z.array(z.string().min(1)),\n })\n .nullable()\n .optional(),\n images: z\n .strictObject({\n localPatterns: z\n .array(\n z.strictObject({\n pathname: z.string().optional(),\n search: z.string().optional(),\n })\n )\n .max(25)\n .optional(),\n remotePatterns: z\n .array(\n z.union([\n z.instanceof(URL),\n z.strictObject({\n hostname: z.string(),\n pathname: z.string().optional(),\n port: z.string().max(5).optional(),\n protocol: z.enum(['http', 'https']).optional(),\n search: z.string().optional(),\n }),\n ])\n )\n .max(50)\n .optional(),\n unoptimized: z.boolean().optional(),\n customCacheHandler: z.boolean().optional(),\n contentSecurityPolicy: z.string().optional(),\n contentDispositionType: z.enum(['inline', 'attachment']).optional(),\n dangerouslyAllowSVG: z.boolean().optional(),\n dangerouslyAllowLocalIP: z.boolean().optional(),\n deviceSizes: z\n .array(z.number().int().gte(1).lte(10000))\n .max(25)\n .optional(),\n disableStaticImages: z.boolean().optional(),\n domains: z.array(z.string()).max(50).optional(),\n formats: z\n .array(z.enum(['image/avif', 'image/webp']))\n .max(4)\n .optional(),\n imageSizes: z\n .array(z.number().int().gte(1).lte(10000))\n .min(0)\n .max(25)\n .optional(),\n loader: z.enum(VALID_LOADERS).optional(),\n loaderFile: z.string().optional(),\n maximumDiskCacheSize: z.number().int().min(0).optional(),\n maximumRedirects: z.number().int().min(0).max(20).optional(),\n maximumResponseBody: z\n .number()\n .int()\n .min(1)\n .max(Number.MAX_SAFE_INTEGER)\n .optional(),\n minimumCacheTTL: z.number().int().gte(0).optional(),\n path: z.string().optional(),\n qualities: z\n .array(z.number().int().gte(1).lte(100))\n .min(1)\n .max(20)\n .optional(),\n })\n .optional(),\n logging: z\n .union([\n z.object({\n fetches: z\n .object({\n fullUrl: z.boolean().optional(),\n hmrRefreshes: z.boolean().optional(),\n })\n .optional(),\n incomingRequests: z\n .union([\n z.boolean(),\n z.object({\n ignore: z.array(z.instanceof(RegExp)),\n }),\n ])\n .optional(),\n serverFunctions: z.boolean().optional(),\n browserToTerminal: z\n .union([z.boolean(), z.enum(['error', 'warn'])])\n .optional(),\n }),\n z.literal(false),\n ])\n .optional(),\n modularizeImports: z\n .record(\n z.string(),\n z.object({\n transform: z.union([z.string(), z.record(z.string(), z.string())]),\n preventFullImport: z.boolean().optional(),\n skipDefaultConversion: z.boolean().optional(),\n })\n )\n .optional(),\n onDemandEntries: z\n .strictObject({\n maxInactiveAge: z.number().optional(),\n pagesBufferLength: z.number().optional(),\n })\n .optional(),\n output: z.enum(['standalone', 'export']).optional(),\n outputFileTracingRoot: z.string().optional(),\n outputFileTracingExcludes: z\n .record(z.string(), z.array(z.string()))\n .optional(),\n outputFileTracingIncludes: z\n .record(z.string(), z.array(z.string()))\n .optional(),\n pageExtensions: z.array(z.string()).min(1).optional(),\n instrumentationClientInject: z.array(z.string()).optional(),\n partialPrefetching: z\n .union([z.boolean(), z.literal('unstable_eager')])\n .optional(),\n poweredByHeader: z.boolean().optional(),\n productionBrowserSourceMaps: z.boolean().optional(),\n reactCompiler: z.union([\n z.boolean(),\n z\n .object({\n compilationMode: z.enum(['infer', 'annotation', 'all']).optional(),\n panicThreshold: z\n .enum(['none', 'critical_errors', 'all_errors'])\n .optional(),\n })\n .optional(),\n ]),\n reactProductionProfiling: z.boolean().optional(),\n reactStrictMode: z.boolean().nullable().optional(),\n reactMaxHeadersLength: z.number().nonnegative().int().optional(),\n redirects: z\n .function()\n .args()\n .returns(z.promise(z.array(zRedirect)))\n .optional(),\n rewrites: z\n .function()\n .args()\n .returns(\n z.promise(\n z.union([\n z.array(zRewrite),\n z.object({\n beforeFiles: z.array(zRewrite),\n afterFiles: z.array(zRewrite),\n fallback: z.array(zRewrite),\n }),\n ])\n )\n )\n .optional(),\n // sassOptions properties are unknown besides implementation, use z.any() here\n sassOptions: z\n .object({\n implementation: z.string().optional(),\n })\n .catchall(z.any())\n .optional(),\n serverExternalPackages: z.array(z.string()).optional(),\n skipMiddlewareUrlNormalize: z.boolean().optional(),\n skipProxyUrlNormalize: z.boolean().optional(),\n skipTrailingSlashRedirect: z.boolean().optional(),\n staticPageGenerationTimeout: z.number().optional(),\n expireTime: z.number().optional(),\n target: z.string().optional(),\n trailingSlash: z.boolean().optional(),\n transpilePackages: z.array(z.string()).optional(),\n turbopack: zTurbopackConfig.optional(),\n typescript: z\n .strictObject({\n ignoreBuildErrors: z.boolean().optional(),\n tsconfigPath: z.string().min(1).optional(),\n })\n .optional(),\n typedRoutes: z.boolean().optional(),\n useFileSystemPublicRoutes: z.boolean().optional(),\n // The webpack config type is unknown, use z.any() here\n webpack: z.any().nullable().optional(),\n watchOptions: z\n .strictObject({\n pollIntervalMs: z.number().positive().finite().optional(),\n })\n .optional(),\n })\n)\n"],"names":["VALID_LOADERS","z","LIGHTNINGCSS_FEATURE_NAMES","SUPPORTED_TEST_RUNNERS_LIST","zSizeLimit","custom","val","zExportMap","record","string","object","page","query","any","_fallbackRouteParams","array","optional","_isAppDir","boolean","_isDynamicError","_isRoutePPREnabled","_allowEmptyStaticShell","_isFallbackUpgradeable","zRouteHas","union","type","enum","key","value","literal","undefined","zRewrite","source","destination","basePath","locale","has","missing","internal","zRedirect","and","statusCode","never","permanent","number","zHeader","headers","zTurbopackLoaderItem","strictObject","loader","options","zTurbopackLoaderBuiltinCondition","zTurbopackCondition","all","lazy","not","path","instanceof","RegExp","content","contentType","zTurbopackModuleType","zTurbopackRuleConfigItem","loaders","as","condition","zTurbopackRuleConfigCollection","zTurbopackConfig","rules","resolveAlias","resolveExtensions","root","debugIds","chunkLoadingGlobal","ignoreIssue","title","description","experimentalSchema","outputHashSalt","useSkewCookie","after","appNavFailHandling","appNewScrollHandler","coldCacheBadge","preloadEntriesOnStart","allowedRevalidateHeaderKeys","staleTimes","dynamic","static","gte","cacheLife","stale","revalidate","expire","cacheHandlers","clientRouterFilter","clientRouterFilterRedirects","clientRouterFilterAllowedRate","cpus","memoryBasedWorkersCount","craCompat","caseSensitiveRoutes","clientParamParsingOrigins","cachedNavigations","dynamicOnHover","useOffline","optimisticRouting","instrumentationClientRouterTransitionEvents","varyParams","prefetchInlining","maxSize","maxBundleSize","disableOptimizedLoading","disablePostcssPresetEnv","cacheComponents","inlineCss","esmExternals","serverActions","bodySizeLimit","allowedOrigins","maxPostponedStateSize","extensionAlias","externalDir","externalMiddlewareRewritesResolve","externalProxyRewritesResolve","exposeTestingApiInProductionBuild","requestInsights","fallbackNodePolyfills","fetchCacheKeyPrefix","forceSwcTransforms","fullySpecified","gzipSize","imgOptConcurrency","int","nullable","imgOptOperationCache","imgOptTimeoutInSeconds","imgOptMaxInputPixels","imgOptSequentialRead","imgOptSkipMetadata","isrFlushToDisk","largePageDataBytes","linkNoTouchStart","manualClientBasePath","middlewarePrefetch","proxyPrefetch","middlewareClientMaxBodySize","proxyClientMaxBodySize","multiZoneDraftMode","cssChunking","requestCost","nonnegative","finite","weightDistribution","nextScriptWorkers","optimizeCss","optimisticClientCache","parallelServerCompiles","parallelServerBuildTraces","ppr","readonly","taint","blockingSSR","prerenderEarlyExit","proxyTimeout","rootParams","mcpServer","removeUncaughtErrorAndRejectionListeners","validateRSCRequestHeaders","scrollRestoration","sri","algorithm","swcPlugins","tuple","swcEnvOptions","mode","coreJs","skip","include","exclude","shippedProposals","forceAllTransforms","debug","loose","swcTraceProfiling","urlImports","viewTransition","workerThreads","webVitalsAttribution","mdxRs","development","jsxRuntime","jsxImportSource","providerImportSource","mdxType","transitionIndicator","gestureTransition","typedRoutes","webpackBuildWorker","webpackMemoryOptimizations","turbopackMemoryEviction","turbopackPluginRuntimeStrategy","turbopackMinify","turbopackFileSystemCacheForDev","turbopackFileSystemCacheForBuild","turbopackSourceMaps","turbopackInputSourceMaps","turbopackTreeShaking","turbopackRemoveUnusedImports","turbopackRemoveUnusedExports","turbopackScopeHoisting","turbopackGenerateComponentChunks","turbopackSharedRuntime","turbopackChunkingHeuristics","firstPageLoadPriority","min","max","priorityRoutes","priorityBoost","turbopackWorkerAssetPrefix","turbopackClientSideNestedAsyncChunking","turbopackServerSideNestedAsyncChunking","turbopackImportTypeBytes","turbopackUseBuiltinBabel","turbopackUseBuiltinSass","turbopackLocalPostcssConfig","turbopackModuleIds","turbopackInferModuleSideEffects","turbopackServerFastRefresh","optimizePackageImports","optimizeServerReact","strictRouteTypes","useTypeScriptCli","clientTraceMetadata","serverMinification","serverSourceMaps","useWasmBinary","useLightningcss","lightningCssFeatures","testProxy","defaultTestRunner","allowDevelopmentBuild","reactDebugChannel","instantInsights","validationLevel","staticGenerationRetryCount","staticGenerationMaxConcurrency","staticGenerationMinPagesPerWorker","typedEnv","serverComponentsHmrCache","serverComponentsHmrCancellation","authInterrupts","useCache","durableUseCacheEntries","useCacheTimeout","positive","slowModuleDetection","buildTimeThresholdMs","globalNotFound","turbopackRustReactCompiler","browserDebugInfoInTerminal","level","depthLimit","edgeLimit","showSourceLocation","lockDistDir","hideLogsAfterAbort","runtimeServerDeploymentId","supportsImmutableAssets","deferredEntries","onBeforeDeferredEntries","function","returns","promise","void","reportSystemEnvInlining","configSchema","adapterPath","agentRules","allowedDevOrigins","assetPrefix","bundlePagesRouterDependencies","cacheHandler","cacheMaxMemorySize","cleanDistDir","compiler","emotion","sourceMap","autoLabel","labelFormat","importMap","canonicalImport","styledBaseImport","reactRemoveProperties","properties","relay","src","artifactDirectory","language","eagerEsModules","removeConsole","styledComponents","displayName","topLevelImportPaths","ssr","fileName","meaninglessFileNames","minify","transpileTemplateLiterals","namespace","pure","cssProp","styledJsx","define","defineServer","runAfterProductionCompile","compress","configOrigin","crossOrigin","deploymentId","devIndicators","position","distDir","env","enablePrerenderSourceMaps","excludeDefaultMomentLocales","experimental","exportPathMap","args","dev","dir","outDir","buildId","generateBuildId","null","generateEtags","htmlLimitedBots","httpAgentOptions","keepAlive","i18n","defaultLocale","domains","domain","http","locales","localeDetection","images","localPatterns","pathname","search","remotePatterns","URL","hostname","port","protocol","unoptimized","customCacheHandler","contentSecurityPolicy","contentDispositionType","dangerouslyAllowSVG","dangerouslyAllowLocalIP","deviceSizes","lte","disableStaticImages","formats","imageSizes","loaderFile","maximumDiskCacheSize","maximumRedirects","maximumResponseBody","Number","MAX_SAFE_INTEGER","minimumCacheTTL","qualities","logging","fetches","fullUrl","hmrRefreshes","incomingRequests","ignore","serverFunctions","browserToTerminal","modularizeImports","transform","preventFullImport","skipDefaultConversion","onDemandEntries","maxInactiveAge","pagesBufferLength","output","outputFileTracingRoot","outputFileTracingExcludes","outputFileTracingIncludes","pageExtensions","instrumentationClientInject","partialPrefetching","poweredByHeader","productionBrowserSourceMaps","reactCompiler","compilationMode","panicThreshold","reactProductionProfiling","reactStrictMode","reactMaxHeadersLength","redirects","rewrites","beforeFiles","afterFiles","fallback","sassOptions","implementation","catchall","serverExternalPackages","skipMiddlewareUrlNormalize","skipProxyUrlNormalize","skipTrailingSlashRedirect","staticPageGenerationTimeout","expireTime","target","trailingSlash","transpilePackages","turbopack","typescript","ignoreBuildErrors","tsconfigPath","useFileSystemPublicRoutes","webpack","watchOptions","pollIntervalMs"],"mappings":"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","ignoreList":[0]} |
@@ -292,3 +292,2 @@ import os from 'os'; | ||
| optimisticRouting: ex.optimisticRouting, | ||
| appShells: ex.appShells, | ||
| inlineCss: ex.inlineCss, | ||
@@ -295,0 +294,0 @@ prefetchInlining: ex.prefetchInlining, |
| import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path'; | ||
| import { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'; | ||
| /** | ||
| * Builds inline `globalThis[<global>].push(<params>)` bootstrap content for the given | ||
| * pages, seeding the runtime queue before the shared runtime chunk drains it. Only call | ||
| * this for Turbopack production builds (the only builds that populate | ||
| * `pagesChunkGroupBootstrapParams` / `chunkLoadingGlobal`). Returns undefined when none | ||
| * of the given pages have inlined params. | ||
| */ export function getTurbopackChunkGroupBootstrap(paramsByPage, chunkLoadingGlobal, pages) { | ||
| const g = JSON.stringify(chunkLoadingGlobal); | ||
| const statements = pages.map((page)=>paramsByPage[page]).filter(Boolean).map((params)=>`(globalThis[${g}] || (globalThis[${g}] = [])).push(${JSON.stringify(params)});`); | ||
| return statements.length > 0 ? statements.join('\n') : undefined; | ||
| } | ||
| export function getPageFiles(buildManifest, page) { | ||
@@ -4,0 +15,0 @@ const normalizedPage = denormalizePagePath(normalizePagePath(page)); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/server/get-page-files.ts"],"sourcesContent":["import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path'\nimport { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'\n\nexport type BuildManifest = {\n devFiles: readonly string[]\n polyfillFiles: readonly string[]\n lowPriorityFiles: readonly string[]\n rootMainFiles: readonly string[]\n // this is a separate field for flying shuttle to allow\n // different root main files per entries/build (ideally temporary)\n // until we can stitch the runtime chunks together safely\n rootMainFilesTree: { [appRoute: string]: readonly string[] }\n pages: {\n '/_app': readonly string[]\n [page: string]: readonly string[]\n }\n}\n\nexport function getPageFiles(\n buildManifest: BuildManifest,\n page: string\n): readonly string[] {\n const normalizedPage = denormalizePagePath(normalizePagePath(page))\n let files = buildManifest.pages[normalizedPage]\n\n if (!files) {\n console.warn(\n `Could not find files for ${normalizedPage} in .next/build-manifest.json`\n )\n return []\n }\n\n return files\n}\n"],"names":["denormalizePagePath","normalizePagePath","getPageFiles","buildManifest","page","normalizedPage","files","pages","console","warn"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,gDAA+C;AACnF,SAASC,iBAAiB,QAAQ,8CAA6C;AAiB/E,OAAO,SAASC,aACdC,aAA4B,EAC5BC,IAAY;IAEZ,MAAMC,iBAAiBL,oBAAoBC,kBAAkBG;IAC7D,IAAIE,QAAQH,cAAcI,KAAK,CAACF,eAAe;IAE/C,IAAI,CAACC,OAAO;QACVE,QAAQC,IAAI,CACV,CAAC,yBAAyB,EAAEJ,eAAe,6BAA6B,CAAC;QAE3E,OAAO,EAAE;IACX;IAEA,OAAOC;AACT","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/server/get-page-files.ts"],"sourcesContent":["import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path'\nimport { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'\n\nexport type BuildManifest = {\n devFiles: readonly string[]\n polyfillFiles: readonly string[]\n lowPriorityFiles: readonly string[]\n rootMainFiles: readonly string[]\n // this is a separate field for flying shuttle to allow\n // different root main files per entries/build (ideally temporary)\n // until we can stitch the runtime chunks together safely\n rootMainFilesTree: { [appRoute: string]: readonly string[] }\n pages: {\n '/_app': readonly string[]\n [page: string]: readonly string[]\n }\n // Per-page Turbopack chunk-group bootstrap params, stored as raw JSON.\n pagesChunkGroupBootstrapParams?: { [page: string]: object }\n // The chunk-loading global the runtime drains (default \"TURBOPACK\").\n chunkLoadingGlobal?: string\n}\n\n/**\n * Builds inline `globalThis[<global>].push(<params>)` bootstrap content for the given\n * pages, seeding the runtime queue before the shared runtime chunk drains it. Only call\n * this for Turbopack production builds (the only builds that populate\n * `pagesChunkGroupBootstrapParams` / `chunkLoadingGlobal`). Returns undefined when none\n * of the given pages have inlined params.\n */\nexport function getTurbopackChunkGroupBootstrap(\n paramsByPage: { [page: string]: object },\n chunkLoadingGlobal: string,\n pages: readonly string[]\n): string | undefined {\n const g = JSON.stringify(chunkLoadingGlobal)\n const statements = pages\n .map((page) => paramsByPage[page])\n .filter(Boolean)\n .map(\n (params) =>\n `(globalThis[${g}] || (globalThis[${g}] = [])).push(${JSON.stringify(\n params\n )});`\n )\n\n return statements.length > 0 ? statements.join('\\n') : undefined\n}\n\nexport function getPageFiles(\n buildManifest: BuildManifest,\n page: string\n): readonly string[] {\n const normalizedPage = denormalizePagePath(normalizePagePath(page))\n let files = buildManifest.pages[normalizedPage]\n\n if (!files) {\n console.warn(\n `Could not find files for ${normalizedPage} in .next/build-manifest.json`\n )\n return []\n }\n\n return files\n}\n"],"names":["denormalizePagePath","normalizePagePath","getTurbopackChunkGroupBootstrap","paramsByPage","chunkLoadingGlobal","pages","g","JSON","stringify","statements","map","page","filter","Boolean","params","length","join","undefined","getPageFiles","buildManifest","normalizedPage","files","console","warn"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,gDAA+C;AACnF,SAASC,iBAAiB,QAAQ,8CAA6C;AAqB/E;;;;;;CAMC,GACD,OAAO,SAASC,gCACdC,YAAwC,EACxCC,kBAA0B,EAC1BC,KAAwB;IAExB,MAAMC,IAAIC,KAAKC,SAAS,CAACJ;IACzB,MAAMK,aAAaJ,MAChBK,GAAG,CAAC,CAACC,OAASR,YAAY,CAACQ,KAAK,EAChCC,MAAM,CAACC,SACPH,GAAG,CACF,CAACI,SACC,CAAC,YAAY,EAAER,EAAE,iBAAiB,EAAEA,EAAE,cAAc,EAAEC,KAAKC,SAAS,CAClEM,QACA,EAAE,CAAC;IAGX,OAAOL,WAAWM,MAAM,GAAG,IAAIN,WAAWO,IAAI,CAAC,QAAQC;AACzD;AAEA,OAAO,SAASC,aACdC,aAA4B,EAC5BR,IAAY;IAEZ,MAAMS,iBAAiBpB,oBAAoBC,kBAAkBU;IAC7D,IAAIU,QAAQF,cAAcd,KAAK,CAACe,eAAe;IAE/C,IAAI,CAACC,OAAO;QACVC,QAAQC,IAAI,CACV,CAAC,yBAAyB,EAAEH,eAAe,6BAA6B,CAAC;QAE3E,OAAO,EAAE;IACX;IAEA,OAAOC;AACT","ignoreList":[0]} |
@@ -14,3 +14,3 @@ import { loadEnvConfig } from '@next/env'; | ||
| const versionSuffix = logBundler ? ` (${bundlerName(getBundlerFromEnv())})` : ''; | ||
| Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"16.3.0-canary.87"}`))}${versionSuffix}`); | ||
| Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"16.3.0-canary.88"}`))}${versionSuffix}`); | ||
| if (appUrl) { | ||
@@ -17,0 +17,0 @@ Log.bootstrap(`- Local: ${appUrl}`); |
@@ -112,3 +112,3 @@ // Start CPU profile if it wasn't already started. | ||
| let { port } = serverOptions; | ||
| process.title = `next-server (v${"16.3.0-canary.87"})`; | ||
| process.title = `next-server (v${"16.3.0-canary.88"})`; | ||
| let handlersReady = ()=>{}; | ||
@@ -115,0 +115,0 @@ let handlersError = ()=>{}; |
| import { SpanStatusCode } from 'next/dist/compiled/@opentelemetry/api'; | ||
| import { isLocalSpanRecordingEnabled, recordSpan } from './span-store'; | ||
| import { isLocalSpanRecordingEnabled, isRequestInsightsEnabled, recordSpan } from './span-store'; | ||
| export { isLocalSpanRecordingEnabled } from './span-store'; | ||
@@ -11,3 +11,3 @@ const TRACE_ID_HEX_LENGTH = 32; | ||
| const getLocalSpanId = ()=>(++lastLocalSpanId).toString(16).padStart(SPAN_ID_HEX_LENGTH, '0'); | ||
| export function createLocalSpan({ name, attributes, links, traceId, spanId, parentSpanId, delegateSpan }) { | ||
| export function createLocalSpan({ name, attributes, links, startTime, traceId, spanId, parentSpanId, delegateSpan }) { | ||
| return new LocalRecordingSpan({ | ||
@@ -17,2 +17,3 @@ name, | ||
| links, | ||
| startTime, | ||
| delegateSpan, | ||
@@ -41,2 +42,3 @@ traceId: traceId ?? getLocalTraceId(), | ||
| isLocalSpanRecordingEnabled, | ||
| isRequestInsightsEnabled, | ||
| withLocalSpan | ||
@@ -53,3 +55,3 @@ }; | ||
| class LocalRecordingSpan { | ||
| constructor({ name, attributes, links, delegateSpan, traceId, spanId, parentSpanId, requestIdentity }){ | ||
| constructor({ name, attributes, links, startTime, delegateSpan, traceId, spanId, parentSpanId, requestIdentity }){ | ||
| this.name = name; | ||
@@ -67,4 +69,3 @@ this.attributes = cleanSpanStoreAttributes(attributes); | ||
| this.requestIdentity = requestIdentity; | ||
| this.startTime = Date.now(); | ||
| this.startTimeMs = getCurrentTimeMs(); | ||
| this.startTime = getTimestamp(startTime); | ||
| this.statusCode = undefined; | ||
@@ -145,3 +146,3 @@ this.statusMessage = undefined; | ||
| try { | ||
| this.record(); | ||
| this.record(endTime); | ||
| } finally{ | ||
@@ -168,3 +169,3 @@ this.releaseReferences(); | ||
| } | ||
| record() { | ||
| record(endTime) { | ||
| const recordAttributes = Object.keys(this.attributes).length > 0 ? this.attributes : undefined; | ||
@@ -174,3 +175,3 @@ recordSpan({ | ||
| startTime: this.startTime, | ||
| durationMs: getCurrentTimeMs() - this.startTimeMs, | ||
| durationMs: Math.max(0, getTimestamp(endTime) - this.startTime), | ||
| status: this.statusCode === SpanStatusCode.ERROR ? 'error' : 'ok', | ||
@@ -235,5 +236,19 @@ traceId: this.spanContextValue.traceId, | ||
| } | ||
| function getCurrentTimeMs() { | ||
| return typeof performance !== 'undefined' ? performance.now() : Date.now(); | ||
| function getTimestamp(time) { | ||
| if (time instanceof Date) { | ||
| return time.getTime(); | ||
| } | ||
| if (Array.isArray(time)) { | ||
| return time[0] * 1000 + time[1] / 1000000; | ||
| } | ||
| if (typeof time === 'number') { | ||
| const timeOrigin = getPerformanceTimeOrigin(); | ||
| return timeOrigin !== undefined && time < timeOrigin ? timeOrigin + time : time; | ||
| } | ||
| const timeOrigin = getPerformanceTimeOrigin(); | ||
| return timeOrigin === undefined ? Date.now() : timeOrigin + performance.now(); | ||
| } | ||
| function getPerformanceTimeOrigin() { | ||
| return typeof performance !== 'undefined' && typeof performance.timeOrigin === 'number' ? performance.timeOrigin : undefined; | ||
| } | ||
| function getStringAttribute(attributes, key) { | ||
@@ -282,2 +297,3 @@ const value = attributes == null ? void 0 : attributes[key]; | ||
| try { | ||
| const { getRequestInsightsIdentity } = require('./request-insights-identity'); | ||
| const { workAsyncStorage } = require('../../app-render/work-async-storage.external'); | ||
@@ -287,8 +303,9 @@ const { workUnitAsyncStorage } = require('../../app-render/work-unit-async-storage.external'); | ||
| const workUnitStore = workUnitAsyncStorage.getStore(); | ||
| const requestInsightsIdentity = getRequestInsightsIdentity(); | ||
| const url = workUnitStore && 'url' in workUnitStore ? workUnitStore.url : undefined; | ||
| return { | ||
| requestId: workStore == null ? void 0 : workStore.requestId, | ||
| htmlRequestId: workStore == null ? void 0 : workStore.htmlRequestId, | ||
| requestId: (workStore == null ? void 0 : workStore.requestId) ?? (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.requestId), | ||
| htmlRequestId: (workStore == null ? void 0 : workStore.htmlRequestId) ?? (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.htmlRequestId), | ||
| route: workStore == null ? void 0 : workStore.route, | ||
| url: url ? `${url.pathname}${url.search}` : undefined | ||
| url: url ? `${url.pathname}${url.search}` : requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.url | ||
| }; | ||
@@ -295,0 +312,0 @@ } catch { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/local-span-recorder.ts"],"sourcesContent":["import type {\n AttributeValue,\n Span,\n SpanOptions,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport type { AsyncLocalStorage } from 'async_hooks'\nimport { SpanStatusCode } from 'next/dist/compiled/@opentelemetry/api'\nimport {\n isLocalSpanRecordingEnabled,\n recordSpan,\n type SpanStoreAttributes,\n type SpanStoreEvent,\n type SpanStoreLink,\n} from './span-store'\n\nexport { isLocalSpanRecordingEnabled } from './span-store'\n\nconst TRACE_ID_HEX_LENGTH = 32\nconst SPAN_ID_HEX_LENGTH = 16\n\ntype LocalSpanAttributes = Partial<Record<string, AttributeValue | undefined>>\n\nlet lastLocalTraceId = 0\nlet lastLocalSpanId = 0\nlet localSpanAsyncStorage: AsyncLocalStorage<Span> | undefined\n\nconst getLocalTraceId = () =>\n (++lastLocalTraceId).toString(16).padStart(TRACE_ID_HEX_LENGTH, '0')\n\nconst getLocalSpanId = () =>\n (++lastLocalSpanId).toString(16).padStart(SPAN_ID_HEX_LENGTH, '0')\n\nexport function createLocalSpan({\n name,\n attributes,\n links,\n traceId,\n spanId,\n parentSpanId,\n delegateSpan,\n}: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n traceId?: string\n spanId?: string\n parentSpanId?: string\n delegateSpan?: Span\n}): Span {\n return new LocalRecordingSpan({\n name,\n attributes,\n links,\n delegateSpan,\n traceId: traceId ?? getLocalTraceId(),\n spanId: spanId ?? getLocalSpanId(),\n parentSpanId,\n requestIdentity: getCurrentRequestIdentity(),\n })\n}\n\nexport function getActiveLocalSpan(): Span | undefined {\n return localSpanAsyncStorage?.getStore()\n}\n\nexport function isLocalRecordingSpan(span: Span): boolean {\n return span instanceof LocalRecordingSpan\n}\n\nexport function withLocalSpan<T>(span: Span, fn: () => T): T {\n return getLocalSpanAsyncStorage().run(span, fn)\n}\n\nexport type LocalSpanRecorder = {\n createLocalSpan: typeof createLocalSpan\n getActiveLocalSpan: typeof getActiveLocalSpan\n isLocalRecordingSpan: typeof isLocalRecordingSpan\n isLocalSpanRecordingEnabled: typeof isLocalSpanRecordingEnabled\n withLocalSpan: typeof withLocalSpan\n}\n\nexport function registerLocalSpanRecorder(): void {\n const key = Symbol.for('@next/local-span-recorder')\n ;(\n globalThis as typeof globalThis & {\n [key]?: LocalSpanRecorder\n }\n )[key] = {\n createLocalSpan,\n getActiveLocalSpan,\n isLocalRecordingSpan,\n isLocalSpanRecordingEnabled,\n withLocalSpan,\n }\n}\n\nfunction getLocalSpanAsyncStorage(): AsyncLocalStorage<Span> {\n if (!localSpanAsyncStorage) {\n const { createAsyncLocalStorage } =\n require('../../app-render/async-local-storage') as typeof import('../../app-render/async-local-storage')\n localSpanAsyncStorage = createAsyncLocalStorage()\n }\n\n return localSpanAsyncStorage\n}\n\ntype RequestIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nclass LocalRecordingSpan implements Span {\n public name: string\n\n private attributes: SpanStoreAttributes\n private events: SpanStoreEvent[]\n private readonly spanContextValue: ReturnType<Span['spanContext']>\n private delegateSpan?: Span\n private links?: SpanStoreLink[]\n private readonly parentSpanId?: string\n private requestIdentity: RequestIdentity\n private readonly startTime: number\n private readonly startTimeMs: number\n private statusCode: number | undefined\n private statusMessage: string | undefined\n private exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n private ended: boolean\n\n constructor({\n name,\n attributes,\n links,\n delegateSpan,\n traceId,\n spanId,\n parentSpanId,\n requestIdentity,\n }: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n delegateSpan?: Span\n traceId: string\n spanId: string\n parentSpanId?: string\n requestIdentity: RequestIdentity\n }) {\n this.name = name\n this.attributes = cleanSpanStoreAttributes(attributes)\n this.events = []\n this.delegateSpan = delegateSpan\n this.spanContextValue = delegateSpan?.spanContext() ?? {\n traceId,\n spanId,\n traceFlags: 0,\n }\n this.links = getSpanStoreLinks(links)\n this.parentSpanId = parentSpanId\n this.requestIdentity = requestIdentity\n this.startTime = Date.now()\n this.startTimeMs = getCurrentTimeMs()\n this.statusCode = undefined\n this.statusMessage = undefined\n this.exception = undefined\n this.ended = false\n }\n\n spanContext(): ReturnType<Span['spanContext']> {\n return this.spanContextValue\n }\n\n setAttribute(key: string, value: AttributeValue): this {\n if (this.ended) {\n return this\n }\n\n this.attributes[key] = value\n this.delegateSpan?.setAttribute(key, value)\n return this\n }\n\n setAttributes(attributes: Parameters<Span['setAttributes']>[0]): this {\n if (this.ended) {\n return this\n }\n\n // OpenTelemetry attributes may be undefined. Ignore them instead of\n // overwriting an existing value as Object.assign would.\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n this.attributes[key] = value\n }\n }\n this.delegateSpan?.setAttributes(attributes)\n return this\n }\n\n addEvent(\n name: string,\n attributesOrStartTime?: Parameters<Span['addEvent']>[1],\n startTime?: Parameters<Span['addEvent']>[2]\n ): this {\n if (this.ended) {\n return this\n }\n\n this.events.push({\n name,\n timestamp: Date.now(),\n attributes: isSpanStoreAttributes(attributesOrStartTime)\n ? cleanSpanStoreAttributes(attributesOrStartTime)\n : undefined,\n })\n this.delegateSpan?.addEvent(name, attributesOrStartTime, startTime)\n return this\n }\n\n setStatus(status: Parameters<Span['setStatus']>[0]): this {\n if (this.ended) {\n return this\n }\n\n this.statusCode = status.code\n this.statusMessage = status.message\n this.delegateSpan?.setStatus(status)\n return this\n }\n\n updateName(name: string): this {\n if (this.ended) {\n return this\n }\n\n this.name = name\n this.delegateSpan?.updateName(name)\n return this\n }\n\n end(endTime?: Parameters<Span['end']>[0]): void {\n if (this.ended) {\n return\n }\n\n this.ended = true\n try {\n this.delegateSpan?.end(endTime)\n } finally {\n try {\n this.record()\n } finally {\n this.releaseReferences()\n }\n }\n }\n\n isRecording(): boolean {\n return !this.ended\n }\n\n recordException(\n exception: Parameters<Span['recordException']>[0],\n time?: Parameters<Span['recordException']>[1]\n ): void {\n if (this.ended) {\n return\n }\n\n this.exception = getSpanStoreException(exception)\n this.events.push({\n name: 'exception',\n timestamp: Date.now(),\n attributes: getSpanStoreExceptionAttributes(this.exception),\n })\n this.delegateSpan?.recordException(exception, time)\n }\n\n private record(): void {\n const recordAttributes =\n Object.keys(this.attributes).length > 0 ? this.attributes : undefined\n\n recordSpan({\n name: this.name,\n startTime: this.startTime,\n durationMs: getCurrentTimeMs() - this.startTimeMs,\n status: this.statusCode === SpanStatusCode.ERROR ? 'error' : 'ok',\n traceId: this.spanContextValue.traceId,\n spanId: this.spanContextValue.spanId,\n parentSpanId: this.parentSpanId,\n requestId: this.requestIdentity.requestId,\n htmlRequestId: this.requestIdentity.htmlRequestId,\n route:\n getStringAttribute(recordAttributes, 'next.route') ??\n getStringAttribute(recordAttributes, 'http.route') ??\n this.requestIdentity.route,\n url:\n getStringAttribute(recordAttributes, 'http.url') ??\n this.requestIdentity.url,\n attributes: recordAttributes,\n links: this.links,\n events: this.events.length > 0 ? this.events : undefined,\n error: this.getRecordError(),\n })\n }\n\n private releaseReferences(): void {\n // AsyncLocalStorage can keep an ended span reachable when work spawned\n // inside the span outlives it. Keep only the immutable span context and\n // primitive timing/identity fields needed by the Span API after end.\n this.name = ''\n this.attributes = {}\n this.events = []\n this.delegateSpan = undefined\n this.links = undefined\n this.requestIdentity = {}\n this.statusMessage = undefined\n this.exception = undefined\n }\n\n private getRecordError():\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (this.exception) {\n return this.exception\n }\n\n if (this.statusCode === SpanStatusCode.ERROR && this.statusMessage) {\n return {\n message: this.statusMessage,\n }\n }\n\n return undefined\n }\n}\n\nfunction getSpanStoreLinks(\n links: SpanOptions['links'] | undefined\n): SpanStoreLink[] | undefined {\n const spanStoreLinks = links?.map((link) => ({\n traceId: link.context.traceId,\n spanId: link.context.spanId,\n attributes: cleanSpanStoreAttributes(link.attributes),\n }))\n\n return spanStoreLinks?.length ? spanStoreLinks : undefined\n}\n\nfunction cleanSpanStoreAttributes(\n attributes:\n | Record<string, AttributeValue | undefined>\n | SpanStoreAttributes\n | undefined\n): SpanStoreAttributes {\n const cleanedAttributes: SpanStoreAttributes = {}\n if (attributes) {\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n cleanedAttributes[key] = value\n }\n }\n }\n return cleanedAttributes\n}\n\nfunction getCurrentTimeMs(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now()\n}\n\nfunction getStringAttribute(\n attributes: SpanStoreAttributes | undefined,\n key: string\n): string | undefined {\n const value = attributes?.[key]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction isSpanStoreAttributes(\n value: Parameters<Span['addEvent']>[1]\n): value is SpanStoreAttributes {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n )\n}\n\nfunction getSpanStoreException(\n exception: Parameters<Span['recordException']>[0]\n):\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (exception instanceof Error) {\n return {\n type: exception.name,\n message: exception.message,\n }\n }\n\n if (typeof exception === 'string') {\n return {\n message: exception,\n }\n }\n\n if (exception && typeof exception === 'object') {\n return {\n type: exception.constructor?.name,\n message: 'message' in exception ? String(exception.message) : undefined,\n }\n }\n\n return undefined\n}\n\nfunction getSpanStoreExceptionAttributes(\n exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n): SpanStoreAttributes | undefined {\n if (!exception) {\n return undefined\n }\n\n const attributes: SpanStoreAttributes = {}\n if (exception.type !== undefined) {\n attributes['exception.type'] = exception.type\n }\n if (exception.message !== undefined) {\n attributes['exception.message'] = exception.message\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined\n}\n\nfunction getCurrentRequestIdentity(): RequestIdentity {\n try {\n const { workAsyncStorage } =\n require('../../app-render/work-async-storage.external') as typeof import('../../app-render/work-async-storage.external')\n const { workUnitAsyncStorage } =\n require('../../app-render/work-unit-async-storage.external') as typeof import('../../app-render/work-unit-async-storage.external')\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n const url =\n workUnitStore && 'url' in workUnitStore ? workUnitStore.url : undefined\n\n return {\n requestId: workStore?.requestId,\n htmlRequestId: workStore?.htmlRequestId,\n route: workStore?.route,\n url: url ? `${url.pathname}${url.search}` : undefined,\n }\n } catch {\n return {}\n }\n}\n"],"names":["SpanStatusCode","isLocalSpanRecordingEnabled","recordSpan","TRACE_ID_HEX_LENGTH","SPAN_ID_HEX_LENGTH","lastLocalTraceId","lastLocalSpanId","localSpanAsyncStorage","getLocalTraceId","toString","padStart","getLocalSpanId","createLocalSpan","name","attributes","links","traceId","spanId","parentSpanId","delegateSpan","LocalRecordingSpan","requestIdentity","getCurrentRequestIdentity","getActiveLocalSpan","getStore","isLocalRecordingSpan","span","withLocalSpan","fn","getLocalSpanAsyncStorage","run","registerLocalSpanRecorder","key","Symbol","for","globalThis","createAsyncLocalStorage","require","constructor","cleanSpanStoreAttributes","events","spanContextValue","spanContext","traceFlags","getSpanStoreLinks","startTime","Date","now","startTimeMs","getCurrentTimeMs","statusCode","undefined","statusMessage","exception","ended","setAttribute","value","setAttributes","Object","keys","addEvent","attributesOrStartTime","push","timestamp","isSpanStoreAttributes","setStatus","status","code","message","updateName","end","endTime","record","releaseReferences","isRecording","recordException","time","getSpanStoreException","getSpanStoreExceptionAttributes","recordAttributes","length","durationMs","ERROR","requestId","htmlRequestId","route","getStringAttribute","url","error","getRecordError","spanStoreLinks","map","link","context","cleanedAttributes","performance","Array","isArray","Error","type","String","workAsyncStorage","workUnitAsyncStorage","workStore","workUnitStore","pathname","search"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/local-span-recorder.ts"],"sourcesContent":["import type {\n AttributeValue,\n Span,\n SpanOptions,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport type { AsyncLocalStorage } from 'async_hooks'\nimport { SpanStatusCode } from 'next/dist/compiled/@opentelemetry/api'\nimport {\n isLocalSpanRecordingEnabled,\n isRequestInsightsEnabled,\n recordSpan,\n type SpanStoreAttributes,\n type SpanStoreEvent,\n type SpanStoreLink,\n} from './span-store'\n\nexport { isLocalSpanRecordingEnabled } from './span-store'\n\nconst TRACE_ID_HEX_LENGTH = 32\nconst SPAN_ID_HEX_LENGTH = 16\n\ntype LocalSpanAttributes = Partial<Record<string, AttributeValue | undefined>>\n\nlet lastLocalTraceId = 0\nlet lastLocalSpanId = 0\nlet localSpanAsyncStorage: AsyncLocalStorage<Span> | undefined\n\nconst getLocalTraceId = () =>\n (++lastLocalTraceId).toString(16).padStart(TRACE_ID_HEX_LENGTH, '0')\n\nconst getLocalSpanId = () =>\n (++lastLocalSpanId).toString(16).padStart(SPAN_ID_HEX_LENGTH, '0')\n\nexport function createLocalSpan({\n name,\n attributes,\n links,\n startTime,\n traceId,\n spanId,\n parentSpanId,\n delegateSpan,\n}: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n startTime?: SpanOptions['startTime']\n traceId?: string\n spanId?: string\n parentSpanId?: string\n delegateSpan?: Span\n}): Span {\n return new LocalRecordingSpan({\n name,\n attributes,\n links,\n startTime,\n delegateSpan,\n traceId: traceId ?? getLocalTraceId(),\n spanId: spanId ?? getLocalSpanId(),\n parentSpanId,\n requestIdentity: getCurrentRequestIdentity(),\n })\n}\n\nexport function getActiveLocalSpan(): Span | undefined {\n return localSpanAsyncStorage?.getStore()\n}\n\nexport function isLocalRecordingSpan(span: Span): boolean {\n return span instanceof LocalRecordingSpan\n}\n\nexport function withLocalSpan<T>(span: Span, fn: () => T): T {\n return getLocalSpanAsyncStorage().run(span, fn)\n}\n\nexport type LocalSpanRecorder = {\n createLocalSpan: typeof createLocalSpan\n getActiveLocalSpan: typeof getActiveLocalSpan\n isLocalRecordingSpan: typeof isLocalRecordingSpan\n isLocalSpanRecordingEnabled: typeof isLocalSpanRecordingEnabled\n isRequestInsightsEnabled: typeof isRequestInsightsEnabled\n withLocalSpan: typeof withLocalSpan\n}\n\nexport function registerLocalSpanRecorder(): void {\n const key = Symbol.for('@next/local-span-recorder')\n ;(\n globalThis as typeof globalThis & {\n [key]?: LocalSpanRecorder\n }\n )[key] = {\n createLocalSpan,\n getActiveLocalSpan,\n isLocalRecordingSpan,\n isLocalSpanRecordingEnabled,\n isRequestInsightsEnabled,\n withLocalSpan,\n }\n}\n\nfunction getLocalSpanAsyncStorage(): AsyncLocalStorage<Span> {\n if (!localSpanAsyncStorage) {\n const { createAsyncLocalStorage } =\n require('../../app-render/async-local-storage') as typeof import('../../app-render/async-local-storage')\n localSpanAsyncStorage = createAsyncLocalStorage()\n }\n\n return localSpanAsyncStorage\n}\n\ntype RequestIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nclass LocalRecordingSpan implements Span {\n public name: string\n\n private attributes: SpanStoreAttributes\n private events: SpanStoreEvent[]\n private readonly spanContextValue: ReturnType<Span['spanContext']>\n private delegateSpan?: Span\n private links?: SpanStoreLink[]\n private readonly parentSpanId?: string\n private requestIdentity: RequestIdentity\n private readonly startTime: number\n private statusCode: number | undefined\n private statusMessage: string | undefined\n private exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n private ended: boolean\n\n constructor({\n name,\n attributes,\n links,\n startTime,\n delegateSpan,\n traceId,\n spanId,\n parentSpanId,\n requestIdentity,\n }: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n startTime?: SpanOptions['startTime']\n delegateSpan?: Span\n traceId: string\n spanId: string\n parentSpanId?: string\n requestIdentity: RequestIdentity\n }) {\n this.name = name\n this.attributes = cleanSpanStoreAttributes(attributes)\n this.events = []\n this.delegateSpan = delegateSpan\n this.spanContextValue = delegateSpan?.spanContext() ?? {\n traceId,\n spanId,\n traceFlags: 0,\n }\n this.links = getSpanStoreLinks(links)\n this.parentSpanId = parentSpanId\n this.requestIdentity = requestIdentity\n this.startTime = getTimestamp(startTime)\n this.statusCode = undefined\n this.statusMessage = undefined\n this.exception = undefined\n this.ended = false\n }\n\n spanContext(): ReturnType<Span['spanContext']> {\n return this.spanContextValue\n }\n\n setAttribute(key: string, value: AttributeValue): this {\n if (this.ended) {\n return this\n }\n\n this.attributes[key] = value\n this.delegateSpan?.setAttribute(key, value)\n return this\n }\n\n setAttributes(attributes: Parameters<Span['setAttributes']>[0]): this {\n if (this.ended) {\n return this\n }\n\n // OpenTelemetry attributes may be undefined. Ignore them instead of\n // overwriting an existing value as Object.assign would.\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n this.attributes[key] = value\n }\n }\n this.delegateSpan?.setAttributes(attributes)\n return this\n }\n\n addEvent(\n name: string,\n attributesOrStartTime?: Parameters<Span['addEvent']>[1],\n startTime?: Parameters<Span['addEvent']>[2]\n ): this {\n if (this.ended) {\n return this\n }\n\n this.events.push({\n name,\n timestamp: Date.now(),\n attributes: isSpanStoreAttributes(attributesOrStartTime)\n ? cleanSpanStoreAttributes(attributesOrStartTime)\n : undefined,\n })\n this.delegateSpan?.addEvent(name, attributesOrStartTime, startTime)\n return this\n }\n\n setStatus(status: Parameters<Span['setStatus']>[0]): this {\n if (this.ended) {\n return this\n }\n\n this.statusCode = status.code\n this.statusMessage = status.message\n this.delegateSpan?.setStatus(status)\n return this\n }\n\n updateName(name: string): this {\n if (this.ended) {\n return this\n }\n\n this.name = name\n this.delegateSpan?.updateName(name)\n return this\n }\n\n end(endTime?: Parameters<Span['end']>[0]): void {\n if (this.ended) {\n return\n }\n\n this.ended = true\n try {\n this.delegateSpan?.end(endTime)\n } finally {\n try {\n this.record(endTime)\n } finally {\n this.releaseReferences()\n }\n }\n }\n\n isRecording(): boolean {\n return !this.ended\n }\n\n recordException(\n exception: Parameters<Span['recordException']>[0],\n time?: Parameters<Span['recordException']>[1]\n ): void {\n if (this.ended) {\n return\n }\n\n this.exception = getSpanStoreException(exception)\n this.events.push({\n name: 'exception',\n timestamp: Date.now(),\n attributes: getSpanStoreExceptionAttributes(this.exception),\n })\n this.delegateSpan?.recordException(exception, time)\n }\n\n private record(endTime: Parameters<Span['end']>[0]): void {\n const recordAttributes =\n Object.keys(this.attributes).length > 0 ? this.attributes : undefined\n\n recordSpan({\n name: this.name,\n startTime: this.startTime,\n durationMs: Math.max(0, getTimestamp(endTime) - this.startTime),\n status: this.statusCode === SpanStatusCode.ERROR ? 'error' : 'ok',\n traceId: this.spanContextValue.traceId,\n spanId: this.spanContextValue.spanId,\n parentSpanId: this.parentSpanId,\n requestId: this.requestIdentity.requestId,\n htmlRequestId: this.requestIdentity.htmlRequestId,\n route:\n getStringAttribute(recordAttributes, 'next.route') ??\n getStringAttribute(recordAttributes, 'http.route') ??\n this.requestIdentity.route,\n url:\n getStringAttribute(recordAttributes, 'http.url') ??\n this.requestIdentity.url,\n attributes: recordAttributes,\n links: this.links,\n events: this.events.length > 0 ? this.events : undefined,\n error: this.getRecordError(),\n })\n }\n\n private releaseReferences(): void {\n // AsyncLocalStorage can keep an ended span reachable when work spawned\n // inside the span outlives it. Keep only the immutable span context and\n // primitive timing/identity fields needed by the Span API after end.\n this.name = ''\n this.attributes = {}\n this.events = []\n this.delegateSpan = undefined\n this.links = undefined\n this.requestIdentity = {}\n this.statusMessage = undefined\n this.exception = undefined\n }\n\n private getRecordError():\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (this.exception) {\n return this.exception\n }\n\n if (this.statusCode === SpanStatusCode.ERROR && this.statusMessage) {\n return {\n message: this.statusMessage,\n }\n }\n\n return undefined\n }\n}\n\nfunction getSpanStoreLinks(\n links: SpanOptions['links'] | undefined\n): SpanStoreLink[] | undefined {\n const spanStoreLinks = links?.map((link) => ({\n traceId: link.context.traceId,\n spanId: link.context.spanId,\n attributes: cleanSpanStoreAttributes(link.attributes),\n }))\n\n return spanStoreLinks?.length ? spanStoreLinks : undefined\n}\n\nfunction cleanSpanStoreAttributes(\n attributes:\n | Record<string, AttributeValue | undefined>\n | SpanStoreAttributes\n | undefined\n): SpanStoreAttributes {\n const cleanedAttributes: SpanStoreAttributes = {}\n if (attributes) {\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n cleanedAttributes[key] = value\n }\n }\n }\n return cleanedAttributes\n}\n\nfunction getTimestamp(time?: SpanOptions['startTime']): number {\n if (time instanceof Date) {\n return time.getTime()\n }\n\n if (Array.isArray(time)) {\n return time[0] * 1000 + time[1] / 1_000_000\n }\n\n if (typeof time === 'number') {\n const timeOrigin = getPerformanceTimeOrigin()\n return timeOrigin !== undefined && time < timeOrigin\n ? timeOrigin + time\n : time\n }\n\n const timeOrigin = getPerformanceTimeOrigin()\n return timeOrigin === undefined ? Date.now() : timeOrigin + performance.now()\n}\n\nfunction getPerformanceTimeOrigin(): number | undefined {\n return typeof performance !== 'undefined' &&\n typeof performance.timeOrigin === 'number'\n ? performance.timeOrigin\n : undefined\n}\n\nfunction getStringAttribute(\n attributes: SpanStoreAttributes | undefined,\n key: string\n): string | undefined {\n const value = attributes?.[key]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction isSpanStoreAttributes(\n value: Parameters<Span['addEvent']>[1]\n): value is SpanStoreAttributes {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n )\n}\n\nfunction getSpanStoreException(\n exception: Parameters<Span['recordException']>[0]\n):\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (exception instanceof Error) {\n return {\n type: exception.name,\n message: exception.message,\n }\n }\n\n if (typeof exception === 'string') {\n return {\n message: exception,\n }\n }\n\n if (exception && typeof exception === 'object') {\n return {\n type: exception.constructor?.name,\n message: 'message' in exception ? String(exception.message) : undefined,\n }\n }\n\n return undefined\n}\n\nfunction getSpanStoreExceptionAttributes(\n exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n): SpanStoreAttributes | undefined {\n if (!exception) {\n return undefined\n }\n\n const attributes: SpanStoreAttributes = {}\n if (exception.type !== undefined) {\n attributes['exception.type'] = exception.type\n }\n if (exception.message !== undefined) {\n attributes['exception.message'] = exception.message\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined\n}\n\nfunction getCurrentRequestIdentity(): RequestIdentity {\n try {\n const { getRequestInsightsIdentity } =\n require('./request-insights-identity') as typeof import('./request-insights-identity')\n const { workAsyncStorage } =\n require('../../app-render/work-async-storage.external') as typeof import('../../app-render/work-async-storage.external')\n const { workUnitAsyncStorage } =\n require('../../app-render/work-unit-async-storage.external') as typeof import('../../app-render/work-unit-async-storage.external')\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n const requestInsightsIdentity = getRequestInsightsIdentity()\n const url =\n workUnitStore && 'url' in workUnitStore ? workUnitStore.url : undefined\n\n return {\n requestId: workStore?.requestId ?? requestInsightsIdentity?.requestId,\n htmlRequestId:\n workStore?.htmlRequestId ?? requestInsightsIdentity?.htmlRequestId,\n route: workStore?.route,\n url: url ? `${url.pathname}${url.search}` : requestInsightsIdentity?.url,\n }\n } catch {\n return {}\n }\n}\n"],"names":["SpanStatusCode","isLocalSpanRecordingEnabled","isRequestInsightsEnabled","recordSpan","TRACE_ID_HEX_LENGTH","SPAN_ID_HEX_LENGTH","lastLocalTraceId","lastLocalSpanId","localSpanAsyncStorage","getLocalTraceId","toString","padStart","getLocalSpanId","createLocalSpan","name","attributes","links","startTime","traceId","spanId","parentSpanId","delegateSpan","LocalRecordingSpan","requestIdentity","getCurrentRequestIdentity","getActiveLocalSpan","getStore","isLocalRecordingSpan","span","withLocalSpan","fn","getLocalSpanAsyncStorage","run","registerLocalSpanRecorder","key","Symbol","for","globalThis","createAsyncLocalStorage","require","constructor","cleanSpanStoreAttributes","events","spanContextValue","spanContext","traceFlags","getSpanStoreLinks","getTimestamp","statusCode","undefined","statusMessage","exception","ended","setAttribute","value","setAttributes","Object","keys","addEvent","attributesOrStartTime","push","timestamp","Date","now","isSpanStoreAttributes","setStatus","status","code","message","updateName","end","endTime","record","releaseReferences","isRecording","recordException","time","getSpanStoreException","getSpanStoreExceptionAttributes","recordAttributes","length","durationMs","Math","max","ERROR","requestId","htmlRequestId","route","getStringAttribute","url","error","getRecordError","spanStoreLinks","map","link","context","cleanedAttributes","getTime","Array","isArray","timeOrigin","getPerformanceTimeOrigin","performance","Error","type","String","getRequestInsightsIdentity","workAsyncStorage","workUnitAsyncStorage","workStore","workUnitStore","requestInsightsIdentity","pathname","search"],"mappings":"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","ignoreList":[0]} |
| export { isRequestInsightsEnabled } from './span-store'; | ||
| const MAX_REQUEST_INSIGHTS = 100; | ||
| const REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store'); | ||
| const CLIENT_COMPONENT_LOADING_SPAN_TYPE = 'NextNodeServer.clientComponentLoading'; | ||
| const REDACTED_VALUE = 'redacted'; | ||
@@ -18,2 +19,3 @@ const SAFE_SPAN_ATTRIBUTE_KEYS = new Set([ | ||
| 'next.segment', | ||
| 'next.span_category', | ||
| 'next.span_name', | ||
@@ -25,2 +27,3 @@ 'next.span_type' | ||
| recordSpan(span) { | ||
| var _span_attributes; | ||
| if (!span.requestId) { | ||
@@ -31,9 +34,6 @@ return; | ||
| const spanStartTime = span.startTime ?? span.timestamp; | ||
| const spanEndTime = span.durationMs ? spanStartTime + span.durationMs : spanStartTime; | ||
| const requestEndTime = insight.durationMs ? insight.startTime + insight.durationMs : insight.startTime; | ||
| insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId; | ||
| insight.route = insight.route ?? span.route; | ||
| insight.url = insight.url ?? sanitizeUrl(span.url); | ||
| insight.startTime = Math.min(insight.startTime, spanStartTime); | ||
| insight.durationMs = Math.max(requestEndTime, spanEndTime) - insight.startTime; | ||
| this.updateTiming(insight, spanStartTime, span.durationMs, ((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === 'BaseServer.handleRequest'); | ||
| insight.status = insight.status === 'error' || span.status === 'error' ? 'error' : span.status === 'ok' ? 'ok' : insight.status; | ||
@@ -65,5 +65,3 @@ insight.spans.push({ | ||
| const insight = this.getOrCreateRequest(identity, fetchStartTime); | ||
| const fetchEndTime = fetch.durationMs ? fetchStartTime + fetch.durationMs : fetchStartTime; | ||
| const requestEndTime = insight.durationMs ? insight.startTime + insight.durationMs : insight.startTime; | ||
| insight.durationMs = Math.max(requestEndTime, fetchEndTime) - insight.startTime; | ||
| this.updateTiming(insight, fetchStartTime, fetch.durationMs, false); | ||
| this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch)); | ||
@@ -85,4 +83,27 @@ this.notify(insight); | ||
| this.requests.clear(); | ||
| this.requestTimings.clear(); | ||
| this.requestOrder.length = 0; | ||
| } | ||
| updateTiming(insight, startTime, durationMs, isRequestSpan) { | ||
| if (isRequestSpan && durationMs !== undefined) { | ||
| const requestTiming = { | ||
| startTime, | ||
| durationMs | ||
| }; | ||
| this.requestTimings.set(insight.requestId, requestTiming); | ||
| insight.startTime = requestTiming.startTime; | ||
| insight.durationMs = requestTiming.durationMs; | ||
| return; | ||
| } | ||
| const requestTiming = this.requestTimings.get(insight.requestId); | ||
| if (requestTiming) { | ||
| insight.startTime = requestTiming.startTime; | ||
| insight.durationMs = requestTiming.durationMs; | ||
| return; | ||
| } | ||
| const endTime = startTime + (durationMs ?? 0); | ||
| const requestEndTime = insight.startTime + (insight.durationMs ?? 0); | ||
| insight.startTime = Math.min(insight.startTime, startTime); | ||
| insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime; | ||
| } | ||
| notify(insight) { | ||
@@ -128,2 +149,3 @@ for (const listener of this.listeners){ | ||
| this.requests.delete(requestId); | ||
| this.requestTimings.delete(requestId); | ||
| } | ||
@@ -134,2 +156,3 @@ } | ||
| this.requests = new Map(); | ||
| this.requestTimings = new Map(); | ||
| this.requestOrder = []; | ||
@@ -140,2 +163,6 @@ this.listeners = new Set(); | ||
| export function recordRequestInsightSpan(span) { | ||
| var _span_attributes; | ||
| if (((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === CLIENT_COMPONENT_LOADING_SPAN_TYPE) { | ||
| return; | ||
| } | ||
| getRequestInsightsStore().recordSpan(span); | ||
@@ -142,0 +169,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/request-insights.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type {\n RequestInsight,\n RequestInsightFetch,\n RequestInsightsSnapshot,\n} from '../../../next-devtools/shared/request-insights'\nimport type { SpanStoreRecord } from './span-store'\nexport { isRequestInsightsEnabled } from './span-store'\n\nconst MAX_REQUEST_INSIGHTS = 100\nconst REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store')\n\ntype RequestInsightsListener = (insight: RequestInsight) => void\ntype RequestInsightIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nconst REDACTED_VALUE = 'redacted'\nconst SAFE_SPAN_ATTRIBUTE_KEYS = new Set([\n 'http.method',\n 'http.route',\n 'http.status_code',\n 'http.url',\n 'net.peer.name',\n 'net.peer.port',\n 'next.fetch.cache_reason',\n 'next.fetch.cache_status',\n 'next.fetch.idx',\n 'next.route',\n 'next.rsc',\n 'next.segment',\n 'next.span_name',\n 'next.span_type',\n])\nconst SENSITIVE_PARAM_NAME_RE =\n /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i\n\nclass InMemoryRequestInsightsStore {\n private readonly requests = new Map<string, RequestInsight>()\n private readonly requestOrder: string[] = []\n private readonly listeners = new Set<RequestInsightsListener>()\n\n recordSpan(span: SpanStoreRecord): void {\n if (!span.requestId) {\n return\n }\n\n const insight = this.getOrCreateRequest(\n span,\n span.startTime ?? span.timestamp\n )\n\n const spanStartTime = span.startTime ?? span.timestamp\n const spanEndTime = span.durationMs\n ? spanStartTime + span.durationMs\n : spanStartTime\n const requestEndTime = insight.durationMs\n ? insight.startTime + insight.durationMs\n : insight.startTime\n\n insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? span.route\n insight.url = insight.url ?? sanitizeUrl(span.url)\n insight.startTime = Math.min(insight.startTime, spanStartTime)\n insight.durationMs =\n Math.max(requestEndTime, spanEndTime) - insight.startTime\n insight.status =\n insight.status === 'error' || span.status === 'error'\n ? 'error'\n : span.status === 'ok'\n ? 'ok'\n : insight.status\n\n insight.spans.push({\n name: span.name,\n startTime: spanStartTime,\n durationMs: span.durationMs,\n status: span.status,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n attributes: sanitizeSpanAttributes(span.attributes),\n links: sanitizeSpanLinks(span.links),\n events: sanitizeSpanEvents(span.events),\n error: span.error,\n })\n\n const fetch = getFetchInsight(span)\n if (fetch) {\n this.recordFetchForInsight(insight, fetch)\n }\n\n this.notify(insight)\n }\n\n recordFetch(identity: RequestInsightIdentity, fetch: RequestInsightFetch) {\n if (!identity.requestId) {\n return\n }\n\n const fetchStartTime = fetch.startTime ?? Date.now()\n const insight = this.getOrCreateRequest(identity, fetchStartTime)\n const fetchEndTime = fetch.durationMs\n ? fetchStartTime + fetch.durationMs\n : fetchStartTime\n const requestEndTime = insight.durationMs\n ? insight.startTime + insight.durationMs\n : insight.startTime\n\n insight.durationMs =\n Math.max(requestEndTime, fetchEndTime) - insight.startTime\n this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch))\n this.notify(insight)\n }\n\n getSnapshot(): RequestInsightsSnapshot {\n return {\n requests: this.requestOrder\n .map((requestId) => this.requests.get(requestId))\n .filter((request): request is RequestInsight => request !== undefined),\n }\n }\n\n subscribe(listener: RequestInsightsListener): () => void {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n clear(): void {\n this.requests.clear()\n this.requestOrder.length = 0\n }\n\n private notify(insight: RequestInsight): void {\n for (const listener of this.listeners) {\n listener(insight)\n }\n }\n\n private getOrCreateRequest(\n identity: RequestInsightIdentity,\n startTime: number\n ): RequestInsight {\n const requestId = identity.requestId!\n let insight = this.requests.get(requestId)\n\n if (!insight) {\n insight = {\n requestId,\n htmlRequestId: identity.htmlRequestId ?? requestId,\n route: identity.route,\n url: sanitizeUrl(identity.url),\n startTime,\n status: 'pending',\n spans: [],\n fetches: [],\n }\n this.requests.set(requestId, insight)\n this.requestOrder.push(requestId)\n this.trim()\n }\n\n insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? identity.route\n insight.url = insight.url ?? sanitizeUrl(identity.url)\n insight.startTime = Math.min(insight.startTime, startTime)\n\n return insight\n }\n\n private recordFetchForInsight(\n insight: RequestInsight,\n fetch: RequestInsightFetch\n ): void {\n if (\n insight.fetches.some(\n (existingFetch) =>\n existingFetch.url === fetch.url &&\n (existingFetch.index !== undefined && fetch.index !== undefined\n ? existingFetch.index === fetch.index\n : existingFetch.startTime === fetch.startTime)\n )\n ) {\n return\n }\n\n insight.fetches.push(sanitizeFetchInsight(fetch))\n }\n\n private trim(): void {\n while (this.requestOrder.length > MAX_REQUEST_INSIGHTS) {\n const requestId = this.requestOrder.shift()\n if (requestId) {\n this.requests.delete(requestId)\n }\n }\n }\n}\n\nexport function recordRequestInsightSpan(span: SpanStoreRecord): void {\n getRequestInsightsStore().recordSpan(span)\n}\n\nexport function recordRequestInsightFetch(\n identity: RequestInsightIdentity,\n fetch: RequestInsightFetch\n): void {\n getRequestInsightsStore().recordFetch(identity, fetch)\n}\n\nexport function getRequestInsightsSnapshot(): RequestInsightsSnapshot {\n return getRequestInsightsStore().getSnapshot()\n}\n\nexport function subscribeRequestInsights(\n listener: RequestInsightsListener\n): () => void {\n return getRequestInsightsStore().subscribe(listener)\n}\n\nexport function clearRequestInsightsForTest(): void {\n getRequestInsightsStore().clear()\n}\n\nfunction getRequestInsightsStore(): InMemoryRequestInsightsStore {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_STORE_KEY]?: InMemoryRequestInsightsStore\n }\n\n return (globalStore[REQUEST_INSIGHTS_STORE_KEY] ??=\n new InMemoryRequestInsightsStore())\n}\n\nfunction getFetchInsight(span: SpanStoreRecord): RequestInsightFetch | null {\n const attributes = span.attributes\n\n if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') {\n return null\n }\n\n return {\n url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url),\n method: getStringAttribute(attributes['http.method']),\n statusCode: getNumberAttribute(attributes['http.status_code']),\n startTime: span.startTime ?? span.timestamp,\n durationMs: span.durationMs,\n cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']),\n cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']),\n index: getNumberAttribute(attributes['next.fetch.idx']),\n }\n}\n\nfunction sanitizeFetchInsight(fetch: RequestInsightFetch): RequestInsightFetch {\n return {\n ...fetch,\n url: sanitizeUrl(fetch.url),\n }\n}\n\nfunction sanitizeSpanAttributes(\n attributes: SpanStoreRecord['attributes']\n): SpanStoreRecord['attributes'] {\n if (!attributes) {\n return undefined\n }\n\n const sanitized: NonNullable<SpanStoreRecord['attributes']> = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) {\n continue\n }\n\n sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined\n}\n\nfunction sanitizeSpanEvents(\n events: SpanStoreRecord['events']\n): SpanStoreRecord['events'] {\n return events?.map((event) => ({\n ...event,\n attributes: sanitizeSpanAttributes(event.attributes),\n }))\n}\n\nfunction sanitizeSpanLinks(\n links: SpanStoreRecord['links']\n): SpanStoreRecord['links'] {\n return links?.map((link) => ({\n ...link,\n attributes: sanitizeSpanAttributes(link.attributes),\n }))\n}\n\nfunction sanitizeUrlAttribute(value: AttributeValue): AttributeValue {\n return typeof value === 'string' ? (sanitizeUrl(value) ?? '') : value\n}\n\nfunction sanitizeUrl(value: string | undefined): string | undefined {\n if (!value) {\n return value\n }\n\n const isRelativeUrl = value.startsWith('/')\n\n try {\n const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value)\n\n url.username = ''\n url.password = ''\n\n for (const name of Array.from(url.searchParams.keys())) {\n if (SENSITIVE_PARAM_NAME_RE.test(name)) {\n url.searchParams.set(name, REDACTED_VALUE)\n }\n }\n\n return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href\n } catch {\n return value\n }\n}\n\nfunction getStringAttribute(value: AttributeValue | undefined) {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction getNumberAttribute(value: AttributeValue | undefined) {\n return typeof value === 'number' ? value : undefined\n}\n"],"names":["isRequestInsightsEnabled","MAX_REQUEST_INSIGHTS","REQUEST_INSIGHTS_STORE_KEY","Symbol","for","REDACTED_VALUE","SAFE_SPAN_ATTRIBUTE_KEYS","Set","SENSITIVE_PARAM_NAME_RE","InMemoryRequestInsightsStore","recordSpan","span","requestId","insight","getOrCreateRequest","startTime","timestamp","spanStartTime","spanEndTime","durationMs","requestEndTime","htmlRequestId","route","url","sanitizeUrl","Math","min","max","status","spans","push","name","traceId","spanId","parentSpanId","attributes","sanitizeSpanAttributes","links","sanitizeSpanLinks","events","sanitizeSpanEvents","error","fetch","getFetchInsight","recordFetchForInsight","notify","recordFetch","identity","fetchStartTime","Date","now","fetchEndTime","sanitizeFetchInsight","getSnapshot","requests","requestOrder","map","get","filter","request","undefined","subscribe","listener","listeners","add","delete","clear","length","fetches","set","trim","some","existingFetch","index","shift","Map","recordRequestInsightSpan","getRequestInsightsStore","recordRequestInsightFetch","getRequestInsightsSnapshot","subscribeRequestInsights","clearRequestInsightsForTest","globalStore","globalThis","getStringAttribute","method","statusCode","getNumberAttribute","cacheStatus","cacheReason","sanitized","key","value","Object","entries","has","sanitizeUrlAttribute","keys","event","link","isRelativeUrl","startsWith","URL","username","password","Array","from","searchParams","test","pathname","search","hash","href"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/request-insights.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type {\n RequestInsight,\n RequestInsightFetch,\n RequestInsightsSnapshot,\n} from '../../../next-devtools/shared/request-insights'\nimport type { SpanStoreRecord } from './span-store'\nexport { isRequestInsightsEnabled } from './span-store'\n\nconst MAX_REQUEST_INSIGHTS = 100\nconst REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store')\nconst CLIENT_COMPONENT_LOADING_SPAN_TYPE =\n 'NextNodeServer.clientComponentLoading'\n\ntype RequestInsightsListener = (insight: RequestInsight) => void\ntype RequestInsightIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nconst REDACTED_VALUE = 'redacted'\nconst SAFE_SPAN_ATTRIBUTE_KEYS = new Set([\n 'http.method',\n 'http.route',\n 'http.status_code',\n 'http.url',\n 'net.peer.name',\n 'net.peer.port',\n 'next.fetch.cache_reason',\n 'next.fetch.cache_status',\n 'next.fetch.idx',\n 'next.route',\n 'next.rsc',\n 'next.segment',\n 'next.span_category',\n 'next.span_name',\n 'next.span_type',\n])\nconst SENSITIVE_PARAM_NAME_RE =\n /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i\n\nclass InMemoryRequestInsightsStore {\n private readonly requests = new Map<string, RequestInsight>()\n private readonly requestTimings = new Map<\n string,\n { startTime: number; durationMs: number }\n >()\n private readonly requestOrder: string[] = []\n private readonly listeners = new Set<RequestInsightsListener>()\n\n recordSpan(span: SpanStoreRecord): void {\n if (!span.requestId) {\n return\n }\n\n const insight = this.getOrCreateRequest(\n span,\n span.startTime ?? span.timestamp\n )\n\n const spanStartTime = span.startTime ?? span.timestamp\n insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? span.route\n insight.url = insight.url ?? sanitizeUrl(span.url)\n this.updateTiming(\n insight,\n spanStartTime,\n span.durationMs,\n span.attributes?.['next.span_type'] === 'BaseServer.handleRequest'\n )\n insight.status =\n insight.status === 'error' || span.status === 'error'\n ? 'error'\n : span.status === 'ok'\n ? 'ok'\n : insight.status\n\n insight.spans.push({\n name: span.name,\n startTime: spanStartTime,\n durationMs: span.durationMs,\n status: span.status,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n attributes: sanitizeSpanAttributes(span.attributes),\n links: sanitizeSpanLinks(span.links),\n events: sanitizeSpanEvents(span.events),\n error: span.error,\n })\n\n const fetch = getFetchInsight(span)\n if (fetch) {\n this.recordFetchForInsight(insight, fetch)\n }\n\n this.notify(insight)\n }\n\n recordFetch(identity: RequestInsightIdentity, fetch: RequestInsightFetch) {\n if (!identity.requestId) {\n return\n }\n\n const fetchStartTime = fetch.startTime ?? Date.now()\n const insight = this.getOrCreateRequest(identity, fetchStartTime)\n this.updateTiming(insight, fetchStartTime, fetch.durationMs, false)\n this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch))\n this.notify(insight)\n }\n\n getSnapshot(): RequestInsightsSnapshot {\n return {\n requests: this.requestOrder\n .map((requestId) => this.requests.get(requestId))\n .filter((request): request is RequestInsight => request !== undefined),\n }\n }\n\n subscribe(listener: RequestInsightsListener): () => void {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n clear(): void {\n this.requests.clear()\n this.requestTimings.clear()\n this.requestOrder.length = 0\n }\n\n private updateTiming(\n insight: RequestInsight,\n startTime: number,\n durationMs: number | undefined,\n isRequestSpan: boolean\n ): void {\n if (isRequestSpan && durationMs !== undefined) {\n const requestTiming = { startTime, durationMs }\n this.requestTimings.set(insight.requestId, requestTiming)\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const requestTiming = this.requestTimings.get(insight.requestId)\n if (requestTiming) {\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const endTime = startTime + (durationMs ?? 0)\n const requestEndTime = insight.startTime + (insight.durationMs ?? 0)\n insight.startTime = Math.min(insight.startTime, startTime)\n insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime\n }\n\n private notify(insight: RequestInsight): void {\n for (const listener of this.listeners) {\n listener(insight)\n }\n }\n\n private getOrCreateRequest(\n identity: RequestInsightIdentity,\n startTime: number\n ): RequestInsight {\n const requestId = identity.requestId!\n let insight = this.requests.get(requestId)\n\n if (!insight) {\n insight = {\n requestId,\n htmlRequestId: identity.htmlRequestId ?? requestId,\n route: identity.route,\n url: sanitizeUrl(identity.url),\n startTime,\n status: 'pending',\n spans: [],\n fetches: [],\n }\n this.requests.set(requestId, insight)\n this.requestOrder.push(requestId)\n this.trim()\n }\n\n insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? identity.route\n insight.url = insight.url ?? sanitizeUrl(identity.url)\n insight.startTime = Math.min(insight.startTime, startTime)\n\n return insight\n }\n\n private recordFetchForInsight(\n insight: RequestInsight,\n fetch: RequestInsightFetch\n ): void {\n if (\n insight.fetches.some(\n (existingFetch) =>\n existingFetch.url === fetch.url &&\n (existingFetch.index !== undefined && fetch.index !== undefined\n ? existingFetch.index === fetch.index\n : existingFetch.startTime === fetch.startTime)\n )\n ) {\n return\n }\n\n insight.fetches.push(sanitizeFetchInsight(fetch))\n }\n\n private trim(): void {\n while (this.requestOrder.length > MAX_REQUEST_INSIGHTS) {\n const requestId = this.requestOrder.shift()\n if (requestId) {\n this.requests.delete(requestId)\n this.requestTimings.delete(requestId)\n }\n }\n }\n}\n\nexport function recordRequestInsightSpan(span: SpanStoreRecord): void {\n if (\n span.attributes?.['next.span_type'] === CLIENT_COMPONENT_LOADING_SPAN_TYPE\n ) {\n return\n }\n\n getRequestInsightsStore().recordSpan(span)\n}\n\nexport function recordRequestInsightFetch(\n identity: RequestInsightIdentity,\n fetch: RequestInsightFetch\n): void {\n getRequestInsightsStore().recordFetch(identity, fetch)\n}\n\nexport function getRequestInsightsSnapshot(): RequestInsightsSnapshot {\n return getRequestInsightsStore().getSnapshot()\n}\n\nexport function subscribeRequestInsights(\n listener: RequestInsightsListener\n): () => void {\n return getRequestInsightsStore().subscribe(listener)\n}\n\nexport function clearRequestInsightsForTest(): void {\n getRequestInsightsStore().clear()\n}\n\nfunction getRequestInsightsStore(): InMemoryRequestInsightsStore {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_STORE_KEY]?: InMemoryRequestInsightsStore\n }\n\n return (globalStore[REQUEST_INSIGHTS_STORE_KEY] ??=\n new InMemoryRequestInsightsStore())\n}\n\nfunction getFetchInsight(span: SpanStoreRecord): RequestInsightFetch | null {\n const attributes = span.attributes\n\n if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') {\n return null\n }\n\n return {\n url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url),\n method: getStringAttribute(attributes['http.method']),\n statusCode: getNumberAttribute(attributes['http.status_code']),\n startTime: span.startTime ?? span.timestamp,\n durationMs: span.durationMs,\n cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']),\n cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']),\n index: getNumberAttribute(attributes['next.fetch.idx']),\n }\n}\n\nfunction sanitizeFetchInsight(fetch: RequestInsightFetch): RequestInsightFetch {\n return {\n ...fetch,\n url: sanitizeUrl(fetch.url),\n }\n}\n\nfunction sanitizeSpanAttributes(\n attributes: SpanStoreRecord['attributes']\n): SpanStoreRecord['attributes'] {\n if (!attributes) {\n return undefined\n }\n\n const sanitized: NonNullable<SpanStoreRecord['attributes']> = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) {\n continue\n }\n\n sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined\n}\n\nfunction sanitizeSpanEvents(\n events: SpanStoreRecord['events']\n): SpanStoreRecord['events'] {\n return events?.map((event) => ({\n ...event,\n attributes: sanitizeSpanAttributes(event.attributes),\n }))\n}\n\nfunction sanitizeSpanLinks(\n links: SpanStoreRecord['links']\n): SpanStoreRecord['links'] {\n return links?.map((link) => ({\n ...link,\n attributes: sanitizeSpanAttributes(link.attributes),\n }))\n}\n\nfunction sanitizeUrlAttribute(value: AttributeValue): AttributeValue {\n return typeof value === 'string' ? (sanitizeUrl(value) ?? '') : value\n}\n\nfunction sanitizeUrl(value: string | undefined): string | undefined {\n if (!value) {\n return value\n }\n\n const isRelativeUrl = value.startsWith('/')\n\n try {\n const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value)\n\n url.username = ''\n url.password = ''\n\n for (const name of Array.from(url.searchParams.keys())) {\n if (SENSITIVE_PARAM_NAME_RE.test(name)) {\n url.searchParams.set(name, REDACTED_VALUE)\n }\n }\n\n return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href\n } catch {\n return value\n }\n}\n\nfunction getStringAttribute(value: AttributeValue | undefined) {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction getNumberAttribute(value: AttributeValue | undefined) {\n return typeof value === 'number' ? value : undefined\n}\n"],"names":["isRequestInsightsEnabled","MAX_REQUEST_INSIGHTS","REQUEST_INSIGHTS_STORE_KEY","Symbol","for","CLIENT_COMPONENT_LOADING_SPAN_TYPE","REDACTED_VALUE","SAFE_SPAN_ATTRIBUTE_KEYS","Set","SENSITIVE_PARAM_NAME_RE","InMemoryRequestInsightsStore","recordSpan","span","requestId","insight","getOrCreateRequest","startTime","timestamp","spanStartTime","htmlRequestId","route","url","sanitizeUrl","updateTiming","durationMs","attributes","status","spans","push","name","traceId","spanId","parentSpanId","sanitizeSpanAttributes","links","sanitizeSpanLinks","events","sanitizeSpanEvents","error","fetch","getFetchInsight","recordFetchForInsight","notify","recordFetch","identity","fetchStartTime","Date","now","sanitizeFetchInsight","getSnapshot","requests","requestOrder","map","get","filter","request","undefined","subscribe","listener","listeners","add","delete","clear","requestTimings","length","isRequestSpan","requestTiming","set","endTime","requestEndTime","Math","min","max","fetches","trim","some","existingFetch","index","shift","Map","recordRequestInsightSpan","getRequestInsightsStore","recordRequestInsightFetch","getRequestInsightsSnapshot","subscribeRequestInsights","clearRequestInsightsForTest","globalStore","globalThis","getStringAttribute","method","statusCode","getNumberAttribute","cacheStatus","cacheReason","sanitized","key","value","Object","entries","has","sanitizeUrlAttribute","keys","event","link","isRelativeUrl","startsWith","URL","username","password","Array","from","searchParams","test","pathname","search","hash","href"],"mappings":"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","ignoreList":[0]} |
@@ -26,2 +26,5 @@ let spanRecorderForTest; | ||
| export function isRequestInsightsEnabled() { | ||
| if (!process.env.__NEXT_DEV_SERVER) { | ||
| return false; | ||
| } | ||
| const value = process.env.__NEXT_REQUEST_INSIGHTS; | ||
@@ -28,0 +31,0 @@ return isEnabledEnvValue(value); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/span-store.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\n\nexport type SpanStoreAttributes = Record<string, AttributeValue>\n\nexport type SpanStoreLink = {\n traceId: string\n spanId: string\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreEvent = {\n name: string\n timestamp: number\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreRecord = {\n name: string\n timestamp: number\n startTime?: number\n durationMs?: number\n status?: 'ok' | 'error'\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n attributes?: SpanStoreAttributes\n links?: SpanStoreLink[]\n events?: SpanStoreEvent[]\n error?: {\n type?: string\n message?: string\n }\n}\n\ntype SpanRecorderForTest = (span: SpanStoreRecord) => void\n\nlet spanRecorderForTest: SpanRecorderForTest | undefined\n\nexport function recordSpan(record: Omit<SpanStoreRecord, 'timestamp'>): void {\n if (!isLocalSpanRecordingEnabled()) {\n return\n }\n\n const spanRecord: SpanStoreRecord = {\n timestamp: Date.now(),\n ...record,\n }\n\n spanRecorderForTest?.(spanRecord)\n\n if (isRequestInsightsEnabled() && spanRecord.requestId) {\n const { recordRequestInsightSpan } =\n require('./request-insights') as typeof import('./request-insights')\n recordRequestInsightSpan(spanRecord)\n }\n}\n\nexport function setSpanRecorderForTest(\n recorder: SpanRecorderForTest | undefined\n): void {\n spanRecorderForTest = recorder\n}\n\nexport function isLocalSpanRecordingEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return spanRecorderForTest !== undefined || isRequestInsightsEnabled()\n}\n\nexport function isRequestInsightsEnabled(): boolean {\n const value = process.env.__NEXT_REQUEST_INSIGHTS\n return isEnabledEnvValue(value)\n}\n\nfunction isEnabledEnvValue(value: string | undefined): boolean {\n return value === '1' || value === 'true' || (value as unknown) === true\n}\n"],"names":["spanRecorderForTest","recordSpan","record","isLocalSpanRecordingEnabled","spanRecord","timestamp","Date","now","isRequestInsightsEnabled","requestId","recordRequestInsightSpan","require","setSpanRecorderForTest","recorder","process","env","__NEXT_DEV_SERVER","undefined","value","__NEXT_REQUEST_INSIGHTS","isEnabledEnvValue"],"mappings":"AAwCA,IAAIA;AAEJ,OAAO,SAASC,WAAWC,MAA0C;IACnE,IAAI,CAACC,+BAA+B;QAClC;IACF;IAEA,MAAMC,aAA8B;QAClCC,WAAWC,KAAKC,GAAG;QACnB,GAAGL,MAAM;IACX;IAEAF,uCAAAA,oBAAsBI;IAEtB,IAAII,8BAA8BJ,WAAWK,SAAS,EAAE;QACtD,MAAM,EAAEC,wBAAwB,EAAE,GAChCC,QAAQ;QACVD,yBAAyBN;IAC3B;AACF;AAEA,OAAO,SAASQ,uBACdC,QAAyC;IAEzCb,sBAAsBa;AACxB;AAEA,OAAO,SAASV;IACd,IAAI,CAACW,QAAQC,GAAG,CAACC,iBAAiB,EAAE;QAClC,OAAO;IACT;IAEA,OAAOhB,wBAAwBiB,aAAaT;AAC9C;AAEA,OAAO,SAASA;IACd,MAAMU,QAAQJ,QAAQC,GAAG,CAACI,uBAAuB;IACjD,OAAOC,kBAAkBF;AAC3B;AAEA,SAASE,kBAAkBF,KAAyB;IAClD,OAAOA,UAAU,OAAOA,UAAU,UAAU,AAACA,UAAsB;AACrE","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/span-store.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\n\nexport type SpanStoreAttributes = Record<string, AttributeValue>\n\nexport type SpanStoreLink = {\n traceId: string\n spanId: string\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreEvent = {\n name: string\n timestamp: number\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreRecord = {\n name: string\n timestamp: number\n startTime?: number\n durationMs?: number\n status?: 'ok' | 'error'\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n attributes?: SpanStoreAttributes\n links?: SpanStoreLink[]\n events?: SpanStoreEvent[]\n error?: {\n type?: string\n message?: string\n }\n}\n\ntype SpanRecorderForTest = (span: SpanStoreRecord) => void\n\nlet spanRecorderForTest: SpanRecorderForTest | undefined\n\nexport function recordSpan(record: Omit<SpanStoreRecord, 'timestamp'>): void {\n if (!isLocalSpanRecordingEnabled()) {\n return\n }\n\n const spanRecord: SpanStoreRecord = {\n timestamp: Date.now(),\n ...record,\n }\n\n spanRecorderForTest?.(spanRecord)\n\n if (isRequestInsightsEnabled() && spanRecord.requestId) {\n const { recordRequestInsightSpan } =\n require('./request-insights') as typeof import('./request-insights')\n recordRequestInsightSpan(spanRecord)\n }\n}\n\nexport function setSpanRecorderForTest(\n recorder: SpanRecorderForTest | undefined\n): void {\n spanRecorderForTest = recorder\n}\n\nexport function isLocalSpanRecordingEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return spanRecorderForTest !== undefined || isRequestInsightsEnabled()\n}\n\nexport function isRequestInsightsEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n const value = process.env.__NEXT_REQUEST_INSIGHTS\n return isEnabledEnvValue(value)\n}\n\nfunction isEnabledEnvValue(value: string | undefined): boolean {\n return value === '1' || value === 'true' || (value as unknown) === true\n}\n"],"names":["spanRecorderForTest","recordSpan","record","isLocalSpanRecordingEnabled","spanRecord","timestamp","Date","now","isRequestInsightsEnabled","requestId","recordRequestInsightSpan","require","setSpanRecorderForTest","recorder","process","env","__NEXT_DEV_SERVER","undefined","value","__NEXT_REQUEST_INSIGHTS","isEnabledEnvValue"],"mappings":"AAwCA,IAAIA;AAEJ,OAAO,SAASC,WAAWC,MAA0C;IACnE,IAAI,CAACC,+BAA+B;QAClC;IACF;IAEA,MAAMC,aAA8B;QAClCC,WAAWC,KAAKC,GAAG;QACnB,GAAGL,MAAM;IACX;IAEAF,uCAAAA,oBAAsBI;IAEtB,IAAII,8BAA8BJ,WAAWK,SAAS,EAAE;QACtD,MAAM,EAAEC,wBAAwB,EAAE,GAChCC,QAAQ;QACVD,yBAAyBN;IAC3B;AACF;AAEA,OAAO,SAASQ,uBACdC,QAAyC;IAEzCb,sBAAsBa;AACxB;AAEA,OAAO,SAASV;IACd,IAAI,CAACW,QAAQC,GAAG,CAACC,iBAAiB,EAAE;QAClC,OAAO;IACT;IAEA,OAAOhB,wBAAwBiB,aAAaT;AAC9C;AAEA,OAAO,SAASA;IACd,IAAI,CAACM,QAAQC,GAAG,CAACC,iBAAiB,EAAE;QAClC,OAAO;IACT;IAEA,MAAME,QAAQJ,QAAQC,GAAG,CAACI,uBAAuB;IACjD,OAAOC,kBAAkBF;AAC3B;AAEA,SAASE,kBAAkBF,KAAyB;IAClD,OAAOA,UAAU,OAAOA,UAAU,UAAU,AAACA,UAAsB;AACrE","ignoreList":[0]} |
@@ -137,6 +137,6 @@ import { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'; | ||
| trace(...args) { | ||
| var _getLocalSpanRecorder; | ||
| const [type, fnOrOptions, fnOrEmpty] = args; | ||
| const tracingEnabled = Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled(); | ||
| const localSpanRecordingEnabled = ((_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; | ||
| const localSpanRecorder = getLocalSpanRecorder(); | ||
| const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; | ||
| if (!tracingEnabled && !localSpanRecordingEnabled) { | ||
@@ -156,3 +156,5 @@ return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty(); | ||
| const spanName = options.spanName ?? type; | ||
| if (!NextVanillaSpanAllowlist.has(type) && process.env.NEXT_OTEL_VERBOSE !== '1' || options.hideSpan) { | ||
| const shouldDelegateSpan = NextVanillaSpanAllowlist.has(type) || process.env.NEXT_OTEL_VERBOSE === '1'; | ||
| const shouldTraceSpan = shouldDelegateSpan || ((localSpanRecorder == null ? void 0 : localSpanRecorder.isRequestInsightsEnabled()) ?? false); | ||
| if (!shouldTraceSpan || options.hideSpan) { | ||
| return fn(); | ||
@@ -173,2 +175,3 @@ } | ||
| options.attributes = { | ||
| 'next.span_category': 'nextjs', | ||
| 'next.span_name': spanName, | ||
@@ -178,3 +181,3 @@ 'next.span_type': type, | ||
| }; | ||
| return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled, localSpanRecordingEnabled, (span)=>{ | ||
| return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled && shouldDelegateSpan, localSpanRecordingEnabled, (span)=>{ | ||
| let startTime; | ||
@@ -255,2 +258,3 @@ if (NEXT_OTEL_PERFORMANCE_PREFIX && type && LogSpanAllowList.has(type)) { | ||
| links: options.links, | ||
| startTime: options.startTime, | ||
| delegateSpan, | ||
@@ -269,3 +273,3 @@ traceId: (delegateSpanContext == null ? void 0 : delegateSpanContext.traceId) ?? (parentSpanContext == null ? void 0 : parentSpanContext.traceId), | ||
| ]; | ||
| if (!NextVanillaSpanAllowlist.has(name) && process.env.NEXT_OTEL_VERBOSE !== '1') { | ||
| if (!NextVanillaSpanAllowlist.has(name) && process.env.NEXT_OTEL_VERBOSE !== '1' && !process.env.__NEXT_DEV_SERVER) { | ||
| return fn; | ||
@@ -296,4 +300,15 @@ } | ||
| var _getLocalSpanRecorder; | ||
| const [type, options] = args; | ||
| const parentContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan()) ?? context.active(); | ||
| const [type, passedOptions] = args; | ||
| const options = passedOptions ? { | ||
| ...passedOptions, | ||
| attributes: { | ||
| 'next.span_category': 'nextjs', | ||
| ...passedOptions.attributes | ||
| } | ||
| } : { | ||
| attributes: { | ||
| 'next.span_category': 'nextjs' | ||
| } | ||
| }; | ||
| const parentContext = this.getSpanContext(options.parentSpan ?? this.getActiveScopeSpan()) ?? context.active(); | ||
| const localSpanRecordingEnabled = ((_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; | ||
@@ -304,3 +319,3 @@ if (!localSpanRecordingEnabled) { | ||
| const delegateSpan = this.isOpenTelemetryEnabled() ? this.getTracerInstance().startSpan(type, options, parentContext) : undefined; | ||
| return this.createLocalRecordingSpan(type, options ?? {}, parentContext, delegateSpan); | ||
| return this.createLocalRecordingSpan(type, options, parentContext, delegateSpan); | ||
| } | ||
@@ -307,0 +322,0 @@ getSpanContext(parentSpan) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/tracer.ts"],"sourcesContent":["import type { FetchEventResult } from '../../web/types'\nimport type { TextMapSetter } from '@opentelemetry/api'\nimport type { SpanTypes } from './constants'\nimport type { LocalSpanRecorder } from './local-span-recorder'\nimport { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'\n\nimport type {\n Context,\n ContextAPI,\n Span,\n SpanOptions,\n Tracer,\n AttributeValue,\n TextMapGetter,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport { isThenable } from '../../../shared/lib/is-thenable'\n\nconst NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX\nconst LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder')\n\ntype GlobalWithLocalSpanRecorder = typeof globalThis & {\n [LOCAL_SPAN_RECORDER_KEY]?: LocalSpanRecorder\n}\n\nlet api: typeof import('next/dist/compiled/@opentelemetry/api')\n\nfunction getLocalSpanRecorder() {\n if (process.env.__NEXT_DEV_SERVER) {\n return (globalThis as GlobalWithLocalSpanRecorder)[LOCAL_SPAN_RECORDER_KEY]\n } else {\n return undefined\n }\n}\n\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (process.env.NEXT_RUNTIME === 'edge') {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n} else {\n try {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n } catch (err) {\n api =\n require('next/dist/compiled/@opentelemetry/api') as typeof import('next/dist/compiled/@opentelemetry/api')\n }\n}\n\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } =\n api\n\nexport class BubbledError extends Error {\n constructor(\n public readonly bubble?: boolean,\n public readonly result?: FetchEventResult\n ) {\n super()\n }\n}\n\nexport function isBubbledError(error: unknown): error is BubbledError {\n if (typeof error !== 'object' || error === null) return false\n return error instanceof BubbledError\n}\n\nconst closeSpanWithError = (span: Span, error?: Error) => {\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true)\n } else {\n if (error) {\n span.recordException(error)\n span.setAttribute('error.type', error.name)\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message })\n }\n span.end()\n}\n\ntype TracerSpanOptions = Omit<SpanOptions, 'attributes'> & {\n parentSpan?: Span\n spanName?: string\n attributes?: Partial<Record<AttributeNames, AttributeValue | undefined>>\n hideSpan?: boolean\n}\n\ninterface NextTracer {\n getContext(): ContextAPI\n\n /**\n * Instruments a function by automatically creating a span activated on its\n * scope.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its second parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n *\n */\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n\n /**\n * Wrap a function to automatically create a span activated on its\n * scope when it's called.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its last parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n */\n wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * This method do NOT modify the current Context by default. In result, any inner span will not\n * automatically set its parent context to the span created by this method unless manually activate\n * context via `tracer.getContext().with`. `trace`, or `wrap` is generally recommended as it gracefully\n * handles context activation. (ref: https://github.com/open-telemetry/opentelemetry-js/issues/1923)\n */\n startSpan(type: SpanTypes): Span\n startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n\n /**\n * Returns currently activated span if current context is in the scope of the span.\n * Returns undefined otherwise.\n */\n getActiveScopeSpan(): Span | undefined\n\n /**\n * Returns trace propagation data for the currently active context. The format is equal to data provided\n * through the OpenTelemetry propagator API.\n */\n getTracePropagationData(): ClientTraceDataEntry[]\n\n /**\n * Executes a function with the given span set as the active span in the context.\n * This allows child spans created within the function to automatically parent to this span.\n */\n withSpan<T>(span: Span, fn: () => T): T\n}\n\ntype NextAttributeNames =\n | 'next.route'\n | 'next.page'\n | 'next.rsc'\n | 'next.segment'\n | 'next.span_name'\n | 'next.span_type'\n | 'next.clientComponentLoadCount'\ntype OTELAttributeNames = `http.${string}` | `net.${string}`\ntype AttributeNames = NextAttributeNames | OTELAttributeNames\n\n/** we use this map to propagate attributes from nested spans to the top span */\nconst rootSpanAttributesStore = new Map<\n number,\n Map<AttributeNames, AttributeValue | undefined>\n>()\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId')\nlet lastSpanId = 0\nconst getSpanId = () => lastSpanId++\n\nexport interface ClientTraceDataEntry {\n key: string\n value: string\n}\n\nconst clientTraceDataSetter: TextMapSetter<ClientTraceDataEntry[]> = {\n set(carrier, key, value) {\n carrier.push({\n key,\n value,\n })\n },\n}\n\nclass NextTracerImpl implements NextTracer {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */\n private getTracerInstance(): Tracer {\n return trace.getTracer('next.js', '0.0.1')\n }\n\n private isOpenTelemetryEnabled(): boolean {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan?.isRecording()) {\n return true\n }\n\n const tracerProvider = trace.getTracerProvider() as {\n getDelegate?: () => { constructor?: { name?: string } } | undefined\n }\n\n if (!('getDelegate' in tracerProvider)) {\n return true\n }\n\n return (\n tracerProvider.getDelegate?.()?.constructor?.name !== 'NoopTracerProvider'\n )\n }\n\n public getContext(): ContextAPI {\n return context\n }\n\n public getTracePropagationData(): ClientTraceDataEntry[] {\n const activeContext = context.active()\n const entries: ClientTraceDataEntry[] = []\n propagation.inject(activeContext, entries, clientTraceDataSetter)\n return entries\n }\n\n public getActiveScopeSpan(): Span | undefined {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan || !process.env.__NEXT_DEV_SERVER) {\n return activeSpan\n }\n return getLocalSpanRecorder()?.getActiveLocalSpan()\n }\n\n /**\n * Run `fn` with the active span cleared, so spans created inside become new\n * roots (or parent to incoming propagated context). Used for in-process\n * Node.js middleware so its span is a sibling of the request span, matching\n * edge middleware which runs in a detached sandbox.\n */\n public runWithDetachedContext<T>(fn: () => T): T {\n if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {\n return fn()\n }\n return context.with(ROOT_CONTEXT, fn)\n }\n\n public withPropagatedContext<T, C>(\n carrier: C,\n fn: () => T,\n getter?: TextMapGetter<C>,\n force = false\n ): T {\n const activeContext = context.active()\n\n if (\n !NEXT_OTEL_PERFORMANCE_PREFIX &&\n !this.isOpenTelemetryEnabled() &&\n !trace.getSpanContext(activeContext)\n ) {\n return fn()\n }\n\n if (force) {\n const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter)\n\n if (trace.getSpanContext(remoteContext)) {\n return context.with(remoteContext, fn)\n }\n\n // Preserve the current active span while still merging any extracted\n // baggage/context values from the carrier.\n const mergedContext = propagation.extract(activeContext, carrier, getter)\n return context.with(mergedContext, fn)\n }\n\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn()\n }\n\n const remoteContext = propagation.extract(activeContext, carrier, getter)\n return context.with(remoteContext, fn)\n }\n\n // Trace, wrap implementation is inspired by datadog trace implementation\n // (https://datadoghq.dev/dd-trace-js/interfaces/tracer.html#trace).\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(...args: Array<any>) {\n const [type, fnOrOptions, fnOrEmpty] = args\n const tracingEnabled =\n Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled()\n const localSpanRecordingEnabled =\n getLocalSpanRecorder()?.isLocalSpanRecordingEnabled() ?? false\n\n if (!tracingEnabled && !localSpanRecordingEnabled) {\n return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty()\n }\n\n // coerce options form overload\n const {\n fn,\n options,\n }: {\n fn: (span?: Span, done?: (error?: Error) => any) => T | Promise<T>\n options: TracerSpanOptions\n } =\n typeof fnOrOptions === 'function'\n ? {\n fn: fnOrOptions,\n options: {},\n }\n : {\n fn: fnOrEmpty,\n options: { ...fnOrOptions },\n }\n\n const spanName = options.spanName ?? type\n\n if (\n (!NextVanillaSpanAllowlist.has(type) &&\n process.env.NEXT_OTEL_VERBOSE !== '1') ||\n options.hideSpan\n ) {\n return fn()\n }\n\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = this.getSpanContext(\n options?.parentSpan ?? this.getActiveScopeSpan()\n )\n\n if (!spanContext) {\n spanContext = context?.active() ?? ROOT_CONTEXT\n }\n // Check if there's already a root span in the store for this trace\n // We are intentionally not checking whether there is an active context\n // from outside of nextjs to ensure that we can provide the same level\n // of telemetry when using a custom server\n const existingRootSpanId = spanContext.getValue(rootSpanIdKey)\n const isRootSpan =\n typeof existingRootSpanId !== 'number' ||\n !rootSpanAttributesStore.has(existingRootSpanId)\n\n const spanId = getSpanId()\n\n options.attributes = {\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes,\n }\n\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), () =>\n this.runWithActiveSpan(\n spanName,\n options,\n spanContext,\n tracingEnabled,\n localSpanRecordingEnabled,\n (span: Span) => {\n let startTime: number | undefined\n if (\n NEXT_OTEL_PERFORMANCE_PREFIX &&\n type &&\n LogSpanAllowList.has(type)\n ) {\n startTime =\n 'performance' in globalThis && 'measure' in performance\n ? globalThis.performance.now()\n : undefined\n }\n\n let cleanedUp = false\n const onCleanup = () => {\n if (cleanedUp) return\n cleanedUp = true\n rootSpanAttributesStore.delete(spanId)\n if (startTime) {\n performance.measure(\n `${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(\n type.split('.').pop() || ''\n ).replace(\n /[A-Z]/g,\n (match: string) => '-' + match.toLowerCase()\n )}`,\n {\n start: startTime,\n end: performance.now(),\n }\n )\n }\n }\n\n if (isRootSpan) {\n rootSpanAttributesStore.set(\n spanId,\n new Map(\n Object.entries(options.attributes ?? {}) as [\n AttributeNames,\n AttributeValue | undefined,\n ][]\n )\n )\n }\n if (fn.length > 1) {\n try {\n return fn(span, (err) => {\n if (err) {\n closeSpanWithError(span, err)\n } else {\n span.end()\n }\n })\n } catch (err: any) {\n closeSpanWithError(span, err)\n throw err\n } finally {\n onCleanup()\n }\n }\n\n try {\n const result = fn(span)\n if (isThenable(result)) {\n // If there's error make sure it throws\n return result\n .then((res) => {\n span.end()\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res\n })\n .catch((err) => {\n closeSpanWithError(span, err)\n throw err\n })\n .finally(onCleanup)\n } else {\n span.end()\n onCleanup()\n }\n\n return result\n } catch (err: any) {\n closeSpanWithError(span, err)\n onCleanup()\n throw err\n }\n }\n )\n )\n }\n\n private runWithActiveSpan<T>(\n spanName: string,\n options: TracerSpanOptions,\n parentContext: Context,\n tracingEnabled: boolean,\n localSpanRecordingEnabled: boolean,\n fn: (span: Span) => T\n ): T {\n if (tracingEnabled) {\n return this.getTracerInstance().startActiveSpan(\n spanName,\n options,\n (span: Span) =>\n fn(\n localSpanRecordingEnabled\n ? this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n span\n )\n : span\n )\n )\n }\n\n const span = this.createLocalRecordingSpan(spanName, options, parentContext)\n const activeContext = trace.setSpan(context.active(), span)\n\n return getLocalSpanRecorder()!.withLocalSpan(span, () =>\n context.with(activeContext, fn, undefined, span)\n )\n }\n\n private createLocalRecordingSpan(\n name: string,\n options: TracerSpanOptions,\n parentContext: Context,\n delegateSpan?: Span\n ): Span {\n const parentSpanContext = trace.getSpanContext(parentContext)\n const delegateSpanContext = delegateSpan?.spanContext()\n\n return getLocalSpanRecorder()!.createLocalSpan({\n name,\n attributes: options.attributes,\n links: options.links,\n delegateSpan,\n traceId: delegateSpanContext?.traceId ?? parentSpanContext?.traceId,\n spanId: delegateSpanContext?.spanId,\n parentSpanId: parentSpanContext?.spanId,\n })\n }\n\n public wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n public wrap(...args: Array<any>) {\n const tracer = this\n const [name, options, fn] =\n args.length === 3 ? args : [args[0], {}, args[1]]\n\n if (\n !NextVanillaSpanAllowlist.has(name) &&\n process.env.NEXT_OTEL_VERBOSE !== '1'\n ) {\n return fn\n }\n\n return function (this: any) {\n let optionsObj = options\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments)\n }\n\n const lastArgId = arguments.length - 1\n const cb = arguments[lastArgId]\n\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb)\n return tracer.trace(name, optionsObj, (_span, done) => {\n arguments[lastArgId] = function (err: any) {\n done?.(err)\n return scopeBoundCb.apply(this, arguments)\n }\n\n return fn.apply(this, arguments)\n })\n } else {\n return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))\n }\n }\n }\n\n public startSpan(type: SpanTypes): Span\n public startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n public startSpan(...args: Array<any>): Span {\n const [type, options]: [string, TracerSpanOptions | undefined] = args as any\n\n const parentContext =\n this.getSpanContext(options?.parentSpan ?? this.getActiveScopeSpan()) ??\n context.active()\n const localSpanRecordingEnabled =\n getLocalSpanRecorder()?.isLocalSpanRecordingEnabled() ?? false\n\n if (!localSpanRecordingEnabled) {\n return this.getTracerInstance().startSpan(type, options, parentContext)\n }\n\n const delegateSpan = this.isOpenTelemetryEnabled()\n ? this.getTracerInstance().startSpan(type, options, parentContext)\n : undefined\n\n return this.createLocalRecordingSpan(\n type,\n options ?? {},\n parentContext,\n delegateSpan\n )\n }\n\n private getSpanContext(parentSpan?: Span) {\n const spanContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined\n\n return spanContext\n }\n\n public getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n return rootSpanAttributesStore.get(spanId)\n }\n\n public setRootSpanAttribute(key: AttributeNames, value: AttributeValue) {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n const attributes = rootSpanAttributesStore.get(spanId)\n if (attributes && !attributes.has(key)) {\n attributes.set(key, value)\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n const localSpan = getLocalSpanRecorder()?.getActiveLocalSpan()\n if (localSpan) {\n localSpan.setAttribute(key, value)\n }\n }\n }\n\n public withSpan<T>(span: Span, fn: () => T): T {\n const spanContext = trace.setSpan(context.active(), span)\n const recorder = getLocalSpanRecorder()\n if (recorder?.isLocalRecordingSpan(span)) {\n return recorder.withLocalSpan(span, () => context.with(spanContext, fn))\n }\n return context.with(spanContext, fn)\n }\n}\n\nconst getTracer = (() => {\n const tracer = new NextTracerImpl()\n\n return () => tracer\n})()\n\nexport { getTracer, SpanStatusCode, SpanKind }\nexport type { NextTracer, Span, SpanOptions, ContextAPI, TracerSpanOptions }\n"],"names":["LogSpanAllowList","NextVanillaSpanAllowlist","isThenable","NEXT_OTEL_PERFORMANCE_PREFIX","process","env","LOCAL_SPAN_RECORDER_KEY","Symbol","for","api","getLocalSpanRecorder","__NEXT_DEV_SERVER","globalThis","undefined","NEXT_RUNTIME","require","err","context","propagation","trace","SpanStatusCode","SpanKind","ROOT_CONTEXT","BubbledError","Error","constructor","bubble","result","isBubbledError","error","closeSpanWithError","span","setAttribute","recordException","name","setStatus","code","ERROR","message","end","rootSpanAttributesStore","Map","rootSpanIdKey","createContextKey","lastSpanId","getSpanId","clientTraceDataSetter","set","carrier","key","value","push","NextTracerImpl","getTracerInstance","getTracer","isOpenTelemetryEnabled","tracerProvider","activeSpan","getSpan","active","isRecording","getTracerProvider","getDelegate","getContext","getTracePropagationData","activeContext","entries","inject","getActiveScopeSpan","getActiveLocalSpan","runWithDetachedContext","fn","with","withPropagatedContext","getter","force","getSpanContext","remoteContext","extract","mergedContext","args","type","fnOrOptions","fnOrEmpty","tracingEnabled","Boolean","localSpanRecordingEnabled","isLocalSpanRecordingEnabled","options","spanName","has","NEXT_OTEL_VERBOSE","hideSpan","spanContext","parentSpan","existingRootSpanId","getValue","isRootSpan","spanId","attributes","setValue","runWithActiveSpan","startTime","performance","now","cleanedUp","onCleanup","delete","measure","split","pop","replace","match","toLowerCase","start","Object","length","then","res","catch","finally","parentContext","startActiveSpan","createLocalRecordingSpan","setSpan","withLocalSpan","delegateSpan","parentSpanContext","delegateSpanContext","createLocalSpan","links","traceId","parentSpanId","wrap","tracer","optionsObj","apply","arguments","lastArgId","cb","scopeBoundCb","bind","_span","done","startSpan","getRootSpanAttributes","get","setRootSpanAttribute","localSpan","withSpan","recorder","isLocalRecordingSpan"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../../src/server/lib/trace/tracer.ts"],"sourcesContent":["import type { FetchEventResult } from '../../web/types'\nimport type { TextMapSetter } from '@opentelemetry/api'\nimport type { SpanTypes } from './constants'\nimport type { LocalSpanRecorder } from './local-span-recorder'\nimport { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'\n\nimport type {\n Context,\n ContextAPI,\n Span,\n SpanOptions,\n Tracer,\n AttributeValue,\n TextMapGetter,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport { isThenable } from '../../../shared/lib/is-thenable'\n\nconst NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX\nconst LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder')\n\ntype GlobalWithLocalSpanRecorder = typeof globalThis & {\n [LOCAL_SPAN_RECORDER_KEY]?: LocalSpanRecorder\n}\n\nlet api: typeof import('next/dist/compiled/@opentelemetry/api')\n\nfunction getLocalSpanRecorder() {\n if (process.env.__NEXT_DEV_SERVER) {\n return (globalThis as GlobalWithLocalSpanRecorder)[LOCAL_SPAN_RECORDER_KEY]\n } else {\n return undefined\n }\n}\n\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (process.env.NEXT_RUNTIME === 'edge') {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n} else {\n try {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n } catch (err) {\n api =\n require('next/dist/compiled/@opentelemetry/api') as typeof import('next/dist/compiled/@opentelemetry/api')\n }\n}\n\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } =\n api\n\nexport class BubbledError extends Error {\n constructor(\n public readonly bubble?: boolean,\n public readonly result?: FetchEventResult\n ) {\n super()\n }\n}\n\nexport function isBubbledError(error: unknown): error is BubbledError {\n if (typeof error !== 'object' || error === null) return false\n return error instanceof BubbledError\n}\n\nconst closeSpanWithError = (span: Span, error?: Error) => {\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true)\n } else {\n if (error) {\n span.recordException(error)\n span.setAttribute('error.type', error.name)\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message })\n }\n span.end()\n}\n\ntype TracerSpanOptions = Omit<SpanOptions, 'attributes'> & {\n parentSpan?: Span\n spanName?: string\n attributes?: Partial<Record<AttributeNames, AttributeValue | undefined>>\n hideSpan?: boolean\n}\n\ninterface NextTracer {\n getContext(): ContextAPI\n\n /**\n * Instruments a function by automatically creating a span activated on its\n * scope.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its second parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n *\n */\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n\n /**\n * Wrap a function to automatically create a span activated on its\n * scope when it's called.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its last parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n */\n wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * This method do NOT modify the current Context by default. In result, any inner span will not\n * automatically set its parent context to the span created by this method unless manually activate\n * context via `tracer.getContext().with`. `trace`, or `wrap` is generally recommended as it gracefully\n * handles context activation. (ref: https://github.com/open-telemetry/opentelemetry-js/issues/1923)\n */\n startSpan(type: SpanTypes): Span\n startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n\n /**\n * Returns currently activated span if current context is in the scope of the span.\n * Returns undefined otherwise.\n */\n getActiveScopeSpan(): Span | undefined\n\n /**\n * Returns trace propagation data for the currently active context. The format is equal to data provided\n * through the OpenTelemetry propagator API.\n */\n getTracePropagationData(): ClientTraceDataEntry[]\n\n /**\n * Executes a function with the given span set as the active span in the context.\n * This allows child spans created within the function to automatically parent to this span.\n */\n withSpan<T>(span: Span, fn: () => T): T\n}\n\ntype NextAttributeNames =\n | 'next.route'\n | 'next.page'\n | 'next.rsc'\n | 'next.segment'\n | 'next.span_category'\n | 'next.span_name'\n | 'next.span_type'\n | 'next.clientComponentLoadCount'\ntype OTELAttributeNames = `http.${string}` | `net.${string}`\ntype AttributeNames = NextAttributeNames | OTELAttributeNames\n\n/** we use this map to propagate attributes from nested spans to the top span */\nconst rootSpanAttributesStore = new Map<\n number,\n Map<AttributeNames, AttributeValue | undefined>\n>()\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId')\nlet lastSpanId = 0\nconst getSpanId = () => lastSpanId++\n\nexport interface ClientTraceDataEntry {\n key: string\n value: string\n}\n\nconst clientTraceDataSetter: TextMapSetter<ClientTraceDataEntry[]> = {\n set(carrier, key, value) {\n carrier.push({\n key,\n value,\n })\n },\n}\n\nclass NextTracerImpl implements NextTracer {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */\n private getTracerInstance(): Tracer {\n return trace.getTracer('next.js', '0.0.1')\n }\n\n private isOpenTelemetryEnabled(): boolean {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan?.isRecording()) {\n return true\n }\n\n const tracerProvider = trace.getTracerProvider() as {\n getDelegate?: () => { constructor?: { name?: string } } | undefined\n }\n\n if (!('getDelegate' in tracerProvider)) {\n return true\n }\n\n return (\n tracerProvider.getDelegate?.()?.constructor?.name !== 'NoopTracerProvider'\n )\n }\n\n public getContext(): ContextAPI {\n return context\n }\n\n public getTracePropagationData(): ClientTraceDataEntry[] {\n const activeContext = context.active()\n const entries: ClientTraceDataEntry[] = []\n propagation.inject(activeContext, entries, clientTraceDataSetter)\n return entries\n }\n\n public getActiveScopeSpan(): Span | undefined {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan || !process.env.__NEXT_DEV_SERVER) {\n return activeSpan\n }\n return getLocalSpanRecorder()?.getActiveLocalSpan()\n }\n\n /**\n * Run `fn` with the active span cleared, so spans created inside become new\n * roots (or parent to incoming propagated context). Used for in-process\n * Node.js middleware so its span is a sibling of the request span, matching\n * edge middleware which runs in a detached sandbox.\n */\n public runWithDetachedContext<T>(fn: () => T): T {\n if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {\n return fn()\n }\n return context.with(ROOT_CONTEXT, fn)\n }\n\n public withPropagatedContext<T, C>(\n carrier: C,\n fn: () => T,\n getter?: TextMapGetter<C>,\n force = false\n ): T {\n const activeContext = context.active()\n\n if (\n !NEXT_OTEL_PERFORMANCE_PREFIX &&\n !this.isOpenTelemetryEnabled() &&\n !trace.getSpanContext(activeContext)\n ) {\n return fn()\n }\n\n if (force) {\n const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter)\n\n if (trace.getSpanContext(remoteContext)) {\n return context.with(remoteContext, fn)\n }\n\n // Preserve the current active span while still merging any extracted\n // baggage/context values from the carrier.\n const mergedContext = propagation.extract(activeContext, carrier, getter)\n return context.with(mergedContext, fn)\n }\n\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn()\n }\n\n const remoteContext = propagation.extract(activeContext, carrier, getter)\n return context.with(remoteContext, fn)\n }\n\n // Trace, wrap implementation is inspired by datadog trace implementation\n // (https://datadoghq.dev/dd-trace-js/interfaces/tracer.html#trace).\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(...args: Array<any>) {\n const [type, fnOrOptions, fnOrEmpty] = args\n const tracingEnabled =\n Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled()\n const localSpanRecorder = getLocalSpanRecorder()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!tracingEnabled && !localSpanRecordingEnabled) {\n return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty()\n }\n\n // coerce options form overload\n const {\n fn,\n options,\n }: {\n fn: (span?: Span, done?: (error?: Error) => any) => T | Promise<T>\n options: TracerSpanOptions\n } =\n typeof fnOrOptions === 'function'\n ? {\n fn: fnOrOptions,\n options: {},\n }\n : {\n fn: fnOrEmpty,\n options: { ...fnOrOptions },\n }\n\n const spanName = options.spanName ?? type\n\n const shouldDelegateSpan =\n NextVanillaSpanAllowlist.has(type) ||\n process.env.NEXT_OTEL_VERBOSE === '1'\n const shouldTraceSpan =\n shouldDelegateSpan ||\n (localSpanRecorder?.isRequestInsightsEnabled() ?? false)\n\n if (!shouldTraceSpan || options.hideSpan) {\n return fn()\n }\n\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = this.getSpanContext(\n options?.parentSpan ?? this.getActiveScopeSpan()\n )\n\n if (!spanContext) {\n spanContext = context?.active() ?? ROOT_CONTEXT\n }\n // Check if there's already a root span in the store for this trace\n // We are intentionally not checking whether there is an active context\n // from outside of nextjs to ensure that we can provide the same level\n // of telemetry when using a custom server\n const existingRootSpanId = spanContext.getValue(rootSpanIdKey)\n const isRootSpan =\n typeof existingRootSpanId !== 'number' ||\n !rootSpanAttributesStore.has(existingRootSpanId)\n\n const spanId = getSpanId()\n\n options.attributes = {\n 'next.span_category': 'nextjs',\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes,\n }\n\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), () =>\n this.runWithActiveSpan(\n spanName,\n options,\n spanContext,\n tracingEnabled && shouldDelegateSpan,\n localSpanRecordingEnabled,\n (span: Span) => {\n let startTime: number | undefined\n if (\n NEXT_OTEL_PERFORMANCE_PREFIX &&\n type &&\n LogSpanAllowList.has(type)\n ) {\n startTime =\n 'performance' in globalThis && 'measure' in performance\n ? globalThis.performance.now()\n : undefined\n }\n\n let cleanedUp = false\n const onCleanup = () => {\n if (cleanedUp) return\n cleanedUp = true\n rootSpanAttributesStore.delete(spanId)\n if (startTime) {\n performance.measure(\n `${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(\n type.split('.').pop() || ''\n ).replace(\n /[A-Z]/g,\n (match: string) => '-' + match.toLowerCase()\n )}`,\n {\n start: startTime,\n end: performance.now(),\n }\n )\n }\n }\n\n if (isRootSpan) {\n rootSpanAttributesStore.set(\n spanId,\n new Map(\n Object.entries(options.attributes ?? {}) as [\n AttributeNames,\n AttributeValue | undefined,\n ][]\n )\n )\n }\n if (fn.length > 1) {\n try {\n return fn(span, (err) => {\n if (err) {\n closeSpanWithError(span, err)\n } else {\n span.end()\n }\n })\n } catch (err: any) {\n closeSpanWithError(span, err)\n throw err\n } finally {\n onCleanup()\n }\n }\n\n try {\n const result = fn(span)\n if (isThenable(result)) {\n // If there's error make sure it throws\n return result\n .then((res) => {\n span.end()\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res\n })\n .catch((err) => {\n closeSpanWithError(span, err)\n throw err\n })\n .finally(onCleanup)\n } else {\n span.end()\n onCleanup()\n }\n\n return result\n } catch (err: any) {\n closeSpanWithError(span, err)\n onCleanup()\n throw err\n }\n }\n )\n )\n }\n\n private runWithActiveSpan<T>(\n spanName: string,\n options: TracerSpanOptions,\n parentContext: Context,\n tracingEnabled: boolean,\n localSpanRecordingEnabled: boolean,\n fn: (span: Span) => T\n ): T {\n if (tracingEnabled) {\n return this.getTracerInstance().startActiveSpan(\n spanName,\n options,\n (span: Span) =>\n fn(\n localSpanRecordingEnabled\n ? this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n span\n )\n : span\n )\n )\n }\n\n const span = this.createLocalRecordingSpan(spanName, options, parentContext)\n const activeContext = trace.setSpan(context.active(), span)\n\n return getLocalSpanRecorder()!.withLocalSpan(span, () =>\n context.with(activeContext, fn, undefined, span)\n )\n }\n\n private createLocalRecordingSpan(\n name: string,\n options: TracerSpanOptions,\n parentContext: Context,\n delegateSpan?: Span\n ): Span {\n const parentSpanContext = trace.getSpanContext(parentContext)\n const delegateSpanContext = delegateSpan?.spanContext()\n\n return getLocalSpanRecorder()!.createLocalSpan({\n name,\n attributes: options.attributes,\n links: options.links,\n startTime: options.startTime,\n delegateSpan,\n traceId: delegateSpanContext?.traceId ?? parentSpanContext?.traceId,\n spanId: delegateSpanContext?.spanId,\n parentSpanId: parentSpanContext?.spanId,\n })\n }\n\n public wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n public wrap(...args: Array<any>) {\n const tracer = this\n const [name, options, fn] =\n args.length === 3 ? args : [args[0], {}, args[1]]\n\n if (\n !NextVanillaSpanAllowlist.has(name) &&\n process.env.NEXT_OTEL_VERBOSE !== '1' &&\n !process.env.__NEXT_DEV_SERVER\n ) {\n return fn\n }\n\n return function (this: any) {\n let optionsObj = options\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments)\n }\n\n const lastArgId = arguments.length - 1\n const cb = arguments[lastArgId]\n\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb)\n return tracer.trace(name, optionsObj, (_span, done) => {\n arguments[lastArgId] = function (err: any) {\n done?.(err)\n return scopeBoundCb.apply(this, arguments)\n }\n\n return fn.apply(this, arguments)\n })\n } else {\n return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))\n }\n }\n }\n\n public startSpan(type: SpanTypes): Span\n public startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n public startSpan(...args: Array<any>): Span {\n const [type, passedOptions]: [string, TracerSpanOptions | undefined] =\n args as any\n const options: TracerSpanOptions = passedOptions\n ? {\n ...passedOptions,\n attributes: {\n 'next.span_category': 'nextjs',\n ...passedOptions.attributes,\n },\n }\n : { attributes: { 'next.span_category': 'nextjs' } }\n\n const parentContext =\n this.getSpanContext(options.parentSpan ?? this.getActiveScopeSpan()) ??\n context.active()\n const localSpanRecordingEnabled =\n getLocalSpanRecorder()?.isLocalSpanRecordingEnabled() ?? false\n\n if (!localSpanRecordingEnabled) {\n return this.getTracerInstance().startSpan(type, options, parentContext)\n }\n\n const delegateSpan = this.isOpenTelemetryEnabled()\n ? this.getTracerInstance().startSpan(type, options, parentContext)\n : undefined\n\n return this.createLocalRecordingSpan(\n type,\n options,\n parentContext,\n delegateSpan\n )\n }\n\n private getSpanContext(parentSpan?: Span) {\n const spanContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined\n\n return spanContext\n }\n\n public getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n return rootSpanAttributesStore.get(spanId)\n }\n\n public setRootSpanAttribute(key: AttributeNames, value: AttributeValue) {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n const attributes = rootSpanAttributesStore.get(spanId)\n if (attributes && !attributes.has(key)) {\n attributes.set(key, value)\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n const localSpan = getLocalSpanRecorder()?.getActiveLocalSpan()\n if (localSpan) {\n localSpan.setAttribute(key, value)\n }\n }\n }\n\n public withSpan<T>(span: Span, fn: () => T): T {\n const spanContext = trace.setSpan(context.active(), span)\n const recorder = getLocalSpanRecorder()\n if (recorder?.isLocalRecordingSpan(span)) {\n return recorder.withLocalSpan(span, () => context.with(spanContext, fn))\n }\n return context.with(spanContext, fn)\n }\n}\n\nconst getTracer = (() => {\n const tracer = new NextTracerImpl()\n\n return () => tracer\n})()\n\nexport { getTracer, SpanStatusCode, SpanKind }\nexport type { NextTracer, Span, SpanOptions, ContextAPI, TracerSpanOptions }\n"],"names":["LogSpanAllowList","NextVanillaSpanAllowlist","isThenable","NEXT_OTEL_PERFORMANCE_PREFIX","process","env","LOCAL_SPAN_RECORDER_KEY","Symbol","for","api","getLocalSpanRecorder","__NEXT_DEV_SERVER","globalThis","undefined","NEXT_RUNTIME","require","err","context","propagation","trace","SpanStatusCode","SpanKind","ROOT_CONTEXT","BubbledError","Error","constructor","bubble","result","isBubbledError","error","closeSpanWithError","span","setAttribute","recordException","name","setStatus","code","ERROR","message","end","rootSpanAttributesStore","Map","rootSpanIdKey","createContextKey","lastSpanId","getSpanId","clientTraceDataSetter","set","carrier","key","value","push","NextTracerImpl","getTracerInstance","getTracer","isOpenTelemetryEnabled","tracerProvider","activeSpan","getSpan","active","isRecording","getTracerProvider","getDelegate","getContext","getTracePropagationData","activeContext","entries","inject","getActiveScopeSpan","getActiveLocalSpan","runWithDetachedContext","fn","with","withPropagatedContext","getter","force","getSpanContext","remoteContext","extract","mergedContext","args","type","fnOrOptions","fnOrEmpty","tracingEnabled","Boolean","localSpanRecorder","localSpanRecordingEnabled","isLocalSpanRecordingEnabled","options","spanName","shouldDelegateSpan","has","NEXT_OTEL_VERBOSE","shouldTraceSpan","isRequestInsightsEnabled","hideSpan","spanContext","parentSpan","existingRootSpanId","getValue","isRootSpan","spanId","attributes","setValue","runWithActiveSpan","startTime","performance","now","cleanedUp","onCleanup","delete","measure","split","pop","replace","match","toLowerCase","start","Object","length","then","res","catch","finally","parentContext","startActiveSpan","createLocalRecordingSpan","setSpan","withLocalSpan","delegateSpan","parentSpanContext","delegateSpanContext","createLocalSpan","links","traceId","parentSpanId","wrap","tracer","optionsObj","apply","arguments","lastArgId","cb","scopeBoundCb","bind","_span","done","startSpan","passedOptions","getRootSpanAttributes","get","setRootSpanAttribute","localSpan","withSpan","recorder","isLocalRecordingSpan"],"mappings":"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","ignoreList":[0]} |
@@ -274,3 +274,3 @@ import { workAsyncStorage } from '../app-render/work-async-storage.external'; | ||
| const { stagedRendering } = prerenderStore; | ||
| if (process.env.__NEXT_APP_SHELLS && stagedRendering) { | ||
| if (stagedRendering) { | ||
| // Even if all params are static, we need to exclude them from the app shell | ||
@@ -343,4 +343,4 @@ // by delaying them to the static stage. However, root params are allowed in shells, | ||
| // so we can at least check for that. | ||
| // Note that resolving them without a delay is also valid in `appShells`, | ||
| // because root params are allowed in shells. | ||
| // Note that resolving them without a delay is valid because root params are | ||
| // allowed in shells. | ||
| if (allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) { | ||
@@ -400,3 +400,3 @@ return makeUntrackedParams(userspaceParams); | ||
| // However, root params are allowed in shells, so if all the params are root params, they can be included as well. | ||
| if (process.env.__NEXT_APP_SHELLS && !allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) { | ||
| if (!allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) { | ||
| // For a dynamic request we generally want to recover a static shell, | ||
@@ -403,0 +403,0 @@ // so static params can resolve in the static stage, because session |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/request/params.ts"],"sourcesContent":["import {\n workAsyncStorage,\n type WorkStore,\n} from '../app-render/work-async-storage.external'\nimport type { OpaqueFallbackRouteParams } from './fallback-params'\nimport type { VaryParamsAccumulator } from '../app-render/vary-params'\nimport {\n createVaryingParams,\n getMetadataVaryParamsAccumulator,\n} from '../app-render/vary-params'\n\nimport { ReflectAdapter } from '../web/spec-extension/adapters/reflect'\nimport {\n throwToInterruptStaticGeneration,\n postponeWithTracking,\n} from '../app-render/dynamic-rendering'\n\nimport {\n workUnitAsyncStorage,\n type PrerenderStorePPR,\n type PrerenderStoreLegacy,\n type StaticPrerenderStoreModern,\n type StaticPrerenderStore,\n throwInvariantForMissingStore,\n type PrerenderStoreModernRuntime,\n type RequestStore,\n type ValidationStoreClient,\n} from '../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n describeStringPropertyAccess,\n wellKnownProperties,\n} from '../../shared/lib/utils/reflect-utils'\nimport {\n makeDevtoolsIOAwarePromise,\n makeHangingPromise,\n makePromiseFromTrigger,\n RENDER_STAGES_BY_DATA_KIND,\n} from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { dynamicAccessAsyncStorage } from '../app-render/dynamic-access-async-storage.external'\nimport {\n isEmptyParams,\n hasFallbackRouteParams,\n allParamsAreRootParams,\n} from '../lib/params-utils'\n\nexport type ParamValue = string | Array<string> | undefined\nexport type Params = Record<string, ParamValue>\n\nexport function createParamsFromClient(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n // Client params don't need additional vary tracking because by the\n // time they reach the client, the access would have already been\n // tracked by the server.\n const varyParamsAccumulator = null\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createParamsFromClient should not be called in cache contexts.'\n )\n case 'prerender-runtime':\n throw new InvariantError(\n 'createParamsFromClient should not be called in a runtime prerender.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createParamsFromClient should not be called inside generateStaticParams.'\n )\n case 'validation-client': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n return makeUntrackedParams(underlyingParams)\n }\n case 'request': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\n// generateMetadata always runs in RSC context so it is equivalent to a Server Page Component\nexport type CreateServerParamsForMetadata = typeof createServerParamsForMetadata\nexport function createServerParamsForMetadata(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null\n): Promise<Params> {\n const metadataVaryParamsAccumulator = getMetadataVaryParamsAccumulator()\n return createServerParamsForServerSegment(\n underlyingParams,\n optionalCatchAllParamName,\n metadataVaryParamsAccumulator\n )\n}\n\n// routes always runs in RSC context so it is equivalent to a Server Page Component\nexport function createServerParamsForRoute(\n underlyingParams: Params,\n varyParamsAccumulator: VaryParamsAccumulator | null = null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'prerender-client':\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime': {\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in runtime prerenders.'\n )\n }\n case 'request':\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createServerParamsForServerSegment(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n return createRuntimePrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'request': {\n return createRenderParamsForPage(\n workStore,\n workUnitStore,\n underlyingParams,\n optionalCatchAllParamName,\n varyParamsAccumulator\n )\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createPrerenderParamsForClientSegment(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError(\n 'Missing workStore in createPrerenderParamsForClientSegment'\n )\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n const fallbackParams = workUnitStore.fallbackRouteParams\n if (fallbackParams) {\n for (let key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n '`params`'\n )\n }\n }\n }\n break\n case 'validation-client':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in validation contexts.'\n )\n break\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n break\n default:\n workUnitStore satisfies never\n }\n }\n // We're prerendering in a mode that does not abort. We resolve the promise without\n // any tracking because we're just transporting a value from server to client where the tracking\n // will be applied.\n return Promise.resolve(underlyingParams)\n}\n\nfunction createStaticPrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStore,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n switch (prerenderStore.type) {\n case 'prerender': {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (hasFallbackRouteParams(underlyingParams, fallbackParams)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object dynamic.\n return makeHangingParams(underlyingParams, workStore, prerenderStore)\n }\n\n // All params are static.\n\n const { stagedRendering } = prerenderStore\n if (process.env.__NEXT_APP_SHELLS && stagedRendering) {\n // Even if all params are static, we need to exclude them from the app shell\n // by delaying them to the static stage. However, root params are allowed in shells,\n // so if all the params are root params, they can be included as well.\n if (\n !allParamsAreRootParams(underlyingParams, prerenderStore.rootParams)\n ) {\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n }\n\n return makeUntrackedParams(userspaceParams)\n }\n case 'prerender-client': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingParams(\n underlyingParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-ppr': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n return makeErroringParams(\n underlyingParams,\n fallbackParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-legacy':\n break\n default:\n prerenderStore satisfies never\n }\n\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRuntimePrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workUnitStore: PrerenderStoreModernRuntime,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n // If there's no staging, we're in a prospective runtime prerender,\n // and it doesn't matter when params resolve.\n return makeUntrackedParams(userspaceParams)\n }\n\n // We don't have fallbackParams in runtime prerenders, so we don't know\n // when params are static. However, root params are static by definition,\n // so we can at least check for that.\n // Note that resolving them without a delay is also valid in `appShells`,\n // because root params are allowed in shells.\n if (allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // Semantically, we should resolve static params in the static stage.\n // But params are link data, and we need to recover a param-less session shell,\n // so we delay all params until the runtime stage instead.\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n}\n\nfunction createRenderParamsForPage(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n) {\n const { stagedRendering, asyncApiPromises, validationSamples } = workUnitStore\n\n // Distinguish the params that we expose to userspace (potentially wrapped in proxies)\n // and the underlying object containing params values. We do this because wrappers\n // like `instrumentParamsPromiseWithDevWarnings` need to be able to get the known param names\n // without triggering other wrapper proxies.\n let userspaceParams = underlyingParams\n if (validationSamples) {\n userspaceParams = createServerParamsProxyForInstantValidation(\n underlyingParams,\n workStore,\n validationSamples\n )\n }\n if (varyParamsAccumulator) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n userspaceParams,\n optionalCatchAllParamName\n )\n }\n\n if (stagedRendering && asyncApiPromises) {\n return createStagedRenderParams(\n workStore,\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n }\n\n // No staged rendering = no cacheComponents, or cacheComponents prod without cachedNavigations\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(userspaceParams)\n }\n}\n\nfunction createStagedRenderParams(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n underlyingParams: Params,\n userspaceParams: Params\n) {\n const promise = createStagedRenderParamsImpl(\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n if (process.env.NODE_ENV === 'development') {\n return instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n } else {\n return promise\n }\n}\n\nfunction createStagedRenderParamsImpl(\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n /** The actual param values, without any instrumentation */\n underlyingParams: Params,\n /** The params object to return to userspace, possibly wrapped in a proxy */\n userspaceParams: Params\n) {\n // If the route has no params, they should resolve immediately.\n if (isEmptyParams(underlyingParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // If we have fallback params, then they should always resolve in the runtime link data stage.\n // We do this indirectly via the shared params parent for better debug info.\n if (hasFallbackRouteParams(underlyingParams, workUnitStore.fallbackParams)) {\n return createParamsPromiseFromTrigger(\n asyncApiPromises.sharedParamsParent,\n userspaceParams\n )\n }\n\n // All params are static.\n\n // If we're rendering with shells, even static params must be delayed to exclude them from the shell.\n // However, root params are allowed in shells, so if all the params are root params, they can be included as well.\n if (\n process.env.__NEXT_APP_SHELLS &&\n !allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)\n ) {\n // For a dynamic request we generally want to recover a static shell,\n // so static params can resolve in the static stage, because session\n // shells are handled with a separate render.\n // However, in dev we might need to recover a session shell for instant validation.\n // This is indicated by `needsSessionShell`.\n const staticParamsStage = workUnitStore.needsSessionShell\n ? RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n : RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createParamsPromiseFromTrigger(\n trigger: Promise<any>,\n userspaceParams: Params\n) {\n if (process.env.NODE_ENV === 'development') {\n // We wrap each instance of params in a `new Promise()`, which lets us show each\n // await a different set of values. This is important when all awaits\n // are in third party which would otherwise track all the way to the\n // internal params.\n const promise: Promise<Params> = new Promise((resolve, reject) => {\n trigger.then(() => resolve(userspaceParams), reject)\n })\n promise.catch(noop)\n // @ts-expect-error\n promise.displayName = 'params'\n return promise\n } else {\n return makePromiseFromTrigger(trigger, userspaceParams)\n }\n}\n\nfunction noop() {}\n\nfunction createServerParamsProxyForInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: NonNullable<RequestStore['validationSamples']>\n): Params {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples.params ?? {}))\n return createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n}\n\nfunction createClientParamsInInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: ValidationStoreClient['validationSamples']\n): Promise<Params> {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples?.params ?? {}))\n const proxiedUnderlying = createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n return Promise.resolve(proxiedUnderlying)\n}\n\nfunction createRenderParamsInProd(userspaceParams: Params): Promise<Params> {\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRenderParamsInDev(\n underlyingParams: Params,\n userpaceParams: Params,\n fallbackParams: OpaqueFallbackRouteParams | null | undefined,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n return makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams,\n userpaceParams,\n hasFallbackRouteParams(underlyingParams, fallbackParams),\n workStore,\n requestStore\n )\n}\n\ninterface CacheLifetime {}\nconst CachedParams = new WeakMap<CacheLifetime, Promise<Params>>()\n\nconst fallbackParamsProxyHandler: ProxyHandler<Promise<Params>> = {\n get: function get(target, prop, receiver) {\n if (prop === 'then' || prop === 'catch' || prop === 'finally') {\n const originalMethod = ReflectAdapter.get(target, prop, receiver)\n\n return {\n [prop]: (...args: unknown[]) => {\n const store = dynamicAccessAsyncStorage.getStore()\n\n if (store) {\n store.abortController.abort(\n new Error(`Accessed fallback \\`params\\` during prerendering.`)\n )\n }\n\n return new Proxy(\n originalMethod.apply(target, args),\n fallbackParamsProxyHandler\n )\n },\n }[prop]\n }\n\n return ReflectAdapter.get(target, prop, receiver)\n },\n}\n\nfunction makeHangingParams(\n underlyingParams: Params,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStoreModern\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = new Proxy(\n makeHangingPromise<Params>(\n prerenderStore.renderSignal,\n workStore.route,\n '`params`'\n ),\n fallbackParamsProxyHandler\n )\n\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeErroringParams(\n underlyingParams: Params,\n fallbackParams: OpaqueFallbackRouteParams,\n workStore: WorkStore,\n prerenderStore: PrerenderStorePPR | PrerenderStoreLegacy\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const augmentedUnderlying = { ...underlyingParams }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(augmentedUnderlying)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n if (fallbackParams.has(prop)) {\n Object.defineProperty(augmentedUnderlying, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when cacheComponents is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no cacheComponents)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n enumerable: true,\n })\n }\n }\n })\n\n return promise\n}\n\nfunction makeUntrackedParams(underlyingParams: Params): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = Promise.resolve(underlyingParams)\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams: Params,\n userspaceParams: Params,\n hasFallbackParams: boolean,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = hasFallbackParams\n ? makeDevtoolsIOAwarePromise(\n userspaceParams,\n requestStore,\n RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n )\n : // We don't want to force an environment transition when this params is not part of the fallback params set\n Promise.resolve(userspaceParams)\n\n const proxiedPromise = instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n CachedParams.set(underlyingParams, proxiedPromise)\n return proxiedPromise\n}\n\nfunction instrumentParamsPromiseWithDevWarnings(\n underlyingParams: Params,\n promise: Promise<Params>,\n workStore: WorkStore\n): Promise<Params> {\n // Track which properties we should warn for.\n const proxiedProperties = new Set<string>()\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n proxiedProperties.add(prop)\n }\n })\n\n return new Proxy(promise, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n if (\n // We are accessing a property that was proxied to the promise instance\n proxiedProperties.has(prop)\n ) {\n const expression = describeStringPropertyAccess('params', prop)\n warnForSyncAccess(workStore.route, expression)\n }\n }\n return ReflectAdapter.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop)\n }\n return ReflectAdapter.set(target, prop, value, receiver)\n },\n ownKeys(target) {\n const expression = '`...params` or similar expression'\n warnForSyncAccess(workStore.route, expression)\n return Reflect.ownKeys(target)\n },\n })\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createParamsAccessError\n)\n\nfunction createParamsAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` is a Promise and must be unwrapped with \\`await\\` or \\`React.use()\\` before accessing its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n"],"names":["workAsyncStorage","createVaryingParams","getMetadataVaryParamsAccumulator","ReflectAdapter","throwToInterruptStaticGeneration","postponeWithTracking","workUnitAsyncStorage","throwInvariantForMissingStore","InvariantError","describeStringPropertyAccess","wellKnownProperties","makeDevtoolsIOAwarePromise","makeHangingPromise","makePromiseFromTrigger","RENDER_STAGES_BY_DATA_KIND","createDedupedByCallsiteServerErrorLoggerDev","dynamicAccessAsyncStorage","isEmptyParams","hasFallbackRouteParams","allParamsAreRootParams","createParamsFromClient","underlyingParams","workStore","getStore","workUnitStore","type","varyParamsAccumulator","createStaticPrerenderParams","validationSamples","createClientParamsInInstantValidation","makeUntrackedParams","process","env","NODE_ENV","fallbackParams","userspaceParams","createRenderParamsInDev","createRenderParamsInProd","createServerParamsForMetadata","optionalCatchAllParamName","metadataVaryParamsAccumulator","createServerParamsForServerSegment","createServerParamsForRoute","createRuntimePrerenderParams","createRenderParamsForPage","createPrerenderParamsForClientSegment","fallbackRouteParams","key","has","renderSignal","route","Promise","resolve","prerenderStore","makeHangingParams","stagedRendering","__NEXT_APP_SHELLS","rootParams","staticParamsStage","staticLinkData","delayUntilStage","makeErroringParams","runtimeLinkData","asyncApiPromises","createServerParamsProxyForInstantValidation","createStagedRenderParams","promise","createStagedRenderParamsImpl","instrumentParamsPromiseWithDevWarnings","createParamsPromiseFromTrigger","sharedParamsParent","needsSessionShell","trigger","reject","then","catch","noop","displayName","createExhaustiveParamsProxy","require","declaredParams","Set","Object","keys","params","proxiedUnderlying","userpaceParams","requestStore","makeDynamicallyTrackedParamsWithDevWarnings","CachedParams","WeakMap","fallbackParamsProxyHandler","get","target","prop","receiver","originalMethod","args","store","abortController","abort","Error","Proxy","apply","cachedParams","set","augmentedUnderlying","forEach","defineProperty","expression","dynamicTracking","enumerable","hasFallbackParams","proxiedPromise","proxiedProperties","add","warnForSyncAccess","value","delete","ownKeys","Reflect","createParamsAccessError","prefix"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/request/params.ts"],"sourcesContent":["import {\n workAsyncStorage,\n type WorkStore,\n} from '../app-render/work-async-storage.external'\nimport type { OpaqueFallbackRouteParams } from './fallback-params'\nimport type { VaryParamsAccumulator } from '../app-render/vary-params'\nimport {\n createVaryingParams,\n getMetadataVaryParamsAccumulator,\n} from '../app-render/vary-params'\n\nimport { ReflectAdapter } from '../web/spec-extension/adapters/reflect'\nimport {\n throwToInterruptStaticGeneration,\n postponeWithTracking,\n} from '../app-render/dynamic-rendering'\n\nimport {\n workUnitAsyncStorage,\n type PrerenderStorePPR,\n type PrerenderStoreLegacy,\n type StaticPrerenderStoreModern,\n type StaticPrerenderStore,\n throwInvariantForMissingStore,\n type PrerenderStoreModernRuntime,\n type RequestStore,\n type ValidationStoreClient,\n} from '../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n describeStringPropertyAccess,\n wellKnownProperties,\n} from '../../shared/lib/utils/reflect-utils'\nimport {\n makeDevtoolsIOAwarePromise,\n makeHangingPromise,\n makePromiseFromTrigger,\n RENDER_STAGES_BY_DATA_KIND,\n} from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { dynamicAccessAsyncStorage } from '../app-render/dynamic-access-async-storage.external'\nimport {\n isEmptyParams,\n hasFallbackRouteParams,\n allParamsAreRootParams,\n} from '../lib/params-utils'\n\nexport type ParamValue = string | Array<string> | undefined\nexport type Params = Record<string, ParamValue>\n\nexport function createParamsFromClient(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n // Client params don't need additional vary tracking because by the\n // time they reach the client, the access would have already been\n // tracked by the server.\n const varyParamsAccumulator = null\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createParamsFromClient should not be called in cache contexts.'\n )\n case 'prerender-runtime':\n throw new InvariantError(\n 'createParamsFromClient should not be called in a runtime prerender.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createParamsFromClient should not be called inside generateStaticParams.'\n )\n case 'validation-client': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n return makeUntrackedParams(underlyingParams)\n }\n case 'request': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\n// generateMetadata always runs in RSC context so it is equivalent to a Server Page Component\nexport type CreateServerParamsForMetadata = typeof createServerParamsForMetadata\nexport function createServerParamsForMetadata(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null\n): Promise<Params> {\n const metadataVaryParamsAccumulator = getMetadataVaryParamsAccumulator()\n return createServerParamsForServerSegment(\n underlyingParams,\n optionalCatchAllParamName,\n metadataVaryParamsAccumulator\n )\n}\n\n// routes always runs in RSC context so it is equivalent to a Server Page Component\nexport function createServerParamsForRoute(\n underlyingParams: Params,\n varyParamsAccumulator: VaryParamsAccumulator | null = null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'prerender-client':\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime': {\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in runtime prerenders.'\n )\n }\n case 'request':\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createServerParamsForServerSegment(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n return createRuntimePrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'request': {\n return createRenderParamsForPage(\n workStore,\n workUnitStore,\n underlyingParams,\n optionalCatchAllParamName,\n varyParamsAccumulator\n )\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createPrerenderParamsForClientSegment(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError(\n 'Missing workStore in createPrerenderParamsForClientSegment'\n )\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n const fallbackParams = workUnitStore.fallbackRouteParams\n if (fallbackParams) {\n for (let key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n '`params`'\n )\n }\n }\n }\n break\n case 'validation-client':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in validation contexts.'\n )\n break\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n break\n default:\n workUnitStore satisfies never\n }\n }\n // We're prerendering in a mode that does not abort. We resolve the promise without\n // any tracking because we're just transporting a value from server to client where the tracking\n // will be applied.\n return Promise.resolve(underlyingParams)\n}\n\nfunction createStaticPrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStore,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n switch (prerenderStore.type) {\n case 'prerender': {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (hasFallbackRouteParams(underlyingParams, fallbackParams)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object dynamic.\n return makeHangingParams(underlyingParams, workStore, prerenderStore)\n }\n\n // All params are static.\n\n const { stagedRendering } = prerenderStore\n if (stagedRendering) {\n // Even if all params are static, we need to exclude them from the app shell\n // by delaying them to the static stage. However, root params are allowed in shells,\n // so if all the params are root params, they can be included as well.\n if (\n !allParamsAreRootParams(underlyingParams, prerenderStore.rootParams)\n ) {\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n }\n\n return makeUntrackedParams(userspaceParams)\n }\n case 'prerender-client': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingParams(\n underlyingParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-ppr': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n return makeErroringParams(\n underlyingParams,\n fallbackParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-legacy':\n break\n default:\n prerenderStore satisfies never\n }\n\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRuntimePrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workUnitStore: PrerenderStoreModernRuntime,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n // If there's no staging, we're in a prospective runtime prerender,\n // and it doesn't matter when params resolve.\n return makeUntrackedParams(userspaceParams)\n }\n\n // We don't have fallbackParams in runtime prerenders, so we don't know\n // when params are static. However, root params are static by definition,\n // so we can at least check for that.\n // Note that resolving them without a delay is valid because root params are\n // allowed in shells.\n if (allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // Semantically, we should resolve static params in the static stage.\n // But params are link data, and we need to recover a param-less session shell,\n // so we delay all params until the runtime stage instead.\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n}\n\nfunction createRenderParamsForPage(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n) {\n const { stagedRendering, asyncApiPromises, validationSamples } = workUnitStore\n\n // Distinguish the params that we expose to userspace (potentially wrapped in proxies)\n // and the underlying object containing params values. We do this because wrappers\n // like `instrumentParamsPromiseWithDevWarnings` need to be able to get the known param names\n // without triggering other wrapper proxies.\n let userspaceParams = underlyingParams\n if (validationSamples) {\n userspaceParams = createServerParamsProxyForInstantValidation(\n underlyingParams,\n workStore,\n validationSamples\n )\n }\n if (varyParamsAccumulator) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n userspaceParams,\n optionalCatchAllParamName\n )\n }\n\n if (stagedRendering && asyncApiPromises) {\n return createStagedRenderParams(\n workStore,\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n }\n\n // No staged rendering = no cacheComponents, or cacheComponents prod without cachedNavigations\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(userspaceParams)\n }\n}\n\nfunction createStagedRenderParams(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n underlyingParams: Params,\n userspaceParams: Params\n) {\n const promise = createStagedRenderParamsImpl(\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n if (process.env.NODE_ENV === 'development') {\n return instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n } else {\n return promise\n }\n}\n\nfunction createStagedRenderParamsImpl(\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n /** The actual param values, without any instrumentation */\n underlyingParams: Params,\n /** The params object to return to userspace, possibly wrapped in a proxy */\n userspaceParams: Params\n) {\n // If the route has no params, they should resolve immediately.\n if (isEmptyParams(underlyingParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // If we have fallback params, then they should always resolve in the runtime link data stage.\n // We do this indirectly via the shared params parent for better debug info.\n if (hasFallbackRouteParams(underlyingParams, workUnitStore.fallbackParams)) {\n return createParamsPromiseFromTrigger(\n asyncApiPromises.sharedParamsParent,\n userspaceParams\n )\n }\n\n // All params are static.\n\n // If we're rendering with shells, even static params must be delayed to exclude them from the shell.\n // However, root params are allowed in shells, so if all the params are root params, they can be included as well.\n if (!allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) {\n // For a dynamic request we generally want to recover a static shell,\n // so static params can resolve in the static stage, because session\n // shells are handled with a separate render.\n // However, in dev we might need to recover a session shell for instant validation.\n // This is indicated by `needsSessionShell`.\n const staticParamsStage = workUnitStore.needsSessionShell\n ? RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n : RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createParamsPromiseFromTrigger(\n trigger: Promise<any>,\n userspaceParams: Params\n) {\n if (process.env.NODE_ENV === 'development') {\n // We wrap each instance of params in a `new Promise()`, which lets us show each\n // await a different set of values. This is important when all awaits\n // are in third party which would otherwise track all the way to the\n // internal params.\n const promise: Promise<Params> = new Promise((resolve, reject) => {\n trigger.then(() => resolve(userspaceParams), reject)\n })\n promise.catch(noop)\n // @ts-expect-error\n promise.displayName = 'params'\n return promise\n } else {\n return makePromiseFromTrigger(trigger, userspaceParams)\n }\n}\n\nfunction noop() {}\n\nfunction createServerParamsProxyForInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: NonNullable<RequestStore['validationSamples']>\n): Params {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples.params ?? {}))\n return createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n}\n\nfunction createClientParamsInInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: ValidationStoreClient['validationSamples']\n): Promise<Params> {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples?.params ?? {}))\n const proxiedUnderlying = createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n return Promise.resolve(proxiedUnderlying)\n}\n\nfunction createRenderParamsInProd(userspaceParams: Params): Promise<Params> {\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRenderParamsInDev(\n underlyingParams: Params,\n userpaceParams: Params,\n fallbackParams: OpaqueFallbackRouteParams | null | undefined,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n return makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams,\n userpaceParams,\n hasFallbackRouteParams(underlyingParams, fallbackParams),\n workStore,\n requestStore\n )\n}\n\ninterface CacheLifetime {}\nconst CachedParams = new WeakMap<CacheLifetime, Promise<Params>>()\n\nconst fallbackParamsProxyHandler: ProxyHandler<Promise<Params>> = {\n get: function get(target, prop, receiver) {\n if (prop === 'then' || prop === 'catch' || prop === 'finally') {\n const originalMethod = ReflectAdapter.get(target, prop, receiver)\n\n return {\n [prop]: (...args: unknown[]) => {\n const store = dynamicAccessAsyncStorage.getStore()\n\n if (store) {\n store.abortController.abort(\n new Error(`Accessed fallback \\`params\\` during prerendering.`)\n )\n }\n\n return new Proxy(\n originalMethod.apply(target, args),\n fallbackParamsProxyHandler\n )\n },\n }[prop]\n }\n\n return ReflectAdapter.get(target, prop, receiver)\n },\n}\n\nfunction makeHangingParams(\n underlyingParams: Params,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStoreModern\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = new Proxy(\n makeHangingPromise<Params>(\n prerenderStore.renderSignal,\n workStore.route,\n '`params`'\n ),\n fallbackParamsProxyHandler\n )\n\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeErroringParams(\n underlyingParams: Params,\n fallbackParams: OpaqueFallbackRouteParams,\n workStore: WorkStore,\n prerenderStore: PrerenderStorePPR | PrerenderStoreLegacy\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const augmentedUnderlying = { ...underlyingParams }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(augmentedUnderlying)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n if (fallbackParams.has(prop)) {\n Object.defineProperty(augmentedUnderlying, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when cacheComponents is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no cacheComponents)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n enumerable: true,\n })\n }\n }\n })\n\n return promise\n}\n\nfunction makeUntrackedParams(underlyingParams: Params): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = Promise.resolve(underlyingParams)\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams: Params,\n userspaceParams: Params,\n hasFallbackParams: boolean,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = hasFallbackParams\n ? makeDevtoolsIOAwarePromise(\n userspaceParams,\n requestStore,\n RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n )\n : // We don't want to force an environment transition when this params is not part of the fallback params set\n Promise.resolve(userspaceParams)\n\n const proxiedPromise = instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n CachedParams.set(underlyingParams, proxiedPromise)\n return proxiedPromise\n}\n\nfunction instrumentParamsPromiseWithDevWarnings(\n underlyingParams: Params,\n promise: Promise<Params>,\n workStore: WorkStore\n): Promise<Params> {\n // Track which properties we should warn for.\n const proxiedProperties = new Set<string>()\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n proxiedProperties.add(prop)\n }\n })\n\n return new Proxy(promise, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n if (\n // We are accessing a property that was proxied to the promise instance\n proxiedProperties.has(prop)\n ) {\n const expression = describeStringPropertyAccess('params', prop)\n warnForSyncAccess(workStore.route, expression)\n }\n }\n return ReflectAdapter.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop)\n }\n return ReflectAdapter.set(target, prop, value, receiver)\n },\n ownKeys(target) {\n const expression = '`...params` or similar expression'\n warnForSyncAccess(workStore.route, expression)\n return Reflect.ownKeys(target)\n },\n })\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createParamsAccessError\n)\n\nfunction createParamsAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` is a Promise and must be unwrapped with \\`await\\` or \\`React.use()\\` before accessing its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n"],"names":["workAsyncStorage","createVaryingParams","getMetadataVaryParamsAccumulator","ReflectAdapter","throwToInterruptStaticGeneration","postponeWithTracking","workUnitAsyncStorage","throwInvariantForMissingStore","InvariantError","describeStringPropertyAccess","wellKnownProperties","makeDevtoolsIOAwarePromise","makeHangingPromise","makePromiseFromTrigger","RENDER_STAGES_BY_DATA_KIND","createDedupedByCallsiteServerErrorLoggerDev","dynamicAccessAsyncStorage","isEmptyParams","hasFallbackRouteParams","allParamsAreRootParams","createParamsFromClient","underlyingParams","workStore","getStore","workUnitStore","type","varyParamsAccumulator","createStaticPrerenderParams","validationSamples","createClientParamsInInstantValidation","makeUntrackedParams","process","env","NODE_ENV","fallbackParams","userspaceParams","createRenderParamsInDev","createRenderParamsInProd","createServerParamsForMetadata","optionalCatchAllParamName","metadataVaryParamsAccumulator","createServerParamsForServerSegment","createServerParamsForRoute","createRuntimePrerenderParams","createRenderParamsForPage","createPrerenderParamsForClientSegment","fallbackRouteParams","key","has","renderSignal","route","Promise","resolve","prerenderStore","makeHangingParams","stagedRendering","rootParams","staticParamsStage","staticLinkData","delayUntilStage","makeErroringParams","runtimeLinkData","asyncApiPromises","createServerParamsProxyForInstantValidation","createStagedRenderParams","promise","createStagedRenderParamsImpl","instrumentParamsPromiseWithDevWarnings","createParamsPromiseFromTrigger","sharedParamsParent","needsSessionShell","trigger","reject","then","catch","noop","displayName","createExhaustiveParamsProxy","require","declaredParams","Set","Object","keys","params","proxiedUnderlying","userpaceParams","requestStore","makeDynamicallyTrackedParamsWithDevWarnings","CachedParams","WeakMap","fallbackParamsProxyHandler","get","target","prop","receiver","originalMethod","args","store","abortController","abort","Error","Proxy","apply","cachedParams","set","augmentedUnderlying","forEach","defineProperty","expression","dynamicTracking","enumerable","hasFallbackParams","proxiedPromise","proxiedProperties","add","warnForSyncAccess","value","delete","ownKeys","Reflect","createParamsAccessError","prefix"],"mappings":"AAAA,SACEA,gBAAgB,QAEX,4CAA2C;AAGlD,SACEC,mBAAmB,EACnBC,gCAAgC,QAC3B,4BAA2B;AAElC,SAASC,cAAc,QAAQ,yCAAwC;AACvE,SACEC,gCAAgC,EAChCC,oBAAoB,QACf,kCAAiC;AAExC,SACEC,oBAAoB,EAKpBC,6BAA6B,QAIxB,iDAAgD;AACvD,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SACEC,4BAA4B,EAC5BC,mBAAmB,QACd,uCAAsC;AAC7C,SACEC,0BAA0B,EAC1BC,kBAAkB,EAClBC,sBAAsB,EACtBC,0BAA0B,QACrB,6BAA4B;AACnC,SAASC,2CAA2C,QAAQ,oDAAmD;AAC/G,SAASC,yBAAyB,QAAQ,sDAAqD;AAC/F,SACEC,aAAa,EACbC,sBAAsB,EACtBC,sBAAsB,QACjB,sBAAqB;AAK5B,OAAO,SAASC,uBACdC,gBAAwB;IAExB,MAAMC,YAAYtB,iBAAiBuB,QAAQ;IAC3C,IAAI,CAACD,WAAW;QACd,MAAM,qBAA0D,CAA1D,IAAId,eAAe,yCAAnB,qBAAA;mBAAA;wBAAA;0BAAA;QAAyD;IACjE;IACA,MAAMgB,gBAAgBlB,qBAAqBiB,QAAQ;IACnD,IAAIC,eAAe;QACjB,OAAQA,cAAcC,IAAI;YACxB,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACH,mEAAmE;gBACnE,iEAAiE;gBACjE,yBAAyB;gBACzB,MAAMC,wBAAwB;gBAC9B,OAAOC,4BACLN,kBACA,MACAC,WACAE,eACAE;YAEJ,KAAK;YACL,KAAK;YACL,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIlB,eACR,mEADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,wEADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,6EADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBAAqB;oBACxB,IAAIgB,cAAcI,iBAAiB,EAAE;wBACnC,OAAOC,sCACLR,kBACAC,WACAE,cAAcI,iBAAiB;oBAEnC;oBACA,OAAOE,oBAAoBT;gBAC7B;YACA,KAAK;gBAAW;oBACd,IAAIG,cAAcI,iBAAiB,EAAE;wBACnC,OAAOC,sCACLR,kBACAC,WACAE,cAAcI,iBAAiB;oBAEnC;oBACA,IAAIG,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;wBAC1C,MAAMC,iBAAiBV,cAAcU,cAAc;wBACnD,MAAMC,kBAAkBd;wBACxB,OAAOe,wBACLf,kBACAc,iBACAD,gBACAZ,WACAE;oBAEJ,OAAO;wBACL,OAAOa,yBAAyBhB;oBAClC;gBACF;YACA;gBACEG;QACJ;IACF;IACAjB;AACF;AAIA,OAAO,SAAS+B,8BACdjB,gBAAwB,EACxBkB,yBAAwC;IAExC,MAAMC,gCAAgCtC;IACtC,OAAOuC,mCACLpB,kBACAkB,2BACAC;AAEJ;AAEA,mFAAmF;AACnF,OAAO,SAASE,2BACdrB,gBAAwB,EACxBK,wBAAsD,IAAI;IAE1D,MAAMJ,YAAYtB,iBAAiBuB,QAAQ;IAC3C,IAAI,CAACD,WAAW;QACd,MAAM,qBAA0D,CAA1D,IAAId,eAAe,yCAAnB,qBAAA;mBAAA;wBAAA;0BAAA;QAAyD;IACjE;IACA,MAAMgB,gBAAgBlB,qBAAqBiB,QAAQ;IACnD,IAAIC,eAAe;QACjB,OAAQA,cAAcC,IAAI;YACxB,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAOE,4BACLN,kBACA,MACAC,WACAE,eACAE;YAEJ,KAAK;YACL,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIlB,eACR,wEADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;YACL,KAAK;YACL,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,uEADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,iFADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBAAqB;oBACxB,MAAM,qBAEL,CAFK,IAAIA,eACR,2EADI,qBAAA;+BAAA;oCAAA;sCAAA;oBAEN;gBACF;YACA,KAAK;gBACH,IAAIuB,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;oBAC1C,MAAMC,iBAAiBV,cAAcU,cAAc;oBACnD,MAAMC,kBAAkBd;oBACxB,OAAOe,wBACLf,kBACAc,iBACAD,gBACAZ,WACAE;gBAEJ,OAAO;oBACL,OAAOa,yBAAyBhB;gBAClC;YACF;gBACEG;QACJ;IACF;IACAjB;AACF;AAEA,OAAO,SAASkC,mCACdpB,gBAAwB,EACxBkB,yBAAwC,EACxCb,qBAAmD;IAEnD,MAAMJ,YAAYtB,iBAAiBuB,QAAQ;IAC3C,IAAI,CAACD,WAAW;QACd,MAAM,qBAA0D,CAA1D,IAAId,eAAe,yCAAnB,qBAAA;mBAAA;wBAAA;0BAAA;QAAyD;IACjE;IACA,MAAMgB,gBAAgBlB,qBAAqBiB,QAAQ;IACnD,IAAIC,eAAe;QACjB,OAAQA,cAAcC,IAAI;YACxB,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAOE,4BACLN,kBACAkB,2BACAjB,WACAE,eACAE;YAEJ,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIlB,eACR,gFADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;YACL,KAAK;YACL,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,+EADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,yFADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBACH,OAAOmC,6BACLtB,kBACAkB,2BACAf,eACAE;YAEJ,KAAK;gBAAW;oBACd,OAAOkB,0BACLtB,WACAE,eACAH,kBACAkB,2BACAb;gBAEJ;YACA;gBACEF;QACJ;IACF;IACAjB;AACF;AAEA,OAAO,SAASsC,sCACdxB,gBAAwB;IAExB,MAAMC,YAAYtB,iBAAiBuB,QAAQ;IAC3C,IAAI,CAACD,WAAW;QACd,MAAM,qBAEL,CAFK,IAAId,eACR,+DADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,MAAMgB,gBAAgBlB,qBAAqBiB,QAAQ;IACnD,IAAIC,eAAe;QACjB,OAAQA,cAAcC,IAAI;YACxB,KAAK;YACL,KAAK;gBACH,MAAMS,iBAAiBV,cAAcsB,mBAAmB;gBACxD,IAAIZ,gBAAgB;oBAClB,IAAK,IAAIa,OAAO1B,iBAAkB;wBAChC,IAAIa,eAAec,GAAG,CAACD,MAAM;4BAC3B,iEAAiE;4BACjE,kEAAkE;4BAClE,wEAAwE;4BACxE,YAAY;4BACZ,OAAOnC,mBACLY,cAAcyB,YAAY,EAC1B3B,UAAU4B,KAAK,EACf;wBAEJ;oBACF;gBACF;gBACA;YACF,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAI1C,eACR,uFADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;gBACA;YACF,KAAK;YACL,KAAK;YACL,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,kFADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;gBACH,MAAM,qBAEL,CAFK,IAAIA,eACR,4FADI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACH;YACF;gBACEgB;QACJ;IACF;IACA,mFAAmF;IACnF,gGAAgG;IAChG,mBAAmB;IACnB,OAAO2B,QAAQC,OAAO,CAAC/B;AACzB;AAEA,SAASM,4BACPN,gBAAwB,EACxBkB,yBAAwC,EACxCjB,SAAoB,EACpB+B,cAAoC,EACpC3B,qBAAmD;IAEnD,OAAQ2B,eAAe5B,IAAI;QACzB,KAAK;YAAa;gBAChB,IAAIU,kBAAkBd;gBACtB,IAAIK,0BAA0B,MAAM;oBAClCS,kBAAkBlC,oBAChByB,uBACAL,kBACAkB;gBAEJ;gBAEA,IAAItB,cAAcI,mBAAmB;oBACnC,4BAA4B;oBAC5B,OAAOS,oBAAoBK;gBAC7B;gBAEA,MAAMD,iBAAiBmB,eAAeP,mBAAmB;gBACzD,IAAI5B,uBAAuBG,kBAAkBa,iBAAiB;oBAC5D,iEAAiE;oBACjE,0DAA0D;oBAC1D,OAAOoB,kBAAkBjC,kBAAkBC,WAAW+B;gBACxD;gBAEA,yBAAyB;gBAEzB,MAAM,EAAEE,eAAe,EAAE,GAAGF;gBAC5B,IAAIE,iBAAiB;oBACnB,4EAA4E;oBAC5E,oFAAoF;oBACpF,sEAAsE;oBACtE,IACE,CAACpC,uBAAuBE,kBAAkBgC,eAAeG,UAAU,GACnE;wBACA,MAAMC,oBAAoB3C,2BAA2B4C,cAAc;wBACnE,OAAOH,gBAAgBI,eAAe,CACpCF,mBACA,UACAtB;oBAEJ;gBACF;gBAEA,OAAOL,oBAAoBK;YAC7B;QACA,KAAK;YAAoB;gBACvB,MAAMD,iBAAiBmB,eAAeP,mBAAmB;gBACzD,IAAIZ,gBAAgB;oBAClB,IAAK,MAAMa,OAAO1B,iBAAkB;wBAClC,IAAIa,eAAec,GAAG,CAACD,MAAM;4BAC3B,iEAAiE;4BACjE,kEAAkE;4BAClE,wEAAwE;4BACxE,YAAY;4BACZ,OAAOO,kBACLjC,kBACAC,WACA+B;wBAEJ;oBACF;gBACF;gBACA;YACF;QACA,KAAK;YAAiB;gBACpB,MAAMnB,iBAAiBmB,eAAeP,mBAAmB;gBACzD,IAAIZ,gBAAgB;oBAClB,IAAK,MAAMa,OAAO1B,iBAAkB;wBAClC,IAAIa,eAAec,GAAG,CAACD,MAAM;4BAC3B,OAAOa,mBACLvC,kBACAa,gBACAZ,WACA+B;wBAEJ;oBACF;gBACF;gBACA;YACF;QACA,KAAK;YACH;QACF;YACEA;IACJ;IAEA,IAAIlB,kBAAkBd;IACtB,IAAIK,0BAA0B,MAAM;QAClCS,kBAAkBlC,oBAChByB,uBACAL,kBACAkB;IAEJ;IACA,OAAOT,oBAAoBK;AAC7B;AAEA,SAASQ,6BACPtB,gBAAwB,EACxBkB,yBAAwC,EACxCf,aAA0C,EAC1CE,qBAAmD;IAEnD,IAAIS,kBAAkBd;IACtB,IAAIK,0BAA0B,MAAM;QAClCS,kBAAkBlC,oBAChByB,uBACAL,kBACAkB;IAEJ;IAEA,IAAItB,cAAcI,mBAAmB;QACnC,4BAA4B;QAC5B,OAAOS,oBAAoBK;IAC7B;IAEA,MAAM,EAAEoB,eAAe,EAAE,GAAG/B;IAC5B,IAAI,CAAC+B,iBAAiB;QACpB,mEAAmE;QACnE,6CAA6C;QAC7C,OAAOzB,oBAAoBK;IAC7B;IAEA,uEAAuE;IACvE,yEAAyE;IACzE,qCAAqC;IACrC,4EAA4E;IAC5E,qBAAqB;IACrB,IAAIhB,uBAAuBE,kBAAkBG,cAAcgC,UAAU,GAAG;QACtE,OAAO1B,oBAAoBK;IAC7B;IAEA,qEAAqE;IACrE,+EAA+E;IAC/E,0DAA0D;IAC1D,MAAMsB,oBAAoB3C,2BAA2B+C,eAAe;IACpE,OAAON,gBAAgBI,eAAe,CACpCF,mBACA,UACAtB;AAEJ;AAEA,SAASS,0BACPtB,SAAoB,EACpBE,aAA2B,EAC3BH,gBAAwB,EACxBkB,yBAAwC,EACxCb,qBAAmD;IAEnD,MAAM,EAAE6B,eAAe,EAAEO,gBAAgB,EAAElC,iBAAiB,EAAE,GAAGJ;IAEjE,sFAAsF;IACtF,kFAAkF;IAClF,6FAA6F;IAC7F,4CAA4C;IAC5C,IAAIW,kBAAkBd;IACtB,IAAIO,mBAAmB;QACrBO,kBAAkB4B,4CAChB1C,kBACAC,WACAM;IAEJ;IACA,IAAIF,uBAAuB;QACzBS,kBAAkBlC,oBAChByB,uBACAS,iBACAI;IAEJ;IAEA,IAAIgB,mBAAmBO,kBAAkB;QACvC,OAAOE,yBACL1C,WACAE,eACA+B,iBACAO,kBACAzC,kBACAc;IAEJ;IAEA,8FAA8F;IAC9F,IAAIJ,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,MAAMC,iBAAiBV,cAAcU,cAAc;QACnD,OAAOE,wBACLf,kBACAc,iBACAD,gBACAZ,WACAE;IAEJ,OAAO;QACL,OAAOa,yBAAyBF;IAClC;AACF;AAEA,SAAS6B,yBACP1C,SAAoB,EACpBE,aAA2B,EAC3B+B,eAA6D,EAC7DO,gBAA+D,EAC/DzC,gBAAwB,EACxBc,eAAuB;IAEvB,MAAM8B,UAAUC,6BACd1C,eACA+B,iBACAO,kBACAzC,kBACAc;IAEF,IAAIJ,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,OAAOkC,uCACL9C,kBACA4C,SACA3C;IAEJ,OAAO;QACL,OAAO2C;IACT;AACF;AAEA,SAASC,6BACP1C,aAA2B,EAC3B+B,eAA6D,EAC7DO,gBAA+D,EAC/D,yDAAyD,GACzDzC,gBAAwB,EACxB,0EAA0E,GAC1Ec,eAAuB;IAEvB,+DAA+D;IAC/D,IAAIlB,cAAcI,mBAAmB;QACnC,OAAOS,oBAAoBK;IAC7B;IAEA,8FAA8F;IAC9F,4EAA4E;IAC5E,IAAIjB,uBAAuBG,kBAAkBG,cAAcU,cAAc,GAAG;QAC1E,OAAOkC,+BACLN,iBAAiBO,kBAAkB,EACnClC;IAEJ;IAEA,yBAAyB;IAEzB,qGAAqG;IACrG,kHAAkH;IAClH,IAAI,CAAChB,uBAAuBE,kBAAkBG,cAAcgC,UAAU,GAAG;QACvE,qEAAqE;QACrE,oEAAoE;QACpE,6CAA6C;QAC7C,mFAAmF;QACnF,4CAA4C;QAC5C,MAAMC,oBAAoBjC,cAAc8C,iBAAiB,GACrDxD,2BAA2B+C,eAAe,GAC1C/C,2BAA2B4C,cAAc;QAC7C,OAAOH,gBAAgBI,eAAe,CACpCF,mBACA,UACAtB;IAEJ;IAEA,OAAOL,oBAAoBK;AAC7B;AAEA,SAASiC,+BACPG,OAAqB,EACrBpC,eAAuB;IAEvB,IAAIJ,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,gFAAgF;QAChF,qEAAqE;QACrE,oEAAoE;QACpE,mBAAmB;QACnB,MAAMgC,UAA2B,IAAId,QAAQ,CAACC,SAASoB;YACrDD,QAAQE,IAAI,CAAC,IAAMrB,QAAQjB,kBAAkBqC;QAC/C;QACAP,QAAQS,KAAK,CAACC;QACd,mBAAmB;QACnBV,QAAQW,WAAW,GAAG;QACtB,OAAOX;IACT,OAAO;QACL,OAAOpD,uBAAuB0D,SAASpC;IACzC;AACF;AAEA,SAASwC,QAAQ;AAEjB,SAASZ,4CACP1C,gBAAwB,EACxBC,SAAoB,EACpBM,iBAAiE;IAEjE,MAAM,EAAEiD,2BAA2B,EAAE,GACnCC,QAAQ;IACV,MAAMC,iBAAiB,IAAIC,IAAIC,OAAOC,IAAI,CAACtD,kBAAkBuD,MAAM,IAAI,CAAC;IACxE,OAAON,4BACLxD,kBACA0D,gBACAzD,UAAU4B,KAAK;AAEnB;AAEA,SAASrB,sCACPR,gBAAwB,EACxBC,SAAoB,EACpBM,iBAA6D;IAE7D,MAAM,EAAEiD,2BAA2B,EAAE,GACnCC,QAAQ;IACV,MAAMC,iBAAiB,IAAIC,IAAIC,OAAOC,IAAI,CAACtD,CAAAA,qCAAAA,kBAAmBuD,MAAM,KAAI,CAAC;IACzE,MAAMC,oBAAoBP,4BACxBxD,kBACA0D,gBACAzD,UAAU4B,KAAK;IAEjB,OAAOC,QAAQC,OAAO,CAACgC;AACzB;AAEA,SAAS/C,yBAAyBF,eAAuB;IACvD,OAAOL,oBAAoBK;AAC7B;AAEA,SAASC,wBACPf,gBAAwB,EACxBgE,cAAsB,EACtBnD,cAA4D,EAC5DZ,SAAoB,EACpBgE,YAA0B;IAE1B,OAAOC,4CACLlE,kBACAgE,gBACAnE,uBAAuBG,kBAAkBa,iBACzCZ,WACAgE;AAEJ;AAGA,MAAME,eAAe,IAAIC;AAEzB,MAAMC,6BAA4D;IAChEC,KAAK,SAASA,IAAIC,MAAM,EAAEC,IAAI,EAAEC,QAAQ;QACtC,IAAID,SAAS,UAAUA,SAAS,WAAWA,SAAS,WAAW;YAC7D,MAAME,iBAAiB5F,eAAewF,GAAG,CAACC,QAAQC,MAAMC;YAExD,OAAO,CAAA;gBACL,CAACD,KAAK,EAAE,CAAC,GAAGG;oBACV,MAAMC,QAAQjF,0BAA0BO,QAAQ;oBAEhD,IAAI0E,OAAO;wBACTA,MAAMC,eAAe,CAACC,KAAK,CACzB,qBAA8D,CAA9D,IAAIC,MAAM,CAAC,iDAAiD,CAAC,GAA7D,qBAAA;mCAAA;wCAAA;0CAAA;wBAA6D;oBAEjE;oBAEA,OAAO,IAAIC,MACTN,eAAeO,KAAK,CAACV,QAAQI,OAC7BN;gBAEJ;YACF,CAAA,CAAC,CAACG,KAAK;QACT;QAEA,OAAO1F,eAAewF,GAAG,CAACC,QAAQC,MAAMC;IAC1C;AACF;AAEA,SAASxC,kBACPjC,gBAAwB,EACxBC,SAAoB,EACpB+B,cAA0C;IAE1C,MAAMkD,eAAef,aAAaG,GAAG,CAACtE;IACtC,IAAIkF,cAAc;QAChB,OAAOA;IACT;IAEA,MAAMtC,UAAU,IAAIoC,MAClBzF,mBACEyC,eAAeJ,YAAY,EAC3B3B,UAAU4B,KAAK,EACf,aAEFwC;IAGFF,aAAagB,GAAG,CAACnF,kBAAkB4C;IAEnC,OAAOA;AACT;AAEA,SAASL,mBACPvC,gBAAwB,EACxBa,cAAyC,EACzCZ,SAAoB,EACpB+B,cAAwD;IAExD,MAAMkD,eAAef,aAAaG,GAAG,CAACtE;IACtC,IAAIkF,cAAc;QAChB,OAAOA;IACT;IAEA,MAAME,sBAAsB;QAAE,GAAGpF,gBAAgB;IAAC;IAElD,4DAA4D;IAC5D,kEAAkE;IAClE,qEAAqE;IACrE,MAAM4C,UAAUd,QAAQC,OAAO,CAACqD;IAChCjB,aAAagB,GAAG,CAACnF,kBAAkB4C;IAEnCgB,OAAOC,IAAI,CAAC7D,kBAAkBqF,OAAO,CAAC,CAACb;QACrC,IAAInF,oBAAoBsC,GAAG,CAAC6C,OAAO;QACjC,kEAAkE;QAClE,kEAAkE;QACpE,OAAO;YACL,IAAI3D,eAAec,GAAG,CAAC6C,OAAO;gBAC5BZ,OAAO0B,cAAc,CAACF,qBAAqBZ,MAAM;oBAC/CF;wBACE,MAAMiB,aAAanG,6BAA6B,UAAUoF;wBAC1D,oEAAoE;wBACpE,oEAAoE;wBACpE,wEAAwE;wBACxE,kBAAkB;wBAClB,2EAA2E;wBAC3E,iCAAiC;wBACjC,IAAIxC,eAAe5B,IAAI,KAAK,iBAAiB;4BAC3C,qCAAqC;4BACrCpB,qBACEiB,UAAU4B,KAAK,EACf0D,YACAvD,eAAewD,eAAe;wBAElC,OAAO;4BACL,mBAAmB;4BACnBzG,iCACEwG,YACAtF,WACA+B;wBAEJ;oBACF;oBACAyD,YAAY;gBACd;YACF;QACF;IACF;IAEA,OAAO7C;AACT;AAEA,SAASnC,oBAAoBT,gBAAwB;IACnD,MAAMkF,eAAef,aAAaG,GAAG,CAACtE;IACtC,IAAIkF,cAAc;QAChB,OAAOA;IACT;IAEA,MAAMtC,UAAUd,QAAQC,OAAO,CAAC/B;IAChCmE,aAAagB,GAAG,CAACnF,kBAAkB4C;IAEnC,OAAOA;AACT;AAEA,SAASsB,4CACPlE,gBAAwB,EACxBc,eAAuB,EACvB4E,iBAA0B,EAC1BzF,SAAoB,EACpBgE,YAA0B;IAE1B,MAAMiB,eAAef,aAAaG,GAAG,CAACtE;IACtC,IAAIkF,cAAc;QAChB,OAAOA;IACT;IAEA,4DAA4D;IAC5D,kEAAkE;IAClE,qEAAqE;IACrE,MAAMtC,UAAU8C,oBACZpG,2BACEwB,iBACAmD,cACAxE,2BAA2B+C,eAAe,IAG5CV,QAAQC,OAAO,CAACjB;IAEpB,MAAM6E,iBAAiB7C,uCACrB9C,kBACA4C,SACA3C;IAEFkE,aAAagB,GAAG,CAACnF,kBAAkB2F;IACnC,OAAOA;AACT;AAEA,SAAS7C,uCACP9C,gBAAwB,EACxB4C,OAAwB,EACxB3C,SAAoB;IAEpB,6CAA6C;IAC7C,MAAM2F,oBAAoB,IAAIjC;IAE9BC,OAAOC,IAAI,CAAC7D,kBAAkBqF,OAAO,CAAC,CAACb;QACrC,IAAInF,oBAAoBsC,GAAG,CAAC6C,OAAO;QACjC,kEAAkE;QAClE,kEAAkE;QACpE,OAAO;YACLoB,kBAAkBC,GAAG,CAACrB;QACxB;IACF;IAEA,OAAO,IAAIQ,MAAMpC,SAAS;QACxB0B,KAAIC,MAAM,EAAEC,IAAI,EAAEC,QAAQ;YACxB,IAAI,OAAOD,SAAS,UAAU;gBAC5B,IACE,uEAAuE;gBACvEoB,kBAAkBjE,GAAG,CAAC6C,OACtB;oBACA,MAAMe,aAAanG,6BAA6B,UAAUoF;oBAC1DsB,kBAAkB7F,UAAU4B,KAAK,EAAE0D;gBACrC;YACF;YACA,OAAOzG,eAAewF,GAAG,CAACC,QAAQC,MAAMC;QAC1C;QACAU,KAAIZ,MAAM,EAAEC,IAAI,EAAEuB,KAAK,EAAEtB,QAAQ;YAC/B,IAAI,OAAOD,SAAS,UAAU;gBAC5BoB,kBAAkBI,MAAM,CAACxB;YAC3B;YACA,OAAO1F,eAAeqG,GAAG,CAACZ,QAAQC,MAAMuB,OAAOtB;QACjD;QACAwB,SAAQ1B,MAAM;YACZ,MAAMgB,aAAa;YACnBO,kBAAkB7F,UAAU4B,KAAK,EAAE0D;YACnC,OAAOW,QAAQD,OAAO,CAAC1B;QACzB;IACF;AACF;AAEA,MAAMuB,oBAAoBpG,4CACxByG;AAGF,SAASA,wBACPtE,KAAyB,EACzB0D,UAAkB;IAElB,MAAMa,SAASvE,QAAQ,CAAC,OAAO,EAAEA,MAAM,EAAE,CAAC,GAAG;IAC7C,OAAO,qBAIN,CAJM,IAAIkD,MACT,GAAGqB,OAAO,KAAK,EAAEb,WAAW,EAAE,CAAC,GAC7B,CAAC,iHAAiH,CAAC,GACnH,CAAC,8DAA8D,CAAC,GAH7D,qBAAA;eAAA;oBAAA;sBAAA;IAIP;AACF","ignoreList":[0]} |
@@ -136,3 +136,3 @@ import { Batcher } from '../../lib/batcher'; | ||
| } | ||
| const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, appShells = false, waitUntil, routeKind, invocationID } = context; | ||
| const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, routeKind, invocationID } = context; | ||
| const response = await this.getBatcher.batch({ | ||
@@ -148,3 +148,2 @@ key, | ||
| isPrefetch, | ||
| appShells, | ||
| routeKind, | ||
@@ -208,6 +207,3 @@ invocationID | ||
| // independent of any concurrent background upgrade. | ||
| // | ||
| // Gated on `appShells`: with the flag off, prefetch misses keep the | ||
| // previous batch-join behavior so existing suites are unaffected. | ||
| const incrementalResponseCacheEntry = context.isPrefetch && context.appShells && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved); | ||
| const incrementalResponseCacheEntry = context.isPrefetch && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved); | ||
| // Handle null response | ||
@@ -214,0 +210,0 @@ if (!incrementalResponseCacheEntry) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/response-cache/index.ts"],"sourcesContent":["import type {\n ResponseCacheEntry,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n} from './types'\n\nimport { Batcher } from '../../lib/batcher'\nimport { LRUCache } from '../lib/lru-cache'\nimport { warnOnce } from '../../build/output/log'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\n\n/**\n * Parses an environment variable as a positive integer, returning the fallback\n * if the value is missing, not a number, or not positive.\n */\nfunction parsePositiveInt(\n envValue: string | undefined,\n fallback: number\n): number {\n if (!envValue) return fallback\n const parsed = parseInt(envValue, 10)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\n/**\n * Default TTL (in milliseconds) for minimal mode response cache entries.\n * Used for cache hit validation as a fallback for providers that don't\n * send the x-invocation-id header yet.\n *\n * 10 seconds chosen because:\n * - Long enough to dedupe rapid successive requests (e.g., page + data)\n * - Short enough to not serve stale data across unrelated requests\n *\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.\n */\nconst DEFAULT_TTL_MS = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,\n 10_000\n)\n\n/**\n * Default maximum number of entries in the response cache.\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.\n */\nconst DEFAULT_MAX_SIZE = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,\n 150\n)\n\n/**\n * Separator used in compound cache keys to join pathname and invocationID.\n * Using null byte (\\0) since it cannot appear in valid URL paths or UUIDs.\n */\nconst KEY_SEPARATOR = '\\0'\n\n/**\n * Sentinel value used for TTL-based cache entries (when invocationID is undefined).\n * Chosen to be a clearly reserved marker for internal cache keys.\n */\nconst TTL_SENTINEL = '__ttl_sentinel__'\n\n/**\n * Entry stored in the LRU cache.\n */\ntype CacheEntry = {\n entry: IncrementalResponseCacheEntry | null\n /**\n * TTL expiration timestamp in milliseconds. Used as a fallback for\n * cache hit validation when providers don't send x-invocation-id.\n * Memory pressure is managed by LRU eviction rather than timers.\n */\n expiresAt: number\n}\n\n/**\n * Creates a compound cache key from pathname and invocationID.\n */\nfunction createCacheKey(\n pathname: string,\n invocationID: string | undefined\n): string {\n return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`\n}\n\n/**\n * Extracts the invocationID from a compound cache key.\n * Returns undefined if the key used TTL_SENTINEL.\n */\nfunction extractInvocationID(compoundKey: string): string | undefined {\n const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR)\n if (separatorIndex === -1) return undefined\n\n const invocationID = compoundKey.slice(separatorIndex + 1)\n return invocationID === TTL_SENTINEL ? undefined : invocationID\n}\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n private readonly getBatcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheEntry | null,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheEntry | null\n >({\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n /**\n * LRU cache for minimal mode using compound keys (pathname + invocationID).\n * This allows multiple invocations to cache the same pathname without\n * overwriting each other's entries.\n */\n private readonly cache: LRUCache<CacheEntry>\n\n /**\n * Set of invocation IDs that have had cache entries evicted.\n * Used to detect when the cache size may be too small.\n * Bounded to prevent memory growth.\n */\n private readonly evictedInvocationIDs: Set<string> = new Set()\n\n /**\n * The configured max size, stored for logging.\n */\n private readonly maxSize: number\n\n /**\n * The configured TTL for cache entries in milliseconds.\n */\n private readonly ttl: number\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n constructor(\n minimal_mode: boolean,\n maxSize: number = DEFAULT_MAX_SIZE,\n ttl: number = DEFAULT_TTL_MS\n ) {\n this.minimal_mode = minimal_mode\n this.maxSize = maxSize\n this.ttl = ttl\n\n // Create the LRU cache with eviction tracking\n this.cache = new LRUCache(maxSize, undefined, (compoundKey) => {\n const invocationID = extractInvocationID(compoundKey)\n if (invocationID) {\n // Bound to 100 entries to prevent unbounded memory growth.\n // FIFO eviction is acceptable here because:\n // 1. Invocations are short-lived (single request lifecycle), so older\n // invocations are unlikely to still be active after 100 newer ones\n // 2. This warning mechanism is best-effort for developer guidance—\n // missing occasional eviction warnings doesn't affect correctness\n // 3. If a long-running invocation is somehow evicted and then has\n // another cache entry evicted, it will simply be re-added\n if (this.evictedInvocationIDs.size >= 100) {\n const first = this.evictedInvocationIDs.values().next().value\n if (first) this.evictedInvocationIDs.delete(first)\n }\n this.evictedInvocationIDs.add(invocationID)\n }\n })\n }\n\n /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\n */\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n /**\n * Whether the `appShells` experimental flag is enabled. Gates the\n * prefetch-miss-serves-fallback-shell behavior in `handleGet`.\n */\n appShells?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise<any>) => void\n\n /**\n * The invocation ID from the infrastructure. Used to scope the\n * in-memory cache to a single revalidation request in minimal mode.\n */\n invocationID?: string\n }\n ): Promise<ResponseCacheEntry | null> {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n const cachedItem = this.cache.get(cacheKey)\n\n if (cachedItem) {\n // With invocationID: exact match found - always a hit\n // With TTL mode: must check expiration\n if (context.invocationID !== undefined) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL mode: check expiration\n const now = Date.now()\n if (cachedItem.expiresAt > now) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL expired - clean up\n this.cache.remove(cacheKey)\n }\n\n // Warn if this invocation had entries evicted - indicates cache may be too small.\n if (\n context.invocationID &&\n this.evictedInvocationIDs.has(context.invocationID)\n ) {\n warnOnce(\n `Response cache entry was evicted for invocation ${context.invocationID}. ` +\n `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`\n )\n }\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n appShells = false,\n waitUntil,\n routeKind,\n invocationID,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n appShells,\n routeKind,\n invocationID,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n if (this.minimal_mode && response?.cacheControl) {\n const cacheKey = createCacheKey(key, invocationID)\n this.cache.set(cacheKey, {\n entry: response,\n expiresAt: Date.now() + this.ttl,\n })\n }\n\n return toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n appShells: boolean\n routeKind: RouteKind\n invocationID: string | undefined\n },\n resolve: (value: IncrementalResponseCacheEntry | null) => void\n ): Promise<IncrementalResponseCacheEntry | null> {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(key, {\n kind: routeKindToIncrementalCacheKind(context.routeKind),\n isRoutePPREnabled: context.isRoutePPREnabled,\n isFallback: context.isFallback,\n })\n : null\n\n // `isStale === -1` signals that the entry is past its `expire` (either\n // via an expired tag or, with `cacheLife({ expire })`, past the route's\n // expire time in the prerender manifest). In that case we must NOT\n // early-resolve with the stale value — instead we fall through to a\n // blocking revalidation so the response returned to the user is fresh.\n if (\n previousIncrementalCacheEntry &&\n !context.isOnDemandRevalidate &&\n previousIncrementalCacheEntry.isStale !== -1\n ) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry.\n //\n // A prefetch request that missed must run its own response generator\n // rather than joining an in-flight revalidation through the batcher. A\n // background revalidation may be regenerating the concrete (non-fallback)\n // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by\n // an earlier prefetch sub-request. Joining it would serve that concrete\n // result to the prefetch instead of the fallback shell, and which segment\n // wins would depend purely on request timing. Running the generator\n // directly lets every prefetch segment take the same fallback-shell path,\n // independent of any concurrent background upgrade.\n //\n // Gated on `appShells`: with the flag off, prefetch misses keep the\n // previous batch-join behavior so existing suites are unaffected.\n const incrementalResponseCacheEntry =\n context.isPrefetch &&\n context.appShells &&\n previousIncrementalCacheEntry === null\n ? await this.handleRevalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n : await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Remove the cache item if it was set so we don't use it again.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n this.cache.remove(cacheKey)\n }\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @param waitUntil - Optional function to register background work.\n * @param invocationID - The invocation ID for cache key scoping.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise<any>) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ) {\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined. The minimal mode LRU write is handled in get() so that\n // every caller — including batched invocations — populates the cache.\n if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // When a path is erroring we automatically re-set the existing cache\n // with new revalidate and expire times to prevent non-stop retrying.\n if (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(\n previousIncrementalCacheEntry.cacheControl.revalidate || 3,\n 3\n ),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n cacheControl: { revalidate: revalidate, expire: expire },\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n // We haven't resolved yet, so let's throw to indicate an error.\n throw err\n }\n }\n}\n"],"names":["Batcher","LRUCache","warnOnce","scheduleOnNextTick","fromResponseCacheEntry","routeKindToIncrementalCacheKind","toResponseCacheEntry","parsePositiveInt","envValue","fallback","parsed","parseInt","Number","isFinite","DEFAULT_TTL_MS","process","env","NEXT_PRIVATE_RESPONSE_CACHE_TTL","DEFAULT_MAX_SIZE","NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE","KEY_SEPARATOR","TTL_SENTINEL","createCacheKey","pathname","invocationID","extractInvocationID","compoundKey","separatorIndex","lastIndexOf","undefined","slice","ResponseCache","constructor","minimal_mode","maxSize","ttl","getBatcher","create","cacheKeyFn","key","isOnDemandRevalidate","schedulerFn","revalidateBatcher","evictedInvocationIDs","Set","cache","size","first","values","next","value","delete","add","get","responseGenerator","context","hasResolved","previousCacheEntry","cacheKey","cachedItem","entry","now","Date","expiresAt","remove","has","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","appShells","waitUntil","routeKind","response","batch","resolve","promise","handleGet","cacheControl","set","previousIncrementalCacheEntry","resolved","kind","isStale","incrementalResponseCacheEntry","handleRevalidate","revalidate","err","console","error","responseCacheEntry","isRevalidating","isMiss","Math","min","max","expire"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/response-cache/index.ts"],"sourcesContent":["import type {\n ResponseCacheEntry,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n} from './types'\n\nimport { Batcher } from '../../lib/batcher'\nimport { LRUCache } from '../lib/lru-cache'\nimport { warnOnce } from '../../build/output/log'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\n\n/**\n * Parses an environment variable as a positive integer, returning the fallback\n * if the value is missing, not a number, or not positive.\n */\nfunction parsePositiveInt(\n envValue: string | undefined,\n fallback: number\n): number {\n if (!envValue) return fallback\n const parsed = parseInt(envValue, 10)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\n/**\n * Default TTL (in milliseconds) for minimal mode response cache entries.\n * Used for cache hit validation as a fallback for providers that don't\n * send the x-invocation-id header yet.\n *\n * 10 seconds chosen because:\n * - Long enough to dedupe rapid successive requests (e.g., page + data)\n * - Short enough to not serve stale data across unrelated requests\n *\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.\n */\nconst DEFAULT_TTL_MS = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,\n 10_000\n)\n\n/**\n * Default maximum number of entries in the response cache.\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.\n */\nconst DEFAULT_MAX_SIZE = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,\n 150\n)\n\n/**\n * Separator used in compound cache keys to join pathname and invocationID.\n * Using null byte (\\0) since it cannot appear in valid URL paths or UUIDs.\n */\nconst KEY_SEPARATOR = '\\0'\n\n/**\n * Sentinel value used for TTL-based cache entries (when invocationID is undefined).\n * Chosen to be a clearly reserved marker for internal cache keys.\n */\nconst TTL_SENTINEL = '__ttl_sentinel__'\n\n/**\n * Entry stored in the LRU cache.\n */\ntype CacheEntry = {\n entry: IncrementalResponseCacheEntry | null\n /**\n * TTL expiration timestamp in milliseconds. Used as a fallback for\n * cache hit validation when providers don't send x-invocation-id.\n * Memory pressure is managed by LRU eviction rather than timers.\n */\n expiresAt: number\n}\n\n/**\n * Creates a compound cache key from pathname and invocationID.\n */\nfunction createCacheKey(\n pathname: string,\n invocationID: string | undefined\n): string {\n return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`\n}\n\n/**\n * Extracts the invocationID from a compound cache key.\n * Returns undefined if the key used TTL_SENTINEL.\n */\nfunction extractInvocationID(compoundKey: string): string | undefined {\n const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR)\n if (separatorIndex === -1) return undefined\n\n const invocationID = compoundKey.slice(separatorIndex + 1)\n return invocationID === TTL_SENTINEL ? undefined : invocationID\n}\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n private readonly getBatcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheEntry | null,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheEntry | null\n >({\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n /**\n * LRU cache for minimal mode using compound keys (pathname + invocationID).\n * This allows multiple invocations to cache the same pathname without\n * overwriting each other's entries.\n */\n private readonly cache: LRUCache<CacheEntry>\n\n /**\n * Set of invocation IDs that have had cache entries evicted.\n * Used to detect when the cache size may be too small.\n * Bounded to prevent memory growth.\n */\n private readonly evictedInvocationIDs: Set<string> = new Set()\n\n /**\n * The configured max size, stored for logging.\n */\n private readonly maxSize: number\n\n /**\n * The configured TTL for cache entries in milliseconds.\n */\n private readonly ttl: number\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n constructor(\n minimal_mode: boolean,\n maxSize: number = DEFAULT_MAX_SIZE,\n ttl: number = DEFAULT_TTL_MS\n ) {\n this.minimal_mode = minimal_mode\n this.maxSize = maxSize\n this.ttl = ttl\n\n // Create the LRU cache with eviction tracking\n this.cache = new LRUCache(maxSize, undefined, (compoundKey) => {\n const invocationID = extractInvocationID(compoundKey)\n if (invocationID) {\n // Bound to 100 entries to prevent unbounded memory growth.\n // FIFO eviction is acceptable here because:\n // 1. Invocations are short-lived (single request lifecycle), so older\n // invocations are unlikely to still be active after 100 newer ones\n // 2. This warning mechanism is best-effort for developer guidance—\n // missing occasional eviction warnings doesn't affect correctness\n // 3. If a long-running invocation is somehow evicted and then has\n // another cache entry evicted, it will simply be re-added\n if (this.evictedInvocationIDs.size >= 100) {\n const first = this.evictedInvocationIDs.values().next().value\n if (first) this.evictedInvocationIDs.delete(first)\n }\n this.evictedInvocationIDs.add(invocationID)\n }\n })\n }\n\n /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\n */\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise<any>) => void\n\n /**\n * The invocation ID from the infrastructure. Used to scope the\n * in-memory cache to a single revalidation request in minimal mode.\n */\n invocationID?: string\n }\n ): Promise<ResponseCacheEntry | null> {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n const cachedItem = this.cache.get(cacheKey)\n\n if (cachedItem) {\n // With invocationID: exact match found - always a hit\n // With TTL mode: must check expiration\n if (context.invocationID !== undefined) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL mode: check expiration\n const now = Date.now()\n if (cachedItem.expiresAt > now) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL expired - clean up\n this.cache.remove(cacheKey)\n }\n\n // Warn if this invocation had entries evicted - indicates cache may be too small.\n if (\n context.invocationID &&\n this.evictedInvocationIDs.has(context.invocationID)\n ) {\n warnOnce(\n `Response cache entry was evicted for invocation ${context.invocationID}. ` +\n `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`\n )\n }\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n waitUntil,\n routeKind,\n invocationID,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n routeKind,\n invocationID,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n if (this.minimal_mode && response?.cacheControl) {\n const cacheKey = createCacheKey(key, invocationID)\n this.cache.set(cacheKey, {\n entry: response,\n expiresAt: Date.now() + this.ttl,\n })\n }\n\n return toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n routeKind: RouteKind\n invocationID: string | undefined\n },\n resolve: (value: IncrementalResponseCacheEntry | null) => void\n ): Promise<IncrementalResponseCacheEntry | null> {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(key, {\n kind: routeKindToIncrementalCacheKind(context.routeKind),\n isRoutePPREnabled: context.isRoutePPREnabled,\n isFallback: context.isFallback,\n })\n : null\n\n // `isStale === -1` signals that the entry is past its `expire` (either\n // via an expired tag or, with `cacheLife({ expire })`, past the route's\n // expire time in the prerender manifest). In that case we must NOT\n // early-resolve with the stale value — instead we fall through to a\n // blocking revalidation so the response returned to the user is fresh.\n if (\n previousIncrementalCacheEntry &&\n !context.isOnDemandRevalidate &&\n previousIncrementalCacheEntry.isStale !== -1\n ) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry.\n //\n // A prefetch request that missed must run its own response generator\n // rather than joining an in-flight revalidation through the batcher. A\n // background revalidation may be regenerating the concrete (non-fallback)\n // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by\n // an earlier prefetch sub-request. Joining it would serve that concrete\n // result to the prefetch instead of the fallback shell, and which segment\n // wins would depend purely on request timing. Running the generator\n // directly lets every prefetch segment take the same fallback-shell path,\n // independent of any concurrent background upgrade.\n const incrementalResponseCacheEntry =\n context.isPrefetch && previousIncrementalCacheEntry === null\n ? await this.handleRevalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n : await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Remove the cache item if it was set so we don't use it again.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n this.cache.remove(cacheKey)\n }\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @param waitUntil - Optional function to register background work.\n * @param invocationID - The invocation ID for cache key scoping.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise<any>) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ) {\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined. The minimal mode LRU write is handled in get() so that\n // every caller — including batched invocations — populates the cache.\n if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // When a path is erroring we automatically re-set the existing cache\n // with new revalidate and expire times to prevent non-stop retrying.\n if (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(\n previousIncrementalCacheEntry.cacheControl.revalidate || 3,\n 3\n ),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n cacheControl: { revalidate: revalidate, expire: expire },\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n // We haven't resolved yet, so let's throw to indicate an error.\n throw err\n }\n }\n}\n"],"names":["Batcher","LRUCache","warnOnce","scheduleOnNextTick","fromResponseCacheEntry","routeKindToIncrementalCacheKind","toResponseCacheEntry","parsePositiveInt","envValue","fallback","parsed","parseInt","Number","isFinite","DEFAULT_TTL_MS","process","env","NEXT_PRIVATE_RESPONSE_CACHE_TTL","DEFAULT_MAX_SIZE","NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE","KEY_SEPARATOR","TTL_SENTINEL","createCacheKey","pathname","invocationID","extractInvocationID","compoundKey","separatorIndex","lastIndexOf","undefined","slice","ResponseCache","constructor","minimal_mode","maxSize","ttl","getBatcher","create","cacheKeyFn","key","isOnDemandRevalidate","schedulerFn","revalidateBatcher","evictedInvocationIDs","Set","cache","size","first","values","next","value","delete","add","get","responseGenerator","context","hasResolved","previousCacheEntry","cacheKey","cachedItem","entry","now","Date","expiresAt","remove","has","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","waitUntil","routeKind","response","batch","resolve","promise","handleGet","cacheControl","set","previousIncrementalCacheEntry","resolved","kind","isStale","incrementalResponseCacheEntry","handleRevalidate","revalidate","err","console","error","responseCacheEntry","isRevalidating","isMiss","Math","min","max","expire"],"mappings":"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","ignoreList":[0]} |
@@ -648,7 +648,2 @@ import '../../build/adapter/setup-node-env.external'; | ||
| const responseCache = this.getResponseCache(req); | ||
| // The prefetch-serves-fallback-shell behavior is gated behind the | ||
| // `appShells` experimental flag. When it's off, Next.js Segment Cache | ||
| // prefetches keep the previous (non-prefetch) response-cache behavior so | ||
| // existing suites that incidentally depend on it are unaffected. | ||
| const appShells = nextConfig.experimental.appShells === true; | ||
| const cacheEntry = await responseCache.get(cacheKey, responseGenerator, { | ||
@@ -659,3 +654,2 @@ routeKind, | ||
| isOnDemandRevalidate, | ||
| appShells, | ||
| // A Next.js Segment Cache prefetch uses the `Next-Router-Prefetch` | ||
@@ -666,6 +660,4 @@ // header (surfaced as the `isPrefetchRSCRequest` request meta), not the | ||
| // importantly, so a prefetch that misses serves a fallback shell rather | ||
| // than joining an in-flight background (concrete) revalidation. The | ||
| // Next.js-prefetch arm is gated on `appShells`; with the flag off, only | ||
| // the standard browser prefetch header is recognized (unchanged). | ||
| isPrefetch: req.headers.purpose === 'prefetch' || appShells && getRequestMeta(req, 'isPrefetchRSCRequest') === true, | ||
| // than joining an in-flight background (concrete) revalidation. | ||
| isPrefetch: req.headers.purpose === 'prefetch' || getRequestMeta(req, 'isPrefetchRSCRequest') === true, | ||
| // Use x-invocation-id header to scope the in-memory cache to a single | ||
@@ -672,0 +664,0 @@ // revalidation request in minimal mode. |
@@ -10,6 +10,7 @@ /** | ||
| PrefetchHint[PrefetchHint["HasRuntimePrefetch"] = 1] = "HasRuntimePrefetch"; | ||
| // This segment or one of its descendants opts into Partial Prefetching. | ||
| // Currently set when a truthy instant config is present on any | ||
| // segment in the subtree (regardless of prefetch mode). Propagates upward | ||
| // so the root segment reflects the entire subtree. | ||
| // This segment or one of its descendants opts into Partial Prefetching, i.e. | ||
| // uses the two-phase (Shell then Speculative) prefetch flow. Set when a | ||
| // truthy instant config is present, or `prefetch` is 'partial', | ||
| // 'unstable_eager', or 'allow-runtime'. Propagates upward so the root segment | ||
| // reflects the entire subtree. | ||
| PrefetchHint[PrefetchHint["SubtreeHasPartialPrefetching"] = 2] = "SubtreeHasPartialPrefetching"; | ||
@@ -16,0 +17,0 @@ // This segment itself has a loading.tsx boundary. |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/shared/lib/app-router-types.ts"],"sourcesContent":["/**\n * App Router types - Client-safe types for the Next.js App Router\n *\n * This file contains type definitions that can be safely imported\n * by both client-side and server-side code without circular dependencies.\n */\n\nimport type React from 'react'\n\nexport type LoadingModuleData =\n | [React.JSX.Element, React.ReactNode, React.ReactNode]\n | null\n\nimport type { VaryParamsIterable } from './segment-cache/vary-params-decoding'\n\n/** viewport metadata node */\nexport type HeadData = React.ReactNode\n\n/**\n * Cache node used in app-router / layout-router.\n */\n\nexport type CacheNode = {\n /**\n * When rsc is not null, it represents the RSC data for the\n * corresponding segment.\n *\n * `null` is a valid React Node but because segment data is always a\n * <LayoutRouter> component, we can use `null` to represent empty. When it is\n * null, it represents missing data, and rendering should suspend.\n */\n rsc: React.ReactNode\n\n /**\n * Represents a static version of the segment that can be shown immediately,\n * and may or may not contain dynamic holes. It's prefetched before a\n * navigation occurs.\n *\n * During rendering, we will choose whether to render `rsc` or `prefetchRsc`\n * with `useDeferredValue`. As with the `rsc` field, a value of `null` means\n * no value was provided. In this case, the LayoutRouter will go straight to\n * rendering the `rsc` value; if that one is also missing, it will suspend and\n * trigger a lazy fetch.\n */\n prefetchRsc: React.ReactNode\n\n prefetchHead: HeadData | null\n\n head: HeadData\n\n slots: Record<string, CacheNode> | null\n\n /**\n * A shared mutable ref that tracks whether this segment should be scrolled\n * to. All new segments created during a single navigation share the same\n * ref. When any segment's scroll handler fires, it sets `current` to\n * `false` so no other segment scrolls for the same navigation.\n *\n * `null` means this segment is not a scroll target (e.g., a reused shared\n * layout segment).\n */\n scrollRef: ScrollRef | null\n\n /**\n * Globally-unique identifier minted from a monotonic counter when the\n * CacheNode is freshly created. Surfaced to user code as a string via\n * `useRouter().bfcacheId` and intended to be used as a React `key` to\n * opt out of Activity-based state preservation on fresh navigations.\n *\n * Preserved when the CacheNode is reused (shared layouts, refresh,\n * search/hash-only navigations) or restored from the BFCache during a\n * back/forward navigation.\n */\n bfcacheId: number\n}\n\n/**\n * A mutable ref shared across all new segments created during a single\n * navigation. Used to ensure that only one segment scrolls per navigation.\n */\nexport type ScrollRef = { current: boolean }\n\nexport type DynamicParamTypes =\n | 'catchall'\n | 'catchall-intercepted-(..)(..)'\n | 'catchall-intercepted-(.)'\n | 'catchall-intercepted-(..)'\n | 'catchall-intercepted-(...)'\n | 'optional-catchall'\n | 'dynamic'\n | 'dynamic-intercepted-(..)(..)'\n | 'dynamic-intercepted-(.)'\n | 'dynamic-intercepted-(..)'\n | 'dynamic-intercepted-(...)'\n\nexport type DynamicParamTypesShort =\n | 'c'\n | 'ci(..)(..)'\n | 'ci(.)'\n | 'ci(..)'\n | 'ci(...)'\n | 'oc'\n | 'd'\n | 'di(..)(..)'\n | 'di(.)'\n | 'di(..)'\n | 'di(...)'\n\n// The tuple form of a segment, used for dynamic route params\nexport type DynamicSegmentTuple = [\n // Param name\n paramName: string,\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n paramCacheKey: string,\n // Dynamic param type\n dynamicParamType: DynamicParamTypesShort,\n // Static sibling segments at the same URL level. Used by the client\n // router to determine if a prefetch can be reused when navigating to\n // a static sibling of a dynamic route. For example, if the route is\n // /products/[id] and there's also /products/sale, then staticSiblings\n // would be ['sale']. null means the siblings are unknown (e.g. in\n // webpack dev mode).\n staticSiblings: readonly string[] | null,\n]\n\nexport type Segment = string | DynamicSegmentTuple\n\n/**\n * Router state\n */\nexport type FlightRouterState = [\n segment: Segment,\n parallelRoutes: { [parallelRouterKey: string]: FlightRouterState },\n refreshState?: CompressedRefreshState | null,\n /**\n * - \"refetch\" is used during a request to inform the server where rendering\n * should start from.\n *\n * - \"inside-shared-layout\" is used during a prefetch request to inform the\n * server that even if the segment matches, it should be treated as if it's\n * within the \"new\" part of a navigation — inside the shared layout. If\n * the segment doesn't match, then it has no effect, since it would be\n * treated as new regardless. If it does match, though, the server does not\n * need to render it, because the client already has it.\n *\n * - \"metadata-only\" instructs the server to skip rendering the segments and\n * only send the head data.\n *\n * A bit confusing, but that's because it has only one extremely narrow use\n * case — during a non-PPR prefetch, the server uses it to find the first\n * loading boundary beneath a shared layout.\n *\n * TODO: We should rethink the protocol for dynamic requests. It might not\n * make sense for the client to send a FlightRouterState, since this type is\n * overloaded with concerns.\n */\n refresh?: 'refetch' | 'inside-shared-layout' | 'metadata-only' | null,\n /**\n * Bitmask of PrefetchHint flags. Encodes route structure metadata:\n * root layout, loading boundaries, instant configs, and runtime prefetch\n * hints. Only set when non-zero.\n */\n prefetchHints?: number,\n]\n\n/**\n * When rendering a parallel route, some of the parallel paths may not match\n * the current URL. In that case, the Next client has to render something,\n * so it will render whichever was the last route to match that slot. We use\n * this type to track when this has happened. It's a tuple of the original\n * URL that was used to fetch the segment, and the (possibly rewritten) search\n * query that was rendered by the server. The URL is needed when performing\n * a refresh of the segment, and the search query is needed for looking up\n * matching entries in the segment cache.\n */\nexport type CompressedRefreshState = [url: string, renderedSearch: string]\n\nexport const enum PrefetchHint {\n // This segment has a runtime prefetch enabled (via instant with\n // prefetch: 'runtime'). Per-segment only, does not propagate to ancestors.\n HasRuntimePrefetch = 0b00001,\n // This segment or one of its descendants opts into Partial Prefetching.\n // Currently set when a truthy instant config is present on any\n // segment in the subtree (regardless of prefetch mode). Propagates upward\n // so the root segment reflects the entire subtree.\n SubtreeHasPartialPrefetching = 0b00010,\n // This segment itself has a loading.tsx boundary.\n SegmentHasLoadingBoundary = 0b00100,\n // A descendant segment (but not this one) has a loading.tsx boundary.\n // Propagates upward so the root reflects the entire subtree.\n SubtreeHasLoadingBoundary = 0b01000,\n // This segment is at or above the application's root layout — the root layout\n // segment itself and all of its ancestors. A dynamic param in one of these\n // segments is a \"root param\".\n IsRootLayoutOrAbove = 0b10000,\n // This segment's response includes its parent's data inlined into it.\n // Set at build time by the segment size measurement pass.\n ParentInlinedIntoSelf = 0b100000,\n // This segment's data is inlined into one of its children — don't fetch\n // it separately. Set at build time by the segment size measurement pass.\n InlinedIntoChild = 0b1000000,\n // On a __PAGE__: this page's response includes the head (metadata/viewport)\n // at the end of its SegmentPrefetch[] array.\n HeadInlinedIntoSelf = 0b10000000,\n // On the root hint node: the head was NOT inlined into any page — fetch\n // it separately. Absence of this bit means the head is bundled into a page.\n HeadOutlined = 0b100000000,\n // The inlining hints in this tree may be stale because the tree was\n // generated before collectPrefetchHints ran (e.g. the initial RSC payload\n // for a fully static page at build time). When writing this tree into the\n // cache, the route entry should be immediately expired so it gets\n // re-fetched with correct hints. Only set during build-time prerendering,\n // never at runtime.\n InliningHintsStale = 0b1000000000,\n // This segment has instant = false, opting out of all\n // prefetching entirely (neither static nor runtime).\n PrefetchDisabled = 0b10000000000,\n // This segment or one of its descendants has runtime prefetch enabled\n // (HasRuntimePrefetch). Propagates upward so the root reflects the\n // entire subtree.\n SubtreeHasRuntimePrefetch = 0b100000000000,\n // This segment or one of its descendants prefetches \"eagerly\" — i.e. its\n // effective prefetch strategy is anything other than 'partial' or\n // 'allow-runtime'. Used by App Shells: a non-eager subtree relies on the\n // shared app shell and skips its Speculative prefetch. Propagates upward so\n // the root reflects the entire subtree.\n SubtreeHasEagerPrefetch = 0b1000000000000,\n // This segment or one of its descendants exports `instant = false`,\n // explicitly opting out of Partial Prefetching. Propagates upward so the root\n // reflects the entire subtree. Used only to suppress the dev-time\n // `<Link prefetch={true}>` warning — unlike PrefetchDisabled, it has no effect\n // on the actual prefetch behavior.\n SubtreeHasInstantFalse = 0b10000000000000,\n}\n\n/**\n * Bitmask for checking whether a segment's static prefetch is skipped. Matches\n * if EITHER bit is set — i.e. the segment uses runtime prefetching\n * (HasRuntimePrefetch) OR prefetching is disabled entirely (PrefetchDisabled,\n * e.g. instant = false). The segment participates in the bundle chain\n * but with null data.\n *\n * Usage: `(hints & StaticPrefetchDisabled) !== 0`\n */\nexport const StaticPrefetchDisabled =\n PrefetchHint.HasRuntimePrefetch | PrefetchHint.PrefetchDisabled\n\n/**\n * The subset of PrefetchHint bits that propagate upward from a child segment to\n * its ancestors (as opposed to segment-local bits like SegmentHasLoadingBoundary\n * or IsRootLayoutOrAbove). Used to clear stale propagated bits before re-deriving them\n * from a node's children.\n */\nexport const SubtreePrefetchHints =\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasLoadingBoundary |\n PrefetchHint.SubtreeHasRuntimePrefetch |\n PrefetchHint.SubtreeHasInstantFalse |\n PrefetchHint.SubtreeHasEagerPrefetch\n\n/**\n * Folds a child segment's prefetch hints into its parent's, propagating the\n * \"subtree\" flags. A child's segment-local flag (e.g. it has a loading boundary,\n * or it has a runtime prefetch) becomes the corresponding \"subtree\" flag on the\n * parent, so the root segment ends up reflecting the entire subtree.\n *\n * Used wherever a route tree is assembled bottom-up: on the server when building\n * a prefetch tree (createFlightRouterStateFromLoaderTree) and on the client when\n * merging a navigation patch into the existing tree (convertServerPatchToFullTree).\n * Keep these in sync by routing both through this helper.\n */\nexport function propagateSubtreeBits(\n parentHints: number,\n childHints: number\n): number {\n if (childHints & PrefetchHint.SubtreeHasPartialPrefetching) {\n parentHints |= PrefetchHint.SubtreeHasPartialPrefetching\n }\n // A child with a loading boundary (directly, or anywhere in its subtree) makes\n // this a SubtreeHasLoadingBoundary on the parent.\n if (\n childHints &\n (PrefetchHint.SegmentHasLoadingBoundary |\n PrefetchHint.SubtreeHasLoadingBoundary)\n ) {\n parentHints |= PrefetchHint.SubtreeHasLoadingBoundary\n }\n // Likewise for runtime prefetch.\n if (\n childHints &\n (PrefetchHint.HasRuntimePrefetch | PrefetchHint.SubtreeHasRuntimePrefetch)\n ) {\n parentHints |= PrefetchHint.SubtreeHasRuntimePrefetch\n }\n // And for eager prefetch. The bit is set directly on each eager segment, so\n // there's no separate segment-local flag — propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasEagerPrefetch) {\n parentHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n // And for `instant = false`. Like eager prefetch, the bit is set directly on\n // each opted-out segment, so propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasInstantFalse) {\n parentHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n return parentHints\n}\n\n/**\n * Individual Flight response path\n */\nexport type FlightSegmentPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n ]\n\n/**\n * Represents a tree of segments and the Flight data (i.e. React nodes) that\n * correspond to each one. The tree is isomorphic to the FlightRouterState;\n * however in the future we want to be able to fetch arbitrary partial segments\n * without having to fetch all its children. So this response format will\n * likely change.\n */\nexport type CacheNodeSeedData = [\n node: React.ReactNode | null,\n parallelRoutes: {\n [parallelRouterKey: string]: CacheNodeSeedData | null\n },\n // TODO: This field is no longer used. Remove it.\n loading: null,\n isPartial: boolean,\n /**\n * An AsyncIterable that yields the route params this segment accessed during\n * server rendering (one name per yield, deduped). Used by the client router\n * to determine cache key specificity - segments that only access certain\n * params can be reused across navigations where unaccessed params change.\n *\n * Does NOT include root params; those are emitted once at the top level of\n * the response (see `r` on the payload) and unioned in by the consumer.\n *\n * - null: tracking was not enabled for this render (e.g., not a prerender).\n * Treat conservatively - assume all params vary.\n * - Drains to empty Set: segment accesses no params (e.g., client components,\n * or server components that don't read params). Can be shared across all\n * param values.\n * - Drains to non-empty Set: segment depends on those params. Can only reuse\n * when those specific params match.\n */\n varyParams: VaryParamsIterable | null,\n]\n\nexport type FlightDataSegment = [\n /* segment of the rendered slice: */ Segment,\n /* treePatch */ FlightRouterState,\n /* cacheNodeSeedData */ CacheNodeSeedData | null, // Can be null during prefetch if there's no loading component\n /* head: viewport */ HeadData,\n /* isHeadPartial */ boolean,\n]\n\nexport type FlightDataPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n // Holds full path to the segment.\n ...FlightSegmentPath[],\n ...FlightDataSegment,\n ]\n\n/**\n * The Flight response data\n */\nexport type FlightData = Array<FlightDataPath> | string\n\n/**\n * Per-route prefetch hints computed at build time. Mirrors the shape of the\n * loader tree so hints can be traversed in parallel during router state\n * creation. Each node stores a bitmask of PrefetchHint flags\n * (ParentInlinedIntoSelf, InlinedIntoChild) computed by the segment size\n * measurement pass.\n *\n * Persisted to prefetch-hints.json as Record<string, PrefetchHints> (keyed\n * by route pattern) and loaded at server startup.\n */\nexport type PrefetchHints = {\n /** Bitmask of PrefetchHint flags for this segment. */\n hints: number\n /** Child hint nodes, keyed by parallel route key. */\n slots: Record<string, PrefetchHints> | null\n}\n\nexport type ActionResult = Promise<any>\n\nexport type InitialRSCPayload = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** initialCanonicalUrlParts */\n c: string[]\n /** initialRenderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** initialFlightData */\n f: FlightDataPath[]\n /** missingSlots */\n m: Set<string> | undefined\n /** GlobalError */\n G: [React.ComponentType<any>, React.ReactNode | undefined]\n /** supportsPerSegmentPrefetching */\n S: boolean\n /**\n * headVaryParams - vary params for the head (metadata) of the response.\n * Does not include root params (see `r`).\n */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params, rather than the server folding them into each set.\n */\n r?: VaryParamsIterable\n /** staleTime in seconds - Only present when Cache Components is enabled. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for normal rendering\nexport type NavigationFlightResponse = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** supportsPerSegmentPrefetching */\n S: boolean\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** staleTime - Only present in dynamic runtime prefetch responses. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /**\n * shellUsedSessionData - true if resolving session data\n * unblocked new content in the shell.\n * NOTE: only use this in runtime/session prefetch requests\n * where we have a proper session shell.\n * */\n u?: Promise<boolean>\n /** headVaryParams. Does not include root params (see `r`). */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params.\n */\n r?: VaryParamsIterable\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for server actions. Action's flight data can be null\nexport type ActionFlightResponse = {\n /** actionResult */\n a: ActionResult\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n}\n\nexport type RSCPayload =\n | InitialRSCPayload\n | NavigationFlightResponse\n | ActionFlightResponse\n\nexport type InstantCookie =\n // pending (waiting to capture)\n | [captured: 0, id: string]\n // captured MPA page load\n | [captured: 1, id: string, state: null]\n // captured SPA navigation (from/to route trees)\n | [\n captured: 1,\n id: string,\n state: { from: FlightRouterState; to: FlightRouterState | null },\n ]\n"],"names":["PrefetchHint","StaticPrefetchDisabled","SubtreePrefetchHints","propagateSubtreeBits","parentHints","childHints"],"mappings":"AAAA;;;;;CAKC,GAiLD,OAAO,IAAA,AAAWA,sCAAAA;IAChB,gEAAgE;IAChE,2EAA2E;;IAE3E,wEAAwE;IACxE,+DAA+D;IAC/D,0EAA0E;IAC1E,mDAAmD;;IAEnD,kDAAkD;;IAElD,sEAAsE;IACtE,6DAA6D;;IAE7D,8EAA8E;IAC9E,2EAA2E;IAC3E,8BAA8B;;IAE9B,sEAAsE;IACtE,0DAA0D;;IAE1D,wEAAwE;IACxE,yEAAyE;;IAEzE,4EAA4E;IAC5E,6CAA6C;;IAE7C,wEAAwE;IACxE,4EAA4E;;IAE5E,oEAAoE;IACpE,0EAA0E;IAC1E,0EAA0E;IAC1E,kEAAkE;IAClE,0EAA0E;IAC1E,oBAAoB;;IAEpB,sDAAsD;IACtD,qDAAqD;;IAErD,sEAAsE;IACtE,mEAAmE;IACnE,kBAAkB;;IAElB,yEAAyE;IACzE,kEAAkE;IAClE,yEAAyE;IACzE,4EAA4E;IAC5E,wCAAwC;;IAExC,oEAAoE;IACpE,8EAA8E;IAC9E,kEAAkE;IAClE,+EAA+E;IAC/E,mCAAmC;;WAtDnBA;MAwDjB;AAED;;;;;;;;CAQC,GACD,OAAO,MAAMC,yBACXD,SAA+D;AAEjE;;;;;CAKC,GACD,OAAO,MAAME,uBACXF,2BAIoC;AAEtC;;;;;;;;;;CAUC,GACD,OAAO,SAASG,qBACdC,WAAmB,EACnBC,UAAkB;IAElB,IAAIA,gBAAwD;QAC1DD;IACF;IACA,+EAA+E;IAC/E,kDAAkD;IAClD,IACEC,aACCL,CAAAA,KACsC,GACvC;QACAI;IACF;IACA,iCAAiC;IACjC,IACEC,aACCL,CAAAA,QAAuE,GACxE;QACAI;IACF;IACA,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAIC,mBAAmD;QACrDD;IACF;IACA,6EAA6E;IAC7E,iDAAiD;IACjD,IAAIC,mBAAkD;QACpDD;IACF;IACA,OAAOA;AACT","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/shared/lib/app-router-types.ts"],"sourcesContent":["/**\n * App Router types - Client-safe types for the Next.js App Router\n *\n * This file contains type definitions that can be safely imported\n * by both client-side and server-side code without circular dependencies.\n */\n\nimport type React from 'react'\n\nexport type LoadingModuleData =\n | [React.JSX.Element, React.ReactNode, React.ReactNode]\n | null\n\nimport type { VaryParamsIterable } from './segment-cache/vary-params-decoding'\n\n/** viewport metadata node */\nexport type HeadData = React.ReactNode\n\n/**\n * Cache node used in app-router / layout-router.\n */\n\nexport type CacheNode = {\n /**\n * When rsc is not null, it represents the RSC data for the\n * corresponding segment.\n *\n * `null` is a valid React Node but because segment data is always a\n * <LayoutRouter> component, we can use `null` to represent empty. When it is\n * null, it represents missing data, and rendering should suspend.\n */\n rsc: React.ReactNode\n\n /**\n * Represents a static version of the segment that can be shown immediately,\n * and may or may not contain dynamic holes. It's prefetched before a\n * navigation occurs.\n *\n * During rendering, we will choose whether to render `rsc` or `prefetchRsc`\n * with `useDeferredValue`. As with the `rsc` field, a value of `null` means\n * no value was provided. In this case, the LayoutRouter will go straight to\n * rendering the `rsc` value; if that one is also missing, it will suspend and\n * trigger a lazy fetch.\n */\n prefetchRsc: React.ReactNode\n\n prefetchHead: HeadData | null\n\n head: HeadData\n\n slots: Record<string, CacheNode> | null\n\n /**\n * A shared mutable ref that tracks whether this segment should be scrolled\n * to. All new segments created during a single navigation share the same\n * ref. When any segment's scroll handler fires, it sets `current` to\n * `false` so no other segment scrolls for the same navigation.\n *\n * `null` means this segment is not a scroll target (e.g., a reused shared\n * layout segment).\n */\n scrollRef: ScrollRef | null\n\n /**\n * Globally-unique identifier minted from a monotonic counter when the\n * CacheNode is freshly created. Surfaced to user code as a string via\n * `useRouter().bfcacheId` and intended to be used as a React `key` to\n * opt out of Activity-based state preservation on fresh navigations.\n *\n * Preserved when the CacheNode is reused (shared layouts, refresh,\n * search/hash-only navigations) or restored from the BFCache during a\n * back/forward navigation.\n */\n bfcacheId: number\n}\n\n/**\n * A mutable ref shared across all new segments created during a single\n * navigation. Used to ensure that only one segment scrolls per navigation.\n */\nexport type ScrollRef = { current: boolean }\n\nexport type DynamicParamTypes =\n | 'catchall'\n | 'catchall-intercepted-(..)(..)'\n | 'catchall-intercepted-(.)'\n | 'catchall-intercepted-(..)'\n | 'catchall-intercepted-(...)'\n | 'optional-catchall'\n | 'dynamic'\n | 'dynamic-intercepted-(..)(..)'\n | 'dynamic-intercepted-(.)'\n | 'dynamic-intercepted-(..)'\n | 'dynamic-intercepted-(...)'\n\nexport type DynamicParamTypesShort =\n | 'c'\n | 'ci(..)(..)'\n | 'ci(.)'\n | 'ci(..)'\n | 'ci(...)'\n | 'oc'\n | 'd'\n | 'di(..)(..)'\n | 'di(.)'\n | 'di(..)'\n | 'di(...)'\n\n// The tuple form of a segment, used for dynamic route params\nexport type DynamicSegmentTuple = [\n // Param name\n paramName: string,\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n paramCacheKey: string,\n // Dynamic param type\n dynamicParamType: DynamicParamTypesShort,\n // Static sibling segments at the same URL level. Used by the client\n // router to determine if a prefetch can be reused when navigating to\n // a static sibling of a dynamic route. For example, if the route is\n // /products/[id] and there's also /products/sale, then staticSiblings\n // would be ['sale']. null means the siblings are unknown (e.g. in\n // webpack dev mode).\n staticSiblings: readonly string[] | null,\n]\n\nexport type Segment = string | DynamicSegmentTuple\n\n/**\n * Router state\n */\nexport type FlightRouterState = [\n segment: Segment,\n parallelRoutes: { [parallelRouterKey: string]: FlightRouterState },\n refreshState?: CompressedRefreshState | null,\n /**\n * - \"refetch\" is used during a request to inform the server where rendering\n * should start from.\n *\n * - \"inside-shared-layout\" is used during a prefetch request to inform the\n * server that even if the segment matches, it should be treated as if it's\n * within the \"new\" part of a navigation — inside the shared layout. If\n * the segment doesn't match, then it has no effect, since it would be\n * treated as new regardless. If it does match, though, the server does not\n * need to render it, because the client already has it.\n *\n * - \"metadata-only\" instructs the server to skip rendering the segments and\n * only send the head data.\n *\n * A bit confusing, but that's because it has only one extremely narrow use\n * case — during a non-PPR prefetch, the server uses it to find the first\n * loading boundary beneath a shared layout.\n *\n * TODO: We should rethink the protocol for dynamic requests. It might not\n * make sense for the client to send a FlightRouterState, since this type is\n * overloaded with concerns.\n */\n refresh?: 'refetch' | 'inside-shared-layout' | 'metadata-only' | null,\n /**\n * Bitmask of PrefetchHint flags. Encodes route structure metadata:\n * root layout, loading boundaries, instant configs, and runtime prefetch\n * hints. Only set when non-zero.\n */\n prefetchHints?: number,\n]\n\n/**\n * When rendering a parallel route, some of the parallel paths may not match\n * the current URL. In that case, the Next client has to render something,\n * so it will render whichever was the last route to match that slot. We use\n * this type to track when this has happened. It's a tuple of the original\n * URL that was used to fetch the segment, and the (possibly rewritten) search\n * query that was rendered by the server. The URL is needed when performing\n * a refresh of the segment, and the search query is needed for looking up\n * matching entries in the segment cache.\n */\nexport type CompressedRefreshState = [url: string, renderedSearch: string]\n\nexport const enum PrefetchHint {\n // This segment has a runtime prefetch enabled (via instant with\n // prefetch: 'runtime'). Per-segment only, does not propagate to ancestors.\n HasRuntimePrefetch = 0b00001,\n // This segment or one of its descendants opts into Partial Prefetching, i.e.\n // uses the two-phase (Shell then Speculative) prefetch flow. Set when a\n // truthy instant config is present, or `prefetch` is 'partial',\n // 'unstable_eager', or 'allow-runtime'. Propagates upward so the root segment\n // reflects the entire subtree.\n SubtreeHasPartialPrefetching = 0b00010,\n // This segment itself has a loading.tsx boundary.\n SegmentHasLoadingBoundary = 0b00100,\n // A descendant segment (but not this one) has a loading.tsx boundary.\n // Propagates upward so the root reflects the entire subtree.\n SubtreeHasLoadingBoundary = 0b01000,\n // This segment is at or above the application's root layout — the root layout\n // segment itself and all of its ancestors. A dynamic param in one of these\n // segments is a \"root param\".\n IsRootLayoutOrAbove = 0b10000,\n // This segment's response includes its parent's data inlined into it.\n // Set at build time by the segment size measurement pass.\n ParentInlinedIntoSelf = 0b100000,\n // This segment's data is inlined into one of its children — don't fetch\n // it separately. Set at build time by the segment size measurement pass.\n InlinedIntoChild = 0b1000000,\n // On a __PAGE__: this page's response includes the head (metadata/viewport)\n // at the end of its SegmentPrefetch[] array.\n HeadInlinedIntoSelf = 0b10000000,\n // On the root hint node: the head was NOT inlined into any page — fetch\n // it separately. Absence of this bit means the head is bundled into a page.\n HeadOutlined = 0b100000000,\n // The inlining hints in this tree may be stale because the tree was\n // generated before collectPrefetchHints ran (e.g. the initial RSC payload\n // for a fully static page at build time). When writing this tree into the\n // cache, the route entry should be immediately expired so it gets\n // re-fetched with correct hints. Only set during build-time prerendering,\n // never at runtime.\n InliningHintsStale = 0b1000000000,\n // This segment has instant = false, opting out of all\n // prefetching entirely (neither static nor runtime).\n PrefetchDisabled = 0b10000000000,\n // This segment or one of its descendants has runtime prefetch enabled\n // (HasRuntimePrefetch). Propagates upward so the root reflects the\n // entire subtree.\n SubtreeHasRuntimePrefetch = 0b100000000000,\n // This segment or one of its descendants prefetches \"eagerly\" — i.e. its\n // effective prefetch strategy is anything other than 'partial' or\n // 'allow-runtime'. Used by App Shells: a non-eager subtree relies on the\n // shared app shell and skips its Speculative prefetch. Propagates upward so\n // the root reflects the entire subtree.\n SubtreeHasEagerPrefetch = 0b1000000000000,\n // This segment or one of its descendants exports `instant = false`,\n // explicitly opting out of Partial Prefetching. Propagates upward so the root\n // reflects the entire subtree. Used only to suppress the dev-time\n // `<Link prefetch={true}>` warning — unlike PrefetchDisabled, it has no effect\n // on the actual prefetch behavior.\n SubtreeHasInstantFalse = 0b10000000000000,\n}\n\n/**\n * Bitmask for checking whether a segment's static prefetch is skipped. Matches\n * if EITHER bit is set — i.e. the segment uses runtime prefetching\n * (HasRuntimePrefetch) OR prefetching is disabled entirely (PrefetchDisabled,\n * e.g. instant = false). The segment participates in the bundle chain\n * but with null data.\n *\n * Usage: `(hints & StaticPrefetchDisabled) !== 0`\n */\nexport const StaticPrefetchDisabled =\n PrefetchHint.HasRuntimePrefetch | PrefetchHint.PrefetchDisabled\n\n/**\n * The subset of PrefetchHint bits that propagate upward from a child segment to\n * its ancestors (as opposed to segment-local bits like SegmentHasLoadingBoundary\n * or IsRootLayoutOrAbove). Used to clear stale propagated bits before re-deriving them\n * from a node's children.\n */\nexport const SubtreePrefetchHints =\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasLoadingBoundary |\n PrefetchHint.SubtreeHasRuntimePrefetch |\n PrefetchHint.SubtreeHasInstantFalse |\n PrefetchHint.SubtreeHasEagerPrefetch\n\n/**\n * Folds a child segment's prefetch hints into its parent's, propagating the\n * \"subtree\" flags. A child's segment-local flag (e.g. it has a loading boundary,\n * or it has a runtime prefetch) becomes the corresponding \"subtree\" flag on the\n * parent, so the root segment ends up reflecting the entire subtree.\n *\n * Used wherever a route tree is assembled bottom-up: on the server when building\n * a prefetch tree (createFlightRouterStateFromLoaderTree) and on the client when\n * merging a navigation patch into the existing tree (convertServerPatchToFullTree).\n * Keep these in sync by routing both through this helper.\n */\nexport function propagateSubtreeBits(\n parentHints: number,\n childHints: number\n): number {\n if (childHints & PrefetchHint.SubtreeHasPartialPrefetching) {\n parentHints |= PrefetchHint.SubtreeHasPartialPrefetching\n }\n // A child with a loading boundary (directly, or anywhere in its subtree) makes\n // this a SubtreeHasLoadingBoundary on the parent.\n if (\n childHints &\n (PrefetchHint.SegmentHasLoadingBoundary |\n PrefetchHint.SubtreeHasLoadingBoundary)\n ) {\n parentHints |= PrefetchHint.SubtreeHasLoadingBoundary\n }\n // Likewise for runtime prefetch.\n if (\n childHints &\n (PrefetchHint.HasRuntimePrefetch | PrefetchHint.SubtreeHasRuntimePrefetch)\n ) {\n parentHints |= PrefetchHint.SubtreeHasRuntimePrefetch\n }\n // And for eager prefetch. The bit is set directly on each eager segment, so\n // there's no separate segment-local flag — propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasEagerPrefetch) {\n parentHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n // And for `instant = false`. Like eager prefetch, the bit is set directly on\n // each opted-out segment, so propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasInstantFalse) {\n parentHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n return parentHints\n}\n\n/**\n * Individual Flight response path\n */\nexport type FlightSegmentPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n ]\n\n/**\n * Represents a tree of segments and the Flight data (i.e. React nodes) that\n * correspond to each one. The tree is isomorphic to the FlightRouterState;\n * however in the future we want to be able to fetch arbitrary partial segments\n * without having to fetch all its children. So this response format will\n * likely change.\n */\nexport type CacheNodeSeedData = [\n node: React.ReactNode | null,\n parallelRoutes: {\n [parallelRouterKey: string]: CacheNodeSeedData | null\n },\n // TODO: This field is no longer used. Remove it.\n loading: null,\n isPartial: boolean,\n /**\n * An AsyncIterable that yields the route params this segment accessed during\n * server rendering (one name per yield, deduped). Used by the client router\n * to determine cache key specificity - segments that only access certain\n * params can be reused across navigations where unaccessed params change.\n *\n * Does NOT include root params; those are emitted once at the top level of\n * the response (see `r` on the payload) and unioned in by the consumer.\n *\n * - null: tracking was not enabled for this render (e.g., not a prerender).\n * Treat conservatively - assume all params vary.\n * - Drains to empty Set: segment accesses no params (e.g., client components,\n * or server components that don't read params). Can be shared across all\n * param values.\n * - Drains to non-empty Set: segment depends on those params. Can only reuse\n * when those specific params match.\n */\n varyParams: VaryParamsIterable | null,\n]\n\nexport type FlightDataSegment = [\n /* segment of the rendered slice: */ Segment,\n /* treePatch */ FlightRouterState,\n /* cacheNodeSeedData */ CacheNodeSeedData | null, // Can be null during prefetch if there's no loading component\n /* head: viewport */ HeadData,\n /* isHeadPartial */ boolean,\n]\n\nexport type FlightDataPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n // Holds full path to the segment.\n ...FlightSegmentPath[],\n ...FlightDataSegment,\n ]\n\n/**\n * The Flight response data\n */\nexport type FlightData = Array<FlightDataPath> | string\n\n/**\n * Per-route prefetch hints computed at build time. Mirrors the shape of the\n * loader tree so hints can be traversed in parallel during router state\n * creation. Each node stores a bitmask of PrefetchHint flags\n * (ParentInlinedIntoSelf, InlinedIntoChild) computed by the segment size\n * measurement pass.\n *\n * Persisted to prefetch-hints.json as Record<string, PrefetchHints> (keyed\n * by route pattern) and loaded at server startup.\n */\nexport type PrefetchHints = {\n /** Bitmask of PrefetchHint flags for this segment. */\n hints: number\n /** Child hint nodes, keyed by parallel route key. */\n slots: Record<string, PrefetchHints> | null\n}\n\nexport type ActionResult = Promise<any>\n\nexport type InitialRSCPayload = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** initialCanonicalUrlParts */\n c: string[]\n /** initialRenderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** initialFlightData */\n f: FlightDataPath[]\n /** missingSlots */\n m: Set<string> | undefined\n /** GlobalError */\n G: [React.ComponentType<any>, React.ReactNode | undefined]\n /** supportsPerSegmentPrefetching */\n S: boolean\n /**\n * headVaryParams - vary params for the head (metadata) of the response.\n * Does not include root params (see `r`).\n */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params, rather than the server folding them into each set.\n */\n r?: VaryParamsIterable\n /** staleTime in seconds - Only present when Cache Components is enabled. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for normal rendering\nexport type NavigationFlightResponse = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** supportsPerSegmentPrefetching */\n S: boolean\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** staleTime - Only present in dynamic runtime prefetch responses. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /**\n * shellUsedSessionData - true if resolving session data\n * unblocked new content in the shell.\n * NOTE: only use this in runtime/session prefetch requests\n * where we have a proper session shell.\n * */\n u?: Promise<boolean>\n /** headVaryParams. Does not include root params (see `r`). */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params.\n */\n r?: VaryParamsIterable\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for server actions. Action's flight data can be null\nexport type ActionFlightResponse = {\n /** actionResult */\n a: ActionResult\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n}\n\nexport type RSCPayload =\n | InitialRSCPayload\n | NavigationFlightResponse\n | ActionFlightResponse\n\nexport type InstantCookie =\n // pending (waiting to capture)\n | [captured: 0, id: string]\n // captured MPA page load\n | [captured: 1, id: string, state: null]\n // captured SPA navigation (from/to route trees)\n | [\n captured: 1,\n id: string,\n state: { from: FlightRouterState; to: FlightRouterState | null },\n ]\n"],"names":["PrefetchHint","StaticPrefetchDisabled","SubtreePrefetchHints","propagateSubtreeBits","parentHints","childHints"],"mappings":"AAAA;;;;;CAKC,GAiLD,OAAO,IAAA,AAAWA,sCAAAA;IAChB,gEAAgE;IAChE,2EAA2E;;IAE3E,6EAA6E;IAC7E,wEAAwE;IACxE,gEAAgE;IAChE,8EAA8E;IAC9E,+BAA+B;;IAE/B,kDAAkD;;IAElD,sEAAsE;IACtE,6DAA6D;;IAE7D,8EAA8E;IAC9E,2EAA2E;IAC3E,8BAA8B;;IAE9B,sEAAsE;IACtE,0DAA0D;;IAE1D,wEAAwE;IACxE,yEAAyE;;IAEzE,4EAA4E;IAC5E,6CAA6C;;IAE7C,wEAAwE;IACxE,4EAA4E;;IAE5E,oEAAoE;IACpE,0EAA0E;IAC1E,0EAA0E;IAC1E,kEAAkE;IAClE,0EAA0E;IAC1E,oBAAoB;;IAEpB,sDAAsD;IACtD,qDAAqD;;IAErD,sEAAsE;IACtE,mEAAmE;IACnE,kBAAkB;;IAElB,yEAAyE;IACzE,kEAAkE;IAClE,yEAAyE;IACzE,4EAA4E;IAC5E,wCAAwC;;IAExC,oEAAoE;IACpE,8EAA8E;IAC9E,kEAAkE;IAClE,+EAA+E;IAC/E,mCAAmC;;WAvDnBA;MAyDjB;AAED;;;;;;;;CAQC,GACD,OAAO,MAAMC,yBACXD,SAA+D;AAEjE;;;;;CAKC,GACD,OAAO,MAAME,uBACXF,2BAIoC;AAEtC;;;;;;;;;;CAUC,GACD,OAAO,SAASG,qBACdC,WAAmB,EACnBC,UAAkB;IAElB,IAAIA,gBAAwD;QAC1DD;IACF;IACA,+EAA+E;IAC/E,kDAAkD;IAClD,IACEC,aACCL,CAAAA,KACsC,GACvC;QACAI;IACF;IACA,iCAAiC;IACjC,IACEC,aACCL,CAAAA,QAAuE,GACxE;QACAI;IACF;IACA,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAIC,mBAAmD;QACrDD;IACF;IACA,6EAA6E;IAC7E,iDAAiD;IACjD,IAAIC,mBAAkD;QACpDD;IACF;IACA,OAAOA;AACT","ignoreList":[0]} |
| export function isStableBuild() { | ||
| return !"16.3.0-canary.87"?.includes('canary') && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV; | ||
| return !"16.3.0-canary.88"?.includes('canary') && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV; | ||
| } | ||
@@ -4,0 +4,0 @@ export class CanaryOnlyConfigError extends Error { |
@@ -7,3 +7,3 @@ import { APP_PATHS_MANIFEST, BUILD_MANIFEST, CLIENT_STATIC_FILES_PATH, INTERCEPTION_ROUTE_REWRITE_MANIFEST, MIDDLEWARE_BUILD_MANIFEST, MIDDLEWARE_MANIFEST, NEXT_FONT_MANIFEST, PAGES_MANIFEST, SERVER_REFERENCE_MANIFEST, SUBRESOURCE_INTEGRITY_MANIFEST, TURBOPACK_CLIENT_BUILD_MANIFEST, TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST } from '../constants'; | ||
| import getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'; | ||
| import { getEntryKey } from './entry-key'; | ||
| import { getEntryKey, splitEntryKey } from './entry-key'; | ||
| import { getSortedRoutes } from '../router/utils'; | ||
@@ -79,2 +79,5 @@ import { existsSync } from 'fs'; | ||
| } | ||
| entries() { | ||
| return this.map.entries(); | ||
| } | ||
| constructor(){ | ||
@@ -206,3 +209,4 @@ this.rawMap = new Map(); | ||
| rootMainFiles: [], | ||
| rootMainFilesTree: {} | ||
| rootMainFilesTree: {}, | ||
| pagesChunkGroupBootstrapParams: {} | ||
| }; | ||
@@ -217,2 +221,6 @@ for (const m of manifests){ | ||
| } | ||
| if (m.pagesChunkGroupBootstrapParams) { | ||
| Object.assign(manifest.pagesChunkGroupBootstrapParams, m.pagesChunkGroupBootstrapParams); | ||
| } | ||
| if (m.chunkLoadingGlobal) manifest.chunkLoadingGlobal = m.chunkLoadingGlobal; | ||
| } | ||
@@ -297,3 +305,21 @@ manifest.pages = sortObjectByKey(manifest.pages); | ||
| const clientBuildManifest = this.mergeClientBuildManifests(this.clientBuildManifests.values(), rewrites, sortedPageKeys); | ||
| const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(clientBuildManifest, null, 2)};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`; | ||
| // Expose each route's bootstrap params and the chunk-loading global to the client | ||
| // so `route-loader` can instantiate a navigated page's entry module. The server | ||
| // stores params as raw JSON per route. | ||
| const pageBootstrapParams = {}; | ||
| let chunkLoadingGlobal; | ||
| for (const [key, m] of this.buildManifests.entries()){ | ||
| // Only the pages-router `route-loader` reads `__TURBOPACK_PAGE_BOOTSTRAP`. App routes | ||
| // navigate via flight and never use it, so skip app entries to keep `_buildManifest.js` | ||
| // (loaded on every page) small. | ||
| if (splitEntryKey(key).type !== 'pages') continue; | ||
| if (m.chunkLoadingGlobal) chunkLoadingGlobal = m.chunkLoadingGlobal; | ||
| for (const [route, params] of Object.entries(m.pagesChunkGroupBootstrapParams ?? {})){ | ||
| pageBootstrapParams[route] = params; | ||
| } | ||
| } | ||
| // Only emit the bootstrap globals when a route actually inlined its bootstrap (shared runtime | ||
| // enabled). | ||
| const hasBootstrapParams = Object.keys(pageBootstrapParams).length > 0; | ||
| const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(clientBuildManifest, null, 2)};` + (hasBootstrapParams ? `self.__TURBOPACK_PAGE_BOOTSTRAP = ${JSON.stringify(pageBootstrapParams)};` + (chunkLoadingGlobal ? `self.__TURBOPACK_CHUNK_LOADING_GLOBAL = ${JSON.stringify(chunkLoadingGlobal)};` : '') : '') + `self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`; | ||
| writeFileAtomic(join(this.distDir, buildManifestPath), clientBuildManifestJs); | ||
@@ -300,0 +326,0 @@ // This is just an empty placeholder, the actual manifest is written after prerendering in |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n CLIENT_STATIC_FILES_PATH,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n SUBRESOURCE_INTEGRITY_MANIFEST,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFileSync } from 'fs'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport { safePathToRegexp } from '../router/utils/route-match-utils'\nimport type { Entrypoints } from '../../../build/swc/types'\nimport {\n normalizeRewritesForBuildManifest,\n type ClientBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n createEdgeRuntimeManifest,\n} from '../../../build/webpack/plugins/build-manifest-plugin-utils'\nimport type { SubresourceIntegrityManifest } from '../../../build'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\ntype ManifestName =\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST\n | typeof TURBOPACK_CLIENT_BUILD_MANIFEST\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: ManifestName,\n type: string,\n firstCall: boolean\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n\n if (firstCall) {\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n page.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type,\n false\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let basePage = removeRouteSuffix(page)\n // For sitemap.xml routes with generateSitemaps, the manifest is at\n // /sitemap/[__metadata_id__]/route (without .xml), because the route\n // handler serves at /sitemap/[id] not /sitemap.xml/[id]\n if (basePage.endsWith('/sitemap.xml')) {\n basePage = basePage.slice(0, -'.xml'.length)\n }\n let metadataPage = addRouteSuffix(addMetadataIdToRoute(basePage))\n manifestPath = getManifestPath(metadataPage, distDir, name, type, false)\n }\n }\n\n return manifestPath\n}\n\nfunction readPartialManifestContent(\n distDir: string,\n name: ManifestName,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): string {\n const page = pageName\n const manifestPath = getManifestPath(page, distDir, name, type, true)\n return readFileSync(posix.join(manifestPath), 'utf-8')\n}\n\n/// Helper class that stores a map of manifests and tracks if they have changed\n/// since the last time they were written to disk. This is used to avoid\n/// unnecessary writes to disk.\nclass ManifestsMap<K, V> {\n private rawMap = new Map<K, string>()\n private map = new Map<K, V>()\n private extraInvalidationKey: string | undefined = undefined\n private changed = true\n\n set(key: K, value: string) {\n if (this.rawMap.get(key) === value) return\n this.changed = true\n this.rawMap.set(key, value)\n this.map.set(key, JSON.parse(value))\n }\n\n delete(key: K) {\n if (this.map.has(key)) {\n this.changed = true\n this.rawMap.delete(key)\n this.map.delete(key)\n }\n }\n\n get(key: K) {\n return this.map.get(key)\n }\n\n takeChanged(extraInvalidationKey?: any) {\n let changed = this.changed\n if (extraInvalidationKey !== undefined) {\n const stringified = JSON.stringify(extraInvalidationKey)\n if (this.extraInvalidationKey !== stringified) {\n this.extraInvalidationKey = stringified\n changed = true\n }\n }\n this.changed = false\n return changed\n }\n\n values() {\n return this.map.values()\n }\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: ManifestsMap<EntryKey, ActionManifest> =\n new ManifestsMap()\n private appPathsManifests: ManifestsMap<EntryKey, PagesManifest> =\n new ManifestsMap()\n private buildManifests: ManifestsMap<EntryKey, BuildManifest> =\n new ManifestsMap()\n private clientBuildManifests: ManifestsMap<EntryKey, ClientBuildManifest> =\n new ManifestsMap()\n private fontManifests: ManifestsMap<EntryKey, NextFontManifest> =\n new ManifestsMap()\n private middlewareManifests: ManifestsMap<\n EntryKey,\n TurbopackMiddlewareManifest\n > = new ManifestsMap()\n private pagesManifests: ManifestsMap<string, PagesManifest> =\n new ManifestsMap()\n private sriManifests: ManifestsMap<EntryKey, SubresourceIntegrityManifest> =\n new ManifestsMap()\n private encryptionKey: string\n /// interceptionRewrites that have been written to disk\n /// This is used to avoid unnecessary writes if the rewrites haven't changed\n private cachedInterceptionRewrites: string | undefined = undefined\n private pendingCacheDeletes: string[] = []\n\n private readonly distDir: string\n private readonly buildId: string\n private readonly dev: boolean\n private readonly sriEnabled: boolean\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n dev,\n sriEnabled,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n dev: boolean\n sriEnabled: boolean\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n this.dev = dev\n this.sriEnabled = sriEnabled\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.clientBuildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n }\n\n loadActionManifest(pageName: string): void {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n })\n action.filename = other[key].filename\n action.exportedName = other[key].exportedName\n Object.assign(action.workers, other[key].workers)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n\n return manifest\n }\n\n private writeActionManifest(): void {\n if (!this.actionManifests.takeChanged()) {\n return\n }\n const actionManifest = this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n this.pendingCacheDeletes.push(actionManifestJsonPath)\n this.pendingCacheDeletes.push(actionManifestJsPath)\n writeFileAtomic(actionManifestJsonPath, json)\n writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n loadAppPathsManifest(pageName: string): void {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n APP_PATHS_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private writeAppPathsManifest(): void {\n if (!this.appPathsManifests.takeChanged()) {\n return\n }\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n this.pendingCacheDeletes.push(appPathsManifestPath)\n writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private writeSriManifest(): void {\n if (!this.sriEnabled || !this.sriManifests.takeChanged()) {\n return\n }\n const sriManifest = this.mergeSriManifests(this.sriManifests.values())\n const pathJson = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n )\n const pathJs = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(pathJson)\n this.pendingCacheDeletes.push(pathJs)\n writeFileAtomic(pathJson, JSON.stringify(sriManifest, null, 2))\n writeFileAtomic(\n pathJs,\n `self.__SUBRESOURCE_INTEGRITY_MANIFEST=${JSON.stringify(\n JSON.stringify(sriManifest)\n )}`\n )\n }\n\n loadBuildManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n loadClientBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): void {\n this.clientBuildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n pageName,\n type\n )\n )\n }\n\n loadSriManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n if (!this.sriEnabled) return\n this.sriManifests.set(\n getEntryKey(type, 'client', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeBuildManifests(\n manifests: Iterable<BuildManifest>,\n lowPriorityFiles: string[]\n ) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n polyfillFiles: [],\n lowPriorityFiles,\n rootMainFiles: [],\n rootMainFilesTree: {},\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n if (m.rootMainFilesTree) {\n Object.assign(manifest.rootMainFilesTree!, m.rootMainFilesTree)\n }\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private mergeClientBuildManifests(\n manifests: Iterable<ClientBuildManifest>,\n rewrites: CustomRoutes['rewrites'],\n sortedPageKeys: string[]\n ): ClientBuildManifest {\n const manifest = {\n __rewrites: rewrites as any,\n sortedPages: sortedPageKeys,\n }\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writeInterceptionRouteRewriteManifest(\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): void {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(\n (\n require('../../../lib/is-interception-route-rewrite') as typeof import('../../../lib/is-interception-route-rewrite')\n ).isInterceptionRouteRewrite\n )\n )\n\n if (this.cachedInterceptionRewrites === interceptionRewrites) {\n return\n }\n this.cachedInterceptionRewrites = interceptionRewrites\n\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(interceptionRewriteManifestPath)\n\n writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n }\n\n private writeBuildManifest(lowPriorityFiles: string[]): void {\n if (!this.buildManifests.takeChanged()) {\n return\n }\n const buildManifest = this.mergeBuildManifests(\n this.buildManifests.values(),\n lowPriorityFiles\n )\n\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n\n this.pendingCacheDeletes.push(buildManifestPath)\n this.pendingCacheDeletes.push(middlewareBuildManifestPath)\n writeFileAtomic(buildManifestPath, JSON.stringify(buildManifest, null, 2))\n writeFileAtomic(\n middlewareBuildManifestPath,\n createEdgeRuntimeManifest(buildManifest)\n )\n\n // Write fallback build manifest\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[],\n lowPriorityFiles\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n this.pendingCacheDeletes.push(fallbackBuildManifestPath)\n writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n private writeClientBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): string[] {\n const rewrites = normalizeRewritesForBuildManifest(\n productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n\n let buildManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_buildManifest.js'\n )\n let ssgManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_ssgManifest.js'\n )\n\n if (\n this.dev &&\n !this.clientBuildManifests.takeChanged({ rewrites, sortedPageKeys })\n ) {\n return [buildManifestPath, ssgManifestPath]\n }\n\n const clientBuildManifest = this.mergeClientBuildManifests(\n this.clientBuildManifests.values(),\n rewrites,\n sortedPageKeys\n )\n const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(\n clientBuildManifest,\n null,\n 2\n )};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n\n writeFileAtomic(\n join(this.distDir, buildManifestPath),\n clientBuildManifestJs\n )\n // This is just an empty placeholder, the actual manifest is written after prerendering in\n // packages/next/src/build/index.ts\n writeFileAtomic(join(this.distDir, ssgManifestPath), srcEmptySsgManifest)\n\n return [buildManifestPath, ssgManifestPath]\n }\n\n loadFontManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n if (!this.fontManifests.takeChanged()) {\n return\n }\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(fontManifestJsonPath)\n this.pendingCacheDeletes.push(fontManifestJsPath)\n writeFileAtomic(fontManifestJsonPath, json)\n writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n /**\n * @returns If the manifest was written or not\n */\n loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): boolean {\n const middlewareManifestPath = getManifestPath(\n pageName,\n this.distDir,\n MIDDLEWARE_MANIFEST,\n type,\n true\n )\n\n // middlewareManifest is actually \"edge manifest\" and not all routes are edge runtime. If it is not written we skip it.\n if (!existsSync(middlewareManifestPath)) {\n return false\n }\n\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n readPartialManifestContent(\n this.distDir,\n MIDDLEWARE_MANIFEST,\n pageName,\n type\n )\n )\n\n return true\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = safePathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private writeMiddlewareManifest(): {\n clientMiddlewareManifestPath: string\n } {\n let clientMiddlewareManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST\n )\n\n if (this.dev && !this.middlewareManifests.takeChanged()) {\n return {\n clientMiddlewareManifestPath,\n }\n }\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Server middleware manifest\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n this.pendingCacheDeletes.push(middlewareManifestPath)\n writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n\n // Client middleware manifest This is only used in dev though, packages/next/src/build/index.ts\n // writes the mainfest again for builds.\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestJs = `self.__MIDDLEWARE_MATCHERS = ${JSON.stringify(\n matchers,\n null,\n 2\n )};self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()`\n\n this.pendingCacheDeletes.push(clientMiddlewareManifestPath)\n writeFileAtomic(\n join(this.distDir, clientMiddlewareManifestPath),\n clientMiddlewareManifestJs\n )\n\n return {\n clientMiddlewareManifestPath,\n }\n }\n\n loadPagesManifest(pageName: string): void {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n readPartialManifestContent(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private mergeSriManifests(manifests: Iterable<SubresourceIntegrityManifest>) {\n const manifest: SubresourceIntegrityManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writePagesManifest(): void {\n if (!this.pagesManifests.takeChanged()) {\n return\n }\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n this.pendingCacheDeletes.push(pagesManifestPath)\n writeFileAtomic(pagesManifestPath, JSON.stringify(pagesManifest, null, 2))\n }\n\n writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }): void {\n this.writeActionManifest()\n this.writeAppPathsManifest()\n const lowPriorityFiles = this.writeClientBuildManifest(\n entrypoints,\n devRewrites,\n productionRewrites\n )\n const { clientMiddlewareManifestPath } = this.writeMiddlewareManifest()\n this.writeBuildManifest([...lowPriorityFiles, clientMiddlewareManifestPath])\n this.writeInterceptionRouteRewriteManifest(devRewrites, productionRewrites)\n this.writeNextFontManifest()\n this.writePagesManifest()\n\n this.writeSriManifest()\n\n // Flush all queued cache deletions in a single require.cache scan\n if (this.pendingCacheDeletes.length > 0) {\n deleteCache(this.pendingCacheDeletes)\n this.pendingCacheDeletes = []\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["APP_PATHS_MANIFEST","BUILD_MANIFEST","CLIENT_STATIC_FILES_PATH","INTERCEPTION_ROUTE_REWRITE_MANIFEST","MIDDLEWARE_BUILD_MANIFEST","MIDDLEWARE_MANIFEST","NEXT_FONT_MANIFEST","PAGES_MANIFEST","SERVER_REFERENCE_MANIFEST","SUBRESOURCE_INTEGRITY_MANIFEST","TURBOPACK_CLIENT_BUILD_MANIFEST","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","join","posix","readFileSync","deleteCache","writeFileAtomic","getAssetPathFromRoute","getEntryKey","getSortedRoutes","existsSync","addMetadataIdToRoute","addRouteSuffix","removeRouteSuffix","tryToParsePath","safePathToRegexp","normalizeRewritesForBuildManifest","srcEmptySsgManifest","processRoute","createEdgeRuntimeManifest","getManifestPath","page","distDir","name","type","firstCall","manifestPath","isSitemapRoute","test","replace","endsWith","basePage","slice","length","metadataPage","readPartialManifestContent","pageName","ManifestsMap","set","key","value","rawMap","get","changed","map","JSON","parse","delete","has","takeChanged","extraInvalidationKey","undefined","stringified","stringify","values","Map","TurbopackManifestLoader","constructor","buildId","encryptionKey","dev","sriEnabled","actionManifests","appPathsManifests","buildManifests","clientBuildManifests","fontManifests","middlewareManifests","pagesManifests","sriManifests","cachedInterceptionRewrites","pendingCacheDeletes","loadActionManifest","mergeActionManifests","manifests","manifest","node","edge","mergeActionIds","actionEntries","other","action","workers","filename","exportedName","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","actionManifestJsonPath","actionManifestJsPath","json","push","loadAppPathsManifest","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeSriManifest","sriManifest","mergeSriManifests","pathJson","pathJs","loadBuildManifest","loadClientBuildManifest","loadSriManifest","mergeBuildManifests","lowPriorityFiles","pages","devFiles","polyfillFiles","rootMainFiles","rootMainFilesTree","mergeClientBuildManifests","rewrites","sortedPageKeys","__rewrites","sortedPages","writeInterceptionRouteRewriteManifest","devRewrites","productionRewrites","beforeFiles","afterFiles","fallback","interceptionRewrites","filter","require","isInterceptionRouteRewrite","interceptionRewriteManifestPath","writeBuildManifest","buildManifest","buildManifestPath","middlewareBuildManifestPath","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","writeClientBuildManifest","entrypoints","pagesKeys","keys","global","app","error","ssgManifestPath","clientBuildManifest","clientBuildManifestJs","loadFontManifest","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","middlewareManifestPath","getMiddlewareManifest","deleteMiddlewareManifest","mergeMiddlewareManifests","version","middleware","sortedMiddleware","functions","instrumentation","updateFunctionDefinition","fun","files","concat","matcher","matchers","regexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","clientMiddlewareManifestPath","middlewareManifest","forEach","startsWith","parsedPage","regexStr","Error","clientMiddlewareManifestJs","loadPagesManifest","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","obj","sort","reduce","acc"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n CLIENT_STATIC_FILES_PATH,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n SUBRESOURCE_INTEGRITY_MANIFEST,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFileSync } from 'fs'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, splitEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport { safePathToRegexp } from '../router/utils/route-match-utils'\nimport type { Entrypoints } from '../../../build/swc/types'\nimport {\n normalizeRewritesForBuildManifest,\n type ClientBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n createEdgeRuntimeManifest,\n} from '../../../build/webpack/plugins/build-manifest-plugin-utils'\nimport type { SubresourceIntegrityManifest } from '../../../build'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\ntype ManifestName =\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST\n | typeof TURBOPACK_CLIENT_BUILD_MANIFEST\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: ManifestName,\n type: string,\n firstCall: boolean\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n\n if (firstCall) {\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n page.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type,\n false\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let basePage = removeRouteSuffix(page)\n // For sitemap.xml routes with generateSitemaps, the manifest is at\n // /sitemap/[__metadata_id__]/route (without .xml), because the route\n // handler serves at /sitemap/[id] not /sitemap.xml/[id]\n if (basePage.endsWith('/sitemap.xml')) {\n basePage = basePage.slice(0, -'.xml'.length)\n }\n let metadataPage = addRouteSuffix(addMetadataIdToRoute(basePage))\n manifestPath = getManifestPath(metadataPage, distDir, name, type, false)\n }\n }\n\n return manifestPath\n}\n\nfunction readPartialManifestContent(\n distDir: string,\n name: ManifestName,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): string {\n const page = pageName\n const manifestPath = getManifestPath(page, distDir, name, type, true)\n return readFileSync(posix.join(manifestPath), 'utf-8')\n}\n\n/// Helper class that stores a map of manifests and tracks if they have changed\n/// since the last time they were written to disk. This is used to avoid\n/// unnecessary writes to disk.\nclass ManifestsMap<K, V> {\n private rawMap = new Map<K, string>()\n private map = new Map<K, V>()\n private extraInvalidationKey: string | undefined = undefined\n private changed = true\n\n set(key: K, value: string) {\n if (this.rawMap.get(key) === value) return\n this.changed = true\n this.rawMap.set(key, value)\n this.map.set(key, JSON.parse(value))\n }\n\n delete(key: K) {\n if (this.map.has(key)) {\n this.changed = true\n this.rawMap.delete(key)\n this.map.delete(key)\n }\n }\n\n get(key: K) {\n return this.map.get(key)\n }\n\n takeChanged(extraInvalidationKey?: any) {\n let changed = this.changed\n if (extraInvalidationKey !== undefined) {\n const stringified = JSON.stringify(extraInvalidationKey)\n if (this.extraInvalidationKey !== stringified) {\n this.extraInvalidationKey = stringified\n changed = true\n }\n }\n this.changed = false\n return changed\n }\n\n values() {\n return this.map.values()\n }\n\n entries() {\n return this.map.entries()\n }\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: ManifestsMap<EntryKey, ActionManifest> =\n new ManifestsMap()\n private appPathsManifests: ManifestsMap<EntryKey, PagesManifest> =\n new ManifestsMap()\n private buildManifests: ManifestsMap<EntryKey, BuildManifest> =\n new ManifestsMap()\n private clientBuildManifests: ManifestsMap<EntryKey, ClientBuildManifest> =\n new ManifestsMap()\n private fontManifests: ManifestsMap<EntryKey, NextFontManifest> =\n new ManifestsMap()\n private middlewareManifests: ManifestsMap<\n EntryKey,\n TurbopackMiddlewareManifest\n > = new ManifestsMap()\n private pagesManifests: ManifestsMap<string, PagesManifest> =\n new ManifestsMap()\n private sriManifests: ManifestsMap<EntryKey, SubresourceIntegrityManifest> =\n new ManifestsMap()\n private encryptionKey: string\n /// interceptionRewrites that have been written to disk\n /// This is used to avoid unnecessary writes if the rewrites haven't changed\n private cachedInterceptionRewrites: string | undefined = undefined\n private pendingCacheDeletes: string[] = []\n\n private readonly distDir: string\n private readonly buildId: string\n private readonly dev: boolean\n private readonly sriEnabled: boolean\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n dev,\n sriEnabled,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n dev: boolean\n sriEnabled: boolean\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n this.dev = dev\n this.sriEnabled = sriEnabled\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.clientBuildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n }\n\n loadActionManifest(pageName: string): void {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n })\n action.filename = other[key].filename\n action.exportedName = other[key].exportedName\n Object.assign(action.workers, other[key].workers)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n\n return manifest\n }\n\n private writeActionManifest(): void {\n if (!this.actionManifests.takeChanged()) {\n return\n }\n const actionManifest = this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n this.pendingCacheDeletes.push(actionManifestJsonPath)\n this.pendingCacheDeletes.push(actionManifestJsPath)\n writeFileAtomic(actionManifestJsonPath, json)\n writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n loadAppPathsManifest(pageName: string): void {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n APP_PATHS_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private writeAppPathsManifest(): void {\n if (!this.appPathsManifests.takeChanged()) {\n return\n }\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n this.pendingCacheDeletes.push(appPathsManifestPath)\n writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private writeSriManifest(): void {\n if (!this.sriEnabled || !this.sriManifests.takeChanged()) {\n return\n }\n const sriManifest = this.mergeSriManifests(this.sriManifests.values())\n const pathJson = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n )\n const pathJs = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(pathJson)\n this.pendingCacheDeletes.push(pathJs)\n writeFileAtomic(pathJson, JSON.stringify(sriManifest, null, 2))\n writeFileAtomic(\n pathJs,\n `self.__SUBRESOURCE_INTEGRITY_MANIFEST=${JSON.stringify(\n JSON.stringify(sriManifest)\n )}`\n )\n }\n\n loadBuildManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n loadClientBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): void {\n this.clientBuildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n pageName,\n type\n )\n )\n }\n\n loadSriManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n if (!this.sriEnabled) return\n this.sriManifests.set(\n getEntryKey(type, 'client', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeBuildManifests(\n manifests: Iterable<BuildManifest>,\n lowPriorityFiles: string[]\n ) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n polyfillFiles: [],\n lowPriorityFiles,\n rootMainFiles: [],\n rootMainFilesTree: {},\n pagesChunkGroupBootstrapParams: {},\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n if (m.rootMainFilesTree) {\n Object.assign(manifest.rootMainFilesTree!, m.rootMainFilesTree)\n }\n if (m.pagesChunkGroupBootstrapParams) {\n Object.assign(\n manifest.pagesChunkGroupBootstrapParams!,\n m.pagesChunkGroupBootstrapParams\n )\n }\n if (m.chunkLoadingGlobal)\n manifest.chunkLoadingGlobal = m.chunkLoadingGlobal\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private mergeClientBuildManifests(\n manifests: Iterable<ClientBuildManifest>,\n rewrites: CustomRoutes['rewrites'],\n sortedPageKeys: string[]\n ): ClientBuildManifest {\n const manifest = {\n __rewrites: rewrites as any,\n sortedPages: sortedPageKeys,\n }\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writeInterceptionRouteRewriteManifest(\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): void {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(\n (\n require('../../../lib/is-interception-route-rewrite') as typeof import('../../../lib/is-interception-route-rewrite')\n ).isInterceptionRouteRewrite\n )\n )\n\n if (this.cachedInterceptionRewrites === interceptionRewrites) {\n return\n }\n this.cachedInterceptionRewrites = interceptionRewrites\n\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(interceptionRewriteManifestPath)\n\n writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n }\n\n private writeBuildManifest(lowPriorityFiles: string[]): void {\n if (!this.buildManifests.takeChanged()) {\n return\n }\n const buildManifest = this.mergeBuildManifests(\n this.buildManifests.values(),\n lowPriorityFiles\n )\n\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n\n this.pendingCacheDeletes.push(buildManifestPath)\n this.pendingCacheDeletes.push(middlewareBuildManifestPath)\n writeFileAtomic(buildManifestPath, JSON.stringify(buildManifest, null, 2))\n writeFileAtomic(\n middlewareBuildManifestPath,\n createEdgeRuntimeManifest(buildManifest)\n )\n\n // Write fallback build manifest\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[],\n lowPriorityFiles\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n this.pendingCacheDeletes.push(fallbackBuildManifestPath)\n writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n private writeClientBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): string[] {\n const rewrites = normalizeRewritesForBuildManifest(\n productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n\n let buildManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_buildManifest.js'\n )\n let ssgManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_ssgManifest.js'\n )\n\n if (\n this.dev &&\n !this.clientBuildManifests.takeChanged({ rewrites, sortedPageKeys })\n ) {\n return [buildManifestPath, ssgManifestPath]\n }\n\n const clientBuildManifest = this.mergeClientBuildManifests(\n this.clientBuildManifests.values(),\n rewrites,\n sortedPageKeys\n )\n\n // Expose each route's bootstrap params and the chunk-loading global to the client\n // so `route-loader` can instantiate a navigated page's entry module. The server\n // stores params as raw JSON per route.\n const pageBootstrapParams: Record<string, unknown> = {}\n let chunkLoadingGlobal: string | undefined\n for (const [key, m] of this.buildManifests.entries()) {\n // Only the pages-router `route-loader` reads `__TURBOPACK_PAGE_BOOTSTRAP`. App routes\n // navigate via flight and never use it, so skip app entries to keep `_buildManifest.js`\n // (loaded on every page) small.\n if (splitEntryKey(key).type !== 'pages') continue\n if (m.chunkLoadingGlobal) chunkLoadingGlobal = m.chunkLoadingGlobal\n for (const [route, params] of Object.entries(\n m.pagesChunkGroupBootstrapParams ?? {}\n )) {\n pageBootstrapParams[route] = params\n }\n }\n\n // Only emit the bootstrap globals when a route actually inlined its bootstrap (shared runtime\n // enabled).\n const hasBootstrapParams = Object.keys(pageBootstrapParams).length > 0\n const clientBuildManifestJs =\n `self.__BUILD_MANIFEST = ${JSON.stringify(clientBuildManifest, null, 2)};` +\n (hasBootstrapParams\n ? `self.__TURBOPACK_PAGE_BOOTSTRAP = ${JSON.stringify(pageBootstrapParams)};` +\n (chunkLoadingGlobal\n ? `self.__TURBOPACK_CHUNK_LOADING_GLOBAL = ${JSON.stringify(\n chunkLoadingGlobal\n )};`\n : '')\n : '') +\n `self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n\n writeFileAtomic(\n join(this.distDir, buildManifestPath),\n clientBuildManifestJs\n )\n // This is just an empty placeholder, the actual manifest is written after prerendering in\n // packages/next/src/build/index.ts\n writeFileAtomic(join(this.distDir, ssgManifestPath), srcEmptySsgManifest)\n\n return [buildManifestPath, ssgManifestPath]\n }\n\n loadFontManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n if (!this.fontManifests.takeChanged()) {\n return\n }\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(fontManifestJsonPath)\n this.pendingCacheDeletes.push(fontManifestJsPath)\n writeFileAtomic(fontManifestJsonPath, json)\n writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n /**\n * @returns If the manifest was written or not\n */\n loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): boolean {\n const middlewareManifestPath = getManifestPath(\n pageName,\n this.distDir,\n MIDDLEWARE_MANIFEST,\n type,\n true\n )\n\n // middlewareManifest is actually \"edge manifest\" and not all routes are edge runtime. If it is not written we skip it.\n if (!existsSync(middlewareManifestPath)) {\n return false\n }\n\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n readPartialManifestContent(\n this.distDir,\n MIDDLEWARE_MANIFEST,\n pageName,\n type\n )\n )\n\n return true\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = safePathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private writeMiddlewareManifest(): {\n clientMiddlewareManifestPath: string\n } {\n let clientMiddlewareManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST\n )\n\n if (this.dev && !this.middlewareManifests.takeChanged()) {\n return {\n clientMiddlewareManifestPath,\n }\n }\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Server middleware manifest\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n this.pendingCacheDeletes.push(middlewareManifestPath)\n writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n\n // Client middleware manifest This is only used in dev though, packages/next/src/build/index.ts\n // writes the mainfest again for builds.\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestJs = `self.__MIDDLEWARE_MATCHERS = ${JSON.stringify(\n matchers,\n null,\n 2\n )};self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()`\n\n this.pendingCacheDeletes.push(clientMiddlewareManifestPath)\n writeFileAtomic(\n join(this.distDir, clientMiddlewareManifestPath),\n clientMiddlewareManifestJs\n )\n\n return {\n clientMiddlewareManifestPath,\n }\n }\n\n loadPagesManifest(pageName: string): void {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n readPartialManifestContent(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private mergeSriManifests(manifests: Iterable<SubresourceIntegrityManifest>) {\n const manifest: SubresourceIntegrityManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writePagesManifest(): void {\n if (!this.pagesManifests.takeChanged()) {\n return\n }\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n this.pendingCacheDeletes.push(pagesManifestPath)\n writeFileAtomic(pagesManifestPath, JSON.stringify(pagesManifest, null, 2))\n }\n\n writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }): void {\n this.writeActionManifest()\n this.writeAppPathsManifest()\n const lowPriorityFiles = this.writeClientBuildManifest(\n entrypoints,\n devRewrites,\n productionRewrites\n )\n const { clientMiddlewareManifestPath } = this.writeMiddlewareManifest()\n this.writeBuildManifest([...lowPriorityFiles, clientMiddlewareManifestPath])\n this.writeInterceptionRouteRewriteManifest(devRewrites, productionRewrites)\n this.writeNextFontManifest()\n this.writePagesManifest()\n\n this.writeSriManifest()\n\n // Flush all queued cache deletions in a single require.cache scan\n if (this.pendingCacheDeletes.length > 0) {\n deleteCache(this.pendingCacheDeletes)\n this.pendingCacheDeletes = []\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["APP_PATHS_MANIFEST","BUILD_MANIFEST","CLIENT_STATIC_FILES_PATH","INTERCEPTION_ROUTE_REWRITE_MANIFEST","MIDDLEWARE_BUILD_MANIFEST","MIDDLEWARE_MANIFEST","NEXT_FONT_MANIFEST","PAGES_MANIFEST","SERVER_REFERENCE_MANIFEST","SUBRESOURCE_INTEGRITY_MANIFEST","TURBOPACK_CLIENT_BUILD_MANIFEST","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","join","posix","readFileSync","deleteCache","writeFileAtomic","getAssetPathFromRoute","getEntryKey","splitEntryKey","getSortedRoutes","existsSync","addMetadataIdToRoute","addRouteSuffix","removeRouteSuffix","tryToParsePath","safePathToRegexp","normalizeRewritesForBuildManifest","srcEmptySsgManifest","processRoute","createEdgeRuntimeManifest","getManifestPath","page","distDir","name","type","firstCall","manifestPath","isSitemapRoute","test","replace","endsWith","basePage","slice","length","metadataPage","readPartialManifestContent","pageName","ManifestsMap","set","key","value","rawMap","get","changed","map","JSON","parse","delete","has","takeChanged","extraInvalidationKey","undefined","stringified","stringify","values","entries","Map","TurbopackManifestLoader","constructor","buildId","encryptionKey","dev","sriEnabled","actionManifests","appPathsManifests","buildManifests","clientBuildManifests","fontManifests","middlewareManifests","pagesManifests","sriManifests","cachedInterceptionRewrites","pendingCacheDeletes","loadActionManifest","mergeActionManifests","manifests","manifest","node","edge","mergeActionIds","actionEntries","other","action","workers","filename","exportedName","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","actionManifestJsonPath","actionManifestJsPath","json","push","loadAppPathsManifest","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeSriManifest","sriManifest","mergeSriManifests","pathJson","pathJs","loadBuildManifest","loadClientBuildManifest","loadSriManifest","mergeBuildManifests","lowPriorityFiles","pages","devFiles","polyfillFiles","rootMainFiles","rootMainFilesTree","pagesChunkGroupBootstrapParams","chunkLoadingGlobal","mergeClientBuildManifests","rewrites","sortedPageKeys","__rewrites","sortedPages","writeInterceptionRouteRewriteManifest","devRewrites","productionRewrites","beforeFiles","afterFiles","fallback","interceptionRewrites","filter","require","isInterceptionRouteRewrite","interceptionRewriteManifestPath","writeBuildManifest","buildManifest","buildManifestPath","middlewareBuildManifestPath","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","writeClientBuildManifest","entrypoints","pagesKeys","keys","global","app","error","ssgManifestPath","clientBuildManifest","pageBootstrapParams","route","params","hasBootstrapParams","clientBuildManifestJs","loadFontManifest","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","middlewareManifestPath","getMiddlewareManifest","deleteMiddlewareManifest","mergeMiddlewareManifests","version","middleware","sortedMiddleware","functions","instrumentation","updateFunctionDefinition","fun","files","concat","matcher","matchers","regexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","clientMiddlewareManifestPath","middlewareManifest","forEach","startsWith","parsedPage","regexStr","Error","clientMiddlewareManifestJs","loadPagesManifest","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","obj","sort","reduce","acc"],"mappings":"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","ignoreList":[0]} |
@@ -430,3 +430,2 @@ "use strict"; | ||
| cachedNavigations: nextConfig.experimental.cachedNavigations ?? false, | ||
| appShells: nextConfig.experimental.appShells, | ||
| maxPostponedStateSizeBytes: (0, _configshared.parseMaxPostponedStateSize)(nextConfig.experimental.maxPostponedStateSize), | ||
@@ -433,0 +432,0 @@ exposeTestingApi: nextConfig.experimental.exposeTestingApiInProductionBuild === true |
@@ -75,3 +75,3 @@ "use strict"; | ||
| const data = await res.json(); | ||
| const versionData = data.versions["16.3.0-canary.87"]; | ||
| const versionData = data.versions["16.3.0-canary.88"]; | ||
| return { | ||
@@ -104,3 +104,3 @@ os: versionData.os, | ||
| lockfileParsed.dependencies[pkg] = { | ||
| version: "16.3.0-canary.87", | ||
| version: "16.3.0-canary.88", | ||
| resolved: pkgData.tarball, | ||
@@ -113,3 +113,3 @@ integrity: pkgData.integrity, | ||
| lockfileParsed.packages[pkg] = { | ||
| version: "16.3.0-canary.87", | ||
| version: "16.3.0-canary.88", | ||
| resolved: pkgData.tarball, | ||
@@ -116,0 +116,0 @@ integrity: pkgData.integrity, |
@@ -138,2 +138,24 @@ /// <reference types="webpack/module.d.ts" /> | ||
| } | ||
| // Builds one inline <script> seeding the runtime queue with the shared (`/_app`) and | ||
| // current route's bootstrap params, before the shared runtime chunk drains it. | ||
| function getInlineBootstrapScript(context, props) { | ||
| const { buildManifest, __NEXT_DATA__, crossOrigin } = context; | ||
| // Only Turbopack production builds populate these; nothing to inline otherwise. | ||
| if (!buildManifest.pagesChunkGroupBootstrapParams || !buildManifest.chunkLoadingGlobal) { | ||
| return null; | ||
| } | ||
| const bootstrap = (0, _getpagefiles.getTurbopackChunkGroupBootstrap)(buildManifest.pagesChunkGroupBootstrapParams, buildManifest.chunkLoadingGlobal, [ | ||
| '/_app', | ||
| __NEXT_DATA__.page | ||
| ]); | ||
| if (!bootstrap) return null; | ||
| const html = (0, _htmlescape.htmlEscapeJsonString)(bootstrap); | ||
| return /*#__PURE__*/ (0, _jsxruntime.jsx)("script", { | ||
| nonce: props.nonce, | ||
| crossOrigin: props.crossOrigin || crossOrigin, | ||
| dangerouslySetInnerHTML: { | ||
| __html: html | ||
| } | ||
| }, "turbopack-bootstrap"); | ||
| } | ||
| function getScripts(context, props, files) { | ||
@@ -144,3 +166,3 @@ var _buildManifest_lowPriorityFiles; | ||
| const lowPriorityScripts = (_buildManifest_lowPriorityFiles = buildManifest.lowPriorityFiles) == null ? void 0 : _buildManifest_lowPriorityFiles.filter((file)=>file.endsWith('.js')); | ||
| return [ | ||
| const scripts = [ | ||
| ...normalScripts, | ||
@@ -160,2 +182,8 @@ ...lowPriorityScripts | ||
| }); | ||
| // Emit the bootstrap before the chunk <script>s so the queue exists first. | ||
| const bootstrapScript = getInlineBootstrapScript(context, props); | ||
| return bootstrapScript ? [ | ||
| bootstrapScript, | ||
| ...scripts | ||
| ] : scripts; | ||
| } | ||
@@ -162,0 +190,0 @@ function getPreNextWorkerScripts(context, props) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/pages/_document.tsx"],"sourcesContent":["/// <reference types=\"webpack/module.d.ts\" />\n\nimport React, { type JSX } from 'react'\nimport { NEXT_BUILTIN_DOCUMENT } from '../shared/lib/constants'\nimport type {\n DocumentContext,\n DocumentInitialProps,\n DocumentProps,\n DocumentType,\n NEXT_DATA,\n} from '../shared/lib/utils'\nimport type { ScriptProps } from '../client/script'\nimport type { NextFontManifest } from '../build/webpack/plugins/next-font-manifest-plugin'\n\nimport { getPageFiles } from '../server/get-page-files'\nimport type { BuildManifest } from '../server/get-page-files'\nimport { htmlEscapeJsonString } from '../shared/lib/htmlescape'\nimport isError from '../lib/is-error'\n\nimport {\n HtmlContext,\n useHtmlContext,\n} from '../shared/lib/html-context.shared-runtime'\nimport type { HtmlProps } from '../shared/lib/html-context.shared-runtime'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { getTracer } from '../server/lib/trace/tracer'\nimport { getTracedMetadata } from '../server/lib/trace/utils'\n\nexport type { DocumentContext, DocumentInitialProps, DocumentProps }\n\nexport type OriginProps = {\n nonce?: string\n crossOrigin?: 'anonymous' | 'use-credentials' | '' | undefined\n children?: React.ReactNode\n}\n\ntype DocumentFiles = {\n sharedFiles: readonly string[]\n pageFiles: readonly string[]\n allFiles: readonly string[]\n}\n\ntype HeadHTMLProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLHeadElement>,\n HTMLHeadElement\n>\n\ntype HeadProps = OriginProps & HeadHTMLProps\n\n/** Set of pages that have triggered a large data warning on production mode. */\nconst largePageDataWarnings = new Set<string>()\n\nfunction getDocumentFiles(\n buildManifest: BuildManifest,\n pathname: string\n): DocumentFiles {\n const sharedFiles: readonly string[] = getPageFiles(buildManifest, '/_app')\n const pageFiles: readonly string[] = getPageFiles(buildManifest, pathname)\n\n return {\n sharedFiles,\n pageFiles,\n allFiles: [...new Set([...sharedFiles, ...pageFiles])],\n }\n}\n\nfunction getPolyfillScripts(context: HtmlProps, props: OriginProps) {\n // polyfills.js has to be rendered as nomodule without async\n // It also has to be the first script to load\n const {\n assetPrefix,\n buildManifest,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return buildManifest.polyfillFiles\n .filter(\n (polyfill) => polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')\n )\n .map((polyfill) => (\n <script\n key={polyfill}\n defer={!disableOptimizedLoading}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n noModule={true}\n src={`${assetPrefix}/_next/${encodeURIPath(\n polyfill\n )}${assetQueryString}`}\n />\n ))\n}\n\nfunction hasComponentProps(child: any): child is React.ReactElement<any> {\n return !!child && !!child.props\n}\n\nfunction getDynamicChunks(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n dynamicImports,\n assetPrefix,\n isDevelopment,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return dynamicImports.map((file) => {\n if (!file.endsWith('.js') || files.allFiles.includes(file)) return null\n\n return (\n <script\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${assetQueryString}`}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n}\n\nfunction getScripts(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n assetPrefix,\n buildManifest,\n isDevelopment,\n assetQueryString,\n mutableAssetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n const normalScripts = files.allFiles.filter((file) => file.endsWith('.js'))\n const lowPriorityScripts = buildManifest.lowPriorityFiles?.filter((file) =>\n file.endsWith('.js')\n )\n\n return [...normalScripts, ...lowPriorityScripts].map((file) => {\n // static/immutable/chunks/51e975e7b637a580.js should use the immutable id, while\n // static/Yj152X97rfGgF7NPcJEZs/_ssgManifest.js should use the deployment id\n const query = file.startsWith('static/immutable/chunks')\n ? assetQueryString\n : mutableAssetQueryString\n return (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${query}`}\n nonce={props.nonce}\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n}\n\nfunction getPreNextWorkerScripts(context: HtmlProps, props: OriginProps) {\n const { assetPrefix, scriptLoader, crossOrigin, nextScriptWorkers } = context\n\n // disable `nextScriptWorkers` in edge runtime\n if (!nextScriptWorkers || process.env.NEXT_RUNTIME === 'edge') return null\n\n try {\n // @ts-expect-error: Prevent webpack from processing this require\n let { partytownSnippet } = __non_webpack_require__(\n '@builder.io/partytown/integration'!\n )\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n // Check to see if the user has defined their own Partytown configuration\n const userDefinedConfig = children.find(\n (child) =>\n hasComponentProps(child) &&\n child?.props?.dangerouslySetInnerHTML?.__html.length &&\n 'data-partytown-config' in child.props\n )\n\n return (\n <>\n {!userDefinedConfig && (\n <script\n data-partytown-config=\"\"\n dangerouslySetInnerHTML={{\n __html: `\n partytown = {\n lib: \"${assetPrefix}/_next/static/~partytown/\"\n };\n `,\n }}\n />\n )}\n <script\n data-partytown=\"\"\n dangerouslySetInnerHTML={{\n __html: partytownSnippet(),\n }}\n />\n {(scriptLoader.worker || []).map((file: ScriptProps, index: number) => {\n const {\n strategy,\n src,\n children: scriptChildren,\n dangerouslySetInnerHTML,\n ...scriptProps\n } = file\n\n let srcProps: {\n src?: string\n dangerouslySetInnerHTML?: ScriptProps['dangerouslySetInnerHTML']\n } = {}\n\n if (src) {\n // Use external src if provided\n srcProps.src = src\n } else if (\n dangerouslySetInnerHTML &&\n dangerouslySetInnerHTML.__html\n ) {\n // Embed inline script if provided with dangerouslySetInnerHTML\n srcProps.dangerouslySetInnerHTML = {\n __html: dangerouslySetInnerHTML.__html,\n }\n } else if (scriptChildren) {\n // Embed inline script if provided with children\n srcProps.dangerouslySetInnerHTML = {\n __html:\n typeof scriptChildren === 'string'\n ? scriptChildren\n : Array.isArray(scriptChildren)\n ? scriptChildren.join('')\n : '',\n }\n } else {\n throw new Error(\n 'Invalid usage of next/script. Did you forget to include a src attribute or an inline script? https://nextjs.org/docs/messages/invalid-script'\n )\n }\n\n return (\n <script\n {...srcProps}\n {...scriptProps}\n type=\"text/partytown\"\n key={src || index}\n nonce={props.nonce}\n data-nscript=\"worker\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })}\n </>\n )\n } catch (err) {\n if (isError(err) && err.code !== 'MODULE_NOT_FOUND') {\n console.warn(`Warning: ${err.message}`)\n }\n return null\n }\n}\n\nfunction getPreNextScripts(context: HtmlProps, props: OriginProps) {\n const { scriptLoader, disableOptimizedLoading, crossOrigin } = context\n\n const webWorkerScripts = getPreNextWorkerScripts(context, props)\n\n const beforeInteractiveScripts = (scriptLoader.beforeInteractive || [])\n .filter((script) => script.src)\n .map((file: ScriptProps, index: number) => {\n const { strategy, ...scriptProps } = file\n return (\n <script\n {...scriptProps}\n key={scriptProps.src || index}\n defer={scriptProps.defer ?? !disableOptimizedLoading}\n nonce={scriptProps.nonce || props.nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n\n return (\n <>\n {webWorkerScripts}\n {beforeInteractiveScripts}\n </>\n )\n}\n\nfunction getHeadHTMLProps(props: HeadProps) {\n const { crossOrigin, nonce, ...restProps } = props\n\n // This assignment is necessary for additional type checking to avoid unsupported attributes in <head>\n const headProps: HeadHTMLProps & {\n [P in Exclude<keyof HeadProps, keyof HeadHTMLProps>]?: never\n } = restProps\n\n return headProps\n}\n\nfunction getNextFontLinkTags(\n nextFontManifest: DeepReadonly<NextFontManifest> | undefined,\n dangerousAsPath: string,\n assetPrefix: string = '',\n assetQueryString: string = ''\n) {\n if (!nextFontManifest) {\n return {\n preconnect: null,\n preload: null,\n }\n }\n\n const appFontsEntry = nextFontManifest.pages['/_app']\n const pageFontsEntry = nextFontManifest.pages[dangerousAsPath]\n\n const preloadedFontFiles = Array.from(\n new Set([...(appFontsEntry ?? []), ...(pageFontsEntry ?? [])])\n )\n\n // If no font files should preload but there's an entry for the path, add a preconnect tag.\n const preconnectToSelf = !!(\n preloadedFontFiles.length === 0 &&\n (appFontsEntry || pageFontsEntry)\n )\n\n return {\n preconnect: preconnectToSelf ? (\n <link\n data-next-font={\n nextFontManifest.pagesUsingSizeAdjust ? 'size-adjust' : ''\n }\n rel=\"preconnect\"\n href=\"/\"\n crossOrigin=\"anonymous\"\n />\n ) : null,\n preload: preloadedFontFiles\n ? preloadedFontFiles.map((fontFile) => {\n const ext = /\\.(woff|woff2|eot|ttf|otf)$/.exec(fontFile)![1]\n return (\n <link\n key={fontFile}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(fontFile)}${assetQueryString}`}\n as=\"font\"\n type={`font/${ext}`}\n crossOrigin=\"anonymous\"\n data-next-font={fontFile.includes('-s') ? 'size-adjust' : ''}\n />\n )\n })\n : null,\n }\n}\n\n// Use `React.Component` to avoid errors from the RSC checks because\n// it can't be imported directly in Server Components:\n//\n// import { Component } from 'react'\n//\n// More info: https://github.com/vercel/next.js/pull/40686\nexport class Head extends React.Component<HeadProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getCssLinks(files: DocumentFiles): JSX.Element[] | null {\n const {\n assetPrefix,\n cssAssetQueryString,\n dynamicImports,\n dynamicCssManifest,\n crossOrigin,\n optimizeCss,\n } = this.context\n const cssFiles = files.allFiles.filter((f) => f.endsWith('.css'))\n const sharedFiles: Set<string> = new Set(files.sharedFiles)\n\n // Unmanaged files are CSS files that will be handled directly by the\n // webpack runtime (`mini-css-extract-plugin`).\n let unmanagedFiles: Set<string> = new Set([])\n let localDynamicCssFiles = Array.from(\n new Set(dynamicImports.filter((file) => file.endsWith('.css')))\n )\n if (localDynamicCssFiles.length) {\n const existing = new Set(cssFiles)\n localDynamicCssFiles = localDynamicCssFiles.filter(\n (f) => !(existing.has(f) || sharedFiles.has(f))\n )\n unmanagedFiles = new Set(localDynamicCssFiles)\n cssFiles.push(...localDynamicCssFiles)\n }\n\n let cssLinkElements: JSX.Element[] = []\n cssFiles.forEach((file) => {\n const isSharedFile = sharedFiles.has(file)\n const isUnmanagedFile = unmanagedFiles.has(file)\n const isFileInDynamicCssManifest = dynamicCssManifest.has(file)\n\n if (!optimizeCss) {\n cssLinkElements.push(\n <link\n key={`${file}-preload`}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n as=\"style\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n }\n\n cssLinkElements.push(\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"stylesheet\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n data-n-g={isUnmanagedFile ? undefined : isSharedFile ? '' : undefined}\n data-n-p={\n isSharedFile || isUnmanagedFile || isFileInDynamicCssManifest\n ? undefined\n : ''\n }\n />\n )\n })\n\n return cssLinkElements.length === 0 ? null : cssLinkElements\n }\n\n getPreloadDynamicChunks() {\n const { dynamicImports, assetPrefix, assetQueryString, crossOrigin } =\n this.context\n\n return (\n dynamicImports\n .map((file) => {\n if (!file.endsWith('.js')) {\n return null\n }\n\n return (\n <link\n rel=\"preload\"\n key={file}\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n })\n // Filter out nulled scripts\n .filter(Boolean)\n )\n }\n\n getPreloadMainLinks(files: DocumentFiles): JSX.Element[] | null {\n const { assetPrefix, assetQueryString, scriptLoader, crossOrigin } =\n this.context\n const preloadFiles = files.allFiles.filter((file: string) => {\n return file.endsWith('.js')\n })\n\n return [\n ...(scriptLoader.beforeInteractive || []).map((file) => (\n <link\n key={file.src}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={file.src}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ...preloadFiles.map((file: string) => (\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ]\n }\n\n getBeforeInteractiveInlineScripts() {\n const { scriptLoader } = this.context\n const { nonce, crossOrigin } = this.props\n\n return (scriptLoader.beforeInteractive || [])\n .filter(\n (script) =>\n !script.src && (script.dangerouslySetInnerHTML || script.children)\n )\n .map((file: ScriptProps, index: number) => {\n const {\n strategy,\n children,\n dangerouslySetInnerHTML,\n src,\n ...scriptProps\n } = file\n let html: NonNullable<\n ScriptProps['dangerouslySetInnerHTML']\n >['__html'] = ''\n\n if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n html = dangerouslySetInnerHTML.__html\n } else if (children) {\n html =\n typeof children === 'string'\n ? children\n : Array.isArray(children)\n ? children.join('')\n : ''\n }\n\n return (\n <script\n {...scriptProps}\n dangerouslySetInnerHTML={{ __html: html }}\n key={scriptProps.id || index}\n nonce={nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={\n crossOrigin ||\n (process.env.__NEXT_CROSS_ORIGIN as typeof crossOrigin)\n }\n />\n )\n })\n }\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n render() {\n const {\n styles,\n __NEXT_DATA__,\n dangerousAsPath,\n headTags,\n unstable_runtimeJS,\n unstable_JsPreload,\n disableOptimizedLoading,\n optimizeCss,\n assetPrefix,\n nextFontManifest,\n cssAssetQueryString,\n } = this.context\n\n const disableRuntimeJS = unstable_runtimeJS === false\n const disableJsPreload =\n unstable_JsPreload === false || !disableOptimizedLoading\n\n this.context.docComponentsRendered.Head = true\n\n let { head } = this.context\n let cssPreloads: Array<JSX.Element> = []\n let otherHeadElements: Array<JSX.Element> = []\n if (head) {\n head.forEach((child) => {\n if (\n child &&\n child.type === 'link' &&\n child.props['rel'] === 'preload' &&\n child.props['as'] === 'style'\n ) {\n cssPreloads.push(child)\n } else {\n if (child) {\n otherHeadElements.push(\n React.cloneElement(child, { 'data-next-head': '' })\n )\n }\n }\n })\n head = cssPreloads.concat(otherHeadElements)\n }\n let children: React.ReactNode[] = React.Children.toArray(\n this.props.children\n ).filter(Boolean)\n // show a warning if Head contains <title> (only in development)\n if (process.env.NODE_ENV !== 'production') {\n children = React.Children.map(children, (child: any) => {\n const isReactHelmet = child?.props?.['data-react-helmet']\n if (!isReactHelmet) {\n if (child?.type === 'title') {\n console.warn(\n \"Warning: <title> should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-title\"\n )\n } else if (\n child?.type === 'meta' &&\n child?.props?.name === 'viewport'\n ) {\n console.warn(\n \"Warning: viewport meta tags should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-viewport-meta\"\n )\n }\n }\n return child\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n })!\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `Head` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n const nextFontLinkTags = getNextFontLinkTags(\n nextFontManifest,\n dangerousAsPath,\n assetPrefix,\n cssAssetQueryString\n )\n\n const tracingMetadata = getTracedMetadata(\n getTracer().getTracePropagationData(),\n this.context.experimentalClientTraceMetadata\n )\n\n const traceMetaTags = (tracingMetadata || []).map(\n ({ key, value }, index) => (\n <meta key={`next-trace-data-${index}`} name={key} content={value} />\n )\n )\n\n return (\n <head {...getHeadHTMLProps(this.props)}>\n {this.context.isDevelopment && (\n <>\n <style\n data-next-hide-fouc\n dangerouslySetInnerHTML={{\n __html: `body{display:none}`,\n }}\n />\n <noscript data-next-hide-fouc>\n <style\n dangerouslySetInnerHTML={{\n __html: `body{display:block}`,\n }}\n />\n </noscript>\n </>\n )}\n {head}\n\n {children}\n\n {nextFontLinkTags.preconnect}\n {nextFontLinkTags.preload}\n\n {this.getBeforeInteractiveInlineScripts()}\n {!optimizeCss && this.getCssLinks(files)}\n {!optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadDynamicChunks()}\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadMainLinks(files)}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getScripts(files)}\n\n {optimizeCss && this.getCssLinks(files)}\n {optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n {this.context.isDevelopment && (\n // this element is used to mount development styles so the\n // ordering matches production\n // (by default, style-loader injects at the bottom of <head />)\n <noscript id=\"__next_css__DO_NOT_USE__\" />\n )}\n {traceMetaTags}\n {styles || null}\n\n {React.createElement(React.Fragment, {}, ...(headTags || []))}\n </head>\n )\n }\n}\n\nfunction handleDocumentScriptLoaderItems(\n scriptLoader: { beforeInteractive?: any[] },\n __NEXT_DATA__: NEXT_DATA,\n props: any\n): void {\n if (!props.children) return\n\n const scriptLoaderItems: ScriptProps[] = []\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n const headChildren = children.find(\n (child: React.ReactElement) => child.type === Head\n )?.props?.children\n const bodyChildren = children.find(\n (child: React.ReactElement) => child.type === 'body'\n )?.props?.children\n\n // Scripts with beforeInteractive can be placed inside Head or <body> so children of both needs to be traversed\n const combinedChildren = [\n ...(Array.isArray(headChildren) ? headChildren : [headChildren]),\n ...(Array.isArray(bodyChildren) ? bodyChildren : [bodyChildren]),\n ]\n\n React.Children.forEach(combinedChildren, (child: any) => {\n if (!child) return\n\n // When using the `next/script` component, register it in script loader.\n if (child.type?.__nextScript) {\n if (child.props.strategy === 'beforeInteractive') {\n scriptLoader.beforeInteractive = (\n scriptLoader.beforeInteractive || []\n ).concat([\n {\n ...child.props,\n },\n ])\n return\n } else if (\n ['lazyOnload', 'afterInteractive', 'worker'].includes(\n child.props.strategy\n )\n ) {\n scriptLoaderItems.push(child.props)\n return\n } else if (typeof child.props.strategy === 'undefined') {\n scriptLoaderItems.push({ ...child.props, strategy: 'afterInteractive' })\n return\n }\n }\n })\n\n __NEXT_DATA__.scriptLoader = scriptLoaderItems\n}\n\nexport class NextScript extends React.Component<OriginProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n static getInlineScriptSource(context: Readonly<HtmlProps>): string {\n const { __NEXT_DATA__, largePageDataBytes } = context\n try {\n const data = JSON.stringify(__NEXT_DATA__)\n\n if (largePageDataWarnings.has(__NEXT_DATA__.page)) {\n return htmlEscapeJsonString(data)\n }\n\n const bytes =\n process.env.NEXT_RUNTIME === 'edge'\n ? new TextEncoder().encode(data).buffer.byteLength\n : Buffer.from(data).byteLength\n const prettyBytes = (\n require('../lib/pretty-bytes') as typeof import('../lib/pretty-bytes')\n ).default\n\n if (largePageDataBytes && bytes > largePageDataBytes) {\n if (process.env.NODE_ENV === 'production') {\n largePageDataWarnings.add(__NEXT_DATA__.page)\n }\n\n console.warn(\n `Warning: data for page \"${__NEXT_DATA__.page}\"${\n __NEXT_DATA__.page === context.dangerousAsPath\n ? ''\n : ` (path \"${context.dangerousAsPath}\")`\n } is ${prettyBytes(\n bytes\n )} which exceeds the threshold of ${prettyBytes(\n largePageDataBytes\n )}, this amount of data can reduce performance.\\nSee more info here: https://nextjs.org/docs/messages/large-page-data`\n )\n }\n\n return htmlEscapeJsonString(data)\n } catch (err) {\n if (isError(err) && err.message.indexOf('circular structure') !== -1) {\n throw new Error(\n `Circular structure in \"getInitialProps\" result of page \"${__NEXT_DATA__.page}\". https://nextjs.org/docs/messages/circular-structure`\n )\n }\n throw err\n }\n }\n\n render() {\n const {\n assetPrefix,\n buildManifest,\n unstable_runtimeJS,\n docComponentsRendered,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = this.context\n const disableRuntimeJS = unstable_runtimeJS === false\n\n docComponentsRendered.NextScript = true\n\n if (process.env.NODE_ENV !== 'production') {\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `NextScript` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n return (\n <>\n {!disableRuntimeJS && buildManifest.devFiles\n ? buildManifest.devFiles.map((file: string) => (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n ))\n : null}\n {disableRuntimeJS ? null : (\n <script\n id=\"__NEXT_DATA__\"\n type=\"application/json\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n dangerouslySetInnerHTML={{\n __html: NextScript.getInlineScriptSource(this.context),\n }}\n />\n )}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files)}\n </>\n )\n }\n}\n\nexport function Html(\n props: React.DetailedHTMLProps<\n React.HtmlHTMLAttributes<HTMLHtmlElement>,\n HTMLHtmlElement\n >\n) {\n const {\n docComponentsRendered,\n locale,\n scriptLoader,\n deploymentId,\n __NEXT_DATA__,\n } = useHtmlContext()\n\n docComponentsRendered.Html = true\n handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props)\n\n return (\n <html\n {...props}\n lang={props.lang || locale || undefined}\n data-dpl-id={deploymentId || undefined}\n />\n )\n}\n\nexport function Main() {\n const { docComponentsRendered } = useHtmlContext()\n docComponentsRendered.Main = true\n // @ts-ignore\n return <next-js-internal-body-render-target />\n}\n\n/**\n * `Document` component handles the initial `document` markup and renders only on the server side.\n * Commonly used for implementing server side rendering for `css-in-js` libraries.\n */\nexport default class Document<P = {}> extends React.Component<\n DocumentProps & P\n> {\n /**\n * `getInitialProps` hook returns the context object with the addition of `renderPage`.\n * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers\n */\n static getInitialProps(ctx: DocumentContext): Promise<DocumentInitialProps> {\n return ctx.defaultGetInitialProps(ctx)\n }\n\n render() {\n return (\n <Html>\n <Head nonce={this.props.nonce} />\n <body>\n <Main />\n <NextScript nonce={this.props.nonce} />\n </body>\n </Html>\n )\n }\n}\n\n// Add a special property to the built-in `Document` component so later we can\n// identify if a user customized `Document` is used or not.\nconst InternalFunctionDocument: DocumentType =\n function InternalFunctionDocument() {\n return (\n <Html>\n <Head />\n <body>\n <Main />\n <NextScript />\n </body>\n </Html>\n )\n }\n;(Document as any)[NEXT_BUILTIN_DOCUMENT] = InternalFunctionDocument\n"],"names":["Head","Html","Main","NextScript","Document","largePageDataWarnings","Set","getDocumentFiles","buildManifest","pathname","sharedFiles","getPageFiles","pageFiles","allFiles","getPolyfillScripts","context","props","assetPrefix","assetQueryString","disableOptimizedLoading","crossOrigin","polyfillFiles","filter","polyfill","endsWith","map","script","defer","nonce","noModule","src","encodeURIPath","hasComponentProps","child","getDynamicChunks","files","dynamicImports","isDevelopment","file","includes","async","getScripts","mutableAssetQueryString","normalScripts","lowPriorityScripts","lowPriorityFiles","query","startsWith","getPreNextWorkerScripts","scriptLoader","nextScriptWorkers","process","env","NEXT_RUNTIME","partytownSnippet","__non_webpack_require__","children","Array","isArray","userDefinedConfig","find","dangerouslySetInnerHTML","__html","length","data-partytown-config","data-partytown","worker","index","strategy","scriptChildren","scriptProps","srcProps","join","Error","type","key","data-nscript","err","isError","code","console","warn","message","getPreNextScripts","webWorkerScripts","beforeInteractiveScripts","beforeInteractive","getHeadHTMLProps","restProps","headProps","getNextFontLinkTags","nextFontManifest","dangerousAsPath","preconnect","preload","appFontsEntry","pages","pageFontsEntry","preloadedFontFiles","from","preconnectToSelf","link","data-next-font","pagesUsingSizeAdjust","rel","href","fontFile","ext","exec","as","React","Component","contextType","HtmlContext","getCssLinks","cssAssetQueryString","dynamicCssManifest","optimizeCss","cssFiles","f","unmanagedFiles","localDynamicCssFiles","existing","has","push","cssLinkElements","forEach","isSharedFile","isUnmanagedFile","isFileInDynamicCssManifest","data-n-g","undefined","data-n-p","getPreloadDynamicChunks","Boolean","getPreloadMainLinks","preloadFiles","getBeforeInteractiveInlineScripts","html","id","__NEXT_CROSS_ORIGIN","render","styles","__NEXT_DATA__","headTags","unstable_runtimeJS","unstable_JsPreload","disableRuntimeJS","disableJsPreload","docComponentsRendered","head","cssPreloads","otherHeadElements","cloneElement","concat","Children","toArray","NODE_ENV","isReactHelmet","name","page","nextFontLinkTags","tracingMetadata","getTracedMetadata","getTracer","getTracePropagationData","experimentalClientTraceMetadata","traceMetaTags","value","meta","content","style","data-next-hide-fouc","noscript","data-n-css","createElement","Fragment","handleDocumentScriptLoaderItems","scriptLoaderItems","headChildren","bodyChildren","combinedChildren","__nextScript","getInlineScriptSource","largePageDataBytes","data","JSON","stringify","htmlEscapeJsonString","bytes","TextEncoder","encode","buffer","byteLength","Buffer","prettyBytes","require","default","add","indexOf","devFiles","locale","deploymentId","useHtmlContext","lang","data-dpl-id","next-js-internal-body-render-target","getInitialProps","ctx","defaultGetInitialProps","body","InternalFunctionDocument","NEXT_BUILTIN_DOCUMENT"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../src/pages/_document.tsx"],"sourcesContent":["/// <reference types=\"webpack/module.d.ts\" />\n\nimport React, { type JSX } from 'react'\nimport { NEXT_BUILTIN_DOCUMENT } from '../shared/lib/constants'\nimport type {\n DocumentContext,\n DocumentInitialProps,\n DocumentProps,\n DocumentType,\n NEXT_DATA,\n} from '../shared/lib/utils'\nimport type { ScriptProps } from '../client/script'\nimport type { NextFontManifest } from '../build/webpack/plugins/next-font-manifest-plugin'\n\nimport {\n getPageFiles,\n getTurbopackChunkGroupBootstrap,\n} from '../server/get-page-files'\nimport type { BuildManifest } from '../server/get-page-files'\nimport { htmlEscapeJsonString } from '../shared/lib/htmlescape'\nimport isError from '../lib/is-error'\n\nimport {\n HtmlContext,\n useHtmlContext,\n} from '../shared/lib/html-context.shared-runtime'\nimport type { HtmlProps } from '../shared/lib/html-context.shared-runtime'\nimport { encodeURIPath } from '../shared/lib/encode-uri-path'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { getTracer } from '../server/lib/trace/tracer'\nimport { getTracedMetadata } from '../server/lib/trace/utils'\n\nexport type { DocumentContext, DocumentInitialProps, DocumentProps }\n\nexport type OriginProps = {\n nonce?: string\n crossOrigin?: 'anonymous' | 'use-credentials' | '' | undefined\n children?: React.ReactNode\n}\n\ntype DocumentFiles = {\n sharedFiles: readonly string[]\n pageFiles: readonly string[]\n allFiles: readonly string[]\n}\n\ntype HeadHTMLProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLHeadElement>,\n HTMLHeadElement\n>\n\ntype HeadProps = OriginProps & HeadHTMLProps\n\n/** Set of pages that have triggered a large data warning on production mode. */\nconst largePageDataWarnings = new Set<string>()\n\nfunction getDocumentFiles(\n buildManifest: BuildManifest,\n pathname: string\n): DocumentFiles {\n const sharedFiles: readonly string[] = getPageFiles(buildManifest, '/_app')\n const pageFiles: readonly string[] = getPageFiles(buildManifest, pathname)\n\n return {\n sharedFiles,\n pageFiles,\n allFiles: [...new Set([...sharedFiles, ...pageFiles])],\n }\n}\n\nfunction getPolyfillScripts(context: HtmlProps, props: OriginProps) {\n // polyfills.js has to be rendered as nomodule without async\n // It also has to be the first script to load\n const {\n assetPrefix,\n buildManifest,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return buildManifest.polyfillFiles\n .filter(\n (polyfill) => polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')\n )\n .map((polyfill) => (\n <script\n key={polyfill}\n defer={!disableOptimizedLoading}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n noModule={true}\n src={`${assetPrefix}/_next/${encodeURIPath(\n polyfill\n )}${assetQueryString}`}\n />\n ))\n}\n\nfunction hasComponentProps(child: any): child is React.ReactElement<any> {\n return !!child && !!child.props\n}\n\nfunction getDynamicChunks(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n dynamicImports,\n assetPrefix,\n isDevelopment,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n return dynamicImports.map((file) => {\n if (!file.endsWith('.js') || files.allFiles.includes(file)) return null\n\n return (\n <script\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${assetQueryString}`}\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n}\n\n// Builds one inline <script> seeding the runtime queue with the shared (`/_app`) and\n// current route's bootstrap params, before the shared runtime chunk drains it.\nfunction getInlineBootstrapScript(context: HtmlProps, props: OriginProps) {\n const { buildManifest, __NEXT_DATA__, crossOrigin } = context\n // Only Turbopack production builds populate these; nothing to inline otherwise.\n if (\n !buildManifest.pagesChunkGroupBootstrapParams ||\n !buildManifest.chunkLoadingGlobal\n ) {\n return null\n }\n const bootstrap = getTurbopackChunkGroupBootstrap(\n buildManifest.pagesChunkGroupBootstrapParams,\n buildManifest.chunkLoadingGlobal,\n ['/_app', __NEXT_DATA__.page]\n )\n if (!bootstrap) return null\n\n const html = htmlEscapeJsonString(bootstrap)\n return (\n <script\n key=\"turbopack-bootstrap\"\n nonce={props.nonce}\n crossOrigin={props.crossOrigin || crossOrigin}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n\nfunction getScripts(\n context: HtmlProps,\n props: OriginProps,\n files: DocumentFiles\n) {\n const {\n assetPrefix,\n buildManifest,\n isDevelopment,\n assetQueryString,\n mutableAssetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = context\n\n const normalScripts = files.allFiles.filter((file) => file.endsWith('.js'))\n const lowPriorityScripts = buildManifest.lowPriorityFiles?.filter((file) =>\n file.endsWith('.js')\n )\n\n const scripts = [...normalScripts, ...lowPriorityScripts].map((file) => {\n // static/immutable/chunks/51e975e7b637a580.js should use the immutable id, while\n // static/Yj152X97rfGgF7NPcJEZs/_ssgManifest.js should use the deployment id\n const query = file.startsWith('static/immutable/chunks')\n ? assetQueryString\n : mutableAssetQueryString\n return (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(file)}${query}`}\n nonce={props.nonce}\n async={!isDevelopment && disableOptimizedLoading}\n defer={!disableOptimizedLoading}\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n\n // Emit the bootstrap before the chunk <script>s so the queue exists first.\n const bootstrapScript = getInlineBootstrapScript(context, props)\n return bootstrapScript ? [bootstrapScript, ...scripts] : scripts\n}\n\nfunction getPreNextWorkerScripts(context: HtmlProps, props: OriginProps) {\n const { assetPrefix, scriptLoader, crossOrigin, nextScriptWorkers } = context\n\n // disable `nextScriptWorkers` in edge runtime\n if (!nextScriptWorkers || process.env.NEXT_RUNTIME === 'edge') return null\n\n try {\n // @ts-expect-error: Prevent webpack from processing this require\n let { partytownSnippet } = __non_webpack_require__(\n '@builder.io/partytown/integration'!\n )\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n // Check to see if the user has defined their own Partytown configuration\n const userDefinedConfig = children.find(\n (child) =>\n hasComponentProps(child) &&\n child?.props?.dangerouslySetInnerHTML?.__html.length &&\n 'data-partytown-config' in child.props\n )\n\n return (\n <>\n {!userDefinedConfig && (\n <script\n data-partytown-config=\"\"\n dangerouslySetInnerHTML={{\n __html: `\n partytown = {\n lib: \"${assetPrefix}/_next/static/~partytown/\"\n };\n `,\n }}\n />\n )}\n <script\n data-partytown=\"\"\n dangerouslySetInnerHTML={{\n __html: partytownSnippet(),\n }}\n />\n {(scriptLoader.worker || []).map((file: ScriptProps, index: number) => {\n const {\n strategy,\n src,\n children: scriptChildren,\n dangerouslySetInnerHTML,\n ...scriptProps\n } = file\n\n let srcProps: {\n src?: string\n dangerouslySetInnerHTML?: ScriptProps['dangerouslySetInnerHTML']\n } = {}\n\n if (src) {\n // Use external src if provided\n srcProps.src = src\n } else if (\n dangerouslySetInnerHTML &&\n dangerouslySetInnerHTML.__html\n ) {\n // Embed inline script if provided with dangerouslySetInnerHTML\n srcProps.dangerouslySetInnerHTML = {\n __html: dangerouslySetInnerHTML.__html,\n }\n } else if (scriptChildren) {\n // Embed inline script if provided with children\n srcProps.dangerouslySetInnerHTML = {\n __html:\n typeof scriptChildren === 'string'\n ? scriptChildren\n : Array.isArray(scriptChildren)\n ? scriptChildren.join('')\n : '',\n }\n } else {\n throw new Error(\n 'Invalid usage of next/script. Did you forget to include a src attribute or an inline script? https://nextjs.org/docs/messages/invalid-script'\n )\n }\n\n return (\n <script\n {...srcProps}\n {...scriptProps}\n type=\"text/partytown\"\n key={src || index}\n nonce={props.nonce}\n data-nscript=\"worker\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })}\n </>\n )\n } catch (err) {\n if (isError(err) && err.code !== 'MODULE_NOT_FOUND') {\n console.warn(`Warning: ${err.message}`)\n }\n return null\n }\n}\n\nfunction getPreNextScripts(context: HtmlProps, props: OriginProps) {\n const { scriptLoader, disableOptimizedLoading, crossOrigin } = context\n\n const webWorkerScripts = getPreNextWorkerScripts(context, props)\n\n const beforeInteractiveScripts = (scriptLoader.beforeInteractive || [])\n .filter((script) => script.src)\n .map((file: ScriptProps, index: number) => {\n const { strategy, ...scriptProps } = file\n return (\n <script\n {...scriptProps}\n key={scriptProps.src || index}\n defer={scriptProps.defer ?? !disableOptimizedLoading}\n nonce={scriptProps.nonce || props.nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={props.crossOrigin || crossOrigin}\n />\n )\n })\n\n return (\n <>\n {webWorkerScripts}\n {beforeInteractiveScripts}\n </>\n )\n}\n\nfunction getHeadHTMLProps(props: HeadProps) {\n const { crossOrigin, nonce, ...restProps } = props\n\n // This assignment is necessary for additional type checking to avoid unsupported attributes in <head>\n const headProps: HeadHTMLProps & {\n [P in Exclude<keyof HeadProps, keyof HeadHTMLProps>]?: never\n } = restProps\n\n return headProps\n}\n\nfunction getNextFontLinkTags(\n nextFontManifest: DeepReadonly<NextFontManifest> | undefined,\n dangerousAsPath: string,\n assetPrefix: string = '',\n assetQueryString: string = ''\n) {\n if (!nextFontManifest) {\n return {\n preconnect: null,\n preload: null,\n }\n }\n\n const appFontsEntry = nextFontManifest.pages['/_app']\n const pageFontsEntry = nextFontManifest.pages[dangerousAsPath]\n\n const preloadedFontFiles = Array.from(\n new Set([...(appFontsEntry ?? []), ...(pageFontsEntry ?? [])])\n )\n\n // If no font files should preload but there's an entry for the path, add a preconnect tag.\n const preconnectToSelf = !!(\n preloadedFontFiles.length === 0 &&\n (appFontsEntry || pageFontsEntry)\n )\n\n return {\n preconnect: preconnectToSelf ? (\n <link\n data-next-font={\n nextFontManifest.pagesUsingSizeAdjust ? 'size-adjust' : ''\n }\n rel=\"preconnect\"\n href=\"/\"\n crossOrigin=\"anonymous\"\n />\n ) : null,\n preload: preloadedFontFiles\n ? preloadedFontFiles.map((fontFile) => {\n const ext = /\\.(woff|woff2|eot|ttf|otf)$/.exec(fontFile)![1]\n return (\n <link\n key={fontFile}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(fontFile)}${assetQueryString}`}\n as=\"font\"\n type={`font/${ext}`}\n crossOrigin=\"anonymous\"\n data-next-font={fontFile.includes('-s') ? 'size-adjust' : ''}\n />\n )\n })\n : null,\n }\n}\n\n// Use `React.Component` to avoid errors from the RSC checks because\n// it can't be imported directly in Server Components:\n//\n// import { Component } from 'react'\n//\n// More info: https://github.com/vercel/next.js/pull/40686\nexport class Head extends React.Component<HeadProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getCssLinks(files: DocumentFiles): JSX.Element[] | null {\n const {\n assetPrefix,\n cssAssetQueryString,\n dynamicImports,\n dynamicCssManifest,\n crossOrigin,\n optimizeCss,\n } = this.context\n const cssFiles = files.allFiles.filter((f) => f.endsWith('.css'))\n const sharedFiles: Set<string> = new Set(files.sharedFiles)\n\n // Unmanaged files are CSS files that will be handled directly by the\n // webpack runtime (`mini-css-extract-plugin`).\n let unmanagedFiles: Set<string> = new Set([])\n let localDynamicCssFiles = Array.from(\n new Set(dynamicImports.filter((file) => file.endsWith('.css')))\n )\n if (localDynamicCssFiles.length) {\n const existing = new Set(cssFiles)\n localDynamicCssFiles = localDynamicCssFiles.filter(\n (f) => !(existing.has(f) || sharedFiles.has(f))\n )\n unmanagedFiles = new Set(localDynamicCssFiles)\n cssFiles.push(...localDynamicCssFiles)\n }\n\n let cssLinkElements: JSX.Element[] = []\n cssFiles.forEach((file) => {\n const isSharedFile = sharedFiles.has(file)\n const isUnmanagedFile = unmanagedFiles.has(file)\n const isFileInDynamicCssManifest = dynamicCssManifest.has(file)\n\n if (!optimizeCss) {\n cssLinkElements.push(\n <link\n key={`${file}-preload`}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n as=\"style\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n }\n\n cssLinkElements.push(\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"stylesheet\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${cssAssetQueryString}`}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n data-n-g={isUnmanagedFile ? undefined : isSharedFile ? '' : undefined}\n data-n-p={\n isSharedFile || isUnmanagedFile || isFileInDynamicCssManifest\n ? undefined\n : ''\n }\n />\n )\n })\n\n return cssLinkElements.length === 0 ? null : cssLinkElements\n }\n\n getPreloadDynamicChunks() {\n const { dynamicImports, assetPrefix, assetQueryString, crossOrigin } =\n this.context\n\n return (\n dynamicImports\n .map((file) => {\n if (!file.endsWith('.js')) {\n return null\n }\n\n return (\n <link\n rel=\"preload\"\n key={file}\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )\n })\n // Filter out nulled scripts\n .filter(Boolean)\n )\n }\n\n getPreloadMainLinks(files: DocumentFiles): JSX.Element[] | null {\n const { assetPrefix, assetQueryString, scriptLoader, crossOrigin } =\n this.context\n const preloadFiles = files.allFiles.filter((file: string) => {\n return file.endsWith('.js')\n })\n\n return [\n ...(scriptLoader.beforeInteractive || []).map((file) => (\n <link\n key={file.src}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={file.src}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ...preloadFiles.map((file: string) => (\n <link\n key={file}\n nonce={this.props.nonce}\n rel=\"preload\"\n href={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n as=\"script\"\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n )),\n ]\n }\n\n getBeforeInteractiveInlineScripts() {\n const { scriptLoader } = this.context\n const { nonce, crossOrigin } = this.props\n\n return (scriptLoader.beforeInteractive || [])\n .filter(\n (script) =>\n !script.src && (script.dangerouslySetInnerHTML || script.children)\n )\n .map((file: ScriptProps, index: number) => {\n const {\n strategy,\n children,\n dangerouslySetInnerHTML,\n src,\n ...scriptProps\n } = file\n let html: NonNullable<\n ScriptProps['dangerouslySetInnerHTML']\n >['__html'] = ''\n\n if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n html = dangerouslySetInnerHTML.__html\n } else if (children) {\n html =\n typeof children === 'string'\n ? children\n : Array.isArray(children)\n ? children.join('')\n : ''\n }\n\n return (\n <script\n {...scriptProps}\n dangerouslySetInnerHTML={{ __html: html }}\n key={scriptProps.id || index}\n nonce={nonce}\n data-nscript=\"beforeInteractive\"\n crossOrigin={\n crossOrigin ||\n (process.env.__NEXT_CROSS_ORIGIN as typeof crossOrigin)\n }\n />\n )\n })\n }\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n render() {\n const {\n styles,\n __NEXT_DATA__,\n dangerousAsPath,\n headTags,\n unstable_runtimeJS,\n unstable_JsPreload,\n disableOptimizedLoading,\n optimizeCss,\n assetPrefix,\n nextFontManifest,\n cssAssetQueryString,\n } = this.context\n\n const disableRuntimeJS = unstable_runtimeJS === false\n const disableJsPreload =\n unstable_JsPreload === false || !disableOptimizedLoading\n\n this.context.docComponentsRendered.Head = true\n\n let { head } = this.context\n let cssPreloads: Array<JSX.Element> = []\n let otherHeadElements: Array<JSX.Element> = []\n if (head) {\n head.forEach((child) => {\n if (\n child &&\n child.type === 'link' &&\n child.props['rel'] === 'preload' &&\n child.props['as'] === 'style'\n ) {\n cssPreloads.push(child)\n } else {\n if (child) {\n otherHeadElements.push(\n React.cloneElement(child, { 'data-next-head': '' })\n )\n }\n }\n })\n head = cssPreloads.concat(otherHeadElements)\n }\n let children: React.ReactNode[] = React.Children.toArray(\n this.props.children\n ).filter(Boolean)\n // show a warning if Head contains <title> (only in development)\n if (process.env.NODE_ENV !== 'production') {\n children = React.Children.map(children, (child: any) => {\n const isReactHelmet = child?.props?.['data-react-helmet']\n if (!isReactHelmet) {\n if (child?.type === 'title') {\n console.warn(\n \"Warning: <title> should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-title\"\n )\n } else if (\n child?.type === 'meta' &&\n child?.props?.name === 'viewport'\n ) {\n console.warn(\n \"Warning: viewport meta tags should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-viewport-meta\"\n )\n }\n }\n return child\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n })!\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `Head` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n const nextFontLinkTags = getNextFontLinkTags(\n nextFontManifest,\n dangerousAsPath,\n assetPrefix,\n cssAssetQueryString\n )\n\n const tracingMetadata = getTracedMetadata(\n getTracer().getTracePropagationData(),\n this.context.experimentalClientTraceMetadata\n )\n\n const traceMetaTags = (tracingMetadata || []).map(\n ({ key, value }, index) => (\n <meta key={`next-trace-data-${index}`} name={key} content={value} />\n )\n )\n\n return (\n <head {...getHeadHTMLProps(this.props)}>\n {this.context.isDevelopment && (\n <>\n <style\n data-next-hide-fouc\n dangerouslySetInnerHTML={{\n __html: `body{display:none}`,\n }}\n />\n <noscript data-next-hide-fouc>\n <style\n dangerouslySetInnerHTML={{\n __html: `body{display:block}`,\n }}\n />\n </noscript>\n </>\n )}\n {head}\n\n {children}\n\n {nextFontLinkTags.preconnect}\n {nextFontLinkTags.preload}\n\n {this.getBeforeInteractiveInlineScripts()}\n {!optimizeCss && this.getCssLinks(files)}\n {!optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadDynamicChunks()}\n {!disableRuntimeJS &&\n !disableJsPreload &&\n this.getPreloadMainLinks(files)}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {!disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getScripts(files)}\n\n {optimizeCss && this.getCssLinks(files)}\n {optimizeCss && <noscript data-n-css={this.props.nonce ?? ''} />}\n {this.context.isDevelopment && (\n // this element is used to mount development styles so the\n // ordering matches production\n // (by default, style-loader injects at the bottom of <head />)\n <noscript id=\"__next_css__DO_NOT_USE__\" />\n )}\n {traceMetaTags}\n {styles || null}\n\n {React.createElement(React.Fragment, {}, ...(headTags || []))}\n </head>\n )\n }\n}\n\nfunction handleDocumentScriptLoaderItems(\n scriptLoader: { beforeInteractive?: any[] },\n __NEXT_DATA__: NEXT_DATA,\n props: any\n): void {\n if (!props.children) return\n\n const scriptLoaderItems: ScriptProps[] = []\n\n const children = Array.isArray(props.children)\n ? props.children\n : [props.children]\n\n const headChildren = children.find(\n (child: React.ReactElement) => child.type === Head\n )?.props?.children\n const bodyChildren = children.find(\n (child: React.ReactElement) => child.type === 'body'\n )?.props?.children\n\n // Scripts with beforeInteractive can be placed inside Head or <body> so children of both needs to be traversed\n const combinedChildren = [\n ...(Array.isArray(headChildren) ? headChildren : [headChildren]),\n ...(Array.isArray(bodyChildren) ? bodyChildren : [bodyChildren]),\n ]\n\n React.Children.forEach(combinedChildren, (child: any) => {\n if (!child) return\n\n // When using the `next/script` component, register it in script loader.\n if (child.type?.__nextScript) {\n if (child.props.strategy === 'beforeInteractive') {\n scriptLoader.beforeInteractive = (\n scriptLoader.beforeInteractive || []\n ).concat([\n {\n ...child.props,\n },\n ])\n return\n } else if (\n ['lazyOnload', 'afterInteractive', 'worker'].includes(\n child.props.strategy\n )\n ) {\n scriptLoaderItems.push(child.props)\n return\n } else if (typeof child.props.strategy === 'undefined') {\n scriptLoaderItems.push({ ...child.props, strategy: 'afterInteractive' })\n return\n }\n }\n })\n\n __NEXT_DATA__.scriptLoader = scriptLoaderItems\n}\n\nexport class NextScript extends React.Component<OriginProps> {\n static contextType = HtmlContext\n\n context!: HtmlProps\n\n getDynamicChunks(files: DocumentFiles) {\n return getDynamicChunks(this.context, this.props, files)\n }\n\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props)\n }\n\n getScripts(files: DocumentFiles) {\n return getScripts(this.context, this.props, files)\n }\n\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props)\n }\n\n static getInlineScriptSource(context: Readonly<HtmlProps>): string {\n const { __NEXT_DATA__, largePageDataBytes } = context\n try {\n const data = JSON.stringify(__NEXT_DATA__)\n\n if (largePageDataWarnings.has(__NEXT_DATA__.page)) {\n return htmlEscapeJsonString(data)\n }\n\n const bytes =\n process.env.NEXT_RUNTIME === 'edge'\n ? new TextEncoder().encode(data).buffer.byteLength\n : Buffer.from(data).byteLength\n const prettyBytes = (\n require('../lib/pretty-bytes') as typeof import('../lib/pretty-bytes')\n ).default\n\n if (largePageDataBytes && bytes > largePageDataBytes) {\n if (process.env.NODE_ENV === 'production') {\n largePageDataWarnings.add(__NEXT_DATA__.page)\n }\n\n console.warn(\n `Warning: data for page \"${__NEXT_DATA__.page}\"${\n __NEXT_DATA__.page === context.dangerousAsPath\n ? ''\n : ` (path \"${context.dangerousAsPath}\")`\n } is ${prettyBytes(\n bytes\n )} which exceeds the threshold of ${prettyBytes(\n largePageDataBytes\n )}, this amount of data can reduce performance.\\nSee more info here: https://nextjs.org/docs/messages/large-page-data`\n )\n }\n\n return htmlEscapeJsonString(data)\n } catch (err) {\n if (isError(err) && err.message.indexOf('circular structure') !== -1) {\n throw new Error(\n `Circular structure in \"getInitialProps\" result of page \"${__NEXT_DATA__.page}\". https://nextjs.org/docs/messages/circular-structure`\n )\n }\n throw err\n }\n }\n\n render() {\n const {\n assetPrefix,\n buildManifest,\n unstable_runtimeJS,\n docComponentsRendered,\n assetQueryString,\n disableOptimizedLoading,\n crossOrigin,\n } = this.context\n const disableRuntimeJS = unstable_runtimeJS === false\n\n docComponentsRendered.NextScript = true\n\n if (process.env.NODE_ENV !== 'production') {\n if (this.props.crossOrigin)\n console.warn(\n 'Warning: `NextScript` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated'\n )\n }\n\n const files: DocumentFiles = getDocumentFiles(\n this.context.buildManifest,\n this.context.__NEXT_DATA__.page\n )\n\n return (\n <>\n {!disableRuntimeJS && buildManifest.devFiles\n ? buildManifest.devFiles.map((file: string) => (\n <script\n key={file}\n src={`${assetPrefix}/_next/${encodeURIPath(\n file\n )}${assetQueryString}`}\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n />\n ))\n : null}\n {disableRuntimeJS ? null : (\n <script\n id=\"__NEXT_DATA__\"\n type=\"application/json\"\n nonce={this.props.nonce}\n crossOrigin={this.props.crossOrigin || crossOrigin}\n dangerouslySetInnerHTML={{\n __html: NextScript.getInlineScriptSource(this.context),\n }}\n />\n )}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPolyfillScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getPreNextScripts()}\n {disableOptimizedLoading &&\n !disableRuntimeJS &&\n this.getDynamicChunks(files)}\n {disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files)}\n </>\n )\n }\n}\n\nexport function Html(\n props: React.DetailedHTMLProps<\n React.HtmlHTMLAttributes<HTMLHtmlElement>,\n HTMLHtmlElement\n >\n) {\n const {\n docComponentsRendered,\n locale,\n scriptLoader,\n deploymentId,\n __NEXT_DATA__,\n } = useHtmlContext()\n\n docComponentsRendered.Html = true\n handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props)\n\n return (\n <html\n {...props}\n lang={props.lang || locale || undefined}\n data-dpl-id={deploymentId || undefined}\n />\n )\n}\n\nexport function Main() {\n const { docComponentsRendered } = useHtmlContext()\n docComponentsRendered.Main = true\n // @ts-ignore\n return <next-js-internal-body-render-target />\n}\n\n/**\n * `Document` component handles the initial `document` markup and renders only on the server side.\n * Commonly used for implementing server side rendering for `css-in-js` libraries.\n */\nexport default class Document<P = {}> extends React.Component<\n DocumentProps & P\n> {\n /**\n * `getInitialProps` hook returns the context object with the addition of `renderPage`.\n * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers\n */\n static getInitialProps(ctx: DocumentContext): Promise<DocumentInitialProps> {\n return ctx.defaultGetInitialProps(ctx)\n }\n\n render() {\n return (\n <Html>\n <Head nonce={this.props.nonce} />\n <body>\n <Main />\n <NextScript nonce={this.props.nonce} />\n </body>\n </Html>\n )\n }\n}\n\n// Add a special property to the built-in `Document` component so later we can\n// identify if a user customized `Document` is used or not.\nconst InternalFunctionDocument: DocumentType =\n function InternalFunctionDocument() {\n return (\n <Html>\n <Head />\n <body>\n <Main />\n <NextScript />\n </body>\n </Html>\n )\n }\n;(Document as any)[NEXT_BUILTIN_DOCUMENT] = InternalFunctionDocument\n"],"names":["Head","Html","Main","NextScript","Document","largePageDataWarnings","Set","getDocumentFiles","buildManifest","pathname","sharedFiles","getPageFiles","pageFiles","allFiles","getPolyfillScripts","context","props","assetPrefix","assetQueryString","disableOptimizedLoading","crossOrigin","polyfillFiles","filter","polyfill","endsWith","map","script","defer","nonce","noModule","src","encodeURIPath","hasComponentProps","child","getDynamicChunks","files","dynamicImports","isDevelopment","file","includes","async","getInlineBootstrapScript","__NEXT_DATA__","pagesChunkGroupBootstrapParams","chunkLoadingGlobal","bootstrap","getTurbopackChunkGroupBootstrap","page","html","htmlEscapeJsonString","dangerouslySetInnerHTML","__html","getScripts","mutableAssetQueryString","normalScripts","lowPriorityScripts","lowPriorityFiles","scripts","query","startsWith","bootstrapScript","getPreNextWorkerScripts","scriptLoader","nextScriptWorkers","process","env","NEXT_RUNTIME","partytownSnippet","__non_webpack_require__","children","Array","isArray","userDefinedConfig","find","length","data-partytown-config","data-partytown","worker","index","strategy","scriptChildren","scriptProps","srcProps","join","Error","type","key","data-nscript","err","isError","code","console","warn","message","getPreNextScripts","webWorkerScripts","beforeInteractiveScripts","beforeInteractive","getHeadHTMLProps","restProps","headProps","getNextFontLinkTags","nextFontManifest","dangerousAsPath","preconnect","preload","appFontsEntry","pages","pageFontsEntry","preloadedFontFiles","from","preconnectToSelf","link","data-next-font","pagesUsingSizeAdjust","rel","href","fontFile","ext","exec","as","React","Component","contextType","HtmlContext","getCssLinks","cssAssetQueryString","dynamicCssManifest","optimizeCss","cssFiles","f","unmanagedFiles","localDynamicCssFiles","existing","has","push","cssLinkElements","forEach","isSharedFile","isUnmanagedFile","isFileInDynamicCssManifest","data-n-g","undefined","data-n-p","getPreloadDynamicChunks","Boolean","getPreloadMainLinks","preloadFiles","getBeforeInteractiveInlineScripts","id","__NEXT_CROSS_ORIGIN","render","styles","headTags","unstable_runtimeJS","unstable_JsPreload","disableRuntimeJS","disableJsPreload","docComponentsRendered","head","cssPreloads","otherHeadElements","cloneElement","concat","Children","toArray","NODE_ENV","isReactHelmet","name","nextFontLinkTags","tracingMetadata","getTracedMetadata","getTracer","getTracePropagationData","experimentalClientTraceMetadata","traceMetaTags","value","meta","content","style","data-next-hide-fouc","noscript","data-n-css","createElement","Fragment","handleDocumentScriptLoaderItems","scriptLoaderItems","headChildren","bodyChildren","combinedChildren","__nextScript","getInlineScriptSource","largePageDataBytes","data","JSON","stringify","bytes","TextEncoder","encode","buffer","byteLength","Buffer","prettyBytes","require","default","add","indexOf","devFiles","locale","deploymentId","useHtmlContext","lang","data-dpl-id","next-js-internal-body-render-target","getInitialProps","ctx","defaultGetInitialProps","body","InternalFunctionDocument","NEXT_BUILTIN_DOCUMENT"],"mappings":"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","ignoreList":[0]} |
@@ -112,3 +112,6 @@ "use strict"; | ||
| } else if (prefetchConfig === 'allow-runtime') { | ||
| prefetchHints |= _approutertypes.PrefetchHint.HasRuntimePrefetch; | ||
| // 'allow-runtime' participates in the two-phase (Shell then Speculative) | ||
| // prefetch flow, so it counts as Partial Prefetching. HasRuntimePrefetch | ||
| // additionally marks it as needing a runtime request pass. | ||
| prefetchHints |= _approutertypes.PrefetchHint.HasRuntimePrefetch | _approutertypes.PrefetchHint.SubtreeHasPartialPrefetching; | ||
| } | ||
@@ -115,0 +118,0 @@ // Mark the segment as "eager" unless its effective prefetch strategy is |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/server/app-render/create-flight-router-state-from-loader-tree.ts"],"sourcesContent":["import type { LoaderTree } from '../lib/app-dir-module'\nimport {\n PrefetchHint,\n propagateSubtreeBits,\n type FlightRouterState,\n type PrefetchHints,\n} from '../../shared/lib/app-router-types'\nimport type { GetDynamicParamFromSegment } from './app-render'\nimport { addSearchParamsIfPageSegment } from '../../shared/lib/segment'\nimport type { AppSegmentConfig } from '../../build/segment-config/app/app-segment-config'\n\nasync function createFlightRouterStateFromLoaderTreeImpl(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n didFindRootLayout: boolean\n): Promise<FlightRouterState> {\n const [segment, parallelRoutes, { layout, loading, page }] = loaderTree\n const dynamicParam = getDynamicParamFromSegment(loaderTree)\n const treeSegment = dynamicParam ? dynamicParam.treeSegment : segment\n\n const segmentTree: FlightRouterState = [\n addSearchParamsIfPageSegment(treeSegment, searchParams),\n {},\n ]\n\n // Load the layout or page module to check its instant and prefetch\n // configs. When a segment doesn't export prefetch, it defaults to\n // 'partial' if the app has opted into partial prefetching globally via the\n // `partialPrefetching` config in next.config.js.\n const mod = layout ? await layout[0]() : page ? await page[0]() : undefined\n const instantConfig = mod ? (mod as AppSegmentConfig).instant : undefined\n const prefetchConfig =\n (mod ? (mod as AppSegmentConfig).prefetch : undefined) ??\n (partialPrefetching === 'unstable_eager'\n ? 'unstable_eager'\n : partialPrefetching\n ? 'partial'\n : undefined)\n let prefetchHints = 0\n\n // Union in the precomputed build-time hints (e.g. segment inlining\n // decisions) if available. When hints are not available (e.g. dev mode or\n // if prefetch-hints.json was not generated), we fall through and still\n // compute the other hints below. In the future this should be a build\n // error, but for now we gracefully degrade.\n //\n // TODO: Move more of the hints computation (IsRootLayoutOrAbove, instant config,\n // loading boundary detection) into the build-time measurement step in\n // collectPrefetchHints, so this function only needs to union the\n // precomputed bitmask rather than re-derive hints on every render.\n if (hintTree !== null) {\n prefetchHints |= hintTree.hints\n } else if (prefetchInliningEnabled) {\n if (isBuildTimePrerendering) {\n // Prefetch inlining is enabled but no hint tree was provided during a\n // build-time prerender. This happens for the initial RSC payload\n // generated before collectPrefetchHints has run. Mark so the client\n // can expire the route cache entry and re-fetch the tree with correct\n // hints.\n prefetchHints |= PrefetchHint.InliningHintsStale\n } else if (isStaticGeneration) {\n // TODO(#91407): Temporary mitigation: when hints are missing during\n // runtime static generation, fall back to treating every segment as\n // unprefetchable. This currently happens for routes with\n // `instant = false` at the root segment, which causes the prerender\n // to run per-request instead of being cached, and the prefetch hints\n // manifest is not available.\n //\n // Once that bug is fixed, this branch should become an error again —\n // hints should always be available from the manifest during ISR.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (cacheComponents) {\n // At runtime with no hint tree, this is a fully dynamic route with no\n // manifest entry. Treat every segment as unprefetchable. Do NOT set\n // InliningHintsStale — that would cause the client to enter an\n // infinite re-fetch loop trying to get hints that will never exist.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else {\n // Without cacheComponents, dynamic pages have no static shell so\n // hints are never computed. Don't disable prefetching — just skip\n // the inlining hint system and let prefetching proceed normally.\n }\n }\n\n // Mark every segment at or above the root layout (i.e. until we descend past\n // the first segment that has a layout).\n if (!didFindRootLayout) {\n prefetchHints |= PrefetchHint.IsRootLayoutOrAbove\n if (typeof layout !== 'undefined') {\n // This segment is the root layout; its descendants are below it.\n didFindRootLayout = true\n }\n }\n\n const isInstant =\n instantConfig === true ||\n (typeof instantConfig === 'object' && instantConfig !== null)\n if (isInstant) {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (instantConfig === false) {\n // The segment explicitly opts out of Partial Prefetching. We don't change\n // the prefetch behavior, but we record it so the dev-time\n // `<Link prefetch={true}>` warning can be suppressed for this route.\n prefetchHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n\n if (prefetchConfig === 'partial') {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (prefetchConfig === 'unstable_eager') {\n // Like 'partial' (uses the PPR fetch strategy) but also marks the segment\n // as eager, so App Shells keeps prefetching it instead of relying on the\n // shared app shell.\n prefetchHints |=\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasEagerPrefetch\n } else if (prefetchConfig === 'force-disabled') {\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (prefetchConfig === 'allow-runtime') {\n prefetchHints |= PrefetchHint.HasRuntimePrefetch\n }\n\n // Mark the segment as \"eager\" unless its effective prefetch strategy is\n // 'partial' or 'allow-runtime'. A truthy instant is treated as\n // 'partial' (not eager). 'unstable_eager' already set the bit above. Under\n // App Shells, a subtree with no eager segment skips its Speculative prefetch\n // and relies on the shared app shell instead.\n if (\n !isInstant &&\n prefetchConfig !== 'partial' &&\n prefetchConfig !== 'allow-runtime'\n ) {\n prefetchHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n\n // Check if this segment has a loading boundary\n if (loading) {\n prefetchHints |= PrefetchHint.SegmentHasLoadingBoundary\n }\n\n const children: FlightRouterState[1] = {}\n for (const parallelRouteKey in parallelRoutes) {\n // Look up the child hint node by parallel route key, traversing the\n // hint tree in parallel with the loader tree.\n const childHintNode = hintTree?.slots?.[parallelRouteKey] ?? null\n\n const child = await createFlightRouterStateFromLoaderTreeImpl(\n parallelRoutes[parallelRouteKey],\n childHintNode,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n // Propagate subtree flags from children\n if (child[4] !== undefined) {\n prefetchHints = propagateSubtreeBits(prefetchHints, child[4])\n }\n children[parallelRouteKey] = child\n }\n segmentTree[1] = children\n\n if (prefetchHints !== 0) {\n segmentTree[4] = prefetchHints\n }\n\n return segmentTree\n}\n\nexport async function createFlightRouterStateFromLoaderTree(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n // Whether a root layout was already found above this loader tree slice, so a\n // slice that starts below the root layout doesn't mark a sub-layout as the\n // root layout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n\nexport async function createRouteTreePrefetch(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n // See note on createFlightRouterStateFromLoaderTree's didFindRootLayout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n // Search params should not be added to page segment's cache key during a\n // route tree prefetch request, because they do not affect the structure of\n // the route. The client cache has its own logic to handle search params.\n const searchParams = {}\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n"],"names":["createFlightRouterStateFromLoaderTree","createRouteTreePrefetch","createFlightRouterStateFromLoaderTreeImpl","loaderTree","hintTree","prefetchInliningEnabled","cacheComponents","partialPrefetching","isStaticGeneration","isBuildTimePrerendering","getDynamicParamFromSegment","searchParams","didFindRootLayout","segment","parallelRoutes","layout","loading","page","dynamicParam","treeSegment","segmentTree","addSearchParamsIfPageSegment","mod","undefined","instantConfig","instant","prefetchConfig","prefetch","prefetchHints","hints","PrefetchHint","InliningHintsStale","PrefetchDisabled","IsRootLayoutOrAbove","isInstant","SubtreeHasPartialPrefetching","SubtreeHasInstantFalse","SubtreeHasEagerPrefetch","HasRuntimePrefetch","SegmentHasLoadingBoundary","children","parallelRouteKey","childHintNode","slots","child","propagateSubtreeBits"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/server/app-render/create-flight-router-state-from-loader-tree.ts"],"sourcesContent":["import type { LoaderTree } from '../lib/app-dir-module'\nimport {\n PrefetchHint,\n propagateSubtreeBits,\n type FlightRouterState,\n type PrefetchHints,\n} from '../../shared/lib/app-router-types'\nimport type { GetDynamicParamFromSegment } from './app-render'\nimport { addSearchParamsIfPageSegment } from '../../shared/lib/segment'\nimport type { AppSegmentConfig } from '../../build/segment-config/app/app-segment-config'\n\nasync function createFlightRouterStateFromLoaderTreeImpl(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n didFindRootLayout: boolean\n): Promise<FlightRouterState> {\n const [segment, parallelRoutes, { layout, loading, page }] = loaderTree\n const dynamicParam = getDynamicParamFromSegment(loaderTree)\n const treeSegment = dynamicParam ? dynamicParam.treeSegment : segment\n\n const segmentTree: FlightRouterState = [\n addSearchParamsIfPageSegment(treeSegment, searchParams),\n {},\n ]\n\n // Load the layout or page module to check its instant and prefetch\n // configs. When a segment doesn't export prefetch, it defaults to\n // 'partial' if the app has opted into partial prefetching globally via the\n // `partialPrefetching` config in next.config.js.\n const mod = layout ? await layout[0]() : page ? await page[0]() : undefined\n const instantConfig = mod ? (mod as AppSegmentConfig).instant : undefined\n const prefetchConfig =\n (mod ? (mod as AppSegmentConfig).prefetch : undefined) ??\n (partialPrefetching === 'unstable_eager'\n ? 'unstable_eager'\n : partialPrefetching\n ? 'partial'\n : undefined)\n let prefetchHints = 0\n\n // Union in the precomputed build-time hints (e.g. segment inlining\n // decisions) if available. When hints are not available (e.g. dev mode or\n // if prefetch-hints.json was not generated), we fall through and still\n // compute the other hints below. In the future this should be a build\n // error, but for now we gracefully degrade.\n //\n // TODO: Move more of the hints computation (IsRootLayoutOrAbove, instant config,\n // loading boundary detection) into the build-time measurement step in\n // collectPrefetchHints, so this function only needs to union the\n // precomputed bitmask rather than re-derive hints on every render.\n if (hintTree !== null) {\n prefetchHints |= hintTree.hints\n } else if (prefetchInliningEnabled) {\n if (isBuildTimePrerendering) {\n // Prefetch inlining is enabled but no hint tree was provided during a\n // build-time prerender. This happens for the initial RSC payload\n // generated before collectPrefetchHints has run. Mark so the client\n // can expire the route cache entry and re-fetch the tree with correct\n // hints.\n prefetchHints |= PrefetchHint.InliningHintsStale\n } else if (isStaticGeneration) {\n // TODO(#91407): Temporary mitigation: when hints are missing during\n // runtime static generation, fall back to treating every segment as\n // unprefetchable. This currently happens for routes with\n // `instant = false` at the root segment, which causes the prerender\n // to run per-request instead of being cached, and the prefetch hints\n // manifest is not available.\n //\n // Once that bug is fixed, this branch should become an error again —\n // hints should always be available from the manifest during ISR.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (cacheComponents) {\n // At runtime with no hint tree, this is a fully dynamic route with no\n // manifest entry. Treat every segment as unprefetchable. Do NOT set\n // InliningHintsStale — that would cause the client to enter an\n // infinite re-fetch loop trying to get hints that will never exist.\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else {\n // Without cacheComponents, dynamic pages have no static shell so\n // hints are never computed. Don't disable prefetching — just skip\n // the inlining hint system and let prefetching proceed normally.\n }\n }\n\n // Mark every segment at or above the root layout (i.e. until we descend past\n // the first segment that has a layout).\n if (!didFindRootLayout) {\n prefetchHints |= PrefetchHint.IsRootLayoutOrAbove\n if (typeof layout !== 'undefined') {\n // This segment is the root layout; its descendants are below it.\n didFindRootLayout = true\n }\n }\n\n const isInstant =\n instantConfig === true ||\n (typeof instantConfig === 'object' && instantConfig !== null)\n if (isInstant) {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (instantConfig === false) {\n // The segment explicitly opts out of Partial Prefetching. We don't change\n // the prefetch behavior, but we record it so the dev-time\n // `<Link prefetch={true}>` warning can be suppressed for this route.\n prefetchHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n\n if (prefetchConfig === 'partial') {\n prefetchHints |= PrefetchHint.SubtreeHasPartialPrefetching\n } else if (prefetchConfig === 'unstable_eager') {\n // Like 'partial' (uses the PPR fetch strategy) but also marks the segment\n // as eager, so App Shells keeps prefetching it instead of relying on the\n // shared app shell.\n prefetchHints |=\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasEagerPrefetch\n } else if (prefetchConfig === 'force-disabled') {\n prefetchHints |= PrefetchHint.PrefetchDisabled\n } else if (prefetchConfig === 'allow-runtime') {\n // 'allow-runtime' participates in the two-phase (Shell then Speculative)\n // prefetch flow, so it counts as Partial Prefetching. HasRuntimePrefetch\n // additionally marks it as needing a runtime request pass.\n prefetchHints |=\n PrefetchHint.HasRuntimePrefetch |\n PrefetchHint.SubtreeHasPartialPrefetching\n }\n\n // Mark the segment as \"eager\" unless its effective prefetch strategy is\n // 'partial' or 'allow-runtime'. A truthy instant is treated as\n // 'partial' (not eager). 'unstable_eager' already set the bit above. Under\n // App Shells, a subtree with no eager segment skips its Speculative prefetch\n // and relies on the shared app shell instead.\n if (\n !isInstant &&\n prefetchConfig !== 'partial' &&\n prefetchConfig !== 'allow-runtime'\n ) {\n prefetchHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n\n // Check if this segment has a loading boundary\n if (loading) {\n prefetchHints |= PrefetchHint.SegmentHasLoadingBoundary\n }\n\n const children: FlightRouterState[1] = {}\n for (const parallelRouteKey in parallelRoutes) {\n // Look up the child hint node by parallel route key, traversing the\n // hint tree in parallel with the loader tree.\n const childHintNode = hintTree?.slots?.[parallelRouteKey] ?? null\n\n const child = await createFlightRouterStateFromLoaderTreeImpl(\n parallelRoutes[parallelRouteKey],\n childHintNode,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n // Propagate subtree flags from children\n if (child[4] !== undefined) {\n prefetchHints = propagateSubtreeBits(prefetchHints, child[4])\n }\n children[parallelRouteKey] = child\n }\n segmentTree[1] = children\n\n if (prefetchHints !== 0) {\n segmentTree[4] = prefetchHints\n }\n\n return segmentTree\n}\n\nexport async function createFlightRouterStateFromLoaderTree(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n searchParams: any,\n // Whether a root layout was already found above this loader tree slice, so a\n // slice that starts below the root layout doesn't mark a sub-layout as the\n // root layout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n\nexport async function createRouteTreePrefetch(\n loaderTree: LoaderTree,\n hintTree: PrefetchHints | null,\n prefetchInliningEnabled: boolean,\n cacheComponents: boolean,\n partialPrefetching: boolean | 'unstable_eager' | undefined,\n isStaticGeneration: boolean,\n isBuildTimePrerendering: boolean,\n getDynamicParamFromSegment: GetDynamicParamFromSegment,\n // See note on createFlightRouterStateFromLoaderTree's didFindRootLayout.\n didFindRootLayout: boolean = false\n): Promise<FlightRouterState> {\n // Search params should not be added to page segment's cache key during a\n // route tree prefetch request, because they do not affect the structure of\n // the route. The client cache has its own logic to handle search params.\n const searchParams = {}\n return createFlightRouterStateFromLoaderTreeImpl(\n loaderTree,\n hintTree,\n prefetchInliningEnabled,\n cacheComponents,\n partialPrefetching,\n isStaticGeneration,\n isBuildTimePrerendering,\n getDynamicParamFromSegment,\n searchParams,\n didFindRootLayout\n )\n}\n"],"names":["createFlightRouterStateFromLoaderTree","createRouteTreePrefetch","createFlightRouterStateFromLoaderTreeImpl","loaderTree","hintTree","prefetchInliningEnabled","cacheComponents","partialPrefetching","isStaticGeneration","isBuildTimePrerendering","getDynamicParamFromSegment","searchParams","didFindRootLayout","segment","parallelRoutes","layout","loading","page","dynamicParam","treeSegment","segmentTree","addSearchParamsIfPageSegment","mod","undefined","instantConfig","instant","prefetchConfig","prefetch","prefetchHints","hints","PrefetchHint","InliningHintsStale","PrefetchDisabled","IsRootLayoutOrAbove","isInstant","SubtreeHasPartialPrefetching","SubtreeHasInstantFalse","SubtreeHasEagerPrefetch","HasRuntimePrefetch","SegmentHasLoadingBoundary","children","parallelRouteKey","childHintNode","slots","child","propagateSubtreeBits"],"mappings":"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","ignoreList":[0]} |
@@ -127,3 +127,3 @@ import type { InitialRSCPayload, Segment } from '../../../shared/lib/app-router-types'; | ||
| Shell = 1, | ||
| /** Pre-appShells behavior. */ | ||
| /** Behavior when Partial Prefetching is not enabled. */ | ||
| LegacySpeculative = 3 | ||
@@ -130,0 +130,0 @@ } |
@@ -504,3 +504,3 @@ "use strict"; | ||
| // Speculative = 2, | ||
| /** Pre-appShells behavior. */ ValidationPrefetchKind[ValidationPrefetchKind["LegacySpeculative"] = 3] = "LegacySpeculative"; | ||
| /** Behavior when Partial Prefetching is not enabled. */ ValidationPrefetchKind[ValidationPrefetchKind["LegacySpeculative"] = 3] = "LegacySpeculative"; | ||
| return ValidationPrefetchKind; | ||
@@ -507,0 +507,0 @@ }({}); |
@@ -89,3 +89,2 @@ import type { LoadComponentsReturnType } from '../load-components'; | ||
| cachedNavigations: boolean | 'allow-runtime'; | ||
| appShells: ExperimentalConfig['appShells']; | ||
| /** | ||
@@ -92,0 +91,0 @@ * The maximum size (in bytes) of the postponed state body for PPR resume |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/server/app-render/types.ts"],"sourcesContent":["import type { LoadComponentsReturnType } from '../load-components'\nimport type { ServerRuntime, SizeLimit } from '../../types'\nimport type {\n ExperimentalConfig,\n NextConfigComplete,\n PrefetchInliningConfig,\n ValidationLevel,\n} from '../../server/config-shared'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { AppPageModule } from '../route-modules/app-page/module'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport type { ImageConfigComplete } from '../../shared/lib/image-config'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport s from 'next/dist/compiled/superstruct'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { InstrumentationOnRequestError } from '../instrumentation/types'\nimport type { NextRequestHint } from '../web/adapter'\nimport type { BaseNextRequest } from '../base-http'\nimport type { IncomingMessage } from 'http'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\nimport type { ServerCacheStatus } from '../../next-devtools/dev-overlay/cache-indicator'\nimport type { PrefetchHints } from '../../shared/lib/app-router-types'\nimport type { AnyStream } from './stream-ops'\n\nconst dynamicParamTypesSchema = s.enums([\n 'c',\n 'ci(..)(..)',\n 'ci(.)',\n 'ci(..)',\n 'ci(...)',\n 'oc',\n 'd',\n 'di(..)(..)',\n 'di(.)',\n 'di(..)',\n 'di(...)',\n])\n\nconst segmentSchema = s.union([\n s.string(),\n\n s.tuple([\n // Param name\n s.string(),\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n s.string(),\n // Dynamic param type\n dynamicParamTypesSchema,\n // Static siblings at the same URL level. Used by the client router to\n // determine if a prefetch can be reused when navigating to a static\n // sibling of a dynamic route. null means siblings are unknown.\n s.nullable(s.array(s.string())),\n ]),\n])\n\n// unfortunately the tuple is not understood well by Describe so we have to\n// use any here. This does not have any impact on the runtime type since the validation\n// does work correctly.\nexport const flightRouterStateSchema: s.Describe<any> = s.tuple([\n segmentSchema,\n s.record(\n s.string(),\n s.lazy(() => flightRouterStateSchema)\n ),\n s.optional(s.nullable(s.tuple([s.string(), s.string()]))),\n s.optional(\n s.nullable(\n s.union([\n s.literal('refetch'),\n s.literal('inside-shared-layout'),\n s.literal('metadata-only'),\n ])\n )\n ),\n s.optional(s.number()),\n])\n\nexport type ServerOnInstrumentationRequestError = (\n error: unknown,\n // The request could be middleware, node server or web server request,\n // we normalized them into an aligned format to `onRequestError` API later.\n request: NextRequestHint | BaseNextRequest | IncomingMessage,\n errorContext: Parameters<InstrumentationOnRequestError>[2],\n silenceLog: boolean\n) => void | Promise<void>\n\nexport interface RenderOptsPartial {\n dir?: string\n previewProps: __ApiPreviewProps | undefined\n err?: Error | null\n basePath: string\n cacheComponents: boolean\n partialPrefetching?: NextConfigComplete['partialPrefetching']\n validationLevel: ValidationLevel\n trailingSlash: boolean\n images: ImageConfigComplete\n supportsDynamicResponse: boolean\n runtime?: ServerRuntime\n serverComponents?: boolean\n enableTainting?: boolean\n assetPrefix?: string\n crossOrigin?: '' | 'anonymous' | 'use-credentials' | undefined\n nextFontManifest?: DeepReadonly<NextFontManifest>\n botType?: 'dom' | 'html' | undefined\n serveStreamingMetadata?: boolean\n incrementalCache?: import('../lib/incremental-cache').IncrementalCache\n cacheLifeProfiles: import('../config-shared').ResolvedCacheLifeProfiles\n staticPageGenerationTimeout: number\n isOnDemandRevalidate?: boolean\n isPossibleServerAction?: boolean\n setCacheStatus?: (status: ServerCacheStatus, htmlRequestId: string) => void\n setIsrStatus?: (key: string, value: boolean | undefined) => void\n setReactDebugChannel?: (\n debugChannel: { readable: AnyStream },\n htmlRequestId: string,\n requestId: string\n ) => void\n sendErrorsToBrowser?: (\n errorsRscStream: AnyStream,\n htmlRequestId: string\n ) => void\n isBuildTimePrerendering?: boolean\n nextConfigOutput?: 'standalone' | 'export'\n onInstrumentationRequestError?: ServerOnInstrumentationRequestError\n isDraftMode?: boolean\n onUpdateCookies?: (cookies: string[]) => void\n loadConfig?: (\n phase: string,\n dir: string,\n customConfig?: object | null,\n rawConfig?: boolean,\n silent?: boolean\n ) => Promise<NextConfigComplete>\n serverActions?: {\n bodySizeLimit?: SizeLimit\n allowedOrigins?: string[]\n }\n logServerFunctions?: boolean\n params?: ParsedUrlQuery\n isPrefetch?: boolean\n htmlLimitedBots: string | undefined\n experimental: {\n /**\n * When true, it indicates that the current page supports partial\n * prerendering.\n */\n isRoutePPREnabled?: boolean\n expireTime: number | undefined\n staleTimes: ExperimentalConfig['staleTimes'] | undefined\n clientTraceMetadata: string[] | undefined\n\n /**\n * The origins that are allowed to write the rewritten headers when\n * performing a non-relative rewrite. When undefined, no non-relative\n * rewrites will get the rewrite headers.\n */\n clientParamParsingOrigins: string[] | undefined\n dynamicOnHover: boolean\n optimisticRouting: boolean\n inlineCss: boolean\n prefetchInlining: PrefetchInliningConfig\n authInterrupts: boolean\n serverComponentsHmrCancellation?: boolean\n useCacheTimeout: number\n cachedNavigations: boolean | 'allow-runtime'\n appShells: ExperimentalConfig['appShells']\n\n /**\n * The maximum size (in bytes) of the postponed state body for PPR resume\n * requests. Used to calculate decompression limits (5x this value).\n */\n maxPostponedStateSizeBytes: number | undefined\n\n /**\n * Whether the Instant Navigation Testing API is exposed (dev mode or the\n * `exposeTestingApiInProductionBuild` flag). When true, the prerendered\n * shell and dynamic renders embed a cookie-guarded bootstrap script that\n * drives instant navigation tests.\n */\n exposeTestingApi: boolean\n }\n postponed?: string\n\n /**\n * Should wait for react stream allReady to resolve all suspense boundaries,\n * in order to perform a full page render.\n */\n shouldWaitOnAllReady?: boolean\n\n /**\n * A prefilled resume data cache. This was either generated for this page\n * during dev warmup, or when a page with defined params was previously\n * prerendered, and now its matching optional fallback shell is prerendered.\n */\n renderResumeDataCache?: RenderResumeDataCache\n\n /**\n * When true, the page will be rendered using the static rendering to detect\n * any dynamic API's that would have stopped the page from being fully\n * statically generated.\n */\n isDebugDynamicAccesses?: boolean\n\n /**\n /**\n * The maximum length of the headers that are emitted by React and added to\n * the response.\n */\n reactMaxHeadersLength: number | undefined\n\n /**\n * Per-route prefetch hints from prefetch-hints.json.\n * Loaded at server startup from the build output.\n */\n prefetchHints?: Record<string, PrefetchHints>\n\n isStaticGeneration?: boolean\n\n /**\n * When true, the page is prerendered as a fallback shell, while allowing any\n * dynamic accesses to result in an empty shell. This is the case when there\n * are also routes prerendered with a more complete set of params.\n * Prerendering those routes would catch any invalid dynamic accesses.\n */\n allowEmptyStaticShell?: boolean\n\n /**\n * When true, attempt to run build-time instant validation for this prerender.\n * Only the first prerender per page sets this, since validation uses\n * instant.unstable_samples and is independent of actual route params.\n */\n runInstantValidation?: boolean\n\n /**\n * When true, a fallback shell produced for this render could later be\n * upgraded to a concrete version (at least one of its fallback params is a\n * candidate enumerated by `generateStaticParams`). Only such shells are\n * flagged `isUpgradeableISRFallback` so the client retries the prefetch; a route that\n * can never upgrade (no `generateStaticParams`) is left unflagged.\n */\n isFallbackUpgradeable?: boolean\n}\n\nexport type RenderOpts = LoadComponentsReturnType<AppPageModule> &\n RenderOptsPartial &\n RequestLifecycleOpts\n\nexport type PreloadCallbacks = (() => void)[]\n"],"names":["flightRouterStateSchema","dynamicParamTypesSchema","s","enums","segmentSchema","union","string","tuple","nullable","array","record","lazy","optional","literal","number"],"mappings":";;;;+BAiEaA;;;eAAAA;;;oEAlDC;;;;;;AAWd,MAAMC,0BAA0BC,oBAAC,CAACC,KAAK,CAAC;IACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,gBAAgBF,oBAAC,CAACG,KAAK,CAAC;IAC5BH,oBAAC,CAACI,MAAM;IAERJ,oBAAC,CAACK,KAAK,CAAC;QACN,aAAa;QACbL,oBAAC,CAACI,MAAM;QACR,gEAAgE;QAChE,6BAA6B;QAC7B,yEAAyE;QACzE,oEAAoE;QACpE,qEAAqE;QACrE,2CAA2C;QAC3CJ,oBAAC,CAACI,MAAM;QACR,qBAAqB;QACrBL;QACA,sEAAsE;QACtE,oEAAoE;QACpE,+DAA+D;QAC/DC,oBAAC,CAACM,QAAQ,CAACN,oBAAC,CAACO,KAAK,CAACP,oBAAC,CAACI,MAAM;KAC5B;CACF;AAKM,MAAMN,0BAA2CE,oBAAC,CAACK,KAAK,CAAC;IAC9DH;IACAF,oBAAC,CAACQ,MAAM,CACNR,oBAAC,CAACI,MAAM,IACRJ,oBAAC,CAACS,IAAI,CAAC,IAAMX;IAEfE,oBAAC,CAACU,QAAQ,CAACV,oBAAC,CAACM,QAAQ,CAACN,oBAAC,CAACK,KAAK,CAAC;QAACL,oBAAC,CAACI,MAAM;QAAIJ,oBAAC,CAACI,MAAM;KAAG;IACtDJ,oBAAC,CAACU,QAAQ,CACRV,oBAAC,CAACM,QAAQ,CACRN,oBAAC,CAACG,KAAK,CAAC;QACNH,oBAAC,CAACW,OAAO,CAAC;QACVX,oBAAC,CAACW,OAAO,CAAC;QACVX,oBAAC,CAACW,OAAO,CAAC;KACX;IAGLX,oBAAC,CAACU,QAAQ,CAACV,oBAAC,CAACY,MAAM;CACpB","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/server/app-render/types.ts"],"sourcesContent":["import type { LoadComponentsReturnType } from '../load-components'\nimport type { ServerRuntime, SizeLimit } from '../../types'\nimport type {\n ExperimentalConfig,\n NextConfigComplete,\n PrefetchInliningConfig,\n ValidationLevel,\n} from '../../server/config-shared'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { AppPageModule } from '../route-modules/app-page/module'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport type { ImageConfigComplete } from '../../shared/lib/image-config'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport s from 'next/dist/compiled/superstruct'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { InstrumentationOnRequestError } from '../instrumentation/types'\nimport type { NextRequestHint } from '../web/adapter'\nimport type { BaseNextRequest } from '../base-http'\nimport type { IncomingMessage } from 'http'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\nimport type { ServerCacheStatus } from '../../next-devtools/dev-overlay/cache-indicator'\nimport type { PrefetchHints } from '../../shared/lib/app-router-types'\nimport type { AnyStream } from './stream-ops'\n\nconst dynamicParamTypesSchema = s.enums([\n 'c',\n 'ci(..)(..)',\n 'ci(.)',\n 'ci(..)',\n 'ci(...)',\n 'oc',\n 'd',\n 'di(..)(..)',\n 'di(.)',\n 'di(..)',\n 'di(...)',\n])\n\nconst segmentSchema = s.union([\n s.string(),\n\n s.tuple([\n // Param name\n s.string(),\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n s.string(),\n // Dynamic param type\n dynamicParamTypesSchema,\n // Static siblings at the same URL level. Used by the client router to\n // determine if a prefetch can be reused when navigating to a static\n // sibling of a dynamic route. null means siblings are unknown.\n s.nullable(s.array(s.string())),\n ]),\n])\n\n// unfortunately the tuple is not understood well by Describe so we have to\n// use any here. This does not have any impact on the runtime type since the validation\n// does work correctly.\nexport const flightRouterStateSchema: s.Describe<any> = s.tuple([\n segmentSchema,\n s.record(\n s.string(),\n s.lazy(() => flightRouterStateSchema)\n ),\n s.optional(s.nullable(s.tuple([s.string(), s.string()]))),\n s.optional(\n s.nullable(\n s.union([\n s.literal('refetch'),\n s.literal('inside-shared-layout'),\n s.literal('metadata-only'),\n ])\n )\n ),\n s.optional(s.number()),\n])\n\nexport type ServerOnInstrumentationRequestError = (\n error: unknown,\n // The request could be middleware, node server or web server request,\n // we normalized them into an aligned format to `onRequestError` API later.\n request: NextRequestHint | BaseNextRequest | IncomingMessage,\n errorContext: Parameters<InstrumentationOnRequestError>[2],\n silenceLog: boolean\n) => void | Promise<void>\n\nexport interface RenderOptsPartial {\n dir?: string\n previewProps: __ApiPreviewProps | undefined\n err?: Error | null\n basePath: string\n cacheComponents: boolean\n partialPrefetching?: NextConfigComplete['partialPrefetching']\n validationLevel: ValidationLevel\n trailingSlash: boolean\n images: ImageConfigComplete\n supportsDynamicResponse: boolean\n runtime?: ServerRuntime\n serverComponents?: boolean\n enableTainting?: boolean\n assetPrefix?: string\n crossOrigin?: '' | 'anonymous' | 'use-credentials' | undefined\n nextFontManifest?: DeepReadonly<NextFontManifest>\n botType?: 'dom' | 'html' | undefined\n serveStreamingMetadata?: boolean\n incrementalCache?: import('../lib/incremental-cache').IncrementalCache\n cacheLifeProfiles: import('../config-shared').ResolvedCacheLifeProfiles\n staticPageGenerationTimeout: number\n isOnDemandRevalidate?: boolean\n isPossibleServerAction?: boolean\n setCacheStatus?: (status: ServerCacheStatus, htmlRequestId: string) => void\n setIsrStatus?: (key: string, value: boolean | undefined) => void\n setReactDebugChannel?: (\n debugChannel: { readable: AnyStream },\n htmlRequestId: string,\n requestId: string\n ) => void\n sendErrorsToBrowser?: (\n errorsRscStream: AnyStream,\n htmlRequestId: string\n ) => void\n isBuildTimePrerendering?: boolean\n nextConfigOutput?: 'standalone' | 'export'\n onInstrumentationRequestError?: ServerOnInstrumentationRequestError\n isDraftMode?: boolean\n onUpdateCookies?: (cookies: string[]) => void\n loadConfig?: (\n phase: string,\n dir: string,\n customConfig?: object | null,\n rawConfig?: boolean,\n silent?: boolean\n ) => Promise<NextConfigComplete>\n serverActions?: {\n bodySizeLimit?: SizeLimit\n allowedOrigins?: string[]\n }\n logServerFunctions?: boolean\n params?: ParsedUrlQuery\n isPrefetch?: boolean\n htmlLimitedBots: string | undefined\n experimental: {\n /**\n * When true, it indicates that the current page supports partial\n * prerendering.\n */\n isRoutePPREnabled?: boolean\n expireTime: number | undefined\n staleTimes: ExperimentalConfig['staleTimes'] | undefined\n clientTraceMetadata: string[] | undefined\n\n /**\n * The origins that are allowed to write the rewritten headers when\n * performing a non-relative rewrite. When undefined, no non-relative\n * rewrites will get the rewrite headers.\n */\n clientParamParsingOrigins: string[] | undefined\n dynamicOnHover: boolean\n optimisticRouting: boolean\n inlineCss: boolean\n prefetchInlining: PrefetchInliningConfig\n authInterrupts: boolean\n serverComponentsHmrCancellation?: boolean\n useCacheTimeout: number\n cachedNavigations: boolean | 'allow-runtime'\n\n /**\n * The maximum size (in bytes) of the postponed state body for PPR resume\n * requests. Used to calculate decompression limits (5x this value).\n */\n maxPostponedStateSizeBytes: number | undefined\n\n /**\n * Whether the Instant Navigation Testing API is exposed (dev mode or the\n * `exposeTestingApiInProductionBuild` flag). When true, the prerendered\n * shell and dynamic renders embed a cookie-guarded bootstrap script that\n * drives instant navigation tests.\n */\n exposeTestingApi: boolean\n }\n postponed?: string\n\n /**\n * Should wait for react stream allReady to resolve all suspense boundaries,\n * in order to perform a full page render.\n */\n shouldWaitOnAllReady?: boolean\n\n /**\n * A prefilled resume data cache. This was either generated for this page\n * during dev warmup, or when a page with defined params was previously\n * prerendered, and now its matching optional fallback shell is prerendered.\n */\n renderResumeDataCache?: RenderResumeDataCache\n\n /**\n * When true, the page will be rendered using the static rendering to detect\n * any dynamic API's that would have stopped the page from being fully\n * statically generated.\n */\n isDebugDynamicAccesses?: boolean\n\n /**\n /**\n * The maximum length of the headers that are emitted by React and added to\n * the response.\n */\n reactMaxHeadersLength: number | undefined\n\n /**\n * Per-route prefetch hints from prefetch-hints.json.\n * Loaded at server startup from the build output.\n */\n prefetchHints?: Record<string, PrefetchHints>\n\n isStaticGeneration?: boolean\n\n /**\n * When true, the page is prerendered as a fallback shell, while allowing any\n * dynamic accesses to result in an empty shell. This is the case when there\n * are also routes prerendered with a more complete set of params.\n * Prerendering those routes would catch any invalid dynamic accesses.\n */\n allowEmptyStaticShell?: boolean\n\n /**\n * When true, attempt to run build-time instant validation for this prerender.\n * Only the first prerender per page sets this, since validation uses\n * instant.unstable_samples and is independent of actual route params.\n */\n runInstantValidation?: boolean\n\n /**\n * When true, a fallback shell produced for this render could later be\n * upgraded to a concrete version (at least one of its fallback params is a\n * candidate enumerated by `generateStaticParams`). Only such shells are\n * flagged `isUpgradeableISRFallback` so the client retries the prefetch; a route that\n * can never upgrade (no `generateStaticParams`) is left unflagged.\n */\n isFallbackUpgradeable?: boolean\n}\n\nexport type RenderOpts = LoadComponentsReturnType<AppPageModule> &\n RenderOptsPartial &\n RequestLifecycleOpts\n\nexport type PreloadCallbacks = (() => void)[]\n"],"names":["flightRouterStateSchema","dynamicParamTypesSchema","s","enums","segmentSchema","union","string","tuple","nullable","array","record","lazy","optional","literal","number"],"mappings":";;;;+BAiEaA;;;eAAAA;;;oEAlDC;;;;;;AAWd,MAAMC,0BAA0BC,oBAAC,CAACC,KAAK,CAAC;IACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,gBAAgBF,oBAAC,CAACG,KAAK,CAAC;IAC5BH,oBAAC,CAACI,MAAM;IAERJ,oBAAC,CAACK,KAAK,CAAC;QACN,aAAa;QACbL,oBAAC,CAACI,MAAM;QACR,gEAAgE;QAChE,6BAA6B;QAC7B,yEAAyE;QACzE,oEAAoE;QACpE,qEAAqE;QACrE,2CAA2C;QAC3CJ,oBAAC,CAACI,MAAM;QACR,qBAAqB;QACrBL;QACA,sEAAsE;QACtE,oEAAoE;QACpE,+DAA+D;QAC/DC,oBAAC,CAACM,QAAQ,CAACN,oBAAC,CAACO,KAAK,CAACP,oBAAC,CAACI,MAAM;KAC5B;CACF;AAKM,MAAMN,0BAA2CE,oBAAC,CAACK,KAAK,CAAC;IAC9DH;IACAF,oBAAC,CAACQ,MAAM,CACNR,oBAAC,CAACI,MAAM,IACRJ,oBAAC,CAACS,IAAI,CAAC,IAAMX;IAEfE,oBAAC,CAACU,QAAQ,CAACV,oBAAC,CAACM,QAAQ,CAACN,oBAAC,CAACK,KAAK,CAAC;QAACL,oBAAC,CAACI,MAAM;QAAIJ,oBAAC,CAACI,MAAM;KAAG;IACtDJ,oBAAC,CAACU,QAAQ,CACRV,oBAAC,CAACM,QAAQ,CACRN,oBAAC,CAACG,KAAK,CAAC;QACNH,oBAAC,CAACW,OAAO,CAAC;QACVX,oBAAC,CAACW,OAAO,CAAC;QACVX,oBAAC,CAACW,OAAO,CAAC;KACX;IAGLX,oBAAC,CAACU,QAAQ,CAACV,oBAAC,CAACY,MAAM;CACpB","ignoreList":[0]} |
@@ -51,3 +51,2 @@ import type { NextConfig } from './config'; | ||
| instrumentationClientRouterTransitionEvents: z.ZodOptional<z.ZodBoolean>; | ||
| appShells: z.ZodOptional<z.ZodBoolean>; | ||
| varyParams: z.ZodOptional<z.ZodBoolean>; | ||
@@ -226,2 +225,3 @@ prefetchInlining: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodObject<{ | ||
| turbopackGenerateComponentChunks: z.ZodOptional<z.ZodBoolean>; | ||
| turbopackSharedRuntime: z.ZodOptional<z.ZodBoolean>; | ||
| turbopackChunkingHeuristics: z.ZodOptional<z.ZodObject<{ | ||
@@ -228,0 +228,0 @@ firstPageLoadPriority: z.ZodOptional<z.ZodNumber>; |
@@ -231,3 +231,2 @@ "use strict"; | ||
| instrumentationClientRouterTransitionEvents: _zod.z.boolean().optional(), | ||
| appShells: _zod.z.boolean().optional(), | ||
| varyParams: _zod.z.boolean().optional(), | ||
@@ -404,2 +403,3 @@ prefetchInlining: _zod.z.union([ | ||
| turbopackGenerateComponentChunks: _zod.z.boolean().optional(), | ||
| turbopackSharedRuntime: _zod.z.boolean().optional(), | ||
| turbopackChunkingHeuristics: _zod.z.object({ | ||
@@ -406,0 +406,0 @@ firstPageLoadPriority: _zod.z.number().min(0).max(1).optional(), |
@@ -323,3 +323,2 @@ "use strict"; | ||
| optimisticRouting: ex.optimisticRouting, | ||
| appShells: ex.appShells, | ||
| inlineCss: ex.inlineCss, | ||
@@ -326,0 +325,0 @@ prefetchInlining: ex.prefetchInlining, |
@@ -13,3 +13,17 @@ export type BuildManifest = { | ||
| }; | ||
| pagesChunkGroupBootstrapParams?: { | ||
| [page: string]: object; | ||
| }; | ||
| chunkLoadingGlobal?: string; | ||
| }; | ||
| /** | ||
| * Builds inline `globalThis[<global>].push(<params>)` bootstrap content for the given | ||
| * pages, seeding the runtime queue before the shared runtime chunk drains it. Only call | ||
| * this for Turbopack production builds (the only builds that populate | ||
| * `pagesChunkGroupBootstrapParams` / `chunkLoadingGlobal`). Returns undefined when none | ||
| * of the given pages have inlined params. | ||
| */ | ||
| export declare function getTurbopackChunkGroupBootstrap(paramsByPage: { | ||
| [page: string]: object; | ||
| }, chunkLoadingGlobal: string, pages: readonly string[]): string | undefined; | ||
| export declare function getPageFiles(buildManifest: BuildManifest, page: string): readonly string[]; |
@@ -5,6 +5,18 @@ "use strict"; | ||
| }); | ||
| Object.defineProperty(exports, "getPageFiles", { | ||
| enumerable: true, | ||
| get: function() { | ||
| 0 && (module.exports = { | ||
| getPageFiles: null, | ||
| getTurbopackChunkGroupBootstrap: null | ||
| }); | ||
| function _export(target, all) { | ||
| for(var name in all)Object.defineProperty(target, name, { | ||
| enumerable: true, | ||
| get: all[name] | ||
| }); | ||
| } | ||
| _export(exports, { | ||
| getPageFiles: function() { | ||
| return getPageFiles; | ||
| }, | ||
| getTurbopackChunkGroupBootstrap: function() { | ||
| return getTurbopackChunkGroupBootstrap; | ||
| } | ||
@@ -14,2 +26,7 @@ }); | ||
| const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path"); | ||
| function getTurbopackChunkGroupBootstrap(paramsByPage, chunkLoadingGlobal, pages) { | ||
| const g = JSON.stringify(chunkLoadingGlobal); | ||
| const statements = pages.map((page)=>paramsByPage[page]).filter(Boolean).map((params)=>`(globalThis[${g}] || (globalThis[${g}] = [])).push(${JSON.stringify(params)});`); | ||
| return statements.length > 0 ? statements.join('\n') : undefined; | ||
| } | ||
| function getPageFiles(buildManifest, page) { | ||
@@ -16,0 +33,0 @@ const normalizedPage = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(page)); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/server/get-page-files.ts"],"sourcesContent":["import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path'\nimport { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'\n\nexport type BuildManifest = {\n devFiles: readonly string[]\n polyfillFiles: readonly string[]\n lowPriorityFiles: readonly string[]\n rootMainFiles: readonly string[]\n // this is a separate field for flying shuttle to allow\n // different root main files per entries/build (ideally temporary)\n // until we can stitch the runtime chunks together safely\n rootMainFilesTree: { [appRoute: string]: readonly string[] }\n pages: {\n '/_app': readonly string[]\n [page: string]: readonly string[]\n }\n}\n\nexport function getPageFiles(\n buildManifest: BuildManifest,\n page: string\n): readonly string[] {\n const normalizedPage = denormalizePagePath(normalizePagePath(page))\n let files = buildManifest.pages[normalizedPage]\n\n if (!files) {\n console.warn(\n `Could not find files for ${normalizedPage} in .next/build-manifest.json`\n )\n return []\n }\n\n return files\n}\n"],"names":["getPageFiles","buildManifest","page","normalizedPage","denormalizePagePath","normalizePagePath","files","pages","console","warn"],"mappings":";;;;+BAkBgBA;;;eAAAA;;;qCAlBoB;mCACF;AAiB3B,SAASA,aACdC,aAA4B,EAC5BC,IAAY;IAEZ,MAAMC,iBAAiBC,IAAAA,wCAAmB,EAACC,IAAAA,oCAAiB,EAACH;IAC7D,IAAII,QAAQL,cAAcM,KAAK,CAACJ,eAAe;IAE/C,IAAI,CAACG,OAAO;QACVE,QAAQC,IAAI,CACV,CAAC,yBAAyB,EAAEN,eAAe,6BAA6B,CAAC;QAE3E,OAAO,EAAE;IACX;IAEA,OAAOG;AACT","ignoreList":[0]} | ||
| {"version":3,"sources":["../../src/server/get-page-files.ts"],"sourcesContent":["import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path'\nimport { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'\n\nexport type BuildManifest = {\n devFiles: readonly string[]\n polyfillFiles: readonly string[]\n lowPriorityFiles: readonly string[]\n rootMainFiles: readonly string[]\n // this is a separate field for flying shuttle to allow\n // different root main files per entries/build (ideally temporary)\n // until we can stitch the runtime chunks together safely\n rootMainFilesTree: { [appRoute: string]: readonly string[] }\n pages: {\n '/_app': readonly string[]\n [page: string]: readonly string[]\n }\n // Per-page Turbopack chunk-group bootstrap params, stored as raw JSON.\n pagesChunkGroupBootstrapParams?: { [page: string]: object }\n // The chunk-loading global the runtime drains (default \"TURBOPACK\").\n chunkLoadingGlobal?: string\n}\n\n/**\n * Builds inline `globalThis[<global>].push(<params>)` bootstrap content for the given\n * pages, seeding the runtime queue before the shared runtime chunk drains it. Only call\n * this for Turbopack production builds (the only builds that populate\n * `pagesChunkGroupBootstrapParams` / `chunkLoadingGlobal`). Returns undefined when none\n * of the given pages have inlined params.\n */\nexport function getTurbopackChunkGroupBootstrap(\n paramsByPage: { [page: string]: object },\n chunkLoadingGlobal: string,\n pages: readonly string[]\n): string | undefined {\n const g = JSON.stringify(chunkLoadingGlobal)\n const statements = pages\n .map((page) => paramsByPage[page])\n .filter(Boolean)\n .map(\n (params) =>\n `(globalThis[${g}] || (globalThis[${g}] = [])).push(${JSON.stringify(\n params\n )});`\n )\n\n return statements.length > 0 ? statements.join('\\n') : undefined\n}\n\nexport function getPageFiles(\n buildManifest: BuildManifest,\n page: string\n): readonly string[] {\n const normalizedPage = denormalizePagePath(normalizePagePath(page))\n let files = buildManifest.pages[normalizedPage]\n\n if (!files) {\n console.warn(\n `Could not find files for ${normalizedPage} in .next/build-manifest.json`\n )\n return []\n }\n\n return files\n}\n"],"names":["getPageFiles","getTurbopackChunkGroupBootstrap","paramsByPage","chunkLoadingGlobal","pages","g","JSON","stringify","statements","map","page","filter","Boolean","params","length","join","undefined","buildManifest","normalizedPage","denormalizePagePath","normalizePagePath","files","console","warn"],"mappings":";;;;;;;;;;;;;;;IAgDgBA,YAAY;eAAZA;;IAnBAC,+BAA+B;eAA/BA;;;qCA7BoB;mCACF;AA4B3B,SAASA,gCACdC,YAAwC,EACxCC,kBAA0B,EAC1BC,KAAwB;IAExB,MAAMC,IAAIC,KAAKC,SAAS,CAACJ;IACzB,MAAMK,aAAaJ,MAChBK,GAAG,CAAC,CAACC,OAASR,YAAY,CAACQ,KAAK,EAChCC,MAAM,CAACC,SACPH,GAAG,CACF,CAACI,SACC,CAAC,YAAY,EAAER,EAAE,iBAAiB,EAAEA,EAAE,cAAc,EAAEC,KAAKC,SAAS,CAClEM,QACA,EAAE,CAAC;IAGX,OAAOL,WAAWM,MAAM,GAAG,IAAIN,WAAWO,IAAI,CAAC,QAAQC;AACzD;AAEO,SAAShB,aACdiB,aAA4B,EAC5BP,IAAY;IAEZ,MAAMQ,iBAAiBC,IAAAA,wCAAmB,EAACC,IAAAA,oCAAiB,EAACV;IAC7D,IAAIW,QAAQJ,cAAcb,KAAK,CAACc,eAAe;IAE/C,IAAI,CAACG,OAAO;QACVC,QAAQC,IAAI,CACV,CAAC,yBAAyB,EAAEL,eAAe,6BAA6B,CAAC;QAE3E,OAAO,EAAE;IACX;IAEA,OAAOG;AACT","ignoreList":[0]} |
@@ -82,3 +82,3 @@ "use strict"; | ||
| const versionSuffix = logBundler ? ` (${(0, _bundler.bundlerName)((0, _bundler.getBundlerFromEnv)())})` : ''; | ||
| _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.3.0-canary.87"}`))}${versionSuffix}`); | ||
| _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.3.0-canary.88"}`))}${versionSuffix}`); | ||
| if (appUrl) { | ||
@@ -85,0 +85,0 @@ _log.bootstrap(`- Local: ${appUrl}`); |
@@ -180,3 +180,3 @@ // Start CPU profile if it wasn't already started. | ||
| let { port } = serverOptions; | ||
| process.title = `next-server (v${"16.3.0-canary.87"})`; | ||
| process.title = `next-server (v${"16.3.0-canary.88"})`; | ||
| let handlersReady = ()=>{}; | ||
@@ -183,0 +183,0 @@ let handlersError = ()=>{}; |
| import type { AttributeValue, Span, SpanOptions } from 'next/dist/compiled/@opentelemetry/api'; | ||
| import { isLocalSpanRecordingEnabled } from './span-store'; | ||
| import { isLocalSpanRecordingEnabled, isRequestInsightsEnabled } from './span-store'; | ||
| export { isLocalSpanRecordingEnabled } from './span-store'; | ||
| type LocalSpanAttributes = Partial<Record<string, AttributeValue | undefined>>; | ||
| export declare function createLocalSpan({ name, attributes, links, traceId, spanId, parentSpanId, delegateSpan, }: { | ||
| export declare function createLocalSpan({ name, attributes, links, startTime, traceId, spanId, parentSpanId, delegateSpan, }: { | ||
| name: string; | ||
| attributes?: LocalSpanAttributes; | ||
| links?: SpanOptions['links']; | ||
| startTime?: SpanOptions['startTime']; | ||
| traceId?: string; | ||
@@ -22,4 +23,5 @@ spanId?: string; | ||
| isLocalSpanRecordingEnabled: typeof isLocalSpanRecordingEnabled; | ||
| isRequestInsightsEnabled: typeof isRequestInsightsEnabled; | ||
| withLocalSpan: typeof withLocalSpan; | ||
| }; | ||
| export declare function registerLocalSpanRecorder(): void; |
@@ -48,3 +48,3 @@ "use strict"; | ||
| const getLocalSpanId = ()=>(++lastLocalSpanId).toString(16).padStart(SPAN_ID_HEX_LENGTH, '0'); | ||
| function createLocalSpan({ name, attributes, links, traceId, spanId, parentSpanId, delegateSpan }) { | ||
| function createLocalSpan({ name, attributes, links, startTime, traceId, spanId, parentSpanId, delegateSpan }) { | ||
| return new LocalRecordingSpan({ | ||
@@ -54,2 +54,3 @@ name, | ||
| links, | ||
| startTime, | ||
| delegateSpan, | ||
@@ -78,2 +79,3 @@ traceId: traceId ?? getLocalTraceId(), | ||
| isLocalSpanRecordingEnabled: _spanstore.isLocalSpanRecordingEnabled, | ||
| isRequestInsightsEnabled: _spanstore.isRequestInsightsEnabled, | ||
| withLocalSpan | ||
@@ -90,3 +92,3 @@ }; | ||
| class LocalRecordingSpan { | ||
| constructor({ name, attributes, links, delegateSpan, traceId, spanId, parentSpanId, requestIdentity }){ | ||
| constructor({ name, attributes, links, startTime, delegateSpan, traceId, spanId, parentSpanId, requestIdentity }){ | ||
| this.name = name; | ||
@@ -104,4 +106,3 @@ this.attributes = cleanSpanStoreAttributes(attributes); | ||
| this.requestIdentity = requestIdentity; | ||
| this.startTime = Date.now(); | ||
| this.startTimeMs = getCurrentTimeMs(); | ||
| this.startTime = getTimestamp(startTime); | ||
| this.statusCode = undefined; | ||
@@ -182,3 +183,3 @@ this.statusMessage = undefined; | ||
| try { | ||
| this.record(); | ||
| this.record(endTime); | ||
| } finally{ | ||
@@ -205,3 +206,3 @@ this.releaseReferences(); | ||
| } | ||
| record() { | ||
| record(endTime) { | ||
| const recordAttributes = Object.keys(this.attributes).length > 0 ? this.attributes : undefined; | ||
@@ -211,3 +212,3 @@ (0, _spanstore.recordSpan)({ | ||
| startTime: this.startTime, | ||
| durationMs: getCurrentTimeMs() - this.startTimeMs, | ||
| durationMs: Math.max(0, getTimestamp(endTime) - this.startTime), | ||
| status: this.statusCode === _api.SpanStatusCode.ERROR ? 'error' : 'ok', | ||
@@ -272,5 +273,19 @@ traceId: this.spanContextValue.traceId, | ||
| } | ||
| function getCurrentTimeMs() { | ||
| return typeof performance !== 'undefined' ? performance.now() : Date.now(); | ||
| function getTimestamp(time) { | ||
| if (time instanceof Date) { | ||
| return time.getTime(); | ||
| } | ||
| if (Array.isArray(time)) { | ||
| return time[0] * 1000 + time[1] / 1000000; | ||
| } | ||
| if (typeof time === 'number') { | ||
| const timeOrigin = getPerformanceTimeOrigin(); | ||
| return timeOrigin !== undefined && time < timeOrigin ? timeOrigin + time : time; | ||
| } | ||
| const timeOrigin = getPerformanceTimeOrigin(); | ||
| return timeOrigin === undefined ? Date.now() : timeOrigin + performance.now(); | ||
| } | ||
| function getPerformanceTimeOrigin() { | ||
| return typeof performance !== 'undefined' && typeof performance.timeOrigin === 'number' ? performance.timeOrigin : undefined; | ||
| } | ||
| function getStringAttribute(attributes, key) { | ||
@@ -319,2 +334,3 @@ const value = attributes == null ? void 0 : attributes[key]; | ||
| try { | ||
| const { getRequestInsightsIdentity } = require('./request-insights-identity'); | ||
| const { workAsyncStorage } = require('../../app-render/work-async-storage.external'); | ||
@@ -324,8 +340,9 @@ const { workUnitAsyncStorage } = require('../../app-render/work-unit-async-storage.external'); | ||
| const workUnitStore = workUnitAsyncStorage.getStore(); | ||
| const requestInsightsIdentity = getRequestInsightsIdentity(); | ||
| const url = workUnitStore && 'url' in workUnitStore ? workUnitStore.url : undefined; | ||
| return { | ||
| requestId: workStore == null ? void 0 : workStore.requestId, | ||
| htmlRequestId: workStore == null ? void 0 : workStore.htmlRequestId, | ||
| requestId: (workStore == null ? void 0 : workStore.requestId) ?? (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.requestId), | ||
| htmlRequestId: (workStore == null ? void 0 : workStore.htmlRequestId) ?? (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.htmlRequestId), | ||
| route: workStore == null ? void 0 : workStore.route, | ||
| url: url ? `${url.pathname}${url.search}` : undefined | ||
| url: url ? `${url.pathname}${url.search}` : requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.url | ||
| }; | ||
@@ -332,0 +349,0 @@ } catch { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/local-span-recorder.ts"],"sourcesContent":["import type {\n AttributeValue,\n Span,\n SpanOptions,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport type { AsyncLocalStorage } from 'async_hooks'\nimport { SpanStatusCode } from 'next/dist/compiled/@opentelemetry/api'\nimport {\n isLocalSpanRecordingEnabled,\n recordSpan,\n type SpanStoreAttributes,\n type SpanStoreEvent,\n type SpanStoreLink,\n} from './span-store'\n\nexport { isLocalSpanRecordingEnabled } from './span-store'\n\nconst TRACE_ID_HEX_LENGTH = 32\nconst SPAN_ID_HEX_LENGTH = 16\n\ntype LocalSpanAttributes = Partial<Record<string, AttributeValue | undefined>>\n\nlet lastLocalTraceId = 0\nlet lastLocalSpanId = 0\nlet localSpanAsyncStorage: AsyncLocalStorage<Span> | undefined\n\nconst getLocalTraceId = () =>\n (++lastLocalTraceId).toString(16).padStart(TRACE_ID_HEX_LENGTH, '0')\n\nconst getLocalSpanId = () =>\n (++lastLocalSpanId).toString(16).padStart(SPAN_ID_HEX_LENGTH, '0')\n\nexport function createLocalSpan({\n name,\n attributes,\n links,\n traceId,\n spanId,\n parentSpanId,\n delegateSpan,\n}: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n traceId?: string\n spanId?: string\n parentSpanId?: string\n delegateSpan?: Span\n}): Span {\n return new LocalRecordingSpan({\n name,\n attributes,\n links,\n delegateSpan,\n traceId: traceId ?? getLocalTraceId(),\n spanId: spanId ?? getLocalSpanId(),\n parentSpanId,\n requestIdentity: getCurrentRequestIdentity(),\n })\n}\n\nexport function getActiveLocalSpan(): Span | undefined {\n return localSpanAsyncStorage?.getStore()\n}\n\nexport function isLocalRecordingSpan(span: Span): boolean {\n return span instanceof LocalRecordingSpan\n}\n\nexport function withLocalSpan<T>(span: Span, fn: () => T): T {\n return getLocalSpanAsyncStorage().run(span, fn)\n}\n\nexport type LocalSpanRecorder = {\n createLocalSpan: typeof createLocalSpan\n getActiveLocalSpan: typeof getActiveLocalSpan\n isLocalRecordingSpan: typeof isLocalRecordingSpan\n isLocalSpanRecordingEnabled: typeof isLocalSpanRecordingEnabled\n withLocalSpan: typeof withLocalSpan\n}\n\nexport function registerLocalSpanRecorder(): void {\n const key = Symbol.for('@next/local-span-recorder')\n ;(\n globalThis as typeof globalThis & {\n [key]?: LocalSpanRecorder\n }\n )[key] = {\n createLocalSpan,\n getActiveLocalSpan,\n isLocalRecordingSpan,\n isLocalSpanRecordingEnabled,\n withLocalSpan,\n }\n}\n\nfunction getLocalSpanAsyncStorage(): AsyncLocalStorage<Span> {\n if (!localSpanAsyncStorage) {\n const { createAsyncLocalStorage } =\n require('../../app-render/async-local-storage') as typeof import('../../app-render/async-local-storage')\n localSpanAsyncStorage = createAsyncLocalStorage()\n }\n\n return localSpanAsyncStorage\n}\n\ntype RequestIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nclass LocalRecordingSpan implements Span {\n public name: string\n\n private attributes: SpanStoreAttributes\n private events: SpanStoreEvent[]\n private readonly spanContextValue: ReturnType<Span['spanContext']>\n private delegateSpan?: Span\n private links?: SpanStoreLink[]\n private readonly parentSpanId?: string\n private requestIdentity: RequestIdentity\n private readonly startTime: number\n private readonly startTimeMs: number\n private statusCode: number | undefined\n private statusMessage: string | undefined\n private exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n private ended: boolean\n\n constructor({\n name,\n attributes,\n links,\n delegateSpan,\n traceId,\n spanId,\n parentSpanId,\n requestIdentity,\n }: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n delegateSpan?: Span\n traceId: string\n spanId: string\n parentSpanId?: string\n requestIdentity: RequestIdentity\n }) {\n this.name = name\n this.attributes = cleanSpanStoreAttributes(attributes)\n this.events = []\n this.delegateSpan = delegateSpan\n this.spanContextValue = delegateSpan?.spanContext() ?? {\n traceId,\n spanId,\n traceFlags: 0,\n }\n this.links = getSpanStoreLinks(links)\n this.parentSpanId = parentSpanId\n this.requestIdentity = requestIdentity\n this.startTime = Date.now()\n this.startTimeMs = getCurrentTimeMs()\n this.statusCode = undefined\n this.statusMessage = undefined\n this.exception = undefined\n this.ended = false\n }\n\n spanContext(): ReturnType<Span['spanContext']> {\n return this.spanContextValue\n }\n\n setAttribute(key: string, value: AttributeValue): this {\n if (this.ended) {\n return this\n }\n\n this.attributes[key] = value\n this.delegateSpan?.setAttribute(key, value)\n return this\n }\n\n setAttributes(attributes: Parameters<Span['setAttributes']>[0]): this {\n if (this.ended) {\n return this\n }\n\n // OpenTelemetry attributes may be undefined. Ignore them instead of\n // overwriting an existing value as Object.assign would.\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n this.attributes[key] = value\n }\n }\n this.delegateSpan?.setAttributes(attributes)\n return this\n }\n\n addEvent(\n name: string,\n attributesOrStartTime?: Parameters<Span['addEvent']>[1],\n startTime?: Parameters<Span['addEvent']>[2]\n ): this {\n if (this.ended) {\n return this\n }\n\n this.events.push({\n name,\n timestamp: Date.now(),\n attributes: isSpanStoreAttributes(attributesOrStartTime)\n ? cleanSpanStoreAttributes(attributesOrStartTime)\n : undefined,\n })\n this.delegateSpan?.addEvent(name, attributesOrStartTime, startTime)\n return this\n }\n\n setStatus(status: Parameters<Span['setStatus']>[0]): this {\n if (this.ended) {\n return this\n }\n\n this.statusCode = status.code\n this.statusMessage = status.message\n this.delegateSpan?.setStatus(status)\n return this\n }\n\n updateName(name: string): this {\n if (this.ended) {\n return this\n }\n\n this.name = name\n this.delegateSpan?.updateName(name)\n return this\n }\n\n end(endTime?: Parameters<Span['end']>[0]): void {\n if (this.ended) {\n return\n }\n\n this.ended = true\n try {\n this.delegateSpan?.end(endTime)\n } finally {\n try {\n this.record()\n } finally {\n this.releaseReferences()\n }\n }\n }\n\n isRecording(): boolean {\n return !this.ended\n }\n\n recordException(\n exception: Parameters<Span['recordException']>[0],\n time?: Parameters<Span['recordException']>[1]\n ): void {\n if (this.ended) {\n return\n }\n\n this.exception = getSpanStoreException(exception)\n this.events.push({\n name: 'exception',\n timestamp: Date.now(),\n attributes: getSpanStoreExceptionAttributes(this.exception),\n })\n this.delegateSpan?.recordException(exception, time)\n }\n\n private record(): void {\n const recordAttributes =\n Object.keys(this.attributes).length > 0 ? this.attributes : undefined\n\n recordSpan({\n name: this.name,\n startTime: this.startTime,\n durationMs: getCurrentTimeMs() - this.startTimeMs,\n status: this.statusCode === SpanStatusCode.ERROR ? 'error' : 'ok',\n traceId: this.spanContextValue.traceId,\n spanId: this.spanContextValue.spanId,\n parentSpanId: this.parentSpanId,\n requestId: this.requestIdentity.requestId,\n htmlRequestId: this.requestIdentity.htmlRequestId,\n route:\n getStringAttribute(recordAttributes, 'next.route') ??\n getStringAttribute(recordAttributes, 'http.route') ??\n this.requestIdentity.route,\n url:\n getStringAttribute(recordAttributes, 'http.url') ??\n this.requestIdentity.url,\n attributes: recordAttributes,\n links: this.links,\n events: this.events.length > 0 ? this.events : undefined,\n error: this.getRecordError(),\n })\n }\n\n private releaseReferences(): void {\n // AsyncLocalStorage can keep an ended span reachable when work spawned\n // inside the span outlives it. Keep only the immutable span context and\n // primitive timing/identity fields needed by the Span API after end.\n this.name = ''\n this.attributes = {}\n this.events = []\n this.delegateSpan = undefined\n this.links = undefined\n this.requestIdentity = {}\n this.statusMessage = undefined\n this.exception = undefined\n }\n\n private getRecordError():\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (this.exception) {\n return this.exception\n }\n\n if (this.statusCode === SpanStatusCode.ERROR && this.statusMessage) {\n return {\n message: this.statusMessage,\n }\n }\n\n return undefined\n }\n}\n\nfunction getSpanStoreLinks(\n links: SpanOptions['links'] | undefined\n): SpanStoreLink[] | undefined {\n const spanStoreLinks = links?.map((link) => ({\n traceId: link.context.traceId,\n spanId: link.context.spanId,\n attributes: cleanSpanStoreAttributes(link.attributes),\n }))\n\n return spanStoreLinks?.length ? spanStoreLinks : undefined\n}\n\nfunction cleanSpanStoreAttributes(\n attributes:\n | Record<string, AttributeValue | undefined>\n | SpanStoreAttributes\n | undefined\n): SpanStoreAttributes {\n const cleanedAttributes: SpanStoreAttributes = {}\n if (attributes) {\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n cleanedAttributes[key] = value\n }\n }\n }\n return cleanedAttributes\n}\n\nfunction getCurrentTimeMs(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now()\n}\n\nfunction getStringAttribute(\n attributes: SpanStoreAttributes | undefined,\n key: string\n): string | undefined {\n const value = attributes?.[key]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction isSpanStoreAttributes(\n value: Parameters<Span['addEvent']>[1]\n): value is SpanStoreAttributes {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n )\n}\n\nfunction getSpanStoreException(\n exception: Parameters<Span['recordException']>[0]\n):\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (exception instanceof Error) {\n return {\n type: exception.name,\n message: exception.message,\n }\n }\n\n if (typeof exception === 'string') {\n return {\n message: exception,\n }\n }\n\n if (exception && typeof exception === 'object') {\n return {\n type: exception.constructor?.name,\n message: 'message' in exception ? String(exception.message) : undefined,\n }\n }\n\n return undefined\n}\n\nfunction getSpanStoreExceptionAttributes(\n exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n): SpanStoreAttributes | undefined {\n if (!exception) {\n return undefined\n }\n\n const attributes: SpanStoreAttributes = {}\n if (exception.type !== undefined) {\n attributes['exception.type'] = exception.type\n }\n if (exception.message !== undefined) {\n attributes['exception.message'] = exception.message\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined\n}\n\nfunction getCurrentRequestIdentity(): RequestIdentity {\n try {\n const { workAsyncStorage } =\n require('../../app-render/work-async-storage.external') as typeof import('../../app-render/work-async-storage.external')\n const { workUnitAsyncStorage } =\n require('../../app-render/work-unit-async-storage.external') as typeof import('../../app-render/work-unit-async-storage.external')\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n const url =\n workUnitStore && 'url' in workUnitStore ? workUnitStore.url : undefined\n\n return {\n requestId: workStore?.requestId,\n htmlRequestId: workStore?.htmlRequestId,\n route: workStore?.route,\n url: url ? `${url.pathname}${url.search}` : undefined,\n }\n } catch {\n return {}\n }\n}\n"],"names":["createLocalSpan","getActiveLocalSpan","isLocalRecordingSpan","isLocalSpanRecordingEnabled","registerLocalSpanRecorder","withLocalSpan","TRACE_ID_HEX_LENGTH","SPAN_ID_HEX_LENGTH","lastLocalTraceId","lastLocalSpanId","localSpanAsyncStorage","getLocalTraceId","toString","padStart","getLocalSpanId","name","attributes","links","traceId","spanId","parentSpanId","delegateSpan","LocalRecordingSpan","requestIdentity","getCurrentRequestIdentity","getStore","span","fn","getLocalSpanAsyncStorage","run","key","Symbol","for","globalThis","createAsyncLocalStorage","require","constructor","cleanSpanStoreAttributes","events","spanContextValue","spanContext","traceFlags","getSpanStoreLinks","startTime","Date","now","startTimeMs","getCurrentTimeMs","statusCode","undefined","statusMessage","exception","ended","setAttribute","value","setAttributes","Object","keys","addEvent","attributesOrStartTime","push","timestamp","isSpanStoreAttributes","setStatus","status","code","message","updateName","end","endTime","record","releaseReferences","isRecording","recordException","time","getSpanStoreException","getSpanStoreExceptionAttributes","recordAttributes","length","recordSpan","durationMs","SpanStatusCode","ERROR","requestId","htmlRequestId","route","getStringAttribute","url","error","getRecordError","spanStoreLinks","map","link","context","cleanedAttributes","performance","Array","isArray","Error","type","String","workAsyncStorage","workUnitAsyncStorage","workStore","workUnitStore","pathname","search"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/local-span-recorder.ts"],"sourcesContent":["import type {\n AttributeValue,\n Span,\n SpanOptions,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport type { AsyncLocalStorage } from 'async_hooks'\nimport { SpanStatusCode } from 'next/dist/compiled/@opentelemetry/api'\nimport {\n isLocalSpanRecordingEnabled,\n isRequestInsightsEnabled,\n recordSpan,\n type SpanStoreAttributes,\n type SpanStoreEvent,\n type SpanStoreLink,\n} from './span-store'\n\nexport { isLocalSpanRecordingEnabled } from './span-store'\n\nconst TRACE_ID_HEX_LENGTH = 32\nconst SPAN_ID_HEX_LENGTH = 16\n\ntype LocalSpanAttributes = Partial<Record<string, AttributeValue | undefined>>\n\nlet lastLocalTraceId = 0\nlet lastLocalSpanId = 0\nlet localSpanAsyncStorage: AsyncLocalStorage<Span> | undefined\n\nconst getLocalTraceId = () =>\n (++lastLocalTraceId).toString(16).padStart(TRACE_ID_HEX_LENGTH, '0')\n\nconst getLocalSpanId = () =>\n (++lastLocalSpanId).toString(16).padStart(SPAN_ID_HEX_LENGTH, '0')\n\nexport function createLocalSpan({\n name,\n attributes,\n links,\n startTime,\n traceId,\n spanId,\n parentSpanId,\n delegateSpan,\n}: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n startTime?: SpanOptions['startTime']\n traceId?: string\n spanId?: string\n parentSpanId?: string\n delegateSpan?: Span\n}): Span {\n return new LocalRecordingSpan({\n name,\n attributes,\n links,\n startTime,\n delegateSpan,\n traceId: traceId ?? getLocalTraceId(),\n spanId: spanId ?? getLocalSpanId(),\n parentSpanId,\n requestIdentity: getCurrentRequestIdentity(),\n })\n}\n\nexport function getActiveLocalSpan(): Span | undefined {\n return localSpanAsyncStorage?.getStore()\n}\n\nexport function isLocalRecordingSpan(span: Span): boolean {\n return span instanceof LocalRecordingSpan\n}\n\nexport function withLocalSpan<T>(span: Span, fn: () => T): T {\n return getLocalSpanAsyncStorage().run(span, fn)\n}\n\nexport type LocalSpanRecorder = {\n createLocalSpan: typeof createLocalSpan\n getActiveLocalSpan: typeof getActiveLocalSpan\n isLocalRecordingSpan: typeof isLocalRecordingSpan\n isLocalSpanRecordingEnabled: typeof isLocalSpanRecordingEnabled\n isRequestInsightsEnabled: typeof isRequestInsightsEnabled\n withLocalSpan: typeof withLocalSpan\n}\n\nexport function registerLocalSpanRecorder(): void {\n const key = Symbol.for('@next/local-span-recorder')\n ;(\n globalThis as typeof globalThis & {\n [key]?: LocalSpanRecorder\n }\n )[key] = {\n createLocalSpan,\n getActiveLocalSpan,\n isLocalRecordingSpan,\n isLocalSpanRecordingEnabled,\n isRequestInsightsEnabled,\n withLocalSpan,\n }\n}\n\nfunction getLocalSpanAsyncStorage(): AsyncLocalStorage<Span> {\n if (!localSpanAsyncStorage) {\n const { createAsyncLocalStorage } =\n require('../../app-render/async-local-storage') as typeof import('../../app-render/async-local-storage')\n localSpanAsyncStorage = createAsyncLocalStorage()\n }\n\n return localSpanAsyncStorage\n}\n\ntype RequestIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nclass LocalRecordingSpan implements Span {\n public name: string\n\n private attributes: SpanStoreAttributes\n private events: SpanStoreEvent[]\n private readonly spanContextValue: ReturnType<Span['spanContext']>\n private delegateSpan?: Span\n private links?: SpanStoreLink[]\n private readonly parentSpanId?: string\n private requestIdentity: RequestIdentity\n private readonly startTime: number\n private statusCode: number | undefined\n private statusMessage: string | undefined\n private exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n private ended: boolean\n\n constructor({\n name,\n attributes,\n links,\n startTime,\n delegateSpan,\n traceId,\n spanId,\n parentSpanId,\n requestIdentity,\n }: {\n name: string\n attributes?: LocalSpanAttributes\n links?: SpanOptions['links']\n startTime?: SpanOptions['startTime']\n delegateSpan?: Span\n traceId: string\n spanId: string\n parentSpanId?: string\n requestIdentity: RequestIdentity\n }) {\n this.name = name\n this.attributes = cleanSpanStoreAttributes(attributes)\n this.events = []\n this.delegateSpan = delegateSpan\n this.spanContextValue = delegateSpan?.spanContext() ?? {\n traceId,\n spanId,\n traceFlags: 0,\n }\n this.links = getSpanStoreLinks(links)\n this.parentSpanId = parentSpanId\n this.requestIdentity = requestIdentity\n this.startTime = getTimestamp(startTime)\n this.statusCode = undefined\n this.statusMessage = undefined\n this.exception = undefined\n this.ended = false\n }\n\n spanContext(): ReturnType<Span['spanContext']> {\n return this.spanContextValue\n }\n\n setAttribute(key: string, value: AttributeValue): this {\n if (this.ended) {\n return this\n }\n\n this.attributes[key] = value\n this.delegateSpan?.setAttribute(key, value)\n return this\n }\n\n setAttributes(attributes: Parameters<Span['setAttributes']>[0]): this {\n if (this.ended) {\n return this\n }\n\n // OpenTelemetry attributes may be undefined. Ignore them instead of\n // overwriting an existing value as Object.assign would.\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n this.attributes[key] = value\n }\n }\n this.delegateSpan?.setAttributes(attributes)\n return this\n }\n\n addEvent(\n name: string,\n attributesOrStartTime?: Parameters<Span['addEvent']>[1],\n startTime?: Parameters<Span['addEvent']>[2]\n ): this {\n if (this.ended) {\n return this\n }\n\n this.events.push({\n name,\n timestamp: Date.now(),\n attributes: isSpanStoreAttributes(attributesOrStartTime)\n ? cleanSpanStoreAttributes(attributesOrStartTime)\n : undefined,\n })\n this.delegateSpan?.addEvent(name, attributesOrStartTime, startTime)\n return this\n }\n\n setStatus(status: Parameters<Span['setStatus']>[0]): this {\n if (this.ended) {\n return this\n }\n\n this.statusCode = status.code\n this.statusMessage = status.message\n this.delegateSpan?.setStatus(status)\n return this\n }\n\n updateName(name: string): this {\n if (this.ended) {\n return this\n }\n\n this.name = name\n this.delegateSpan?.updateName(name)\n return this\n }\n\n end(endTime?: Parameters<Span['end']>[0]): void {\n if (this.ended) {\n return\n }\n\n this.ended = true\n try {\n this.delegateSpan?.end(endTime)\n } finally {\n try {\n this.record(endTime)\n } finally {\n this.releaseReferences()\n }\n }\n }\n\n isRecording(): boolean {\n return !this.ended\n }\n\n recordException(\n exception: Parameters<Span['recordException']>[0],\n time?: Parameters<Span['recordException']>[1]\n ): void {\n if (this.ended) {\n return\n }\n\n this.exception = getSpanStoreException(exception)\n this.events.push({\n name: 'exception',\n timestamp: Date.now(),\n attributes: getSpanStoreExceptionAttributes(this.exception),\n })\n this.delegateSpan?.recordException(exception, time)\n }\n\n private record(endTime: Parameters<Span['end']>[0]): void {\n const recordAttributes =\n Object.keys(this.attributes).length > 0 ? this.attributes : undefined\n\n recordSpan({\n name: this.name,\n startTime: this.startTime,\n durationMs: Math.max(0, getTimestamp(endTime) - this.startTime),\n status: this.statusCode === SpanStatusCode.ERROR ? 'error' : 'ok',\n traceId: this.spanContextValue.traceId,\n spanId: this.spanContextValue.spanId,\n parentSpanId: this.parentSpanId,\n requestId: this.requestIdentity.requestId,\n htmlRequestId: this.requestIdentity.htmlRequestId,\n route:\n getStringAttribute(recordAttributes, 'next.route') ??\n getStringAttribute(recordAttributes, 'http.route') ??\n this.requestIdentity.route,\n url:\n getStringAttribute(recordAttributes, 'http.url') ??\n this.requestIdentity.url,\n attributes: recordAttributes,\n links: this.links,\n events: this.events.length > 0 ? this.events : undefined,\n error: this.getRecordError(),\n })\n }\n\n private releaseReferences(): void {\n // AsyncLocalStorage can keep an ended span reachable when work spawned\n // inside the span outlives it. Keep only the immutable span context and\n // primitive timing/identity fields needed by the Span API after end.\n this.name = ''\n this.attributes = {}\n this.events = []\n this.delegateSpan = undefined\n this.links = undefined\n this.requestIdentity = {}\n this.statusMessage = undefined\n this.exception = undefined\n }\n\n private getRecordError():\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (this.exception) {\n return this.exception\n }\n\n if (this.statusCode === SpanStatusCode.ERROR && this.statusMessage) {\n return {\n message: this.statusMessage,\n }\n }\n\n return undefined\n }\n}\n\nfunction getSpanStoreLinks(\n links: SpanOptions['links'] | undefined\n): SpanStoreLink[] | undefined {\n const spanStoreLinks = links?.map((link) => ({\n traceId: link.context.traceId,\n spanId: link.context.spanId,\n attributes: cleanSpanStoreAttributes(link.attributes),\n }))\n\n return spanStoreLinks?.length ? spanStoreLinks : undefined\n}\n\nfunction cleanSpanStoreAttributes(\n attributes:\n | Record<string, AttributeValue | undefined>\n | SpanStoreAttributes\n | undefined\n): SpanStoreAttributes {\n const cleanedAttributes: SpanStoreAttributes = {}\n if (attributes) {\n for (const key of Object.keys(attributes)) {\n const value = attributes[key]\n if (value !== undefined) {\n cleanedAttributes[key] = value\n }\n }\n }\n return cleanedAttributes\n}\n\nfunction getTimestamp(time?: SpanOptions['startTime']): number {\n if (time instanceof Date) {\n return time.getTime()\n }\n\n if (Array.isArray(time)) {\n return time[0] * 1000 + time[1] / 1_000_000\n }\n\n if (typeof time === 'number') {\n const timeOrigin = getPerformanceTimeOrigin()\n return timeOrigin !== undefined && time < timeOrigin\n ? timeOrigin + time\n : time\n }\n\n const timeOrigin = getPerformanceTimeOrigin()\n return timeOrigin === undefined ? Date.now() : timeOrigin + performance.now()\n}\n\nfunction getPerformanceTimeOrigin(): number | undefined {\n return typeof performance !== 'undefined' &&\n typeof performance.timeOrigin === 'number'\n ? performance.timeOrigin\n : undefined\n}\n\nfunction getStringAttribute(\n attributes: SpanStoreAttributes | undefined,\n key: string\n): string | undefined {\n const value = attributes?.[key]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction isSpanStoreAttributes(\n value: Parameters<Span['addEvent']>[1]\n): value is SpanStoreAttributes {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n )\n}\n\nfunction getSpanStoreException(\n exception: Parameters<Span['recordException']>[0]\n):\n | {\n type?: string\n message?: string\n }\n | undefined {\n if (exception instanceof Error) {\n return {\n type: exception.name,\n message: exception.message,\n }\n }\n\n if (typeof exception === 'string') {\n return {\n message: exception,\n }\n }\n\n if (exception && typeof exception === 'object') {\n return {\n type: exception.constructor?.name,\n message: 'message' in exception ? String(exception.message) : undefined,\n }\n }\n\n return undefined\n}\n\nfunction getSpanStoreExceptionAttributes(\n exception:\n | {\n type?: string\n message?: string\n }\n | undefined\n): SpanStoreAttributes | undefined {\n if (!exception) {\n return undefined\n }\n\n const attributes: SpanStoreAttributes = {}\n if (exception.type !== undefined) {\n attributes['exception.type'] = exception.type\n }\n if (exception.message !== undefined) {\n attributes['exception.message'] = exception.message\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined\n}\n\nfunction getCurrentRequestIdentity(): RequestIdentity {\n try {\n const { getRequestInsightsIdentity } =\n require('./request-insights-identity') as typeof import('./request-insights-identity')\n const { workAsyncStorage } =\n require('../../app-render/work-async-storage.external') as typeof import('../../app-render/work-async-storage.external')\n const { workUnitAsyncStorage } =\n require('../../app-render/work-unit-async-storage.external') as typeof import('../../app-render/work-unit-async-storage.external')\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n const requestInsightsIdentity = getRequestInsightsIdentity()\n const url =\n workUnitStore && 'url' in workUnitStore ? workUnitStore.url : undefined\n\n return {\n requestId: workStore?.requestId ?? requestInsightsIdentity?.requestId,\n htmlRequestId:\n workStore?.htmlRequestId ?? requestInsightsIdentity?.htmlRequestId,\n route: workStore?.route,\n url: url ? `${url.pathname}${url.search}` : requestInsightsIdentity?.url,\n }\n } catch {\n return {}\n }\n}\n"],"names":["createLocalSpan","getActiveLocalSpan","isLocalRecordingSpan","isLocalSpanRecordingEnabled","registerLocalSpanRecorder","withLocalSpan","TRACE_ID_HEX_LENGTH","SPAN_ID_HEX_LENGTH","lastLocalTraceId","lastLocalSpanId","localSpanAsyncStorage","getLocalTraceId","toString","padStart","getLocalSpanId","name","attributes","links","startTime","traceId","spanId","parentSpanId","delegateSpan","LocalRecordingSpan","requestIdentity","getCurrentRequestIdentity","getStore","span","fn","getLocalSpanAsyncStorage","run","key","Symbol","for","globalThis","isRequestInsightsEnabled","createAsyncLocalStorage","require","constructor","cleanSpanStoreAttributes","events","spanContextValue","spanContext","traceFlags","getSpanStoreLinks","getTimestamp","statusCode","undefined","statusMessage","exception","ended","setAttribute","value","setAttributes","Object","keys","addEvent","attributesOrStartTime","push","timestamp","Date","now","isSpanStoreAttributes","setStatus","status","code","message","updateName","end","endTime","record","releaseReferences","isRecording","recordException","time","getSpanStoreException","getSpanStoreExceptionAttributes","recordAttributes","length","recordSpan","durationMs","Math","max","SpanStatusCode","ERROR","requestId","htmlRequestId","route","getStringAttribute","url","error","getRecordError","spanStoreLinks","map","link","context","cleanedAttributes","getTime","Array","isArray","timeOrigin","getPerformanceTimeOrigin","performance","Error","type","String","getRequestInsightsIdentity","workAsyncStorage","workUnitAsyncStorage","workStore","workUnitStore","requestInsightsIdentity","pathname","search"],"mappings":"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","ignoreList":[0]} |
@@ -42,2 +42,3 @@ "use strict"; | ||
| const REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store'); | ||
| const CLIENT_COMPONENT_LOADING_SPAN_TYPE = 'NextNodeServer.clientComponentLoading'; | ||
| const REDACTED_VALUE = 'redacted'; | ||
@@ -57,2 +58,3 @@ const SAFE_SPAN_ATTRIBUTE_KEYS = new Set([ | ||
| 'next.segment', | ||
| 'next.span_category', | ||
| 'next.span_name', | ||
@@ -64,2 +66,3 @@ 'next.span_type' | ||
| recordSpan(span) { | ||
| var _span_attributes; | ||
| if (!span.requestId) { | ||
@@ -70,9 +73,6 @@ return; | ||
| const spanStartTime = span.startTime ?? span.timestamp; | ||
| const spanEndTime = span.durationMs ? spanStartTime + span.durationMs : spanStartTime; | ||
| const requestEndTime = insight.durationMs ? insight.startTime + insight.durationMs : insight.startTime; | ||
| insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId; | ||
| insight.route = insight.route ?? span.route; | ||
| insight.url = insight.url ?? sanitizeUrl(span.url); | ||
| insight.startTime = Math.min(insight.startTime, spanStartTime); | ||
| insight.durationMs = Math.max(requestEndTime, spanEndTime) - insight.startTime; | ||
| this.updateTiming(insight, spanStartTime, span.durationMs, ((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === 'BaseServer.handleRequest'); | ||
| insight.status = insight.status === 'error' || span.status === 'error' ? 'error' : span.status === 'ok' ? 'ok' : insight.status; | ||
@@ -104,5 +104,3 @@ insight.spans.push({ | ||
| const insight = this.getOrCreateRequest(identity, fetchStartTime); | ||
| const fetchEndTime = fetch.durationMs ? fetchStartTime + fetch.durationMs : fetchStartTime; | ||
| const requestEndTime = insight.durationMs ? insight.startTime + insight.durationMs : insight.startTime; | ||
| insight.durationMs = Math.max(requestEndTime, fetchEndTime) - insight.startTime; | ||
| this.updateTiming(insight, fetchStartTime, fetch.durationMs, false); | ||
| this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch)); | ||
@@ -124,4 +122,27 @@ this.notify(insight); | ||
| this.requests.clear(); | ||
| this.requestTimings.clear(); | ||
| this.requestOrder.length = 0; | ||
| } | ||
| updateTiming(insight, startTime, durationMs, isRequestSpan) { | ||
| if (isRequestSpan && durationMs !== undefined) { | ||
| const requestTiming = { | ||
| startTime, | ||
| durationMs | ||
| }; | ||
| this.requestTimings.set(insight.requestId, requestTiming); | ||
| insight.startTime = requestTiming.startTime; | ||
| insight.durationMs = requestTiming.durationMs; | ||
| return; | ||
| } | ||
| const requestTiming = this.requestTimings.get(insight.requestId); | ||
| if (requestTiming) { | ||
| insight.startTime = requestTiming.startTime; | ||
| insight.durationMs = requestTiming.durationMs; | ||
| return; | ||
| } | ||
| const endTime = startTime + (durationMs ?? 0); | ||
| const requestEndTime = insight.startTime + (insight.durationMs ?? 0); | ||
| insight.startTime = Math.min(insight.startTime, startTime); | ||
| insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime; | ||
| } | ||
| notify(insight) { | ||
@@ -167,2 +188,3 @@ for (const listener of this.listeners){ | ||
| this.requests.delete(requestId); | ||
| this.requestTimings.delete(requestId); | ||
| } | ||
@@ -173,2 +195,3 @@ } | ||
| this.requests = new Map(); | ||
| this.requestTimings = new Map(); | ||
| this.requestOrder = []; | ||
@@ -179,2 +202,6 @@ this.listeners = new Set(); | ||
| function recordRequestInsightSpan(span) { | ||
| var _span_attributes; | ||
| if (((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === CLIENT_COMPONENT_LOADING_SPAN_TYPE) { | ||
| return; | ||
| } | ||
| getRequestInsightsStore().recordSpan(span); | ||
@@ -181,0 +208,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/request-insights.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type {\n RequestInsight,\n RequestInsightFetch,\n RequestInsightsSnapshot,\n} from '../../../next-devtools/shared/request-insights'\nimport type { SpanStoreRecord } from './span-store'\nexport { isRequestInsightsEnabled } from './span-store'\n\nconst MAX_REQUEST_INSIGHTS = 100\nconst REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store')\n\ntype RequestInsightsListener = (insight: RequestInsight) => void\ntype RequestInsightIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nconst REDACTED_VALUE = 'redacted'\nconst SAFE_SPAN_ATTRIBUTE_KEYS = new Set([\n 'http.method',\n 'http.route',\n 'http.status_code',\n 'http.url',\n 'net.peer.name',\n 'net.peer.port',\n 'next.fetch.cache_reason',\n 'next.fetch.cache_status',\n 'next.fetch.idx',\n 'next.route',\n 'next.rsc',\n 'next.segment',\n 'next.span_name',\n 'next.span_type',\n])\nconst SENSITIVE_PARAM_NAME_RE =\n /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i\n\nclass InMemoryRequestInsightsStore {\n private readonly requests = new Map<string, RequestInsight>()\n private readonly requestOrder: string[] = []\n private readonly listeners = new Set<RequestInsightsListener>()\n\n recordSpan(span: SpanStoreRecord): void {\n if (!span.requestId) {\n return\n }\n\n const insight = this.getOrCreateRequest(\n span,\n span.startTime ?? span.timestamp\n )\n\n const spanStartTime = span.startTime ?? span.timestamp\n const spanEndTime = span.durationMs\n ? spanStartTime + span.durationMs\n : spanStartTime\n const requestEndTime = insight.durationMs\n ? insight.startTime + insight.durationMs\n : insight.startTime\n\n insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? span.route\n insight.url = insight.url ?? sanitizeUrl(span.url)\n insight.startTime = Math.min(insight.startTime, spanStartTime)\n insight.durationMs =\n Math.max(requestEndTime, spanEndTime) - insight.startTime\n insight.status =\n insight.status === 'error' || span.status === 'error'\n ? 'error'\n : span.status === 'ok'\n ? 'ok'\n : insight.status\n\n insight.spans.push({\n name: span.name,\n startTime: spanStartTime,\n durationMs: span.durationMs,\n status: span.status,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n attributes: sanitizeSpanAttributes(span.attributes),\n links: sanitizeSpanLinks(span.links),\n events: sanitizeSpanEvents(span.events),\n error: span.error,\n })\n\n const fetch = getFetchInsight(span)\n if (fetch) {\n this.recordFetchForInsight(insight, fetch)\n }\n\n this.notify(insight)\n }\n\n recordFetch(identity: RequestInsightIdentity, fetch: RequestInsightFetch) {\n if (!identity.requestId) {\n return\n }\n\n const fetchStartTime = fetch.startTime ?? Date.now()\n const insight = this.getOrCreateRequest(identity, fetchStartTime)\n const fetchEndTime = fetch.durationMs\n ? fetchStartTime + fetch.durationMs\n : fetchStartTime\n const requestEndTime = insight.durationMs\n ? insight.startTime + insight.durationMs\n : insight.startTime\n\n insight.durationMs =\n Math.max(requestEndTime, fetchEndTime) - insight.startTime\n this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch))\n this.notify(insight)\n }\n\n getSnapshot(): RequestInsightsSnapshot {\n return {\n requests: this.requestOrder\n .map((requestId) => this.requests.get(requestId))\n .filter((request): request is RequestInsight => request !== undefined),\n }\n }\n\n subscribe(listener: RequestInsightsListener): () => void {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n clear(): void {\n this.requests.clear()\n this.requestOrder.length = 0\n }\n\n private notify(insight: RequestInsight): void {\n for (const listener of this.listeners) {\n listener(insight)\n }\n }\n\n private getOrCreateRequest(\n identity: RequestInsightIdentity,\n startTime: number\n ): RequestInsight {\n const requestId = identity.requestId!\n let insight = this.requests.get(requestId)\n\n if (!insight) {\n insight = {\n requestId,\n htmlRequestId: identity.htmlRequestId ?? requestId,\n route: identity.route,\n url: sanitizeUrl(identity.url),\n startTime,\n status: 'pending',\n spans: [],\n fetches: [],\n }\n this.requests.set(requestId, insight)\n this.requestOrder.push(requestId)\n this.trim()\n }\n\n insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? identity.route\n insight.url = insight.url ?? sanitizeUrl(identity.url)\n insight.startTime = Math.min(insight.startTime, startTime)\n\n return insight\n }\n\n private recordFetchForInsight(\n insight: RequestInsight,\n fetch: RequestInsightFetch\n ): void {\n if (\n insight.fetches.some(\n (existingFetch) =>\n existingFetch.url === fetch.url &&\n (existingFetch.index !== undefined && fetch.index !== undefined\n ? existingFetch.index === fetch.index\n : existingFetch.startTime === fetch.startTime)\n )\n ) {\n return\n }\n\n insight.fetches.push(sanitizeFetchInsight(fetch))\n }\n\n private trim(): void {\n while (this.requestOrder.length > MAX_REQUEST_INSIGHTS) {\n const requestId = this.requestOrder.shift()\n if (requestId) {\n this.requests.delete(requestId)\n }\n }\n }\n}\n\nexport function recordRequestInsightSpan(span: SpanStoreRecord): void {\n getRequestInsightsStore().recordSpan(span)\n}\n\nexport function recordRequestInsightFetch(\n identity: RequestInsightIdentity,\n fetch: RequestInsightFetch\n): void {\n getRequestInsightsStore().recordFetch(identity, fetch)\n}\n\nexport function getRequestInsightsSnapshot(): RequestInsightsSnapshot {\n return getRequestInsightsStore().getSnapshot()\n}\n\nexport function subscribeRequestInsights(\n listener: RequestInsightsListener\n): () => void {\n return getRequestInsightsStore().subscribe(listener)\n}\n\nexport function clearRequestInsightsForTest(): void {\n getRequestInsightsStore().clear()\n}\n\nfunction getRequestInsightsStore(): InMemoryRequestInsightsStore {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_STORE_KEY]?: InMemoryRequestInsightsStore\n }\n\n return (globalStore[REQUEST_INSIGHTS_STORE_KEY] ??=\n new InMemoryRequestInsightsStore())\n}\n\nfunction getFetchInsight(span: SpanStoreRecord): RequestInsightFetch | null {\n const attributes = span.attributes\n\n if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') {\n return null\n }\n\n return {\n url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url),\n method: getStringAttribute(attributes['http.method']),\n statusCode: getNumberAttribute(attributes['http.status_code']),\n startTime: span.startTime ?? span.timestamp,\n durationMs: span.durationMs,\n cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']),\n cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']),\n index: getNumberAttribute(attributes['next.fetch.idx']),\n }\n}\n\nfunction sanitizeFetchInsight(fetch: RequestInsightFetch): RequestInsightFetch {\n return {\n ...fetch,\n url: sanitizeUrl(fetch.url),\n }\n}\n\nfunction sanitizeSpanAttributes(\n attributes: SpanStoreRecord['attributes']\n): SpanStoreRecord['attributes'] {\n if (!attributes) {\n return undefined\n }\n\n const sanitized: NonNullable<SpanStoreRecord['attributes']> = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) {\n continue\n }\n\n sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined\n}\n\nfunction sanitizeSpanEvents(\n events: SpanStoreRecord['events']\n): SpanStoreRecord['events'] {\n return events?.map((event) => ({\n ...event,\n attributes: sanitizeSpanAttributes(event.attributes),\n }))\n}\n\nfunction sanitizeSpanLinks(\n links: SpanStoreRecord['links']\n): SpanStoreRecord['links'] {\n return links?.map((link) => ({\n ...link,\n attributes: sanitizeSpanAttributes(link.attributes),\n }))\n}\n\nfunction sanitizeUrlAttribute(value: AttributeValue): AttributeValue {\n return typeof value === 'string' ? (sanitizeUrl(value) ?? '') : value\n}\n\nfunction sanitizeUrl(value: string | undefined): string | undefined {\n if (!value) {\n return value\n }\n\n const isRelativeUrl = value.startsWith('/')\n\n try {\n const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value)\n\n url.username = ''\n url.password = ''\n\n for (const name of Array.from(url.searchParams.keys())) {\n if (SENSITIVE_PARAM_NAME_RE.test(name)) {\n url.searchParams.set(name, REDACTED_VALUE)\n }\n }\n\n return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href\n } catch {\n return value\n }\n}\n\nfunction getStringAttribute(value: AttributeValue | undefined) {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction getNumberAttribute(value: AttributeValue | undefined) {\n return typeof value === 'number' ? value : undefined\n}\n"],"names":["clearRequestInsightsForTest","getRequestInsightsSnapshot","isRequestInsightsEnabled","recordRequestInsightFetch","recordRequestInsightSpan","subscribeRequestInsights","MAX_REQUEST_INSIGHTS","REQUEST_INSIGHTS_STORE_KEY","Symbol","for","REDACTED_VALUE","SAFE_SPAN_ATTRIBUTE_KEYS","Set","SENSITIVE_PARAM_NAME_RE","InMemoryRequestInsightsStore","recordSpan","span","requestId","insight","getOrCreateRequest","startTime","timestamp","spanStartTime","spanEndTime","durationMs","requestEndTime","htmlRequestId","route","url","sanitizeUrl","Math","min","max","status","spans","push","name","traceId","spanId","parentSpanId","attributes","sanitizeSpanAttributes","links","sanitizeSpanLinks","events","sanitizeSpanEvents","error","fetch","getFetchInsight","recordFetchForInsight","notify","recordFetch","identity","fetchStartTime","Date","now","fetchEndTime","sanitizeFetchInsight","getSnapshot","requests","requestOrder","map","get","filter","request","undefined","subscribe","listener","listeners","add","delete","clear","length","fetches","set","trim","some","existingFetch","index","shift","Map","getRequestInsightsStore","globalStore","globalThis","getStringAttribute","method","statusCode","getNumberAttribute","cacheStatus","cacheReason","sanitized","key","value","Object","entries","has","sanitizeUrlAttribute","keys","event","link","isRelativeUrl","startsWith","URL","username","password","Array","from","searchParams","test","pathname","search","hash","href"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/request-insights.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type {\n RequestInsight,\n RequestInsightFetch,\n RequestInsightsSnapshot,\n} from '../../../next-devtools/shared/request-insights'\nimport type { SpanStoreRecord } from './span-store'\nexport { isRequestInsightsEnabled } from './span-store'\n\nconst MAX_REQUEST_INSIGHTS = 100\nconst REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store')\nconst CLIENT_COMPONENT_LOADING_SPAN_TYPE =\n 'NextNodeServer.clientComponentLoading'\n\ntype RequestInsightsListener = (insight: RequestInsight) => void\ntype RequestInsightIdentity = {\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nconst REDACTED_VALUE = 'redacted'\nconst SAFE_SPAN_ATTRIBUTE_KEYS = new Set([\n 'http.method',\n 'http.route',\n 'http.status_code',\n 'http.url',\n 'net.peer.name',\n 'net.peer.port',\n 'next.fetch.cache_reason',\n 'next.fetch.cache_status',\n 'next.fetch.idx',\n 'next.route',\n 'next.rsc',\n 'next.segment',\n 'next.span_category',\n 'next.span_name',\n 'next.span_type',\n])\nconst SENSITIVE_PARAM_NAME_RE =\n /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i\n\nclass InMemoryRequestInsightsStore {\n private readonly requests = new Map<string, RequestInsight>()\n private readonly requestTimings = new Map<\n string,\n { startTime: number; durationMs: number }\n >()\n private readonly requestOrder: string[] = []\n private readonly listeners = new Set<RequestInsightsListener>()\n\n recordSpan(span: SpanStoreRecord): void {\n if (!span.requestId) {\n return\n }\n\n const insight = this.getOrCreateRequest(\n span,\n span.startTime ?? span.timestamp\n )\n\n const spanStartTime = span.startTime ?? span.timestamp\n insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? span.route\n insight.url = insight.url ?? sanitizeUrl(span.url)\n this.updateTiming(\n insight,\n spanStartTime,\n span.durationMs,\n span.attributes?.['next.span_type'] === 'BaseServer.handleRequest'\n )\n insight.status =\n insight.status === 'error' || span.status === 'error'\n ? 'error'\n : span.status === 'ok'\n ? 'ok'\n : insight.status\n\n insight.spans.push({\n name: span.name,\n startTime: spanStartTime,\n durationMs: span.durationMs,\n status: span.status,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n attributes: sanitizeSpanAttributes(span.attributes),\n links: sanitizeSpanLinks(span.links),\n events: sanitizeSpanEvents(span.events),\n error: span.error,\n })\n\n const fetch = getFetchInsight(span)\n if (fetch) {\n this.recordFetchForInsight(insight, fetch)\n }\n\n this.notify(insight)\n }\n\n recordFetch(identity: RequestInsightIdentity, fetch: RequestInsightFetch) {\n if (!identity.requestId) {\n return\n }\n\n const fetchStartTime = fetch.startTime ?? Date.now()\n const insight = this.getOrCreateRequest(identity, fetchStartTime)\n this.updateTiming(insight, fetchStartTime, fetch.durationMs, false)\n this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch))\n this.notify(insight)\n }\n\n getSnapshot(): RequestInsightsSnapshot {\n return {\n requests: this.requestOrder\n .map((requestId) => this.requests.get(requestId))\n .filter((request): request is RequestInsight => request !== undefined),\n }\n }\n\n subscribe(listener: RequestInsightsListener): () => void {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n clear(): void {\n this.requests.clear()\n this.requestTimings.clear()\n this.requestOrder.length = 0\n }\n\n private updateTiming(\n insight: RequestInsight,\n startTime: number,\n durationMs: number | undefined,\n isRequestSpan: boolean\n ): void {\n if (isRequestSpan && durationMs !== undefined) {\n const requestTiming = { startTime, durationMs }\n this.requestTimings.set(insight.requestId, requestTiming)\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const requestTiming = this.requestTimings.get(insight.requestId)\n if (requestTiming) {\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const endTime = startTime + (durationMs ?? 0)\n const requestEndTime = insight.startTime + (insight.durationMs ?? 0)\n insight.startTime = Math.min(insight.startTime, startTime)\n insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime\n }\n\n private notify(insight: RequestInsight): void {\n for (const listener of this.listeners) {\n listener(insight)\n }\n }\n\n private getOrCreateRequest(\n identity: RequestInsightIdentity,\n startTime: number\n ): RequestInsight {\n const requestId = identity.requestId!\n let insight = this.requests.get(requestId)\n\n if (!insight) {\n insight = {\n requestId,\n htmlRequestId: identity.htmlRequestId ?? requestId,\n route: identity.route,\n url: sanitizeUrl(identity.url),\n startTime,\n status: 'pending',\n spans: [],\n fetches: [],\n }\n this.requests.set(requestId, insight)\n this.requestOrder.push(requestId)\n this.trim()\n }\n\n insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? identity.route\n insight.url = insight.url ?? sanitizeUrl(identity.url)\n insight.startTime = Math.min(insight.startTime, startTime)\n\n return insight\n }\n\n private recordFetchForInsight(\n insight: RequestInsight,\n fetch: RequestInsightFetch\n ): void {\n if (\n insight.fetches.some(\n (existingFetch) =>\n existingFetch.url === fetch.url &&\n (existingFetch.index !== undefined && fetch.index !== undefined\n ? existingFetch.index === fetch.index\n : existingFetch.startTime === fetch.startTime)\n )\n ) {\n return\n }\n\n insight.fetches.push(sanitizeFetchInsight(fetch))\n }\n\n private trim(): void {\n while (this.requestOrder.length > MAX_REQUEST_INSIGHTS) {\n const requestId = this.requestOrder.shift()\n if (requestId) {\n this.requests.delete(requestId)\n this.requestTimings.delete(requestId)\n }\n }\n }\n}\n\nexport function recordRequestInsightSpan(span: SpanStoreRecord): void {\n if (\n span.attributes?.['next.span_type'] === CLIENT_COMPONENT_LOADING_SPAN_TYPE\n ) {\n return\n }\n\n getRequestInsightsStore().recordSpan(span)\n}\n\nexport function recordRequestInsightFetch(\n identity: RequestInsightIdentity,\n fetch: RequestInsightFetch\n): void {\n getRequestInsightsStore().recordFetch(identity, fetch)\n}\n\nexport function getRequestInsightsSnapshot(): RequestInsightsSnapshot {\n return getRequestInsightsStore().getSnapshot()\n}\n\nexport function subscribeRequestInsights(\n listener: RequestInsightsListener\n): () => void {\n return getRequestInsightsStore().subscribe(listener)\n}\n\nexport function clearRequestInsightsForTest(): void {\n getRequestInsightsStore().clear()\n}\n\nfunction getRequestInsightsStore(): InMemoryRequestInsightsStore {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_STORE_KEY]?: InMemoryRequestInsightsStore\n }\n\n return (globalStore[REQUEST_INSIGHTS_STORE_KEY] ??=\n new InMemoryRequestInsightsStore())\n}\n\nfunction getFetchInsight(span: SpanStoreRecord): RequestInsightFetch | null {\n const attributes = span.attributes\n\n if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') {\n return null\n }\n\n return {\n url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url),\n method: getStringAttribute(attributes['http.method']),\n statusCode: getNumberAttribute(attributes['http.status_code']),\n startTime: span.startTime ?? span.timestamp,\n durationMs: span.durationMs,\n cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']),\n cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']),\n index: getNumberAttribute(attributes['next.fetch.idx']),\n }\n}\n\nfunction sanitizeFetchInsight(fetch: RequestInsightFetch): RequestInsightFetch {\n return {\n ...fetch,\n url: sanitizeUrl(fetch.url),\n }\n}\n\nfunction sanitizeSpanAttributes(\n attributes: SpanStoreRecord['attributes']\n): SpanStoreRecord['attributes'] {\n if (!attributes) {\n return undefined\n }\n\n const sanitized: NonNullable<SpanStoreRecord['attributes']> = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) {\n continue\n }\n\n sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined\n}\n\nfunction sanitizeSpanEvents(\n events: SpanStoreRecord['events']\n): SpanStoreRecord['events'] {\n return events?.map((event) => ({\n ...event,\n attributes: sanitizeSpanAttributes(event.attributes),\n }))\n}\n\nfunction sanitizeSpanLinks(\n links: SpanStoreRecord['links']\n): SpanStoreRecord['links'] {\n return links?.map((link) => ({\n ...link,\n attributes: sanitizeSpanAttributes(link.attributes),\n }))\n}\n\nfunction sanitizeUrlAttribute(value: AttributeValue): AttributeValue {\n return typeof value === 'string' ? (sanitizeUrl(value) ?? '') : value\n}\n\nfunction sanitizeUrl(value: string | undefined): string | undefined {\n if (!value) {\n return value\n }\n\n const isRelativeUrl = value.startsWith('/')\n\n try {\n const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value)\n\n url.username = ''\n url.password = ''\n\n for (const name of Array.from(url.searchParams.keys())) {\n if (SENSITIVE_PARAM_NAME_RE.test(name)) {\n url.searchParams.set(name, REDACTED_VALUE)\n }\n }\n\n return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href\n } catch {\n return value\n }\n}\n\nfunction getStringAttribute(value: AttributeValue | undefined) {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction getNumberAttribute(value: AttributeValue | undefined) {\n return typeof value === 'number' ? value : undefined\n}\n"],"names":["clearRequestInsightsForTest","getRequestInsightsSnapshot","isRequestInsightsEnabled","recordRequestInsightFetch","recordRequestInsightSpan","subscribeRequestInsights","MAX_REQUEST_INSIGHTS","REQUEST_INSIGHTS_STORE_KEY","Symbol","for","CLIENT_COMPONENT_LOADING_SPAN_TYPE","REDACTED_VALUE","SAFE_SPAN_ATTRIBUTE_KEYS","Set","SENSITIVE_PARAM_NAME_RE","InMemoryRequestInsightsStore","recordSpan","span","requestId","insight","getOrCreateRequest","startTime","timestamp","spanStartTime","htmlRequestId","route","url","sanitizeUrl","updateTiming","durationMs","attributes","status","spans","push","name","traceId","spanId","parentSpanId","sanitizeSpanAttributes","links","sanitizeSpanLinks","events","sanitizeSpanEvents","error","fetch","getFetchInsight","recordFetchForInsight","notify","recordFetch","identity","fetchStartTime","Date","now","sanitizeFetchInsight","getSnapshot","requests","requestOrder","map","get","filter","request","undefined","subscribe","listener","listeners","add","delete","clear","requestTimings","length","isRequestSpan","requestTiming","set","endTime","requestEndTime","Math","min","max","fetches","trim","some","existingFetch","index","shift","Map","getRequestInsightsStore","globalStore","globalThis","getStringAttribute","method","statusCode","getNumberAttribute","cacheStatus","cacheReason","sanitized","key","value","Object","entries","has","sanitizeUrlAttribute","keys","event","link","isRelativeUrl","startsWith","URL","username","password","Array","from","searchParams","test","pathname","search","hash","href"],"mappings":"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","ignoreList":[0]} |
@@ -56,2 +56,5 @@ "use strict"; | ||
| function isRequestInsightsEnabled() { | ||
| if (!process.env.__NEXT_DEV_SERVER) { | ||
| return false; | ||
| } | ||
| const value = process.env.__NEXT_REQUEST_INSIGHTS; | ||
@@ -58,0 +61,0 @@ return isEnabledEnvValue(value); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/span-store.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\n\nexport type SpanStoreAttributes = Record<string, AttributeValue>\n\nexport type SpanStoreLink = {\n traceId: string\n spanId: string\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreEvent = {\n name: string\n timestamp: number\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreRecord = {\n name: string\n timestamp: number\n startTime?: number\n durationMs?: number\n status?: 'ok' | 'error'\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n attributes?: SpanStoreAttributes\n links?: SpanStoreLink[]\n events?: SpanStoreEvent[]\n error?: {\n type?: string\n message?: string\n }\n}\n\ntype SpanRecorderForTest = (span: SpanStoreRecord) => void\n\nlet spanRecorderForTest: SpanRecorderForTest | undefined\n\nexport function recordSpan(record: Omit<SpanStoreRecord, 'timestamp'>): void {\n if (!isLocalSpanRecordingEnabled()) {\n return\n }\n\n const spanRecord: SpanStoreRecord = {\n timestamp: Date.now(),\n ...record,\n }\n\n spanRecorderForTest?.(spanRecord)\n\n if (isRequestInsightsEnabled() && spanRecord.requestId) {\n const { recordRequestInsightSpan } =\n require('./request-insights') as typeof import('./request-insights')\n recordRequestInsightSpan(spanRecord)\n }\n}\n\nexport function setSpanRecorderForTest(\n recorder: SpanRecorderForTest | undefined\n): void {\n spanRecorderForTest = recorder\n}\n\nexport function isLocalSpanRecordingEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return spanRecorderForTest !== undefined || isRequestInsightsEnabled()\n}\n\nexport function isRequestInsightsEnabled(): boolean {\n const value = process.env.__NEXT_REQUEST_INSIGHTS\n return isEnabledEnvValue(value)\n}\n\nfunction isEnabledEnvValue(value: string | undefined): boolean {\n return value === '1' || value === 'true' || (value as unknown) === true\n}\n"],"names":["isLocalSpanRecordingEnabled","isRequestInsightsEnabled","recordSpan","setSpanRecorderForTest","spanRecorderForTest","record","spanRecord","timestamp","Date","now","requestId","recordRequestInsightSpan","require","recorder","process","env","__NEXT_DEV_SERVER","undefined","value","__NEXT_REQUEST_INSIGHTS","isEnabledEnvValue"],"mappings":";;;;;;;;;;;;;;;;;IAmEgBA,2BAA2B;eAA3BA;;IAQAC,wBAAwB;eAAxBA;;IAjCAC,UAAU;eAAVA;;IAmBAC,sBAAsB;eAAtBA;;;AArBhB,IAAIC;AAEG,SAASF,WAAWG,MAA0C;IACnE,IAAI,CAACL,+BAA+B;QAClC;IACF;IAEA,MAAMM,aAA8B;QAClCC,WAAWC,KAAKC,GAAG;QACnB,GAAGJ,MAAM;IACX;IAEAD,uCAAAA,oBAAsBE;IAEtB,IAAIL,8BAA8BK,WAAWI,SAAS,EAAE;QACtD,MAAM,EAAEC,wBAAwB,EAAE,GAChCC,QAAQ;QACVD,yBAAyBL;IAC3B;AACF;AAEO,SAASH,uBACdU,QAAyC;IAEzCT,sBAAsBS;AACxB;AAEO,SAASb;IACd,IAAI,CAACc,QAAQC,GAAG,CAACC,iBAAiB,EAAE;QAClC,OAAO;IACT;IAEA,OAAOZ,wBAAwBa,aAAahB;AAC9C;AAEO,SAASA;IACd,MAAMiB,QAAQJ,QAAQC,GAAG,CAACI,uBAAuB;IACjD,OAAOC,kBAAkBF;AAC3B;AAEA,SAASE,kBAAkBF,KAAyB;IAClD,OAAOA,UAAU,OAAOA,UAAU,UAAU,AAACA,UAAsB;AACrE","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/span-store.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\n\nexport type SpanStoreAttributes = Record<string, AttributeValue>\n\nexport type SpanStoreLink = {\n traceId: string\n spanId: string\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreEvent = {\n name: string\n timestamp: number\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreRecord = {\n name: string\n timestamp: number\n startTime?: number\n durationMs?: number\n status?: 'ok' | 'error'\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n htmlRequestId?: string\n route?: string\n url?: string\n attributes?: SpanStoreAttributes\n links?: SpanStoreLink[]\n events?: SpanStoreEvent[]\n error?: {\n type?: string\n message?: string\n }\n}\n\ntype SpanRecorderForTest = (span: SpanStoreRecord) => void\n\nlet spanRecorderForTest: SpanRecorderForTest | undefined\n\nexport function recordSpan(record: Omit<SpanStoreRecord, 'timestamp'>): void {\n if (!isLocalSpanRecordingEnabled()) {\n return\n }\n\n const spanRecord: SpanStoreRecord = {\n timestamp: Date.now(),\n ...record,\n }\n\n spanRecorderForTest?.(spanRecord)\n\n if (isRequestInsightsEnabled() && spanRecord.requestId) {\n const { recordRequestInsightSpan } =\n require('./request-insights') as typeof import('./request-insights')\n recordRequestInsightSpan(spanRecord)\n }\n}\n\nexport function setSpanRecorderForTest(\n recorder: SpanRecorderForTest | undefined\n): void {\n spanRecorderForTest = recorder\n}\n\nexport function isLocalSpanRecordingEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return spanRecorderForTest !== undefined || isRequestInsightsEnabled()\n}\n\nexport function isRequestInsightsEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n const value = process.env.__NEXT_REQUEST_INSIGHTS\n return isEnabledEnvValue(value)\n}\n\nfunction isEnabledEnvValue(value: string | undefined): boolean {\n return value === '1' || value === 'true' || (value as unknown) === true\n}\n"],"names":["isLocalSpanRecordingEnabled","isRequestInsightsEnabled","recordSpan","setSpanRecorderForTest","spanRecorderForTest","record","spanRecord","timestamp","Date","now","requestId","recordRequestInsightSpan","require","recorder","process","env","__NEXT_DEV_SERVER","undefined","value","__NEXT_REQUEST_INSIGHTS","isEnabledEnvValue"],"mappings":";;;;;;;;;;;;;;;;;IAmEgBA,2BAA2B;eAA3BA;;IAQAC,wBAAwB;eAAxBA;;IAjCAC,UAAU;eAAVA;;IAmBAC,sBAAsB;eAAtBA;;;AArBhB,IAAIC;AAEG,SAASF,WAAWG,MAA0C;IACnE,IAAI,CAACL,+BAA+B;QAClC;IACF;IAEA,MAAMM,aAA8B;QAClCC,WAAWC,KAAKC,GAAG;QACnB,GAAGJ,MAAM;IACX;IAEAD,uCAAAA,oBAAsBE;IAEtB,IAAIL,8BAA8BK,WAAWI,SAAS,EAAE;QACtD,MAAM,EAAEC,wBAAwB,EAAE,GAChCC,QAAQ;QACVD,yBAAyBL;IAC3B;AACF;AAEO,SAASH,uBACdU,QAAyC;IAEzCT,sBAAsBS;AACxB;AAEO,SAASb;IACd,IAAI,CAACc,QAAQC,GAAG,CAACC,iBAAiB,EAAE;QAClC,OAAO;IACT;IAEA,OAAOZ,wBAAwBa,aAAahB;AAC9C;AAEO,SAASA;IACd,IAAI,CAACa,QAAQC,GAAG,CAACC,iBAAiB,EAAE;QAClC,OAAO;IACT;IAEA,MAAME,QAAQJ,QAAQC,GAAG,CAACI,uBAAuB;IACjD,OAAOC,kBAAkBF;AAC3B;AAEA,SAASE,kBAAkBF,KAAyB;IAClD,OAAOA,UAAU,OAAOA,UAAU,UAAU,AAACA,UAAsB;AACrE","ignoreList":[0]} |
@@ -81,3 +81,3 @@ import type { FetchEventResult } from '../../web/types'; | ||
| } | ||
| type NextAttributeNames = 'next.route' | 'next.page' | 'next.rsc' | 'next.segment' | 'next.span_name' | 'next.span_type' | 'next.clientComponentLoadCount'; | ||
| type NextAttributeNames = 'next.route' | 'next.page' | 'next.rsc' | 'next.segment' | 'next.span_category' | 'next.span_name' | 'next.span_type' | 'next.clientComponentLoadCount'; | ||
| type OTELAttributeNames = `http.${string}` | `net.${string}`; | ||
@@ -84,0 +84,0 @@ type AttributeNames = NextAttributeNames | OTELAttributeNames; |
@@ -171,6 +171,6 @@ "use strict"; | ||
| trace(...args) { | ||
| var _getLocalSpanRecorder; | ||
| const [type, fnOrOptions, fnOrEmpty] = args; | ||
| const tracingEnabled = Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled(); | ||
| const localSpanRecordingEnabled = ((_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; | ||
| const localSpanRecorder = getLocalSpanRecorder(); | ||
| const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; | ||
| if (!tracingEnabled && !localSpanRecordingEnabled) { | ||
@@ -190,3 +190,5 @@ return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty(); | ||
| const spanName = options.spanName ?? type; | ||
| if (!_constants.NextVanillaSpanAllowlist.has(type) && process.env.NEXT_OTEL_VERBOSE !== '1' || options.hideSpan) { | ||
| const shouldDelegateSpan = _constants.NextVanillaSpanAllowlist.has(type) || process.env.NEXT_OTEL_VERBOSE === '1'; | ||
| const shouldTraceSpan = shouldDelegateSpan || ((localSpanRecorder == null ? void 0 : localSpanRecorder.isRequestInsightsEnabled()) ?? false); | ||
| if (!shouldTraceSpan || options.hideSpan) { | ||
| return fn(); | ||
@@ -207,2 +209,3 @@ } | ||
| options.attributes = { | ||
| 'next.span_category': 'nextjs', | ||
| 'next.span_name': spanName, | ||
@@ -212,3 +215,3 @@ 'next.span_type': type, | ||
| }; | ||
| return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled, localSpanRecordingEnabled, (span)=>{ | ||
| return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled && shouldDelegateSpan, localSpanRecordingEnabled, (span)=>{ | ||
| let startTime; | ||
@@ -289,2 +292,3 @@ if (NEXT_OTEL_PERFORMANCE_PREFIX && type && _constants.LogSpanAllowList.has(type)) { | ||
| links: options.links, | ||
| startTime: options.startTime, | ||
| delegateSpan, | ||
@@ -303,3 +307,3 @@ traceId: (delegateSpanContext == null ? void 0 : delegateSpanContext.traceId) ?? (parentSpanContext == null ? void 0 : parentSpanContext.traceId), | ||
| ]; | ||
| if (!_constants.NextVanillaSpanAllowlist.has(name) && process.env.NEXT_OTEL_VERBOSE !== '1') { | ||
| if (!_constants.NextVanillaSpanAllowlist.has(name) && process.env.NEXT_OTEL_VERBOSE !== '1' && !process.env.__NEXT_DEV_SERVER) { | ||
| return fn; | ||
@@ -330,4 +334,15 @@ } | ||
| var _getLocalSpanRecorder; | ||
| const [type, options] = args; | ||
| const parentContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan()) ?? context.active(); | ||
| const [type, passedOptions] = args; | ||
| const options = passedOptions ? { | ||
| ...passedOptions, | ||
| attributes: { | ||
| 'next.span_category': 'nextjs', | ||
| ...passedOptions.attributes | ||
| } | ||
| } : { | ||
| attributes: { | ||
| 'next.span_category': 'nextjs' | ||
| } | ||
| }; | ||
| const parentContext = this.getSpanContext(options.parentSpan ?? this.getActiveScopeSpan()) ?? context.active(); | ||
| const localSpanRecordingEnabled = ((_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; | ||
@@ -338,3 +353,3 @@ if (!localSpanRecordingEnabled) { | ||
| const delegateSpan = this.isOpenTelemetryEnabled() ? this.getTracerInstance().startSpan(type, options, parentContext) : undefined; | ||
| return this.createLocalRecordingSpan(type, options ?? {}, parentContext, delegateSpan); | ||
| return this.createLocalRecordingSpan(type, options, parentContext, delegateSpan); | ||
| } | ||
@@ -341,0 +356,0 @@ getSpanContext(parentSpan) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/tracer.ts"],"sourcesContent":["import type { FetchEventResult } from '../../web/types'\nimport type { TextMapSetter } from '@opentelemetry/api'\nimport type { SpanTypes } from './constants'\nimport type { LocalSpanRecorder } from './local-span-recorder'\nimport { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'\n\nimport type {\n Context,\n ContextAPI,\n Span,\n SpanOptions,\n Tracer,\n AttributeValue,\n TextMapGetter,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport { isThenable } from '../../../shared/lib/is-thenable'\n\nconst NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX\nconst LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder')\n\ntype GlobalWithLocalSpanRecorder = typeof globalThis & {\n [LOCAL_SPAN_RECORDER_KEY]?: LocalSpanRecorder\n}\n\nlet api: typeof import('next/dist/compiled/@opentelemetry/api')\n\nfunction getLocalSpanRecorder() {\n if (process.env.__NEXT_DEV_SERVER) {\n return (globalThis as GlobalWithLocalSpanRecorder)[LOCAL_SPAN_RECORDER_KEY]\n } else {\n return undefined\n }\n}\n\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (process.env.NEXT_RUNTIME === 'edge') {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n} else {\n try {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n } catch (err) {\n api =\n require('next/dist/compiled/@opentelemetry/api') as typeof import('next/dist/compiled/@opentelemetry/api')\n }\n}\n\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } =\n api\n\nexport class BubbledError extends Error {\n constructor(\n public readonly bubble?: boolean,\n public readonly result?: FetchEventResult\n ) {\n super()\n }\n}\n\nexport function isBubbledError(error: unknown): error is BubbledError {\n if (typeof error !== 'object' || error === null) return false\n return error instanceof BubbledError\n}\n\nconst closeSpanWithError = (span: Span, error?: Error) => {\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true)\n } else {\n if (error) {\n span.recordException(error)\n span.setAttribute('error.type', error.name)\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message })\n }\n span.end()\n}\n\ntype TracerSpanOptions = Omit<SpanOptions, 'attributes'> & {\n parentSpan?: Span\n spanName?: string\n attributes?: Partial<Record<AttributeNames, AttributeValue | undefined>>\n hideSpan?: boolean\n}\n\ninterface NextTracer {\n getContext(): ContextAPI\n\n /**\n * Instruments a function by automatically creating a span activated on its\n * scope.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its second parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n *\n */\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n\n /**\n * Wrap a function to automatically create a span activated on its\n * scope when it's called.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its last parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n */\n wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * This method do NOT modify the current Context by default. In result, any inner span will not\n * automatically set its parent context to the span created by this method unless manually activate\n * context via `tracer.getContext().with`. `trace`, or `wrap` is generally recommended as it gracefully\n * handles context activation. (ref: https://github.com/open-telemetry/opentelemetry-js/issues/1923)\n */\n startSpan(type: SpanTypes): Span\n startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n\n /**\n * Returns currently activated span if current context is in the scope of the span.\n * Returns undefined otherwise.\n */\n getActiveScopeSpan(): Span | undefined\n\n /**\n * Returns trace propagation data for the currently active context. The format is equal to data provided\n * through the OpenTelemetry propagator API.\n */\n getTracePropagationData(): ClientTraceDataEntry[]\n\n /**\n * Executes a function with the given span set as the active span in the context.\n * This allows child spans created within the function to automatically parent to this span.\n */\n withSpan<T>(span: Span, fn: () => T): T\n}\n\ntype NextAttributeNames =\n | 'next.route'\n | 'next.page'\n | 'next.rsc'\n | 'next.segment'\n | 'next.span_name'\n | 'next.span_type'\n | 'next.clientComponentLoadCount'\ntype OTELAttributeNames = `http.${string}` | `net.${string}`\ntype AttributeNames = NextAttributeNames | OTELAttributeNames\n\n/** we use this map to propagate attributes from nested spans to the top span */\nconst rootSpanAttributesStore = new Map<\n number,\n Map<AttributeNames, AttributeValue | undefined>\n>()\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId')\nlet lastSpanId = 0\nconst getSpanId = () => lastSpanId++\n\nexport interface ClientTraceDataEntry {\n key: string\n value: string\n}\n\nconst clientTraceDataSetter: TextMapSetter<ClientTraceDataEntry[]> = {\n set(carrier, key, value) {\n carrier.push({\n key,\n value,\n })\n },\n}\n\nclass NextTracerImpl implements NextTracer {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */\n private getTracerInstance(): Tracer {\n return trace.getTracer('next.js', '0.0.1')\n }\n\n private isOpenTelemetryEnabled(): boolean {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan?.isRecording()) {\n return true\n }\n\n const tracerProvider = trace.getTracerProvider() as {\n getDelegate?: () => { constructor?: { name?: string } } | undefined\n }\n\n if (!('getDelegate' in tracerProvider)) {\n return true\n }\n\n return (\n tracerProvider.getDelegate?.()?.constructor?.name !== 'NoopTracerProvider'\n )\n }\n\n public getContext(): ContextAPI {\n return context\n }\n\n public getTracePropagationData(): ClientTraceDataEntry[] {\n const activeContext = context.active()\n const entries: ClientTraceDataEntry[] = []\n propagation.inject(activeContext, entries, clientTraceDataSetter)\n return entries\n }\n\n public getActiveScopeSpan(): Span | undefined {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan || !process.env.__NEXT_DEV_SERVER) {\n return activeSpan\n }\n return getLocalSpanRecorder()?.getActiveLocalSpan()\n }\n\n /**\n * Run `fn` with the active span cleared, so spans created inside become new\n * roots (or parent to incoming propagated context). Used for in-process\n * Node.js middleware so its span is a sibling of the request span, matching\n * edge middleware which runs in a detached sandbox.\n */\n public runWithDetachedContext<T>(fn: () => T): T {\n if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {\n return fn()\n }\n return context.with(ROOT_CONTEXT, fn)\n }\n\n public withPropagatedContext<T, C>(\n carrier: C,\n fn: () => T,\n getter?: TextMapGetter<C>,\n force = false\n ): T {\n const activeContext = context.active()\n\n if (\n !NEXT_OTEL_PERFORMANCE_PREFIX &&\n !this.isOpenTelemetryEnabled() &&\n !trace.getSpanContext(activeContext)\n ) {\n return fn()\n }\n\n if (force) {\n const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter)\n\n if (trace.getSpanContext(remoteContext)) {\n return context.with(remoteContext, fn)\n }\n\n // Preserve the current active span while still merging any extracted\n // baggage/context values from the carrier.\n const mergedContext = propagation.extract(activeContext, carrier, getter)\n return context.with(mergedContext, fn)\n }\n\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn()\n }\n\n const remoteContext = propagation.extract(activeContext, carrier, getter)\n return context.with(remoteContext, fn)\n }\n\n // Trace, wrap implementation is inspired by datadog trace implementation\n // (https://datadoghq.dev/dd-trace-js/interfaces/tracer.html#trace).\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(...args: Array<any>) {\n const [type, fnOrOptions, fnOrEmpty] = args\n const tracingEnabled =\n Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled()\n const localSpanRecordingEnabled =\n getLocalSpanRecorder()?.isLocalSpanRecordingEnabled() ?? false\n\n if (!tracingEnabled && !localSpanRecordingEnabled) {\n return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty()\n }\n\n // coerce options form overload\n const {\n fn,\n options,\n }: {\n fn: (span?: Span, done?: (error?: Error) => any) => T | Promise<T>\n options: TracerSpanOptions\n } =\n typeof fnOrOptions === 'function'\n ? {\n fn: fnOrOptions,\n options: {},\n }\n : {\n fn: fnOrEmpty,\n options: { ...fnOrOptions },\n }\n\n const spanName = options.spanName ?? type\n\n if (\n (!NextVanillaSpanAllowlist.has(type) &&\n process.env.NEXT_OTEL_VERBOSE !== '1') ||\n options.hideSpan\n ) {\n return fn()\n }\n\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = this.getSpanContext(\n options?.parentSpan ?? this.getActiveScopeSpan()\n )\n\n if (!spanContext) {\n spanContext = context?.active() ?? ROOT_CONTEXT\n }\n // Check if there's already a root span in the store for this trace\n // We are intentionally not checking whether there is an active context\n // from outside of nextjs to ensure that we can provide the same level\n // of telemetry when using a custom server\n const existingRootSpanId = spanContext.getValue(rootSpanIdKey)\n const isRootSpan =\n typeof existingRootSpanId !== 'number' ||\n !rootSpanAttributesStore.has(existingRootSpanId)\n\n const spanId = getSpanId()\n\n options.attributes = {\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes,\n }\n\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), () =>\n this.runWithActiveSpan(\n spanName,\n options,\n spanContext,\n tracingEnabled,\n localSpanRecordingEnabled,\n (span: Span) => {\n let startTime: number | undefined\n if (\n NEXT_OTEL_PERFORMANCE_PREFIX &&\n type &&\n LogSpanAllowList.has(type)\n ) {\n startTime =\n 'performance' in globalThis && 'measure' in performance\n ? globalThis.performance.now()\n : undefined\n }\n\n let cleanedUp = false\n const onCleanup = () => {\n if (cleanedUp) return\n cleanedUp = true\n rootSpanAttributesStore.delete(spanId)\n if (startTime) {\n performance.measure(\n `${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(\n type.split('.').pop() || ''\n ).replace(\n /[A-Z]/g,\n (match: string) => '-' + match.toLowerCase()\n )}`,\n {\n start: startTime,\n end: performance.now(),\n }\n )\n }\n }\n\n if (isRootSpan) {\n rootSpanAttributesStore.set(\n spanId,\n new Map(\n Object.entries(options.attributes ?? {}) as [\n AttributeNames,\n AttributeValue | undefined,\n ][]\n )\n )\n }\n if (fn.length > 1) {\n try {\n return fn(span, (err) => {\n if (err) {\n closeSpanWithError(span, err)\n } else {\n span.end()\n }\n })\n } catch (err: any) {\n closeSpanWithError(span, err)\n throw err\n } finally {\n onCleanup()\n }\n }\n\n try {\n const result = fn(span)\n if (isThenable(result)) {\n // If there's error make sure it throws\n return result\n .then((res) => {\n span.end()\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res\n })\n .catch((err) => {\n closeSpanWithError(span, err)\n throw err\n })\n .finally(onCleanup)\n } else {\n span.end()\n onCleanup()\n }\n\n return result\n } catch (err: any) {\n closeSpanWithError(span, err)\n onCleanup()\n throw err\n }\n }\n )\n )\n }\n\n private runWithActiveSpan<T>(\n spanName: string,\n options: TracerSpanOptions,\n parentContext: Context,\n tracingEnabled: boolean,\n localSpanRecordingEnabled: boolean,\n fn: (span: Span) => T\n ): T {\n if (tracingEnabled) {\n return this.getTracerInstance().startActiveSpan(\n spanName,\n options,\n (span: Span) =>\n fn(\n localSpanRecordingEnabled\n ? this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n span\n )\n : span\n )\n )\n }\n\n const span = this.createLocalRecordingSpan(spanName, options, parentContext)\n const activeContext = trace.setSpan(context.active(), span)\n\n return getLocalSpanRecorder()!.withLocalSpan(span, () =>\n context.with(activeContext, fn, undefined, span)\n )\n }\n\n private createLocalRecordingSpan(\n name: string,\n options: TracerSpanOptions,\n parentContext: Context,\n delegateSpan?: Span\n ): Span {\n const parentSpanContext = trace.getSpanContext(parentContext)\n const delegateSpanContext = delegateSpan?.spanContext()\n\n return getLocalSpanRecorder()!.createLocalSpan({\n name,\n attributes: options.attributes,\n links: options.links,\n delegateSpan,\n traceId: delegateSpanContext?.traceId ?? parentSpanContext?.traceId,\n spanId: delegateSpanContext?.spanId,\n parentSpanId: parentSpanContext?.spanId,\n })\n }\n\n public wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n public wrap(...args: Array<any>) {\n const tracer = this\n const [name, options, fn] =\n args.length === 3 ? args : [args[0], {}, args[1]]\n\n if (\n !NextVanillaSpanAllowlist.has(name) &&\n process.env.NEXT_OTEL_VERBOSE !== '1'\n ) {\n return fn\n }\n\n return function (this: any) {\n let optionsObj = options\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments)\n }\n\n const lastArgId = arguments.length - 1\n const cb = arguments[lastArgId]\n\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb)\n return tracer.trace(name, optionsObj, (_span, done) => {\n arguments[lastArgId] = function (err: any) {\n done?.(err)\n return scopeBoundCb.apply(this, arguments)\n }\n\n return fn.apply(this, arguments)\n })\n } else {\n return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))\n }\n }\n }\n\n public startSpan(type: SpanTypes): Span\n public startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n public startSpan(...args: Array<any>): Span {\n const [type, options]: [string, TracerSpanOptions | undefined] = args as any\n\n const parentContext =\n this.getSpanContext(options?.parentSpan ?? this.getActiveScopeSpan()) ??\n context.active()\n const localSpanRecordingEnabled =\n getLocalSpanRecorder()?.isLocalSpanRecordingEnabled() ?? false\n\n if (!localSpanRecordingEnabled) {\n return this.getTracerInstance().startSpan(type, options, parentContext)\n }\n\n const delegateSpan = this.isOpenTelemetryEnabled()\n ? this.getTracerInstance().startSpan(type, options, parentContext)\n : undefined\n\n return this.createLocalRecordingSpan(\n type,\n options ?? {},\n parentContext,\n delegateSpan\n )\n }\n\n private getSpanContext(parentSpan?: Span) {\n const spanContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined\n\n return spanContext\n }\n\n public getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n return rootSpanAttributesStore.get(spanId)\n }\n\n public setRootSpanAttribute(key: AttributeNames, value: AttributeValue) {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n const attributes = rootSpanAttributesStore.get(spanId)\n if (attributes && !attributes.has(key)) {\n attributes.set(key, value)\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n const localSpan = getLocalSpanRecorder()?.getActiveLocalSpan()\n if (localSpan) {\n localSpan.setAttribute(key, value)\n }\n }\n }\n\n public withSpan<T>(span: Span, fn: () => T): T {\n const spanContext = trace.setSpan(context.active(), span)\n const recorder = getLocalSpanRecorder()\n if (recorder?.isLocalRecordingSpan(span)) {\n return recorder.withLocalSpan(span, () => context.with(spanContext, fn))\n }\n return context.with(spanContext, fn)\n }\n}\n\nconst getTracer = (() => {\n const tracer = new NextTracerImpl()\n\n return () => tracer\n})()\n\nexport { getTracer, SpanStatusCode, SpanKind }\nexport type { NextTracer, Span, SpanOptions, ContextAPI, TracerSpanOptions }\n"],"names":["BubbledError","SpanKind","SpanStatusCode","getTracer","isBubbledError","NEXT_OTEL_PERFORMANCE_PREFIX","process","env","LOCAL_SPAN_RECORDER_KEY","Symbol","for","api","getLocalSpanRecorder","__NEXT_DEV_SERVER","globalThis","undefined","NEXT_RUNTIME","require","err","context","propagation","trace","ROOT_CONTEXT","Error","constructor","bubble","result","error","closeSpanWithError","span","setAttribute","recordException","name","setStatus","code","ERROR","message","end","rootSpanAttributesStore","Map","rootSpanIdKey","createContextKey","lastSpanId","getSpanId","clientTraceDataSetter","set","carrier","key","value","push","NextTracerImpl","getTracerInstance","isOpenTelemetryEnabled","tracerProvider","activeSpan","getSpan","active","isRecording","getTracerProvider","getDelegate","getContext","getTracePropagationData","activeContext","entries","inject","getActiveScopeSpan","getActiveLocalSpan","runWithDetachedContext","fn","with","withPropagatedContext","getter","force","getSpanContext","remoteContext","extract","mergedContext","args","type","fnOrOptions","fnOrEmpty","tracingEnabled","Boolean","localSpanRecordingEnabled","isLocalSpanRecordingEnabled","options","spanName","NextVanillaSpanAllowlist","has","NEXT_OTEL_VERBOSE","hideSpan","spanContext","parentSpan","existingRootSpanId","getValue","isRootSpan","spanId","attributes","setValue","runWithActiveSpan","startTime","LogSpanAllowList","performance","now","cleanedUp","onCleanup","delete","measure","split","pop","replace","match","toLowerCase","start","Object","length","isThenable","then","res","catch","finally","parentContext","startActiveSpan","createLocalRecordingSpan","setSpan","withLocalSpan","delegateSpan","parentSpanContext","delegateSpanContext","createLocalSpan","links","traceId","parentSpanId","wrap","tracer","optionsObj","apply","arguments","lastArgId","cb","scopeBoundCb","bind","_span","done","startSpan","getRootSpanAttributes","get","setRootSpanAttribute","localSpan","withSpan","recorder","isLocalRecordingSpan"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/server/lib/trace/tracer.ts"],"sourcesContent":["import type { FetchEventResult } from '../../web/types'\nimport type { TextMapSetter } from '@opentelemetry/api'\nimport type { SpanTypes } from './constants'\nimport type { LocalSpanRecorder } from './local-span-recorder'\nimport { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'\n\nimport type {\n Context,\n ContextAPI,\n Span,\n SpanOptions,\n Tracer,\n AttributeValue,\n TextMapGetter,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport { isThenable } from '../../../shared/lib/is-thenable'\n\nconst NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX\nconst LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder')\n\ntype GlobalWithLocalSpanRecorder = typeof globalThis & {\n [LOCAL_SPAN_RECORDER_KEY]?: LocalSpanRecorder\n}\n\nlet api: typeof import('next/dist/compiled/@opentelemetry/api')\n\nfunction getLocalSpanRecorder() {\n if (process.env.__NEXT_DEV_SERVER) {\n return (globalThis as GlobalWithLocalSpanRecorder)[LOCAL_SPAN_RECORDER_KEY]\n } else {\n return undefined\n }\n}\n\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (process.env.NEXT_RUNTIME === 'edge') {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n} else {\n try {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n } catch (err) {\n api =\n require('next/dist/compiled/@opentelemetry/api') as typeof import('next/dist/compiled/@opentelemetry/api')\n }\n}\n\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } =\n api\n\nexport class BubbledError extends Error {\n constructor(\n public readonly bubble?: boolean,\n public readonly result?: FetchEventResult\n ) {\n super()\n }\n}\n\nexport function isBubbledError(error: unknown): error is BubbledError {\n if (typeof error !== 'object' || error === null) return false\n return error instanceof BubbledError\n}\n\nconst closeSpanWithError = (span: Span, error?: Error) => {\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true)\n } else {\n if (error) {\n span.recordException(error)\n span.setAttribute('error.type', error.name)\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message })\n }\n span.end()\n}\n\ntype TracerSpanOptions = Omit<SpanOptions, 'attributes'> & {\n parentSpan?: Span\n spanName?: string\n attributes?: Partial<Record<AttributeNames, AttributeValue | undefined>>\n hideSpan?: boolean\n}\n\ninterface NextTracer {\n getContext(): ContextAPI\n\n /**\n * Instruments a function by automatically creating a span activated on its\n * scope.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its second parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n *\n */\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n\n /**\n * Wrap a function to automatically create a span activated on its\n * scope when it's called.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its last parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n */\n wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * This method do NOT modify the current Context by default. In result, any inner span will not\n * automatically set its parent context to the span created by this method unless manually activate\n * context via `tracer.getContext().with`. `trace`, or `wrap` is generally recommended as it gracefully\n * handles context activation. (ref: https://github.com/open-telemetry/opentelemetry-js/issues/1923)\n */\n startSpan(type: SpanTypes): Span\n startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n\n /**\n * Returns currently activated span if current context is in the scope of the span.\n * Returns undefined otherwise.\n */\n getActiveScopeSpan(): Span | undefined\n\n /**\n * Returns trace propagation data for the currently active context. The format is equal to data provided\n * through the OpenTelemetry propagator API.\n */\n getTracePropagationData(): ClientTraceDataEntry[]\n\n /**\n * Executes a function with the given span set as the active span in the context.\n * This allows child spans created within the function to automatically parent to this span.\n */\n withSpan<T>(span: Span, fn: () => T): T\n}\n\ntype NextAttributeNames =\n | 'next.route'\n | 'next.page'\n | 'next.rsc'\n | 'next.segment'\n | 'next.span_category'\n | 'next.span_name'\n | 'next.span_type'\n | 'next.clientComponentLoadCount'\ntype OTELAttributeNames = `http.${string}` | `net.${string}`\ntype AttributeNames = NextAttributeNames | OTELAttributeNames\n\n/** we use this map to propagate attributes from nested spans to the top span */\nconst rootSpanAttributesStore = new Map<\n number,\n Map<AttributeNames, AttributeValue | undefined>\n>()\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId')\nlet lastSpanId = 0\nconst getSpanId = () => lastSpanId++\n\nexport interface ClientTraceDataEntry {\n key: string\n value: string\n}\n\nconst clientTraceDataSetter: TextMapSetter<ClientTraceDataEntry[]> = {\n set(carrier, key, value) {\n carrier.push({\n key,\n value,\n })\n },\n}\n\nclass NextTracerImpl implements NextTracer {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */\n private getTracerInstance(): Tracer {\n return trace.getTracer('next.js', '0.0.1')\n }\n\n private isOpenTelemetryEnabled(): boolean {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan?.isRecording()) {\n return true\n }\n\n const tracerProvider = trace.getTracerProvider() as {\n getDelegate?: () => { constructor?: { name?: string } } | undefined\n }\n\n if (!('getDelegate' in tracerProvider)) {\n return true\n }\n\n return (\n tracerProvider.getDelegate?.()?.constructor?.name !== 'NoopTracerProvider'\n )\n }\n\n public getContext(): ContextAPI {\n return context\n }\n\n public getTracePropagationData(): ClientTraceDataEntry[] {\n const activeContext = context.active()\n const entries: ClientTraceDataEntry[] = []\n propagation.inject(activeContext, entries, clientTraceDataSetter)\n return entries\n }\n\n public getActiveScopeSpan(): Span | undefined {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan || !process.env.__NEXT_DEV_SERVER) {\n return activeSpan\n }\n return getLocalSpanRecorder()?.getActiveLocalSpan()\n }\n\n /**\n * Run `fn` with the active span cleared, so spans created inside become new\n * roots (or parent to incoming propagated context). Used for in-process\n * Node.js middleware so its span is a sibling of the request span, matching\n * edge middleware which runs in a detached sandbox.\n */\n public runWithDetachedContext<T>(fn: () => T): T {\n if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {\n return fn()\n }\n return context.with(ROOT_CONTEXT, fn)\n }\n\n public withPropagatedContext<T, C>(\n carrier: C,\n fn: () => T,\n getter?: TextMapGetter<C>,\n force = false\n ): T {\n const activeContext = context.active()\n\n if (\n !NEXT_OTEL_PERFORMANCE_PREFIX &&\n !this.isOpenTelemetryEnabled() &&\n !trace.getSpanContext(activeContext)\n ) {\n return fn()\n }\n\n if (force) {\n const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter)\n\n if (trace.getSpanContext(remoteContext)) {\n return context.with(remoteContext, fn)\n }\n\n // Preserve the current active span while still merging any extracted\n // baggage/context values from the carrier.\n const mergedContext = propagation.extract(activeContext, carrier, getter)\n return context.with(mergedContext, fn)\n }\n\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn()\n }\n\n const remoteContext = propagation.extract(activeContext, carrier, getter)\n return context.with(remoteContext, fn)\n }\n\n // Trace, wrap implementation is inspired by datadog trace implementation\n // (https://datadoghq.dev/dd-trace-js/interfaces/tracer.html#trace).\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise<T>\n ): Promise<T>\n public trace<T>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace<T>(...args: Array<any>) {\n const [type, fnOrOptions, fnOrEmpty] = args\n const tracingEnabled =\n Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled()\n const localSpanRecorder = getLocalSpanRecorder()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!tracingEnabled && !localSpanRecordingEnabled) {\n return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty()\n }\n\n // coerce options form overload\n const {\n fn,\n options,\n }: {\n fn: (span?: Span, done?: (error?: Error) => any) => T | Promise<T>\n options: TracerSpanOptions\n } =\n typeof fnOrOptions === 'function'\n ? {\n fn: fnOrOptions,\n options: {},\n }\n : {\n fn: fnOrEmpty,\n options: { ...fnOrOptions },\n }\n\n const spanName = options.spanName ?? type\n\n const shouldDelegateSpan =\n NextVanillaSpanAllowlist.has(type) ||\n process.env.NEXT_OTEL_VERBOSE === '1'\n const shouldTraceSpan =\n shouldDelegateSpan ||\n (localSpanRecorder?.isRequestInsightsEnabled() ?? false)\n\n if (!shouldTraceSpan || options.hideSpan) {\n return fn()\n }\n\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = this.getSpanContext(\n options?.parentSpan ?? this.getActiveScopeSpan()\n )\n\n if (!spanContext) {\n spanContext = context?.active() ?? ROOT_CONTEXT\n }\n // Check if there's already a root span in the store for this trace\n // We are intentionally not checking whether there is an active context\n // from outside of nextjs to ensure that we can provide the same level\n // of telemetry when using a custom server\n const existingRootSpanId = spanContext.getValue(rootSpanIdKey)\n const isRootSpan =\n typeof existingRootSpanId !== 'number' ||\n !rootSpanAttributesStore.has(existingRootSpanId)\n\n const spanId = getSpanId()\n\n options.attributes = {\n 'next.span_category': 'nextjs',\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes,\n }\n\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), () =>\n this.runWithActiveSpan(\n spanName,\n options,\n spanContext,\n tracingEnabled && shouldDelegateSpan,\n localSpanRecordingEnabled,\n (span: Span) => {\n let startTime: number | undefined\n if (\n NEXT_OTEL_PERFORMANCE_PREFIX &&\n type &&\n LogSpanAllowList.has(type)\n ) {\n startTime =\n 'performance' in globalThis && 'measure' in performance\n ? globalThis.performance.now()\n : undefined\n }\n\n let cleanedUp = false\n const onCleanup = () => {\n if (cleanedUp) return\n cleanedUp = true\n rootSpanAttributesStore.delete(spanId)\n if (startTime) {\n performance.measure(\n `${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(\n type.split('.').pop() || ''\n ).replace(\n /[A-Z]/g,\n (match: string) => '-' + match.toLowerCase()\n )}`,\n {\n start: startTime,\n end: performance.now(),\n }\n )\n }\n }\n\n if (isRootSpan) {\n rootSpanAttributesStore.set(\n spanId,\n new Map(\n Object.entries(options.attributes ?? {}) as [\n AttributeNames,\n AttributeValue | undefined,\n ][]\n )\n )\n }\n if (fn.length > 1) {\n try {\n return fn(span, (err) => {\n if (err) {\n closeSpanWithError(span, err)\n } else {\n span.end()\n }\n })\n } catch (err: any) {\n closeSpanWithError(span, err)\n throw err\n } finally {\n onCleanup()\n }\n }\n\n try {\n const result = fn(span)\n if (isThenable(result)) {\n // If there's error make sure it throws\n return result\n .then((res) => {\n span.end()\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res\n })\n .catch((err) => {\n closeSpanWithError(span, err)\n throw err\n })\n .finally(onCleanup)\n } else {\n span.end()\n onCleanup()\n }\n\n return result\n } catch (err: any) {\n closeSpanWithError(span, err)\n onCleanup()\n throw err\n }\n }\n )\n )\n }\n\n private runWithActiveSpan<T>(\n spanName: string,\n options: TracerSpanOptions,\n parentContext: Context,\n tracingEnabled: boolean,\n localSpanRecordingEnabled: boolean,\n fn: (span: Span) => T\n ): T {\n if (tracingEnabled) {\n return this.getTracerInstance().startActiveSpan(\n spanName,\n options,\n (span: Span) =>\n fn(\n localSpanRecordingEnabled\n ? this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n span\n )\n : span\n )\n )\n }\n\n const span = this.createLocalRecordingSpan(spanName, options, parentContext)\n const activeContext = trace.setSpan(context.active(), span)\n\n return getLocalSpanRecorder()!.withLocalSpan(span, () =>\n context.with(activeContext, fn, undefined, span)\n )\n }\n\n private createLocalRecordingSpan(\n name: string,\n options: TracerSpanOptions,\n parentContext: Context,\n delegateSpan?: Span\n ): Span {\n const parentSpanContext = trace.getSpanContext(parentContext)\n const delegateSpanContext = delegateSpan?.spanContext()\n\n return getLocalSpanRecorder()!.createLocalSpan({\n name,\n attributes: options.attributes,\n links: options.links,\n startTime: options.startTime,\n delegateSpan,\n traceId: delegateSpanContext?.traceId ?? parentSpanContext?.traceId,\n spanId: delegateSpanContext?.spanId,\n parentSpanId: parentSpanContext?.spanId,\n })\n }\n\n public wrap<T = (...args: Array<any>) => any>(type: SpanTypes, fn: T): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n public wrap<T = (...args: Array<any>) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n public wrap(...args: Array<any>) {\n const tracer = this\n const [name, options, fn] =\n args.length === 3 ? args : [args[0], {}, args[1]]\n\n if (\n !NextVanillaSpanAllowlist.has(name) &&\n process.env.NEXT_OTEL_VERBOSE !== '1' &&\n !process.env.__NEXT_DEV_SERVER\n ) {\n return fn\n }\n\n return function (this: any) {\n let optionsObj = options\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments)\n }\n\n const lastArgId = arguments.length - 1\n const cb = arguments[lastArgId]\n\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb)\n return tracer.trace(name, optionsObj, (_span, done) => {\n arguments[lastArgId] = function (err: any) {\n done?.(err)\n return scopeBoundCb.apply(this, arguments)\n }\n\n return fn.apply(this, arguments)\n })\n } else {\n return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))\n }\n }\n }\n\n public startSpan(type: SpanTypes): Span\n public startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n public startSpan(...args: Array<any>): Span {\n const [type, passedOptions]: [string, TracerSpanOptions | undefined] =\n args as any\n const options: TracerSpanOptions = passedOptions\n ? {\n ...passedOptions,\n attributes: {\n 'next.span_category': 'nextjs',\n ...passedOptions.attributes,\n },\n }\n : { attributes: { 'next.span_category': 'nextjs' } }\n\n const parentContext =\n this.getSpanContext(options.parentSpan ?? this.getActiveScopeSpan()) ??\n context.active()\n const localSpanRecordingEnabled =\n getLocalSpanRecorder()?.isLocalSpanRecordingEnabled() ?? false\n\n if (!localSpanRecordingEnabled) {\n return this.getTracerInstance().startSpan(type, options, parentContext)\n }\n\n const delegateSpan = this.isOpenTelemetryEnabled()\n ? this.getTracerInstance().startSpan(type, options, parentContext)\n : undefined\n\n return this.createLocalRecordingSpan(\n type,\n options,\n parentContext,\n delegateSpan\n )\n }\n\n private getSpanContext(parentSpan?: Span) {\n const spanContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined\n\n return spanContext\n }\n\n public getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n return rootSpanAttributesStore.get(spanId)\n }\n\n public setRootSpanAttribute(key: AttributeNames, value: AttributeValue) {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n const attributes = rootSpanAttributesStore.get(spanId)\n if (attributes && !attributes.has(key)) {\n attributes.set(key, value)\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n const localSpan = getLocalSpanRecorder()?.getActiveLocalSpan()\n if (localSpan) {\n localSpan.setAttribute(key, value)\n }\n }\n }\n\n public withSpan<T>(span: Span, fn: () => T): T {\n const spanContext = trace.setSpan(context.active(), span)\n const recorder = getLocalSpanRecorder()\n if (recorder?.isLocalRecordingSpan(span)) {\n return recorder.withLocalSpan(span, () => context.with(spanContext, fn))\n }\n return context.with(spanContext, fn)\n }\n}\n\nconst getTracer = (() => {\n const tracer = new NextTracerImpl()\n\n return () => tracer\n})()\n\nexport { getTracer, SpanStatusCode, SpanKind }\nexport type { NextTracer, Span, SpanOptions, ContextAPI, TracerSpanOptions }\n"],"names":["BubbledError","SpanKind","SpanStatusCode","getTracer","isBubbledError","NEXT_OTEL_PERFORMANCE_PREFIX","process","env","LOCAL_SPAN_RECORDER_KEY","Symbol","for","api","getLocalSpanRecorder","__NEXT_DEV_SERVER","globalThis","undefined","NEXT_RUNTIME","require","err","context","propagation","trace","ROOT_CONTEXT","Error","constructor","bubble","result","error","closeSpanWithError","span","setAttribute","recordException","name","setStatus","code","ERROR","message","end","rootSpanAttributesStore","Map","rootSpanIdKey","createContextKey","lastSpanId","getSpanId","clientTraceDataSetter","set","carrier","key","value","push","NextTracerImpl","getTracerInstance","isOpenTelemetryEnabled","tracerProvider","activeSpan","getSpan","active","isRecording","getTracerProvider","getDelegate","getContext","getTracePropagationData","activeContext","entries","inject","getActiveScopeSpan","getActiveLocalSpan","runWithDetachedContext","fn","with","withPropagatedContext","getter","force","getSpanContext","remoteContext","extract","mergedContext","args","type","fnOrOptions","fnOrEmpty","tracingEnabled","Boolean","localSpanRecorder","localSpanRecordingEnabled","isLocalSpanRecordingEnabled","options","spanName","shouldDelegateSpan","NextVanillaSpanAllowlist","has","NEXT_OTEL_VERBOSE","shouldTraceSpan","isRequestInsightsEnabled","hideSpan","spanContext","parentSpan","existingRootSpanId","getValue","isRootSpan","spanId","attributes","setValue","runWithActiveSpan","startTime","LogSpanAllowList","performance","now","cleanedUp","onCleanup","delete","measure","split","pop","replace","match","toLowerCase","start","Object","length","isThenable","then","res","catch","finally","parentContext","startActiveSpan","createLocalRecordingSpan","setSpan","withLocalSpan","delegateSpan","parentSpanContext","delegateSpanContext","createLocalSpan","links","traceId","parentSpanId","wrap","tracer","optionsObj","apply","arguments","lastArgId","cb","scopeBoundCb","bind","_span","done","startSpan","passedOptions","getRootSpanAttributes","get","setRootSpanAttribute","localSpan","withSpan","recorder","isLocalRecordingSpan"],"mappings":"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","ignoreList":[0]} |
@@ -307,3 +307,3 @@ "use strict"; | ||
| const { stagedRendering } = prerenderStore; | ||
| if (process.env.__NEXT_APP_SHELLS && stagedRendering) { | ||
| if (stagedRendering) { | ||
| // Even if all params are static, we need to exclude them from the app shell | ||
@@ -376,4 +376,4 @@ // by delaying them to the static stage. However, root params are allowed in shells, | ||
| // so we can at least check for that. | ||
| // Note that resolving them without a delay is also valid in `appShells`, | ||
| // because root params are allowed in shells. | ||
| // Note that resolving them without a delay is valid because root params are | ||
| // allowed in shells. | ||
| if ((0, _paramsutils.allParamsAreRootParams)(underlyingParams, workUnitStore.rootParams)) { | ||
@@ -433,3 +433,3 @@ return makeUntrackedParams(userspaceParams); | ||
| // However, root params are allowed in shells, so if all the params are root params, they can be included as well. | ||
| if (process.env.__NEXT_APP_SHELLS && !(0, _paramsutils.allParamsAreRootParams)(underlyingParams, workUnitStore.rootParams)) { | ||
| if (!(0, _paramsutils.allParamsAreRootParams)(underlyingParams, workUnitStore.rootParams)) { | ||
| // For a dynamic request we generally want to recover a static shell, | ||
@@ -436,0 +436,0 @@ // so static params can resolve in the static stage, because session |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/server/request/params.ts"],"sourcesContent":["import {\n workAsyncStorage,\n type WorkStore,\n} from '../app-render/work-async-storage.external'\nimport type { OpaqueFallbackRouteParams } from './fallback-params'\nimport type { VaryParamsAccumulator } from '../app-render/vary-params'\nimport {\n createVaryingParams,\n getMetadataVaryParamsAccumulator,\n} from '../app-render/vary-params'\n\nimport { ReflectAdapter } from '../web/spec-extension/adapters/reflect'\nimport {\n throwToInterruptStaticGeneration,\n postponeWithTracking,\n} from '../app-render/dynamic-rendering'\n\nimport {\n workUnitAsyncStorage,\n type PrerenderStorePPR,\n type PrerenderStoreLegacy,\n type StaticPrerenderStoreModern,\n type StaticPrerenderStore,\n throwInvariantForMissingStore,\n type PrerenderStoreModernRuntime,\n type RequestStore,\n type ValidationStoreClient,\n} from '../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n describeStringPropertyAccess,\n wellKnownProperties,\n} from '../../shared/lib/utils/reflect-utils'\nimport {\n makeDevtoolsIOAwarePromise,\n makeHangingPromise,\n makePromiseFromTrigger,\n RENDER_STAGES_BY_DATA_KIND,\n} from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { dynamicAccessAsyncStorage } from '../app-render/dynamic-access-async-storage.external'\nimport {\n isEmptyParams,\n hasFallbackRouteParams,\n allParamsAreRootParams,\n} from '../lib/params-utils'\n\nexport type ParamValue = string | Array<string> | undefined\nexport type Params = Record<string, ParamValue>\n\nexport function createParamsFromClient(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n // Client params don't need additional vary tracking because by the\n // time they reach the client, the access would have already been\n // tracked by the server.\n const varyParamsAccumulator = null\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createParamsFromClient should not be called in cache contexts.'\n )\n case 'prerender-runtime':\n throw new InvariantError(\n 'createParamsFromClient should not be called in a runtime prerender.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createParamsFromClient should not be called inside generateStaticParams.'\n )\n case 'validation-client': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n return makeUntrackedParams(underlyingParams)\n }\n case 'request': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\n// generateMetadata always runs in RSC context so it is equivalent to a Server Page Component\nexport type CreateServerParamsForMetadata = typeof createServerParamsForMetadata\nexport function createServerParamsForMetadata(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null\n): Promise<Params> {\n const metadataVaryParamsAccumulator = getMetadataVaryParamsAccumulator()\n return createServerParamsForServerSegment(\n underlyingParams,\n optionalCatchAllParamName,\n metadataVaryParamsAccumulator\n )\n}\n\n// routes always runs in RSC context so it is equivalent to a Server Page Component\nexport function createServerParamsForRoute(\n underlyingParams: Params,\n varyParamsAccumulator: VaryParamsAccumulator | null = null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'prerender-client':\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime': {\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in runtime prerenders.'\n )\n }\n case 'request':\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createServerParamsForServerSegment(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n return createRuntimePrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'request': {\n return createRenderParamsForPage(\n workStore,\n workUnitStore,\n underlyingParams,\n optionalCatchAllParamName,\n varyParamsAccumulator\n )\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createPrerenderParamsForClientSegment(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError(\n 'Missing workStore in createPrerenderParamsForClientSegment'\n )\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n const fallbackParams = workUnitStore.fallbackRouteParams\n if (fallbackParams) {\n for (let key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n '`params`'\n )\n }\n }\n }\n break\n case 'validation-client':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in validation contexts.'\n )\n break\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n break\n default:\n workUnitStore satisfies never\n }\n }\n // We're prerendering in a mode that does not abort. We resolve the promise without\n // any tracking because we're just transporting a value from server to client where the tracking\n // will be applied.\n return Promise.resolve(underlyingParams)\n}\n\nfunction createStaticPrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStore,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n switch (prerenderStore.type) {\n case 'prerender': {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (hasFallbackRouteParams(underlyingParams, fallbackParams)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object dynamic.\n return makeHangingParams(underlyingParams, workStore, prerenderStore)\n }\n\n // All params are static.\n\n const { stagedRendering } = prerenderStore\n if (process.env.__NEXT_APP_SHELLS && stagedRendering) {\n // Even if all params are static, we need to exclude them from the app shell\n // by delaying them to the static stage. However, root params are allowed in shells,\n // so if all the params are root params, they can be included as well.\n if (\n !allParamsAreRootParams(underlyingParams, prerenderStore.rootParams)\n ) {\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n }\n\n return makeUntrackedParams(userspaceParams)\n }\n case 'prerender-client': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingParams(\n underlyingParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-ppr': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n return makeErroringParams(\n underlyingParams,\n fallbackParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-legacy':\n break\n default:\n prerenderStore satisfies never\n }\n\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRuntimePrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workUnitStore: PrerenderStoreModernRuntime,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n // If there's no staging, we're in a prospective runtime prerender,\n // and it doesn't matter when params resolve.\n return makeUntrackedParams(userspaceParams)\n }\n\n // We don't have fallbackParams in runtime prerenders, so we don't know\n // when params are static. However, root params are static by definition,\n // so we can at least check for that.\n // Note that resolving them without a delay is also valid in `appShells`,\n // because root params are allowed in shells.\n if (allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // Semantically, we should resolve static params in the static stage.\n // But params are link data, and we need to recover a param-less session shell,\n // so we delay all params until the runtime stage instead.\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n}\n\nfunction createRenderParamsForPage(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n) {\n const { stagedRendering, asyncApiPromises, validationSamples } = workUnitStore\n\n // Distinguish the params that we expose to userspace (potentially wrapped in proxies)\n // and the underlying object containing params values. We do this because wrappers\n // like `instrumentParamsPromiseWithDevWarnings` need to be able to get the known param names\n // without triggering other wrapper proxies.\n let userspaceParams = underlyingParams\n if (validationSamples) {\n userspaceParams = createServerParamsProxyForInstantValidation(\n underlyingParams,\n workStore,\n validationSamples\n )\n }\n if (varyParamsAccumulator) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n userspaceParams,\n optionalCatchAllParamName\n )\n }\n\n if (stagedRendering && asyncApiPromises) {\n return createStagedRenderParams(\n workStore,\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n }\n\n // No staged rendering = no cacheComponents, or cacheComponents prod without cachedNavigations\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(userspaceParams)\n }\n}\n\nfunction createStagedRenderParams(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n underlyingParams: Params,\n userspaceParams: Params\n) {\n const promise = createStagedRenderParamsImpl(\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n if (process.env.NODE_ENV === 'development') {\n return instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n } else {\n return promise\n }\n}\n\nfunction createStagedRenderParamsImpl(\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n /** The actual param values, without any instrumentation */\n underlyingParams: Params,\n /** The params object to return to userspace, possibly wrapped in a proxy */\n userspaceParams: Params\n) {\n // If the route has no params, they should resolve immediately.\n if (isEmptyParams(underlyingParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // If we have fallback params, then they should always resolve in the runtime link data stage.\n // We do this indirectly via the shared params parent for better debug info.\n if (hasFallbackRouteParams(underlyingParams, workUnitStore.fallbackParams)) {\n return createParamsPromiseFromTrigger(\n asyncApiPromises.sharedParamsParent,\n userspaceParams\n )\n }\n\n // All params are static.\n\n // If we're rendering with shells, even static params must be delayed to exclude them from the shell.\n // However, root params are allowed in shells, so if all the params are root params, they can be included as well.\n if (\n process.env.__NEXT_APP_SHELLS &&\n !allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)\n ) {\n // For a dynamic request we generally want to recover a static shell,\n // so static params can resolve in the static stage, because session\n // shells are handled with a separate render.\n // However, in dev we might need to recover a session shell for instant validation.\n // This is indicated by `needsSessionShell`.\n const staticParamsStage = workUnitStore.needsSessionShell\n ? RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n : RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createParamsPromiseFromTrigger(\n trigger: Promise<any>,\n userspaceParams: Params\n) {\n if (process.env.NODE_ENV === 'development') {\n // We wrap each instance of params in a `new Promise()`, which lets us show each\n // await a different set of values. This is important when all awaits\n // are in third party which would otherwise track all the way to the\n // internal params.\n const promise: Promise<Params> = new Promise((resolve, reject) => {\n trigger.then(() => resolve(userspaceParams), reject)\n })\n promise.catch(noop)\n // @ts-expect-error\n promise.displayName = 'params'\n return promise\n } else {\n return makePromiseFromTrigger(trigger, userspaceParams)\n }\n}\n\nfunction noop() {}\n\nfunction createServerParamsProxyForInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: NonNullable<RequestStore['validationSamples']>\n): Params {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples.params ?? {}))\n return createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n}\n\nfunction createClientParamsInInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: ValidationStoreClient['validationSamples']\n): Promise<Params> {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples?.params ?? {}))\n const proxiedUnderlying = createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n return Promise.resolve(proxiedUnderlying)\n}\n\nfunction createRenderParamsInProd(userspaceParams: Params): Promise<Params> {\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRenderParamsInDev(\n underlyingParams: Params,\n userpaceParams: Params,\n fallbackParams: OpaqueFallbackRouteParams | null | undefined,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n return makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams,\n userpaceParams,\n hasFallbackRouteParams(underlyingParams, fallbackParams),\n workStore,\n requestStore\n )\n}\n\ninterface CacheLifetime {}\nconst CachedParams = new WeakMap<CacheLifetime, Promise<Params>>()\n\nconst fallbackParamsProxyHandler: ProxyHandler<Promise<Params>> = {\n get: function get(target, prop, receiver) {\n if (prop === 'then' || prop === 'catch' || prop === 'finally') {\n const originalMethod = ReflectAdapter.get(target, prop, receiver)\n\n return {\n [prop]: (...args: unknown[]) => {\n const store = dynamicAccessAsyncStorage.getStore()\n\n if (store) {\n store.abortController.abort(\n new Error(`Accessed fallback \\`params\\` during prerendering.`)\n )\n }\n\n return new Proxy(\n originalMethod.apply(target, args),\n fallbackParamsProxyHandler\n )\n },\n }[prop]\n }\n\n return ReflectAdapter.get(target, prop, receiver)\n },\n}\n\nfunction makeHangingParams(\n underlyingParams: Params,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStoreModern\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = new Proxy(\n makeHangingPromise<Params>(\n prerenderStore.renderSignal,\n workStore.route,\n '`params`'\n ),\n fallbackParamsProxyHandler\n )\n\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeErroringParams(\n underlyingParams: Params,\n fallbackParams: OpaqueFallbackRouteParams,\n workStore: WorkStore,\n prerenderStore: PrerenderStorePPR | PrerenderStoreLegacy\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const augmentedUnderlying = { ...underlyingParams }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(augmentedUnderlying)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n if (fallbackParams.has(prop)) {\n Object.defineProperty(augmentedUnderlying, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when cacheComponents is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no cacheComponents)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n enumerable: true,\n })\n }\n }\n })\n\n return promise\n}\n\nfunction makeUntrackedParams(underlyingParams: Params): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = Promise.resolve(underlyingParams)\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams: Params,\n userspaceParams: Params,\n hasFallbackParams: boolean,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = hasFallbackParams\n ? makeDevtoolsIOAwarePromise(\n userspaceParams,\n requestStore,\n RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n )\n : // We don't want to force an environment transition when this params is not part of the fallback params set\n Promise.resolve(userspaceParams)\n\n const proxiedPromise = instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n CachedParams.set(underlyingParams, proxiedPromise)\n return proxiedPromise\n}\n\nfunction instrumentParamsPromiseWithDevWarnings(\n underlyingParams: Params,\n promise: Promise<Params>,\n workStore: WorkStore\n): Promise<Params> {\n // Track which properties we should warn for.\n const proxiedProperties = new Set<string>()\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n proxiedProperties.add(prop)\n }\n })\n\n return new Proxy(promise, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n if (\n // We are accessing a property that was proxied to the promise instance\n proxiedProperties.has(prop)\n ) {\n const expression = describeStringPropertyAccess('params', prop)\n warnForSyncAccess(workStore.route, expression)\n }\n }\n return ReflectAdapter.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop)\n }\n return ReflectAdapter.set(target, prop, value, receiver)\n },\n ownKeys(target) {\n const expression = '`...params` or similar expression'\n warnForSyncAccess(workStore.route, expression)\n return Reflect.ownKeys(target)\n },\n })\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createParamsAccessError\n)\n\nfunction createParamsAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` is a Promise and must be unwrapped with \\`await\\` or \\`React.use()\\` before accessing its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n"],"names":["createParamsFromClient","createPrerenderParamsForClientSegment","createServerParamsForMetadata","createServerParamsForRoute","createServerParamsForServerSegment","underlyingParams","workStore","workAsyncStorage","getStore","InvariantError","workUnitStore","workUnitAsyncStorage","type","varyParamsAccumulator","createStaticPrerenderParams","validationSamples","createClientParamsInInstantValidation","makeUntrackedParams","process","env","NODE_ENV","fallbackParams","userspaceParams","createRenderParamsInDev","createRenderParamsInProd","throwInvariantForMissingStore","optionalCatchAllParamName","metadataVaryParamsAccumulator","getMetadataVaryParamsAccumulator","createRuntimePrerenderParams","createRenderParamsForPage","fallbackRouteParams","key","has","makeHangingPromise","renderSignal","route","Promise","resolve","prerenderStore","createVaryingParams","isEmptyParams","hasFallbackRouteParams","makeHangingParams","stagedRendering","__NEXT_APP_SHELLS","allParamsAreRootParams","rootParams","staticParamsStage","RENDER_STAGES_BY_DATA_KIND","staticLinkData","delayUntilStage","makeErroringParams","runtimeLinkData","asyncApiPromises","createServerParamsProxyForInstantValidation","createStagedRenderParams","promise","createStagedRenderParamsImpl","instrumentParamsPromiseWithDevWarnings","createParamsPromiseFromTrigger","sharedParamsParent","needsSessionShell","trigger","reject","then","catch","noop","displayName","makePromiseFromTrigger","createExhaustiveParamsProxy","require","declaredParams","Set","Object","keys","params","proxiedUnderlying","userpaceParams","requestStore","makeDynamicallyTrackedParamsWithDevWarnings","CachedParams","WeakMap","fallbackParamsProxyHandler","get","target","prop","receiver","originalMethod","ReflectAdapter","args","store","dynamicAccessAsyncStorage","abortController","abort","Error","Proxy","apply","cachedParams","set","augmentedUnderlying","forEach","wellKnownProperties","defineProperty","expression","describeStringPropertyAccess","postponeWithTracking","dynamicTracking","throwToInterruptStaticGeneration","enumerable","hasFallbackParams","makeDevtoolsIOAwarePromise","proxiedPromise","proxiedProperties","add","warnForSyncAccess","value","delete","ownKeys","Reflect","createDedupedByCallsiteServerErrorLoggerDev","createParamsAccessError","prefix"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/server/request/params.ts"],"sourcesContent":["import {\n workAsyncStorage,\n type WorkStore,\n} from '../app-render/work-async-storage.external'\nimport type { OpaqueFallbackRouteParams } from './fallback-params'\nimport type { VaryParamsAccumulator } from '../app-render/vary-params'\nimport {\n createVaryingParams,\n getMetadataVaryParamsAccumulator,\n} from '../app-render/vary-params'\n\nimport { ReflectAdapter } from '../web/spec-extension/adapters/reflect'\nimport {\n throwToInterruptStaticGeneration,\n postponeWithTracking,\n} from '../app-render/dynamic-rendering'\n\nimport {\n workUnitAsyncStorage,\n type PrerenderStorePPR,\n type PrerenderStoreLegacy,\n type StaticPrerenderStoreModern,\n type StaticPrerenderStore,\n throwInvariantForMissingStore,\n type PrerenderStoreModernRuntime,\n type RequestStore,\n type ValidationStoreClient,\n} from '../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n describeStringPropertyAccess,\n wellKnownProperties,\n} from '../../shared/lib/utils/reflect-utils'\nimport {\n makeDevtoolsIOAwarePromise,\n makeHangingPromise,\n makePromiseFromTrigger,\n RENDER_STAGES_BY_DATA_KIND,\n} from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { dynamicAccessAsyncStorage } from '../app-render/dynamic-access-async-storage.external'\nimport {\n isEmptyParams,\n hasFallbackRouteParams,\n allParamsAreRootParams,\n} from '../lib/params-utils'\n\nexport type ParamValue = string | Array<string> | undefined\nexport type Params = Record<string, ParamValue>\n\nexport function createParamsFromClient(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n // Client params don't need additional vary tracking because by the\n // time they reach the client, the access would have already been\n // tracked by the server.\n const varyParamsAccumulator = null\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createParamsFromClient should not be called in cache contexts.'\n )\n case 'prerender-runtime':\n throw new InvariantError(\n 'createParamsFromClient should not be called in a runtime prerender.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createParamsFromClient should not be called inside generateStaticParams.'\n )\n case 'validation-client': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n return makeUntrackedParams(underlyingParams)\n }\n case 'request': {\n if (workUnitStore.validationSamples) {\n return createClientParamsInInstantValidation(\n underlyingParams,\n workStore,\n workUnitStore.validationSamples\n )\n }\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\n// generateMetadata always runs in RSC context so it is equivalent to a Server Page Component\nexport type CreateServerParamsForMetadata = typeof createServerParamsForMetadata\nexport function createServerParamsForMetadata(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null\n): Promise<Params> {\n const metadataVaryParamsAccumulator = getMetadataVaryParamsAccumulator()\n return createServerParamsForServerSegment(\n underlyingParams,\n optionalCatchAllParamName,\n metadataVaryParamsAccumulator\n )\n}\n\n// routes always runs in RSC context so it is equivalent to a Server Page Component\nexport function createServerParamsForRoute(\n underlyingParams: Params,\n varyParamsAccumulator: VaryParamsAccumulator | null = null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n null,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'prerender-client':\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForRoute should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime': {\n throw new InvariantError(\n 'createServerParamsForRoute should not be called in runtime prerenders.'\n )\n }\n case 'request':\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n const userspaceParams = underlyingParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(underlyingParams)\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createServerParamsForServerSegment(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError('Expected workStore to be initialized')\n }\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n return createStaticPrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workStore,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'validation-client':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in client contexts.'\n )\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createServerParamsForServerSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n return createRuntimePrerenderParams(\n underlyingParams,\n optionalCatchAllParamName,\n workUnitStore,\n varyParamsAccumulator\n )\n case 'request': {\n return createRenderParamsForPage(\n workStore,\n workUnitStore,\n underlyingParams,\n optionalCatchAllParamName,\n varyParamsAccumulator\n )\n }\n default:\n workUnitStore satisfies never\n }\n }\n throwInvariantForMissingStore()\n}\n\nexport function createPrerenderParamsForClientSegment(\n underlyingParams: Params\n): Promise<Params> {\n const workStore = workAsyncStorage.getStore()\n if (!workStore) {\n throw new InvariantError(\n 'Missing workStore in createPrerenderParamsForClientSegment'\n )\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n const fallbackParams = workUnitStore.fallbackRouteParams\n if (fallbackParams) {\n for (let key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n '`params`'\n )\n }\n }\n }\n break\n case 'validation-client':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in validation contexts.'\n )\n break\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called in cache contexts.'\n )\n case 'generate-static-params':\n throw new InvariantError(\n 'createPrerenderParamsForClientSegment should not be called inside generateStaticParams.'\n )\n case 'prerender-runtime':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n break\n default:\n workUnitStore satisfies never\n }\n }\n // We're prerendering in a mode that does not abort. We resolve the promise without\n // any tracking because we're just transporting a value from server to client where the tracking\n // will be applied.\n return Promise.resolve(underlyingParams)\n}\n\nfunction createStaticPrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStore,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n switch (prerenderStore.type) {\n case 'prerender': {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (hasFallbackRouteParams(underlyingParams, fallbackParams)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object dynamic.\n return makeHangingParams(underlyingParams, workStore, prerenderStore)\n }\n\n // All params are static.\n\n const { stagedRendering } = prerenderStore\n if (stagedRendering) {\n // Even if all params are static, we need to exclude them from the app shell\n // by delaying them to the static stage. However, root params are allowed in shells,\n // so if all the params are root params, they can be included as well.\n if (\n !allParamsAreRootParams(underlyingParams, prerenderStore.rootParams)\n ) {\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n }\n\n return makeUntrackedParams(userspaceParams)\n }\n case 'prerender-client': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n // This params object has one or more fallback params, so we need\n // to consider the awaiting of this params object \"dynamic\". Since\n // we are in cacheComponents mode we encode this as a promise that never\n // resolves.\n return makeHangingParams(\n underlyingParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-ppr': {\n const fallbackParams = prerenderStore.fallbackRouteParams\n if (fallbackParams) {\n for (const key in underlyingParams) {\n if (fallbackParams.has(key)) {\n return makeErroringParams(\n underlyingParams,\n fallbackParams,\n workStore,\n prerenderStore\n )\n }\n }\n }\n break\n }\n case 'prerender-legacy':\n break\n default:\n prerenderStore satisfies never\n }\n\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRuntimePrerenderParams(\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n workUnitStore: PrerenderStoreModernRuntime,\n varyParamsAccumulator: VaryParamsAccumulator | null\n): Promise<Params> {\n let userspaceParams = underlyingParams\n if (varyParamsAccumulator !== null) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n underlyingParams,\n optionalCatchAllParamName\n )\n }\n\n if (isEmptyParams(underlyingParams)) {\n // This route has no params.\n return makeUntrackedParams(userspaceParams)\n }\n\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n // If there's no staging, we're in a prospective runtime prerender,\n // and it doesn't matter when params resolve.\n return makeUntrackedParams(userspaceParams)\n }\n\n // We don't have fallbackParams in runtime prerenders, so we don't know\n // when params are static. However, root params are static by definition,\n // so we can at least check for that.\n // Note that resolving them without a delay is valid because root params are\n // allowed in shells.\n if (allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // Semantically, we should resolve static params in the static stage.\n // But params are link data, and we need to recover a param-less session shell,\n // so we delay all params until the runtime stage instead.\n const staticParamsStage = RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n}\n\nfunction createRenderParamsForPage(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n underlyingParams: Params,\n optionalCatchAllParamName: string | null,\n varyParamsAccumulator: VaryParamsAccumulator | null\n) {\n const { stagedRendering, asyncApiPromises, validationSamples } = workUnitStore\n\n // Distinguish the params that we expose to userspace (potentially wrapped in proxies)\n // and the underlying object containing params values. We do this because wrappers\n // like `instrumentParamsPromiseWithDevWarnings` need to be able to get the known param names\n // without triggering other wrapper proxies.\n let userspaceParams = underlyingParams\n if (validationSamples) {\n userspaceParams = createServerParamsProxyForInstantValidation(\n underlyingParams,\n workStore,\n validationSamples\n )\n }\n if (varyParamsAccumulator) {\n userspaceParams = createVaryingParams(\n varyParamsAccumulator,\n userspaceParams,\n optionalCatchAllParamName\n )\n }\n\n if (stagedRendering && asyncApiPromises) {\n return createStagedRenderParams(\n workStore,\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n }\n\n // No staged rendering = no cacheComponents, or cacheComponents prod without cachedNavigations\n if (process.env.NODE_ENV === 'development') {\n const fallbackParams = workUnitStore.fallbackParams\n return createRenderParamsInDev(\n underlyingParams,\n userspaceParams,\n fallbackParams,\n workStore,\n workUnitStore\n )\n } else {\n return createRenderParamsInProd(userspaceParams)\n }\n}\n\nfunction createStagedRenderParams(\n workStore: WorkStore,\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n underlyingParams: Params,\n userspaceParams: Params\n) {\n const promise = createStagedRenderParamsImpl(\n workUnitStore,\n stagedRendering,\n asyncApiPromises,\n underlyingParams,\n userspaceParams\n )\n if (process.env.NODE_ENV === 'development') {\n return instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n } else {\n return promise\n }\n}\n\nfunction createStagedRenderParamsImpl(\n workUnitStore: RequestStore,\n stagedRendering: NonNullable<RequestStore['stagedRendering']>,\n asyncApiPromises: NonNullable<RequestStore['asyncApiPromises']>,\n /** The actual param values, without any instrumentation */\n underlyingParams: Params,\n /** The params object to return to userspace, possibly wrapped in a proxy */\n userspaceParams: Params\n) {\n // If the route has no params, they should resolve immediately.\n if (isEmptyParams(underlyingParams)) {\n return makeUntrackedParams(userspaceParams)\n }\n\n // If we have fallback params, then they should always resolve in the runtime link data stage.\n // We do this indirectly via the shared params parent for better debug info.\n if (hasFallbackRouteParams(underlyingParams, workUnitStore.fallbackParams)) {\n return createParamsPromiseFromTrigger(\n asyncApiPromises.sharedParamsParent,\n userspaceParams\n )\n }\n\n // All params are static.\n\n // If we're rendering with shells, even static params must be delayed to exclude them from the shell.\n // However, root params are allowed in shells, so if all the params are root params, they can be included as well.\n if (!allParamsAreRootParams(underlyingParams, workUnitStore.rootParams)) {\n // For a dynamic request we generally want to recover a static shell,\n // so static params can resolve in the static stage, because session\n // shells are handled with a separate render.\n // However, in dev we might need to recover a session shell for instant validation.\n // This is indicated by `needsSessionShell`.\n const staticParamsStage = workUnitStore.needsSessionShell\n ? RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n : RENDER_STAGES_BY_DATA_KIND.staticLinkData\n return stagedRendering.delayUntilStage(\n staticParamsStage,\n 'params',\n userspaceParams\n )\n }\n\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createParamsPromiseFromTrigger(\n trigger: Promise<any>,\n userspaceParams: Params\n) {\n if (process.env.NODE_ENV === 'development') {\n // We wrap each instance of params in a `new Promise()`, which lets us show each\n // await a different set of values. This is important when all awaits\n // are in third party which would otherwise track all the way to the\n // internal params.\n const promise: Promise<Params> = new Promise((resolve, reject) => {\n trigger.then(() => resolve(userspaceParams), reject)\n })\n promise.catch(noop)\n // @ts-expect-error\n promise.displayName = 'params'\n return promise\n } else {\n return makePromiseFromTrigger(trigger, userspaceParams)\n }\n}\n\nfunction noop() {}\n\nfunction createServerParamsProxyForInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: NonNullable<RequestStore['validationSamples']>\n): Params {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples.params ?? {}))\n return createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n}\n\nfunction createClientParamsInInstantValidation(\n underlyingParams: Params,\n workStore: WorkStore,\n validationSamples: ValidationStoreClient['validationSamples']\n): Promise<Params> {\n const { createExhaustiveParamsProxy } =\n require('../app-render/instant-validation/instant-samples') as typeof import('../app-render/instant-validation/instant-samples')\n const declaredParams = new Set(Object.keys(validationSamples?.params ?? {}))\n const proxiedUnderlying = createExhaustiveParamsProxy(\n underlyingParams,\n declaredParams,\n workStore.route\n )\n return Promise.resolve(proxiedUnderlying)\n}\n\nfunction createRenderParamsInProd(userspaceParams: Params): Promise<Params> {\n return makeUntrackedParams(userspaceParams)\n}\n\nfunction createRenderParamsInDev(\n underlyingParams: Params,\n userpaceParams: Params,\n fallbackParams: OpaqueFallbackRouteParams | null | undefined,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n return makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams,\n userpaceParams,\n hasFallbackRouteParams(underlyingParams, fallbackParams),\n workStore,\n requestStore\n )\n}\n\ninterface CacheLifetime {}\nconst CachedParams = new WeakMap<CacheLifetime, Promise<Params>>()\n\nconst fallbackParamsProxyHandler: ProxyHandler<Promise<Params>> = {\n get: function get(target, prop, receiver) {\n if (prop === 'then' || prop === 'catch' || prop === 'finally') {\n const originalMethod = ReflectAdapter.get(target, prop, receiver)\n\n return {\n [prop]: (...args: unknown[]) => {\n const store = dynamicAccessAsyncStorage.getStore()\n\n if (store) {\n store.abortController.abort(\n new Error(`Accessed fallback \\`params\\` during prerendering.`)\n )\n }\n\n return new Proxy(\n originalMethod.apply(target, args),\n fallbackParamsProxyHandler\n )\n },\n }[prop]\n }\n\n return ReflectAdapter.get(target, prop, receiver)\n },\n}\n\nfunction makeHangingParams(\n underlyingParams: Params,\n workStore: WorkStore,\n prerenderStore: StaticPrerenderStoreModern\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = new Proxy(\n makeHangingPromise<Params>(\n prerenderStore.renderSignal,\n workStore.route,\n '`params`'\n ),\n fallbackParamsProxyHandler\n )\n\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeErroringParams(\n underlyingParams: Params,\n fallbackParams: OpaqueFallbackRouteParams,\n workStore: WorkStore,\n prerenderStore: PrerenderStorePPR | PrerenderStoreLegacy\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const augmentedUnderlying = { ...underlyingParams }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = Promise.resolve(augmentedUnderlying)\n CachedParams.set(underlyingParams, promise)\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n if (fallbackParams.has(prop)) {\n Object.defineProperty(augmentedUnderlying, prop, {\n get() {\n const expression = describeStringPropertyAccess('params', prop)\n // In most dynamic APIs we also throw if `dynamic = \"error\"` however\n // for params is only dynamic when we're generating a fallback shell\n // and even when `dynamic = \"error\"` we still support generating dynamic\n // fallback shells\n // TODO remove this comment when cacheComponents is the default since there\n // will be no `dynamic = \"error\"`\n if (prerenderStore.type === 'prerender-ppr') {\n // PPR Prerender (no cacheComponents)\n postponeWithTracking(\n workStore.route,\n expression,\n prerenderStore.dynamicTracking\n )\n } else {\n // Legacy Prerender\n throwToInterruptStaticGeneration(\n expression,\n workStore,\n prerenderStore\n )\n }\n },\n enumerable: true,\n })\n }\n }\n })\n\n return promise\n}\n\nfunction makeUntrackedParams(underlyingParams: Params): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n const promise = Promise.resolve(underlyingParams)\n CachedParams.set(underlyingParams, promise)\n\n return promise\n}\n\nfunction makeDynamicallyTrackedParamsWithDevWarnings(\n underlyingParams: Params,\n userspaceParams: Params,\n hasFallbackParams: boolean,\n workStore: WorkStore,\n requestStore: RequestStore\n): Promise<Params> {\n const cachedParams = CachedParams.get(underlyingParams)\n if (cachedParams) {\n return cachedParams\n }\n\n // We don't use makeResolvedReactPromise here because params\n // supports copying with spread and we don't want to unnecessarily\n // instrument the promise with spreadable properties of ReactPromise.\n const promise = hasFallbackParams\n ? makeDevtoolsIOAwarePromise(\n userspaceParams,\n requestStore,\n RENDER_STAGES_BY_DATA_KIND.runtimeLinkData\n )\n : // We don't want to force an environment transition when this params is not part of the fallback params set\n Promise.resolve(userspaceParams)\n\n const proxiedPromise = instrumentParamsPromiseWithDevWarnings(\n underlyingParams,\n promise,\n workStore\n )\n CachedParams.set(underlyingParams, proxiedPromise)\n return proxiedPromise\n}\n\nfunction instrumentParamsPromiseWithDevWarnings(\n underlyingParams: Params,\n promise: Promise<Params>,\n workStore: WorkStore\n): Promise<Params> {\n // Track which properties we should warn for.\n const proxiedProperties = new Set<string>()\n\n Object.keys(underlyingParams).forEach((prop) => {\n if (wellKnownProperties.has(prop)) {\n // These properties cannot be shadowed because they need to be the\n // true underlying value for Promises to work correctly at runtime\n } else {\n proxiedProperties.add(prop)\n }\n })\n\n return new Proxy(promise, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n if (\n // We are accessing a property that was proxied to the promise instance\n proxiedProperties.has(prop)\n ) {\n const expression = describeStringPropertyAccess('params', prop)\n warnForSyncAccess(workStore.route, expression)\n }\n }\n return ReflectAdapter.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'string') {\n proxiedProperties.delete(prop)\n }\n return ReflectAdapter.set(target, prop, value, receiver)\n },\n ownKeys(target) {\n const expression = '`...params` or similar expression'\n warnForSyncAccess(workStore.route, expression)\n return Reflect.ownKeys(target)\n },\n })\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createParamsAccessError\n)\n\nfunction createParamsAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`params\\` is a Promise and must be unwrapped with \\`await\\` or \\`React.use()\\` before accessing its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n"],"names":["createParamsFromClient","createPrerenderParamsForClientSegment","createServerParamsForMetadata","createServerParamsForRoute","createServerParamsForServerSegment","underlyingParams","workStore","workAsyncStorage","getStore","InvariantError","workUnitStore","workUnitAsyncStorage","type","varyParamsAccumulator","createStaticPrerenderParams","validationSamples","createClientParamsInInstantValidation","makeUntrackedParams","process","env","NODE_ENV","fallbackParams","userspaceParams","createRenderParamsInDev","createRenderParamsInProd","throwInvariantForMissingStore","optionalCatchAllParamName","metadataVaryParamsAccumulator","getMetadataVaryParamsAccumulator","createRuntimePrerenderParams","createRenderParamsForPage","fallbackRouteParams","key","has","makeHangingPromise","renderSignal","route","Promise","resolve","prerenderStore","createVaryingParams","isEmptyParams","hasFallbackRouteParams","makeHangingParams","stagedRendering","allParamsAreRootParams","rootParams","staticParamsStage","RENDER_STAGES_BY_DATA_KIND","staticLinkData","delayUntilStage","makeErroringParams","runtimeLinkData","asyncApiPromises","createServerParamsProxyForInstantValidation","createStagedRenderParams","promise","createStagedRenderParamsImpl","instrumentParamsPromiseWithDevWarnings","createParamsPromiseFromTrigger","sharedParamsParent","needsSessionShell","trigger","reject","then","catch","noop","displayName","makePromiseFromTrigger","createExhaustiveParamsProxy","require","declaredParams","Set","Object","keys","params","proxiedUnderlying","userpaceParams","requestStore","makeDynamicallyTrackedParamsWithDevWarnings","CachedParams","WeakMap","fallbackParamsProxyHandler","get","target","prop","receiver","originalMethod","ReflectAdapter","args","store","dynamicAccessAsyncStorage","abortController","abort","Error","Proxy","apply","cachedParams","set","augmentedUnderlying","forEach","wellKnownProperties","defineProperty","expression","describeStringPropertyAccess","postponeWithTracking","dynamicTracking","throwToInterruptStaticGeneration","enumerable","hasFallbackParams","makeDevtoolsIOAwarePromise","proxiedPromise","proxiedProperties","add","warnForSyncAccess","value","delete","ownKeys","Reflect","createDedupedByCallsiteServerErrorLoggerDev","createParamsAccessError","prefix"],"mappings":"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","ignoreList":[0]} |
@@ -41,7 +41,2 @@ import type { ResponseCacheEntry, ResponseGenerator, ResponseCacheBase, IncrementalResponseCacheEntry, IncrementalResponseCache } from './types'; | ||
| isPrefetch?: boolean; | ||
| /** | ||
| * Whether the `appShells` experimental flag is enabled. Gates the | ||
| * prefetch-miss-serves-fallback-shell behavior in `handleGet`. | ||
| */ | ||
| appShells?: boolean; | ||
| incrementalCache: IncrementalResponseCache; | ||
@@ -48,0 +43,0 @@ isRoutePPREnabled?: boolean; |
@@ -160,3 +160,3 @@ "use strict"; | ||
| } | ||
| const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, appShells = false, waitUntil, routeKind, invocationID } = context; | ||
| const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, routeKind, invocationID } = context; | ||
| const response = await this.getBatcher.batch({ | ||
@@ -172,3 +172,2 @@ key, | ||
| isPrefetch, | ||
| appShells, | ||
| routeKind, | ||
@@ -232,6 +231,3 @@ invocationID | ||
| // independent of any concurrent background upgrade. | ||
| // | ||
| // Gated on `appShells`: with the flag off, prefetch misses keep the | ||
| // previous batch-join behavior so existing suites are unaffected. | ||
| const incrementalResponseCacheEntry = context.isPrefetch && context.appShells && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved); | ||
| const incrementalResponseCacheEntry = context.isPrefetch && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved); | ||
| // Handle null response | ||
@@ -238,0 +234,0 @@ if (!incrementalResponseCacheEntry) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/server/response-cache/index.ts"],"sourcesContent":["import type {\n ResponseCacheEntry,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n} from './types'\n\nimport { Batcher } from '../../lib/batcher'\nimport { LRUCache } from '../lib/lru-cache'\nimport { warnOnce } from '../../build/output/log'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\n\n/**\n * Parses an environment variable as a positive integer, returning the fallback\n * if the value is missing, not a number, or not positive.\n */\nfunction parsePositiveInt(\n envValue: string | undefined,\n fallback: number\n): number {\n if (!envValue) return fallback\n const parsed = parseInt(envValue, 10)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\n/**\n * Default TTL (in milliseconds) for minimal mode response cache entries.\n * Used for cache hit validation as a fallback for providers that don't\n * send the x-invocation-id header yet.\n *\n * 10 seconds chosen because:\n * - Long enough to dedupe rapid successive requests (e.g., page + data)\n * - Short enough to not serve stale data across unrelated requests\n *\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.\n */\nconst DEFAULT_TTL_MS = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,\n 10_000\n)\n\n/**\n * Default maximum number of entries in the response cache.\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.\n */\nconst DEFAULT_MAX_SIZE = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,\n 150\n)\n\n/**\n * Separator used in compound cache keys to join pathname and invocationID.\n * Using null byte (\\0) since it cannot appear in valid URL paths or UUIDs.\n */\nconst KEY_SEPARATOR = '\\0'\n\n/**\n * Sentinel value used for TTL-based cache entries (when invocationID is undefined).\n * Chosen to be a clearly reserved marker for internal cache keys.\n */\nconst TTL_SENTINEL = '__ttl_sentinel__'\n\n/**\n * Entry stored in the LRU cache.\n */\ntype CacheEntry = {\n entry: IncrementalResponseCacheEntry | null\n /**\n * TTL expiration timestamp in milliseconds. Used as a fallback for\n * cache hit validation when providers don't send x-invocation-id.\n * Memory pressure is managed by LRU eviction rather than timers.\n */\n expiresAt: number\n}\n\n/**\n * Creates a compound cache key from pathname and invocationID.\n */\nfunction createCacheKey(\n pathname: string,\n invocationID: string | undefined\n): string {\n return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`\n}\n\n/**\n * Extracts the invocationID from a compound cache key.\n * Returns undefined if the key used TTL_SENTINEL.\n */\nfunction extractInvocationID(compoundKey: string): string | undefined {\n const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR)\n if (separatorIndex === -1) return undefined\n\n const invocationID = compoundKey.slice(separatorIndex + 1)\n return invocationID === TTL_SENTINEL ? undefined : invocationID\n}\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n private readonly getBatcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheEntry | null,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheEntry | null\n >({\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n /**\n * LRU cache for minimal mode using compound keys (pathname + invocationID).\n * This allows multiple invocations to cache the same pathname without\n * overwriting each other's entries.\n */\n private readonly cache: LRUCache<CacheEntry>\n\n /**\n * Set of invocation IDs that have had cache entries evicted.\n * Used to detect when the cache size may be too small.\n * Bounded to prevent memory growth.\n */\n private readonly evictedInvocationIDs: Set<string> = new Set()\n\n /**\n * The configured max size, stored for logging.\n */\n private readonly maxSize: number\n\n /**\n * The configured TTL for cache entries in milliseconds.\n */\n private readonly ttl: number\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n constructor(\n minimal_mode: boolean,\n maxSize: number = DEFAULT_MAX_SIZE,\n ttl: number = DEFAULT_TTL_MS\n ) {\n this.minimal_mode = minimal_mode\n this.maxSize = maxSize\n this.ttl = ttl\n\n // Create the LRU cache with eviction tracking\n this.cache = new LRUCache(maxSize, undefined, (compoundKey) => {\n const invocationID = extractInvocationID(compoundKey)\n if (invocationID) {\n // Bound to 100 entries to prevent unbounded memory growth.\n // FIFO eviction is acceptable here because:\n // 1. Invocations are short-lived (single request lifecycle), so older\n // invocations are unlikely to still be active after 100 newer ones\n // 2. This warning mechanism is best-effort for developer guidance—\n // missing occasional eviction warnings doesn't affect correctness\n // 3. If a long-running invocation is somehow evicted and then has\n // another cache entry evicted, it will simply be re-added\n if (this.evictedInvocationIDs.size >= 100) {\n const first = this.evictedInvocationIDs.values().next().value\n if (first) this.evictedInvocationIDs.delete(first)\n }\n this.evictedInvocationIDs.add(invocationID)\n }\n })\n }\n\n /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\n */\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n /**\n * Whether the `appShells` experimental flag is enabled. Gates the\n * prefetch-miss-serves-fallback-shell behavior in `handleGet`.\n */\n appShells?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise<any>) => void\n\n /**\n * The invocation ID from the infrastructure. Used to scope the\n * in-memory cache to a single revalidation request in minimal mode.\n */\n invocationID?: string\n }\n ): Promise<ResponseCacheEntry | null> {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n const cachedItem = this.cache.get(cacheKey)\n\n if (cachedItem) {\n // With invocationID: exact match found - always a hit\n // With TTL mode: must check expiration\n if (context.invocationID !== undefined) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL mode: check expiration\n const now = Date.now()\n if (cachedItem.expiresAt > now) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL expired - clean up\n this.cache.remove(cacheKey)\n }\n\n // Warn if this invocation had entries evicted - indicates cache may be too small.\n if (\n context.invocationID &&\n this.evictedInvocationIDs.has(context.invocationID)\n ) {\n warnOnce(\n `Response cache entry was evicted for invocation ${context.invocationID}. ` +\n `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`\n )\n }\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n appShells = false,\n waitUntil,\n routeKind,\n invocationID,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n appShells,\n routeKind,\n invocationID,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n if (this.minimal_mode && response?.cacheControl) {\n const cacheKey = createCacheKey(key, invocationID)\n this.cache.set(cacheKey, {\n entry: response,\n expiresAt: Date.now() + this.ttl,\n })\n }\n\n return toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n appShells: boolean\n routeKind: RouteKind\n invocationID: string | undefined\n },\n resolve: (value: IncrementalResponseCacheEntry | null) => void\n ): Promise<IncrementalResponseCacheEntry | null> {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(key, {\n kind: routeKindToIncrementalCacheKind(context.routeKind),\n isRoutePPREnabled: context.isRoutePPREnabled,\n isFallback: context.isFallback,\n })\n : null\n\n // `isStale === -1` signals that the entry is past its `expire` (either\n // via an expired tag or, with `cacheLife({ expire })`, past the route's\n // expire time in the prerender manifest). In that case we must NOT\n // early-resolve with the stale value — instead we fall through to a\n // blocking revalidation so the response returned to the user is fresh.\n if (\n previousIncrementalCacheEntry &&\n !context.isOnDemandRevalidate &&\n previousIncrementalCacheEntry.isStale !== -1\n ) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry.\n //\n // A prefetch request that missed must run its own response generator\n // rather than joining an in-flight revalidation through the batcher. A\n // background revalidation may be regenerating the concrete (non-fallback)\n // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by\n // an earlier prefetch sub-request. Joining it would serve that concrete\n // result to the prefetch instead of the fallback shell, and which segment\n // wins would depend purely on request timing. Running the generator\n // directly lets every prefetch segment take the same fallback-shell path,\n // independent of any concurrent background upgrade.\n //\n // Gated on `appShells`: with the flag off, prefetch misses keep the\n // previous batch-join behavior so existing suites are unaffected.\n const incrementalResponseCacheEntry =\n context.isPrefetch &&\n context.appShells &&\n previousIncrementalCacheEntry === null\n ? await this.handleRevalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n : await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Remove the cache item if it was set so we don't use it again.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n this.cache.remove(cacheKey)\n }\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @param waitUntil - Optional function to register background work.\n * @param invocationID - The invocation ID for cache key scoping.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise<any>) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ) {\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined. The minimal mode LRU write is handled in get() so that\n // every caller — including batched invocations — populates the cache.\n if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // When a path is erroring we automatically re-set the existing cache\n // with new revalidate and expire times to prevent non-stop retrying.\n if (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(\n previousIncrementalCacheEntry.cacheControl.revalidate || 3,\n 3\n ),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n cacheControl: { revalidate: revalidate, expire: expire },\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n // We haven't resolved yet, so let's throw to indicate an error.\n throw err\n }\n }\n}\n"],"names":["ResponseCache","parsePositiveInt","envValue","fallback","parsed","parseInt","Number","isFinite","DEFAULT_TTL_MS","process","env","NEXT_PRIVATE_RESPONSE_CACHE_TTL","DEFAULT_MAX_SIZE","NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE","KEY_SEPARATOR","TTL_SENTINEL","createCacheKey","pathname","invocationID","extractInvocationID","compoundKey","separatorIndex","lastIndexOf","undefined","slice","constructor","minimal_mode","maxSize","ttl","getBatcher","Batcher","create","cacheKeyFn","key","isOnDemandRevalidate","schedulerFn","scheduleOnNextTick","revalidateBatcher","evictedInvocationIDs","Set","cache","LRUCache","size","first","values","next","value","delete","add","get","responseGenerator","context","hasResolved","previousCacheEntry","cacheKey","cachedItem","toResponseCacheEntry","entry","now","Date","expiresAt","remove","has","warnOnce","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","appShells","waitUntil","routeKind","response","batch","resolve","promise","handleGet","cacheControl","set","previousIncrementalCacheEntry","resolved","kind","routeKindToIncrementalCacheKind","isStale","incrementalResponseCacheEntry","handleRevalidate","revalidate","err","console","error","responseCacheEntry","isRevalidating","fromResponseCacheEntry","isMiss","Math","min","max","expire"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/server/response-cache/index.ts"],"sourcesContent":["import type {\n ResponseCacheEntry,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n} from './types'\n\nimport { Batcher } from '../../lib/batcher'\nimport { LRUCache } from '../lib/lru-cache'\nimport { warnOnce } from '../../build/output/log'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\n\n/**\n * Parses an environment variable as a positive integer, returning the fallback\n * if the value is missing, not a number, or not positive.\n */\nfunction parsePositiveInt(\n envValue: string | undefined,\n fallback: number\n): number {\n if (!envValue) return fallback\n const parsed = parseInt(envValue, 10)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\n/**\n * Default TTL (in milliseconds) for minimal mode response cache entries.\n * Used for cache hit validation as a fallback for providers that don't\n * send the x-invocation-id header yet.\n *\n * 10 seconds chosen because:\n * - Long enough to dedupe rapid successive requests (e.g., page + data)\n * - Short enough to not serve stale data across unrelated requests\n *\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.\n */\nconst DEFAULT_TTL_MS = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,\n 10_000\n)\n\n/**\n * Default maximum number of entries in the response cache.\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.\n */\nconst DEFAULT_MAX_SIZE = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,\n 150\n)\n\n/**\n * Separator used in compound cache keys to join pathname and invocationID.\n * Using null byte (\\0) since it cannot appear in valid URL paths or UUIDs.\n */\nconst KEY_SEPARATOR = '\\0'\n\n/**\n * Sentinel value used for TTL-based cache entries (when invocationID is undefined).\n * Chosen to be a clearly reserved marker for internal cache keys.\n */\nconst TTL_SENTINEL = '__ttl_sentinel__'\n\n/**\n * Entry stored in the LRU cache.\n */\ntype CacheEntry = {\n entry: IncrementalResponseCacheEntry | null\n /**\n * TTL expiration timestamp in milliseconds. Used as a fallback for\n * cache hit validation when providers don't send x-invocation-id.\n * Memory pressure is managed by LRU eviction rather than timers.\n */\n expiresAt: number\n}\n\n/**\n * Creates a compound cache key from pathname and invocationID.\n */\nfunction createCacheKey(\n pathname: string,\n invocationID: string | undefined\n): string {\n return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`\n}\n\n/**\n * Extracts the invocationID from a compound cache key.\n * Returns undefined if the key used TTL_SENTINEL.\n */\nfunction extractInvocationID(compoundKey: string): string | undefined {\n const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR)\n if (separatorIndex === -1) return undefined\n\n const invocationID = compoundKey.slice(separatorIndex + 1)\n return invocationID === TTL_SENTINEL ? undefined : invocationID\n}\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n private readonly getBatcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheEntry | null,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheEntry | null\n >({\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n /**\n * LRU cache for minimal mode using compound keys (pathname + invocationID).\n * This allows multiple invocations to cache the same pathname without\n * overwriting each other's entries.\n */\n private readonly cache: LRUCache<CacheEntry>\n\n /**\n * Set of invocation IDs that have had cache entries evicted.\n * Used to detect when the cache size may be too small.\n * Bounded to prevent memory growth.\n */\n private readonly evictedInvocationIDs: Set<string> = new Set()\n\n /**\n * The configured max size, stored for logging.\n */\n private readonly maxSize: number\n\n /**\n * The configured TTL for cache entries in milliseconds.\n */\n private readonly ttl: number\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n constructor(\n minimal_mode: boolean,\n maxSize: number = DEFAULT_MAX_SIZE,\n ttl: number = DEFAULT_TTL_MS\n ) {\n this.minimal_mode = minimal_mode\n this.maxSize = maxSize\n this.ttl = ttl\n\n // Create the LRU cache with eviction tracking\n this.cache = new LRUCache(maxSize, undefined, (compoundKey) => {\n const invocationID = extractInvocationID(compoundKey)\n if (invocationID) {\n // Bound to 100 entries to prevent unbounded memory growth.\n // FIFO eviction is acceptable here because:\n // 1. Invocations are short-lived (single request lifecycle), so older\n // invocations are unlikely to still be active after 100 newer ones\n // 2. This warning mechanism is best-effort for developer guidance—\n // missing occasional eviction warnings doesn't affect correctness\n // 3. If a long-running invocation is somehow evicted and then has\n // another cache entry evicted, it will simply be re-added\n if (this.evictedInvocationIDs.size >= 100) {\n const first = this.evictedInvocationIDs.values().next().value\n if (first) this.evictedInvocationIDs.delete(first)\n }\n this.evictedInvocationIDs.add(invocationID)\n }\n })\n }\n\n /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\n */\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise<any>) => void\n\n /**\n * The invocation ID from the infrastructure. Used to scope the\n * in-memory cache to a single revalidation request in minimal mode.\n */\n invocationID?: string\n }\n ): Promise<ResponseCacheEntry | null> {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n const cachedItem = this.cache.get(cacheKey)\n\n if (cachedItem) {\n // With invocationID: exact match found - always a hit\n // With TTL mode: must check expiration\n if (context.invocationID !== undefined) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL mode: check expiration\n const now = Date.now()\n if (cachedItem.expiresAt > now) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL expired - clean up\n this.cache.remove(cacheKey)\n }\n\n // Warn if this invocation had entries evicted - indicates cache may be too small.\n if (\n context.invocationID &&\n this.evictedInvocationIDs.has(context.invocationID)\n ) {\n warnOnce(\n `Response cache entry was evicted for invocation ${context.invocationID}. ` +\n `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`\n )\n }\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n waitUntil,\n routeKind,\n invocationID,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n routeKind,\n invocationID,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n if (this.minimal_mode && response?.cacheControl) {\n const cacheKey = createCacheKey(key, invocationID)\n this.cache.set(cacheKey, {\n entry: response,\n expiresAt: Date.now() + this.ttl,\n })\n }\n\n return toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n routeKind: RouteKind\n invocationID: string | undefined\n },\n resolve: (value: IncrementalResponseCacheEntry | null) => void\n ): Promise<IncrementalResponseCacheEntry | null> {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(key, {\n kind: routeKindToIncrementalCacheKind(context.routeKind),\n isRoutePPREnabled: context.isRoutePPREnabled,\n isFallback: context.isFallback,\n })\n : null\n\n // `isStale === -1` signals that the entry is past its `expire` (either\n // via an expired tag or, with `cacheLife({ expire })`, past the route's\n // expire time in the prerender manifest). In that case we must NOT\n // early-resolve with the stale value — instead we fall through to a\n // blocking revalidation so the response returned to the user is fresh.\n if (\n previousIncrementalCacheEntry &&\n !context.isOnDemandRevalidate &&\n previousIncrementalCacheEntry.isStale !== -1\n ) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry.\n //\n // A prefetch request that missed must run its own response generator\n // rather than joining an in-flight revalidation through the batcher. A\n // background revalidation may be regenerating the concrete (non-fallback)\n // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by\n // an earlier prefetch sub-request. Joining it would serve that concrete\n // result to the prefetch instead of the fallback shell, and which segment\n // wins would depend purely on request timing. Running the generator\n // directly lets every prefetch segment take the same fallback-shell path,\n // independent of any concurrent background upgrade.\n const incrementalResponseCacheEntry =\n context.isPrefetch && previousIncrementalCacheEntry === null\n ? await this.handleRevalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n : await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Remove the cache item if it was set so we don't use it again.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n this.cache.remove(cacheKey)\n }\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @param waitUntil - Optional function to register background work.\n * @param invocationID - The invocation ID for cache key scoping.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise<any>) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ) {\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined. The minimal mode LRU write is handled in get() so that\n // every caller — including batched invocations — populates the cache.\n if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // When a path is erroring we automatically re-set the existing cache\n // with new revalidate and expire times to prevent non-stop retrying.\n if (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(\n previousIncrementalCacheEntry.cacheControl.revalidate || 3,\n 3\n ),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n cacheControl: { revalidate: revalidate, expire: expire },\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n // We haven't resolved yet, so let's throw to indicate an error.\n throw err\n }\n }\n}\n"],"names":["ResponseCache","parsePositiveInt","envValue","fallback","parsed","parseInt","Number","isFinite","DEFAULT_TTL_MS","process","env","NEXT_PRIVATE_RESPONSE_CACHE_TTL","DEFAULT_MAX_SIZE","NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE","KEY_SEPARATOR","TTL_SENTINEL","createCacheKey","pathname","invocationID","extractInvocationID","compoundKey","separatorIndex","lastIndexOf","undefined","slice","constructor","minimal_mode","maxSize","ttl","getBatcher","Batcher","create","cacheKeyFn","key","isOnDemandRevalidate","schedulerFn","scheduleOnNextTick","revalidateBatcher","evictedInvocationIDs","Set","cache","LRUCache","size","first","values","next","value","delete","add","get","responseGenerator","context","hasResolved","previousCacheEntry","cacheKey","cachedItem","toResponseCacheEntry","entry","now","Date","expiresAt","remove","has","warnOnce","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","waitUntil","routeKind","response","batch","resolve","promise","handleGet","cacheControl","set","previousIncrementalCacheEntry","resolved","kind","routeKindToIncrementalCacheKind","isStale","incrementalResponseCacheEntry","handleRevalidate","revalidate","err","console","error","responseCacheEntry","isRevalidating","fromResponseCacheEntry","isMiss","Math","min","max","expire"],"mappings":"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","ignoreList":[0]} |
@@ -660,7 +660,2 @@ "use strict"; | ||
| const responseCache = this.getResponseCache(req); | ||
| // The prefetch-serves-fallback-shell behavior is gated behind the | ||
| // `appShells` experimental flag. When it's off, Next.js Segment Cache | ||
| // prefetches keep the previous (non-prefetch) response-cache behavior so | ||
| // existing suites that incidentally depend on it are unaffected. | ||
| const appShells = nextConfig.experimental.appShells === true; | ||
| const cacheEntry = await responseCache.get(cacheKey, responseGenerator, { | ||
@@ -671,3 +666,2 @@ routeKind, | ||
| isOnDemandRevalidate, | ||
| appShells, | ||
| // A Next.js Segment Cache prefetch uses the `Next-Router-Prefetch` | ||
@@ -678,6 +672,4 @@ // header (surfaced as the `isPrefetchRSCRequest` request meta), not the | ||
| // importantly, so a prefetch that misses serves a fallback shell rather | ||
| // than joining an in-flight background (concrete) revalidation. The | ||
| // Next.js-prefetch arm is gated on `appShells`; with the flag off, only | ||
| // the standard browser prefetch header is recognized (unchanged). | ||
| isPrefetch: req.headers.purpose === 'prefetch' || appShells && (0, _requestmeta.getRequestMeta)(req, 'isPrefetchRSCRequest') === true, | ||
| // than joining an in-flight background (concrete) revalidation. | ||
| isPrefetch: req.headers.purpose === 'prefetch' || (0, _requestmeta.getRequestMeta)(req, 'isPrefetchRSCRequest') === true, | ||
| // Use x-invocation-id header to scope the in-memory cache to a single | ||
@@ -684,0 +676,0 @@ // revalidation request in minimal mode. |
@@ -40,6 +40,7 @@ /** | ||
| PrefetchHint[PrefetchHint["HasRuntimePrefetch"] = 1] = "HasRuntimePrefetch"; | ||
| // This segment or one of its descendants opts into Partial Prefetching. | ||
| // Currently set when a truthy instant config is present on any | ||
| // segment in the subtree (regardless of prefetch mode). Propagates upward | ||
| // so the root segment reflects the entire subtree. | ||
| // This segment or one of its descendants opts into Partial Prefetching, i.e. | ||
| // uses the two-phase (Shell then Speculative) prefetch flow. Set when a | ||
| // truthy instant config is present, or `prefetch` is 'partial', | ||
| // 'unstable_eager', or 'allow-runtime'. Propagates upward so the root segment | ||
| // reflects the entire subtree. | ||
| PrefetchHint[PrefetchHint["SubtreeHasPartialPrefetching"] = 2] = "SubtreeHasPartialPrefetching"; | ||
@@ -46,0 +47,0 @@ // This segment itself has a loading.tsx boundary. |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../src/shared/lib/app-router-types.ts"],"sourcesContent":["/**\n * App Router types - Client-safe types for the Next.js App Router\n *\n * This file contains type definitions that can be safely imported\n * by both client-side and server-side code without circular dependencies.\n */\n\nimport type React from 'react'\n\nexport type LoadingModuleData =\n | [React.JSX.Element, React.ReactNode, React.ReactNode]\n | null\n\nimport type { VaryParamsIterable } from './segment-cache/vary-params-decoding'\n\n/** viewport metadata node */\nexport type HeadData = React.ReactNode\n\n/**\n * Cache node used in app-router / layout-router.\n */\n\nexport type CacheNode = {\n /**\n * When rsc is not null, it represents the RSC data for the\n * corresponding segment.\n *\n * `null` is a valid React Node but because segment data is always a\n * <LayoutRouter> component, we can use `null` to represent empty. When it is\n * null, it represents missing data, and rendering should suspend.\n */\n rsc: React.ReactNode\n\n /**\n * Represents a static version of the segment that can be shown immediately,\n * and may or may not contain dynamic holes. It's prefetched before a\n * navigation occurs.\n *\n * During rendering, we will choose whether to render `rsc` or `prefetchRsc`\n * with `useDeferredValue`. As with the `rsc` field, a value of `null` means\n * no value was provided. In this case, the LayoutRouter will go straight to\n * rendering the `rsc` value; if that one is also missing, it will suspend and\n * trigger a lazy fetch.\n */\n prefetchRsc: React.ReactNode\n\n prefetchHead: HeadData | null\n\n head: HeadData\n\n slots: Record<string, CacheNode> | null\n\n /**\n * A shared mutable ref that tracks whether this segment should be scrolled\n * to. All new segments created during a single navigation share the same\n * ref. When any segment's scroll handler fires, it sets `current` to\n * `false` so no other segment scrolls for the same navigation.\n *\n * `null` means this segment is not a scroll target (e.g., a reused shared\n * layout segment).\n */\n scrollRef: ScrollRef | null\n\n /**\n * Globally-unique identifier minted from a monotonic counter when the\n * CacheNode is freshly created. Surfaced to user code as a string via\n * `useRouter().bfcacheId` and intended to be used as a React `key` to\n * opt out of Activity-based state preservation on fresh navigations.\n *\n * Preserved when the CacheNode is reused (shared layouts, refresh,\n * search/hash-only navigations) or restored from the BFCache during a\n * back/forward navigation.\n */\n bfcacheId: number\n}\n\n/**\n * A mutable ref shared across all new segments created during a single\n * navigation. Used to ensure that only one segment scrolls per navigation.\n */\nexport type ScrollRef = { current: boolean }\n\nexport type DynamicParamTypes =\n | 'catchall'\n | 'catchall-intercepted-(..)(..)'\n | 'catchall-intercepted-(.)'\n | 'catchall-intercepted-(..)'\n | 'catchall-intercepted-(...)'\n | 'optional-catchall'\n | 'dynamic'\n | 'dynamic-intercepted-(..)(..)'\n | 'dynamic-intercepted-(.)'\n | 'dynamic-intercepted-(..)'\n | 'dynamic-intercepted-(...)'\n\nexport type DynamicParamTypesShort =\n | 'c'\n | 'ci(..)(..)'\n | 'ci(.)'\n | 'ci(..)'\n | 'ci(...)'\n | 'oc'\n | 'd'\n | 'di(..)(..)'\n | 'di(.)'\n | 'di(..)'\n | 'di(...)'\n\n// The tuple form of a segment, used for dynamic route params\nexport type DynamicSegmentTuple = [\n // Param name\n paramName: string,\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n paramCacheKey: string,\n // Dynamic param type\n dynamicParamType: DynamicParamTypesShort,\n // Static sibling segments at the same URL level. Used by the client\n // router to determine if a prefetch can be reused when navigating to\n // a static sibling of a dynamic route. For example, if the route is\n // /products/[id] and there's also /products/sale, then staticSiblings\n // would be ['sale']. null means the siblings are unknown (e.g. in\n // webpack dev mode).\n staticSiblings: readonly string[] | null,\n]\n\nexport type Segment = string | DynamicSegmentTuple\n\n/**\n * Router state\n */\nexport type FlightRouterState = [\n segment: Segment,\n parallelRoutes: { [parallelRouterKey: string]: FlightRouterState },\n refreshState?: CompressedRefreshState | null,\n /**\n * - \"refetch\" is used during a request to inform the server where rendering\n * should start from.\n *\n * - \"inside-shared-layout\" is used during a prefetch request to inform the\n * server that even if the segment matches, it should be treated as if it's\n * within the \"new\" part of a navigation — inside the shared layout. If\n * the segment doesn't match, then it has no effect, since it would be\n * treated as new regardless. If it does match, though, the server does not\n * need to render it, because the client already has it.\n *\n * - \"metadata-only\" instructs the server to skip rendering the segments and\n * only send the head data.\n *\n * A bit confusing, but that's because it has only one extremely narrow use\n * case — during a non-PPR prefetch, the server uses it to find the first\n * loading boundary beneath a shared layout.\n *\n * TODO: We should rethink the protocol for dynamic requests. It might not\n * make sense for the client to send a FlightRouterState, since this type is\n * overloaded with concerns.\n */\n refresh?: 'refetch' | 'inside-shared-layout' | 'metadata-only' | null,\n /**\n * Bitmask of PrefetchHint flags. Encodes route structure metadata:\n * root layout, loading boundaries, instant configs, and runtime prefetch\n * hints. Only set when non-zero.\n */\n prefetchHints?: number,\n]\n\n/**\n * When rendering a parallel route, some of the parallel paths may not match\n * the current URL. In that case, the Next client has to render something,\n * so it will render whichever was the last route to match that slot. We use\n * this type to track when this has happened. It's a tuple of the original\n * URL that was used to fetch the segment, and the (possibly rewritten) search\n * query that was rendered by the server. The URL is needed when performing\n * a refresh of the segment, and the search query is needed for looking up\n * matching entries in the segment cache.\n */\nexport type CompressedRefreshState = [url: string, renderedSearch: string]\n\nexport const enum PrefetchHint {\n // This segment has a runtime prefetch enabled (via instant with\n // prefetch: 'runtime'). Per-segment only, does not propagate to ancestors.\n HasRuntimePrefetch = 0b00001,\n // This segment or one of its descendants opts into Partial Prefetching.\n // Currently set when a truthy instant config is present on any\n // segment in the subtree (regardless of prefetch mode). Propagates upward\n // so the root segment reflects the entire subtree.\n SubtreeHasPartialPrefetching = 0b00010,\n // This segment itself has a loading.tsx boundary.\n SegmentHasLoadingBoundary = 0b00100,\n // A descendant segment (but not this one) has a loading.tsx boundary.\n // Propagates upward so the root reflects the entire subtree.\n SubtreeHasLoadingBoundary = 0b01000,\n // This segment is at or above the application's root layout — the root layout\n // segment itself and all of its ancestors. A dynamic param in one of these\n // segments is a \"root param\".\n IsRootLayoutOrAbove = 0b10000,\n // This segment's response includes its parent's data inlined into it.\n // Set at build time by the segment size measurement pass.\n ParentInlinedIntoSelf = 0b100000,\n // This segment's data is inlined into one of its children — don't fetch\n // it separately. Set at build time by the segment size measurement pass.\n InlinedIntoChild = 0b1000000,\n // On a __PAGE__: this page's response includes the head (metadata/viewport)\n // at the end of its SegmentPrefetch[] array.\n HeadInlinedIntoSelf = 0b10000000,\n // On the root hint node: the head was NOT inlined into any page — fetch\n // it separately. Absence of this bit means the head is bundled into a page.\n HeadOutlined = 0b100000000,\n // The inlining hints in this tree may be stale because the tree was\n // generated before collectPrefetchHints ran (e.g. the initial RSC payload\n // for a fully static page at build time). When writing this tree into the\n // cache, the route entry should be immediately expired so it gets\n // re-fetched with correct hints. Only set during build-time prerendering,\n // never at runtime.\n InliningHintsStale = 0b1000000000,\n // This segment has instant = false, opting out of all\n // prefetching entirely (neither static nor runtime).\n PrefetchDisabled = 0b10000000000,\n // This segment or one of its descendants has runtime prefetch enabled\n // (HasRuntimePrefetch). Propagates upward so the root reflects the\n // entire subtree.\n SubtreeHasRuntimePrefetch = 0b100000000000,\n // This segment or one of its descendants prefetches \"eagerly\" — i.e. its\n // effective prefetch strategy is anything other than 'partial' or\n // 'allow-runtime'. Used by App Shells: a non-eager subtree relies on the\n // shared app shell and skips its Speculative prefetch. Propagates upward so\n // the root reflects the entire subtree.\n SubtreeHasEagerPrefetch = 0b1000000000000,\n // This segment or one of its descendants exports `instant = false`,\n // explicitly opting out of Partial Prefetching. Propagates upward so the root\n // reflects the entire subtree. Used only to suppress the dev-time\n // `<Link prefetch={true}>` warning — unlike PrefetchDisabled, it has no effect\n // on the actual prefetch behavior.\n SubtreeHasInstantFalse = 0b10000000000000,\n}\n\n/**\n * Bitmask for checking whether a segment's static prefetch is skipped. Matches\n * if EITHER bit is set — i.e. the segment uses runtime prefetching\n * (HasRuntimePrefetch) OR prefetching is disabled entirely (PrefetchDisabled,\n * e.g. instant = false). The segment participates in the bundle chain\n * but with null data.\n *\n * Usage: `(hints & StaticPrefetchDisabled) !== 0`\n */\nexport const StaticPrefetchDisabled =\n PrefetchHint.HasRuntimePrefetch | PrefetchHint.PrefetchDisabled\n\n/**\n * The subset of PrefetchHint bits that propagate upward from a child segment to\n * its ancestors (as opposed to segment-local bits like SegmentHasLoadingBoundary\n * or IsRootLayoutOrAbove). Used to clear stale propagated bits before re-deriving them\n * from a node's children.\n */\nexport const SubtreePrefetchHints =\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasLoadingBoundary |\n PrefetchHint.SubtreeHasRuntimePrefetch |\n PrefetchHint.SubtreeHasInstantFalse |\n PrefetchHint.SubtreeHasEagerPrefetch\n\n/**\n * Folds a child segment's prefetch hints into its parent's, propagating the\n * \"subtree\" flags. A child's segment-local flag (e.g. it has a loading boundary,\n * or it has a runtime prefetch) becomes the corresponding \"subtree\" flag on the\n * parent, so the root segment ends up reflecting the entire subtree.\n *\n * Used wherever a route tree is assembled bottom-up: on the server when building\n * a prefetch tree (createFlightRouterStateFromLoaderTree) and on the client when\n * merging a navigation patch into the existing tree (convertServerPatchToFullTree).\n * Keep these in sync by routing both through this helper.\n */\nexport function propagateSubtreeBits(\n parentHints: number,\n childHints: number\n): number {\n if (childHints & PrefetchHint.SubtreeHasPartialPrefetching) {\n parentHints |= PrefetchHint.SubtreeHasPartialPrefetching\n }\n // A child with a loading boundary (directly, or anywhere in its subtree) makes\n // this a SubtreeHasLoadingBoundary on the parent.\n if (\n childHints &\n (PrefetchHint.SegmentHasLoadingBoundary |\n PrefetchHint.SubtreeHasLoadingBoundary)\n ) {\n parentHints |= PrefetchHint.SubtreeHasLoadingBoundary\n }\n // Likewise for runtime prefetch.\n if (\n childHints &\n (PrefetchHint.HasRuntimePrefetch | PrefetchHint.SubtreeHasRuntimePrefetch)\n ) {\n parentHints |= PrefetchHint.SubtreeHasRuntimePrefetch\n }\n // And for eager prefetch. The bit is set directly on each eager segment, so\n // there's no separate segment-local flag — propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasEagerPrefetch) {\n parentHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n // And for `instant = false`. Like eager prefetch, the bit is set directly on\n // each opted-out segment, so propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasInstantFalse) {\n parentHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n return parentHints\n}\n\n/**\n * Individual Flight response path\n */\nexport type FlightSegmentPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n ]\n\n/**\n * Represents a tree of segments and the Flight data (i.e. React nodes) that\n * correspond to each one. The tree is isomorphic to the FlightRouterState;\n * however in the future we want to be able to fetch arbitrary partial segments\n * without having to fetch all its children. So this response format will\n * likely change.\n */\nexport type CacheNodeSeedData = [\n node: React.ReactNode | null,\n parallelRoutes: {\n [parallelRouterKey: string]: CacheNodeSeedData | null\n },\n // TODO: This field is no longer used. Remove it.\n loading: null,\n isPartial: boolean,\n /**\n * An AsyncIterable that yields the route params this segment accessed during\n * server rendering (one name per yield, deduped). Used by the client router\n * to determine cache key specificity - segments that only access certain\n * params can be reused across navigations where unaccessed params change.\n *\n * Does NOT include root params; those are emitted once at the top level of\n * the response (see `r` on the payload) and unioned in by the consumer.\n *\n * - null: tracking was not enabled for this render (e.g., not a prerender).\n * Treat conservatively - assume all params vary.\n * - Drains to empty Set: segment accesses no params (e.g., client components,\n * or server components that don't read params). Can be shared across all\n * param values.\n * - Drains to non-empty Set: segment depends on those params. Can only reuse\n * when those specific params match.\n */\n varyParams: VaryParamsIterable | null,\n]\n\nexport type FlightDataSegment = [\n /* segment of the rendered slice: */ Segment,\n /* treePatch */ FlightRouterState,\n /* cacheNodeSeedData */ CacheNodeSeedData | null, // Can be null during prefetch if there's no loading component\n /* head: viewport */ HeadData,\n /* isHeadPartial */ boolean,\n]\n\nexport type FlightDataPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n // Holds full path to the segment.\n ...FlightSegmentPath[],\n ...FlightDataSegment,\n ]\n\n/**\n * The Flight response data\n */\nexport type FlightData = Array<FlightDataPath> | string\n\n/**\n * Per-route prefetch hints computed at build time. Mirrors the shape of the\n * loader tree so hints can be traversed in parallel during router state\n * creation. Each node stores a bitmask of PrefetchHint flags\n * (ParentInlinedIntoSelf, InlinedIntoChild) computed by the segment size\n * measurement pass.\n *\n * Persisted to prefetch-hints.json as Record<string, PrefetchHints> (keyed\n * by route pattern) and loaded at server startup.\n */\nexport type PrefetchHints = {\n /** Bitmask of PrefetchHint flags for this segment. */\n hints: number\n /** Child hint nodes, keyed by parallel route key. */\n slots: Record<string, PrefetchHints> | null\n}\n\nexport type ActionResult = Promise<any>\n\nexport type InitialRSCPayload = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** initialCanonicalUrlParts */\n c: string[]\n /** initialRenderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** initialFlightData */\n f: FlightDataPath[]\n /** missingSlots */\n m: Set<string> | undefined\n /** GlobalError */\n G: [React.ComponentType<any>, React.ReactNode | undefined]\n /** supportsPerSegmentPrefetching */\n S: boolean\n /**\n * headVaryParams - vary params for the head (metadata) of the response.\n * Does not include root params (see `r`).\n */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params, rather than the server folding them into each set.\n */\n r?: VaryParamsIterable\n /** staleTime in seconds - Only present when Cache Components is enabled. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for normal rendering\nexport type NavigationFlightResponse = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** supportsPerSegmentPrefetching */\n S: boolean\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** staleTime - Only present in dynamic runtime prefetch responses. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /**\n * shellUsedSessionData - true if resolving session data\n * unblocked new content in the shell.\n * NOTE: only use this in runtime/session prefetch requests\n * where we have a proper session shell.\n * */\n u?: Promise<boolean>\n /** headVaryParams. Does not include root params (see `r`). */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params.\n */\n r?: VaryParamsIterable\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for server actions. Action's flight data can be null\nexport type ActionFlightResponse = {\n /** actionResult */\n a: ActionResult\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n}\n\nexport type RSCPayload =\n | InitialRSCPayload\n | NavigationFlightResponse\n | ActionFlightResponse\n\nexport type InstantCookie =\n // pending (waiting to capture)\n | [captured: 0, id: string]\n // captured MPA page load\n | [captured: 1, id: string, state: null]\n // captured SPA navigation (from/to route trees)\n | [\n captured: 1,\n id: string,\n state: { from: FlightRouterState; to: FlightRouterState | null },\n ]\n"],"names":["PrefetchHint","StaticPrefetchDisabled","SubtreePrefetchHints","propagateSubtreeBits","parentHints","childHints"],"mappings":"AAAA;;;;;CAKC;;;;;;;;;;;;;;;;;IAiLiBA,YAAY;eAAZA;;IAmELC,sBAAsB;eAAtBA;;IASAC,oBAAoB;eAApBA;;IAkBGC,oBAAoB;eAApBA;;;AA9FT,IAAA,AAAWH,sCAAAA;IAChB,gEAAgE;IAChE,2EAA2E;;IAE3E,wEAAwE;IACxE,+DAA+D;IAC/D,0EAA0E;IAC1E,mDAAmD;;IAEnD,kDAAkD;;IAElD,sEAAsE;IACtE,6DAA6D;;IAE7D,8EAA8E;IAC9E,2EAA2E;IAC3E,8BAA8B;;IAE9B,sEAAsE;IACtE,0DAA0D;;IAE1D,wEAAwE;IACxE,yEAAyE;;IAEzE,4EAA4E;IAC5E,6CAA6C;;IAE7C,wEAAwE;IACxE,4EAA4E;;IAE5E,oEAAoE;IACpE,0EAA0E;IAC1E,0EAA0E;IAC1E,kEAAkE;IAClE,0EAA0E;IAC1E,oBAAoB;;IAEpB,sDAAsD;IACtD,qDAAqD;;IAErD,sEAAsE;IACtE,mEAAmE;IACnE,kBAAkB;;IAElB,yEAAyE;IACzE,kEAAkE;IAClE,yEAAyE;IACzE,4EAA4E;IAC5E,wCAAwC;;IAExC,oEAAoE;IACpE,8EAA8E;IAC9E,kEAAkE;IAClE,+EAA+E;IAC/E,mCAAmC;;WAtDnBA;;AAmEX,MAAMC,yBACXD;AAQK,MAAME,uBACXF;AAiBK,SAASG,qBACdC,WAAmB,EACnBC,UAAkB;IAElB,IAAIA,gBAAwD;QAC1DD;IACF;IACA,+EAA+E;IAC/E,kDAAkD;IAClD,IACEC,aACCL,CAAAA,KACsC,GACvC;QACAI;IACF;IACA,iCAAiC;IACjC,IACEC,aACCL,CAAAA,QAAuE,GACxE;QACAI;IACF;IACA,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAIC,mBAAmD;QACrDD;IACF;IACA,6EAA6E;IAC7E,iDAAiD;IACjD,IAAIC,mBAAkD;QACpDD;IACF;IACA,OAAOA;AACT","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../src/shared/lib/app-router-types.ts"],"sourcesContent":["/**\n * App Router types - Client-safe types for the Next.js App Router\n *\n * This file contains type definitions that can be safely imported\n * by both client-side and server-side code without circular dependencies.\n */\n\nimport type React from 'react'\n\nexport type LoadingModuleData =\n | [React.JSX.Element, React.ReactNode, React.ReactNode]\n | null\n\nimport type { VaryParamsIterable } from './segment-cache/vary-params-decoding'\n\n/** viewport metadata node */\nexport type HeadData = React.ReactNode\n\n/**\n * Cache node used in app-router / layout-router.\n */\n\nexport type CacheNode = {\n /**\n * When rsc is not null, it represents the RSC data for the\n * corresponding segment.\n *\n * `null` is a valid React Node but because segment data is always a\n * <LayoutRouter> component, we can use `null` to represent empty. When it is\n * null, it represents missing data, and rendering should suspend.\n */\n rsc: React.ReactNode\n\n /**\n * Represents a static version of the segment that can be shown immediately,\n * and may or may not contain dynamic holes. It's prefetched before a\n * navigation occurs.\n *\n * During rendering, we will choose whether to render `rsc` or `prefetchRsc`\n * with `useDeferredValue`. As with the `rsc` field, a value of `null` means\n * no value was provided. In this case, the LayoutRouter will go straight to\n * rendering the `rsc` value; if that one is also missing, it will suspend and\n * trigger a lazy fetch.\n */\n prefetchRsc: React.ReactNode\n\n prefetchHead: HeadData | null\n\n head: HeadData\n\n slots: Record<string, CacheNode> | null\n\n /**\n * A shared mutable ref that tracks whether this segment should be scrolled\n * to. All new segments created during a single navigation share the same\n * ref. When any segment's scroll handler fires, it sets `current` to\n * `false` so no other segment scrolls for the same navigation.\n *\n * `null` means this segment is not a scroll target (e.g., a reused shared\n * layout segment).\n */\n scrollRef: ScrollRef | null\n\n /**\n * Globally-unique identifier minted from a monotonic counter when the\n * CacheNode is freshly created. Surfaced to user code as a string via\n * `useRouter().bfcacheId` and intended to be used as a React `key` to\n * opt out of Activity-based state preservation on fresh navigations.\n *\n * Preserved when the CacheNode is reused (shared layouts, refresh,\n * search/hash-only navigations) or restored from the BFCache during a\n * back/forward navigation.\n */\n bfcacheId: number\n}\n\n/**\n * A mutable ref shared across all new segments created during a single\n * navigation. Used to ensure that only one segment scrolls per navigation.\n */\nexport type ScrollRef = { current: boolean }\n\nexport type DynamicParamTypes =\n | 'catchall'\n | 'catchall-intercepted-(..)(..)'\n | 'catchall-intercepted-(.)'\n | 'catchall-intercepted-(..)'\n | 'catchall-intercepted-(...)'\n | 'optional-catchall'\n | 'dynamic'\n | 'dynamic-intercepted-(..)(..)'\n | 'dynamic-intercepted-(.)'\n | 'dynamic-intercepted-(..)'\n | 'dynamic-intercepted-(...)'\n\nexport type DynamicParamTypesShort =\n | 'c'\n | 'ci(..)(..)'\n | 'ci(.)'\n | 'ci(..)'\n | 'ci(...)'\n | 'oc'\n | 'd'\n | 'di(..)(..)'\n | 'di(.)'\n | 'di(..)'\n | 'di(...)'\n\n// The tuple form of a segment, used for dynamic route params\nexport type DynamicSegmentTuple = [\n // Param name\n paramName: string,\n // Param cache key (almost the same as the value, but arrays are\n // concatenated into strings)\n // TODO: We should change this to just be the value. Currently we convert\n // it back to a value when passing to useParams. It only needs to be\n // a string when converted to a a cache key, but that doesn't mean we\n // need to store it as that representation.\n paramCacheKey: string,\n // Dynamic param type\n dynamicParamType: DynamicParamTypesShort,\n // Static sibling segments at the same URL level. Used by the client\n // router to determine if a prefetch can be reused when navigating to\n // a static sibling of a dynamic route. For example, if the route is\n // /products/[id] and there's also /products/sale, then staticSiblings\n // would be ['sale']. null means the siblings are unknown (e.g. in\n // webpack dev mode).\n staticSiblings: readonly string[] | null,\n]\n\nexport type Segment = string | DynamicSegmentTuple\n\n/**\n * Router state\n */\nexport type FlightRouterState = [\n segment: Segment,\n parallelRoutes: { [parallelRouterKey: string]: FlightRouterState },\n refreshState?: CompressedRefreshState | null,\n /**\n * - \"refetch\" is used during a request to inform the server where rendering\n * should start from.\n *\n * - \"inside-shared-layout\" is used during a prefetch request to inform the\n * server that even if the segment matches, it should be treated as if it's\n * within the \"new\" part of a navigation — inside the shared layout. If\n * the segment doesn't match, then it has no effect, since it would be\n * treated as new regardless. If it does match, though, the server does not\n * need to render it, because the client already has it.\n *\n * - \"metadata-only\" instructs the server to skip rendering the segments and\n * only send the head data.\n *\n * A bit confusing, but that's because it has only one extremely narrow use\n * case — during a non-PPR prefetch, the server uses it to find the first\n * loading boundary beneath a shared layout.\n *\n * TODO: We should rethink the protocol for dynamic requests. It might not\n * make sense for the client to send a FlightRouterState, since this type is\n * overloaded with concerns.\n */\n refresh?: 'refetch' | 'inside-shared-layout' | 'metadata-only' | null,\n /**\n * Bitmask of PrefetchHint flags. Encodes route structure metadata:\n * root layout, loading boundaries, instant configs, and runtime prefetch\n * hints. Only set when non-zero.\n */\n prefetchHints?: number,\n]\n\n/**\n * When rendering a parallel route, some of the parallel paths may not match\n * the current URL. In that case, the Next client has to render something,\n * so it will render whichever was the last route to match that slot. We use\n * this type to track when this has happened. It's a tuple of the original\n * URL that was used to fetch the segment, and the (possibly rewritten) search\n * query that was rendered by the server. The URL is needed when performing\n * a refresh of the segment, and the search query is needed for looking up\n * matching entries in the segment cache.\n */\nexport type CompressedRefreshState = [url: string, renderedSearch: string]\n\nexport const enum PrefetchHint {\n // This segment has a runtime prefetch enabled (via instant with\n // prefetch: 'runtime'). Per-segment only, does not propagate to ancestors.\n HasRuntimePrefetch = 0b00001,\n // This segment or one of its descendants opts into Partial Prefetching, i.e.\n // uses the two-phase (Shell then Speculative) prefetch flow. Set when a\n // truthy instant config is present, or `prefetch` is 'partial',\n // 'unstable_eager', or 'allow-runtime'. Propagates upward so the root segment\n // reflects the entire subtree.\n SubtreeHasPartialPrefetching = 0b00010,\n // This segment itself has a loading.tsx boundary.\n SegmentHasLoadingBoundary = 0b00100,\n // A descendant segment (but not this one) has a loading.tsx boundary.\n // Propagates upward so the root reflects the entire subtree.\n SubtreeHasLoadingBoundary = 0b01000,\n // This segment is at or above the application's root layout — the root layout\n // segment itself and all of its ancestors. A dynamic param in one of these\n // segments is a \"root param\".\n IsRootLayoutOrAbove = 0b10000,\n // This segment's response includes its parent's data inlined into it.\n // Set at build time by the segment size measurement pass.\n ParentInlinedIntoSelf = 0b100000,\n // This segment's data is inlined into one of its children — don't fetch\n // it separately. Set at build time by the segment size measurement pass.\n InlinedIntoChild = 0b1000000,\n // On a __PAGE__: this page's response includes the head (metadata/viewport)\n // at the end of its SegmentPrefetch[] array.\n HeadInlinedIntoSelf = 0b10000000,\n // On the root hint node: the head was NOT inlined into any page — fetch\n // it separately. Absence of this bit means the head is bundled into a page.\n HeadOutlined = 0b100000000,\n // The inlining hints in this tree may be stale because the tree was\n // generated before collectPrefetchHints ran (e.g. the initial RSC payload\n // for a fully static page at build time). When writing this tree into the\n // cache, the route entry should be immediately expired so it gets\n // re-fetched with correct hints. Only set during build-time prerendering,\n // never at runtime.\n InliningHintsStale = 0b1000000000,\n // This segment has instant = false, opting out of all\n // prefetching entirely (neither static nor runtime).\n PrefetchDisabled = 0b10000000000,\n // This segment or one of its descendants has runtime prefetch enabled\n // (HasRuntimePrefetch). Propagates upward so the root reflects the\n // entire subtree.\n SubtreeHasRuntimePrefetch = 0b100000000000,\n // This segment or one of its descendants prefetches \"eagerly\" — i.e. its\n // effective prefetch strategy is anything other than 'partial' or\n // 'allow-runtime'. Used by App Shells: a non-eager subtree relies on the\n // shared app shell and skips its Speculative prefetch. Propagates upward so\n // the root reflects the entire subtree.\n SubtreeHasEagerPrefetch = 0b1000000000000,\n // This segment or one of its descendants exports `instant = false`,\n // explicitly opting out of Partial Prefetching. Propagates upward so the root\n // reflects the entire subtree. Used only to suppress the dev-time\n // `<Link prefetch={true}>` warning — unlike PrefetchDisabled, it has no effect\n // on the actual prefetch behavior.\n SubtreeHasInstantFalse = 0b10000000000000,\n}\n\n/**\n * Bitmask for checking whether a segment's static prefetch is skipped. Matches\n * if EITHER bit is set — i.e. the segment uses runtime prefetching\n * (HasRuntimePrefetch) OR prefetching is disabled entirely (PrefetchDisabled,\n * e.g. instant = false). The segment participates in the bundle chain\n * but with null data.\n *\n * Usage: `(hints & StaticPrefetchDisabled) !== 0`\n */\nexport const StaticPrefetchDisabled =\n PrefetchHint.HasRuntimePrefetch | PrefetchHint.PrefetchDisabled\n\n/**\n * The subset of PrefetchHint bits that propagate upward from a child segment to\n * its ancestors (as opposed to segment-local bits like SegmentHasLoadingBoundary\n * or IsRootLayoutOrAbove). Used to clear stale propagated bits before re-deriving them\n * from a node's children.\n */\nexport const SubtreePrefetchHints =\n PrefetchHint.SubtreeHasPartialPrefetching |\n PrefetchHint.SubtreeHasLoadingBoundary |\n PrefetchHint.SubtreeHasRuntimePrefetch |\n PrefetchHint.SubtreeHasInstantFalse |\n PrefetchHint.SubtreeHasEagerPrefetch\n\n/**\n * Folds a child segment's prefetch hints into its parent's, propagating the\n * \"subtree\" flags. A child's segment-local flag (e.g. it has a loading boundary,\n * or it has a runtime prefetch) becomes the corresponding \"subtree\" flag on the\n * parent, so the root segment ends up reflecting the entire subtree.\n *\n * Used wherever a route tree is assembled bottom-up: on the server when building\n * a prefetch tree (createFlightRouterStateFromLoaderTree) and on the client when\n * merging a navigation patch into the existing tree (convertServerPatchToFullTree).\n * Keep these in sync by routing both through this helper.\n */\nexport function propagateSubtreeBits(\n parentHints: number,\n childHints: number\n): number {\n if (childHints & PrefetchHint.SubtreeHasPartialPrefetching) {\n parentHints |= PrefetchHint.SubtreeHasPartialPrefetching\n }\n // A child with a loading boundary (directly, or anywhere in its subtree) makes\n // this a SubtreeHasLoadingBoundary on the parent.\n if (\n childHints &\n (PrefetchHint.SegmentHasLoadingBoundary |\n PrefetchHint.SubtreeHasLoadingBoundary)\n ) {\n parentHints |= PrefetchHint.SubtreeHasLoadingBoundary\n }\n // Likewise for runtime prefetch.\n if (\n childHints &\n (PrefetchHint.HasRuntimePrefetch | PrefetchHint.SubtreeHasRuntimePrefetch)\n ) {\n parentHints |= PrefetchHint.SubtreeHasRuntimePrefetch\n }\n // And for eager prefetch. The bit is set directly on each eager segment, so\n // there's no separate segment-local flag — propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasEagerPrefetch) {\n parentHints |= PrefetchHint.SubtreeHasEagerPrefetch\n }\n // And for `instant = false`. Like eager prefetch, the bit is set directly on\n // each opted-out segment, so propagate it as-is.\n if (childHints & PrefetchHint.SubtreeHasInstantFalse) {\n parentHints |= PrefetchHint.SubtreeHasInstantFalse\n }\n return parentHints\n}\n\n/**\n * Individual Flight response path\n */\nexport type FlightSegmentPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n ]\n\n/**\n * Represents a tree of segments and the Flight data (i.e. React nodes) that\n * correspond to each one. The tree is isomorphic to the FlightRouterState;\n * however in the future we want to be able to fetch arbitrary partial segments\n * without having to fetch all its children. So this response format will\n * likely change.\n */\nexport type CacheNodeSeedData = [\n node: React.ReactNode | null,\n parallelRoutes: {\n [parallelRouterKey: string]: CacheNodeSeedData | null\n },\n // TODO: This field is no longer used. Remove it.\n loading: null,\n isPartial: boolean,\n /**\n * An AsyncIterable that yields the route params this segment accessed during\n * server rendering (one name per yield, deduped). Used by the client router\n * to determine cache key specificity - segments that only access certain\n * params can be reused across navigations where unaccessed params change.\n *\n * Does NOT include root params; those are emitted once at the top level of\n * the response (see `r` on the payload) and unioned in by the consumer.\n *\n * - null: tracking was not enabled for this render (e.g., not a prerender).\n * Treat conservatively - assume all params vary.\n * - Drains to empty Set: segment accesses no params (e.g., client components,\n * or server components that don't read params). Can be shared across all\n * param values.\n * - Drains to non-empty Set: segment depends on those params. Can only reuse\n * when those specific params match.\n */\n varyParams: VaryParamsIterable | null,\n]\n\nexport type FlightDataSegment = [\n /* segment of the rendered slice: */ Segment,\n /* treePatch */ FlightRouterState,\n /* cacheNodeSeedData */ CacheNodeSeedData | null, // Can be null during prefetch if there's no loading component\n /* head: viewport */ HeadData,\n /* isHeadPartial */ boolean,\n]\n\nexport type FlightDataPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n // Holds full path to the segment.\n ...FlightSegmentPath[],\n ...FlightDataSegment,\n ]\n\n/**\n * The Flight response data\n */\nexport type FlightData = Array<FlightDataPath> | string\n\n/**\n * Per-route prefetch hints computed at build time. Mirrors the shape of the\n * loader tree so hints can be traversed in parallel during router state\n * creation. Each node stores a bitmask of PrefetchHint flags\n * (ParentInlinedIntoSelf, InlinedIntoChild) computed by the segment size\n * measurement pass.\n *\n * Persisted to prefetch-hints.json as Record<string, PrefetchHints> (keyed\n * by route pattern) and loaded at server startup.\n */\nexport type PrefetchHints = {\n /** Bitmask of PrefetchHint flags for this segment. */\n hints: number\n /** Child hint nodes, keyed by parallel route key. */\n slots: Record<string, PrefetchHints> | null\n}\n\nexport type ActionResult = Promise<any>\n\nexport type InitialRSCPayload = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** initialCanonicalUrlParts */\n c: string[]\n /** initialRenderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** initialFlightData */\n f: FlightDataPath[]\n /** missingSlots */\n m: Set<string> | undefined\n /** GlobalError */\n G: [React.ComponentType<any>, React.ReactNode | undefined]\n /** supportsPerSegmentPrefetching */\n S: boolean\n /**\n * headVaryParams - vary params for the head (metadata) of the response.\n * Does not include root params (see `r`).\n */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params, rather than the server folding them into each set.\n */\n r?: VaryParamsIterable\n /** staleTime in seconds - Only present when Cache Components is enabled. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for normal rendering\nexport type NavigationFlightResponse = {\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** supportsPerSegmentPrefetching */\n S: boolean\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n /** staleTime - Only present in dynamic runtime prefetch responses. */\n s?: AsyncIterable<number>\n /** staticStageByteLength - Resolves when the static stage ends. */\n l?: Promise<number>\n /**\n * shellByteLength - Resolves when the shell stage ends.\n * If it resolves to null, then the shell is the same as the main response.\n * */\n a?: Promise<number | null>\n /**\n * shellUsedSessionData - true if resolving session data\n * unblocked new content in the shell.\n * NOTE: only use this in runtime/session prefetch requests\n * where we have a proper session shell.\n * */\n u?: Promise<boolean>\n /** headVaryParams. Does not include root params (see `r`). */\n h: VaryParamsIterable | null\n /**\n * rootVaryParams - the root params accessed anywhere in the response, emitted\n * once. The client unions these into the head and every segment's vary\n * params.\n */\n r?: VaryParamsIterable\n /** runtimePrefetchStream — Embedded runtime prefetch Flight stream. */\n p?: ReadableStream<Uint8Array>\n /**\n * dynamicStaleTime — Per-page BFCache stale time in seconds, from\n * `unstable_dynamicStaleTime`. Only included for dynamic renders. Controls\n * how long the client router cache retains dynamic navigation data. This is\n * distinct from the `s` field, which controls segment cache (prefetch)\n * staleness.\n */\n d?: number\n /**\n * revealAfter (dev only). Resolves once the server has flushed the\n * shell-stage content to the stream (static shell, or runtime-prefetchable\n * shell for runtime-prefetch routes), or earlier on a cache miss. The client\n * decodes this from the payload and defers resolving the response's deferred\n * RSCs on it, so a boundary's children aren't revealed before their row has\n * been decoded (which would flush a premature Suspense fallback). Its\n * resolution row follows the children's row in the payload, so the children\n * are decoded by the time the client unblocks. The HTML render gates on the\n * same signal server-side instead of reading this field.\n */\n _revealAfter?: Promise<void>\n}\n\n// Response from `createFromFetch` for server actions. Action's flight data can be null\nexport type ActionFlightResponse = {\n /** actionResult */\n a: ActionResult\n /** buildId, can be empty if the x-nextjs-build-id header is set */\n b?: string\n /** flightData */\n f: FlightData\n /** renderedSearch */\n q: string\n /** couldBeIntercepted */\n i: boolean\n}\n\nexport type RSCPayload =\n | InitialRSCPayload\n | NavigationFlightResponse\n | ActionFlightResponse\n\nexport type InstantCookie =\n // pending (waiting to capture)\n | [captured: 0, id: string]\n // captured MPA page load\n | [captured: 1, id: string, state: null]\n // captured SPA navigation (from/to route trees)\n | [\n captured: 1,\n id: string,\n state: { from: FlightRouterState; to: FlightRouterState | null },\n ]\n"],"names":["PrefetchHint","StaticPrefetchDisabled","SubtreePrefetchHints","propagateSubtreeBits","parentHints","childHints"],"mappings":"AAAA;;;;;CAKC;;;;;;;;;;;;;;;;;IAiLiBA,YAAY;eAAZA;;IAoELC,sBAAsB;eAAtBA;;IASAC,oBAAoB;eAApBA;;IAkBGC,oBAAoB;eAApBA;;;AA/FT,IAAA,AAAWH,sCAAAA;IAChB,gEAAgE;IAChE,2EAA2E;;IAE3E,6EAA6E;IAC7E,wEAAwE;IACxE,gEAAgE;IAChE,8EAA8E;IAC9E,+BAA+B;;IAE/B,kDAAkD;;IAElD,sEAAsE;IACtE,6DAA6D;;IAE7D,8EAA8E;IAC9E,2EAA2E;IAC3E,8BAA8B;;IAE9B,sEAAsE;IACtE,0DAA0D;;IAE1D,wEAAwE;IACxE,yEAAyE;;IAEzE,4EAA4E;IAC5E,6CAA6C;;IAE7C,wEAAwE;IACxE,4EAA4E;;IAE5E,oEAAoE;IACpE,0EAA0E;IAC1E,0EAA0E;IAC1E,kEAAkE;IAClE,0EAA0E;IAC1E,oBAAoB;;IAEpB,sDAAsD;IACtD,qDAAqD;;IAErD,sEAAsE;IACtE,mEAAmE;IACnE,kBAAkB;;IAElB,yEAAyE;IACzE,kEAAkE;IAClE,yEAAyE;IACzE,4EAA4E;IAC5E,wCAAwC;;IAExC,oEAAoE;IACpE,8EAA8E;IAC9E,kEAAkE;IAClE,+EAA+E;IAC/E,mCAAmC;;WAvDnBA;;AAoEX,MAAMC,yBACXD;AAQK,MAAME,uBACXF;AAiBK,SAASG,qBACdC,WAAmB,EACnBC,UAAkB;IAElB,IAAIA,gBAAwD;QAC1DD;IACF;IACA,+EAA+E;IAC/E,kDAAkD;IAClD,IACEC,aACCL,CAAAA,KACsC,GACvC;QACAI;IACF;IACA,iCAAiC;IACjC,IACEC,aACCL,CAAAA,QAAuE,GACxE;QACAI;IACF;IACA,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAIC,mBAAmD;QACrDD;IACF;IACA,6EAA6E;IAC7E,iDAAiD;IACjD,IAAIC,mBAAkD;QACpDD;IACF;IACA,OAAOA;AACT","ignoreList":[0]} |
@@ -24,3 +24,3 @@ "use strict"; | ||
| function isStableBuild() { | ||
| return !"16.3.0-canary.87"?.includes('canary') && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV; | ||
| return !"16.3.0-canary.88"?.includes('canary') && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV; | ||
| } | ||
@@ -27,0 +27,0 @@ class CanaryOnlyConfigError extends Error { |
@@ -88,2 +88,5 @@ "use strict"; | ||
| } | ||
| entries() { | ||
| return this.map.entries(); | ||
| } | ||
| constructor(){ | ||
@@ -215,3 +218,4 @@ this.rawMap = new Map(); | ||
| rootMainFiles: [], | ||
| rootMainFilesTree: {} | ||
| rootMainFilesTree: {}, | ||
| pagesChunkGroupBootstrapParams: {} | ||
| }; | ||
@@ -226,2 +230,6 @@ for (const m of manifests){ | ||
| } | ||
| if (m.pagesChunkGroupBootstrapParams) { | ||
| Object.assign(manifest.pagesChunkGroupBootstrapParams, m.pagesChunkGroupBootstrapParams); | ||
| } | ||
| if (m.chunkLoadingGlobal) manifest.chunkLoadingGlobal = m.chunkLoadingGlobal; | ||
| } | ||
@@ -306,3 +314,21 @@ manifest.pages = sortObjectByKey(manifest.pages); | ||
| const clientBuildManifest = this.mergeClientBuildManifests(this.clientBuildManifests.values(), rewrites, sortedPageKeys); | ||
| const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(clientBuildManifest, null, 2)};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`; | ||
| // Expose each route's bootstrap params and the chunk-loading global to the client | ||
| // so `route-loader` can instantiate a navigated page's entry module. The server | ||
| // stores params as raw JSON per route. | ||
| const pageBootstrapParams = {}; | ||
| let chunkLoadingGlobal; | ||
| for (const [key, m] of this.buildManifests.entries()){ | ||
| // Only the pages-router `route-loader` reads `__TURBOPACK_PAGE_BOOTSTRAP`. App routes | ||
| // navigate via flight and never use it, so skip app entries to keep `_buildManifest.js` | ||
| // (loaded on every page) small. | ||
| if ((0, _entrykey.splitEntryKey)(key).type !== 'pages') continue; | ||
| if (m.chunkLoadingGlobal) chunkLoadingGlobal = m.chunkLoadingGlobal; | ||
| for (const [route, params] of Object.entries(m.pagesChunkGroupBootstrapParams ?? {})){ | ||
| pageBootstrapParams[route] = params; | ||
| } | ||
| } | ||
| // Only emit the bootstrap globals when a route actually inlined its bootstrap (shared runtime | ||
| // enabled). | ||
| const hasBootstrapParams = Object.keys(pageBootstrapParams).length > 0; | ||
| const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(clientBuildManifest, null, 2)};` + (hasBootstrapParams ? `self.__TURBOPACK_PAGE_BOOTSTRAP = ${JSON.stringify(pageBootstrapParams)};` + (chunkLoadingGlobal ? `self.__TURBOPACK_CHUNK_LOADING_GLOBAL = ${JSON.stringify(chunkLoadingGlobal)};` : '') : '') + `self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`; | ||
| (0, _writeatomic.writeFileAtomic)((0, _path.join)(this.distDir, buildManifestPath), clientBuildManifestJs); | ||
@@ -309,0 +335,0 @@ // This is just an empty placeholder, the actual manifest is written after prerendering in |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n CLIENT_STATIC_FILES_PATH,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n SUBRESOURCE_INTEGRITY_MANIFEST,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFileSync } from 'fs'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport { safePathToRegexp } from '../router/utils/route-match-utils'\nimport type { Entrypoints } from '../../../build/swc/types'\nimport {\n normalizeRewritesForBuildManifest,\n type ClientBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n createEdgeRuntimeManifest,\n} from '../../../build/webpack/plugins/build-manifest-plugin-utils'\nimport type { SubresourceIntegrityManifest } from '../../../build'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\ntype ManifestName =\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST\n | typeof TURBOPACK_CLIENT_BUILD_MANIFEST\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: ManifestName,\n type: string,\n firstCall: boolean\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n\n if (firstCall) {\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n page.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type,\n false\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let basePage = removeRouteSuffix(page)\n // For sitemap.xml routes with generateSitemaps, the manifest is at\n // /sitemap/[__metadata_id__]/route (without .xml), because the route\n // handler serves at /sitemap/[id] not /sitemap.xml/[id]\n if (basePage.endsWith('/sitemap.xml')) {\n basePage = basePage.slice(0, -'.xml'.length)\n }\n let metadataPage = addRouteSuffix(addMetadataIdToRoute(basePage))\n manifestPath = getManifestPath(metadataPage, distDir, name, type, false)\n }\n }\n\n return manifestPath\n}\n\nfunction readPartialManifestContent(\n distDir: string,\n name: ManifestName,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): string {\n const page = pageName\n const manifestPath = getManifestPath(page, distDir, name, type, true)\n return readFileSync(posix.join(manifestPath), 'utf-8')\n}\n\n/// Helper class that stores a map of manifests and tracks if they have changed\n/// since the last time they were written to disk. This is used to avoid\n/// unnecessary writes to disk.\nclass ManifestsMap<K, V> {\n private rawMap = new Map<K, string>()\n private map = new Map<K, V>()\n private extraInvalidationKey: string | undefined = undefined\n private changed = true\n\n set(key: K, value: string) {\n if (this.rawMap.get(key) === value) return\n this.changed = true\n this.rawMap.set(key, value)\n this.map.set(key, JSON.parse(value))\n }\n\n delete(key: K) {\n if (this.map.has(key)) {\n this.changed = true\n this.rawMap.delete(key)\n this.map.delete(key)\n }\n }\n\n get(key: K) {\n return this.map.get(key)\n }\n\n takeChanged(extraInvalidationKey?: any) {\n let changed = this.changed\n if (extraInvalidationKey !== undefined) {\n const stringified = JSON.stringify(extraInvalidationKey)\n if (this.extraInvalidationKey !== stringified) {\n this.extraInvalidationKey = stringified\n changed = true\n }\n }\n this.changed = false\n return changed\n }\n\n values() {\n return this.map.values()\n }\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: ManifestsMap<EntryKey, ActionManifest> =\n new ManifestsMap()\n private appPathsManifests: ManifestsMap<EntryKey, PagesManifest> =\n new ManifestsMap()\n private buildManifests: ManifestsMap<EntryKey, BuildManifest> =\n new ManifestsMap()\n private clientBuildManifests: ManifestsMap<EntryKey, ClientBuildManifest> =\n new ManifestsMap()\n private fontManifests: ManifestsMap<EntryKey, NextFontManifest> =\n new ManifestsMap()\n private middlewareManifests: ManifestsMap<\n EntryKey,\n TurbopackMiddlewareManifest\n > = new ManifestsMap()\n private pagesManifests: ManifestsMap<string, PagesManifest> =\n new ManifestsMap()\n private sriManifests: ManifestsMap<EntryKey, SubresourceIntegrityManifest> =\n new ManifestsMap()\n private encryptionKey: string\n /// interceptionRewrites that have been written to disk\n /// This is used to avoid unnecessary writes if the rewrites haven't changed\n private cachedInterceptionRewrites: string | undefined = undefined\n private pendingCacheDeletes: string[] = []\n\n private readonly distDir: string\n private readonly buildId: string\n private readonly dev: boolean\n private readonly sriEnabled: boolean\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n dev,\n sriEnabled,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n dev: boolean\n sriEnabled: boolean\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n this.dev = dev\n this.sriEnabled = sriEnabled\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.clientBuildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n }\n\n loadActionManifest(pageName: string): void {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n })\n action.filename = other[key].filename\n action.exportedName = other[key].exportedName\n Object.assign(action.workers, other[key].workers)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n\n return manifest\n }\n\n private writeActionManifest(): void {\n if (!this.actionManifests.takeChanged()) {\n return\n }\n const actionManifest = this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n this.pendingCacheDeletes.push(actionManifestJsonPath)\n this.pendingCacheDeletes.push(actionManifestJsPath)\n writeFileAtomic(actionManifestJsonPath, json)\n writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n loadAppPathsManifest(pageName: string): void {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n APP_PATHS_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private writeAppPathsManifest(): void {\n if (!this.appPathsManifests.takeChanged()) {\n return\n }\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n this.pendingCacheDeletes.push(appPathsManifestPath)\n writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private writeSriManifest(): void {\n if (!this.sriEnabled || !this.sriManifests.takeChanged()) {\n return\n }\n const sriManifest = this.mergeSriManifests(this.sriManifests.values())\n const pathJson = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n )\n const pathJs = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(pathJson)\n this.pendingCacheDeletes.push(pathJs)\n writeFileAtomic(pathJson, JSON.stringify(sriManifest, null, 2))\n writeFileAtomic(\n pathJs,\n `self.__SUBRESOURCE_INTEGRITY_MANIFEST=${JSON.stringify(\n JSON.stringify(sriManifest)\n )}`\n )\n }\n\n loadBuildManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n loadClientBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): void {\n this.clientBuildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n pageName,\n type\n )\n )\n }\n\n loadSriManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n if (!this.sriEnabled) return\n this.sriManifests.set(\n getEntryKey(type, 'client', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeBuildManifests(\n manifests: Iterable<BuildManifest>,\n lowPriorityFiles: string[]\n ) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n polyfillFiles: [],\n lowPriorityFiles,\n rootMainFiles: [],\n rootMainFilesTree: {},\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n if (m.rootMainFilesTree) {\n Object.assign(manifest.rootMainFilesTree!, m.rootMainFilesTree)\n }\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private mergeClientBuildManifests(\n manifests: Iterable<ClientBuildManifest>,\n rewrites: CustomRoutes['rewrites'],\n sortedPageKeys: string[]\n ): ClientBuildManifest {\n const manifest = {\n __rewrites: rewrites as any,\n sortedPages: sortedPageKeys,\n }\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writeInterceptionRouteRewriteManifest(\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): void {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(\n (\n require('../../../lib/is-interception-route-rewrite') as typeof import('../../../lib/is-interception-route-rewrite')\n ).isInterceptionRouteRewrite\n )\n )\n\n if (this.cachedInterceptionRewrites === interceptionRewrites) {\n return\n }\n this.cachedInterceptionRewrites = interceptionRewrites\n\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(interceptionRewriteManifestPath)\n\n writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n }\n\n private writeBuildManifest(lowPriorityFiles: string[]): void {\n if (!this.buildManifests.takeChanged()) {\n return\n }\n const buildManifest = this.mergeBuildManifests(\n this.buildManifests.values(),\n lowPriorityFiles\n )\n\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n\n this.pendingCacheDeletes.push(buildManifestPath)\n this.pendingCacheDeletes.push(middlewareBuildManifestPath)\n writeFileAtomic(buildManifestPath, JSON.stringify(buildManifest, null, 2))\n writeFileAtomic(\n middlewareBuildManifestPath,\n createEdgeRuntimeManifest(buildManifest)\n )\n\n // Write fallback build manifest\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[],\n lowPriorityFiles\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n this.pendingCacheDeletes.push(fallbackBuildManifestPath)\n writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n private writeClientBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): string[] {\n const rewrites = normalizeRewritesForBuildManifest(\n productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n\n let buildManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_buildManifest.js'\n )\n let ssgManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_ssgManifest.js'\n )\n\n if (\n this.dev &&\n !this.clientBuildManifests.takeChanged({ rewrites, sortedPageKeys })\n ) {\n return [buildManifestPath, ssgManifestPath]\n }\n\n const clientBuildManifest = this.mergeClientBuildManifests(\n this.clientBuildManifests.values(),\n rewrites,\n sortedPageKeys\n )\n const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(\n clientBuildManifest,\n null,\n 2\n )};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n\n writeFileAtomic(\n join(this.distDir, buildManifestPath),\n clientBuildManifestJs\n )\n // This is just an empty placeholder, the actual manifest is written after prerendering in\n // packages/next/src/build/index.ts\n writeFileAtomic(join(this.distDir, ssgManifestPath), srcEmptySsgManifest)\n\n return [buildManifestPath, ssgManifestPath]\n }\n\n loadFontManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n if (!this.fontManifests.takeChanged()) {\n return\n }\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(fontManifestJsonPath)\n this.pendingCacheDeletes.push(fontManifestJsPath)\n writeFileAtomic(fontManifestJsonPath, json)\n writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n /**\n * @returns If the manifest was written or not\n */\n loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): boolean {\n const middlewareManifestPath = getManifestPath(\n pageName,\n this.distDir,\n MIDDLEWARE_MANIFEST,\n type,\n true\n )\n\n // middlewareManifest is actually \"edge manifest\" and not all routes are edge runtime. If it is not written we skip it.\n if (!existsSync(middlewareManifestPath)) {\n return false\n }\n\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n readPartialManifestContent(\n this.distDir,\n MIDDLEWARE_MANIFEST,\n pageName,\n type\n )\n )\n\n return true\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = safePathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private writeMiddlewareManifest(): {\n clientMiddlewareManifestPath: string\n } {\n let clientMiddlewareManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST\n )\n\n if (this.dev && !this.middlewareManifests.takeChanged()) {\n return {\n clientMiddlewareManifestPath,\n }\n }\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Server middleware manifest\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n this.pendingCacheDeletes.push(middlewareManifestPath)\n writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n\n // Client middleware manifest This is only used in dev though, packages/next/src/build/index.ts\n // writes the mainfest again for builds.\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestJs = `self.__MIDDLEWARE_MATCHERS = ${JSON.stringify(\n matchers,\n null,\n 2\n )};self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()`\n\n this.pendingCacheDeletes.push(clientMiddlewareManifestPath)\n writeFileAtomic(\n join(this.distDir, clientMiddlewareManifestPath),\n clientMiddlewareManifestJs\n )\n\n return {\n clientMiddlewareManifestPath,\n }\n }\n\n loadPagesManifest(pageName: string): void {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n readPartialManifestContent(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private mergeSriManifests(manifests: Iterable<SubresourceIntegrityManifest>) {\n const manifest: SubresourceIntegrityManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writePagesManifest(): void {\n if (!this.pagesManifests.takeChanged()) {\n return\n }\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n this.pendingCacheDeletes.push(pagesManifestPath)\n writeFileAtomic(pagesManifestPath, JSON.stringify(pagesManifest, null, 2))\n }\n\n writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }): void {\n this.writeActionManifest()\n this.writeAppPathsManifest()\n const lowPriorityFiles = this.writeClientBuildManifest(\n entrypoints,\n devRewrites,\n productionRewrites\n )\n const { clientMiddlewareManifestPath } = this.writeMiddlewareManifest()\n this.writeBuildManifest([...lowPriorityFiles, clientMiddlewareManifestPath])\n this.writeInterceptionRouteRewriteManifest(devRewrites, productionRewrites)\n this.writeNextFontManifest()\n this.writePagesManifest()\n\n this.writeSriManifest()\n\n // Flush all queued cache deletions in a single require.cache scan\n if (this.pendingCacheDeletes.length > 0) {\n deleteCache(this.pendingCacheDeletes)\n this.pendingCacheDeletes = []\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["TurbopackManifestLoader","getManifestPath","page","distDir","name","type","firstCall","manifestPath","posix","join","getAssetPathFromRoute","isSitemapRoute","test","existsSync","replace","endsWith","basePage","removeRouteSuffix","slice","length","metadataPage","addRouteSuffix","addMetadataIdToRoute","readPartialManifestContent","pageName","readFileSync","ManifestsMap","set","key","value","rawMap","get","changed","map","JSON","parse","delete","has","takeChanged","extraInvalidationKey","undefined","stringified","stringify","values","Map","constructor","buildId","encryptionKey","dev","sriEnabled","actionManifests","appPathsManifests","buildManifests","clientBuildManifests","fontManifests","middlewareManifests","pagesManifests","sriManifests","cachedInterceptionRewrites","pendingCacheDeletes","loadActionManifest","getEntryKey","SERVER_REFERENCE_MANIFEST","mergeActionManifests","manifests","manifest","node","edge","mergeActionIds","actionEntries","other","action","workers","filename","exportedName","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","actionManifestJsonPath","actionManifestJsPath","json","push","writeFileAtomic","loadAppPathsManifest","APP_PATHS_MANIFEST","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeSriManifest","sriManifest","mergeSriManifests","pathJson","SUBRESOURCE_INTEGRITY_MANIFEST","pathJs","loadBuildManifest","BUILD_MANIFEST","loadClientBuildManifest","TURBOPACK_CLIENT_BUILD_MANIFEST","loadSriManifest","mergeBuildManifests","lowPriorityFiles","pages","devFiles","polyfillFiles","rootMainFiles","rootMainFilesTree","mergeClientBuildManifests","rewrites","sortedPageKeys","__rewrites","sortedPages","writeInterceptionRouteRewriteManifest","devRewrites","productionRewrites","beforeFiles","processRoute","afterFiles","fallback","interceptionRewrites","filter","require","isInterceptionRouteRewrite","interceptionRewriteManifestPath","INTERCEPTION_ROUTE_REWRITE_MANIFEST","writeBuildManifest","buildManifest","buildManifestPath","middlewareBuildManifestPath","MIDDLEWARE_BUILD_MANIFEST","createEdgeRuntimeManifest","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","writeClientBuildManifest","entrypoints","normalizeRewritesForBuildManifest","pagesKeys","keys","global","app","error","getSortedRoutes","CLIENT_STATIC_FILES_PATH","ssgManifestPath","clientBuildManifest","clientBuildManifestJs","srcEmptySsgManifest","loadFontManifest","NEXT_FONT_MANIFEST","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","middlewareManifestPath","MIDDLEWARE_MANIFEST","getMiddlewareManifest","deleteMiddlewareManifest","mergeMiddlewareManifests","version","middleware","sortedMiddleware","functions","instrumentation","updateFunctionDefinition","fun","files","concat","matcher","matchers","regexp","safePathToRegexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","clientMiddlewareManifestPath","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","middlewareManifest","forEach","startsWith","parsedPage","tryToParsePath","regexStr","Error","clientMiddlewareManifestJs","loadPagesManifest","PAGES_MANIFEST","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","deleteCache","obj","sort","reduce","acc"],"mappings":"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","ignoreList":[0]} | ||
| {"version":3,"sources":["../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n CLIENT_STATIC_FILES_PATH,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n SUBRESOURCE_INTEGRITY_MANIFEST,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFileSync } from 'fs'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, splitEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport { safePathToRegexp } from '../router/utils/route-match-utils'\nimport type { Entrypoints } from '../../../build/swc/types'\nimport {\n normalizeRewritesForBuildManifest,\n type ClientBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n createEdgeRuntimeManifest,\n} from '../../../build/webpack/plugins/build-manifest-plugin-utils'\nimport type { SubresourceIntegrityManifest } from '../../../build'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\ntype ManifestName =\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST\n | typeof TURBOPACK_CLIENT_BUILD_MANIFEST\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: ManifestName,\n type: string,\n firstCall: boolean\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n\n if (firstCall) {\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n page.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type,\n false\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let basePage = removeRouteSuffix(page)\n // For sitemap.xml routes with generateSitemaps, the manifest is at\n // /sitemap/[__metadata_id__]/route (without .xml), because the route\n // handler serves at /sitemap/[id] not /sitemap.xml/[id]\n if (basePage.endsWith('/sitemap.xml')) {\n basePage = basePage.slice(0, -'.xml'.length)\n }\n let metadataPage = addRouteSuffix(addMetadataIdToRoute(basePage))\n manifestPath = getManifestPath(metadataPage, distDir, name, type, false)\n }\n }\n\n return manifestPath\n}\n\nfunction readPartialManifestContent(\n distDir: string,\n name: ManifestName,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): string {\n const page = pageName\n const manifestPath = getManifestPath(page, distDir, name, type, true)\n return readFileSync(posix.join(manifestPath), 'utf-8')\n}\n\n/// Helper class that stores a map of manifests and tracks if they have changed\n/// since the last time they were written to disk. This is used to avoid\n/// unnecessary writes to disk.\nclass ManifestsMap<K, V> {\n private rawMap = new Map<K, string>()\n private map = new Map<K, V>()\n private extraInvalidationKey: string | undefined = undefined\n private changed = true\n\n set(key: K, value: string) {\n if (this.rawMap.get(key) === value) return\n this.changed = true\n this.rawMap.set(key, value)\n this.map.set(key, JSON.parse(value))\n }\n\n delete(key: K) {\n if (this.map.has(key)) {\n this.changed = true\n this.rawMap.delete(key)\n this.map.delete(key)\n }\n }\n\n get(key: K) {\n return this.map.get(key)\n }\n\n takeChanged(extraInvalidationKey?: any) {\n let changed = this.changed\n if (extraInvalidationKey !== undefined) {\n const stringified = JSON.stringify(extraInvalidationKey)\n if (this.extraInvalidationKey !== stringified) {\n this.extraInvalidationKey = stringified\n changed = true\n }\n }\n this.changed = false\n return changed\n }\n\n values() {\n return this.map.values()\n }\n\n entries() {\n return this.map.entries()\n }\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: ManifestsMap<EntryKey, ActionManifest> =\n new ManifestsMap()\n private appPathsManifests: ManifestsMap<EntryKey, PagesManifest> =\n new ManifestsMap()\n private buildManifests: ManifestsMap<EntryKey, BuildManifest> =\n new ManifestsMap()\n private clientBuildManifests: ManifestsMap<EntryKey, ClientBuildManifest> =\n new ManifestsMap()\n private fontManifests: ManifestsMap<EntryKey, NextFontManifest> =\n new ManifestsMap()\n private middlewareManifests: ManifestsMap<\n EntryKey,\n TurbopackMiddlewareManifest\n > = new ManifestsMap()\n private pagesManifests: ManifestsMap<string, PagesManifest> =\n new ManifestsMap()\n private sriManifests: ManifestsMap<EntryKey, SubresourceIntegrityManifest> =\n new ManifestsMap()\n private encryptionKey: string\n /// interceptionRewrites that have been written to disk\n /// This is used to avoid unnecessary writes if the rewrites haven't changed\n private cachedInterceptionRewrites: string | undefined = undefined\n private pendingCacheDeletes: string[] = []\n\n private readonly distDir: string\n private readonly buildId: string\n private readonly dev: boolean\n private readonly sriEnabled: boolean\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n dev,\n sriEnabled,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n dev: boolean\n sriEnabled: boolean\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n this.dev = dev\n this.sriEnabled = sriEnabled\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.clientBuildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n }\n\n loadActionManifest(pageName: string): void {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n })\n action.filename = other[key].filename\n action.exportedName = other[key].exportedName\n Object.assign(action.workers, other[key].workers)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n }\n\n return manifest\n }\n\n private writeActionManifest(): void {\n if (!this.actionManifests.takeChanged()) {\n return\n }\n const actionManifest = this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n this.pendingCacheDeletes.push(actionManifestJsonPath)\n this.pendingCacheDeletes.push(actionManifestJsPath)\n writeFileAtomic(actionManifestJsonPath, json)\n writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n loadAppPathsManifest(pageName: string): void {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n APP_PATHS_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private writeAppPathsManifest(): void {\n if (!this.appPathsManifests.takeChanged()) {\n return\n }\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n this.pendingCacheDeletes.push(appPathsManifestPath)\n writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private writeSriManifest(): void {\n if (!this.sriEnabled || !this.sriManifests.takeChanged()) {\n return\n }\n const sriManifest = this.mergeSriManifests(this.sriManifests.values())\n const pathJson = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`\n )\n const pathJs = join(\n this.distDir,\n 'server',\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(pathJson)\n this.pendingCacheDeletes.push(pathJs)\n writeFileAtomic(pathJson, JSON.stringify(sriManifest, null, 2))\n writeFileAtomic(\n pathJs,\n `self.__SUBRESOURCE_INTEGRITY_MANIFEST=${JSON.stringify(\n JSON.stringify(sriManifest)\n )}`\n )\n }\n\n loadBuildManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n loadClientBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): void {\n this.clientBuildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n pageName,\n type\n )\n )\n }\n\n loadSriManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n if (!this.sriEnabled) return\n this.sriManifests.set(\n getEntryKey(type, 'client', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SUBRESOURCE_INTEGRITY_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeBuildManifests(\n manifests: Iterable<BuildManifest>,\n lowPriorityFiles: string[]\n ) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n polyfillFiles: [],\n lowPriorityFiles,\n rootMainFiles: [],\n rootMainFilesTree: {},\n pagesChunkGroupBootstrapParams: {},\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n if (m.rootMainFilesTree) {\n Object.assign(manifest.rootMainFilesTree!, m.rootMainFilesTree)\n }\n if (m.pagesChunkGroupBootstrapParams) {\n Object.assign(\n manifest.pagesChunkGroupBootstrapParams!,\n m.pagesChunkGroupBootstrapParams\n )\n }\n if (m.chunkLoadingGlobal)\n manifest.chunkLoadingGlobal = m.chunkLoadingGlobal\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private mergeClientBuildManifests(\n manifests: Iterable<ClientBuildManifest>,\n rewrites: CustomRoutes['rewrites'],\n sortedPageKeys: string[]\n ): ClientBuildManifest {\n const manifest = {\n __rewrites: rewrites as any,\n sortedPages: sortedPageKeys,\n }\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writeInterceptionRouteRewriteManifest(\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): void {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(\n (\n require('../../../lib/is-interception-route-rewrite') as typeof import('../../../lib/is-interception-route-rewrite')\n ).isInterceptionRouteRewrite\n )\n )\n\n if (this.cachedInterceptionRewrites === interceptionRewrites) {\n return\n }\n this.cachedInterceptionRewrites = interceptionRewrites\n\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(interceptionRewriteManifestPath)\n\n writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n }\n\n private writeBuildManifest(lowPriorityFiles: string[]): void {\n if (!this.buildManifests.takeChanged()) {\n return\n }\n const buildManifest = this.mergeBuildManifests(\n this.buildManifests.values(),\n lowPriorityFiles\n )\n\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n\n this.pendingCacheDeletes.push(buildManifestPath)\n this.pendingCacheDeletes.push(middlewareBuildManifestPath)\n writeFileAtomic(buildManifestPath, JSON.stringify(buildManifest, null, 2))\n writeFileAtomic(\n middlewareBuildManifestPath,\n createEdgeRuntimeManifest(buildManifest)\n )\n\n // Write fallback build manifest\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[],\n lowPriorityFiles\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n this.pendingCacheDeletes.push(fallbackBuildManifestPath)\n writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n private writeClientBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): string[] {\n const rewrites = normalizeRewritesForBuildManifest(\n productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n\n let buildManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_buildManifest.js'\n )\n let ssgManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n '_ssgManifest.js'\n )\n\n if (\n this.dev &&\n !this.clientBuildManifests.takeChanged({ rewrites, sortedPageKeys })\n ) {\n return [buildManifestPath, ssgManifestPath]\n }\n\n const clientBuildManifest = this.mergeClientBuildManifests(\n this.clientBuildManifests.values(),\n rewrites,\n sortedPageKeys\n )\n\n // Expose each route's bootstrap params and the chunk-loading global to the client\n // so `route-loader` can instantiate a navigated page's entry module. The server\n // stores params as raw JSON per route.\n const pageBootstrapParams: Record<string, unknown> = {}\n let chunkLoadingGlobal: string | undefined\n for (const [key, m] of this.buildManifests.entries()) {\n // Only the pages-router `route-loader` reads `__TURBOPACK_PAGE_BOOTSTRAP`. App routes\n // navigate via flight and never use it, so skip app entries to keep `_buildManifest.js`\n // (loaded on every page) small.\n if (splitEntryKey(key).type !== 'pages') continue\n if (m.chunkLoadingGlobal) chunkLoadingGlobal = m.chunkLoadingGlobal\n for (const [route, params] of Object.entries(\n m.pagesChunkGroupBootstrapParams ?? {}\n )) {\n pageBootstrapParams[route] = params\n }\n }\n\n // Only emit the bootstrap globals when a route actually inlined its bootstrap (shared runtime\n // enabled).\n const hasBootstrapParams = Object.keys(pageBootstrapParams).length > 0\n const clientBuildManifestJs =\n `self.__BUILD_MANIFEST = ${JSON.stringify(clientBuildManifest, null, 2)};` +\n (hasBootstrapParams\n ? `self.__TURBOPACK_PAGE_BOOTSTRAP = ${JSON.stringify(pageBootstrapParams)};` +\n (chunkLoadingGlobal\n ? `self.__TURBOPACK_CHUNK_LOADING_GLOBAL = ${JSON.stringify(\n chunkLoadingGlobal\n )};`\n : '')\n : '') +\n `self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n\n writeFileAtomic(\n join(this.distDir, buildManifestPath),\n clientBuildManifestJs\n )\n // This is just an empty placeholder, the actual manifest is written after prerendering in\n // packages/next/src/build/index.ts\n writeFileAtomic(join(this.distDir, ssgManifestPath), srcEmptySsgManifest)\n\n return [buildManifestPath, ssgManifestPath]\n }\n\n loadFontManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n if (!this.fontManifests.takeChanged()) {\n return\n }\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n this.pendingCacheDeletes.push(fontManifestJsonPath)\n this.pendingCacheDeletes.push(fontManifestJsPath)\n writeFileAtomic(fontManifestJsonPath, json)\n writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n /**\n * @returns If the manifest was written or not\n */\n loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): boolean {\n const middlewareManifestPath = getManifestPath(\n pageName,\n this.distDir,\n MIDDLEWARE_MANIFEST,\n type,\n true\n )\n\n // middlewareManifest is actually \"edge manifest\" and not all routes are edge runtime. If it is not written we skip it.\n if (!existsSync(middlewareManifestPath)) {\n return false\n }\n\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n readPartialManifestContent(\n this.distDir,\n MIDDLEWARE_MANIFEST,\n pageName,\n type\n )\n )\n\n return true\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = safePathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private writeMiddlewareManifest(): {\n clientMiddlewareManifestPath: string\n } {\n let clientMiddlewareManifestPath = posix.join(\n CLIENT_STATIC_FILES_PATH,\n this.buildId,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST\n )\n\n if (this.dev && !this.middlewareManifests.takeChanged()) {\n return {\n clientMiddlewareManifestPath,\n }\n }\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Server middleware manifest\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n this.pendingCacheDeletes.push(middlewareManifestPath)\n writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n\n // Client middleware manifest This is only used in dev though, packages/next/src/build/index.ts\n // writes the mainfest again for builds.\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestJs = `self.__MIDDLEWARE_MATCHERS = ${JSON.stringify(\n matchers,\n null,\n 2\n )};self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()`\n\n this.pendingCacheDeletes.push(clientMiddlewareManifestPath)\n writeFileAtomic(\n join(this.distDir, clientMiddlewareManifestPath),\n clientMiddlewareManifestJs\n )\n\n return {\n clientMiddlewareManifestPath,\n }\n }\n\n loadPagesManifest(pageName: string): void {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n readPartialManifestContent(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private mergeSriManifests(manifests: Iterable<SubresourceIntegrityManifest>) {\n const manifest: SubresourceIntegrityManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writePagesManifest(): void {\n if (!this.pagesManifests.takeChanged()) {\n return\n }\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n this.pendingCacheDeletes.push(pagesManifestPath)\n writeFileAtomic(pagesManifestPath, JSON.stringify(pagesManifest, null, 2))\n }\n\n writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }): void {\n this.writeActionManifest()\n this.writeAppPathsManifest()\n const lowPriorityFiles = this.writeClientBuildManifest(\n entrypoints,\n devRewrites,\n productionRewrites\n )\n const { clientMiddlewareManifestPath } = this.writeMiddlewareManifest()\n this.writeBuildManifest([...lowPriorityFiles, clientMiddlewareManifestPath])\n this.writeInterceptionRouteRewriteManifest(devRewrites, productionRewrites)\n this.writeNextFontManifest()\n this.writePagesManifest()\n\n this.writeSriManifest()\n\n // Flush all queued cache deletions in a single require.cache scan\n if (this.pendingCacheDeletes.length > 0) {\n deleteCache(this.pendingCacheDeletes)\n this.pendingCacheDeletes = []\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["TurbopackManifestLoader","getManifestPath","page","distDir","name","type","firstCall","manifestPath","posix","join","getAssetPathFromRoute","isSitemapRoute","test","existsSync","replace","endsWith","basePage","removeRouteSuffix","slice","length","metadataPage","addRouteSuffix","addMetadataIdToRoute","readPartialManifestContent","pageName","readFileSync","ManifestsMap","set","key","value","rawMap","get","changed","map","JSON","parse","delete","has","takeChanged","extraInvalidationKey","undefined","stringified","stringify","values","entries","Map","constructor","buildId","encryptionKey","dev","sriEnabled","actionManifests","appPathsManifests","buildManifests","clientBuildManifests","fontManifests","middlewareManifests","pagesManifests","sriManifests","cachedInterceptionRewrites","pendingCacheDeletes","loadActionManifest","getEntryKey","SERVER_REFERENCE_MANIFEST","mergeActionManifests","manifests","manifest","node","edge","mergeActionIds","actionEntries","other","action","workers","filename","exportedName","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","actionManifestJsonPath","actionManifestJsPath","json","push","writeFileAtomic","loadAppPathsManifest","APP_PATHS_MANIFEST","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeSriManifest","sriManifest","mergeSriManifests","pathJson","SUBRESOURCE_INTEGRITY_MANIFEST","pathJs","loadBuildManifest","BUILD_MANIFEST","loadClientBuildManifest","TURBOPACK_CLIENT_BUILD_MANIFEST","loadSriManifest","mergeBuildManifests","lowPriorityFiles","pages","devFiles","polyfillFiles","rootMainFiles","rootMainFilesTree","pagesChunkGroupBootstrapParams","chunkLoadingGlobal","mergeClientBuildManifests","rewrites","sortedPageKeys","__rewrites","sortedPages","writeInterceptionRouteRewriteManifest","devRewrites","productionRewrites","beforeFiles","processRoute","afterFiles","fallback","interceptionRewrites","filter","require","isInterceptionRouteRewrite","interceptionRewriteManifestPath","INTERCEPTION_ROUTE_REWRITE_MANIFEST","writeBuildManifest","buildManifest","buildManifestPath","middlewareBuildManifestPath","MIDDLEWARE_BUILD_MANIFEST","createEdgeRuntimeManifest","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","writeClientBuildManifest","entrypoints","normalizeRewritesForBuildManifest","pagesKeys","keys","global","app","error","getSortedRoutes","CLIENT_STATIC_FILES_PATH","ssgManifestPath","clientBuildManifest","pageBootstrapParams","splitEntryKey","route","params","hasBootstrapParams","clientBuildManifestJs","srcEmptySsgManifest","loadFontManifest","NEXT_FONT_MANIFEST","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","middlewareManifestPath","MIDDLEWARE_MANIFEST","getMiddlewareManifest","deleteMiddlewareManifest","mergeMiddlewareManifests","version","middleware","sortedMiddleware","functions","instrumentation","updateFunctionDefinition","fun","files","concat","matcher","matchers","regexp","safePathToRegexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","clientMiddlewareManifestPath","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","middlewareManifest","forEach","startsWith","parsedPage","tryToParsePath","regexStr","Error","clientMiddlewareManifestJs","loadPagesManifest","PAGES_MANIFEST","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","deleteCache","obj","sort","reduce","acc"],"mappings":"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","ignoreList":[0]} |
@@ -85,3 +85,3 @@ "use strict"; | ||
| ciName: _ciinfo.isCI && _ciinfo.name || null, | ||
| nextVersion: "16.3.0-canary.87", | ||
| nextVersion: "16.3.0-canary.88", | ||
| agentName: await (0, _agentname.getAgentName)() | ||
@@ -88,0 +88,0 @@ }; |
@@ -14,7 +14,7 @@ "use strict"; | ||
| // This should be an invariant, if it fails our build tooling is broken. | ||
| if (typeof "16.3.0-canary.87" !== 'string') { | ||
| if (typeof "16.3.0-canary.88" !== 'string') { | ||
| return []; | ||
| } | ||
| const payload = { | ||
| nextVersion: "16.3.0-canary.87", | ||
| nextVersion: "16.3.0-canary.88", | ||
| nodeVersion: process.version, | ||
@@ -21,0 +21,0 @@ cliCommand: event.cliCommand, |
@@ -41,3 +41,3 @@ "use strict"; | ||
| payload: { | ||
| nextVersion: "16.3.0-canary.87", | ||
| nextVersion: "16.3.0-canary.88", | ||
| glibcVersion, | ||
@@ -44,0 +44,0 @@ installedSwcPackages, |
@@ -15,3 +15,3 @@ "use strict"; | ||
| // This should be an invariant, if it fails our build tooling is broken. | ||
| if (typeof "16.3.0-canary.87" !== 'string') { | ||
| if (typeof "16.3.0-canary.88" !== 'string') { | ||
| return []; | ||
@@ -21,3 +21,3 @@ } | ||
| const payload = { | ||
| nextVersion: "16.3.0-canary.87", | ||
| nextVersion: "16.3.0-canary.88", | ||
| nodeVersion: process.version, | ||
@@ -24,0 +24,0 @@ cliCommand: event.cliCommand, |
+10
-10
| { | ||
| "name": "next", | ||
| "version": "16.3.0-canary.87", | ||
| "version": "16.3.0-canary.88", | ||
| "description": "The React Framework", | ||
@@ -84,3 +84,3 @@ "main": "./dist/server/next.js", | ||
| "dependencies": { | ||
| "@next/env": "16.3.0-canary.87", | ||
| "@next/env": "16.3.0-canary.88", | ||
| "@swc/helpers": "0.5.15", | ||
@@ -116,10 +116,10 @@ "baseline-browser-mapping": "^2.9.19", | ||
| "sharp": "^0.34.5", | ||
| "@next/swc-darwin-arm64": "16.3.0-canary.87", | ||
| "@next/swc-darwin-x64": "16.3.0-canary.87", | ||
| "@next/swc-linux-arm64-gnu": "16.3.0-canary.87", | ||
| "@next/swc-linux-arm64-musl": "16.3.0-canary.87", | ||
| "@next/swc-linux-x64-gnu": "16.3.0-canary.87", | ||
| "@next/swc-linux-x64-musl": "16.3.0-canary.87", | ||
| "@next/swc-win32-arm64-msvc": "16.3.0-canary.87", | ||
| "@next/swc-win32-x64-msvc": "16.3.0-canary.87" | ||
| "@next/swc-darwin-arm64": "16.3.0-canary.88", | ||
| "@next/swc-darwin-x64": "16.3.0-canary.88", | ||
| "@next/swc-linux-arm64-gnu": "16.3.0-canary.88", | ||
| "@next/swc-linux-arm64-musl": "16.3.0-canary.88", | ||
| "@next/swc-linux-x64-gnu": "16.3.0-canary.88", | ||
| "@next/swc-linux-x64-musl": "16.3.0-canary.88", | ||
| "@next/swc-win32-arm64-msvc": "16.3.0-canary.88", | ||
| "@next/swc-win32-x64-msvc": "16.3.0-canary.88" | ||
| }, | ||
@@ -126,0 +126,0 @@ "keywords": [ |
| self.__BUILD_MANIFEST = { | ||
| "__rewrites": { | ||
| "afterFiles": [], | ||
| "beforeFiles": [], | ||
| "fallback": [] | ||
| }, | ||
| "sortedPages": [ | ||
| "/_app", | ||
| "/_error" | ||
| ] | ||
| };self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() |
| self.__MIDDLEWARE_MATCHERS = [];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB() |
| self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Potential vulnerability
Supply chain riskInitial human review suggests the presence of a vulnerability in this package. It is pending further analysis and confirmation.
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 7 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Potential vulnerability
Supply chain riskInitial human review suggests the presence of a vulnerability in this package. It is pending further analysis and confirmation.
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 7 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
171196608
0.07%8438
0.06%1286111
0.03%4429
-0.4%716
-0.83%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated