next 15.4.0-canary.41 → 15.4.0-canary.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/swc/index.js +1 -1
  4. package/dist/build/turbopack-build/impl.js +50 -0
  5. package/dist/build/turbopack-build/impl.js.map +1 -1
  6. package/dist/build/utils.d.ts +1 -0
  7. package/dist/build/utils.js +9 -0
  8. package/dist/build/utils.js.map +1 -1
  9. package/dist/build/webpack-config.js +20 -4
  10. package/dist/build/webpack-config.js.map +1 -1
  11. package/dist/client/app-bootstrap.js +1 -1
  12. package/dist/client/index.js +1 -1
  13. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
  14. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +2 -2
  15. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  16. package/dist/compiled/next-server/pages.runtime.prod.js +2 -2
  17. package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
  18. package/dist/compiled/next-server/server.runtime.prod.js +2 -2
  19. package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
  20. package/dist/esm/build/index.js +2 -2
  21. package/dist/esm/build/swc/index.js +1 -1
  22. package/dist/esm/build/turbopack-build/impl.js +9 -0
  23. package/dist/esm/build/turbopack-build/impl.js.map +1 -1
  24. package/dist/esm/build/utils.js +5 -0
  25. package/dist/esm/build/utils.js.map +1 -1
  26. package/dist/esm/build/webpack-config.js +21 -5
  27. package/dist/esm/build/webpack-config.js.map +1 -1
  28. package/dist/esm/client/app-bootstrap.js +1 -1
  29. package/dist/esm/client/index.js +1 -1
  30. package/dist/esm/server/base-server.js +1 -1
  31. package/dist/esm/server/base-server.js.map +1 -1
  32. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  33. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  34. package/dist/esm/server/lib/app-info-log.js +1 -1
  35. package/dist/esm/server/lib/incremental-cache/index.js +4 -2
  36. package/dist/esm/server/lib/incremental-cache/index.js.map +1 -1
  37. package/dist/esm/server/lib/start-server.js +1 -1
  38. package/dist/esm/server/typescript/rules/client-boundary.js +2 -1
  39. package/dist/esm/server/typescript/rules/client-boundary.js.map +1 -1
  40. package/dist/esm/server/web/adapter.js +4 -1
  41. package/dist/esm/server/web/adapter.js.map +1 -1
  42. package/dist/esm/server/web/sandbox/sandbox.js +1 -0
  43. package/dist/esm/server/web/sandbox/sandbox.js.map +1 -1
  44. package/dist/esm/shared/lib/canary-only.js +1 -1
  45. package/dist/server/base-server.js +1 -1
  46. package/dist/server/base-server.js.map +1 -1
  47. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  48. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  49. package/dist/server/lib/app-info-log.js +1 -1
  50. package/dist/server/lib/incremental-cache/index.js +4 -2
  51. package/dist/server/lib/incremental-cache/index.js.map +1 -1
  52. package/dist/server/lib/start-server.js +1 -1
  53. package/dist/server/typescript/rules/client-boundary.js +2 -1
  54. package/dist/server/typescript/rules/client-boundary.js.map +1 -1
  55. package/dist/server/web/adapter.js +4 -1
  56. package/dist/server/web/adapter.js.map +1 -1
  57. package/dist/server/web/sandbox/sandbox.js +1 -0
  58. package/dist/server/web/sandbox/sandbox.js.map +1 -1
  59. package/dist/shared/lib/canary-only.js +1 -1
  60. package/dist/telemetry/anonymous-meta.js +1 -1
  61. package/dist/telemetry/events/session-stopped.js +2 -2
  62. package/dist/telemetry/events/version.js +2 -2
  63. package/package.json +15 -15
@@ -139,7 +139,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
139
139
  }
140
140
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
141
141
  const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
142
- version: "15.4.0-canary.41"
142
+ version: "15.4.0-canary.43"
143
143
  });
144
144
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
145
145
  // of the current `next dev` invocation.
@@ -257,7 +257,7 @@ class HotReloaderWebpack {
257
257
  this.previewProps = previewProps;
258
258
  this.rewrites = rewrites;
259
259
  this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
260
- version: "15.4.0-canary.41"
260
+ version: "15.4.0-canary.43"
261
261
  });
262
262
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
263
263
  // of the current `next dev` invocation.
@@ -75,7 +75,7 @@ function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, maxEx
75
75
  } else {
76
76
  bundlerSuffix = '';
77
77
  }
78
- _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.4.0-canary.41"}`))}${bundlerSuffix}`);
78
+ _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.4.0-canary.43"}`))}${bundlerSuffix}`);
79
79
  if (appUrl) {
80
80
  _log.bootstrap(`- Local: ${appUrl}`);
81
81
  }
@@ -374,13 +374,15 @@ class IncrementalCache {
374
374
  if (ctx.fetchCache && // we don't show this error/warning when a custom cache handler is being used
375
375
  // as it might not have this limit
376
376
  !this.hasCustomCacheHandler && itemSize > 2 * 1024 * 1024) {
377
+ const warningText = `Failed to set Next.js data cache for ${ctx.fetchUrl || pathname}, items over 2MB can not be cached (${itemSize} bytes)`;
377
378
  if (this.dev) {
378
- throw Object.defineProperty(new Error(`Failed to set Next.js data cache, items over 2MB can not be cached (${itemSize} bytes)`), "__NEXT_ERROR_CODE", {
379
- value: "E86",
379
+ throw Object.defineProperty(new Error(warningText), "__NEXT_ERROR_CODE", {
380
+ value: "E394",
380
381
  enumerable: false,
381
382
  configurable: true
382
383
  });
383
384
  }
385
+ console.warn(warningText);
384
386
  return;
385
387
  }
386
388
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/server/lib/incremental-cache/index.ts"],"sourcesContent":["import type { CacheFs } from '../../../shared/lib/utils'\nimport type { PrerenderManifest } from '../../../build'\nimport {\n type IncrementalCacheValue,\n type IncrementalCacheEntry,\n type IncrementalCache as IncrementalCacheType,\n IncrementalCacheKind,\n CachedRouteKind,\n type IncrementalResponseCacheEntry,\n type IncrementalFetchCacheEntry,\n type GetIncrementalFetchCacheContext,\n type GetIncrementalResponseCacheContext,\n type CachedFetchValue,\n type SetIncrementalFetchCacheContext,\n type SetIncrementalResponseCacheContext,\n} from '../../response-cache'\nimport type { DeepReadonly } from '../../../shared/lib/deep-readonly'\n\nimport FileSystemCache from './file-system-cache'\nimport { normalizePagePath } from '../../../shared/lib/page-path/normalize-page-path'\n\nimport {\n CACHE_ONE_YEAR,\n PRERENDER_REVALIDATE_HEADER,\n} from '../../../lib/constants'\nimport { toRoute } from '../to-route'\nimport { SharedCacheControls } from './shared-cache-controls'\nimport {\n getPrerenderResumeDataCache,\n getRenderResumeDataCache,\n workUnitAsyncStorage,\n} from '../../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../../shared/lib/invariant-error'\nimport type { Revalidate } from '../cache-control'\nimport { getPreviouslyRevalidatedTags } from '../../server-utils'\nimport { workAsyncStorage } from '../../app-render/work-async-storage.external'\n\nexport interface CacheHandlerContext {\n fs?: CacheFs\n dev?: boolean\n flushToDisk?: boolean\n serverDistDir?: string\n maxMemoryCacheSize?: number\n fetchCacheKeyPrefix?: string\n prerenderManifest?: PrerenderManifest\n revalidatedTags: string[]\n _requestHeaders: IncrementalCache['requestHeaders']\n}\n\nexport interface CacheHandlerValue {\n lastModified?: number\n age?: number\n cacheState?: string\n value: IncrementalCacheValue | null\n}\n\nexport class CacheHandler {\n // eslint-disable-next-line\n constructor(_ctx: CacheHandlerContext) {}\n\n public async get(\n _cacheKey: string,\n _ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<CacheHandlerValue | null> {\n return {} as any\n }\n\n public async set(\n _cacheKey: string,\n _data: IncrementalCacheValue | null,\n _ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {}\n\n public async revalidateTag(\n ..._args: Parameters<IncrementalCache['revalidateTag']>\n ): Promise<void> {}\n\n public resetRequestCache(): void {}\n}\n\nexport class IncrementalCache implements IncrementalCacheType {\n readonly dev?: boolean\n readonly disableForTestmode?: boolean\n readonly cacheHandler?: CacheHandler\n readonly hasCustomCacheHandler: boolean\n readonly prerenderManifest: DeepReadonly<PrerenderManifest>\n readonly requestHeaders: Record<string, undefined | string | string[]>\n readonly requestProtocol?: 'http' | 'https'\n readonly allowedRevalidateHeaderKeys?: string[]\n readonly minimalMode?: boolean\n readonly fetchCacheKeyPrefix?: string\n readonly revalidatedTags?: string[]\n readonly isOnDemandRevalidate?: boolean\n\n private readonly locks = new Map<string, Promise<void>>()\n\n /**\n * The cache controls for routes. This will source the values from the\n * prerender manifest until the in-memory cache is updated with new values.\n */\n private readonly cacheControls: SharedCacheControls\n\n constructor({\n fs,\n dev,\n flushToDisk,\n minimalMode,\n serverDistDir,\n requestHeaders,\n requestProtocol,\n maxMemoryCacheSize,\n getPrerenderManifest,\n fetchCacheKeyPrefix,\n CurCacheHandler,\n allowedRevalidateHeaderKeys,\n }: {\n fs?: CacheFs\n dev: boolean\n minimalMode?: boolean\n serverDistDir?: string\n flushToDisk?: boolean\n requestProtocol?: 'http' | 'https'\n allowedRevalidateHeaderKeys?: string[]\n requestHeaders: IncrementalCache['requestHeaders']\n maxMemoryCacheSize?: number\n getPrerenderManifest: () => DeepReadonly<PrerenderManifest>\n fetchCacheKeyPrefix?: string\n CurCacheHandler?: typeof CacheHandler\n }) {\n const debug = !!process.env.NEXT_PRIVATE_DEBUG_CACHE\n this.hasCustomCacheHandler = Boolean(CurCacheHandler)\n\n const cacheHandlersSymbol = Symbol.for('@next/cache-handlers')\n const _globalThis: typeof globalThis & {\n [cacheHandlersSymbol]?: {\n FetchCache?: typeof CacheHandler\n }\n } = globalThis\n\n if (!CurCacheHandler) {\n // if we have a global cache handler available leverage it\n const globalCacheHandler = _globalThis[cacheHandlersSymbol]\n\n if (globalCacheHandler?.FetchCache) {\n CurCacheHandler = globalCacheHandler.FetchCache\n } else {\n if (fs && serverDistDir) {\n if (debug) {\n console.log('using filesystem cache handler')\n }\n CurCacheHandler = FileSystemCache\n }\n }\n } else if (debug) {\n console.log('using custom cache handler', CurCacheHandler.name)\n }\n\n if (process.env.__NEXT_TEST_MAX_ISR_CACHE) {\n // Allow cache size to be overridden for testing purposes\n maxMemoryCacheSize = parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE, 10)\n }\n this.dev = dev\n this.disableForTestmode = process.env.NEXT_PRIVATE_TEST_PROXY === 'true'\n // this is a hack to avoid Webpack knowing this is equal to this.minimalMode\n // because we replace this.minimalMode to true in production bundles.\n const minimalModeKey = 'minimalMode'\n this[minimalModeKey] = minimalMode\n this.requestHeaders = requestHeaders\n this.requestProtocol = requestProtocol\n this.allowedRevalidateHeaderKeys = allowedRevalidateHeaderKeys\n this.prerenderManifest = getPrerenderManifest()\n this.cacheControls = new SharedCacheControls(this.prerenderManifest)\n this.fetchCacheKeyPrefix = fetchCacheKeyPrefix\n let revalidatedTags: string[] = []\n\n if (\n requestHeaders[PRERENDER_REVALIDATE_HEADER] ===\n this.prerenderManifest?.preview?.previewModeId\n ) {\n this.isOnDemandRevalidate = true\n }\n\n if (minimalMode) {\n revalidatedTags = getPreviouslyRevalidatedTags(\n requestHeaders,\n this.prerenderManifest?.preview?.previewModeId\n )\n }\n\n if (CurCacheHandler) {\n this.cacheHandler = new CurCacheHandler({\n dev,\n fs,\n flushToDisk,\n serverDistDir,\n revalidatedTags,\n maxMemoryCacheSize,\n _requestHeaders: requestHeaders,\n fetchCacheKeyPrefix,\n })\n }\n }\n\n private calculateRevalidate(\n pathname: string,\n fromTime: number,\n dev: boolean,\n isFallback: boolean | undefined\n ): Revalidate {\n // in development we don't have a prerender-manifest\n // and default to always revalidating to allow easier debugging\n if (dev)\n return Math.floor(performance.timeOrigin + performance.now() - 1000)\n\n const cacheControl = this.cacheControls.get(toRoute(pathname))\n\n // if an entry isn't present in routes we fallback to a default\n // of revalidating after 1 second unless it's a fallback request.\n const initialRevalidateSeconds = cacheControl\n ? cacheControl.revalidate\n : isFallback\n ? false\n : 1\n\n const revalidateAfter =\n typeof initialRevalidateSeconds === 'number'\n ? initialRevalidateSeconds * 1000 + fromTime\n : initialRevalidateSeconds\n\n return revalidateAfter\n }\n\n _getPathname(pathname: string, fetchCache?: boolean) {\n return fetchCache ? pathname : normalizePagePath(pathname)\n }\n\n resetRequestCache() {\n this.cacheHandler?.resetRequestCache?.()\n }\n\n async lock(cacheKey: string) {\n let unlockNext: () => Promise<void> = () => Promise.resolve()\n const existingLock = this.locks.get(cacheKey)\n\n if (existingLock) {\n await existingLock\n }\n\n const newLock = new Promise<void>((resolve) => {\n unlockNext = async () => {\n resolve()\n this.locks.delete(cacheKey) // Remove the lock upon release\n }\n })\n\n this.locks.set(cacheKey, newLock)\n return unlockNext\n }\n\n async revalidateTag(tags: string | string[]): Promise<void> {\n return this.cacheHandler?.revalidateTag(tags)\n }\n\n // x-ref: https://github.com/facebook/react/blob/2655c9354d8e1c54ba888444220f63e836925caa/packages/react/src/ReactFetch.js#L23\n async generateCacheKey(\n url: string,\n init: RequestInit | Request = {}\n ): Promise<string> {\n // this should be bumped anytime a fix is made to cache entries\n // that should bust the cache\n const MAIN_KEY_PREFIX = 'v3'\n\n const bodyChunks: string[] = []\n\n const encoder = new TextEncoder()\n const decoder = new TextDecoder()\n\n if (init.body) {\n // handle ReadableStream body\n if (typeof (init.body as any).getReader === 'function') {\n const readableBody = init.body as ReadableStream<Uint8Array | string>\n\n const chunks: Uint8Array[] = []\n\n try {\n await readableBody.pipeTo(\n new WritableStream({\n write(chunk) {\n if (typeof chunk === 'string') {\n chunks.push(encoder.encode(chunk))\n bodyChunks.push(chunk)\n } else {\n chunks.push(chunk)\n bodyChunks.push(decoder.decode(chunk, { stream: true }))\n }\n },\n })\n )\n\n // Flush the decoder.\n bodyChunks.push(decoder.decode())\n\n // Create a new buffer with all the chunks.\n const length = chunks.reduce((total, arr) => total + arr.length, 0)\n const arrayBuffer = new Uint8Array(length)\n\n // Push each of the chunks into the new array buffer.\n let offset = 0\n for (const chunk of chunks) {\n arrayBuffer.set(chunk, offset)\n offset += chunk.length\n }\n\n ;(init as any)._ogBody = arrayBuffer\n } catch (err) {\n console.error('Problem reading body', err)\n }\n } // handle FormData or URLSearchParams bodies\n else if (typeof (init.body as any).keys === 'function') {\n const formData = init.body as FormData\n ;(init as any)._ogBody = init.body\n for (const key of new Set([...formData.keys()])) {\n const values = formData.getAll(key)\n bodyChunks.push(\n `${key}=${(\n await Promise.all(\n values.map(async (val) => {\n if (typeof val === 'string') {\n return val\n } else {\n return await val.text()\n }\n })\n )\n ).join(',')}`\n )\n }\n // handle blob body\n } else if (typeof (init.body as any).arrayBuffer === 'function') {\n const blob = init.body as Blob\n const arrayBuffer = await blob.arrayBuffer()\n bodyChunks.push(await blob.text())\n ;(init as any)._ogBody = new Blob([arrayBuffer], { type: blob.type })\n } else if (typeof init.body === 'string') {\n bodyChunks.push(init.body)\n ;(init as any)._ogBody = init.body\n }\n }\n\n const headers =\n typeof (init.headers || {}).keys === 'function'\n ? Object.fromEntries(init.headers as Headers)\n : Object.assign({}, init.headers)\n\n // w3c trace context headers can break request caching and deduplication\n // so we remove them from the cache key\n if ('traceparent' in headers) delete headers['traceparent']\n if ('tracestate' in headers) delete headers['tracestate']\n\n const cacheString = JSON.stringify([\n MAIN_KEY_PREFIX,\n this.fetchCacheKeyPrefix || '',\n url,\n init.method,\n headers,\n init.mode,\n init.redirect,\n init.credentials,\n init.referrer,\n init.referrerPolicy,\n init.integrity,\n init.cache,\n bodyChunks,\n ])\n\n if (process.env.NEXT_RUNTIME === 'edge') {\n function bufferToHex(buffer: ArrayBuffer): string {\n return Array.prototype.map\n .call(new Uint8Array(buffer), (b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n const buffer = encoder.encode(cacheString)\n return bufferToHex(await crypto.subtle.digest('SHA-256', buffer))\n } else {\n const crypto = require('crypto') as typeof import('crypto')\n return crypto.createHash('sha256').update(cacheString).digest('hex')\n }\n }\n\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise<IncrementalFetchCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<IncrementalCacheEntry | null> {\n // Unlike other caches if we have a resume data cache, we use it even if\n // testmode would normally disable it or if requestHeaders say 'no-cache'.\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const resumeDataCache = workUnitStore\n ? getRenderResumeDataCache(workUnitStore)\n : null\n if (resumeDataCache) {\n const memoryCacheData = resumeDataCache.fetch.get(cacheKey)\n if (memoryCacheData?.kind === CachedRouteKind.FETCH) {\n return { isStale: false, value: memoryCacheData }\n }\n }\n }\n\n // we don't leverage the prerender cache in dev mode\n // so that getStaticProps is always called for easier debugging\n if (\n this.disableForTestmode ||\n (this.dev &&\n (ctx.kind !== IncrementalCacheKind.FETCH ||\n this.requestHeaders['cache-control'] === 'no-cache'))\n ) {\n return null\n }\n\n cacheKey = this._getPathname(\n cacheKey,\n ctx.kind === IncrementalCacheKind.FETCH\n )\n\n const cacheData = await this.cacheHandler?.get(cacheKey, ctx)\n\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n if (!cacheData) {\n return null\n }\n\n if (cacheData.value?.kind !== CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} to be a \"FETCH\" kind, got ${JSON.stringify(cacheData.value?.kind)} instead.`\n )\n }\n\n const workStore = workAsyncStorage.getStore()\n const combinedTags = [...(ctx.tags || []), ...(ctx.softTags || [])]\n // if a tag was revalidated we don't return stale data\n if (\n combinedTags.some(\n (tag) =>\n this.revalidatedTags?.includes(tag) ||\n workStore?.pendingRevalidatedTags?.includes(tag)\n )\n ) {\n return null\n }\n\n const revalidate = ctx.revalidate || cacheData.value.revalidate\n const age =\n (performance.timeOrigin +\n performance.now() -\n (cacheData.lastModified || 0)) /\n 1000\n\n const isStale = age > revalidate\n const data = cacheData.value.data\n\n return {\n isStale,\n value: { kind: CachedRouteKind.FETCH, data, revalidate },\n }\n } else if (cacheData?.value?.kind === CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} not to be a ${JSON.stringify(ctx.kind)} kind, got \"FETCH\" instead.`\n )\n }\n\n let entry: IncrementalResponseCacheEntry | null = null\n const cacheControl = this.cacheControls.get(toRoute(cacheKey))\n\n let isStale: boolean | -1 | undefined\n let revalidateAfter: Revalidate\n\n if (cacheData?.lastModified === -1) {\n isStale = -1\n revalidateAfter = -1 * CACHE_ONE_YEAR\n } else {\n revalidateAfter = this.calculateRevalidate(\n cacheKey,\n cacheData?.lastModified || performance.timeOrigin + performance.now(),\n this.dev ?? false,\n ctx.isFallback\n )\n isStale =\n revalidateAfter !== false &&\n revalidateAfter < performance.timeOrigin + performance.now()\n ? true\n : undefined\n }\n\n if (cacheData) {\n entry = {\n isStale,\n cacheControl,\n revalidateAfter,\n value: cacheData.value,\n }\n }\n\n if (\n !cacheData &&\n this.prerenderManifest.notFoundRoutes.includes(cacheKey)\n ) {\n // for the first hit after starting the server the cache\n // may not have a way to save notFound: true so if\n // the prerender-manifest marks this as notFound then we\n // return that entry and trigger a cache set to give it a\n // chance to update in-memory entries\n entry = {\n isStale,\n value: null,\n cacheControl,\n revalidateAfter,\n }\n this.set(cacheKey, entry.value, { ...ctx, cacheControl })\n }\n return entry\n }\n\n async set(\n pathname: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: IncrementalCacheValue | null,\n ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {\n // Even if we otherwise disable caching for testMode or if no fetchCache is\n // configured we still always stash results in the resume data cache if one\n // exists. This is because this is a transient in memory cache that\n // populates caches ahead of a dynamic render in dev mode to allow the RSC\n // debug info to have the right environment associated to it.\n if (data?.kind === CachedRouteKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const prerenderResumeDataCache = workUnitStore\n ? getPrerenderResumeDataCache(workUnitStore)\n : null\n if (prerenderResumeDataCache) {\n prerenderResumeDataCache.fetch.set(pathname, data)\n }\n }\n\n if (this.disableForTestmode || (this.dev && !ctx.fetchCache)) return\n\n pathname = this._getPathname(pathname, ctx.fetchCache)\n\n // FetchCache has upper limit of 2MB per-entry currently\n const itemSize = JSON.stringify(data).length\n if (\n ctx.fetchCache &&\n // we don't show this error/warning when a custom cache handler is being used\n // as it might not have this limit\n !this.hasCustomCacheHandler &&\n itemSize > 2 * 1024 * 1024\n ) {\n if (this.dev) {\n throw new Error(\n `Failed to set Next.js data cache, items over 2MB can not be cached (${itemSize} bytes)`\n )\n }\n return\n }\n\n try {\n if (!ctx.fetchCache && ctx.cacheControl) {\n this.cacheControls.set(toRoute(pathname), ctx.cacheControl)\n }\n\n await this.cacheHandler?.set(pathname, data, ctx)\n } catch (error) {\n console.warn('Failed to update prerender cache for', pathname, error)\n }\n }\n}\n"],"names":["CacheHandler","IncrementalCache","constructor","_ctx","get","_cacheKey","set","_data","revalidateTag","_args","resetRequestCache","fs","dev","flushToDisk","minimalMode","serverDistDir","requestHeaders","requestProtocol","maxMemoryCacheSize","getPrerenderManifest","fetchCacheKeyPrefix","CurCacheHandler","allowedRevalidateHeaderKeys","locks","Map","debug","process","env","NEXT_PRIVATE_DEBUG_CACHE","hasCustomCacheHandler","Boolean","cacheHandlersSymbol","Symbol","for","_globalThis","globalThis","globalCacheHandler","FetchCache","console","log","FileSystemCache","name","__NEXT_TEST_MAX_ISR_CACHE","parseInt","disableForTestmode","NEXT_PRIVATE_TEST_PROXY","minimalModeKey","prerenderManifest","cacheControls","SharedCacheControls","revalidatedTags","PRERENDER_REVALIDATE_HEADER","preview","previewModeId","isOnDemandRevalidate","getPreviouslyRevalidatedTags","cacheHandler","_requestHeaders","calculateRevalidate","pathname","fromTime","isFallback","Math","floor","performance","timeOrigin","now","cacheControl","toRoute","initialRevalidateSeconds","revalidate","revalidateAfter","_getPathname","fetchCache","normalizePagePath","lock","cacheKey","unlockNext","Promise","resolve","existingLock","newLock","delete","tags","generateCacheKey","url","init","MAIN_KEY_PREFIX","bodyChunks","encoder","TextEncoder","decoder","TextDecoder","body","getReader","readableBody","chunks","pipeTo","WritableStream","write","chunk","push","encode","decode","stream","length","reduce","total","arr","arrayBuffer","Uint8Array","offset","_ogBody","err","error","keys","formData","key","Set","values","getAll","all","map","val","text","join","blob","Blob","type","headers","Object","fromEntries","assign","cacheString","JSON","stringify","method","mode","redirect","credentials","referrer","referrerPolicy","integrity","cache","NEXT_RUNTIME","bufferToHex","buffer","Array","prototype","call","b","toString","padStart","crypto","subtle","digest","require","createHash","update","ctx","cacheData","kind","IncrementalCacheKind","FETCH","workUnitStore","workUnitAsyncStorage","getStore","resumeDataCache","getRenderResumeDataCache","memoryCacheData","fetch","CachedRouteKind","isStale","value","InvariantError","workStore","workAsyncStorage","combinedTags","softTags","some","tag","includes","pendingRevalidatedTags","age","lastModified","data","entry","CACHE_ONE_YEAR","undefined","notFoundRoutes","prerenderResumeDataCache","getPrerenderResumeDataCache","itemSize","Error","warn"],"mappings":";;;;;;;;;;;;;;;IAwDaA,YAAY;eAAZA;;IAwBAC,gBAAgB;eAAhBA;;;+BAjEN;wEAGqB;mCACM;2BAK3B;yBACiB;qCACY;8CAK7B;gCACwB;6BAEc;0CACZ;;;;;;AAqB1B,MAAMD;IACX,2BAA2B;IAC3BE,YAAYC,IAAyB,CAAE,CAAC;IAExC,MAAaC,IACXC,SAAiB,EACjBF,IAA0E,EACvC;QACnC,OAAO,CAAC;IACV;IAEA,MAAaG,IACXD,SAAiB,EACjBE,KAAmC,EACnCJ,IAA0E,EAC3D,CAAC;IAElB,MAAaK,cACX,GAAGC,KAAoD,EACxC,CAAC;IAEXC,oBAA0B,CAAC;AACpC;AAEO,MAAMT;IAsBXC,YAAY,EACVS,EAAE,EACFC,GAAG,EACHC,WAAW,EACXC,WAAW,EACXC,aAAa,EACbC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,oBAAoB,EACpBC,mBAAmB,EACnBC,eAAe,EACfC,2BAA2B,EAc5B,CAAE;YAiDC,iCAAA;aAnFaC,QAAQ,IAAIC;QAmC3B,MAAMC,QAAQ,CAAC,CAACC,QAAQC,GAAG,CAACC,wBAAwB;QACpD,IAAI,CAACC,qBAAqB,GAAGC,QAAQT;QAErC,MAAMU,sBAAsBC,OAAOC,GAAG,CAAC;QACvC,MAAMC,cAIFC;QAEJ,IAAI,CAACd,iBAAiB;YACpB,0DAA0D;YAC1D,MAAMe,qBAAqBF,WAAW,CAACH,oBAAoB;YAE3D,IAAIK,sCAAAA,mBAAoBC,UAAU,EAAE;gBAClChB,kBAAkBe,mBAAmBC,UAAU;YACjD,OAAO;gBACL,IAAI1B,MAAMI,eAAe;oBACvB,IAAIU,OAAO;wBACTa,QAAQC,GAAG,CAAC;oBACd;oBACAlB,kBAAkBmB,wBAAe;gBACnC;YACF;QACF,OAAO,IAAIf,OAAO;YAChBa,QAAQC,GAAG,CAAC,8BAA8BlB,gBAAgBoB,IAAI;QAChE;QAEA,IAAIf,QAAQC,GAAG,CAACe,yBAAyB,EAAE;YACzC,yDAAyD;YACzDxB,qBAAqByB,SAASjB,QAAQC,GAAG,CAACe,yBAAyB,EAAE;QACvE;QACA,IAAI,CAAC9B,GAAG,GAAGA;QACX,IAAI,CAACgC,kBAAkB,GAAGlB,QAAQC,GAAG,CAACkB,uBAAuB,KAAK;QAClE,4EAA4E;QAC5E,qEAAqE;QACrE,MAAMC,iBAAiB;QACvB,IAAI,CAACA,eAAe,GAAGhC;QACvB,IAAI,CAACE,cAAc,GAAGA;QACtB,IAAI,CAACC,eAAe,GAAGA;QACvB,IAAI,CAACK,2BAA2B,GAAGA;QACnC,IAAI,CAACyB,iBAAiB,GAAG5B;QACzB,IAAI,CAAC6B,aAAa,GAAG,IAAIC,wCAAmB,CAAC,IAAI,CAACF,iBAAiB;QACnE,IAAI,CAAC3B,mBAAmB,GAAGA;QAC3B,IAAI8B,kBAA4B,EAAE;QAElC,IACElC,cAAc,CAACmC,sCAA2B,CAAC,OAC3C,0BAAA,IAAI,CAACJ,iBAAiB,sBAAtB,kCAAA,wBAAwBK,OAAO,qBAA/B,gCAAiCC,aAAa,GAC9C;YACA,IAAI,CAACC,oBAAoB,GAAG;QAC9B;QAEA,IAAIxC,aAAa;gBAGb,kCAAA;YAFFoC,kBAAkBK,IAAAA,yCAA4B,EAC5CvC,iBACA,2BAAA,IAAI,CAAC+B,iBAAiB,sBAAtB,mCAAA,yBAAwBK,OAAO,qBAA/B,iCAAiCC,aAAa;QAElD;QAEA,IAAIhC,iBAAiB;YACnB,IAAI,CAACmC,YAAY,GAAG,IAAInC,gBAAgB;gBACtCT;gBACAD;gBACAE;gBACAE;gBACAmC;gBACAhC;gBACAuC,iBAAiBzC;gBACjBI;YACF;QACF;IACF;IAEQsC,oBACNC,QAAgB,EAChBC,QAAgB,EAChBhD,GAAY,EACZiD,UAA+B,EACnB;QACZ,oDAAoD;QACpD,+DAA+D;QAC/D,IAAIjD,KACF,OAAOkD,KAAKC,KAAK,CAACC,YAAYC,UAAU,GAAGD,YAAYE,GAAG,KAAK;QAEjE,MAAMC,eAAe,IAAI,CAACnB,aAAa,CAAC5C,GAAG,CAACgE,IAAAA,gBAAO,EAACT;QAEpD,+DAA+D;QAC/D,iEAAiE;QACjE,MAAMU,2BAA2BF,eAC7BA,aAAaG,UAAU,GACvBT,aACE,QACA;QAEN,MAAMU,kBACJ,OAAOF,6BAA6B,WAChCA,2BAA2B,OAAOT,WAClCS;QAEN,OAAOE;IACT;IAEAC,aAAab,QAAgB,EAAEc,UAAoB,EAAE;QACnD,OAAOA,aAAad,WAAWe,IAAAA,oCAAiB,EAACf;IACnD;IAEAjD,oBAAoB;YAClB,sCAAA;SAAA,qBAAA,IAAI,CAAC8C,YAAY,sBAAjB,uCAAA,mBAAmB9C,iBAAiB,qBAApC,0CAAA;IACF;IAEA,MAAMiE,KAAKC,QAAgB,EAAE;QAC3B,IAAIC,aAAkC,IAAMC,QAAQC,OAAO;QAC3D,MAAMC,eAAe,IAAI,CAACzD,KAAK,CAACnB,GAAG,CAACwE;QAEpC,IAAII,cAAc;YAChB,MAAMA;QACR;QAEA,MAAMC,UAAU,IAAIH,QAAc,CAACC;YACjCF,aAAa;gBACXE;gBACA,IAAI,CAACxD,KAAK,CAAC2D,MAAM,CAACN,UAAU,+BAA+B;;YAC7D;QACF;QAEA,IAAI,CAACrD,KAAK,CAACjB,GAAG,CAACsE,UAAUK;QACzB,OAAOJ;IACT;IAEA,MAAMrE,cAAc2E,IAAuB,EAAiB;YACnD;QAAP,QAAO,qBAAA,IAAI,CAAC3B,YAAY,qBAAjB,mBAAmBhD,aAAa,CAAC2E;IAC1C;IAEA,8HAA8H;IAC9H,MAAMC,iBACJC,GAAW,EACXC,OAA8B,CAAC,CAAC,EACf;QACjB,+DAA+D;QAC/D,6BAA6B;QAC7B,MAAMC,kBAAkB;QAExB,MAAMC,aAAuB,EAAE;QAE/B,MAAMC,UAAU,IAAIC;QACpB,MAAMC,UAAU,IAAIC;QAEpB,IAAIN,KAAKO,IAAI,EAAE;YACb,6BAA6B;YAC7B,IAAI,OAAO,AAACP,KAAKO,IAAI,CAASC,SAAS,KAAK,YAAY;gBACtD,MAAMC,eAAeT,KAAKO,IAAI;gBAE9B,MAAMG,SAAuB,EAAE;gBAE/B,IAAI;oBACF,MAAMD,aAAaE,MAAM,CACvB,IAAIC,eAAe;wBACjBC,OAAMC,KAAK;4BACT,IAAI,OAAOA,UAAU,UAAU;gCAC7BJ,OAAOK,IAAI,CAACZ,QAAQa,MAAM,CAACF;gCAC3BZ,WAAWa,IAAI,CAACD;4BAClB,OAAO;gCACLJ,OAAOK,IAAI,CAACD;gCACZZ,WAAWa,IAAI,CAACV,QAAQY,MAAM,CAACH,OAAO;oCAAEI,QAAQ;gCAAK;4BACvD;wBACF;oBACF;oBAGF,qBAAqB;oBACrBhB,WAAWa,IAAI,CAACV,QAAQY,MAAM;oBAE9B,2CAA2C;oBAC3C,MAAME,SAAST,OAAOU,MAAM,CAAC,CAACC,OAAOC,MAAQD,QAAQC,IAAIH,MAAM,EAAE;oBACjE,MAAMI,cAAc,IAAIC,WAAWL;oBAEnC,qDAAqD;oBACrD,IAAIM,SAAS;oBACb,KAAK,MAAMX,SAASJ,OAAQ;wBAC1Ba,YAAYvG,GAAG,CAAC8F,OAAOW;wBACvBA,UAAUX,MAAMK,MAAM;oBACxB;;oBAEEnB,KAAa0B,OAAO,GAAGH;gBAC3B,EAAE,OAAOI,KAAK;oBACZ3E,QAAQ4E,KAAK,CAAC,wBAAwBD;gBACxC;YACF,OACK,IAAI,OAAO,AAAC3B,KAAKO,IAAI,CAASsB,IAAI,KAAK,YAAY;gBACtD,MAAMC,WAAW9B,KAAKO,IAAI;gBACxBP,KAAa0B,OAAO,GAAG1B,KAAKO,IAAI;gBAClC,KAAK,MAAMwB,OAAO,IAAIC,IAAI;uBAAIF,SAASD,IAAI;iBAAG,EAAG;oBAC/C,MAAMI,SAASH,SAASI,MAAM,CAACH;oBAC/B7B,WAAWa,IAAI,CACb,GAAGgB,IAAI,CAAC,EAAE,AACR,CAAA,MAAMvC,QAAQ2C,GAAG,CACfF,OAAOG,GAAG,CAAC,OAAOC;wBAChB,IAAI,OAAOA,QAAQ,UAAU;4BAC3B,OAAOA;wBACT,OAAO;4BACL,OAAO,MAAMA,IAAIC,IAAI;wBACvB;oBACF,GACF,EACAC,IAAI,CAAC,MAAM;gBAEjB;YACA,mBAAmB;YACrB,OAAO,IAAI,OAAO,AAACvC,KAAKO,IAAI,CAASgB,WAAW,KAAK,YAAY;gBAC/D,MAAMiB,OAAOxC,KAAKO,IAAI;gBACtB,MAAMgB,cAAc,MAAMiB,KAAKjB,WAAW;gBAC1CrB,WAAWa,IAAI,CAAC,MAAMyB,KAAKF,IAAI;gBAC7BtC,KAAa0B,OAAO,GAAG,IAAIe,KAAK;oBAAClB;iBAAY,EAAE;oBAAEmB,MAAMF,KAAKE,IAAI;gBAAC;YACrE,OAAO,IAAI,OAAO1C,KAAKO,IAAI,KAAK,UAAU;gBACxCL,WAAWa,IAAI,CAACf,KAAKO,IAAI;gBACvBP,KAAa0B,OAAO,GAAG1B,KAAKO,IAAI;YACpC;QACF;QAEA,MAAMoC,UACJ,OAAO,AAAC3C,CAAAA,KAAK2C,OAAO,IAAI,CAAC,CAAA,EAAGd,IAAI,KAAK,aACjCe,OAAOC,WAAW,CAAC7C,KAAK2C,OAAO,IAC/BC,OAAOE,MAAM,CAAC,CAAC,GAAG9C,KAAK2C,OAAO;QAEpC,wEAAwE;QACxE,uCAAuC;QACvC,IAAI,iBAAiBA,SAAS,OAAOA,OAAO,CAAC,cAAc;QAC3D,IAAI,gBAAgBA,SAAS,OAAOA,OAAO,CAAC,aAAa;QAEzD,MAAMI,cAAcC,KAAKC,SAAS,CAAC;YACjChD;YACA,IAAI,CAACnE,mBAAmB,IAAI;YAC5BiE;YACAC,KAAKkD,MAAM;YACXP;YACA3C,KAAKmD,IAAI;YACTnD,KAAKoD,QAAQ;YACbpD,KAAKqD,WAAW;YAChBrD,KAAKsD,QAAQ;YACbtD,KAAKuD,cAAc;YACnBvD,KAAKwD,SAAS;YACdxD,KAAKyD,KAAK;YACVvD;SACD;QAED,IAAI9D,QAAQC,GAAG,CAACqH,YAAY,KAAK,QAAQ;YACvC,SAASC,YAAYC,MAAmB;gBACtC,OAAOC,MAAMC,SAAS,CAAC1B,GAAG,CACvB2B,IAAI,CAAC,IAAIvC,WAAWoC,SAAS,CAACI,IAAMA,EAAEC,QAAQ,CAAC,IAAIC,QAAQ,CAAC,GAAG,MAC/D3B,IAAI,CAAC;YACV;YACA,MAAMqB,SAASzD,QAAQa,MAAM,CAAC+B;YAC9B,OAAOY,YAAY,MAAMQ,OAAOC,MAAM,CAACC,MAAM,CAAC,WAAWT;QAC3D,OAAO;YACL,MAAMO,UAASG,QAAQ;YACvB,OAAOH,QAAOI,UAAU,CAAC,UAAUC,MAAM,CAACzB,aAAasB,MAAM,CAAC;QAChE;IACF;IAUA,MAAMvJ,IACJwE,QAAgB,EAChBmF,GAAyE,EAClC;YAgCf,oBAwCbC;QAvEX,wEAAwE;QACxE,0EAA0E;QAC1E,IAAID,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK,EAAE;YAC3C,MAAMC,gBAAgBC,kDAAoB,CAACC,QAAQ;YACnD,MAAMC,kBAAkBH,gBACpBI,IAAAA,sDAAwB,EAACJ,iBACzB;YACJ,IAAIG,iBAAiB;gBACnB,MAAME,kBAAkBF,gBAAgBG,KAAK,CAACtK,GAAG,CAACwE;gBAClD,IAAI6F,CAAAA,mCAAAA,gBAAiBR,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;oBACnD,OAAO;wBAAES,SAAS;wBAAOC,OAAOJ;oBAAgB;gBAClD;YACF;QACF;QAEA,oDAAoD;QACpD,+DAA+D;QAC/D,IACE,IAAI,CAAC7H,kBAAkB,IACtB,IAAI,CAAChC,GAAG,IACNmJ,CAAAA,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK,IACtC,IAAI,CAACnJ,cAAc,CAAC,gBAAgB,KAAK,UAAS,GACtD;YACA,OAAO;QACT;QAEA4D,WAAW,IAAI,CAACJ,YAAY,CAC1BI,UACAmF,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK;QAGzC,MAAMH,YAAY,QAAM,qBAAA,IAAI,CAACxG,YAAY,qBAAjB,mBAAmBpD,GAAG,CAACwE,UAAUmF;QAEzD,IAAIA,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK,EAAE;gBAKvCH;YAJJ,IAAI,CAACA,WAAW;gBACd,OAAO;YACT;YAEA,IAAIA,EAAAA,oBAAAA,UAAUa,KAAK,qBAAfb,kBAAiBC,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;oBAE2DH;gBAD9G,MAAM,qBAEL,CAFK,IAAIc,8BAAc,CACtB,CAAC,oCAAoC,EAAExC,KAAKC,SAAS,CAAC3D,UAAU,2BAA2B,EAAE0D,KAAKC,SAAS,EAACyB,oBAAAA,UAAUa,KAAK,qBAAfb,kBAAiBC,IAAI,EAAE,SAAS,CAAC,GADzI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YAEA,MAAMc,YAAYC,0CAAgB,CAACV,QAAQ;YAC3C,MAAMW,eAAe;mBAAKlB,IAAI5E,IAAI,IAAI,EAAE;mBAAO4E,IAAImB,QAAQ,IAAI,EAAE;aAAE;YACnE,sDAAsD;YACtD,IACED,aAAaE,IAAI,CACf,CAACC;oBACC,uBACAL;uBADA,EAAA,wBAAA,IAAI,CAAC7H,eAAe,qBAApB,sBAAsBmI,QAAQ,CAACD,UAC/BL,8BAAAA,oCAAAA,UAAWO,sBAAsB,qBAAjCP,kCAAmCM,QAAQ,CAACD;gBAEhD;gBACA,OAAO;YACT;YAEA,MAAM9G,aAAayF,IAAIzF,UAAU,IAAI0F,UAAUa,KAAK,CAACvG,UAAU;YAC/D,MAAMiH,MACJ,AAACvH,CAAAA,YAAYC,UAAU,GACrBD,YAAYE,GAAG,KACd8F,CAAAA,UAAUwB,YAAY,IAAI,CAAA,CAAC,IAC9B;YAEF,MAAMZ,UAAUW,MAAMjH;YACtB,MAAMmH,OAAOzB,UAAUa,KAAK,CAACY,IAAI;YAEjC,OAAO;gBACLb;gBACAC,OAAO;oBAAEZ,MAAMU,8BAAe,CAACR,KAAK;oBAAEsB;oBAAMnH;gBAAW;YACzD;QACF,OAAO,IAAI0F,CAAAA,8BAAAA,mBAAAA,UAAWa,KAAK,qBAAhBb,iBAAkBC,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;YAC3D,MAAM,qBAEL,CAFK,IAAIW,8BAAc,CACtB,CAAC,oCAAoC,EAAExC,KAAKC,SAAS,CAAC3D,UAAU,aAAa,EAAE0D,KAAKC,SAAS,CAACwB,IAAIE,IAAI,EAAE,2BAA2B,CAAC,GADhI,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;QAEA,IAAIyB,QAA8C;QAClD,MAAMvH,eAAe,IAAI,CAACnB,aAAa,CAAC5C,GAAG,CAACgE,IAAAA,gBAAO,EAACQ;QAEpD,IAAIgG;QACJ,IAAIrG;QAEJ,IAAIyF,CAAAA,6BAAAA,UAAWwB,YAAY,MAAK,CAAC,GAAG;YAClCZ,UAAU,CAAC;YACXrG,kBAAkB,CAAC,IAAIoH,yBAAc;QACvC,OAAO;YACLpH,kBAAkB,IAAI,CAACb,mBAAmB,CACxCkB,UACAoF,CAAAA,6BAAAA,UAAWwB,YAAY,KAAIxH,YAAYC,UAAU,GAAGD,YAAYE,GAAG,IACnE,IAAI,CAACtD,GAAG,IAAI,OACZmJ,IAAIlG,UAAU;YAEhB+G,UACErG,oBAAoB,SACpBA,kBAAkBP,YAAYC,UAAU,GAAGD,YAAYE,GAAG,KACtD,OACA0H;QACR;QAEA,IAAI5B,WAAW;YACb0B,QAAQ;gBACNd;gBACAzG;gBACAI;gBACAsG,OAAOb,UAAUa,KAAK;YACxB;QACF;QAEA,IACE,CAACb,aACD,IAAI,CAACjH,iBAAiB,CAAC8I,cAAc,CAACR,QAAQ,CAACzG,WAC/C;YACA,wDAAwD;YACxD,kDAAkD;YAClD,wDAAwD;YACxD,yDAAyD;YACzD,qCAAqC;YACrC8G,QAAQ;gBACNd;gBACAC,OAAO;gBACP1G;gBACAI;YACF;YACA,IAAI,CAACjE,GAAG,CAACsE,UAAU8G,MAAMb,KAAK,EAAE;gBAAE,GAAGd,GAAG;gBAAE5F;YAAa;QACzD;QACA,OAAOuH;IACT;IAYA,MAAMpL,IACJqD,QAAgB,EAChB8H,IAAkC,EAClC1B,GAAyE,EAC1D;QACf,2EAA2E;QAC3E,2EAA2E;QAC3E,mEAAmE;QACnE,0EAA0E;QAC1E,6DAA6D;QAC7D,IAAI0B,CAAAA,wBAAAA,KAAMxB,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;YACxC,MAAMC,gBAAgBC,kDAAoB,CAACC,QAAQ;YACnD,MAAMwB,2BAA2B1B,gBAC7B2B,IAAAA,yDAA2B,EAAC3B,iBAC5B;YACJ,IAAI0B,0BAA0B;gBAC5BA,yBAAyBpB,KAAK,CAACpK,GAAG,CAACqD,UAAU8H;YAC/C;QACF;QAEA,IAAI,IAAI,CAAC7I,kBAAkB,IAAK,IAAI,CAAChC,GAAG,IAAI,CAACmJ,IAAItF,UAAU,EAAG;QAE9Dd,WAAW,IAAI,CAACa,YAAY,CAACb,UAAUoG,IAAItF,UAAU;QAErD,wDAAwD;QACxD,MAAMuH,WAAW1D,KAAKC,SAAS,CAACkD,MAAMhF,MAAM;QAC5C,IACEsD,IAAItF,UAAU,IACd,6EAA6E;QAC7E,kCAAkC;QAClC,CAAC,IAAI,CAAC5C,qBAAqB,IAC3BmK,WAAW,IAAI,OAAO,MACtB;YACA,IAAI,IAAI,CAACpL,GAAG,EAAE;gBACZ,MAAM,qBAEL,CAFK,IAAIqL,MACR,CAAC,oEAAoE,EAAED,SAAS,OAAO,CAAC,GADpF,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YACA;QACF;QAEA,IAAI;gBAKI;YAJN,IAAI,CAACjC,IAAItF,UAAU,IAAIsF,IAAI5F,YAAY,EAAE;gBACvC,IAAI,CAACnB,aAAa,CAAC1C,GAAG,CAAC8D,IAAAA,gBAAO,EAACT,WAAWoG,IAAI5F,YAAY;YAC5D;YAEA,QAAM,qBAAA,IAAI,CAACX,YAAY,qBAAjB,mBAAmBlD,GAAG,CAACqD,UAAU8H,MAAM1B;QAC/C,EAAE,OAAO7C,OAAO;YACd5E,QAAQ4J,IAAI,CAAC,wCAAwCvI,UAAUuD;QACjE;IACF;AACF","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../src/server/lib/incremental-cache/index.ts"],"sourcesContent":["import type { CacheFs } from '../../../shared/lib/utils'\nimport type { PrerenderManifest } from '../../../build'\nimport {\n type IncrementalCacheValue,\n type IncrementalCacheEntry,\n type IncrementalCache as IncrementalCacheType,\n IncrementalCacheKind,\n CachedRouteKind,\n type IncrementalResponseCacheEntry,\n type IncrementalFetchCacheEntry,\n type GetIncrementalFetchCacheContext,\n type GetIncrementalResponseCacheContext,\n type CachedFetchValue,\n type SetIncrementalFetchCacheContext,\n type SetIncrementalResponseCacheContext,\n} from '../../response-cache'\nimport type { DeepReadonly } from '../../../shared/lib/deep-readonly'\n\nimport FileSystemCache from './file-system-cache'\nimport { normalizePagePath } from '../../../shared/lib/page-path/normalize-page-path'\n\nimport {\n CACHE_ONE_YEAR,\n PRERENDER_REVALIDATE_HEADER,\n} from '../../../lib/constants'\nimport { toRoute } from '../to-route'\nimport { SharedCacheControls } from './shared-cache-controls'\nimport {\n getPrerenderResumeDataCache,\n getRenderResumeDataCache,\n workUnitAsyncStorage,\n} from '../../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../../shared/lib/invariant-error'\nimport type { Revalidate } from '../cache-control'\nimport { getPreviouslyRevalidatedTags } from '../../server-utils'\nimport { workAsyncStorage } from '../../app-render/work-async-storage.external'\n\nexport interface CacheHandlerContext {\n fs?: CacheFs\n dev?: boolean\n flushToDisk?: boolean\n serverDistDir?: string\n maxMemoryCacheSize?: number\n fetchCacheKeyPrefix?: string\n prerenderManifest?: PrerenderManifest\n revalidatedTags: string[]\n _requestHeaders: IncrementalCache['requestHeaders']\n}\n\nexport interface CacheHandlerValue {\n lastModified?: number\n age?: number\n cacheState?: string\n value: IncrementalCacheValue | null\n}\n\nexport class CacheHandler {\n // eslint-disable-next-line\n constructor(_ctx: CacheHandlerContext) {}\n\n public async get(\n _cacheKey: string,\n _ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<CacheHandlerValue | null> {\n return {} as any\n }\n\n public async set(\n _cacheKey: string,\n _data: IncrementalCacheValue | null,\n _ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {}\n\n public async revalidateTag(\n ..._args: Parameters<IncrementalCache['revalidateTag']>\n ): Promise<void> {}\n\n public resetRequestCache(): void {}\n}\n\nexport class IncrementalCache implements IncrementalCacheType {\n readonly dev?: boolean\n readonly disableForTestmode?: boolean\n readonly cacheHandler?: CacheHandler\n readonly hasCustomCacheHandler: boolean\n readonly prerenderManifest: DeepReadonly<PrerenderManifest>\n readonly requestHeaders: Record<string, undefined | string | string[]>\n readonly requestProtocol?: 'http' | 'https'\n readonly allowedRevalidateHeaderKeys?: string[]\n readonly minimalMode?: boolean\n readonly fetchCacheKeyPrefix?: string\n readonly revalidatedTags?: string[]\n readonly isOnDemandRevalidate?: boolean\n\n private readonly locks = new Map<string, Promise<void>>()\n\n /**\n * The cache controls for routes. This will source the values from the\n * prerender manifest until the in-memory cache is updated with new values.\n */\n private readonly cacheControls: SharedCacheControls\n\n constructor({\n fs,\n dev,\n flushToDisk,\n minimalMode,\n serverDistDir,\n requestHeaders,\n requestProtocol,\n maxMemoryCacheSize,\n getPrerenderManifest,\n fetchCacheKeyPrefix,\n CurCacheHandler,\n allowedRevalidateHeaderKeys,\n }: {\n fs?: CacheFs\n dev: boolean\n minimalMode?: boolean\n serverDistDir?: string\n flushToDisk?: boolean\n requestProtocol?: 'http' | 'https'\n allowedRevalidateHeaderKeys?: string[]\n requestHeaders: IncrementalCache['requestHeaders']\n maxMemoryCacheSize?: number\n getPrerenderManifest: () => DeepReadonly<PrerenderManifest>\n fetchCacheKeyPrefix?: string\n CurCacheHandler?: typeof CacheHandler\n }) {\n const debug = !!process.env.NEXT_PRIVATE_DEBUG_CACHE\n this.hasCustomCacheHandler = Boolean(CurCacheHandler)\n\n const cacheHandlersSymbol = Symbol.for('@next/cache-handlers')\n const _globalThis: typeof globalThis & {\n [cacheHandlersSymbol]?: {\n FetchCache?: typeof CacheHandler\n }\n } = globalThis\n\n if (!CurCacheHandler) {\n // if we have a global cache handler available leverage it\n const globalCacheHandler = _globalThis[cacheHandlersSymbol]\n\n if (globalCacheHandler?.FetchCache) {\n CurCacheHandler = globalCacheHandler.FetchCache\n } else {\n if (fs && serverDistDir) {\n if (debug) {\n console.log('using filesystem cache handler')\n }\n CurCacheHandler = FileSystemCache\n }\n }\n } else if (debug) {\n console.log('using custom cache handler', CurCacheHandler.name)\n }\n\n if (process.env.__NEXT_TEST_MAX_ISR_CACHE) {\n // Allow cache size to be overridden for testing purposes\n maxMemoryCacheSize = parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE, 10)\n }\n this.dev = dev\n this.disableForTestmode = process.env.NEXT_PRIVATE_TEST_PROXY === 'true'\n // this is a hack to avoid Webpack knowing this is equal to this.minimalMode\n // because we replace this.minimalMode to true in production bundles.\n const minimalModeKey = 'minimalMode'\n this[minimalModeKey] = minimalMode\n this.requestHeaders = requestHeaders\n this.requestProtocol = requestProtocol\n this.allowedRevalidateHeaderKeys = allowedRevalidateHeaderKeys\n this.prerenderManifest = getPrerenderManifest()\n this.cacheControls = new SharedCacheControls(this.prerenderManifest)\n this.fetchCacheKeyPrefix = fetchCacheKeyPrefix\n let revalidatedTags: string[] = []\n\n if (\n requestHeaders[PRERENDER_REVALIDATE_HEADER] ===\n this.prerenderManifest?.preview?.previewModeId\n ) {\n this.isOnDemandRevalidate = true\n }\n\n if (minimalMode) {\n revalidatedTags = getPreviouslyRevalidatedTags(\n requestHeaders,\n this.prerenderManifest?.preview?.previewModeId\n )\n }\n\n if (CurCacheHandler) {\n this.cacheHandler = new CurCacheHandler({\n dev,\n fs,\n flushToDisk,\n serverDistDir,\n revalidatedTags,\n maxMemoryCacheSize,\n _requestHeaders: requestHeaders,\n fetchCacheKeyPrefix,\n })\n }\n }\n\n private calculateRevalidate(\n pathname: string,\n fromTime: number,\n dev: boolean,\n isFallback: boolean | undefined\n ): Revalidate {\n // in development we don't have a prerender-manifest\n // and default to always revalidating to allow easier debugging\n if (dev)\n return Math.floor(performance.timeOrigin + performance.now() - 1000)\n\n const cacheControl = this.cacheControls.get(toRoute(pathname))\n\n // if an entry isn't present in routes we fallback to a default\n // of revalidating after 1 second unless it's a fallback request.\n const initialRevalidateSeconds = cacheControl\n ? cacheControl.revalidate\n : isFallback\n ? false\n : 1\n\n const revalidateAfter =\n typeof initialRevalidateSeconds === 'number'\n ? initialRevalidateSeconds * 1000 + fromTime\n : initialRevalidateSeconds\n\n return revalidateAfter\n }\n\n _getPathname(pathname: string, fetchCache?: boolean) {\n return fetchCache ? pathname : normalizePagePath(pathname)\n }\n\n resetRequestCache() {\n this.cacheHandler?.resetRequestCache?.()\n }\n\n async lock(cacheKey: string) {\n let unlockNext: () => Promise<void> = () => Promise.resolve()\n const existingLock = this.locks.get(cacheKey)\n\n if (existingLock) {\n await existingLock\n }\n\n const newLock = new Promise<void>((resolve) => {\n unlockNext = async () => {\n resolve()\n this.locks.delete(cacheKey) // Remove the lock upon release\n }\n })\n\n this.locks.set(cacheKey, newLock)\n return unlockNext\n }\n\n async revalidateTag(tags: string | string[]): Promise<void> {\n return this.cacheHandler?.revalidateTag(tags)\n }\n\n // x-ref: https://github.com/facebook/react/blob/2655c9354d8e1c54ba888444220f63e836925caa/packages/react/src/ReactFetch.js#L23\n async generateCacheKey(\n url: string,\n init: RequestInit | Request = {}\n ): Promise<string> {\n // this should be bumped anytime a fix is made to cache entries\n // that should bust the cache\n const MAIN_KEY_PREFIX = 'v3'\n\n const bodyChunks: string[] = []\n\n const encoder = new TextEncoder()\n const decoder = new TextDecoder()\n\n if (init.body) {\n // handle ReadableStream body\n if (typeof (init.body as any).getReader === 'function') {\n const readableBody = init.body as ReadableStream<Uint8Array | string>\n\n const chunks: Uint8Array[] = []\n\n try {\n await readableBody.pipeTo(\n new WritableStream({\n write(chunk) {\n if (typeof chunk === 'string') {\n chunks.push(encoder.encode(chunk))\n bodyChunks.push(chunk)\n } else {\n chunks.push(chunk)\n bodyChunks.push(decoder.decode(chunk, { stream: true }))\n }\n },\n })\n )\n\n // Flush the decoder.\n bodyChunks.push(decoder.decode())\n\n // Create a new buffer with all the chunks.\n const length = chunks.reduce((total, arr) => total + arr.length, 0)\n const arrayBuffer = new Uint8Array(length)\n\n // Push each of the chunks into the new array buffer.\n let offset = 0\n for (const chunk of chunks) {\n arrayBuffer.set(chunk, offset)\n offset += chunk.length\n }\n\n ;(init as any)._ogBody = arrayBuffer\n } catch (err) {\n console.error('Problem reading body', err)\n }\n } // handle FormData or URLSearchParams bodies\n else if (typeof (init.body as any).keys === 'function') {\n const formData = init.body as FormData\n ;(init as any)._ogBody = init.body\n for (const key of new Set([...formData.keys()])) {\n const values = formData.getAll(key)\n bodyChunks.push(\n `${key}=${(\n await Promise.all(\n values.map(async (val) => {\n if (typeof val === 'string') {\n return val\n } else {\n return await val.text()\n }\n })\n )\n ).join(',')}`\n )\n }\n // handle blob body\n } else if (typeof (init.body as any).arrayBuffer === 'function') {\n const blob = init.body as Blob\n const arrayBuffer = await blob.arrayBuffer()\n bodyChunks.push(await blob.text())\n ;(init as any)._ogBody = new Blob([arrayBuffer], { type: blob.type })\n } else if (typeof init.body === 'string') {\n bodyChunks.push(init.body)\n ;(init as any)._ogBody = init.body\n }\n }\n\n const headers =\n typeof (init.headers || {}).keys === 'function'\n ? Object.fromEntries(init.headers as Headers)\n : Object.assign({}, init.headers)\n\n // w3c trace context headers can break request caching and deduplication\n // so we remove them from the cache key\n if ('traceparent' in headers) delete headers['traceparent']\n if ('tracestate' in headers) delete headers['tracestate']\n\n const cacheString = JSON.stringify([\n MAIN_KEY_PREFIX,\n this.fetchCacheKeyPrefix || '',\n url,\n init.method,\n headers,\n init.mode,\n init.redirect,\n init.credentials,\n init.referrer,\n init.referrerPolicy,\n init.integrity,\n init.cache,\n bodyChunks,\n ])\n\n if (process.env.NEXT_RUNTIME === 'edge') {\n function bufferToHex(buffer: ArrayBuffer): string {\n return Array.prototype.map\n .call(new Uint8Array(buffer), (b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n const buffer = encoder.encode(cacheString)\n return bufferToHex(await crypto.subtle.digest('SHA-256', buffer))\n } else {\n const crypto = require('crypto') as typeof import('crypto')\n return crypto.createHash('sha256').update(cacheString).digest('hex')\n }\n }\n\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise<IncrementalFetchCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<IncrementalCacheEntry | null> {\n // Unlike other caches if we have a resume data cache, we use it even if\n // testmode would normally disable it or if requestHeaders say 'no-cache'.\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const resumeDataCache = workUnitStore\n ? getRenderResumeDataCache(workUnitStore)\n : null\n if (resumeDataCache) {\n const memoryCacheData = resumeDataCache.fetch.get(cacheKey)\n if (memoryCacheData?.kind === CachedRouteKind.FETCH) {\n return { isStale: false, value: memoryCacheData }\n }\n }\n }\n\n // we don't leverage the prerender cache in dev mode\n // so that getStaticProps is always called for easier debugging\n if (\n this.disableForTestmode ||\n (this.dev &&\n (ctx.kind !== IncrementalCacheKind.FETCH ||\n this.requestHeaders['cache-control'] === 'no-cache'))\n ) {\n return null\n }\n\n cacheKey = this._getPathname(\n cacheKey,\n ctx.kind === IncrementalCacheKind.FETCH\n )\n\n const cacheData = await this.cacheHandler?.get(cacheKey, ctx)\n\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n if (!cacheData) {\n return null\n }\n\n if (cacheData.value?.kind !== CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} to be a \"FETCH\" kind, got ${JSON.stringify(cacheData.value?.kind)} instead.`\n )\n }\n\n const workStore = workAsyncStorage.getStore()\n const combinedTags = [...(ctx.tags || []), ...(ctx.softTags || [])]\n // if a tag was revalidated we don't return stale data\n if (\n combinedTags.some(\n (tag) =>\n this.revalidatedTags?.includes(tag) ||\n workStore?.pendingRevalidatedTags?.includes(tag)\n )\n ) {\n return null\n }\n\n const revalidate = ctx.revalidate || cacheData.value.revalidate\n const age =\n (performance.timeOrigin +\n performance.now() -\n (cacheData.lastModified || 0)) /\n 1000\n\n const isStale = age > revalidate\n const data = cacheData.value.data\n\n return {\n isStale,\n value: { kind: CachedRouteKind.FETCH, data, revalidate },\n }\n } else if (cacheData?.value?.kind === CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} not to be a ${JSON.stringify(ctx.kind)} kind, got \"FETCH\" instead.`\n )\n }\n\n let entry: IncrementalResponseCacheEntry | null = null\n const cacheControl = this.cacheControls.get(toRoute(cacheKey))\n\n let isStale: boolean | -1 | undefined\n let revalidateAfter: Revalidate\n\n if (cacheData?.lastModified === -1) {\n isStale = -1\n revalidateAfter = -1 * CACHE_ONE_YEAR\n } else {\n revalidateAfter = this.calculateRevalidate(\n cacheKey,\n cacheData?.lastModified || performance.timeOrigin + performance.now(),\n this.dev ?? false,\n ctx.isFallback\n )\n isStale =\n revalidateAfter !== false &&\n revalidateAfter < performance.timeOrigin + performance.now()\n ? true\n : undefined\n }\n\n if (cacheData) {\n entry = {\n isStale,\n cacheControl,\n revalidateAfter,\n value: cacheData.value,\n }\n }\n\n if (\n !cacheData &&\n this.prerenderManifest.notFoundRoutes.includes(cacheKey)\n ) {\n // for the first hit after starting the server the cache\n // may not have a way to save notFound: true so if\n // the prerender-manifest marks this as notFound then we\n // return that entry and trigger a cache set to give it a\n // chance to update in-memory entries\n entry = {\n isStale,\n value: null,\n cacheControl,\n revalidateAfter,\n }\n this.set(cacheKey, entry.value, { ...ctx, cacheControl })\n }\n return entry\n }\n\n async set(\n pathname: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: IncrementalCacheValue | null,\n ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {\n // Even if we otherwise disable caching for testMode or if no fetchCache is\n // configured we still always stash results in the resume data cache if one\n // exists. This is because this is a transient in memory cache that\n // populates caches ahead of a dynamic render in dev mode to allow the RSC\n // debug info to have the right environment associated to it.\n if (data?.kind === CachedRouteKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const prerenderResumeDataCache = workUnitStore\n ? getPrerenderResumeDataCache(workUnitStore)\n : null\n if (prerenderResumeDataCache) {\n prerenderResumeDataCache.fetch.set(pathname, data)\n }\n }\n\n if (this.disableForTestmode || (this.dev && !ctx.fetchCache)) return\n\n pathname = this._getPathname(pathname, ctx.fetchCache)\n\n // FetchCache has upper limit of 2MB per-entry currently\n const itemSize = JSON.stringify(data).length\n if (\n ctx.fetchCache &&\n // we don't show this error/warning when a custom cache handler is being used\n // as it might not have this limit\n !this.hasCustomCacheHandler &&\n itemSize > 2 * 1024 * 1024\n ) {\n const warningText = `Failed to set Next.js data cache for ${ctx.fetchUrl || pathname}, items over 2MB can not be cached (${itemSize} bytes)`\n\n if (this.dev) {\n throw new Error(warningText)\n }\n console.warn(warningText)\n return\n }\n\n try {\n if (!ctx.fetchCache && ctx.cacheControl) {\n this.cacheControls.set(toRoute(pathname), ctx.cacheControl)\n }\n\n await this.cacheHandler?.set(pathname, data, ctx)\n } catch (error) {\n console.warn('Failed to update prerender cache for', pathname, error)\n }\n }\n}\n"],"names":["CacheHandler","IncrementalCache","constructor","_ctx","get","_cacheKey","set","_data","revalidateTag","_args","resetRequestCache","fs","dev","flushToDisk","minimalMode","serverDistDir","requestHeaders","requestProtocol","maxMemoryCacheSize","getPrerenderManifest","fetchCacheKeyPrefix","CurCacheHandler","allowedRevalidateHeaderKeys","locks","Map","debug","process","env","NEXT_PRIVATE_DEBUG_CACHE","hasCustomCacheHandler","Boolean","cacheHandlersSymbol","Symbol","for","_globalThis","globalThis","globalCacheHandler","FetchCache","console","log","FileSystemCache","name","__NEXT_TEST_MAX_ISR_CACHE","parseInt","disableForTestmode","NEXT_PRIVATE_TEST_PROXY","minimalModeKey","prerenderManifest","cacheControls","SharedCacheControls","revalidatedTags","PRERENDER_REVALIDATE_HEADER","preview","previewModeId","isOnDemandRevalidate","getPreviouslyRevalidatedTags","cacheHandler","_requestHeaders","calculateRevalidate","pathname","fromTime","isFallback","Math","floor","performance","timeOrigin","now","cacheControl","toRoute","initialRevalidateSeconds","revalidate","revalidateAfter","_getPathname","fetchCache","normalizePagePath","lock","cacheKey","unlockNext","Promise","resolve","existingLock","newLock","delete","tags","generateCacheKey","url","init","MAIN_KEY_PREFIX","bodyChunks","encoder","TextEncoder","decoder","TextDecoder","body","getReader","readableBody","chunks","pipeTo","WritableStream","write","chunk","push","encode","decode","stream","length","reduce","total","arr","arrayBuffer","Uint8Array","offset","_ogBody","err","error","keys","formData","key","Set","values","getAll","all","map","val","text","join","blob","Blob","type","headers","Object","fromEntries","assign","cacheString","JSON","stringify","method","mode","redirect","credentials","referrer","referrerPolicy","integrity","cache","NEXT_RUNTIME","bufferToHex","buffer","Array","prototype","call","b","toString","padStart","crypto","subtle","digest","require","createHash","update","ctx","cacheData","kind","IncrementalCacheKind","FETCH","workUnitStore","workUnitAsyncStorage","getStore","resumeDataCache","getRenderResumeDataCache","memoryCacheData","fetch","CachedRouteKind","isStale","value","InvariantError","workStore","workAsyncStorage","combinedTags","softTags","some","tag","includes","pendingRevalidatedTags","age","lastModified","data","entry","CACHE_ONE_YEAR","undefined","notFoundRoutes","prerenderResumeDataCache","getPrerenderResumeDataCache","itemSize","warningText","fetchUrl","Error","warn"],"mappings":";;;;;;;;;;;;;;;IAwDaA,YAAY;eAAZA;;IAwBAC,gBAAgB;eAAhBA;;;+BAjEN;wEAGqB;mCACM;2BAK3B;yBACiB;qCACY;8CAK7B;gCACwB;6BAEc;0CACZ;;;;;;AAqB1B,MAAMD;IACX,2BAA2B;IAC3BE,YAAYC,IAAyB,CAAE,CAAC;IAExC,MAAaC,IACXC,SAAiB,EACjBF,IAA0E,EACvC;QACnC,OAAO,CAAC;IACV;IAEA,MAAaG,IACXD,SAAiB,EACjBE,KAAmC,EACnCJ,IAA0E,EAC3D,CAAC;IAElB,MAAaK,cACX,GAAGC,KAAoD,EACxC,CAAC;IAEXC,oBAA0B,CAAC;AACpC;AAEO,MAAMT;IAsBXC,YAAY,EACVS,EAAE,EACFC,GAAG,EACHC,WAAW,EACXC,WAAW,EACXC,aAAa,EACbC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,oBAAoB,EACpBC,mBAAmB,EACnBC,eAAe,EACfC,2BAA2B,EAc5B,CAAE;YAiDC,iCAAA;aAnFaC,QAAQ,IAAIC;QAmC3B,MAAMC,QAAQ,CAAC,CAACC,QAAQC,GAAG,CAACC,wBAAwB;QACpD,IAAI,CAACC,qBAAqB,GAAGC,QAAQT;QAErC,MAAMU,sBAAsBC,OAAOC,GAAG,CAAC;QACvC,MAAMC,cAIFC;QAEJ,IAAI,CAACd,iBAAiB;YACpB,0DAA0D;YAC1D,MAAMe,qBAAqBF,WAAW,CAACH,oBAAoB;YAE3D,IAAIK,sCAAAA,mBAAoBC,UAAU,EAAE;gBAClChB,kBAAkBe,mBAAmBC,UAAU;YACjD,OAAO;gBACL,IAAI1B,MAAMI,eAAe;oBACvB,IAAIU,OAAO;wBACTa,QAAQC,GAAG,CAAC;oBACd;oBACAlB,kBAAkBmB,wBAAe;gBACnC;YACF;QACF,OAAO,IAAIf,OAAO;YAChBa,QAAQC,GAAG,CAAC,8BAA8BlB,gBAAgBoB,IAAI;QAChE;QAEA,IAAIf,QAAQC,GAAG,CAACe,yBAAyB,EAAE;YACzC,yDAAyD;YACzDxB,qBAAqByB,SAASjB,QAAQC,GAAG,CAACe,yBAAyB,EAAE;QACvE;QACA,IAAI,CAAC9B,GAAG,GAAGA;QACX,IAAI,CAACgC,kBAAkB,GAAGlB,QAAQC,GAAG,CAACkB,uBAAuB,KAAK;QAClE,4EAA4E;QAC5E,qEAAqE;QACrE,MAAMC,iBAAiB;QACvB,IAAI,CAACA,eAAe,GAAGhC;QACvB,IAAI,CAACE,cAAc,GAAGA;QACtB,IAAI,CAACC,eAAe,GAAGA;QACvB,IAAI,CAACK,2BAA2B,GAAGA;QACnC,IAAI,CAACyB,iBAAiB,GAAG5B;QACzB,IAAI,CAAC6B,aAAa,GAAG,IAAIC,wCAAmB,CAAC,IAAI,CAACF,iBAAiB;QACnE,IAAI,CAAC3B,mBAAmB,GAAGA;QAC3B,IAAI8B,kBAA4B,EAAE;QAElC,IACElC,cAAc,CAACmC,sCAA2B,CAAC,OAC3C,0BAAA,IAAI,CAACJ,iBAAiB,sBAAtB,kCAAA,wBAAwBK,OAAO,qBAA/B,gCAAiCC,aAAa,GAC9C;YACA,IAAI,CAACC,oBAAoB,GAAG;QAC9B;QAEA,IAAIxC,aAAa;gBAGb,kCAAA;YAFFoC,kBAAkBK,IAAAA,yCAA4B,EAC5CvC,iBACA,2BAAA,IAAI,CAAC+B,iBAAiB,sBAAtB,mCAAA,yBAAwBK,OAAO,qBAA/B,iCAAiCC,aAAa;QAElD;QAEA,IAAIhC,iBAAiB;YACnB,IAAI,CAACmC,YAAY,GAAG,IAAInC,gBAAgB;gBACtCT;gBACAD;gBACAE;gBACAE;gBACAmC;gBACAhC;gBACAuC,iBAAiBzC;gBACjBI;YACF;QACF;IACF;IAEQsC,oBACNC,QAAgB,EAChBC,QAAgB,EAChBhD,GAAY,EACZiD,UAA+B,EACnB;QACZ,oDAAoD;QACpD,+DAA+D;QAC/D,IAAIjD,KACF,OAAOkD,KAAKC,KAAK,CAACC,YAAYC,UAAU,GAAGD,YAAYE,GAAG,KAAK;QAEjE,MAAMC,eAAe,IAAI,CAACnB,aAAa,CAAC5C,GAAG,CAACgE,IAAAA,gBAAO,EAACT;QAEpD,+DAA+D;QAC/D,iEAAiE;QACjE,MAAMU,2BAA2BF,eAC7BA,aAAaG,UAAU,GACvBT,aACE,QACA;QAEN,MAAMU,kBACJ,OAAOF,6BAA6B,WAChCA,2BAA2B,OAAOT,WAClCS;QAEN,OAAOE;IACT;IAEAC,aAAab,QAAgB,EAAEc,UAAoB,EAAE;QACnD,OAAOA,aAAad,WAAWe,IAAAA,oCAAiB,EAACf;IACnD;IAEAjD,oBAAoB;YAClB,sCAAA;SAAA,qBAAA,IAAI,CAAC8C,YAAY,sBAAjB,uCAAA,mBAAmB9C,iBAAiB,qBAApC,0CAAA;IACF;IAEA,MAAMiE,KAAKC,QAAgB,EAAE;QAC3B,IAAIC,aAAkC,IAAMC,QAAQC,OAAO;QAC3D,MAAMC,eAAe,IAAI,CAACzD,KAAK,CAACnB,GAAG,CAACwE;QAEpC,IAAII,cAAc;YAChB,MAAMA;QACR;QAEA,MAAMC,UAAU,IAAIH,QAAc,CAACC;YACjCF,aAAa;gBACXE;gBACA,IAAI,CAACxD,KAAK,CAAC2D,MAAM,CAACN,UAAU,+BAA+B;;YAC7D;QACF;QAEA,IAAI,CAACrD,KAAK,CAACjB,GAAG,CAACsE,UAAUK;QACzB,OAAOJ;IACT;IAEA,MAAMrE,cAAc2E,IAAuB,EAAiB;YACnD;QAAP,QAAO,qBAAA,IAAI,CAAC3B,YAAY,qBAAjB,mBAAmBhD,aAAa,CAAC2E;IAC1C;IAEA,8HAA8H;IAC9H,MAAMC,iBACJC,GAAW,EACXC,OAA8B,CAAC,CAAC,EACf;QACjB,+DAA+D;QAC/D,6BAA6B;QAC7B,MAAMC,kBAAkB;QAExB,MAAMC,aAAuB,EAAE;QAE/B,MAAMC,UAAU,IAAIC;QACpB,MAAMC,UAAU,IAAIC;QAEpB,IAAIN,KAAKO,IAAI,EAAE;YACb,6BAA6B;YAC7B,IAAI,OAAO,AAACP,KAAKO,IAAI,CAASC,SAAS,KAAK,YAAY;gBACtD,MAAMC,eAAeT,KAAKO,IAAI;gBAE9B,MAAMG,SAAuB,EAAE;gBAE/B,IAAI;oBACF,MAAMD,aAAaE,MAAM,CACvB,IAAIC,eAAe;wBACjBC,OAAMC,KAAK;4BACT,IAAI,OAAOA,UAAU,UAAU;gCAC7BJ,OAAOK,IAAI,CAACZ,QAAQa,MAAM,CAACF;gCAC3BZ,WAAWa,IAAI,CAACD;4BAClB,OAAO;gCACLJ,OAAOK,IAAI,CAACD;gCACZZ,WAAWa,IAAI,CAACV,QAAQY,MAAM,CAACH,OAAO;oCAAEI,QAAQ;gCAAK;4BACvD;wBACF;oBACF;oBAGF,qBAAqB;oBACrBhB,WAAWa,IAAI,CAACV,QAAQY,MAAM;oBAE9B,2CAA2C;oBAC3C,MAAME,SAAST,OAAOU,MAAM,CAAC,CAACC,OAAOC,MAAQD,QAAQC,IAAIH,MAAM,EAAE;oBACjE,MAAMI,cAAc,IAAIC,WAAWL;oBAEnC,qDAAqD;oBACrD,IAAIM,SAAS;oBACb,KAAK,MAAMX,SAASJ,OAAQ;wBAC1Ba,YAAYvG,GAAG,CAAC8F,OAAOW;wBACvBA,UAAUX,MAAMK,MAAM;oBACxB;;oBAEEnB,KAAa0B,OAAO,GAAGH;gBAC3B,EAAE,OAAOI,KAAK;oBACZ3E,QAAQ4E,KAAK,CAAC,wBAAwBD;gBACxC;YACF,OACK,IAAI,OAAO,AAAC3B,KAAKO,IAAI,CAASsB,IAAI,KAAK,YAAY;gBACtD,MAAMC,WAAW9B,KAAKO,IAAI;gBACxBP,KAAa0B,OAAO,GAAG1B,KAAKO,IAAI;gBAClC,KAAK,MAAMwB,OAAO,IAAIC,IAAI;uBAAIF,SAASD,IAAI;iBAAG,EAAG;oBAC/C,MAAMI,SAASH,SAASI,MAAM,CAACH;oBAC/B7B,WAAWa,IAAI,CACb,GAAGgB,IAAI,CAAC,EAAE,AACR,CAAA,MAAMvC,QAAQ2C,GAAG,CACfF,OAAOG,GAAG,CAAC,OAAOC;wBAChB,IAAI,OAAOA,QAAQ,UAAU;4BAC3B,OAAOA;wBACT,OAAO;4BACL,OAAO,MAAMA,IAAIC,IAAI;wBACvB;oBACF,GACF,EACAC,IAAI,CAAC,MAAM;gBAEjB;YACA,mBAAmB;YACrB,OAAO,IAAI,OAAO,AAACvC,KAAKO,IAAI,CAASgB,WAAW,KAAK,YAAY;gBAC/D,MAAMiB,OAAOxC,KAAKO,IAAI;gBACtB,MAAMgB,cAAc,MAAMiB,KAAKjB,WAAW;gBAC1CrB,WAAWa,IAAI,CAAC,MAAMyB,KAAKF,IAAI;gBAC7BtC,KAAa0B,OAAO,GAAG,IAAIe,KAAK;oBAAClB;iBAAY,EAAE;oBAAEmB,MAAMF,KAAKE,IAAI;gBAAC;YACrE,OAAO,IAAI,OAAO1C,KAAKO,IAAI,KAAK,UAAU;gBACxCL,WAAWa,IAAI,CAACf,KAAKO,IAAI;gBACvBP,KAAa0B,OAAO,GAAG1B,KAAKO,IAAI;YACpC;QACF;QAEA,MAAMoC,UACJ,OAAO,AAAC3C,CAAAA,KAAK2C,OAAO,IAAI,CAAC,CAAA,EAAGd,IAAI,KAAK,aACjCe,OAAOC,WAAW,CAAC7C,KAAK2C,OAAO,IAC/BC,OAAOE,MAAM,CAAC,CAAC,GAAG9C,KAAK2C,OAAO;QAEpC,wEAAwE;QACxE,uCAAuC;QACvC,IAAI,iBAAiBA,SAAS,OAAOA,OAAO,CAAC,cAAc;QAC3D,IAAI,gBAAgBA,SAAS,OAAOA,OAAO,CAAC,aAAa;QAEzD,MAAMI,cAAcC,KAAKC,SAAS,CAAC;YACjChD;YACA,IAAI,CAACnE,mBAAmB,IAAI;YAC5BiE;YACAC,KAAKkD,MAAM;YACXP;YACA3C,KAAKmD,IAAI;YACTnD,KAAKoD,QAAQ;YACbpD,KAAKqD,WAAW;YAChBrD,KAAKsD,QAAQ;YACbtD,KAAKuD,cAAc;YACnBvD,KAAKwD,SAAS;YACdxD,KAAKyD,KAAK;YACVvD;SACD;QAED,IAAI9D,QAAQC,GAAG,CAACqH,YAAY,KAAK,QAAQ;YACvC,SAASC,YAAYC,MAAmB;gBACtC,OAAOC,MAAMC,SAAS,CAAC1B,GAAG,CACvB2B,IAAI,CAAC,IAAIvC,WAAWoC,SAAS,CAACI,IAAMA,EAAEC,QAAQ,CAAC,IAAIC,QAAQ,CAAC,GAAG,MAC/D3B,IAAI,CAAC;YACV;YACA,MAAMqB,SAASzD,QAAQa,MAAM,CAAC+B;YAC9B,OAAOY,YAAY,MAAMQ,OAAOC,MAAM,CAACC,MAAM,CAAC,WAAWT;QAC3D,OAAO;YACL,MAAMO,UAASG,QAAQ;YACvB,OAAOH,QAAOI,UAAU,CAAC,UAAUC,MAAM,CAACzB,aAAasB,MAAM,CAAC;QAChE;IACF;IAUA,MAAMvJ,IACJwE,QAAgB,EAChBmF,GAAyE,EAClC;YAgCf,oBAwCbC;QAvEX,wEAAwE;QACxE,0EAA0E;QAC1E,IAAID,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK,EAAE;YAC3C,MAAMC,gBAAgBC,kDAAoB,CAACC,QAAQ;YACnD,MAAMC,kBAAkBH,gBACpBI,IAAAA,sDAAwB,EAACJ,iBACzB;YACJ,IAAIG,iBAAiB;gBACnB,MAAME,kBAAkBF,gBAAgBG,KAAK,CAACtK,GAAG,CAACwE;gBAClD,IAAI6F,CAAAA,mCAAAA,gBAAiBR,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;oBACnD,OAAO;wBAAES,SAAS;wBAAOC,OAAOJ;oBAAgB;gBAClD;YACF;QACF;QAEA,oDAAoD;QACpD,+DAA+D;QAC/D,IACE,IAAI,CAAC7H,kBAAkB,IACtB,IAAI,CAAChC,GAAG,IACNmJ,CAAAA,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK,IACtC,IAAI,CAACnJ,cAAc,CAAC,gBAAgB,KAAK,UAAS,GACtD;YACA,OAAO;QACT;QAEA4D,WAAW,IAAI,CAACJ,YAAY,CAC1BI,UACAmF,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK;QAGzC,MAAMH,YAAY,QAAM,qBAAA,IAAI,CAACxG,YAAY,qBAAjB,mBAAmBpD,GAAG,CAACwE,UAAUmF;QAEzD,IAAIA,IAAIE,IAAI,KAAKC,mCAAoB,CAACC,KAAK,EAAE;gBAKvCH;YAJJ,IAAI,CAACA,WAAW;gBACd,OAAO;YACT;YAEA,IAAIA,EAAAA,oBAAAA,UAAUa,KAAK,qBAAfb,kBAAiBC,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;oBAE2DH;gBAD9G,MAAM,qBAEL,CAFK,IAAIc,8BAAc,CACtB,CAAC,oCAAoC,EAAExC,KAAKC,SAAS,CAAC3D,UAAU,2BAA2B,EAAE0D,KAAKC,SAAS,EAACyB,oBAAAA,UAAUa,KAAK,qBAAfb,kBAAiBC,IAAI,EAAE,SAAS,CAAC,GADzI,qBAAA;2BAAA;gCAAA;kCAAA;gBAEN;YACF;YAEA,MAAMc,YAAYC,0CAAgB,CAACV,QAAQ;YAC3C,MAAMW,eAAe;mBAAKlB,IAAI5E,IAAI,IAAI,EAAE;mBAAO4E,IAAImB,QAAQ,IAAI,EAAE;aAAE;YACnE,sDAAsD;YACtD,IACED,aAAaE,IAAI,CACf,CAACC;oBACC,uBACAL;uBADA,EAAA,wBAAA,IAAI,CAAC7H,eAAe,qBAApB,sBAAsBmI,QAAQ,CAACD,UAC/BL,8BAAAA,oCAAAA,UAAWO,sBAAsB,qBAAjCP,kCAAmCM,QAAQ,CAACD;gBAEhD;gBACA,OAAO;YACT;YAEA,MAAM9G,aAAayF,IAAIzF,UAAU,IAAI0F,UAAUa,KAAK,CAACvG,UAAU;YAC/D,MAAMiH,MACJ,AAACvH,CAAAA,YAAYC,UAAU,GACrBD,YAAYE,GAAG,KACd8F,CAAAA,UAAUwB,YAAY,IAAI,CAAA,CAAC,IAC9B;YAEF,MAAMZ,UAAUW,MAAMjH;YACtB,MAAMmH,OAAOzB,UAAUa,KAAK,CAACY,IAAI;YAEjC,OAAO;gBACLb;gBACAC,OAAO;oBAAEZ,MAAMU,8BAAe,CAACR,KAAK;oBAAEsB;oBAAMnH;gBAAW;YACzD;QACF,OAAO,IAAI0F,CAAAA,8BAAAA,mBAAAA,UAAWa,KAAK,qBAAhBb,iBAAkBC,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;YAC3D,MAAM,qBAEL,CAFK,IAAIW,8BAAc,CACtB,CAAC,oCAAoC,EAAExC,KAAKC,SAAS,CAAC3D,UAAU,aAAa,EAAE0D,KAAKC,SAAS,CAACwB,IAAIE,IAAI,EAAE,2BAA2B,CAAC,GADhI,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;QAEA,IAAIyB,QAA8C;QAClD,MAAMvH,eAAe,IAAI,CAACnB,aAAa,CAAC5C,GAAG,CAACgE,IAAAA,gBAAO,EAACQ;QAEpD,IAAIgG;QACJ,IAAIrG;QAEJ,IAAIyF,CAAAA,6BAAAA,UAAWwB,YAAY,MAAK,CAAC,GAAG;YAClCZ,UAAU,CAAC;YACXrG,kBAAkB,CAAC,IAAIoH,yBAAc;QACvC,OAAO;YACLpH,kBAAkB,IAAI,CAACb,mBAAmB,CACxCkB,UACAoF,CAAAA,6BAAAA,UAAWwB,YAAY,KAAIxH,YAAYC,UAAU,GAAGD,YAAYE,GAAG,IACnE,IAAI,CAACtD,GAAG,IAAI,OACZmJ,IAAIlG,UAAU;YAEhB+G,UACErG,oBAAoB,SACpBA,kBAAkBP,YAAYC,UAAU,GAAGD,YAAYE,GAAG,KACtD,OACA0H;QACR;QAEA,IAAI5B,WAAW;YACb0B,QAAQ;gBACNd;gBACAzG;gBACAI;gBACAsG,OAAOb,UAAUa,KAAK;YACxB;QACF;QAEA,IACE,CAACb,aACD,IAAI,CAACjH,iBAAiB,CAAC8I,cAAc,CAACR,QAAQ,CAACzG,WAC/C;YACA,wDAAwD;YACxD,kDAAkD;YAClD,wDAAwD;YACxD,yDAAyD;YACzD,qCAAqC;YACrC8G,QAAQ;gBACNd;gBACAC,OAAO;gBACP1G;gBACAI;YACF;YACA,IAAI,CAACjE,GAAG,CAACsE,UAAU8G,MAAMb,KAAK,EAAE;gBAAE,GAAGd,GAAG;gBAAE5F;YAAa;QACzD;QACA,OAAOuH;IACT;IAYA,MAAMpL,IACJqD,QAAgB,EAChB8H,IAAkC,EAClC1B,GAAyE,EAC1D;QACf,2EAA2E;QAC3E,2EAA2E;QAC3E,mEAAmE;QACnE,0EAA0E;QAC1E,6DAA6D;QAC7D,IAAI0B,CAAAA,wBAAAA,KAAMxB,IAAI,MAAKU,8BAAe,CAACR,KAAK,EAAE;YACxC,MAAMC,gBAAgBC,kDAAoB,CAACC,QAAQ;YACnD,MAAMwB,2BAA2B1B,gBAC7B2B,IAAAA,yDAA2B,EAAC3B,iBAC5B;YACJ,IAAI0B,0BAA0B;gBAC5BA,yBAAyBpB,KAAK,CAACpK,GAAG,CAACqD,UAAU8H;YAC/C;QACF;QAEA,IAAI,IAAI,CAAC7I,kBAAkB,IAAK,IAAI,CAAChC,GAAG,IAAI,CAACmJ,IAAItF,UAAU,EAAG;QAE9Dd,WAAW,IAAI,CAACa,YAAY,CAACb,UAAUoG,IAAItF,UAAU;QAErD,wDAAwD;QACxD,MAAMuH,WAAW1D,KAAKC,SAAS,CAACkD,MAAMhF,MAAM;QAC5C,IACEsD,IAAItF,UAAU,IACd,6EAA6E;QAC7E,kCAAkC;QAClC,CAAC,IAAI,CAAC5C,qBAAqB,IAC3BmK,WAAW,IAAI,OAAO,MACtB;YACA,MAAMC,cAAc,CAAC,qCAAqC,EAAElC,IAAImC,QAAQ,IAAIvI,SAAS,oCAAoC,EAAEqI,SAAS,OAAO,CAAC;YAE5I,IAAI,IAAI,CAACpL,GAAG,EAAE;gBACZ,MAAM,qBAAsB,CAAtB,IAAIuL,MAAMF,cAAV,qBAAA;2BAAA;gCAAA;kCAAA;gBAAqB;YAC7B;YACA3J,QAAQ8J,IAAI,CAACH;YACb;QACF;QAEA,IAAI;gBAKI;YAJN,IAAI,CAAClC,IAAItF,UAAU,IAAIsF,IAAI5F,YAAY,EAAE;gBACvC,IAAI,CAACnB,aAAa,CAAC1C,GAAG,CAAC8D,IAAAA,gBAAO,EAACT,WAAWoG,IAAI5F,YAAY;YAC5D;YAEA,QAAM,qBAAA,IAAI,CAACX,YAAY,qBAAjB,mBAAmBlD,GAAG,CAACqD,UAAU8H,MAAM1B;QAC/C,EAAE,OAAO7C,OAAO;YACd5E,QAAQ8J,IAAI,CAAC,wCAAwCzI,UAAUuD;QACjE;IACF;AACF","ignoreList":[0]}
@@ -110,7 +110,7 @@ async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server
110
110
  async function startServer(serverOptions) {
111
111
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
112
112
  let { port } = serverOptions;
113
- process.title = `next-server (v${"15.4.0-canary.41"})`;
113
+ process.title = `next-server (v${"15.4.0-canary.43"})`;
114
114
  let handlersReady = ()=>{};
115
115
  let handlersError = ()=>{};
116
116
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -48,7 +48,8 @@ const clientBoundary = {
48
48
  const propTypeInfo = typeChecker.getTypeAtLocation(propType);
49
49
  const typeDeclarationNode = (_propTypeInfo_symbol = propTypeInfo.symbol) == null ? void 0 : (_propTypeInfo_symbol_getDeclarations = _propTypeInfo_symbol.getDeclarations()) == null ? void 0 : _propTypeInfo_symbol_getDeclarations[0];
50
50
  if (typeDeclarationNode) {
51
- if (ts.isFunctionTypeNode(typeDeclarationNode)) {
51
+ if (ts.isFunctionTypeNode(typeDeclarationNode) || // someFunc(): void
52
+ ts.isMethodSignature(typeDeclarationNode)) {
52
53
  // By convention, props named "action" can accept functions since we
53
54
  // assume these are Server Actions. Structurally, there's no
54
55
  // difference between a Server Action and a normal function until
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/server/typescript/rules/client-boundary.ts"],"sourcesContent":["// This module provides intellisense for all components that has the `\"use client\"` directive.\n\nimport { NEXT_TS_ERRORS } from '../constant'\nimport { getTs, getTypeChecker } from '../utils'\nimport type tsModule from 'typescript/lib/tsserverlibrary'\n\nconst clientBoundary = {\n getSemanticDiagnosticsForExportVariableStatement(\n source: tsModule.SourceFile,\n node: tsModule.VariableStatement\n ) {\n const ts = getTs()\n\n const diagnostics: tsModule.Diagnostic[] = []\n\n if (ts.isVariableDeclarationList(node.declarationList)) {\n for (const declaration of node.declarationList.declarations) {\n const initializer = declaration.initializer\n if (initializer && ts.isArrowFunction(initializer)) {\n diagnostics.push(\n ...clientBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n initializer\n )\n )\n }\n }\n }\n\n return diagnostics\n },\n\n getSemanticDiagnosticsForFunctionExport(\n source: tsModule.SourceFile,\n node: tsModule.FunctionDeclaration | tsModule.ArrowFunction\n ) {\n const ts = getTs()\n const typeChecker = getTypeChecker()\n if (!typeChecker) return []\n\n const diagnostics: tsModule.Diagnostic[] = []\n\n const isErrorFile = /[\\\\/]error\\.tsx?$/.test(source.fileName)\n const isGlobalErrorFile = /[\\\\/]global-error\\.tsx?$/.test(source.fileName)\n\n const props = node.parameters?.[0]\n if (props) {\n const propsType = typeChecker.getTypeAtLocation(props)\n const typeNode = propsType.symbol?.getDeclarations()?.[0]\n\n if (typeNode && ts.isTypeLiteralNode(typeNode)) {\n for (const member of typeNode.members) {\n if (ts.isPropertySignature(member)) {\n const propName = member.name.getText()\n const propType = member.type\n\n if (propType) {\n const propTypeInfo = typeChecker.getTypeAtLocation(propType)\n const typeDeclarationNode =\n propTypeInfo.symbol?.getDeclarations()?.[0]\n\n if (typeDeclarationNode) {\n if (ts.isFunctionTypeNode(typeDeclarationNode)) {\n // By convention, props named \"action\" can accept functions since we\n // assume these are Server Actions. Structurally, there's no\n // difference between a Server Action and a normal function until\n // TypeScript exposes directives in the type of a function. This\n // will miss accidentally passing normal functions but a false\n // negative is better than a false positive given how frequent the\n // false-positive would be.\n const maybeServerAction =\n propName === 'action' || /.+Action$/.test(propName)\n\n // There's a special case for the error file that the `reset` prop\n // is allowed to be a function:\n // https://github.com/vercel/next.js/issues/46573\n const isErrorReset =\n (isErrorFile || isGlobalErrorFile) && propName === 'reset'\n\n if (!maybeServerAction && !isErrorReset) {\n diagnostics.push({\n file: source,\n category: ts.DiagnosticCategory.Warning,\n code: NEXT_TS_ERRORS.INVALID_CLIENT_ENTRY_PROP,\n messageText:\n `Props must be serializable for components in the \"use client\" entry file. ` +\n `\"${propName}\" is a function that's not a Server Action. ` +\n `Rename \"${propName}\" either to \"action\" or have its name end with \"Action\" e.g. \"${propName}Action\" to indicate it is a Server Action.`,\n start: propType.getStart(),\n length: propType.getWidth(),\n })\n }\n } else if (\n // Show warning for not serializable props.\n ts.isConstructorTypeNode(typeDeclarationNode) ||\n ts.isClassDeclaration(typeDeclarationNode)\n ) {\n diagnostics.push({\n file: source,\n category: ts.DiagnosticCategory.Warning,\n code: NEXT_TS_ERRORS.INVALID_CLIENT_ENTRY_PROP,\n messageText: `Props must be serializable for components in the \"use client\" entry file, \"${propName}\" is invalid.`,\n start: propType.getStart(),\n length: propType.getWidth(),\n })\n }\n }\n }\n }\n }\n }\n }\n\n return diagnostics\n },\n}\n\nexport default clientBoundary\n"],"names":["clientBoundary","getSemanticDiagnosticsForExportVariableStatement","source","node","ts","getTs","diagnostics","isVariableDeclarationList","declarationList","declaration","declarations","initializer","isArrowFunction","push","getSemanticDiagnosticsForFunctionExport","typeChecker","getTypeChecker","isErrorFile","test","fileName","isGlobalErrorFile","props","parameters","propsType","getTypeAtLocation","typeNode","symbol","getDeclarations","isTypeLiteralNode","member","members","isPropertySignature","propName","name","getText","propType","type","propTypeInfo","typeDeclarationNode","isFunctionTypeNode","maybeServerAction","isErrorReset","file","category","DiagnosticCategory","Warning","code","NEXT_TS_ERRORS","INVALID_CLIENT_ENTRY_PROP","messageText","start","getStart","length","getWidth","isConstructorTypeNode","isClassDeclaration"],"mappings":"AAAA,8FAA8F;;;;;+BAqH9F;;;eAAA;;;0BAnH+B;uBACO;AAGtC,MAAMA,iBAAiB;IACrBC,kDACEC,MAA2B,EAC3BC,IAAgC;QAEhC,MAAMC,KAAKC,IAAAA,YAAK;QAEhB,MAAMC,cAAqC,EAAE;QAE7C,IAAIF,GAAGG,yBAAyB,CAACJ,KAAKK,eAAe,GAAG;YACtD,KAAK,MAAMC,eAAeN,KAAKK,eAAe,CAACE,YAAY,CAAE;gBAC3D,MAAMC,cAAcF,YAAYE,WAAW;gBAC3C,IAAIA,eAAeP,GAAGQ,eAAe,CAACD,cAAc;oBAClDL,YAAYO,IAAI,IACXb,eAAec,uCAAuC,CACvDZ,QACAS;gBAGN;YACF;QACF;QAEA,OAAOL;IACT;IAEAQ,yCACEZ,MAA2B,EAC3BC,IAA2D;YAW7CA;QATd,MAAMC,KAAKC,IAAAA,YAAK;QAChB,MAAMU,cAAcC,IAAAA,qBAAc;QAClC,IAAI,CAACD,aAAa,OAAO,EAAE;QAE3B,MAAMT,cAAqC,EAAE;QAE7C,MAAMW,cAAc,oBAAoBC,IAAI,CAAChB,OAAOiB,QAAQ;QAC5D,MAAMC,oBAAoB,2BAA2BF,IAAI,CAAChB,OAAOiB,QAAQ;QAEzE,MAAME,SAAQlB,mBAAAA,KAAKmB,UAAU,qBAAfnB,gBAAiB,CAAC,EAAE;QAClC,IAAIkB,OAAO;gBAEQE,mCAAAA;YADjB,MAAMA,YAAYR,YAAYS,iBAAiB,CAACH;YAChD,MAAMI,YAAWF,oBAAAA,UAAUG,MAAM,sBAAhBH,oCAAAA,kBAAkBI,eAAe,uBAAjCJ,iCAAqC,CAAC,EAAE;YAEzD,IAAIE,YAAYrB,GAAGwB,iBAAiB,CAACH,WAAW;gBAC9C,KAAK,MAAMI,UAAUJ,SAASK,OAAO,CAAE;oBACrC,IAAI1B,GAAG2B,mBAAmB,CAACF,SAAS;wBAClC,MAAMG,WAAWH,OAAOI,IAAI,CAACC,OAAO;wBACpC,MAAMC,WAAWN,OAAOO,IAAI;wBAE5B,IAAID,UAAU;gCAGVE,sCAAAA;4BAFF,MAAMA,eAAetB,YAAYS,iBAAiB,CAACW;4BACnD,MAAMG,uBACJD,uBAAAA,aAAaX,MAAM,sBAAnBW,uCAAAA,qBAAqBV,eAAe,uBAApCU,oCAAwC,CAAC,EAAE;4BAE7C,IAAIC,qBAAqB;gCACvB,IAAIlC,GAAGmC,kBAAkB,CAACD,sBAAsB;oCAC9C,oEAAoE;oCACpE,4DAA4D;oCAC5D,iEAAiE;oCACjE,gEAAgE;oCAChE,8DAA8D;oCAC9D,kEAAkE;oCAClE,2BAA2B;oCAC3B,MAAME,oBACJR,aAAa,YAAY,YAAYd,IAAI,CAACc;oCAE5C,kEAAkE;oCAClE,+BAA+B;oCAC/B,iDAAiD;oCACjD,MAAMS,eACJ,AAACxB,CAAAA,eAAeG,iBAAgB,KAAMY,aAAa;oCAErD,IAAI,CAACQ,qBAAqB,CAACC,cAAc;wCACvCnC,YAAYO,IAAI,CAAC;4CACf6B,MAAMxC;4CACNyC,UAAUvC,GAAGwC,kBAAkB,CAACC,OAAO;4CACvCC,MAAMC,wBAAc,CAACC,yBAAyB;4CAC9CC,aACE,CAAC,0EAA0E,CAAC,GAC5E,CAAC,CAAC,EAAEjB,SAAS,4CAA4C,CAAC,GAC1D,CAAC,QAAQ,EAAEA,SAAS,8DAA8D,EAAEA,SAAS,0CAA0C,CAAC;4CAC1IkB,OAAOf,SAASgB,QAAQ;4CACxBC,QAAQjB,SAASkB,QAAQ;wCAC3B;oCACF;gCACF,OAAO,IACL,2CAA2C;gCAC3CjD,GAAGkD,qBAAqB,CAAChB,wBACzBlC,GAAGmD,kBAAkB,CAACjB,sBACtB;oCACAhC,YAAYO,IAAI,CAAC;wCACf6B,MAAMxC;wCACNyC,UAAUvC,GAAGwC,kBAAkB,CAACC,OAAO;wCACvCC,MAAMC,wBAAc,CAACC,yBAAyB;wCAC9CC,aAAa,CAAC,2EAA2E,EAAEjB,SAAS,aAAa,CAAC;wCAClHkB,OAAOf,SAASgB,QAAQ;wCACxBC,QAAQjB,SAASkB,QAAQ;oCAC3B;gCACF;4BACF;wBACF;oBACF;gBACF;YACF;QACF;QAEA,OAAO/C;IACT;AACF;MAEA,WAAeN","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../src/server/typescript/rules/client-boundary.ts"],"sourcesContent":["// This module provides intellisense for all components that has the `\"use client\"` directive.\n\nimport { NEXT_TS_ERRORS } from '../constant'\nimport { getTs, getTypeChecker } from '../utils'\nimport type tsModule from 'typescript/lib/tsserverlibrary'\n\nconst clientBoundary = {\n getSemanticDiagnosticsForExportVariableStatement(\n source: tsModule.SourceFile,\n node: tsModule.VariableStatement\n ) {\n const ts = getTs()\n\n const diagnostics: tsModule.Diagnostic[] = []\n\n if (ts.isVariableDeclarationList(node.declarationList)) {\n for (const declaration of node.declarationList.declarations) {\n const initializer = declaration.initializer\n if (initializer && ts.isArrowFunction(initializer)) {\n diagnostics.push(\n ...clientBoundary.getSemanticDiagnosticsForFunctionExport(\n source,\n initializer\n )\n )\n }\n }\n }\n\n return diagnostics\n },\n\n getSemanticDiagnosticsForFunctionExport(\n source: tsModule.SourceFile,\n node: tsModule.FunctionDeclaration | tsModule.ArrowFunction\n ) {\n const ts = getTs()\n const typeChecker = getTypeChecker()\n if (!typeChecker) return []\n\n const diagnostics: tsModule.Diagnostic[] = []\n\n const isErrorFile = /[\\\\/]error\\.tsx?$/.test(source.fileName)\n const isGlobalErrorFile = /[\\\\/]global-error\\.tsx?$/.test(source.fileName)\n\n const props = node.parameters?.[0]\n if (props) {\n const propsType = typeChecker.getTypeAtLocation(props)\n const typeNode = propsType.symbol?.getDeclarations()?.[0]\n\n if (typeNode && ts.isTypeLiteralNode(typeNode)) {\n for (const member of typeNode.members) {\n if (ts.isPropertySignature(member)) {\n const propName = member.name.getText()\n const propType = member.type\n\n if (propType) {\n const propTypeInfo = typeChecker.getTypeAtLocation(propType)\n const typeDeclarationNode =\n propTypeInfo.symbol?.getDeclarations()?.[0]\n\n if (typeDeclarationNode) {\n if (\n ts.isFunctionTypeNode(typeDeclarationNode) ||\n // someFunc(): void\n ts.isMethodSignature(typeDeclarationNode)\n ) {\n // By convention, props named \"action\" can accept functions since we\n // assume these are Server Actions. Structurally, there's no\n // difference between a Server Action and a normal function until\n // TypeScript exposes directives in the type of a function. This\n // will miss accidentally passing normal functions but a false\n // negative is better than a false positive given how frequent the\n // false-positive would be.\n const maybeServerAction =\n propName === 'action' || /.+Action$/.test(propName)\n\n // There's a special case for the error file that the `reset` prop\n // is allowed to be a function:\n // https://github.com/vercel/next.js/issues/46573\n const isErrorReset =\n (isErrorFile || isGlobalErrorFile) && propName === 'reset'\n\n if (!maybeServerAction && !isErrorReset) {\n diagnostics.push({\n file: source,\n category: ts.DiagnosticCategory.Warning,\n code: NEXT_TS_ERRORS.INVALID_CLIENT_ENTRY_PROP,\n messageText:\n `Props must be serializable for components in the \"use client\" entry file. ` +\n `\"${propName}\" is a function that's not a Server Action. ` +\n `Rename \"${propName}\" either to \"action\" or have its name end with \"Action\" e.g. \"${propName}Action\" to indicate it is a Server Action.`,\n start: propType.getStart(),\n length: propType.getWidth(),\n })\n }\n } else if (\n // Show warning for not serializable props.\n ts.isConstructorTypeNode(typeDeclarationNode) ||\n ts.isClassDeclaration(typeDeclarationNode)\n ) {\n diagnostics.push({\n file: source,\n category: ts.DiagnosticCategory.Warning,\n code: NEXT_TS_ERRORS.INVALID_CLIENT_ENTRY_PROP,\n messageText: `Props must be serializable for components in the \"use client\" entry file, \"${propName}\" is invalid.`,\n start: propType.getStart(),\n length: propType.getWidth(),\n })\n }\n }\n }\n }\n }\n }\n }\n\n return diagnostics\n },\n}\n\nexport default clientBoundary\n"],"names":["clientBoundary","getSemanticDiagnosticsForExportVariableStatement","source","node","ts","getTs","diagnostics","isVariableDeclarationList","declarationList","declaration","declarations","initializer","isArrowFunction","push","getSemanticDiagnosticsForFunctionExport","typeChecker","getTypeChecker","isErrorFile","test","fileName","isGlobalErrorFile","props","parameters","propsType","getTypeAtLocation","typeNode","symbol","getDeclarations","isTypeLiteralNode","member","members","isPropertySignature","propName","name","getText","propType","type","propTypeInfo","typeDeclarationNode","isFunctionTypeNode","isMethodSignature","maybeServerAction","isErrorReset","file","category","DiagnosticCategory","Warning","code","NEXT_TS_ERRORS","INVALID_CLIENT_ENTRY_PROP","messageText","start","getStart","length","getWidth","isConstructorTypeNode","isClassDeclaration"],"mappings":"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","ignoreList":[0]}
@@ -164,7 +164,10 @@ async function adapter(params) {
164
164
  value: true
165
165
  });
166
166
  }
167
- if (!globalThis.__incrementalCache && params.IncrementalCache) {
167
+ if (// If we are inside of the next start sandbox
168
+ // leverage the shared instance if not we need
169
+ // to create a fresh cache instance each time
170
+ !globalThis.__incrementalCacheShared && params.IncrementalCache) {
168
171
  ;
169
172
  globalThis.__incrementalCache = new params.IncrementalCache({
170
173
  appDir: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/server/web/adapter.ts"],"sourcesContent":["import type { RequestData, FetchEventResult } from './types'\nimport type { RequestInit } from './spec-extension/request'\nimport { PageSignatureError } from './error'\nimport { fromNodeOutgoingHttpHeaders, normalizeNextQueryParam } from './utils'\nimport {\n NextFetchEvent,\n getWaitUntilPromiseFromEvent,\n} from './spec-extension/fetch-event'\nimport { NextRequest } from './spec-extension/request'\nimport { NextResponse } from './spec-extension/response'\nimport {\n parseRelativeURL,\n getRelativeURL,\n} from '../../shared/lib/router/utils/relativize-url'\nimport { NextURL } from './next-url'\nimport { stripInternalSearchParams } from '../internal-utils'\nimport { normalizeRscURL } from '../../shared/lib/router/utils/app-paths'\nimport {\n FLIGHT_HEADERS,\n NEXT_REWRITTEN_PATH_HEADER,\n NEXT_REWRITTEN_QUERY_HEADER,\n RSC_HEADER,\n} from '../../client/components/app-router-headers'\nimport { ensureInstrumentationRegistered } from './globals'\nimport { createRequestStoreForAPI } from '../async-storage/request-store'\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\nimport { createWorkStore } from '../async-storage/work-store'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { NEXT_ROUTER_PREFETCH_HEADER } from '../../client/components/app-router-headers'\nimport { getTracer } from '../lib/trace/tracer'\nimport type { TextMapGetter } from 'next/dist/compiled/@opentelemetry/api'\nimport { MiddlewareSpan } from '../lib/trace/constants'\nimport { CloseController } from './web-on-close'\nimport { getEdgePreviewProps } from './get-edge-preview-props'\nimport { getBuiltinRequestContext } from '../after/builtin-request-context'\nimport { getImplicitTags } from '../lib/implicit-tags'\n\nexport class NextRequestHint extends NextRequest {\n sourcePage: string\n fetchMetrics: FetchEventResult['fetchMetrics'] | undefined\n\n constructor(params: {\n init: RequestInit\n input: Request | string\n page: string\n }) {\n super(params.input, params.init)\n this.sourcePage = params.page\n }\n\n get request() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n\n respondWith() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n\n waitUntil() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n}\n\nconst headersGetter: TextMapGetter<Headers> = {\n keys: (headers) => Array.from(headers.keys()),\n get: (headers, key) => headers.get(key) ?? undefined,\n}\n\nexport type AdapterOptions = {\n handler: (req: NextRequestHint, event: NextFetchEvent) => Promise<Response>\n page: string\n request: RequestData\n IncrementalCache?: typeof import('../lib/incremental-cache').IncrementalCache\n}\n\nlet propagator: <T>(request: NextRequestHint, fn: () => T) => T = (\n request,\n fn\n) => {\n const tracer = getTracer()\n return tracer.withPropagatedContext(request.headers, fn, headersGetter)\n}\n\nlet testApisIntercepted = false\n\nfunction ensureTestApisIntercepted() {\n if (!testApisIntercepted) {\n testApisIntercepted = true\n if (process.env.NEXT_PRIVATE_TEST_PROXY === 'true') {\n const {\n interceptTestApis,\n wrapRequestHandler,\n } = require('next/dist/experimental/testmode/server-edge')\n interceptTestApis()\n propagator = wrapRequestHandler(propagator)\n }\n }\n}\n\nexport async function adapter(\n params: AdapterOptions\n): Promise<FetchEventResult> {\n ensureTestApisIntercepted()\n await ensureInstrumentationRegistered()\n\n // TODO-APP: use explicit marker for this\n const isEdgeRendering =\n typeof (globalThis as any).__BUILD_MANIFEST !== 'undefined'\n\n params.request.url = normalizeRscURL(params.request.url)\n\n const requestURL = new NextURL(params.request.url, {\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n // Iterator uses an index to keep track of the current iteration. Because of deleting and appending below we can't just use the iterator.\n // Instead we use the keys before iteration.\n const keys = [...requestURL.searchParams.keys()]\n for (const key of keys) {\n const value = requestURL.searchParams.getAll(key)\n\n const normalizedKey = normalizeNextQueryParam(key)\n if (normalizedKey) {\n requestURL.searchParams.delete(normalizedKey)\n for (const val of value) {\n requestURL.searchParams.append(normalizedKey, val)\n }\n requestURL.searchParams.delete(key)\n }\n }\n\n // Ensure users only see page requests, never data requests.\n const buildId = requestURL.buildId\n requestURL.buildId = ''\n\n const requestHeaders = fromNodeOutgoingHttpHeaders(params.request.headers)\n const isNextDataRequest = requestHeaders.has('x-nextjs-data')\n const isRSCRequest = requestHeaders.get(RSC_HEADER) === '1'\n\n if (isNextDataRequest && requestURL.pathname === '/index') {\n requestURL.pathname = '/'\n }\n\n const flightHeaders = new Map()\n\n // Headers should only be stripped for middleware\n if (!isEdgeRendering) {\n for (const header of FLIGHT_HEADERS) {\n const key = header.toLowerCase()\n const value = requestHeaders.get(key)\n if (value !== null) {\n flightHeaders.set(key, value)\n requestHeaders.delete(key)\n }\n }\n }\n\n const normalizeURL = process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? new URL(params.request.url)\n : requestURL\n\n const request = new NextRequestHint({\n page: params.page,\n // Strip internal query parameters off the request.\n input: stripInternalSearchParams(normalizeURL).toString(),\n init: {\n body: params.request.body,\n headers: requestHeaders,\n method: params.request.method,\n nextConfig: params.request.nextConfig,\n signal: params.request.signal,\n },\n })\n\n /**\n * This allows to identify the request as a data request. The user doesn't\n * need to know about this property neither use it. We add it for testing\n * purposes.\n */\n if (isNextDataRequest) {\n Object.defineProperty(request, '__isData', {\n enumerable: false,\n value: true,\n })\n }\n\n if (\n !(globalThis as any).__incrementalCache &&\n (params as any).IncrementalCache\n ) {\n ;(globalThis as any).__incrementalCache = new (\n params as any\n ).IncrementalCache({\n appDir: true,\n fetchCache: true,\n minimalMode: process.env.NODE_ENV !== 'development',\n fetchCacheKeyPrefix: process.env.__NEXT_FETCH_CACHE_KEY_PREFIX,\n dev: process.env.NODE_ENV === 'development',\n requestHeaders: params.request.headers as any,\n requestProtocol: 'https',\n getPrerenderManifest: () => {\n return {\n version: -1 as any, // letting us know this doesn't conform to spec\n routes: {},\n dynamicRoutes: {},\n notFoundRoutes: [],\n preview: getEdgePreviewProps(),\n }\n },\n })\n }\n\n // if we're in an edge runtime sandbox, we should use the waitUntil\n // that we receive from the enclosing NextServer\n const outerWaitUntil =\n params.request.waitUntil ?? getBuiltinRequestContext()?.waitUntil\n\n const event = new NextFetchEvent({\n request,\n page: params.page,\n context: outerWaitUntil ? { waitUntil: outerWaitUntil } : undefined,\n })\n let response\n let cookiesFromResponse\n\n response = await propagator(request, () => {\n // we only care to make async storage available for middleware\n const isMiddleware =\n params.page === '/middleware' || params.page === '/src/middleware'\n\n if (isMiddleware) {\n // if we're in an edge function, we only get a subset of `nextConfig` (no `experimental`),\n // so we have to inject it via DefinePlugin.\n // in `next start` this will be passed normally (see `NextNodeServer.runMiddleware`).\n\n const waitUntil = event.waitUntil.bind(event)\n const closeController = new CloseController()\n\n return getTracer().trace(\n MiddlewareSpan.execute,\n {\n spanName: `middleware ${request.method} ${request.nextUrl.pathname}`,\n attributes: {\n 'http.target': request.nextUrl.pathname,\n 'http.method': request.method,\n },\n },\n async () => {\n try {\n const onUpdateCookies = (cookies: Array<string>) => {\n cookiesFromResponse = cookies\n }\n const previewProps = getEdgePreviewProps()\n const page = '/' // Fake Work\n const fallbackRouteParams = null\n\n const implicitTags = await getImplicitTags(\n page,\n request.nextUrl,\n fallbackRouteParams\n )\n\n const requestStore = createRequestStoreForAPI(\n request,\n request.nextUrl,\n implicitTags,\n onUpdateCookies,\n previewProps\n )\n\n const workStore = createWorkStore({\n page,\n fallbackRouteParams,\n renderOpts: {\n cacheLifeProfiles:\n params.request.nextConfig?.experimental?.cacheLife,\n experimental: {\n isRoutePPREnabled: false,\n dynamicIO: false,\n authInterrupts:\n !!params.request.nextConfig?.experimental?.authInterrupts,\n },\n supportsDynamicResponse: true,\n waitUntil,\n onClose: closeController.onClose.bind(closeController),\n onAfterTaskError: undefined,\n },\n requestEndedState: { ended: false },\n isPrefetchRequest: request.headers.has(\n NEXT_ROUTER_PREFETCH_HEADER\n ),\n buildId: buildId ?? '',\n previouslyRevalidatedTags: [],\n })\n\n return await workAsyncStorage.run(workStore, () =>\n workUnitAsyncStorage.run(\n requestStore,\n params.handler,\n request,\n event\n )\n )\n } finally {\n // middleware cannot stream, so we can consider the response closed\n // as soon as the handler returns.\n // we can delay running it until a bit later --\n // if it's needed, we'll have a `waitUntil` lock anyway.\n setTimeout(() => {\n closeController.dispatchClose()\n }, 0)\n }\n }\n )\n }\n return params.handler(request, event)\n })\n\n // check if response is a Response object\n if (response && !(response instanceof Response)) {\n throw new TypeError('Expected an instance of Response to be returned')\n }\n\n if (response && cookiesFromResponse) {\n response.headers.set('set-cookie', cookiesFromResponse)\n }\n\n /**\n * For rewrites we must always include the locale in the final pathname\n * so we re-create the NextURL forcing it to include it when the it is\n * an internal rewrite. Also we make sure the outgoing rewrite URL is\n * a data URL if the request was a data request.\n */\n const rewrite = response?.headers.get('x-middleware-rewrite')\n if (response && rewrite && (isRSCRequest || !isEdgeRendering)) {\n const destination = new NextURL(rewrite, {\n forceLocale: true,\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE && !isEdgeRendering) {\n if (destination.host === request.nextUrl.host) {\n destination.buildId = buildId || destination.buildId\n response.headers.set('x-middleware-rewrite', String(destination))\n }\n }\n\n /**\n * When the request is a data request we must show if there was a rewrite\n * with an internal header so the client knows which component to load\n * from the data request.\n */\n const { url: relativeDestination, isRelative } = parseRelativeURL(\n destination.toString(),\n requestURL.toString()\n )\n\n if (\n !isEdgeRendering &&\n isNextDataRequest &&\n // if the rewrite is external and external rewrite\n // resolving config is enabled don't add this header\n // so the upstream app can set it instead\n !(\n process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE &&\n relativeDestination.match(/http(s)?:\\/\\//)\n )\n ) {\n response.headers.set('x-nextjs-rewrite', relativeDestination)\n }\n\n // If this is an RSC request, and the pathname or search has changed, and\n // this isn't an external rewrite, we need to set the rewritten pathname and\n // query headers.\n if (isRSCRequest && isRelative) {\n if (requestURL.pathname !== destination.pathname) {\n response.headers.set(NEXT_REWRITTEN_PATH_HEADER, destination.pathname)\n }\n if (requestURL.search !== destination.search) {\n response.headers.set(\n NEXT_REWRITTEN_QUERY_HEADER,\n // remove the leading ? from the search string\n destination.search.slice(1)\n )\n }\n }\n }\n\n /**\n * For redirects we will not include the locale in case when it is the\n * default and we must also make sure the outgoing URL is a data one if\n * the incoming request was a data request.\n */\n const redirect = response?.headers.get('Location')\n if (response && redirect && !isEdgeRendering) {\n const redirectURL = new NextURL(redirect, {\n forceLocale: false,\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n /**\n * Responses created from redirects have immutable headers so we have\n * to clone the response to be able to modify it.\n */\n response = new Response(response.body, response)\n\n if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) {\n if (redirectURL.host === requestURL.host) {\n redirectURL.buildId = buildId || redirectURL.buildId\n response.headers.set('Location', redirectURL.toString())\n }\n }\n\n /**\n * When the request is a data request we can't use the location header as\n * it may end up with CORS error. Instead we map to an internal header so\n * the client knows the destination.\n */\n if (isNextDataRequest) {\n response.headers.delete('Location')\n response.headers.set(\n 'x-nextjs-redirect',\n getRelativeURL(redirectURL.toString(), requestURL.toString())\n )\n }\n }\n\n const finalResponse = response ? response : NextResponse.next()\n\n // Flight headers are not overridable / removable so they are applied at the end.\n const middlewareOverrideHeaders = finalResponse.headers.get(\n 'x-middleware-override-headers'\n )\n const overwrittenHeaders: string[] = []\n if (middlewareOverrideHeaders) {\n for (const [key, value] of flightHeaders) {\n finalResponse.headers.set(`x-middleware-request-${key}`, value)\n overwrittenHeaders.push(key)\n }\n\n if (overwrittenHeaders.length > 0) {\n finalResponse.headers.set(\n 'x-middleware-override-headers',\n middlewareOverrideHeaders + ',' + overwrittenHeaders.join(',')\n )\n }\n }\n\n return {\n response: finalResponse,\n waitUntil: getWaitUntilPromiseFromEvent(event) ?? Promise.resolve(),\n fetchMetrics: request.fetchMetrics,\n }\n}\n"],"names":["NextRequestHint","adapter","NextRequest","constructor","params","input","init","sourcePage","page","request","PageSignatureError","respondWith","waitUntil","headersGetter","keys","headers","Array","from","get","key","undefined","propagator","fn","tracer","getTracer","withPropagatedContext","testApisIntercepted","ensureTestApisIntercepted","process","env","NEXT_PRIVATE_TEST_PROXY","interceptTestApis","wrapRequestHandler","require","getBuiltinRequestContext","ensureInstrumentationRegistered","isEdgeRendering","globalThis","__BUILD_MANIFEST","url","normalizeRscURL","requestURL","NextURL","nextConfig","searchParams","value","getAll","normalizedKey","normalizeNextQueryParam","delete","val","append","buildId","requestHeaders","fromNodeOutgoingHttpHeaders","isNextDataRequest","has","isRSCRequest","RSC_HEADER","pathname","flightHeaders","Map","header","FLIGHT_HEADERS","toLowerCase","set","normalizeURL","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","URL","stripInternalSearchParams","toString","body","method","signal","Object","defineProperty","enumerable","__incrementalCache","IncrementalCache","appDir","fetchCache","minimalMode","NODE_ENV","fetchCacheKeyPrefix","__NEXT_FETCH_CACHE_KEY_PREFIX","dev","requestProtocol","getPrerenderManifest","version","routes","dynamicRoutes","notFoundRoutes","preview","getEdgePreviewProps","outerWaitUntil","event","NextFetchEvent","context","response","cookiesFromResponse","isMiddleware","bind","closeController","CloseController","trace","MiddlewareSpan","execute","spanName","nextUrl","attributes","onUpdateCookies","cookies","previewProps","fallbackRouteParams","implicitTags","getImplicitTags","requestStore","createRequestStoreForAPI","workStore","createWorkStore","renderOpts","cacheLifeProfiles","experimental","cacheLife","isRoutePPREnabled","dynamicIO","authInterrupts","supportsDynamicResponse","onClose","onAfterTaskError","requestEndedState","ended","isPrefetchRequest","NEXT_ROUTER_PREFETCH_HEADER","previouslyRevalidatedTags","workAsyncStorage","run","workUnitAsyncStorage","handler","setTimeout","dispatchClose","Response","TypeError","rewrite","destination","forceLocale","host","String","relativeDestination","isRelative","parseRelativeURL","__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE","match","NEXT_REWRITTEN_PATH_HEADER","search","NEXT_REWRITTEN_QUERY_HEADER","slice","redirect","redirectURL","getRelativeURL","finalResponse","NextResponse","next","middlewareOverrideHeaders","overwrittenHeaders","push","length","join","getWaitUntilPromiseFromEvent","Promise","resolve","fetchMetrics"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../src/server/web/adapter.ts"],"sourcesContent":["import type { RequestData, FetchEventResult } from './types'\nimport type { RequestInit } from './spec-extension/request'\nimport { PageSignatureError } from './error'\nimport { fromNodeOutgoingHttpHeaders, normalizeNextQueryParam } from './utils'\nimport {\n NextFetchEvent,\n getWaitUntilPromiseFromEvent,\n} from './spec-extension/fetch-event'\nimport { NextRequest } from './spec-extension/request'\nimport { NextResponse } from './spec-extension/response'\nimport {\n parseRelativeURL,\n getRelativeURL,\n} from '../../shared/lib/router/utils/relativize-url'\nimport { NextURL } from './next-url'\nimport { stripInternalSearchParams } from '../internal-utils'\nimport { normalizeRscURL } from '../../shared/lib/router/utils/app-paths'\nimport {\n FLIGHT_HEADERS,\n NEXT_REWRITTEN_PATH_HEADER,\n NEXT_REWRITTEN_QUERY_HEADER,\n RSC_HEADER,\n} from '../../client/components/app-router-headers'\nimport { ensureInstrumentationRegistered } from './globals'\nimport { createRequestStoreForAPI } from '../async-storage/request-store'\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\nimport { createWorkStore } from '../async-storage/work-store'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { NEXT_ROUTER_PREFETCH_HEADER } from '../../client/components/app-router-headers'\nimport { getTracer } from '../lib/trace/tracer'\nimport type { TextMapGetter } from 'next/dist/compiled/@opentelemetry/api'\nimport { MiddlewareSpan } from '../lib/trace/constants'\nimport { CloseController } from './web-on-close'\nimport { getEdgePreviewProps } from './get-edge-preview-props'\nimport { getBuiltinRequestContext } from '../after/builtin-request-context'\nimport { getImplicitTags } from '../lib/implicit-tags'\n\nexport class NextRequestHint extends NextRequest {\n sourcePage: string\n fetchMetrics: FetchEventResult['fetchMetrics'] | undefined\n\n constructor(params: {\n init: RequestInit\n input: Request | string\n page: string\n }) {\n super(params.input, params.init)\n this.sourcePage = params.page\n }\n\n get request() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n\n respondWith() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n\n waitUntil() {\n throw new PageSignatureError({ page: this.sourcePage })\n }\n}\n\nconst headersGetter: TextMapGetter<Headers> = {\n keys: (headers) => Array.from(headers.keys()),\n get: (headers, key) => headers.get(key) ?? undefined,\n}\n\nexport type AdapterOptions = {\n handler: (req: NextRequestHint, event: NextFetchEvent) => Promise<Response>\n page: string\n request: RequestData\n IncrementalCache?: typeof import('../lib/incremental-cache').IncrementalCache\n}\n\nlet propagator: <T>(request: NextRequestHint, fn: () => T) => T = (\n request,\n fn\n) => {\n const tracer = getTracer()\n return tracer.withPropagatedContext(request.headers, fn, headersGetter)\n}\n\nlet testApisIntercepted = false\n\nfunction ensureTestApisIntercepted() {\n if (!testApisIntercepted) {\n testApisIntercepted = true\n if (process.env.NEXT_PRIVATE_TEST_PROXY === 'true') {\n const {\n interceptTestApis,\n wrapRequestHandler,\n } = require('next/dist/experimental/testmode/server-edge')\n interceptTestApis()\n propagator = wrapRequestHandler(propagator)\n }\n }\n}\n\nexport async function adapter(\n params: AdapterOptions\n): Promise<FetchEventResult> {\n ensureTestApisIntercepted()\n await ensureInstrumentationRegistered()\n\n // TODO-APP: use explicit marker for this\n const isEdgeRendering =\n typeof (globalThis as any).__BUILD_MANIFEST !== 'undefined'\n\n params.request.url = normalizeRscURL(params.request.url)\n\n const requestURL = new NextURL(params.request.url, {\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n // Iterator uses an index to keep track of the current iteration. Because of deleting and appending below we can't just use the iterator.\n // Instead we use the keys before iteration.\n const keys = [...requestURL.searchParams.keys()]\n for (const key of keys) {\n const value = requestURL.searchParams.getAll(key)\n\n const normalizedKey = normalizeNextQueryParam(key)\n if (normalizedKey) {\n requestURL.searchParams.delete(normalizedKey)\n for (const val of value) {\n requestURL.searchParams.append(normalizedKey, val)\n }\n requestURL.searchParams.delete(key)\n }\n }\n\n // Ensure users only see page requests, never data requests.\n const buildId = requestURL.buildId\n requestURL.buildId = ''\n\n const requestHeaders = fromNodeOutgoingHttpHeaders(params.request.headers)\n const isNextDataRequest = requestHeaders.has('x-nextjs-data')\n const isRSCRequest = requestHeaders.get(RSC_HEADER) === '1'\n\n if (isNextDataRequest && requestURL.pathname === '/index') {\n requestURL.pathname = '/'\n }\n\n const flightHeaders = new Map()\n\n // Headers should only be stripped for middleware\n if (!isEdgeRendering) {\n for (const header of FLIGHT_HEADERS) {\n const key = header.toLowerCase()\n const value = requestHeaders.get(key)\n if (value !== null) {\n flightHeaders.set(key, value)\n requestHeaders.delete(key)\n }\n }\n }\n\n const normalizeURL = process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? new URL(params.request.url)\n : requestURL\n\n const request = new NextRequestHint({\n page: params.page,\n // Strip internal query parameters off the request.\n input: stripInternalSearchParams(normalizeURL).toString(),\n init: {\n body: params.request.body,\n headers: requestHeaders,\n method: params.request.method,\n nextConfig: params.request.nextConfig,\n signal: params.request.signal,\n },\n })\n\n /**\n * This allows to identify the request as a data request. The user doesn't\n * need to know about this property neither use it. We add it for testing\n * purposes.\n */\n if (isNextDataRequest) {\n Object.defineProperty(request, '__isData', {\n enumerable: false,\n value: true,\n })\n }\n\n if (\n // If we are inside of the next start sandbox\n // leverage the shared instance if not we need\n // to create a fresh cache instance each time\n !(globalThis as any).__incrementalCacheShared &&\n (params as any).IncrementalCache\n ) {\n ;(globalThis as any).__incrementalCache = new (\n params as any\n ).IncrementalCache({\n appDir: true,\n fetchCache: true,\n minimalMode: process.env.NODE_ENV !== 'development',\n fetchCacheKeyPrefix: process.env.__NEXT_FETCH_CACHE_KEY_PREFIX,\n dev: process.env.NODE_ENV === 'development',\n requestHeaders: params.request.headers as any,\n requestProtocol: 'https',\n getPrerenderManifest: () => {\n return {\n version: -1 as any, // letting us know this doesn't conform to spec\n routes: {},\n dynamicRoutes: {},\n notFoundRoutes: [],\n preview: getEdgePreviewProps(),\n }\n },\n })\n }\n\n // if we're in an edge runtime sandbox, we should use the waitUntil\n // that we receive from the enclosing NextServer\n const outerWaitUntil =\n params.request.waitUntil ?? getBuiltinRequestContext()?.waitUntil\n\n const event = new NextFetchEvent({\n request,\n page: params.page,\n context: outerWaitUntil ? { waitUntil: outerWaitUntil } : undefined,\n })\n let response\n let cookiesFromResponse\n\n response = await propagator(request, () => {\n // we only care to make async storage available for middleware\n const isMiddleware =\n params.page === '/middleware' || params.page === '/src/middleware'\n\n if (isMiddleware) {\n // if we're in an edge function, we only get a subset of `nextConfig` (no `experimental`),\n // so we have to inject it via DefinePlugin.\n // in `next start` this will be passed normally (see `NextNodeServer.runMiddleware`).\n\n const waitUntil = event.waitUntil.bind(event)\n const closeController = new CloseController()\n\n return getTracer().trace(\n MiddlewareSpan.execute,\n {\n spanName: `middleware ${request.method} ${request.nextUrl.pathname}`,\n attributes: {\n 'http.target': request.nextUrl.pathname,\n 'http.method': request.method,\n },\n },\n async () => {\n try {\n const onUpdateCookies = (cookies: Array<string>) => {\n cookiesFromResponse = cookies\n }\n const previewProps = getEdgePreviewProps()\n const page = '/' // Fake Work\n const fallbackRouteParams = null\n\n const implicitTags = await getImplicitTags(\n page,\n request.nextUrl,\n fallbackRouteParams\n )\n\n const requestStore = createRequestStoreForAPI(\n request,\n request.nextUrl,\n implicitTags,\n onUpdateCookies,\n previewProps\n )\n\n const workStore = createWorkStore({\n page,\n fallbackRouteParams,\n renderOpts: {\n cacheLifeProfiles:\n params.request.nextConfig?.experimental?.cacheLife,\n experimental: {\n isRoutePPREnabled: false,\n dynamicIO: false,\n authInterrupts:\n !!params.request.nextConfig?.experimental?.authInterrupts,\n },\n supportsDynamicResponse: true,\n waitUntil,\n onClose: closeController.onClose.bind(closeController),\n onAfterTaskError: undefined,\n },\n requestEndedState: { ended: false },\n isPrefetchRequest: request.headers.has(\n NEXT_ROUTER_PREFETCH_HEADER\n ),\n buildId: buildId ?? '',\n previouslyRevalidatedTags: [],\n })\n\n return await workAsyncStorage.run(workStore, () =>\n workUnitAsyncStorage.run(\n requestStore,\n params.handler,\n request,\n event\n )\n )\n } finally {\n // middleware cannot stream, so we can consider the response closed\n // as soon as the handler returns.\n // we can delay running it until a bit later --\n // if it's needed, we'll have a `waitUntil` lock anyway.\n setTimeout(() => {\n closeController.dispatchClose()\n }, 0)\n }\n }\n )\n }\n return params.handler(request, event)\n })\n\n // check if response is a Response object\n if (response && !(response instanceof Response)) {\n throw new TypeError('Expected an instance of Response to be returned')\n }\n\n if (response && cookiesFromResponse) {\n response.headers.set('set-cookie', cookiesFromResponse)\n }\n\n /**\n * For rewrites we must always include the locale in the final pathname\n * so we re-create the NextURL forcing it to include it when the it is\n * an internal rewrite. Also we make sure the outgoing rewrite URL is\n * a data URL if the request was a data request.\n */\n const rewrite = response?.headers.get('x-middleware-rewrite')\n if (response && rewrite && (isRSCRequest || !isEdgeRendering)) {\n const destination = new NextURL(rewrite, {\n forceLocale: true,\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE && !isEdgeRendering) {\n if (destination.host === request.nextUrl.host) {\n destination.buildId = buildId || destination.buildId\n response.headers.set('x-middleware-rewrite', String(destination))\n }\n }\n\n /**\n * When the request is a data request we must show if there was a rewrite\n * with an internal header so the client knows which component to load\n * from the data request.\n */\n const { url: relativeDestination, isRelative } = parseRelativeURL(\n destination.toString(),\n requestURL.toString()\n )\n\n if (\n !isEdgeRendering &&\n isNextDataRequest &&\n // if the rewrite is external and external rewrite\n // resolving config is enabled don't add this header\n // so the upstream app can set it instead\n !(\n process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE &&\n relativeDestination.match(/http(s)?:\\/\\//)\n )\n ) {\n response.headers.set('x-nextjs-rewrite', relativeDestination)\n }\n\n // If this is an RSC request, and the pathname or search has changed, and\n // this isn't an external rewrite, we need to set the rewritten pathname and\n // query headers.\n if (isRSCRequest && isRelative) {\n if (requestURL.pathname !== destination.pathname) {\n response.headers.set(NEXT_REWRITTEN_PATH_HEADER, destination.pathname)\n }\n if (requestURL.search !== destination.search) {\n response.headers.set(\n NEXT_REWRITTEN_QUERY_HEADER,\n // remove the leading ? from the search string\n destination.search.slice(1)\n )\n }\n }\n }\n\n /**\n * For redirects we will not include the locale in case when it is the\n * default and we must also make sure the outgoing URL is a data one if\n * the incoming request was a data request.\n */\n const redirect = response?.headers.get('Location')\n if (response && redirect && !isEdgeRendering) {\n const redirectURL = new NextURL(redirect, {\n forceLocale: false,\n headers: params.request.headers,\n nextConfig: params.request.nextConfig,\n })\n\n /**\n * Responses created from redirects have immutable headers so we have\n * to clone the response to be able to modify it.\n */\n response = new Response(response.body, response)\n\n if (!process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE) {\n if (redirectURL.host === requestURL.host) {\n redirectURL.buildId = buildId || redirectURL.buildId\n response.headers.set('Location', redirectURL.toString())\n }\n }\n\n /**\n * When the request is a data request we can't use the location header as\n * it may end up with CORS error. Instead we map to an internal header so\n * the client knows the destination.\n */\n if (isNextDataRequest) {\n response.headers.delete('Location')\n response.headers.set(\n 'x-nextjs-redirect',\n getRelativeURL(redirectURL.toString(), requestURL.toString())\n )\n }\n }\n\n const finalResponse = response ? response : NextResponse.next()\n\n // Flight headers are not overridable / removable so they are applied at the end.\n const middlewareOverrideHeaders = finalResponse.headers.get(\n 'x-middleware-override-headers'\n )\n const overwrittenHeaders: string[] = []\n if (middlewareOverrideHeaders) {\n for (const [key, value] of flightHeaders) {\n finalResponse.headers.set(`x-middleware-request-${key}`, value)\n overwrittenHeaders.push(key)\n }\n\n if (overwrittenHeaders.length > 0) {\n finalResponse.headers.set(\n 'x-middleware-override-headers',\n middlewareOverrideHeaders + ',' + overwrittenHeaders.join(',')\n )\n }\n }\n\n return {\n response: finalResponse,\n waitUntil: getWaitUntilPromiseFromEvent(event) ?? Promise.resolve(),\n fetchMetrics: request.fetchMetrics,\n }\n}\n"],"names":["NextRequestHint","adapter","NextRequest","constructor","params","input","init","sourcePage","page","request","PageSignatureError","respondWith","waitUntil","headersGetter","keys","headers","Array","from","get","key","undefined","propagator","fn","tracer","getTracer","withPropagatedContext","testApisIntercepted","ensureTestApisIntercepted","process","env","NEXT_PRIVATE_TEST_PROXY","interceptTestApis","wrapRequestHandler","require","getBuiltinRequestContext","ensureInstrumentationRegistered","isEdgeRendering","globalThis","__BUILD_MANIFEST","url","normalizeRscURL","requestURL","NextURL","nextConfig","searchParams","value","getAll","normalizedKey","normalizeNextQueryParam","delete","val","append","buildId","requestHeaders","fromNodeOutgoingHttpHeaders","isNextDataRequest","has","isRSCRequest","RSC_HEADER","pathname","flightHeaders","Map","header","FLIGHT_HEADERS","toLowerCase","set","normalizeURL","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","URL","stripInternalSearchParams","toString","body","method","signal","Object","defineProperty","enumerable","__incrementalCacheShared","IncrementalCache","__incrementalCache","appDir","fetchCache","minimalMode","NODE_ENV","fetchCacheKeyPrefix","__NEXT_FETCH_CACHE_KEY_PREFIX","dev","requestProtocol","getPrerenderManifest","version","routes","dynamicRoutes","notFoundRoutes","preview","getEdgePreviewProps","outerWaitUntil","event","NextFetchEvent","context","response","cookiesFromResponse","isMiddleware","bind","closeController","CloseController","trace","MiddlewareSpan","execute","spanName","nextUrl","attributes","onUpdateCookies","cookies","previewProps","fallbackRouteParams","implicitTags","getImplicitTags","requestStore","createRequestStoreForAPI","workStore","createWorkStore","renderOpts","cacheLifeProfiles","experimental","cacheLife","isRoutePPREnabled","dynamicIO","authInterrupts","supportsDynamicResponse","onClose","onAfterTaskError","requestEndedState","ended","isPrefetchRequest","NEXT_ROUTER_PREFETCH_HEADER","previouslyRevalidatedTags","workAsyncStorage","run","workUnitAsyncStorage","handler","setTimeout","dispatchClose","Response","TypeError","rewrite","destination","forceLocale","host","String","relativeDestination","isRelative","parseRelativeURL","__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE","match","NEXT_REWRITTEN_PATH_HEADER","search","NEXT_REWRITTEN_QUERY_HEADER","slice","redirect","redirectURL","getRelativeURL","finalResponse","NextResponse","next","middlewareOverrideHeaders","overwrittenHeaders","push","length","join","getWaitUntilPromiseFromEvent","Promise","resolve","fetchMetrics"],"mappings":"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","ignoreList":[0]}
@@ -66,6 +66,7 @@ async function getRuntimeContext(params) {
66
66
  distDir: params.distDir
67
67
  });
68
68
  if (params.incrementalCache) {
69
+ runtime.context.globalThis.__incrementalCacheShared = true;
69
70
  runtime.context.globalThis.__incrementalCache = params.incrementalCache;
70
71
  }
71
72
  if (params.serverComponentsHmrCache) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/server/web/sandbox/sandbox.ts"],"sourcesContent":["import type { NodejsRequestData, FetchEventResult, RequestData } from '../types'\nimport type { EdgeFunctionDefinition } from '../../../build/webpack/plugins/middleware-plugin'\nimport type { EdgeRuntime } from 'next/dist/compiled/edge-runtime'\nimport {\n getModuleContext,\n requestStore,\n edgeSandboxNextRequestContext,\n} from './context'\nimport { requestToBodyStream } from '../../body-streams'\nimport { NEXT_RSC_UNION_QUERY } from '../../../client/components/app-router-headers'\nimport type { ServerComponentsHmrCache } from '../../response-cache'\nimport {\n getBuiltinRequestContext,\n type BuiltinRequestContextValue,\n} from '../../after/builtin-request-context'\n\nexport const ErrorSource = Symbol('SandboxError')\n\nconst FORBIDDEN_HEADERS = [\n 'content-length',\n 'content-encoding',\n 'transfer-encoding',\n]\n\ninterface RunnerFnParams {\n name: string\n onError?: (err: unknown) => void\n onWarning?: (warn: Error) => void\n paths: string[]\n request: NodejsRequestData\n useCache: boolean\n edgeFunctionEntry: Pick<EdgeFunctionDefinition, 'assets' | 'wasm' | 'env'>\n distDir: string\n incrementalCache?: any\n serverComponentsHmrCache?: ServerComponentsHmrCache\n}\n\ntype RunnerFn = (params: RunnerFnParams) => Promise<FetchEventResult>\n\n/**\n * Decorates the runner function making sure all errors it can produce are\n * tagged with `edge-server` so they can properly be rendered in dev.\n */\nfunction withTaggedErrors(fn: RunnerFn): RunnerFn {\n if (process.env.NODE_ENV === 'development') {\n const { getServerError } =\n require('../../../client/components/react-dev-overlay/server/middleware-webpack') as typeof import('../../../client/components/react-dev-overlay/server/middleware-webpack')\n\n return (params) =>\n fn(params)\n .then((result) => ({\n ...result,\n waitUntil: result?.waitUntil?.catch((error) => {\n // TODO: used COMPILER_NAMES.edgeServer instead. Verify that it does not increase the runtime size.\n throw getServerError(error, 'edge-server')\n }),\n }))\n .catch((error) => {\n // TODO: used COMPILER_NAMES.edgeServer instead\n throw getServerError(error, 'edge-server')\n })\n }\n\n return fn\n}\n\nexport async function getRuntimeContext(\n params: Omit<RunnerFnParams, 'request'>\n): Promise<EdgeRuntime<any>> {\n const { runtime, evaluateInContext } = await getModuleContext({\n moduleName: params.name,\n onWarning: params.onWarning ?? (() => {}),\n onError: params.onError ?? (() => {}),\n useCache: params.useCache !== false,\n edgeFunctionEntry: params.edgeFunctionEntry,\n distDir: params.distDir,\n })\n\n if (params.incrementalCache) {\n runtime.context.globalThis.__incrementalCache = params.incrementalCache\n }\n\n if (params.serverComponentsHmrCache) {\n runtime.context.globalThis.__serverComponentsHmrCache =\n params.serverComponentsHmrCache\n }\n\n for (const paramPath of params.paths) {\n evaluateInContext(paramPath)\n }\n return runtime\n}\n\nexport const run = withTaggedErrors(async function runWithTaggedErrors(params) {\n const runtime = await getRuntimeContext(params)\n\n const edgeFunction: (args: {\n request: RequestData\n }) => Promise<FetchEventResult> = (\n await runtime.context._ENTRIES[`middleware_${params.name}`]\n ).default\n\n const cloned = !['HEAD', 'GET'].includes(params.request.method)\n ? params.request.body?.cloneBodyStream()\n : undefined\n\n const KUint8Array = runtime.evaluate('Uint8Array')\n const urlInstance = new URL(params.request.url)\n urlInstance.searchParams.delete(NEXT_RSC_UNION_QUERY)\n\n params.request.url = urlInstance.toString()\n\n const headers = new Headers()\n for (const [key, value] of Object.entries(params.request.headers)) {\n headers.set(key, value?.toString() ?? '')\n }\n\n try {\n let result: FetchEventResult | undefined = undefined\n const builtinRequestCtx: BuiltinRequestContextValue = {\n ...getBuiltinRequestContext(),\n // FIXME(after):\n // arguably, this is an abuse of \"@next/request-context\" --\n // it'd make more sense to simply forward its existing value into the sandbox (in `createModuleContext`)\n // but here we're using it to just pass in `waitUntil` regardless if we were running in this context or not.\n waitUntil: params.request.waitUntil,\n }\n await edgeSandboxNextRequestContext.run(builtinRequestCtx, () =>\n requestStore.run({ headers }, async () => {\n result = await edgeFunction({\n request: {\n ...params.request,\n body:\n cloned &&\n requestToBodyStream(runtime.context, KUint8Array, cloned),\n },\n })\n for (const headerName of FORBIDDEN_HEADERS) {\n result.response.headers.delete(headerName)\n }\n })\n )\n\n if (!result) throw new Error('Edge function did not return a response')\n return result\n } finally {\n await params.request.body?.finalize()\n }\n})\n"],"names":["ErrorSource","getRuntimeContext","run","Symbol","FORBIDDEN_HEADERS","withTaggedErrors","fn","process","env","NODE_ENV","getServerError","require","params","then","result","waitUntil","catch","error","runtime","evaluateInContext","getModuleContext","moduleName","name","onWarning","onError","useCache","edgeFunctionEntry","distDir","incrementalCache","context","globalThis","__incrementalCache","serverComponentsHmrCache","__serverComponentsHmrCache","paramPath","paths","runWithTaggedErrors","edgeFunction","_ENTRIES","default","cloned","includes","request","method","body","cloneBodyStream","undefined","KUint8Array","evaluate","urlInstance","URL","url","searchParams","delete","NEXT_RSC_UNION_QUERY","toString","headers","Headers","key","value","Object","entries","set","builtinRequestCtx","getBuiltinRequestContext","edgeSandboxNextRequestContext","requestStore","requestToBodyStream","headerName","response","Error","finalize"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../src/server/web/sandbox/sandbox.ts"],"sourcesContent":["import type { NodejsRequestData, FetchEventResult, RequestData } from '../types'\nimport type { EdgeFunctionDefinition } from '../../../build/webpack/plugins/middleware-plugin'\nimport type { EdgeRuntime } from 'next/dist/compiled/edge-runtime'\nimport {\n getModuleContext,\n requestStore,\n edgeSandboxNextRequestContext,\n} from './context'\nimport { requestToBodyStream } from '../../body-streams'\nimport { NEXT_RSC_UNION_QUERY } from '../../../client/components/app-router-headers'\nimport type { ServerComponentsHmrCache } from '../../response-cache'\nimport {\n getBuiltinRequestContext,\n type BuiltinRequestContextValue,\n} from '../../after/builtin-request-context'\n\nexport const ErrorSource = Symbol('SandboxError')\n\nconst FORBIDDEN_HEADERS = [\n 'content-length',\n 'content-encoding',\n 'transfer-encoding',\n]\n\ninterface RunnerFnParams {\n name: string\n onError?: (err: unknown) => void\n onWarning?: (warn: Error) => void\n paths: string[]\n request: NodejsRequestData\n useCache: boolean\n edgeFunctionEntry: Pick<EdgeFunctionDefinition, 'assets' | 'wasm' | 'env'>\n distDir: string\n incrementalCache?: any\n serverComponentsHmrCache?: ServerComponentsHmrCache\n}\n\ntype RunnerFn = (params: RunnerFnParams) => Promise<FetchEventResult>\n\n/**\n * Decorates the runner function making sure all errors it can produce are\n * tagged with `edge-server` so they can properly be rendered in dev.\n */\nfunction withTaggedErrors(fn: RunnerFn): RunnerFn {\n if (process.env.NODE_ENV === 'development') {\n const { getServerError } =\n require('../../../client/components/react-dev-overlay/server/middleware-webpack') as typeof import('../../../client/components/react-dev-overlay/server/middleware-webpack')\n\n return (params) =>\n fn(params)\n .then((result) => ({\n ...result,\n waitUntil: result?.waitUntil?.catch((error) => {\n // TODO: used COMPILER_NAMES.edgeServer instead. Verify that it does not increase the runtime size.\n throw getServerError(error, 'edge-server')\n }),\n }))\n .catch((error) => {\n // TODO: used COMPILER_NAMES.edgeServer instead\n throw getServerError(error, 'edge-server')\n })\n }\n\n return fn\n}\n\nexport async function getRuntimeContext(\n params: Omit<RunnerFnParams, 'request'>\n): Promise<EdgeRuntime<any>> {\n const { runtime, evaluateInContext } = await getModuleContext({\n moduleName: params.name,\n onWarning: params.onWarning ?? (() => {}),\n onError: params.onError ?? (() => {}),\n useCache: params.useCache !== false,\n edgeFunctionEntry: params.edgeFunctionEntry,\n distDir: params.distDir,\n })\n\n if (params.incrementalCache) {\n runtime.context.globalThis.__incrementalCacheShared = true\n runtime.context.globalThis.__incrementalCache = params.incrementalCache\n }\n\n if (params.serverComponentsHmrCache) {\n runtime.context.globalThis.__serverComponentsHmrCache =\n params.serverComponentsHmrCache\n }\n\n for (const paramPath of params.paths) {\n evaluateInContext(paramPath)\n }\n return runtime\n}\n\nexport const run = withTaggedErrors(async function runWithTaggedErrors(params) {\n const runtime = await getRuntimeContext(params)\n\n const edgeFunction: (args: {\n request: RequestData\n }) => Promise<FetchEventResult> = (\n await runtime.context._ENTRIES[`middleware_${params.name}`]\n ).default\n\n const cloned = !['HEAD', 'GET'].includes(params.request.method)\n ? params.request.body?.cloneBodyStream()\n : undefined\n\n const KUint8Array = runtime.evaluate('Uint8Array')\n const urlInstance = new URL(params.request.url)\n urlInstance.searchParams.delete(NEXT_RSC_UNION_QUERY)\n\n params.request.url = urlInstance.toString()\n\n const headers = new Headers()\n for (const [key, value] of Object.entries(params.request.headers)) {\n headers.set(key, value?.toString() ?? '')\n }\n\n try {\n let result: FetchEventResult | undefined = undefined\n const builtinRequestCtx: BuiltinRequestContextValue = {\n ...getBuiltinRequestContext(),\n // FIXME(after):\n // arguably, this is an abuse of \"@next/request-context\" --\n // it'd make more sense to simply forward its existing value into the sandbox (in `createModuleContext`)\n // but here we're using it to just pass in `waitUntil` regardless if we were running in this context or not.\n waitUntil: params.request.waitUntil,\n }\n await edgeSandboxNextRequestContext.run(builtinRequestCtx, () =>\n requestStore.run({ headers }, async () => {\n result = await edgeFunction({\n request: {\n ...params.request,\n body:\n cloned &&\n requestToBodyStream(runtime.context, KUint8Array, cloned),\n },\n })\n for (const headerName of FORBIDDEN_HEADERS) {\n result.response.headers.delete(headerName)\n }\n })\n )\n\n if (!result) throw new Error('Edge function did not return a response')\n return result\n } finally {\n await params.request.body?.finalize()\n }\n})\n"],"names":["ErrorSource","getRuntimeContext","run","Symbol","FORBIDDEN_HEADERS","withTaggedErrors","fn","process","env","NODE_ENV","getServerError","require","params","then","result","waitUntil","catch","error","runtime","evaluateInContext","getModuleContext","moduleName","name","onWarning","onError","useCache","edgeFunctionEntry","distDir","incrementalCache","context","globalThis","__incrementalCacheShared","__incrementalCache","serverComponentsHmrCache","__serverComponentsHmrCache","paramPath","paths","runWithTaggedErrors","edgeFunction","_ENTRIES","default","cloned","includes","request","method","body","cloneBodyStream","undefined","KUint8Array","evaluate","urlInstance","URL","url","searchParams","delete","NEXT_RSC_UNION_QUERY","toString","headers","Headers","key","value","Object","entries","set","builtinRequestCtx","getBuiltinRequestContext","edgeSandboxNextRequestContext","requestStore","requestToBodyStream","headerName","response","Error","finalize"],"mappings":"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","ignoreList":[0]}
@@ -22,7 +22,7 @@ _export(exports, {
22
22
  });
23
23
  function isStableBuild() {
24
24
  var _process_env___NEXT_VERSION;
25
- return !((_process_env___NEXT_VERSION = "15.4.0-canary.41") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
25
+ return !((_process_env___NEXT_VERSION = "15.4.0-canary.43") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
26
26
  }
27
27
  class CanaryOnlyError extends Error {
28
28
  constructor(arg){
@@ -81,7 +81,7 @@ function getAnonymousMeta() {
81
81
  isWsl: _iswsl.default,
82
82
  isCI: _ciinfo.isCI,
83
83
  ciName: _ciinfo.isCI && _ciinfo.name || null,
84
- nextVersion: "15.4.0-canary.41"
84
+ nextVersion: "15.4.0-canary.43"
85
85
  };
86
86
  return traits;
87
87
  }
@@ -11,11 +11,11 @@ Object.defineProperty(exports, "eventCliSessionStopped", {
11
11
  const EVENT_VERSION = 'NEXT_CLI_SESSION_STOPPED';
12
12
  function eventCliSessionStopped(event) {
13
13
  // This should be an invariant, if it fails our build tooling is broken.
14
- if (typeof "15.4.0-canary.41" !== 'string') {
14
+ if (typeof "15.4.0-canary.43" !== 'string') {
15
15
  return [];
16
16
  }
17
17
  const payload = {
18
- nextVersion: "15.4.0-canary.41",
18
+ nextVersion: "15.4.0-canary.43",
19
19
  nodeVersion: process.version,
20
20
  cliCommand: event.cliCommand,
21
21
  durationMilliseconds: event.durationMilliseconds,
@@ -36,12 +36,12 @@ function hasBabelConfig(dir) {
36
36
  function eventCliSession(dir, nextConfig, event) {
37
37
  var _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_experimental_reactCompiler, _nextConfig_experimental_reactCompiler1;
38
38
  // This should be an invariant, if it fails our build tooling is broken.
39
- if (typeof "15.4.0-canary.41" !== 'string') {
39
+ if (typeof "15.4.0-canary.43" !== 'string') {
40
40
  return [];
41
41
  }
42
42
  const { images, i18n } = nextConfig || {};
43
43
  const payload = {
44
- nextVersion: "15.4.0-canary.41",
44
+ nextVersion: "15.4.0-canary.43",
45
45
  nodeVersion: process.version,
46
46
  cliCommand: event.cliCommand,
47
47
  isSrcDir: event.isSrcDir,