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
@@ -83,7 +83,7 @@ export async function createHotReloaderTurbopack(opts, serverFields, distDir, re
83
83
  }
84
84
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
85
85
  const hotReloaderSpan = trace('hot-reloader', undefined, {
86
- version: "15.4.0-canary.41"
86
+ version: "15.4.0-canary.43"
87
87
  });
88
88
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
89
89
  // of the current `next dev` invocation.
@@ -181,7 +181,7 @@ export default class HotReloaderWebpack {
181
181
  this.previewProps = previewProps;
182
182
  this.rewrites = rewrites;
183
183
  this.hotReloaderSpan = trace('hot-reloader', undefined, {
184
- version: "15.4.0-canary.41"
184
+ version: "15.4.0-canary.43"
185
185
  });
186
186
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
187
187
  // of the current `next dev` invocation.
@@ -12,7 +12,7 @@ export function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures
12
12
  } else {
13
13
  bundlerSuffix = '';
14
14
  }
15
- Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.0-canary.41"}`))}${bundlerSuffix}`);
15
+ Log.bootstrap(`${bold(purple(`${Log.prefixes.ready} Next.js ${"15.4.0-canary.43"}`))}${bundlerSuffix}`);
16
16
  if (appUrl) {
17
17
  Log.bootstrap(`- Local: ${appUrl}`);
18
18
  }
@@ -347,13 +347,15 @@ export class IncrementalCache {
347
347
  if (ctx.fetchCache && // we don't show this error/warning when a custom cache handler is being used
348
348
  // as it might not have this limit
349
349
  !this.hasCustomCacheHandler && itemSize > 2 * 1024 * 1024) {
350
+ const warningText = `Failed to set Next.js data cache for ${ctx.fetchUrl || pathname}, items over 2MB can not be cached (${itemSize} bytes)`;
350
351
  if (this.dev) {
351
- throw Object.defineProperty(new Error(`Failed to set Next.js data cache, items over 2MB can not be cached (${itemSize} bytes)`), "__NEXT_ERROR_CODE", {
352
- value: "E86",
352
+ throw Object.defineProperty(new Error(warningText), "__NEXT_ERROR_CODE", {
353
+ value: "E394",
353
354
  enumerable: false,
354
355
  configurable: true
355
356
  });
356
357
  }
358
+ console.warn(warningText);
357
359
  return;
358
360
  }
359
361
  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":["IncrementalCacheKind","CachedRouteKind","FileSystemCache","normalizePagePath","CACHE_ONE_YEAR","PRERENDER_REVALIDATE_HEADER","toRoute","SharedCacheControls","getPrerenderResumeDataCache","getRenderResumeDataCache","workUnitAsyncStorage","InvariantError","getPreviouslyRevalidatedTags","workAsyncStorage","CacheHandler","constructor","_ctx","get","_cacheKey","set","_data","revalidateTag","_args","resetRequestCache","IncrementalCache","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","name","__NEXT_TEST_MAX_ISR_CACHE","parseInt","disableForTestmode","NEXT_PRIVATE_TEST_PROXY","minimalModeKey","prerenderManifest","cacheControls","revalidatedTags","preview","previewModeId","isOnDemandRevalidate","cacheHandler","_requestHeaders","calculateRevalidate","pathname","fromTime","isFallback","Math","floor","performance","timeOrigin","now","cacheControl","initialRevalidateSeconds","revalidate","revalidateAfter","_getPathname","fetchCache","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","FETCH","workUnitStore","getStore","resumeDataCache","memoryCacheData","fetch","isStale","value","workStore","combinedTags","softTags","some","tag","includes","pendingRevalidatedTags","age","lastModified","data","entry","undefined","notFoundRoutes","prerenderResumeDataCache","itemSize","Error","warn"],"mappings":"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","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":["IncrementalCacheKind","CachedRouteKind","FileSystemCache","normalizePagePath","CACHE_ONE_YEAR","PRERENDER_REVALIDATE_HEADER","toRoute","SharedCacheControls","getPrerenderResumeDataCache","getRenderResumeDataCache","workUnitAsyncStorage","InvariantError","getPreviouslyRevalidatedTags","workAsyncStorage","CacheHandler","constructor","_ctx","get","_cacheKey","set","_data","revalidateTag","_args","resetRequestCache","IncrementalCache","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","name","__NEXT_TEST_MAX_ISR_CACHE","parseInt","disableForTestmode","NEXT_PRIVATE_TEST_PROXY","minimalModeKey","prerenderManifest","cacheControls","revalidatedTags","preview","previewModeId","isOnDemandRevalidate","cacheHandler","_requestHeaders","calculateRevalidate","pathname","fromTime","isFallback","Math","floor","performance","timeOrigin","now","cacheControl","initialRevalidateSeconds","revalidate","revalidateAfter","_getPathname","fetchCache","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","FETCH","workUnitStore","getStore","resumeDataCache","memoryCacheData","fetch","isStale","value","workStore","combinedTags","softTags","some","tag","includes","pendingRevalidatedTags","age","lastModified","data","entry","undefined","notFoundRoutes","prerenderResumeDataCache","itemSize","warningText","fetchUrl","Error","warn"],"mappings":"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","ignoreList":[0]}
@@ -42,7 +42,7 @@ export async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup,
42
42
  export async function startServer(serverOptions) {
43
43
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
44
44
  let { port } = serverOptions;
45
- process.title = `next-server (v${"15.4.0-canary.41"})`;
45
+ process.title = `next-server (v${"15.4.0-canary.43"})`;
46
46
  let handlersReady = ()=>{};
47
47
  let handlersError = ()=>{};
48
48
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -38,7 +38,8 @@ const clientBoundary = {
38
38
  const propTypeInfo = typeChecker.getTypeAtLocation(propType);
39
39
  const typeDeclarationNode = (_propTypeInfo_symbol = propTypeInfo.symbol) == null ? void 0 : (_propTypeInfo_symbol_getDeclarations = _propTypeInfo_symbol.getDeclarations()) == null ? void 0 : _propTypeInfo_symbol_getDeclarations[0];
40
40
  if (typeDeclarationNode) {
41
- if (ts.isFunctionTypeNode(typeDeclarationNode)) {
41
+ if (ts.isFunctionTypeNode(typeDeclarationNode) || // someFunc(): void
42
+ ts.isMethodSignature(typeDeclarationNode)) {
42
43
  // By convention, props named "action" can accept functions since we
43
44
  // assume these are Server Actions. Structurally, there's no
44
45
  // 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":["NEXT_TS_ERRORS","getTs","getTypeChecker","clientBoundary","getSemanticDiagnosticsForExportVariableStatement","source","node","ts","diagnostics","isVariableDeclarationList","declarationList","declaration","declarations","initializer","isArrowFunction","push","getSemanticDiagnosticsForFunctionExport","typeChecker","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","INVALID_CLIENT_ENTRY_PROP","messageText","start","getStart","length","getWidth","isConstructorTypeNode","isClassDeclaration"],"mappings":"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","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":["NEXT_TS_ERRORS","getTs","getTypeChecker","clientBoundary","getSemanticDiagnosticsForExportVariableStatement","source","node","ts","diagnostics","isVariableDeclarationList","declarationList","declaration","declarations","initializer","isArrowFunction","push","getSemanticDiagnosticsForFunctionExport","typeChecker","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","INVALID_CLIENT_ENTRY_PROP","messageText","start","getStart","length","getWidth","isConstructorTypeNode","isClassDeclaration"],"mappings":"AAAA,8FAA8F;AAE9F,SAASA,cAAc,QAAQ,cAAa;AAC5C,SAASC,KAAK,EAAEC,cAAc,QAAQ,WAAU;AAGhD,MAAMC,iBAAiB;IACrBC,kDACEC,MAA2B,EAC3BC,IAAgC;QAEhC,MAAMC,KAAKN;QAEX,MAAMO,cAAqC,EAAE;QAE7C,IAAID,GAAGE,yBAAyB,CAACH,KAAKI,eAAe,GAAG;YACtD,KAAK,MAAMC,eAAeL,KAAKI,eAAe,CAACE,YAAY,CAAE;gBAC3D,MAAMC,cAAcF,YAAYE,WAAW;gBAC3C,IAAIA,eAAeN,GAAGO,eAAe,CAACD,cAAc;oBAClDL,YAAYO,IAAI,IACXZ,eAAea,uCAAuC,CACvDX,QACAQ;gBAGN;YACF;QACF;QAEA,OAAOL;IACT;IAEAQ,yCACEX,MAA2B,EAC3BC,IAA2D;YAW7CA;QATd,MAAMC,KAAKN;QACX,MAAMgB,cAAcf;QACpB,IAAI,CAACe,aAAa,OAAO,EAAE;QAE3B,MAAMT,cAAqC,EAAE;QAE7C,MAAMU,cAAc,oBAAoBC,IAAI,CAACd,OAAOe,QAAQ;QAC5D,MAAMC,oBAAoB,2BAA2BF,IAAI,CAACd,OAAOe,QAAQ;QAEzE,MAAME,SAAQhB,mBAAAA,KAAKiB,UAAU,qBAAfjB,gBAAiB,CAAC,EAAE;QAClC,IAAIgB,OAAO;gBAEQE,mCAAAA;YADjB,MAAMA,YAAYP,YAAYQ,iBAAiB,CAACH;YAChD,MAAMI,YAAWF,oBAAAA,UAAUG,MAAM,sBAAhBH,oCAAAA,kBAAkBI,eAAe,uBAAjCJ,iCAAqC,CAAC,EAAE;YAEzD,IAAIE,YAAYnB,GAAGsB,iBAAiB,CAACH,WAAW;gBAC9C,KAAK,MAAMI,UAAUJ,SAASK,OAAO,CAAE;oBACrC,IAAIxB,GAAGyB,mBAAmB,CAACF,SAAS;wBAClC,MAAMG,WAAWH,OAAOI,IAAI,CAACC,OAAO;wBACpC,MAAMC,WAAWN,OAAOO,IAAI;wBAE5B,IAAID,UAAU;gCAGVE,sCAAAA;4BAFF,MAAMA,eAAerB,YAAYQ,iBAAiB,CAACW;4BACnD,MAAMG,uBACJD,uBAAAA,aAAaX,MAAM,sBAAnBW,uCAAAA,qBAAqBV,eAAe,uBAApCU,oCAAwC,CAAC,EAAE;4BAE7C,IAAIC,qBAAqB;gCACvB,IACEhC,GAAGiC,kBAAkB,CAACD,wBACtB,mBAAmB;gCACnBhC,GAAGkC,iBAAiB,CAACF,sBACrB;oCACA,oEAAoE;oCACpE,4DAA4D;oCAC5D,iEAAiE;oCACjE,gEAAgE;oCAChE,8DAA8D;oCAC9D,kEAAkE;oCAClE,2BAA2B;oCAC3B,MAAMG,oBACJT,aAAa,YAAY,YAAYd,IAAI,CAACc;oCAE5C,kEAAkE;oCAClE,+BAA+B;oCAC/B,iDAAiD;oCACjD,MAAMU,eACJ,AAACzB,CAAAA,eAAeG,iBAAgB,KAAMY,aAAa;oCAErD,IAAI,CAACS,qBAAqB,CAACC,cAAc;wCACvCnC,YAAYO,IAAI,CAAC;4CACf6B,MAAMvC;4CACNwC,UAAUtC,GAAGuC,kBAAkB,CAACC,OAAO;4CACvCC,MAAMhD,eAAeiD,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;gCAC3C/C,GAAGgD,qBAAqB,CAAChB,wBACzBhC,GAAGiD,kBAAkB,CAACjB,sBACtB;oCACA/B,YAAYO,IAAI,CAAC;wCACf6B,MAAMvC;wCACNwC,UAAUtC,GAAGuC,kBAAkB,CAACC,OAAO;wCACvCC,MAAMhD,eAAeiD,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,OAAO9C;IACT;AACF;AAEA,eAAeL,eAAc","ignoreList":[0]}
@@ -143,7 +143,10 @@ export async function adapter(params) {
143
143
  value: true
144
144
  });
145
145
  }
146
- if (!globalThis.__incrementalCache && params.IncrementalCache) {
146
+ if (// If we are inside of the next start sandbox
147
+ // leverage the shared instance if not we need
148
+ // to create a fresh cache instance each time
149
+ !globalThis.__incrementalCacheShared && params.IncrementalCache) {
147
150
  ;
148
151
  globalThis.__incrementalCache = new params.IncrementalCache({
149
152
  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":["PageSignatureError","fromNodeOutgoingHttpHeaders","normalizeNextQueryParam","NextFetchEvent","getWaitUntilPromiseFromEvent","NextRequest","NextResponse","parseRelativeURL","getRelativeURL","NextURL","stripInternalSearchParams","normalizeRscURL","FLIGHT_HEADERS","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","RSC_HEADER","ensureInstrumentationRegistered","createRequestStoreForAPI","workUnitAsyncStorage","createWorkStore","workAsyncStorage","NEXT_ROUTER_PREFETCH_HEADER","getTracer","MiddlewareSpan","CloseController","getEdgePreviewProps","getBuiltinRequestContext","getImplicitTags","NextRequestHint","constructor","params","input","init","sourcePage","page","request","respondWith","waitUntil","headersGetter","keys","headers","Array","from","get","key","undefined","propagator","fn","tracer","withPropagatedContext","testApisIntercepted","ensureTestApisIntercepted","process","env","NEXT_PRIVATE_TEST_PROXY","interceptTestApis","wrapRequestHandler","require","adapter","isEdgeRendering","globalThis","__BUILD_MANIFEST","url","requestURL","nextConfig","searchParams","value","getAll","normalizedKey","delete","val","append","buildId","requestHeaders","isNextDataRequest","has","isRSCRequest","pathname","flightHeaders","Map","header","toLowerCase","set","normalizeURL","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","URL","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","outerWaitUntil","event","context","response","cookiesFromResponse","isMiddleware","bind","closeController","trace","execute","spanName","nextUrl","attributes","onUpdateCookies","cookies","previewProps","fallbackRouteParams","implicitTags","requestStore","workStore","renderOpts","cacheLifeProfiles","experimental","cacheLife","isRoutePPREnabled","dynamicIO","authInterrupts","supportsDynamicResponse","onClose","onAfterTaskError","requestEndedState","ended","isPrefetchRequest","previouslyRevalidatedTags","run","handler","setTimeout","dispatchClose","Response","TypeError","rewrite","destination","forceLocale","host","String","relativeDestination","isRelative","__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE","match","search","slice","redirect","redirectURL","finalResponse","next","middlewareOverrideHeaders","overwrittenHeaders","push","length","join","Promise","resolve","fetchMetrics"],"mappings":"AAEA,SAASA,kBAAkB,QAAQ,UAAS;AAC5C,SAASC,2BAA2B,EAAEC,uBAAuB,QAAQ,UAAS;AAC9E,SACEC,cAAc,EACdC,4BAA4B,QACvB,+BAA8B;AACrC,SAASC,WAAW,QAAQ,2BAA0B;AACtD,SAASC,YAAY,QAAQ,4BAA2B;AACxD,SACEC,gBAAgB,EAChBC,cAAc,QACT,+CAA8C;AACrD,SAASC,OAAO,QAAQ,aAAY;AACpC,SAASC,yBAAyB,QAAQ,oBAAmB;AAC7D,SAASC,eAAe,QAAQ,0CAAyC;AACzE,SACEC,cAAc,EACdC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,UAAU,QACL,6CAA4C;AACnD,SAASC,+BAA+B,QAAQ,YAAW;AAC3D,SAASC,wBAAwB,QAAQ,iCAAgC;AACzE,SAASC,oBAAoB,QAAQ,iDAAgD;AACrF,SAASC,eAAe,QAAQ,8BAA6B;AAC7D,SAASC,gBAAgB,QAAQ,4CAA2C;AAC5E,SAASC,2BAA2B,QAAQ,6CAA4C;AACxF,SAASC,SAAS,QAAQ,sBAAqB;AAE/C,SAASC,cAAc,QAAQ,yBAAwB;AACvD,SAASC,eAAe,QAAQ,iBAAgB;AAChD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,wBAAwB,QAAQ,mCAAkC;AAC3E,SAASC,eAAe,QAAQ,uBAAsB;AAEtD,OAAO,MAAMC,wBAAwBvB;IAInCwB,YAAYC,MAIX,CAAE;QACD,KAAK,CAACA,OAAOC,KAAK,EAAED,OAAOE,IAAI;QAC/B,IAAI,CAACC,UAAU,GAAGH,OAAOI,IAAI;IAC/B;IAEA,IAAIC,UAAU;QACZ,MAAM,qBAAiD,CAAjD,IAAInC,mBAAmB;YAAEkC,MAAM,IAAI,CAACD,UAAU;QAAC,IAA/C,qBAAA;mBAAA;wBAAA;0BAAA;QAAgD;IACxD;IAEAG,cAAc;QACZ,MAAM,qBAAiD,CAAjD,IAAIpC,mBAAmB;YAAEkC,MAAM,IAAI,CAACD,UAAU;QAAC,IAA/C,qBAAA;mBAAA;wBAAA;0BAAA;QAAgD;IACxD;IAEAI,YAAY;QACV,MAAM,qBAAiD,CAAjD,IAAIrC,mBAAmB;YAAEkC,MAAM,IAAI,CAACD,UAAU;QAAC,IAA/C,qBAAA;mBAAA;wBAAA;0BAAA;QAAgD;IACxD;AACF;AAEA,MAAMK,gBAAwC;IAC5CC,MAAM,CAACC,UAAYC,MAAMC,IAAI,CAACF,QAAQD,IAAI;IAC1CI,KAAK,CAACH,SAASI,MAAQJ,QAAQG,GAAG,CAACC,QAAQC;AAC7C;AASA,IAAIC,aAA8D,CAChEX,SACAY;IAEA,MAAMC,SAAS1B;IACf,OAAO0B,OAAOC,qBAAqB,CAACd,QAAQK,OAAO,EAAEO,IAAIT;AAC3D;AAEA,IAAIY,sBAAsB;AAE1B,SAASC;IACP,IAAI,CAACD,qBAAqB;QACxBA,sBAAsB;QACtB,IAAIE,QAAQC,GAAG,CAACC,uBAAuB,KAAK,QAAQ;YAClD,MAAM,EACJC,iBAAiB,EACjBC,kBAAkB,EACnB,GAAGC,QAAQ;YACZF;YACAT,aAAaU,mBAAmBV;QAClC;IACF;AACF;AAEA,OAAO,eAAeY,QACpB5B,MAAsB;QAoHQJ;IAlH9ByB;IACA,MAAMnC;IAEN,yCAAyC;IACzC,MAAM2C,kBACJ,OAAO,AAACC,WAAmBC,gBAAgB,KAAK;IAElD/B,OAAOK,OAAO,CAAC2B,GAAG,GAAGnD,gBAAgBmB,OAAOK,OAAO,CAAC2B,GAAG;IAEvD,MAAMC,aAAa,IAAItD,QAAQqB,OAAOK,OAAO,CAAC2B,GAAG,EAAE;QACjDtB,SAASV,OAAOK,OAAO,CAACK,OAAO;QAC/BwB,YAAYlC,OAAOK,OAAO,CAAC6B,UAAU;IACvC;IAEA,yIAAyI;IACzI,4CAA4C;IAC5C,MAAMzB,OAAO;WAAIwB,WAAWE,YAAY,CAAC1B,IAAI;KAAG;IAChD,KAAK,MAAMK,OAAOL,KAAM;QACtB,MAAM2B,QAAQH,WAAWE,YAAY,CAACE,MAAM,CAACvB;QAE7C,MAAMwB,gBAAgBlE,wBAAwB0C;QAC9C,IAAIwB,eAAe;YACjBL,WAAWE,YAAY,CAACI,MAAM,CAACD;YAC/B,KAAK,MAAME,OAAOJ,MAAO;gBACvBH,WAAWE,YAAY,CAACM,MAAM,CAACH,eAAeE;YAChD;YACAP,WAAWE,YAAY,CAACI,MAAM,CAACzB;QACjC;IACF;IAEA,4DAA4D;IAC5D,MAAM4B,UAAUT,WAAWS,OAAO;IAClCT,WAAWS,OAAO,GAAG;IAErB,MAAMC,iBAAiBxE,4BAA4B6B,OAAOK,OAAO,CAACK,OAAO;IACzE,MAAMkC,oBAAoBD,eAAeE,GAAG,CAAC;IAC7C,MAAMC,eAAeH,eAAe9B,GAAG,CAAC5B,gBAAgB;IAExD,IAAI2D,qBAAqBX,WAAWc,QAAQ,KAAK,UAAU;QACzDd,WAAWc,QAAQ,GAAG;IACxB;IAEA,MAAMC,gBAAgB,IAAIC;IAE1B,iDAAiD;IACjD,IAAI,CAACpB,iBAAiB;QACpB,KAAK,MAAMqB,UAAUpE,eAAgB;YACnC,MAAMgC,MAAMoC,OAAOC,WAAW;YAC9B,MAAMf,QAAQO,eAAe9B,GAAG,CAACC;YACjC,IAAIsB,UAAU,MAAM;gBAClBY,cAAcI,GAAG,CAACtC,KAAKsB;gBACvBO,eAAeJ,MAAM,CAACzB;YACxB;QACF;IACF;IAEA,MAAMuC,eAAe/B,QAAQC,GAAG,CAAC+B,kCAAkC,GAC/D,IAAIC,IAAIvD,OAAOK,OAAO,CAAC2B,GAAG,IAC1BC;IAEJ,MAAM5B,UAAU,IAAIP,gBAAgB;QAClCM,MAAMJ,OAAOI,IAAI;QACjB,mDAAmD;QACnDH,OAAOrB,0BAA0ByE,cAAcG,QAAQ;QACvDtD,MAAM;YACJuD,MAAMzD,OAAOK,OAAO,CAACoD,IAAI;YACzB/C,SAASiC;YACTe,QAAQ1D,OAAOK,OAAO,CAACqD,MAAM;YAC7BxB,YAAYlC,OAAOK,OAAO,CAAC6B,UAAU;YACrCyB,QAAQ3D,OAAOK,OAAO,CAACsD,MAAM;QAC/B;IACF;IAEA;;;;GAIC,GACD,IAAIf,mBAAmB;QACrBgB,OAAOC,cAAc,CAACxD,SAAS,YAAY;YACzCyD,YAAY;YACZ1B,OAAO;QACT;IACF;IAEA,IACE,CAAC,AAACN,WAAmBiC,kBAAkB,IACvC,AAAC/D,OAAegE,gBAAgB,EAChC;;QACElC,WAAmBiC,kBAAkB,GAAG,IAAI,AAC5C/D,OACAgE,gBAAgB,CAAC;YACjBC,QAAQ;YACRC,YAAY;YACZC,aAAa7C,QAAQC,GAAG,CAAC6C,QAAQ,KAAK;YACtCC,qBAAqB/C,QAAQC,GAAG,CAAC+C,6BAA6B;YAC9DC,KAAKjD,QAAQC,GAAG,CAAC6C,QAAQ,KAAK;YAC9BzB,gBAAgB3C,OAAOK,OAAO,CAACK,OAAO;YACtC8D,iBAAiB;YACjBC,sBAAsB;gBACpB,OAAO;oBACLC,SAAS,CAAC;oBACVC,QAAQ,CAAC;oBACTC,eAAe,CAAC;oBAChBC,gBAAgB,EAAE;oBAClBC,SAASnF;gBACX;YACF;QACF;IACF;IAEA,mEAAmE;IACnE,gDAAgD;IAChD,MAAMoF,iBACJ/E,OAAOK,OAAO,CAACE,SAAS,MAAIX,4BAAAA,+CAAAA,0BAA4BW,SAAS;IAEnE,MAAMyE,QAAQ,IAAI3G,eAAe;QAC/BgC;QACAD,MAAMJ,OAAOI,IAAI;QACjB6E,SAASF,iBAAiB;YAAExE,WAAWwE;QAAe,IAAIhE;IAC5D;IACA,IAAImE;IACJ,IAAIC;IAEJD,WAAW,MAAMlE,WAAWX,SAAS;QACnC,8DAA8D;QAC9D,MAAM+E,eACJpF,OAAOI,IAAI,KAAK,iBAAiBJ,OAAOI,IAAI,KAAK;QAEnD,IAAIgF,cAAc;YAChB,0FAA0F;YAC1F,4CAA4C;YAC5C,qFAAqF;YAErF,MAAM7E,YAAYyE,MAAMzE,SAAS,CAAC8E,IAAI,CAACL;YACvC,MAAMM,kBAAkB,IAAI5F;YAE5B,OAAOF,YAAY+F,KAAK,CACtB9F,eAAe+F,OAAO,EACtB;gBACEC,UAAU,CAAC,WAAW,EAAEpF,QAAQqD,MAAM,CAAC,CAAC,EAAErD,QAAQqF,OAAO,CAAC3C,QAAQ,EAAE;gBACpE4C,YAAY;oBACV,eAAetF,QAAQqF,OAAO,CAAC3C,QAAQ;oBACvC,eAAe1C,QAAQqD,MAAM;gBAC/B;YACF,GACA;gBACE,IAAI;wBA2BI1D,yCAAAA,4BAKIA,0CAAAA;oBA/BV,MAAM4F,kBAAkB,CAACC;wBACvBV,sBAAsBU;oBACxB;oBACA,MAAMC,eAAenG;oBACrB,MAAMS,OAAO,IAAI,YAAY;;oBAC7B,MAAM2F,sBAAsB;oBAE5B,MAAMC,eAAe,MAAMnG,gBACzBO,MACAC,QAAQqF,OAAO,EACfK;oBAGF,MAAME,eAAe9G,yBACnBkB,SACAA,QAAQqF,OAAO,EACfM,cACAJ,iBACAE;oBAGF,MAAMI,YAAY7G,gBAAgB;wBAChCe;wBACA2F;wBACAI,YAAY;4BACVC,iBAAiB,GACfpG,6BAAAA,OAAOK,OAAO,CAAC6B,UAAU,sBAAzBlC,0CAAAA,2BAA2BqG,YAAY,qBAAvCrG,wCAAyCsG,SAAS;4BACpDD,cAAc;gCACZE,mBAAmB;gCACnBC,WAAW;gCACXC,gBACE,CAAC,GAACzG,8BAAAA,OAAOK,OAAO,CAAC6B,UAAU,sBAAzBlC,2CAAAA,4BAA2BqG,YAAY,qBAAvCrG,yCAAyCyG,cAAc;4BAC7D;4BACAC,yBAAyB;4BACzBnG;4BACAoG,SAASrB,gBAAgBqB,OAAO,CAACtB,IAAI,CAACC;4BACtCsB,kBAAkB7F;wBACpB;wBACA8F,mBAAmB;4BAAEC,OAAO;wBAAM;wBAClCC,mBAAmB1G,QAAQK,OAAO,CAACmC,GAAG,CACpCtD;wBAEFmD,SAASA,WAAW;wBACpBsE,2BAA2B,EAAE;oBAC/B;oBAEA,OAAO,MAAM1H,iBAAiB2H,GAAG,CAACf,WAAW,IAC3C9G,qBAAqB6H,GAAG,CACtBhB,cACAjG,OAAOkH,OAAO,EACd7G,SACA2E;gBAGN,SAAU;oBACR,mEAAmE;oBACnE,kCAAkC;oBAClC,+CAA+C;oBAC/C,wDAAwD;oBACxDmC,WAAW;wBACT7B,gBAAgB8B,aAAa;oBAC/B,GAAG;gBACL;YACF;QAEJ;QACA,OAAOpH,OAAOkH,OAAO,CAAC7G,SAAS2E;IACjC;IAEA,yCAAyC;IACzC,IAAIE,YAAY,CAAEA,CAAAA,oBAAoBmC,QAAO,GAAI;QAC/C,MAAM,qBAAgE,CAAhE,IAAIC,UAAU,oDAAd,qBAAA;mBAAA;wBAAA;0BAAA;QAA+D;IACvE;IAEA,IAAIpC,YAAYC,qBAAqB;QACnCD,SAASxE,OAAO,CAAC0C,GAAG,CAAC,cAAc+B;IACrC;IAEA;;;;;GAKC,GACD,MAAMoC,UAAUrC,4BAAAA,SAAUxE,OAAO,CAACG,GAAG,CAAC;IACtC,IAAIqE,YAAYqC,WAAYzE,CAAAA,gBAAgB,CAACjB,eAAc,GAAI;QAC7D,MAAM2F,cAAc,IAAI7I,QAAQ4I,SAAS;YACvCE,aAAa;YACb/G,SAASV,OAAOK,OAAO,CAACK,OAAO;YAC/BwB,YAAYlC,OAAOK,OAAO,CAAC6B,UAAU;QACvC;QAEA,IAAI,CAACZ,QAAQC,GAAG,CAAC+B,kCAAkC,IAAI,CAACzB,iBAAiB;YACvE,IAAI2F,YAAYE,IAAI,KAAKrH,QAAQqF,OAAO,CAACgC,IAAI,EAAE;gBAC7CF,YAAY9E,OAAO,GAAGA,WAAW8E,YAAY9E,OAAO;gBACpDwC,SAASxE,OAAO,CAAC0C,GAAG,CAAC,wBAAwBuE,OAAOH;YACtD;QACF;QAEA;;;;KAIC,GACD,MAAM,EAAExF,KAAK4F,mBAAmB,EAAEC,UAAU,EAAE,GAAGpJ,iBAC/C+I,YAAYhE,QAAQ,IACpBvB,WAAWuB,QAAQ;QAGrB,IACE,CAAC3B,mBACDe,qBACA,kDAAkD;QAClD,oDAAoD;QACpD,yCAAyC;QACzC,CACEtB,CAAAA,QAAQC,GAAG,CAACuG,0CAA0C,IACtDF,oBAAoBG,KAAK,CAAC,gBAAe,GAE3C;YACA7C,SAASxE,OAAO,CAAC0C,GAAG,CAAC,oBAAoBwE;QAC3C;QAEA,yEAAyE;QACzE,4EAA4E;QAC5E,iBAAiB;QACjB,IAAI9E,gBAAgB+E,YAAY;YAC9B,IAAI5F,WAAWc,QAAQ,KAAKyE,YAAYzE,QAAQ,EAAE;gBAChDmC,SAASxE,OAAO,CAAC0C,GAAG,CAACrE,4BAA4ByI,YAAYzE,QAAQ;YACvE;YACA,IAAId,WAAW+F,MAAM,KAAKR,YAAYQ,MAAM,EAAE;gBAC5C9C,SAASxE,OAAO,CAAC0C,GAAG,CAClBpE,6BACA,8CAA8C;gBAC9CwI,YAAYQ,MAAM,CAACC,KAAK,CAAC;YAE7B;QACF;IACF;IAEA;;;;GAIC,GACD,MAAMC,WAAWhD,4BAAAA,SAAUxE,OAAO,CAACG,GAAG,CAAC;IACvC,IAAIqE,YAAYgD,YAAY,CAACrG,iBAAiB;QAC5C,MAAMsG,cAAc,IAAIxJ,QAAQuJ,UAAU;YACxCT,aAAa;YACb/G,SAASV,OAAOK,OAAO,CAACK,OAAO;YAC/BwB,YAAYlC,OAAOK,OAAO,CAAC6B,UAAU;QACvC;QAEA;;;KAGC,GACDgD,WAAW,IAAImC,SAASnC,SAASzB,IAAI,EAAEyB;QAEvC,IAAI,CAAC5D,QAAQC,GAAG,CAAC+B,kCAAkC,EAAE;YACnD,IAAI6E,YAAYT,IAAI,KAAKzF,WAAWyF,IAAI,EAAE;gBACxCS,YAAYzF,OAAO,GAAGA,WAAWyF,YAAYzF,OAAO;gBACpDwC,SAASxE,OAAO,CAAC0C,GAAG,CAAC,YAAY+E,YAAY3E,QAAQ;YACvD;QACF;QAEA;;;;KAIC,GACD,IAAIZ,mBAAmB;YACrBsC,SAASxE,OAAO,CAAC6B,MAAM,CAAC;YACxB2C,SAASxE,OAAO,CAAC0C,GAAG,CAClB,qBACA1E,eAAeyJ,YAAY3E,QAAQ,IAAIvB,WAAWuB,QAAQ;QAE9D;IACF;IAEA,MAAM4E,gBAAgBlD,WAAWA,WAAW1G,aAAa6J,IAAI;IAE7D,iFAAiF;IACjF,MAAMC,4BAA4BF,cAAc1H,OAAO,CAACG,GAAG,CACzD;IAEF,MAAM0H,qBAA+B,EAAE;IACvC,IAAID,2BAA2B;QAC7B,KAAK,MAAM,CAACxH,KAAKsB,MAAM,IAAIY,cAAe;YACxCoF,cAAc1H,OAAO,CAAC0C,GAAG,CAAC,CAAC,qBAAqB,EAAEtC,KAAK,EAAEsB;YACzDmG,mBAAmBC,IAAI,CAAC1H;QAC1B;QAEA,IAAIyH,mBAAmBE,MAAM,GAAG,GAAG;YACjCL,cAAc1H,OAAO,CAAC0C,GAAG,CACvB,iCACAkF,4BAA4B,MAAMC,mBAAmBG,IAAI,CAAC;QAE9D;IACF;IAEA,OAAO;QACLxD,UAAUkD;QACV7H,WAAWjC,6BAA6B0G,UAAU2D,QAAQC,OAAO;QACjEC,cAAcxI,QAAQwI,YAAY;IACpC;AACF","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":["PageSignatureError","fromNodeOutgoingHttpHeaders","normalizeNextQueryParam","NextFetchEvent","getWaitUntilPromiseFromEvent","NextRequest","NextResponse","parseRelativeURL","getRelativeURL","NextURL","stripInternalSearchParams","normalizeRscURL","FLIGHT_HEADERS","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","RSC_HEADER","ensureInstrumentationRegistered","createRequestStoreForAPI","workUnitAsyncStorage","createWorkStore","workAsyncStorage","NEXT_ROUTER_PREFETCH_HEADER","getTracer","MiddlewareSpan","CloseController","getEdgePreviewProps","getBuiltinRequestContext","getImplicitTags","NextRequestHint","constructor","params","input","init","sourcePage","page","request","respondWith","waitUntil","headersGetter","keys","headers","Array","from","get","key","undefined","propagator","fn","tracer","withPropagatedContext","testApisIntercepted","ensureTestApisIntercepted","process","env","NEXT_PRIVATE_TEST_PROXY","interceptTestApis","wrapRequestHandler","require","adapter","isEdgeRendering","globalThis","__BUILD_MANIFEST","url","requestURL","nextConfig","searchParams","value","getAll","normalizedKey","delete","val","append","buildId","requestHeaders","isNextDataRequest","has","isRSCRequest","pathname","flightHeaders","Map","header","toLowerCase","set","normalizeURL","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","URL","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","outerWaitUntil","event","context","response","cookiesFromResponse","isMiddleware","bind","closeController","trace","execute","spanName","nextUrl","attributes","onUpdateCookies","cookies","previewProps","fallbackRouteParams","implicitTags","requestStore","workStore","renderOpts","cacheLifeProfiles","experimental","cacheLife","isRoutePPREnabled","dynamicIO","authInterrupts","supportsDynamicResponse","onClose","onAfterTaskError","requestEndedState","ended","isPrefetchRequest","previouslyRevalidatedTags","run","handler","setTimeout","dispatchClose","Response","TypeError","rewrite","destination","forceLocale","host","String","relativeDestination","isRelative","__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE","match","search","slice","redirect","redirectURL","finalResponse","next","middlewareOverrideHeaders","overwrittenHeaders","push","length","join","Promise","resolve","fetchMetrics"],"mappings":"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","ignoreList":[0]}
@@ -40,6 +40,7 @@ export async function getRuntimeContext(params) {
40
40
  distDir: params.distDir
41
41
  });
42
42
  if (params.incrementalCache) {
43
+ runtime.context.globalThis.__incrementalCacheShared = true;
43
44
  runtime.context.globalThis.__incrementalCache = params.incrementalCache;
44
45
  }
45
46
  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":["getModuleContext","requestStore","edgeSandboxNextRequestContext","requestToBodyStream","NEXT_RSC_UNION_QUERY","getBuiltinRequestContext","ErrorSource","Symbol","FORBIDDEN_HEADERS","withTaggedErrors","fn","process","env","NODE_ENV","getServerError","require","params","then","result","waitUntil","catch","error","getRuntimeContext","runtime","evaluateInContext","moduleName","name","onWarning","onError","useCache","edgeFunctionEntry","distDir","incrementalCache","context","globalThis","__incrementalCache","serverComponentsHmrCache","__serverComponentsHmrCache","paramPath","paths","run","runWithTaggedErrors","edgeFunction","_ENTRIES","default","cloned","includes","request","method","body","cloneBodyStream","undefined","KUint8Array","evaluate","urlInstance","URL","url","searchParams","delete","toString","headers","Headers","key","value","Object","entries","set","builtinRequestCtx","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":["getModuleContext","requestStore","edgeSandboxNextRequestContext","requestToBodyStream","NEXT_RSC_UNION_QUERY","getBuiltinRequestContext","ErrorSource","Symbol","FORBIDDEN_HEADERS","withTaggedErrors","fn","process","env","NODE_ENV","getServerError","require","params","then","result","waitUntil","catch","error","getRuntimeContext","runtime","evaluateInContext","moduleName","name","onWarning","onError","useCache","edgeFunctionEntry","distDir","incrementalCache","context","globalThis","__incrementalCacheShared","__incrementalCache","serverComponentsHmrCache","__serverComponentsHmrCache","paramPath","paths","run","runWithTaggedErrors","edgeFunction","_ENTRIES","default","cloned","includes","request","method","body","cloneBodyStream","undefined","KUint8Array","evaluate","urlInstance","URL","url","searchParams","delete","toString","headers","Headers","key","value","Object","entries","set","builtinRequestCtx","headerName","response","Error","finalize"],"mappings":"AAGA,SACEA,gBAAgB,EAChBC,YAAY,EACZC,6BAA6B,QACxB,YAAW;AAClB,SAASC,mBAAmB,QAAQ,qBAAoB;AACxD,SAASC,oBAAoB,QAAQ,gDAA+C;AAEpF,SACEC,wBAAwB,QAEnB,sCAAqC;AAE5C,OAAO,MAAMC,cAAcC,OAAO,gBAAe;AAEjD,MAAMC,oBAAoB;IACxB;IACA;IACA;CACD;AAiBD;;;CAGC,GACD,SAASC,iBAAiBC,EAAY;IACpC,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,MAAM,EAAEC,cAAc,EAAE,GACtBC,QAAQ;QAEV,OAAO,CAACC,SACNN,GAAGM,QACAC,IAAI,CAAC,CAACC;oBAEMA;uBAFM;oBACjB,GAAGA,MAAM;oBACTC,SAAS,EAAED,2BAAAA,oBAAAA,OAAQC,SAAS,qBAAjBD,kBAAmBE,KAAK,CAAC,CAACC;wBACnC,mGAAmG;wBACnG,MAAMP,eAAeO,OAAO;oBAC9B;gBACF;eACCD,KAAK,CAAC,CAACC;gBACN,+CAA+C;gBAC/C,MAAMP,eAAeO,OAAO;YAC9B;IACN;IAEA,OAAOX;AACT;AAEA,OAAO,eAAeY,kBACpBN,MAAuC;IAEvC,MAAM,EAAEO,OAAO,EAAEC,iBAAiB,EAAE,GAAG,MAAMxB,iBAAiB;QAC5DyB,YAAYT,OAAOU,IAAI;QACvBC,WAAWX,OAAOW,SAAS,IAAK,CAAA,KAAO,CAAA;QACvCC,SAASZ,OAAOY,OAAO,IAAK,CAAA,KAAO,CAAA;QACnCC,UAAUb,OAAOa,QAAQ,KAAK;QAC9BC,mBAAmBd,OAAOc,iBAAiB;QAC3CC,SAASf,OAAOe,OAAO;IACzB;IAEA,IAAIf,OAAOgB,gBAAgB,EAAE;QAC3BT,QAAQU,OAAO,CAACC,UAAU,CAACC,wBAAwB,GAAG;QACtDZ,QAAQU,OAAO,CAACC,UAAU,CAACE,kBAAkB,GAAGpB,OAAOgB,gBAAgB;IACzE;IAEA,IAAIhB,OAAOqB,wBAAwB,EAAE;QACnCd,QAAQU,OAAO,CAACC,UAAU,CAACI,0BAA0B,GACnDtB,OAAOqB,wBAAwB;IACnC;IAEA,KAAK,MAAME,aAAavB,OAAOwB,KAAK,CAAE;QACpChB,kBAAkBe;IACpB;IACA,OAAOhB;AACT;AAEA,OAAO,MAAMkB,MAAMhC,iBAAiB,eAAeiC,oBAAoB1B,MAAM;QAUvEA;IATJ,MAAMO,UAAU,MAAMD,kBAAkBN;IAExC,MAAM2B,eAE4B,AAChC,CAAA,MAAMpB,QAAQU,OAAO,CAACW,QAAQ,CAAC,CAAC,WAAW,EAAE5B,OAAOU,IAAI,EAAE,CAAC,AAAD,EAC1DmB,OAAO;IAET,MAAMC,SAAS,CAAC;QAAC;QAAQ;KAAM,CAACC,QAAQ,CAAC/B,OAAOgC,OAAO,CAACC,MAAM,KAC1DjC,uBAAAA,OAAOgC,OAAO,CAACE,IAAI,qBAAnBlC,qBAAqBmC,eAAe,KACpCC;IAEJ,MAAMC,cAAc9B,QAAQ+B,QAAQ,CAAC;IACrC,MAAMC,cAAc,IAAIC,IAAIxC,OAAOgC,OAAO,CAACS,GAAG;IAC9CF,YAAYG,YAAY,CAACC,MAAM,CAACvD;IAEhCY,OAAOgC,OAAO,CAACS,GAAG,GAAGF,YAAYK,QAAQ;IAEzC,MAAMC,UAAU,IAAIC;IACpB,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAAClD,OAAOgC,OAAO,CAACa,OAAO,EAAG;QACjEA,QAAQM,GAAG,CAACJ,KAAKC,CAAAA,yBAAAA,MAAOJ,QAAQ,OAAM;IACxC;IAEA,IAAI;QACF,IAAI1C,SAAuCkC;QAC3C,MAAMgB,oBAAgD;YACpD,GAAG/D,0BAA0B;YAC7B,gBAAgB;YAChB,2DAA2D;YAC3D,wGAAwG;YACxG,4GAA4G;YAC5Gc,WAAWH,OAAOgC,OAAO,CAAC7B,SAAS;QACrC;QACA,MAAMjB,8BAA8BuC,GAAG,CAAC2B,mBAAmB,IACzDnE,aAAawC,GAAG,CAAC;gBAAEoB;YAAQ,GAAG;gBAC5B3C,SAAS,MAAMyB,aAAa;oBAC1BK,SAAS;wBACP,GAAGhC,OAAOgC,OAAO;wBACjBE,MACEJ,UACA3C,oBAAoBoB,QAAQU,OAAO,EAAEoB,aAAaP;oBACtD;gBACF;gBACA,KAAK,MAAMuB,cAAc7D,kBAAmB;oBAC1CU,OAAOoD,QAAQ,CAACT,OAAO,CAACF,MAAM,CAACU;gBACjC;YACF;QAGF,IAAI,CAACnD,QAAQ,MAAM,qBAAoD,CAApD,IAAIqD,MAAM,4CAAV,qBAAA;mBAAA;wBAAA;0BAAA;QAAmD;QACtE,OAAOrD;IACT,SAAU;YACFF;QAAN,QAAMA,wBAAAA,OAAOgC,OAAO,CAACE,IAAI,qBAAnBlC,sBAAqBwD,QAAQ;IACrC;AACF,GAAE","ignoreList":[0]}
@@ -1,6 +1,6 @@
1
1
  export function isStableBuild() {
2
2
  var _process_env___NEXT_VERSION;
3
- 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;
3
+ 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;
4
4
  }
5
5
  export class CanaryOnlyError extends Error {
6
6
  constructor(arg){
@@ -1422,7 +1422,7 @@ class Server {
1422
1422
  protocol = parsedFullUrl.protocol;
1423
1423
  } catch {}
1424
1424
  // use existing incrementalCache instance if available
1425
- const incrementalCache = globalThis.__incrementalCache || await this.getIncrementalCache({
1425
+ const incrementalCache = process.env.NEXT_RUNTIME === 'edge' && globalThis.__incrementalCache ? globalThis.__incrementalCache : await this.getIncrementalCache({
1426
1426
  requestHeaders: Object.assign({}, req.headers),
1427
1427
  requestProtocol: protocol.substring(0, protocol.length - 1)
1428
1428
  });