next 15.3.0-canary.32 → 15.3.0-canary.33

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 (48) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +3 -4
  3. package/dist/build/index.js.map +1 -1
  4. package/dist/build/swc/index.js +1 -1
  5. package/dist/build/webpack-config.js +2 -2
  6. package/dist/cli/next-start.js +0 -5
  7. package/dist/cli/next-start.js.map +1 -1
  8. package/dist/client/app-bootstrap.js +1 -1
  9. package/dist/client/index.js +1 -1
  10. package/dist/compiled/next-server/server.runtime.prod.js +1 -1
  11. package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
  12. package/dist/esm/build/index.js +3 -4
  13. package/dist/esm/build/index.js.map +1 -1
  14. package/dist/esm/build/swc/index.js +1 -1
  15. package/dist/esm/build/webpack-config.js +2 -2
  16. package/dist/esm/client/app-bootstrap.js +1 -1
  17. package/dist/esm/client/index.js +1 -1
  18. package/dist/esm/server/app-render/work-unit-async-storage.external.js +4 -1
  19. package/dist/esm/server/app-render/work-unit-async-storage.external.js.map +1 -1
  20. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  21. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  22. package/dist/esm/server/lib/app-info-log.js +1 -1
  23. package/dist/esm/server/lib/start-server.js +1 -1
  24. package/dist/esm/server/next-server.js +1 -18
  25. package/dist/esm/server/next-server.js.map +1 -1
  26. package/dist/esm/server/next.js +0 -2
  27. package/dist/esm/server/next.js.map +1 -1
  28. package/dist/esm/server/use-cache/use-cache-wrapper.js +9 -5
  29. package/dist/esm/server/use-cache/use-cache-wrapper.js.map +1 -1
  30. package/dist/esm/shared/lib/canary-only.js +1 -1
  31. package/dist/server/app-render/work-unit-async-storage.external.d.ts +1 -1
  32. package/dist/server/app-render/work-unit-async-storage.external.js +4 -1
  33. package/dist/server/app-render/work-unit-async-storage.external.js.map +1 -1
  34. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  35. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  36. package/dist/server/lib/app-info-log.js +1 -1
  37. package/dist/server/lib/start-server.js +1 -1
  38. package/dist/server/next-server.js +1 -18
  39. package/dist/server/next-server.js.map +1 -1
  40. package/dist/server/next.js +0 -2
  41. package/dist/server/next.js.map +1 -1
  42. package/dist/server/use-cache/use-cache-wrapper.js +9 -5
  43. package/dist/server/use-cache/use-cache-wrapper.js.map +1 -1
  44. package/dist/shared/lib/canary-only.js +1 -1
  45. package/dist/telemetry/anonymous-meta.js +1 -1
  46. package/dist/telemetry/events/session-stopped.js +2 -2
  47. package/dist/telemetry/events/version.js +2 -2
  48. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/next.ts"],"sourcesContent":["import type { Options as DevServerOptions } from './dev/next-dev-server'\nimport type {\n NodeRequestHandler,\n Options as ServerOptions,\n} from './next-server'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { Duplex } from 'stream'\nimport type { NextUrlWithParsedQuery } from './request-meta'\n\nimport './require-hook'\nimport './node-polyfill-crypto'\n\nimport type { default as NextNodeServer } from './next-server'\nimport * as log from '../build/output/log'\nimport loadConfig from './config'\nimport path, { resolve } from 'path'\nimport { NON_STANDARD_NODE_ENV } from '../lib/constants'\nimport {\n PHASE_DEVELOPMENT_SERVER,\n SERVER_FILES_MANIFEST,\n} from '../shared/lib/constants'\nimport { PHASE_PRODUCTION_SERVER } from '../shared/lib/constants'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextServerSpan } from './lib/trace/constants'\nimport { formatUrl } from '../shared/lib/router/utils/format-url'\nimport type { ServerFields } from './lib/router-utils/setup-dev-bundler'\nimport type { ServerInitResult } from './lib/render-server'\nimport { AsyncCallbackSet } from './lib/async-callback-set'\n\nlet ServerImpl: typeof NextNodeServer\n\nconst getServerImpl = async () => {\n if (ServerImpl === undefined) {\n ServerImpl = (await Promise.resolve(require('./next-server'))).default\n }\n return ServerImpl\n}\n\nexport type NextServerOptions = Omit<\n ServerOptions | DevServerOptions,\n // This is assigned in this server abstraction.\n 'conf'\n> &\n Partial<Pick<ServerOptions | DevServerOptions, 'conf'>>\n\nexport type RequestHandler = (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: NextUrlWithParsedQuery | undefined\n) => Promise<void>\n\nexport type UpgradeHandler = (\n req: IncomingMessage,\n socket: Duplex,\n head: Buffer\n) => Promise<void>\n\nconst SYMBOL_LOAD_CONFIG = Symbol('next.load_config')\n\ninterface NextWrapperServer {\n // NOTE: the methods/properties here are the public API for custom servers.\n // Consider backwards compatibilty when changing something here!\n\n options: NextServerOptions\n hostname: string | undefined\n port: number | undefined\n\n getRequestHandler(): RequestHandler\n prepare(serverFields?: ServerFields): Promise<void>\n setAssetPrefix(assetPrefix: string): void\n close(): Promise<void>\n\n // used internally\n getUpgradeHandler(): UpgradeHandler\n\n // legacy methods that we left exposed in the past\n\n logError(...args: Parameters<NextNodeServer['logError']>): void\n\n render(\n ...args: Parameters<NextNodeServer['render']>\n ): ReturnType<NextNodeServer['render']>\n\n renderToHTML(\n ...args: Parameters<NextNodeServer['renderToHTML']>\n ): ReturnType<NextNodeServer['renderToHTML']>\n\n renderError(\n ...args: Parameters<NextNodeServer['renderError']>\n ): ReturnType<NextNodeServer['renderError']>\n\n renderErrorToHTML(\n ...args: Parameters<NextNodeServer['renderErrorToHTML']>\n ): ReturnType<NextNodeServer['renderErrorToHTML']>\n\n render404(\n ...args: Parameters<NextNodeServer['render404']>\n ): ReturnType<NextNodeServer['render404']>\n}\n\n/** The wrapper server used by `next start` */\nexport class NextServer implements NextWrapperServer {\n private serverPromise?: Promise<NextNodeServer>\n private server?: NextNodeServer\n private reqHandler?: NodeRequestHandler\n private reqHandlerPromise?: Promise<NodeRequestHandler>\n private preparedAssetPrefix?: string\n\n public options: NextServerOptions\n\n constructor(options: NextServerOptions) {\n this.options = options\n }\n\n get hostname() {\n return this.options.hostname\n }\n\n get port() {\n return this.options.port\n }\n\n getRequestHandler(): RequestHandler {\n return async (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery\n ) => {\n return getTracer().trace(NextServerSpan.getRequestHandler, async () => {\n const requestHandler = await this.getServerRequestHandler()\n return requestHandler(req, res, parsedUrl)\n })\n }\n }\n\n getUpgradeHandler(): UpgradeHandler {\n return async (req: IncomingMessage, socket: any, head: any) => {\n const server = await this.getServer()\n // @ts-expect-error we mark this as protected so it\n // causes an error here\n return server.handleUpgrade.apply(server, [req, socket, head])\n }\n }\n\n setAssetPrefix(assetPrefix: string) {\n if (this.server) {\n this.server.setAssetPrefix(assetPrefix)\n } else {\n this.preparedAssetPrefix = assetPrefix\n }\n }\n\n logError(...args: Parameters<NextWrapperServer['logError']>) {\n if (this.server) {\n this.server.logError(...args)\n }\n }\n\n async render(...args: Parameters<NextWrapperServer['render']>) {\n const server = await this.getServer()\n return server.render(...args)\n }\n\n async renderToHTML(...args: Parameters<NextWrapperServer['renderToHTML']>) {\n const server = await this.getServer()\n return server.renderToHTML(...args)\n }\n\n async renderError(...args: Parameters<NextWrapperServer['renderError']>) {\n const server = await this.getServer()\n return server.renderError(...args)\n }\n\n async renderErrorToHTML(\n ...args: Parameters<NextWrapperServer['renderErrorToHTML']>\n ) {\n const server = await this.getServer()\n return server.renderErrorToHTML(...args)\n }\n\n async render404(...args: Parameters<NextWrapperServer['render404']>) {\n const server = await this.getServer()\n return server.render404(...args)\n }\n\n async prepare(serverFields?: ServerFields) {\n const server = await this.getServer()\n\n if (serverFields) {\n Object.assign(server, serverFields)\n }\n // We shouldn't prepare the server in production,\n // because this code won't be executed when deployed\n if (this.options.dev) {\n await server.prepare()\n }\n }\n\n async close() {\n if (this.server) {\n await this.server.close()\n }\n }\n\n private async createServer(\n options: ServerOptions | DevServerOptions\n ): Promise<NextNodeServer> {\n let ServerImplementation: typeof NextNodeServer\n if (options.dev) {\n ServerImplementation = require('./dev/next-dev-server')\n .default as typeof import('./dev/next-dev-server').default\n } else {\n ServerImplementation = await getServerImpl()\n }\n const server = new ServerImplementation(options)\n\n return server\n }\n\n private async [SYMBOL_LOAD_CONFIG]() {\n const dir = resolve(this.options.dir || '.')\n\n const config = await loadConfig(\n this.options.dev ? PHASE_DEVELOPMENT_SERVER : PHASE_PRODUCTION_SERVER,\n dir,\n {\n customConfig: this.options.conf,\n silent: true,\n }\n )\n\n // check serialized build config when available\n if (!this.options.dev) {\n try {\n const serializedConfig = require(\n path.join(dir, config.distDir, SERVER_FILES_MANIFEST)\n ).config\n\n // @ts-expect-error internal field\n config.experimental.isExperimentalCompile =\n serializedConfig.experimental.isExperimentalCompile\n // @ts-expect-error internal field\n config.experimental.isTurbopackBuild =\n serializedConfig.experimental.isTurbopackBuild\n } catch (_) {\n // if distDir is customized we don't know until we\n // load the config so fallback to loading the config\n // from next.config.js\n }\n }\n\n return config\n }\n\n private async getServer() {\n if (!this.serverPromise) {\n this.serverPromise = this[SYMBOL_LOAD_CONFIG]().then(async (conf) => {\n if (!this.options.dev) {\n if (conf.output === 'standalone') {\n if (!process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) {\n log.warn(\n `\"next start\" does not work with \"output: standalone\" configuration. Use \"node .next/standalone/server.js\" instead.`\n )\n }\n } else if (conf.output === 'export') {\n throw new Error(\n `\"next start\" does not work with \"output: export\" configuration. Use \"npx serve@latest out\" instead.`\n )\n }\n }\n\n this.server = await this.createServer({\n ...this.options,\n conf,\n })\n if (this.preparedAssetPrefix) {\n this.server.setAssetPrefix(this.preparedAssetPrefix)\n }\n return this.server\n })\n }\n return this.serverPromise\n }\n\n private async getServerRequestHandler() {\n if (this.reqHandler) return this.reqHandler\n\n // Memoize request handler creation\n if (!this.reqHandlerPromise) {\n this.reqHandlerPromise = this.getServer().then((server) => {\n this.reqHandler = getTracer().wrap(\n NextServerSpan.getServerRequestHandler,\n server.getRequestHandler().bind(server)\n )\n delete this.reqHandlerPromise\n return this.reqHandler\n })\n }\n return this.reqHandlerPromise\n }\n}\n\n/** The wrapper server used for `import next from \"next\" (in a custom server)` */\nclass NextCustomServer implements NextWrapperServer {\n private didWebSocketSetup: boolean = false\n protected cleanupListeners?: AsyncCallbackSet\n\n protected init?: ServerInitResult\n\n public options: NextServerOptions\n\n constructor(options: NextServerOptions) {\n this.options = options\n }\n\n protected getInit() {\n if (!this.init) {\n throw new Error(\n 'prepare() must be called before performing this operation'\n )\n }\n return this.init\n }\n\n protected get requestHandler() {\n return this.getInit().requestHandler\n }\n protected get upgradeHandler() {\n return this.getInit().upgradeHandler\n }\n protected get server() {\n return this.getInit().server\n }\n\n get hostname() {\n return this.options.hostname\n }\n\n get port() {\n return this.options.port\n }\n\n async prepare() {\n const { getRequestHandlers } =\n require('./lib/start-server') as typeof import('./lib/start-server')\n\n let onDevServerCleanup: AsyncCallbackSet['add'] | undefined\n if (this.options.dev) {\n this.cleanupListeners = new AsyncCallbackSet()\n onDevServerCleanup = this.cleanupListeners.add.bind(this.cleanupListeners)\n }\n\n const initResult = await getRequestHandlers({\n dir: this.options.dir!,\n port: this.options.port || 3000,\n isDev: !!this.options.dev,\n onDevServerCleanup,\n hostname: this.options.hostname || 'localhost',\n minimalMode: this.options.minimalMode,\n quiet: this.options.quiet,\n })\n this.init = initResult\n }\n\n private setupWebSocketHandler(\n customServer?: import('http').Server,\n _req?: IncomingMessage\n ) {\n if (!this.didWebSocketSetup) {\n this.didWebSocketSetup = true\n customServer = customServer || (_req?.socket as any)?.server\n\n if (customServer) {\n customServer.on('upgrade', async (req, socket, head) => {\n this.upgradeHandler(req, socket, head)\n })\n }\n }\n }\n\n getRequestHandler(): RequestHandler {\n return async (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery\n ) => {\n this.setupWebSocketHandler(this.options.httpServer, req)\n\n if (parsedUrl) {\n req.url = formatUrl(parsedUrl)\n }\n\n return this.requestHandler(req, res)\n }\n }\n\n async render(...args: Parameters<NextWrapperServer['render']>) {\n let [req, res, pathname, query, parsedUrl] = args\n this.setupWebSocketHandler(this.options.httpServer, req as IncomingMessage)\n\n if (!pathname.startsWith('/')) {\n console.error(`Cannot render page with path \"${pathname}\"`)\n pathname = `/${pathname}`\n }\n pathname = pathname === '/index' ? '/' : pathname\n\n req.url = formatUrl({\n ...parsedUrl,\n pathname,\n query,\n })\n\n await this.requestHandler(req as IncomingMessage, res as ServerResponse)\n return\n }\n\n setAssetPrefix(assetPrefix: string): void {\n this.server.setAssetPrefix(assetPrefix)\n }\n\n getUpgradeHandler(): UpgradeHandler {\n return this.server.getUpgradeHandler()\n }\n\n logError(...args: Parameters<NextWrapperServer['logError']>) {\n this.server.logError(...args)\n }\n\n async renderToHTML(...args: Parameters<NextWrapperServer['renderToHTML']>) {\n return this.server.renderToHTML(...args)\n }\n\n async renderError(...args: Parameters<NextWrapperServer['renderError']>) {\n return this.server.renderError(...args)\n }\n\n async renderErrorToHTML(\n ...args: Parameters<NextWrapperServer['renderErrorToHTML']>\n ) {\n return this.server.renderErrorToHTML(...args)\n }\n\n async render404(...args: Parameters<NextWrapperServer['render404']>) {\n return this.server.render404(...args)\n }\n\n async close() {\n await Promise.allSettled([\n this.init?.server.close(),\n this.cleanupListeners?.runAll(),\n ])\n }\n}\n\n// This file is used for when users run `require('next')`\nfunction createServer(\n options: NextServerOptions & {\n turbo?: boolean\n turbopack?: boolean\n }\n): NextWrapperServer {\n if (options && (options.turbo || options.turbopack)) {\n process.env.TURBOPACK = '1'\n }\n // The package is used as a TypeScript plugin.\n if (\n options &&\n 'typescript' in options &&\n 'version' in (options as any).typescript\n ) {\n const pluginMod: typeof import('./next-typescript') = require('./next-typescript')\n return pluginMod.createTSPlugin(\n options as any\n ) as unknown as NextWrapperServer\n }\n\n if (options == null) {\n throw new Error(\n 'The server has not been instantiated properly. https://nextjs.org/docs/messages/invalid-server-options'\n )\n }\n\n if (\n !('isNextDevCommand' in options) &&\n process.env.NODE_ENV &&\n !['production', 'development', 'test'].includes(process.env.NODE_ENV)\n ) {\n log.warn(NON_STANDARD_NODE_ENV)\n }\n\n if (options.dev && typeof options.dev !== 'boolean') {\n console.warn(\n \"Warning: 'dev' is not a boolean which could introduce unexpected behavior. https://nextjs.org/docs/messages/invalid-server-options\"\n )\n }\n\n // When the caller is a custom server (using next()).\n if (options.customServer !== false) {\n const dir = resolve(options.dir || '.')\n\n return new NextCustomServer({\n ...options,\n dir,\n })\n }\n\n // When the caller is Next.js internals (i.e. render worker, start server, etc)\n return new NextServer(options)\n}\n\n// Support commonjs `require('next')`\nmodule.exports = createServer\n// exports = module.exports\n\n// Support `import next from 'next'`\nexport default createServer\n"],"names":["log","loadConfig","path","resolve","NON_STANDARD_NODE_ENV","PHASE_DEVELOPMENT_SERVER","SERVER_FILES_MANIFEST","PHASE_PRODUCTION_SERVER","getTracer","NextServerSpan","formatUrl","AsyncCallbackSet","ServerImpl","getServerImpl","undefined","Promise","require","default","SYMBOL_LOAD_CONFIG","Symbol","NextServer","constructor","options","hostname","port","getRequestHandler","req","res","parsedUrl","trace","requestHandler","getServerRequestHandler","getUpgradeHandler","socket","head","server","getServer","handleUpgrade","apply","setAssetPrefix","assetPrefix","preparedAssetPrefix","logError","args","render","renderToHTML","renderError","renderErrorToHTML","render404","prepare","serverFields","Object","assign","dev","close","createServer","ServerImplementation","dir","config","customConfig","conf","silent","serializedConfig","join","distDir","experimental","isExperimentalCompile","isTurbopackBuild","_","serverPromise","then","output","process","env","__NEXT_PRIVATE_STANDALONE_CONFIG","warn","Error","reqHandler","reqHandlerPromise","wrap","bind","NextCustomServer","didWebSocketSetup","getInit","init","upgradeHandler","getRequestHandlers","onDevServerCleanup","cleanupListeners","add","initResult","isDev","minimalMode","quiet","setupWebSocketHandler","customServer","_req","on","httpServer","url","pathname","query","startsWith","console","error","allSettled","runAll","turbo","turbopack","TURBOPACK","typescript","pluginMod","createTSPlugin","NODE_ENV","includes","module","exports"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/server/next.ts"],"sourcesContent":["import type { Options as DevServerOptions } from './dev/next-dev-server'\nimport type {\n NodeRequestHandler,\n Options as ServerOptions,\n} from './next-server'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { Duplex } from 'stream'\nimport type { NextUrlWithParsedQuery } from './request-meta'\n\nimport './require-hook'\nimport './node-polyfill-crypto'\n\nimport type { default as NextNodeServer } from './next-server'\nimport * as log from '../build/output/log'\nimport loadConfig from './config'\nimport path, { resolve } from 'path'\nimport { NON_STANDARD_NODE_ENV } from '../lib/constants'\nimport {\n PHASE_DEVELOPMENT_SERVER,\n SERVER_FILES_MANIFEST,\n} from '../shared/lib/constants'\nimport { PHASE_PRODUCTION_SERVER } from '../shared/lib/constants'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextServerSpan } from './lib/trace/constants'\nimport { formatUrl } from '../shared/lib/router/utils/format-url'\nimport type { ServerFields } from './lib/router-utils/setup-dev-bundler'\nimport type { ServerInitResult } from './lib/render-server'\nimport { AsyncCallbackSet } from './lib/async-callback-set'\n\nlet ServerImpl: typeof NextNodeServer\n\nconst getServerImpl = async () => {\n if (ServerImpl === undefined) {\n ServerImpl = (await Promise.resolve(require('./next-server'))).default\n }\n return ServerImpl\n}\n\nexport type NextServerOptions = Omit<\n ServerOptions | DevServerOptions,\n // This is assigned in this server abstraction.\n 'conf'\n> &\n Partial<Pick<ServerOptions | DevServerOptions, 'conf'>>\n\nexport type RequestHandler = (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: NextUrlWithParsedQuery | undefined\n) => Promise<void>\n\nexport type UpgradeHandler = (\n req: IncomingMessage,\n socket: Duplex,\n head: Buffer\n) => Promise<void>\n\nconst SYMBOL_LOAD_CONFIG = Symbol('next.load_config')\n\ninterface NextWrapperServer {\n // NOTE: the methods/properties here are the public API for custom servers.\n // Consider backwards compatibilty when changing something here!\n\n options: NextServerOptions\n hostname: string | undefined\n port: number | undefined\n\n getRequestHandler(): RequestHandler\n prepare(serverFields?: ServerFields): Promise<void>\n setAssetPrefix(assetPrefix: string): void\n close(): Promise<void>\n\n // used internally\n getUpgradeHandler(): UpgradeHandler\n\n // legacy methods that we left exposed in the past\n\n logError(...args: Parameters<NextNodeServer['logError']>): void\n\n render(\n ...args: Parameters<NextNodeServer['render']>\n ): ReturnType<NextNodeServer['render']>\n\n renderToHTML(\n ...args: Parameters<NextNodeServer['renderToHTML']>\n ): ReturnType<NextNodeServer['renderToHTML']>\n\n renderError(\n ...args: Parameters<NextNodeServer['renderError']>\n ): ReturnType<NextNodeServer['renderError']>\n\n renderErrorToHTML(\n ...args: Parameters<NextNodeServer['renderErrorToHTML']>\n ): ReturnType<NextNodeServer['renderErrorToHTML']>\n\n render404(\n ...args: Parameters<NextNodeServer['render404']>\n ): ReturnType<NextNodeServer['render404']>\n}\n\n/** The wrapper server used by `next start` */\nexport class NextServer implements NextWrapperServer {\n private serverPromise?: Promise<NextNodeServer>\n private server?: NextNodeServer\n private reqHandler?: NodeRequestHandler\n private reqHandlerPromise?: Promise<NodeRequestHandler>\n private preparedAssetPrefix?: string\n\n public options: NextServerOptions\n\n constructor(options: NextServerOptions) {\n this.options = options\n }\n\n get hostname() {\n return this.options.hostname\n }\n\n get port() {\n return this.options.port\n }\n\n getRequestHandler(): RequestHandler {\n return async (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery\n ) => {\n return getTracer().trace(NextServerSpan.getRequestHandler, async () => {\n const requestHandler = await this.getServerRequestHandler()\n return requestHandler(req, res, parsedUrl)\n })\n }\n }\n\n getUpgradeHandler(): UpgradeHandler {\n return async (req: IncomingMessage, socket: any, head: any) => {\n const server = await this.getServer()\n // @ts-expect-error we mark this as protected so it\n // causes an error here\n return server.handleUpgrade.apply(server, [req, socket, head])\n }\n }\n\n setAssetPrefix(assetPrefix: string) {\n if (this.server) {\n this.server.setAssetPrefix(assetPrefix)\n } else {\n this.preparedAssetPrefix = assetPrefix\n }\n }\n\n logError(...args: Parameters<NextWrapperServer['logError']>) {\n if (this.server) {\n this.server.logError(...args)\n }\n }\n\n async render(...args: Parameters<NextWrapperServer['render']>) {\n const server = await this.getServer()\n return server.render(...args)\n }\n\n async renderToHTML(...args: Parameters<NextWrapperServer['renderToHTML']>) {\n const server = await this.getServer()\n return server.renderToHTML(...args)\n }\n\n async renderError(...args: Parameters<NextWrapperServer['renderError']>) {\n const server = await this.getServer()\n return server.renderError(...args)\n }\n\n async renderErrorToHTML(\n ...args: Parameters<NextWrapperServer['renderErrorToHTML']>\n ) {\n const server = await this.getServer()\n return server.renderErrorToHTML(...args)\n }\n\n async render404(...args: Parameters<NextWrapperServer['render404']>) {\n const server = await this.getServer()\n return server.render404(...args)\n }\n\n async prepare(serverFields?: ServerFields) {\n const server = await this.getServer()\n\n if (serverFields) {\n Object.assign(server, serverFields)\n }\n // We shouldn't prepare the server in production,\n // because this code won't be executed when deployed\n if (this.options.dev) {\n await server.prepare()\n }\n }\n\n async close() {\n if (this.server) {\n await this.server.close()\n }\n }\n\n private async createServer(\n options: ServerOptions | DevServerOptions\n ): Promise<NextNodeServer> {\n let ServerImplementation: typeof NextNodeServer\n if (options.dev) {\n ServerImplementation = require('./dev/next-dev-server')\n .default as typeof import('./dev/next-dev-server').default\n } else {\n ServerImplementation = await getServerImpl()\n }\n const server = new ServerImplementation(options)\n\n return server\n }\n\n private async [SYMBOL_LOAD_CONFIG]() {\n const dir = resolve(this.options.dir || '.')\n\n const config = await loadConfig(\n this.options.dev ? PHASE_DEVELOPMENT_SERVER : PHASE_PRODUCTION_SERVER,\n dir,\n {\n customConfig: this.options.conf,\n silent: true,\n }\n )\n\n // check serialized build config when available\n if (!this.options.dev) {\n try {\n const serializedConfig = require(\n path.join(dir, config.distDir, SERVER_FILES_MANIFEST)\n ).config\n\n // @ts-expect-error internal field\n config.experimental.isExperimentalCompile =\n serializedConfig.experimental.isExperimentalCompile\n } catch (_) {\n // if distDir is customized we don't know until we\n // load the config so fallback to loading the config\n // from next.config.js\n }\n }\n\n return config\n }\n\n private async getServer() {\n if (!this.serverPromise) {\n this.serverPromise = this[SYMBOL_LOAD_CONFIG]().then(async (conf) => {\n if (!this.options.dev) {\n if (conf.output === 'standalone') {\n if (!process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) {\n log.warn(\n `\"next start\" does not work with \"output: standalone\" configuration. Use \"node .next/standalone/server.js\" instead.`\n )\n }\n } else if (conf.output === 'export') {\n throw new Error(\n `\"next start\" does not work with \"output: export\" configuration. Use \"npx serve@latest out\" instead.`\n )\n }\n }\n\n this.server = await this.createServer({\n ...this.options,\n conf,\n })\n if (this.preparedAssetPrefix) {\n this.server.setAssetPrefix(this.preparedAssetPrefix)\n }\n return this.server\n })\n }\n return this.serverPromise\n }\n\n private async getServerRequestHandler() {\n if (this.reqHandler) return this.reqHandler\n\n // Memoize request handler creation\n if (!this.reqHandlerPromise) {\n this.reqHandlerPromise = this.getServer().then((server) => {\n this.reqHandler = getTracer().wrap(\n NextServerSpan.getServerRequestHandler,\n server.getRequestHandler().bind(server)\n )\n delete this.reqHandlerPromise\n return this.reqHandler\n })\n }\n return this.reqHandlerPromise\n }\n}\n\n/** The wrapper server used for `import next from \"next\" (in a custom server)` */\nclass NextCustomServer implements NextWrapperServer {\n private didWebSocketSetup: boolean = false\n protected cleanupListeners?: AsyncCallbackSet\n\n protected init?: ServerInitResult\n\n public options: NextServerOptions\n\n constructor(options: NextServerOptions) {\n this.options = options\n }\n\n protected getInit() {\n if (!this.init) {\n throw new Error(\n 'prepare() must be called before performing this operation'\n )\n }\n return this.init\n }\n\n protected get requestHandler() {\n return this.getInit().requestHandler\n }\n protected get upgradeHandler() {\n return this.getInit().upgradeHandler\n }\n protected get server() {\n return this.getInit().server\n }\n\n get hostname() {\n return this.options.hostname\n }\n\n get port() {\n return this.options.port\n }\n\n async prepare() {\n const { getRequestHandlers } =\n require('./lib/start-server') as typeof import('./lib/start-server')\n\n let onDevServerCleanup: AsyncCallbackSet['add'] | undefined\n if (this.options.dev) {\n this.cleanupListeners = new AsyncCallbackSet()\n onDevServerCleanup = this.cleanupListeners.add.bind(this.cleanupListeners)\n }\n\n const initResult = await getRequestHandlers({\n dir: this.options.dir!,\n port: this.options.port || 3000,\n isDev: !!this.options.dev,\n onDevServerCleanup,\n hostname: this.options.hostname || 'localhost',\n minimalMode: this.options.minimalMode,\n quiet: this.options.quiet,\n })\n this.init = initResult\n }\n\n private setupWebSocketHandler(\n customServer?: import('http').Server,\n _req?: IncomingMessage\n ) {\n if (!this.didWebSocketSetup) {\n this.didWebSocketSetup = true\n customServer = customServer || (_req?.socket as any)?.server\n\n if (customServer) {\n customServer.on('upgrade', async (req, socket, head) => {\n this.upgradeHandler(req, socket, head)\n })\n }\n }\n }\n\n getRequestHandler(): RequestHandler {\n return async (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery\n ) => {\n this.setupWebSocketHandler(this.options.httpServer, req)\n\n if (parsedUrl) {\n req.url = formatUrl(parsedUrl)\n }\n\n return this.requestHandler(req, res)\n }\n }\n\n async render(...args: Parameters<NextWrapperServer['render']>) {\n let [req, res, pathname, query, parsedUrl] = args\n this.setupWebSocketHandler(this.options.httpServer, req as IncomingMessage)\n\n if (!pathname.startsWith('/')) {\n console.error(`Cannot render page with path \"${pathname}\"`)\n pathname = `/${pathname}`\n }\n pathname = pathname === '/index' ? '/' : pathname\n\n req.url = formatUrl({\n ...parsedUrl,\n pathname,\n query,\n })\n\n await this.requestHandler(req as IncomingMessage, res as ServerResponse)\n return\n }\n\n setAssetPrefix(assetPrefix: string): void {\n this.server.setAssetPrefix(assetPrefix)\n }\n\n getUpgradeHandler(): UpgradeHandler {\n return this.server.getUpgradeHandler()\n }\n\n logError(...args: Parameters<NextWrapperServer['logError']>) {\n this.server.logError(...args)\n }\n\n async renderToHTML(...args: Parameters<NextWrapperServer['renderToHTML']>) {\n return this.server.renderToHTML(...args)\n }\n\n async renderError(...args: Parameters<NextWrapperServer['renderError']>) {\n return this.server.renderError(...args)\n }\n\n async renderErrorToHTML(\n ...args: Parameters<NextWrapperServer['renderErrorToHTML']>\n ) {\n return this.server.renderErrorToHTML(...args)\n }\n\n async render404(...args: Parameters<NextWrapperServer['render404']>) {\n return this.server.render404(...args)\n }\n\n async close() {\n await Promise.allSettled([\n this.init?.server.close(),\n this.cleanupListeners?.runAll(),\n ])\n }\n}\n\n// This file is used for when users run `require('next')`\nfunction createServer(\n options: NextServerOptions & {\n turbo?: boolean\n turbopack?: boolean\n }\n): NextWrapperServer {\n if (options && (options.turbo || options.turbopack)) {\n process.env.TURBOPACK = '1'\n }\n // The package is used as a TypeScript plugin.\n if (\n options &&\n 'typescript' in options &&\n 'version' in (options as any).typescript\n ) {\n const pluginMod: typeof import('./next-typescript') = require('./next-typescript')\n return pluginMod.createTSPlugin(\n options as any\n ) as unknown as NextWrapperServer\n }\n\n if (options == null) {\n throw new Error(\n 'The server has not been instantiated properly. https://nextjs.org/docs/messages/invalid-server-options'\n )\n }\n\n if (\n !('isNextDevCommand' in options) &&\n process.env.NODE_ENV &&\n !['production', 'development', 'test'].includes(process.env.NODE_ENV)\n ) {\n log.warn(NON_STANDARD_NODE_ENV)\n }\n\n if (options.dev && typeof options.dev !== 'boolean') {\n console.warn(\n \"Warning: 'dev' is not a boolean which could introduce unexpected behavior. https://nextjs.org/docs/messages/invalid-server-options\"\n )\n }\n\n // When the caller is a custom server (using next()).\n if (options.customServer !== false) {\n const dir = resolve(options.dir || '.')\n\n return new NextCustomServer({\n ...options,\n dir,\n })\n }\n\n // When the caller is Next.js internals (i.e. render worker, start server, etc)\n return new NextServer(options)\n}\n\n// Support commonjs `require('next')`\nmodule.exports = createServer\n// exports = module.exports\n\n// Support `import next from 'next'`\nexport default createServer\n"],"names":["log","loadConfig","path","resolve","NON_STANDARD_NODE_ENV","PHASE_DEVELOPMENT_SERVER","SERVER_FILES_MANIFEST","PHASE_PRODUCTION_SERVER","getTracer","NextServerSpan","formatUrl","AsyncCallbackSet","ServerImpl","getServerImpl","undefined","Promise","require","default","SYMBOL_LOAD_CONFIG","Symbol","NextServer","constructor","options","hostname","port","getRequestHandler","req","res","parsedUrl","trace","requestHandler","getServerRequestHandler","getUpgradeHandler","socket","head","server","getServer","handleUpgrade","apply","setAssetPrefix","assetPrefix","preparedAssetPrefix","logError","args","render","renderToHTML","renderError","renderErrorToHTML","render404","prepare","serverFields","Object","assign","dev","close","createServer","ServerImplementation","dir","config","customConfig","conf","silent","serializedConfig","join","distDir","experimental","isExperimentalCompile","_","serverPromise","then","output","process","env","__NEXT_PRIVATE_STANDALONE_CONFIG","warn","Error","reqHandler","reqHandlerPromise","wrap","bind","NextCustomServer","didWebSocketSetup","getInit","init","upgradeHandler","getRequestHandlers","onDevServerCleanup","cleanupListeners","add","initResult","isDev","minimalMode","quiet","setupWebSocketHandler","customServer","_req","on","httpServer","url","pathname","query","startsWith","console","error","allSettled","runAll","turbo","turbopack","TURBOPACK","typescript","pluginMod","createTSPlugin","NODE_ENV","includes","module","exports"],"mappings":"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"}
@@ -62,7 +62,7 @@ function generateCacheEntryWithCacheContext(workStore, outerWorkUnitStore, clien
62
62
  explicitExpire: undefined,
63
63
  explicitStale: undefined,
64
64
  tags: null,
65
- hmrRefreshHash: outerWorkUnitStore && getHmrRefreshHash(outerWorkUnitStore),
65
+ hmrRefreshHash: outerWorkUnitStore && getHmrRefreshHash(workStore, outerWorkUnitStore),
66
66
  isHmrRefresh: (useCacheOrRequestStore == null ? void 0 : useCacheOrRequestStore.isHmrRefresh) ?? false,
67
67
  serverComponentsHmrCache: useCacheOrRequestStore == null ? void 0 : useCacheOrRequestStore.serverComponentsHmrCache,
68
68
  forceRevalidate: shouldForceRevalidate(workStore, outerWorkUnitStore),
@@ -151,7 +151,7 @@ async function collectResult(savedStream, outerWorkUnitStore, innerCacheStore, s
151
151
  }
152
152
  async function generateCacheEntryImpl(outerWorkUnitStore, innerCacheStore, clientReferenceManifest, encodedArguments, fn, timeoutError) {
153
153
  const temporaryReferences = createServerTemporaryReferenceSet();
154
- const [, , , args] = typeof encodedArguments === 'string' ? await decodeReply(encodedArguments, getServerModuleMap(), {
154
+ const [, , args] = typeof encodedArguments === 'string' ? await decodeReply(encodedArguments, getServerModuleMap(), {
155
155
  temporaryReferences
156
156
  }) : await decodeReplyFromAsyncIterable({
157
157
  async *[Symbol.asyncIterator] () {
@@ -333,7 +333,7 @@ export function cache(kind, id, boundArgsLength, fn) {
333
333
  // components have been edited. This is a very coarse approach. But it's
334
334
  // also only a temporary solution until Action IDs are unique per
335
335
  // implementation. Remove this once Action IDs hash the implementation.
336
- const hmrRefreshHash = workUnitStore && getHmrRefreshHash(workUnitStore);
336
+ const hmrRefreshHash = workUnitStore && getHmrRefreshHash(workStore, workUnitStore);
337
337
  const hangingInputAbortSignal = (workUnitStore == null ? void 0 : workUnitStore.type) === 'prerender' ? createHangingInputAbortSignal(workUnitStore) : undefined;
338
338
  // When dynamicIO is not enabled, we can not encode searchParams as
339
339
  // hanging promises. To still avoid unused search params from making a
@@ -389,9 +389,13 @@ export function cache(kind, id, boundArgsLength, fn) {
389
389
  args.unshift(boundArgs);
390
390
  }
391
391
  const temporaryReferences = createClientTemporaryReferenceSet();
392
- const cacheKeyParts = [
392
+ const cacheKeyParts = hmrRefreshHash ? [
393
+ buildId,
394
+ id,
395
+ args,
396
+ hmrRefreshHash
397
+ ] : [
393
398
  buildId,
394
- hmrRefreshHash,
395
399
  id,
396
400
  args
397
401
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/server/use-cache/use-cache-wrapper.ts"],"sourcesContent":["import type { DeepReadonly } from '../../shared/lib/deep-readonly'\n/* eslint-disable import/no-extraneous-dependencies */\nimport {\n renderToReadableStream,\n decodeReply,\n decodeReplyFromAsyncIterable,\n createTemporaryReferenceSet as createServerTemporaryReferenceSet,\n} from 'react-server-dom-webpack/server.edge'\n/* eslint-disable import/no-extraneous-dependencies */\nimport {\n createFromReadableStream,\n encodeReply,\n createTemporaryReferenceSet as createClientTemporaryReferenceSet,\n} from 'react-server-dom-webpack/client.edge'\n\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport type {\n UseCacheStore,\n WorkUnitStore,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n getHmrRefreshHash,\n getRenderResumeDataCache,\n getPrerenderResumeDataCache,\n workUnitAsyncStorage,\n getDraftModeProviderForCacheScope,\n} from '../app-render/work-unit-async-storage.external'\nimport { runInCleanSnapshot } from '../app-render/clean-async-snapshot.external'\n\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\n\nimport type { ClientReferenceManifestForRsc } from '../../build/webpack/plugins/flight-manifest-plugin'\n\nimport {\n getClientReferenceManifestForRsc,\n getServerModuleMap,\n} from '../app-render/encryption-utils'\nimport type { CacheEntry } from '../lib/cache-handlers/types'\nimport type { CacheSignal } from '../app-render/cache-signal'\nimport { decryptActionBoundArgs } from '../app-render/encryption'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { getDigestForWellKnownError } from '../app-render/create-error-handler'\nimport { DYNAMIC_EXPIRE } from './constants'\nimport { getCacheHandler } from './handlers'\nimport { UseCacheTimeoutError } from './use-cache-errors'\nimport { createHangingInputAbortSignal } from '../app-render/dynamic-rendering'\nimport {\n makeErroringExoticSearchParamsForUseCache,\n type SearchParams,\n} from '../request/search-params'\nimport type { Params } from '../request/params'\nimport React from 'react'\nimport type { ImplicitTags } from '../lib/implicit-tags'\n\ntype CacheKeyParts = [\n buildId: string,\n hmrRefreshHash: string | undefined,\n id: string,\n args: unknown[],\n]\n\nexport interface UseCachePageComponentProps {\n params: Promise<Params>\n searchParams: Promise<SearchParams>\n $$isPageComponent: true\n}\n\nconst isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'\n\nfunction generateCacheEntry(\n workStore: WorkStore,\n outerWorkUnitStore: WorkUnitStore | undefined,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n): Promise<[ReadableStream, Promise<CacheEntry>]> {\n // We need to run this inside a clean AsyncLocalStorage snapshot so that the cache\n // generation cannot read anything from the context we're currently executing which\n // might include request specific things like cookies() inside a React.cache().\n // Note: It is important that we await at least once before this because it lets us\n // pop out of any stack specific contexts as well - aka \"Sync\" Local Storage.\n return runInCleanSnapshot(\n generateCacheEntryWithRestoredWorkStore,\n workStore,\n outerWorkUnitStore,\n clientReferenceManifest,\n encodedArguments,\n fn,\n timeoutError\n )\n}\n\nfunction generateCacheEntryWithRestoredWorkStore(\n workStore: WorkStore,\n outerWorkUnitStore: WorkUnitStore | undefined,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n) {\n // Since we cleared the AsyncLocalStorage we need to restore the workStore.\n // Note: We explicitly don't restore the RequestStore nor the PrerenderStore.\n // We don't want any request specific information leaking an we don't want to create a\n // bloated fake request mock for every cache call. So any feature that currently lives\n // in RequestStore but should be available to Caches need to move to WorkStore.\n // PrerenderStore is not needed inside the cache scope because the outer most one will\n // be the one to report its result to the outer Prerender.\n return workAsyncStorage.run(\n workStore,\n generateCacheEntryWithCacheContext,\n workStore,\n outerWorkUnitStore,\n clientReferenceManifest,\n encodedArguments,\n fn,\n timeoutError\n )\n}\n\nfunction generateCacheEntryWithCacheContext(\n workStore: WorkStore,\n outerWorkUnitStore: WorkUnitStore | undefined,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n) {\n if (!workStore.cacheLifeProfiles) {\n throw new Error(\n 'cacheLifeProfiles should always be provided. This is a bug in Next.js.'\n )\n }\n const defaultCacheLife = workStore.cacheLifeProfiles['default']\n if (\n !defaultCacheLife ||\n defaultCacheLife.revalidate == null ||\n defaultCacheLife.expire == null ||\n defaultCacheLife.stale == null\n ) {\n throw new Error(\n 'A default cacheLife profile must always be provided. This is a bug in Next.js.'\n )\n }\n\n const useCacheOrRequestStore =\n outerWorkUnitStore?.type === 'request' ||\n outerWorkUnitStore?.type === 'cache'\n ? outerWorkUnitStore\n : undefined\n\n // Initialize the Store for this Cache entry.\n const cacheStore: UseCacheStore = {\n type: 'cache',\n phase: 'render',\n implicitTags: outerWorkUnitStore?.implicitTags,\n revalidate: defaultCacheLife.revalidate,\n expire: defaultCacheLife.expire,\n stale: defaultCacheLife.stale,\n explicitRevalidate: undefined,\n explicitExpire: undefined,\n explicitStale: undefined,\n tags: null,\n hmrRefreshHash: outerWorkUnitStore && getHmrRefreshHash(outerWorkUnitStore),\n isHmrRefresh: useCacheOrRequestStore?.isHmrRefresh ?? false,\n serverComponentsHmrCache: useCacheOrRequestStore?.serverComponentsHmrCache,\n forceRevalidate: shouldForceRevalidate(workStore, outerWorkUnitStore),\n draftMode:\n outerWorkUnitStore &&\n getDraftModeProviderForCacheScope(workStore, outerWorkUnitStore),\n }\n\n return workUnitAsyncStorage.run(\n cacheStore,\n generateCacheEntryImpl,\n outerWorkUnitStore,\n cacheStore,\n clientReferenceManifest,\n encodedArguments,\n fn,\n timeoutError\n )\n}\n\nfunction propagateCacheLifeAndTags(\n workUnitStore: WorkUnitStore | undefined,\n entry: CacheEntry\n): void {\n if (\n workUnitStore &&\n (workUnitStore.type === 'cache' ||\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-ppr' ||\n workUnitStore.type === 'prerender-legacy')\n ) {\n // Propagate tags and revalidate upwards\n const outerTags = workUnitStore.tags ?? (workUnitStore.tags = [])\n const entryTags = entry.tags\n for (let i = 0; i < entryTags.length; i++) {\n const tag = entryTags[i]\n if (!outerTags.includes(tag)) {\n outerTags.push(tag)\n }\n }\n if (workUnitStore.stale > entry.stale) {\n workUnitStore.stale = entry.stale\n }\n if (workUnitStore.revalidate > entry.revalidate) {\n workUnitStore.revalidate = entry.revalidate\n }\n if (workUnitStore.expire > entry.expire) {\n workUnitStore.expire = entry.expire\n }\n }\n}\n\nasync function collectResult(\n savedStream: ReadableStream,\n outerWorkUnitStore: WorkUnitStore | undefined,\n innerCacheStore: UseCacheStore,\n startTime: number,\n errors: Array<unknown>, // This is a live array that gets pushed into.,\n timer: any\n): Promise<CacheEntry> {\n // We create a buffered stream that collects all chunks until the end to\n // ensure that RSC has finished rendering and therefore we have collected\n // all tags. In the future the RSC API might allow for the equivalent of\n // the allReady Promise that exists on SSR streams.\n //\n // If something errored or rejected anywhere in the render, we close\n // the stream as errored. This lets a CacheHandler choose to save the\n // partial result up until that point for future hits for a while to avoid\n // unnecessary retries or not to retry. We use the end of the stream for\n // this to avoid another complicated side-channel. A receiver has to consider\n // that the stream might also error for other reasons anyway such as losing\n // connection.\n\n const buffer: any[] = []\n const reader = savedStream.getReader()\n for (let entry; !(entry = await reader.read()).done; ) {\n buffer.push(entry.value)\n }\n\n let idx = 0\n const bufferStream = new ReadableStream({\n pull(controller) {\n if (idx < buffer.length) {\n controller.enqueue(buffer[idx++])\n } else if (errors.length > 0) {\n // TODO: Should we use AggregateError here?\n controller.error(errors[0])\n } else {\n controller.close()\n }\n },\n })\n\n const collectedTags = innerCacheStore.tags\n // If cacheLife() was used to set an explicit revalidate time we use that.\n // Otherwise, we use the lowest of all inner fetch()/unstable_cache() or nested \"use cache\".\n // If they're lower than our default.\n const collectedRevalidate =\n innerCacheStore.explicitRevalidate !== undefined\n ? innerCacheStore.explicitRevalidate\n : innerCacheStore.revalidate\n const collectedExpire =\n innerCacheStore.explicitExpire !== undefined\n ? innerCacheStore.explicitExpire\n : innerCacheStore.expire\n const collectedStale =\n innerCacheStore.explicitStale !== undefined\n ? innerCacheStore.explicitStale\n : innerCacheStore.stale\n\n const entry: CacheEntry = {\n value: bufferStream,\n timestamp: startTime,\n revalidate: collectedRevalidate,\n expire: collectedExpire,\n stale: collectedStale,\n tags: collectedTags === null ? [] : collectedTags,\n }\n // Propagate tags/revalidate to the parent context.\n propagateCacheLifeAndTags(outerWorkUnitStore, entry)\n\n const cacheSignal =\n outerWorkUnitStore && outerWorkUnitStore.type === 'prerender'\n ? outerWorkUnitStore.cacheSignal\n : null\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n\n if (timer !== undefined) {\n clearTimeout(timer)\n }\n\n return entry\n}\n\nasync function generateCacheEntryImpl(\n outerWorkUnitStore: WorkUnitStore | undefined,\n innerCacheStore: UseCacheStore,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n): Promise<[ReadableStream, Promise<CacheEntry>]> {\n const temporaryReferences = createServerTemporaryReferenceSet()\n\n const [, , , args] =\n typeof encodedArguments === 'string'\n ? await decodeReply<CacheKeyParts>(\n encodedArguments,\n getServerModuleMap(),\n { temporaryReferences }\n )\n : await decodeReplyFromAsyncIterable<CacheKeyParts>(\n {\n async *[Symbol.asyncIterator]() {\n for (const entry of encodedArguments) {\n yield entry\n }\n\n // The encoded arguments might contain hanging promises. In this\n // case we don't want to reject with \"Error: Connection closed.\",\n // so we intentionally keep the iterable alive. This is similar to\n // the halting trick that we do while rendering.\n if (outerWorkUnitStore?.type === 'prerender') {\n await new Promise<void>((resolve) => {\n if (outerWorkUnitStore.renderSignal.aborted) {\n resolve()\n } else {\n outerWorkUnitStore.renderSignal.addEventListener(\n 'abort',\n () => resolve(),\n { once: true }\n )\n }\n })\n }\n },\n },\n getServerModuleMap(),\n { temporaryReferences }\n )\n\n // Track the timestamp when we started computing the result.\n const startTime = performance.timeOrigin + performance.now()\n\n // Invoke the inner function to load a new result. We delay the invocation\n // though, until React awaits the promise so that React's request store (ALS)\n // is available when the function is invoked. This allows us, for example, to\n // capture logs so that we can later replay them.\n const resultPromise = createLazyResult(() => fn.apply(null, args))\n\n let errors: Array<unknown> = []\n\n let timer = undefined\n const controller = new AbortController()\n if (outerWorkUnitStore?.type === 'prerender') {\n // If we're prerendering, we give you 50 seconds to fill a cache entry.\n // Otherwise we assume you stalled on hanging input and de-opt. This needs\n // to be lower than just the general timeout of 60 seconds.\n timer = setTimeout(() => {\n controller.abort(timeoutError)\n }, 50000)\n }\n\n const stream = renderToReadableStream(\n resultPromise,\n clientReferenceManifest.clientModules,\n {\n environmentName: 'Cache',\n signal: controller.signal,\n temporaryReferences,\n // In the \"Cache\" environment, we only need to make sure that the error\n // digests are handled correctly. Error formatting and reporting is not\n // necessary here; the errors are encoded in the stream, and will be\n // reported in the \"Server\" environment.\n onError: (error) => {\n const digest = getDigestForWellKnownError(error)\n\n if (digest) {\n return digest\n }\n\n if (process.env.NODE_ENV !== 'development') {\n // TODO: For now we're also reporting the error here, because in\n // production, the \"Server\" environment will only get the obfuscated\n // error (created by the Flight Client in the cache wrapper).\n console.error(error)\n }\n\n if (error === timeoutError) {\n // The timeout error already aborted the whole stream. We don't need\n // to also push this error into the `errors` array.\n return timeoutError.digest\n }\n\n errors.push(error)\n },\n }\n )\n\n const [returnStream, savedStream] = stream.tee()\n\n const promiseOfCacheEntry = collectResult(\n savedStream,\n outerWorkUnitStore,\n innerCacheStore,\n startTime,\n errors,\n timer\n )\n\n // Return the stream as we're creating it. This means that if it ends up\n // erroring we cannot return a stale-while-error version but it allows\n // streaming back the result earlier.\n return [returnStream, promiseOfCacheEntry]\n}\n\nfunction cloneCacheEntry(entry: CacheEntry): [CacheEntry, CacheEntry] {\n const [streamA, streamB] = entry.value.tee()\n entry.value = streamA\n const clonedEntry: CacheEntry = {\n value: streamB,\n timestamp: entry.timestamp,\n revalidate: entry.revalidate,\n expire: entry.expire,\n stale: entry.stale,\n tags: entry.tags,\n }\n return [entry, clonedEntry]\n}\n\nasync function clonePendingCacheEntry(\n pendingCacheEntry: Promise<CacheEntry>\n): Promise<[CacheEntry, CacheEntry]> {\n const entry = await pendingCacheEntry\n return cloneCacheEntry(entry)\n}\n\nasync function getNthCacheEntry(\n split: Promise<[CacheEntry, CacheEntry]>,\n i: number\n): Promise<CacheEntry> {\n return (await split)[i]\n}\n\nasync function encodeFormData(formData: FormData): Promise<string> {\n let result = ''\n for (let [key, value] of formData) {\n // We don't need this key to be serializable but from a security perspective it should not be\n // possible to generate a string that looks the same from a different structure. To ensure this\n // we need a delimeter between fields but just using a delimeter is not enough since a string\n // might contain that delimeter. We use the length of each field as the delimeter to avoid\n // escaping the values.\n result += key.length.toString(16) + ':' + key\n let stringValue\n if (typeof value === 'string') {\n stringValue = value\n } else {\n // The FormData might contain binary data that is not valid UTF-8 so this cache\n // key may generate a UCS-2 string. Passing this to another service needs to be\n // aware that the key might not be compatible.\n const arrayBuffer = await value.arrayBuffer()\n if (arrayBuffer.byteLength % 2 === 0) {\n stringValue = String.fromCodePoint(...new Uint16Array(arrayBuffer))\n } else {\n stringValue =\n String.fromCodePoint(\n ...new Uint16Array(arrayBuffer, 0, (arrayBuffer.byteLength - 1) / 2)\n ) +\n String.fromCodePoint(\n new Uint8Array(arrayBuffer, arrayBuffer.byteLength - 1, 1)[0]\n )\n }\n }\n result += stringValue.length.toString(16) + ':' + stringValue\n }\n return result\n}\n\nfunction createTrackedReadableStream(\n stream: ReadableStream,\n cacheSignal: CacheSignal\n) {\n const reader = stream.getReader()\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read()\n if (done) {\n controller.close()\n cacheSignal.endRead()\n } else {\n controller.enqueue(value)\n }\n },\n })\n}\n\nexport function cache(\n kind: string,\n id: string,\n boundArgsLength: number,\n fn: (...args: unknown[]) => Promise<unknown>\n) {\n const cacheHandler = getCacheHandler(kind)\n if (cacheHandler === undefined) {\n throw new Error('Unknown cache handler: ' + kind)\n }\n\n // Capture the timeout error here to ensure a useful stack.\n const timeoutError = new UseCacheTimeoutError()\n Error.captureStackTrace(timeoutError, cache)\n\n const name = fn.name\n const cachedFn = {\n [name]: async function (...args: any[]) {\n const workStore = workAsyncStorage.getStore()\n if (workStore === undefined) {\n throw new Error(\n '\"use cache\" cannot be used outside of App Router. Expected a WorkStore.'\n )\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // Get the clientReferenceManifest while we're still in the outer Context.\n // In case getClientReferenceManifestSingleton is implemented using AsyncLocalStorage.\n const clientReferenceManifest = getClientReferenceManifestForRsc()\n\n // Because the Action ID is not yet unique per implementation of that Action we can't\n // safely reuse the results across builds yet. In the meantime we add the buildId to the\n // arguments as a seed to ensure they're not reused. Remove this once Action IDs hash\n // the implementation.\n const buildId = workStore.buildId\n\n // In dev mode, when the HMR refresh hash is set, we include it in the\n // cache key. This ensures that cache entries are not reused when server\n // components have been edited. This is a very coarse approach. But it's\n // also only a temporary solution until Action IDs are unique per\n // implementation. Remove this once Action IDs hash the implementation.\n const hmrRefreshHash = workUnitStore && getHmrRefreshHash(workUnitStore)\n\n const hangingInputAbortSignal =\n workUnitStore?.type === 'prerender'\n ? createHangingInputAbortSignal(workUnitStore)\n : undefined\n\n // When dynamicIO is not enabled, we can not encode searchParams as\n // hanging promises. To still avoid unused search params from making a\n // page dynamic, we overwrite them here with a promise that resolves to an\n // empty object, while also overwriting the to-be-invoked function for\n // generating a cache entry with a function that creates an erroring\n // searchParams prop before invoking the original function. This ensures\n // that used searchParams inside of cached functions would still yield an\n // error.\n if (!workStore.dynamicIOEnabled && isPageComponent(args)) {\n const [{ params, searchParams }] = args\n // Overwrite the props to omit $$isPageComponent.\n args = [{ params, searchParams }]\n\n const originalFn = fn\n\n fn = {\n [name]: async ({\n params: serializedParams,\n }: Omit<UseCachePageComponentProps, '$$isPageComponent'>) =>\n originalFn.apply(null, [\n {\n params: serializedParams,\n searchParams:\n makeErroringExoticSearchParamsForUseCache(workStore),\n },\n ]),\n }[name] as (...args: unknown[]) => Promise<unknown>\n }\n\n if (boundArgsLength > 0) {\n if (args.length === 0) {\n throw new InvariantError(\n `Expected the \"use cache\" function ${JSON.stringify(fn.name)} to receive its encrypted bound arguments as the first argument.`\n )\n }\n\n const encryptedBoundArgs = args.shift()\n const boundArgs = await decryptActionBoundArgs(id, encryptedBoundArgs)\n\n if (!Array.isArray(boundArgs)) {\n throw new InvariantError(\n `Expected the bound arguments of \"use cache\" function ${JSON.stringify(fn.name)} to deserialize into an array, got ${typeof boundArgs} instead.`\n )\n }\n\n if (boundArgsLength !== boundArgs.length) {\n throw new InvariantError(\n `Expected the \"use cache\" function ${JSON.stringify(fn.name)} to receive ${boundArgsLength} bound arguments, got ${boundArgs.length} instead.`\n )\n }\n\n args.unshift(boundArgs)\n }\n\n const temporaryReferences = createClientTemporaryReferenceSet()\n const cacheKeyParts: CacheKeyParts = [buildId, hmrRefreshHash, id, args]\n const encodedCacheKeyParts: FormData | string = await encodeReply(\n cacheKeyParts,\n { temporaryReferences, signal: hangingInputAbortSignal }\n )\n\n const serializedCacheKey =\n typeof encodedCacheKeyParts === 'string'\n ? // Fast path for the simple case for simple inputs. We let the CacheHandler\n // Convert it to an ArrayBuffer if it wants to.\n encodedCacheKeyParts\n : await encodeFormData(encodedCacheKeyParts)\n\n let stream: undefined | ReadableStream = undefined\n\n // Get an immutable and mutable versions of the resume data cache.\n const prerenderResumeDataCache = workUnitStore\n ? getPrerenderResumeDataCache(workUnitStore)\n : null\n const renderResumeDataCache = workUnitStore\n ? getRenderResumeDataCache(workUnitStore)\n : null\n\n if (renderResumeDataCache) {\n const cacheSignal =\n workUnitStore && workUnitStore.type === 'prerender'\n ? workUnitStore.cacheSignal\n : null\n\n if (cacheSignal) {\n cacheSignal.beginRead()\n }\n const cachedEntry = renderResumeDataCache.cache.get(serializedCacheKey)\n if (cachedEntry !== undefined) {\n const existingEntry = await cachedEntry\n propagateCacheLifeAndTags(workUnitStore, existingEntry)\n if (\n workUnitStore !== undefined &&\n workUnitStore.type === 'prerender' &&\n existingEntry !== undefined &&\n (existingEntry.revalidate === 0 ||\n existingEntry.expire < DYNAMIC_EXPIRE)\n ) {\n // In a Dynamic I/O prerender, if the cache entry has revalidate: 0 or if the\n // expire time is under 5 minutes, then we consider this cache entry dynamic\n // as it's not worth generating static pages for such data. It's better to leave\n // a PPR hole that can be filled in dynamically with a potentially cached entry.\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n return makeHangingPromise(\n workUnitStore.renderSignal,\n 'dynamic \"use cache\"'\n )\n }\n const [streamA, streamB] = existingEntry.value.tee()\n existingEntry.value = streamB\n\n if (cacheSignal) {\n // When we have a cacheSignal we need to block on reading the cache\n // entry before ending the read.\n stream = createTrackedReadableStream(streamA, cacheSignal)\n } else {\n stream = streamA\n }\n } else {\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n }\n }\n\n if (stream === undefined) {\n const cacheSignal =\n workUnitStore && workUnitStore.type === 'prerender'\n ? workUnitStore.cacheSignal\n : null\n if (cacheSignal) {\n // Either the cache handler or the generation can be using I/O at this point.\n // We need to track when they start and when they complete.\n cacheSignal.beginRead()\n }\n\n const implicitTags = workUnitStore?.implicitTags\n const forceRevalidate = shouldForceRevalidate(workStore, workUnitStore)\n\n let entry = forceRevalidate\n ? undefined\n : 'getExpiration' in cacheHandler\n ? await cacheHandler.get(serializedCacheKey)\n : // Legacy cache handlers require implicit tags to be passed in,\n // instead of checking their staleness here, as we do for modern\n // cache handlers (see below).\n await cacheHandler.get(\n serializedCacheKey,\n implicitTags?.tags ?? []\n )\n\n if (entry && shouldDiscardCacheEntry(entry, workStore, implicitTags)) {\n entry = undefined\n }\n\n const currentTime = performance.timeOrigin + performance.now()\n if (\n workUnitStore !== undefined &&\n workUnitStore.type === 'prerender' &&\n entry !== undefined &&\n (entry.revalidate === 0 || entry.expire < DYNAMIC_EXPIRE)\n ) {\n // In a Dynamic I/O prerender, if the cache entry has revalidate: 0 or if the\n // expire time is under 5 minutes, then we consider this cache entry dynamic\n // as it's not worth generating static pages for such data. It's better to leave\n // a PPR hole that can be filled in dynamically with a potentially cached entry.\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n\n return makeHangingPromise(\n workUnitStore.renderSignal,\n 'dynamic \"use cache\"'\n )\n } else if (\n entry === undefined ||\n currentTime > entry.timestamp + entry.expire * 1000 ||\n (workStore.isStaticGeneration &&\n currentTime > entry.timestamp + entry.revalidate * 1000)\n ) {\n // Miss. Generate a new result.\n\n // If the cache entry is stale and we're prerendering, we don't want to use the\n // stale entry since it would unnecessarily need to shorten the lifetime of the\n // prerender. We're not time constrained here so we can re-generated it now.\n\n // We need to run this inside a clean AsyncLocalStorage snapshot so that the cache\n // generation cannot read anything from the context we're currently executing which\n // might include request specific things like cookies() inside a React.cache().\n // Note: It is important that we await at least once before this because it lets us\n // pop out of any stack specific contexts as well - aka \"Sync\" Local Storage.\n\n const [newStream, pendingCacheEntry] = await generateCacheEntry(\n workStore,\n workUnitStore,\n clientReferenceManifest,\n encodedCacheKeyParts,\n fn,\n timeoutError\n )\n\n // When draft mode is enabled, we must not save the cache entry.\n if (!workStore.isDraftMode) {\n let savedCacheEntry\n\n if (prerenderResumeDataCache) {\n // Create a clone that goes into the cache scope memory cache.\n const split = clonePendingCacheEntry(pendingCacheEntry)\n savedCacheEntry = getNthCacheEntry(split, 0)\n prerenderResumeDataCache.cache.set(\n serializedCacheKey,\n getNthCacheEntry(split, 1)\n )\n } else {\n savedCacheEntry = pendingCacheEntry\n }\n\n const promise = cacheHandler.set(\n serializedCacheKey,\n savedCacheEntry\n )\n\n workStore.pendingRevalidateWrites ??= []\n workStore.pendingRevalidateWrites.push(promise)\n }\n\n stream = newStream\n } else {\n propagateCacheLifeAndTags(workUnitStore, entry)\n\n // We want to return this stream, even if it's stale.\n stream = entry.value\n\n // If we have a cache scope, we need to clone the entry and set it on\n // the inner cache scope.\n if (prerenderResumeDataCache) {\n const [entryLeft, entryRight] = cloneCacheEntry(entry)\n if (cacheSignal) {\n stream = createTrackedReadableStream(entryLeft.value, cacheSignal)\n } else {\n stream = entryLeft.value\n }\n\n prerenderResumeDataCache.cache.set(\n serializedCacheKey,\n Promise.resolve(entryRight)\n )\n } else {\n // If we're not regenerating we need to signal that we've finished\n // putting the entry into the cache scope at this point. Otherwise we do\n // that inside generateCacheEntry.\n cacheSignal?.endRead()\n }\n\n if (currentTime > entry.timestamp + entry.revalidate * 1000) {\n // If this is stale, and we're not in a prerender (i.e. this is dynamic render),\n // then we should warm up the cache with a fresh revalidated entry.\n const [ignoredStream, pendingCacheEntry] = await generateCacheEntry(\n workStore,\n undefined, // This is not running within the context of this unit.\n clientReferenceManifest,\n encodedCacheKeyParts,\n fn,\n timeoutError\n )\n\n let savedCacheEntry: Promise<CacheEntry>\n if (prerenderResumeDataCache) {\n const split = clonePendingCacheEntry(pendingCacheEntry)\n savedCacheEntry = getNthCacheEntry(split, 0)\n prerenderResumeDataCache.cache.set(\n serializedCacheKey,\n getNthCacheEntry(split, 1)\n )\n } else {\n savedCacheEntry = pendingCacheEntry\n }\n\n const promise = cacheHandler.set(\n serializedCacheKey,\n savedCacheEntry\n )\n\n if (!workStore.pendingRevalidateWrites) {\n workStore.pendingRevalidateWrites = []\n }\n workStore.pendingRevalidateWrites.push(promise)\n\n await ignoredStream.cancel()\n }\n }\n }\n\n // Logs are replayed even if it's a hit - to ensure we see them on the client eventually.\n // If we didn't then the client wouldn't see the logs if it was seeded from a prewarm that\n // never made it to the client. However, this also means that you see logs even when the\n // cached function isn't actually re-executed. We should instead ensure prewarms always\n // make it to the client. Another issue is that this will cause double logging in the\n // server terminal. Once while generating the cache entry and once when replaying it on\n // the server, which is required to pick it up for replaying again on the client.\n const replayConsoleLogs = true\n\n const serverConsumerManifest = {\n // moduleLoading must be null because we don't want to trigger preloads of ClientReferences\n // to be added to the consumer. Instead, we'll wait for any ClientReference to be emitted\n // which themselves will handle the preloading.\n moduleLoading: null,\n moduleMap: isEdgeRuntime\n ? clientReferenceManifest.edgeRscModuleMapping\n : clientReferenceManifest.rscModuleMapping,\n serverModuleMap: getServerModuleMap(),\n }\n\n return createFromReadableStream(stream, {\n serverConsumerManifest,\n temporaryReferences,\n replayConsoleLogs,\n environmentName: 'Cache',\n })\n },\n }[name]\n\n return React.cache(cachedFn)\n}\n\n/**\n * Calls the given function only when the returned promise is awaited.\n */\nfunction createLazyResult<TResult>(\n fn: () => Promise<TResult>\n): PromiseLike<TResult> {\n let pendingResult: Promise<TResult> | undefined\n\n return {\n then(onfulfilled, onrejected) {\n if (!pendingResult) {\n pendingResult = fn()\n }\n\n return pendingResult.then(onfulfilled, onrejected)\n },\n }\n}\n\nfunction isPageComponent(\n args: any[]\n): args is [UseCachePageComponentProps, undefined] {\n if (args.length !== 2) {\n return false\n }\n\n const [props, ref] = args\n\n return (\n ref === undefined && // server components receive an undefined ref arg\n props !== null &&\n typeof props === 'object' &&\n (props as UseCachePageComponentProps).$$isPageComponent\n )\n}\n\nfunction shouldForceRevalidate(\n workStore: WorkStore,\n workUnitStore: WorkUnitStore | undefined\n): boolean {\n if (workStore.isOnDemandRevalidate || workStore.isDraftMode) {\n return true\n }\n\n if (workStore.dev && workUnitStore) {\n if (workUnitStore.type === 'request') {\n return workUnitStore.headers.get('cache-control') === 'no-cache'\n }\n\n if (workUnitStore.type === 'cache') {\n return workUnitStore.forceRevalidate\n }\n }\n\n return false\n}\n\nfunction shouldDiscardCacheEntry(\n entry: CacheEntry,\n workStore: WorkStore,\n implicitTags: ImplicitTags | undefined\n): boolean {\n // If the cache entry contains revalidated tags that the cache handler might\n // not know about yet, we need to discard it.\n if (entry.tags.some((tag) => isRecentlyRevalidatedTag(tag, workStore))) {\n return true\n }\n\n if (implicitTags) {\n // If the cache entry was created before any of the implicit tags were\n // revalidated last, we also need to discard it.\n if (entry.timestamp <= implicitTags.expiration) {\n return true\n }\n\n // Finally, if any of the implicit tags have been revalidated recently, we\n // also need to discard the cache entry.\n if (\n implicitTags.tags.some((tag) => isRecentlyRevalidatedTag(tag, workStore))\n ) {\n return true\n }\n }\n\n return false\n}\n\nfunction isRecentlyRevalidatedTag(tag: string, workStore: WorkStore): boolean {\n const { previouslyRevalidatedTags, pendingRevalidatedTags } = workStore\n\n // Was the tag previously revalidated (e.g. by a redirecting server action)?\n if (previouslyRevalidatedTags.includes(tag)) {\n return true\n }\n\n // It could also have been revalidated by the currently running server action.\n // In this case the revalidation might not have been propagated to the cache\n // handler yet, so we read it from the pending tags in the work store.\n if (pendingRevalidatedTags?.includes(tag)) {\n return true\n }\n\n return false\n}\n"],"names":["renderToReadableStream","decodeReply","decodeReplyFromAsyncIterable","createTemporaryReferenceSet","createServerTemporaryReferenceSet","createFromReadableStream","encodeReply","createClientTemporaryReferenceSet","workAsyncStorage","getHmrRefreshHash","getRenderResumeDataCache","getPrerenderResumeDataCache","workUnitAsyncStorage","getDraftModeProviderForCacheScope","runInCleanSnapshot","makeHangingPromise","getClientReferenceManifestForRsc","getServerModuleMap","decryptActionBoundArgs","InvariantError","getDigestForWellKnownError","DYNAMIC_EXPIRE","getCacheHandler","UseCacheTimeoutError","createHangingInputAbortSignal","makeErroringExoticSearchParamsForUseCache","React","isEdgeRuntime","process","env","NEXT_RUNTIME","generateCacheEntry","workStore","outerWorkUnitStore","clientReferenceManifest","encodedArguments","fn","timeoutError","generateCacheEntryWithRestoredWorkStore","run","generateCacheEntryWithCacheContext","cacheLifeProfiles","Error","defaultCacheLife","revalidate","expire","stale","useCacheOrRequestStore","type","undefined","cacheStore","phase","implicitTags","explicitRevalidate","explicitExpire","explicitStale","tags","hmrRefreshHash","isHmrRefresh","serverComponentsHmrCache","forceRevalidate","shouldForceRevalidate","draftMode","generateCacheEntryImpl","propagateCacheLifeAndTags","workUnitStore","entry","outerTags","entryTags","i","length","tag","includes","push","collectResult","savedStream","innerCacheStore","startTime","errors","timer","buffer","reader","getReader","read","done","value","idx","bufferStream","ReadableStream","pull","controller","enqueue","error","close","collectedTags","collectedRevalidate","collectedExpire","collectedStale","timestamp","cacheSignal","endRead","clearTimeout","temporaryReferences","args","Symbol","asyncIterator","Promise","resolve","renderSignal","aborted","addEventListener","once","performance","timeOrigin","now","resultPromise","createLazyResult","apply","AbortController","setTimeout","abort","stream","clientModules","environmentName","signal","onError","digest","NODE_ENV","console","returnStream","tee","promiseOfCacheEntry","cloneCacheEntry","streamA","streamB","clonedEntry","clonePendingCacheEntry","pendingCacheEntry","getNthCacheEntry","split","encodeFormData","formData","result","key","toString","stringValue","arrayBuffer","byteLength","String","fromCodePoint","Uint16Array","Uint8Array","createTrackedReadableStream","cache","kind","id","boundArgsLength","cacheHandler","captureStackTrace","name","cachedFn","getStore","buildId","hangingInputAbortSignal","dynamicIOEnabled","isPageComponent","params","searchParams","originalFn","serializedParams","JSON","stringify","encryptedBoundArgs","shift","boundArgs","Array","isArray","unshift","cacheKeyParts","encodedCacheKeyParts","serializedCacheKey","prerenderResumeDataCache","renderResumeDataCache","beginRead","cachedEntry","get","existingEntry","shouldDiscardCacheEntry","currentTime","isStaticGeneration","newStream","isDraftMode","savedCacheEntry","set","promise","pendingRevalidateWrites","entryLeft","entryRight","ignoredStream","cancel","replayConsoleLogs","serverConsumerManifest","moduleLoading","moduleMap","edgeRscModuleMapping","rscModuleMapping","serverModuleMap","pendingResult","then","onfulfilled","onrejected","props","ref","$$isPageComponent","isOnDemandRevalidate","dev","headers","some","isRecentlyRevalidatedTag","expiration","previouslyRevalidatedTags","pendingRevalidatedTags"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/server/use-cache/use-cache-wrapper.ts"],"sourcesContent":["import type { DeepReadonly } from '../../shared/lib/deep-readonly'\n/* eslint-disable import/no-extraneous-dependencies */\nimport {\n renderToReadableStream,\n decodeReply,\n decodeReplyFromAsyncIterable,\n createTemporaryReferenceSet as createServerTemporaryReferenceSet,\n} from 'react-server-dom-webpack/server.edge'\n/* eslint-disable import/no-extraneous-dependencies */\nimport {\n createFromReadableStream,\n encodeReply,\n createTemporaryReferenceSet as createClientTemporaryReferenceSet,\n} from 'react-server-dom-webpack/client.edge'\n\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport type {\n UseCacheStore,\n WorkUnitStore,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n getHmrRefreshHash,\n getRenderResumeDataCache,\n getPrerenderResumeDataCache,\n workUnitAsyncStorage,\n getDraftModeProviderForCacheScope,\n} from '../app-render/work-unit-async-storage.external'\nimport { runInCleanSnapshot } from '../app-render/clean-async-snapshot.external'\n\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\n\nimport type { ClientReferenceManifestForRsc } from '../../build/webpack/plugins/flight-manifest-plugin'\n\nimport {\n getClientReferenceManifestForRsc,\n getServerModuleMap,\n} from '../app-render/encryption-utils'\nimport type { CacheEntry } from '../lib/cache-handlers/types'\nimport type { CacheSignal } from '../app-render/cache-signal'\nimport { decryptActionBoundArgs } from '../app-render/encryption'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { getDigestForWellKnownError } from '../app-render/create-error-handler'\nimport { DYNAMIC_EXPIRE } from './constants'\nimport { getCacheHandler } from './handlers'\nimport { UseCacheTimeoutError } from './use-cache-errors'\nimport { createHangingInputAbortSignal } from '../app-render/dynamic-rendering'\nimport {\n makeErroringExoticSearchParamsForUseCache,\n type SearchParams,\n} from '../request/search-params'\nimport type { Params } from '../request/params'\nimport React from 'react'\nimport type { ImplicitTags } from '../lib/implicit-tags'\n\ntype CacheKeyParts =\n | [buildId: string, id: string, args: unknown[]]\n | [buildId: string, id: string, args: unknown[], hmrRefreshHash: string]\n\nexport interface UseCachePageComponentProps {\n params: Promise<Params>\n searchParams: Promise<SearchParams>\n $$isPageComponent: true\n}\n\nconst isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'\n\nfunction generateCacheEntry(\n workStore: WorkStore,\n outerWorkUnitStore: WorkUnitStore | undefined,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n): Promise<[ReadableStream, Promise<CacheEntry>]> {\n // We need to run this inside a clean AsyncLocalStorage snapshot so that the cache\n // generation cannot read anything from the context we're currently executing which\n // might include request specific things like cookies() inside a React.cache().\n // Note: It is important that we await at least once before this because it lets us\n // pop out of any stack specific contexts as well - aka \"Sync\" Local Storage.\n return runInCleanSnapshot(\n generateCacheEntryWithRestoredWorkStore,\n workStore,\n outerWorkUnitStore,\n clientReferenceManifest,\n encodedArguments,\n fn,\n timeoutError\n )\n}\n\nfunction generateCacheEntryWithRestoredWorkStore(\n workStore: WorkStore,\n outerWorkUnitStore: WorkUnitStore | undefined,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n) {\n // Since we cleared the AsyncLocalStorage we need to restore the workStore.\n // Note: We explicitly don't restore the RequestStore nor the PrerenderStore.\n // We don't want any request specific information leaking an we don't want to create a\n // bloated fake request mock for every cache call. So any feature that currently lives\n // in RequestStore but should be available to Caches need to move to WorkStore.\n // PrerenderStore is not needed inside the cache scope because the outer most one will\n // be the one to report its result to the outer Prerender.\n return workAsyncStorage.run(\n workStore,\n generateCacheEntryWithCacheContext,\n workStore,\n outerWorkUnitStore,\n clientReferenceManifest,\n encodedArguments,\n fn,\n timeoutError\n )\n}\n\nfunction generateCacheEntryWithCacheContext(\n workStore: WorkStore,\n outerWorkUnitStore: WorkUnitStore | undefined,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n) {\n if (!workStore.cacheLifeProfiles) {\n throw new Error(\n 'cacheLifeProfiles should always be provided. This is a bug in Next.js.'\n )\n }\n const defaultCacheLife = workStore.cacheLifeProfiles['default']\n if (\n !defaultCacheLife ||\n defaultCacheLife.revalidate == null ||\n defaultCacheLife.expire == null ||\n defaultCacheLife.stale == null\n ) {\n throw new Error(\n 'A default cacheLife profile must always be provided. This is a bug in Next.js.'\n )\n }\n\n const useCacheOrRequestStore =\n outerWorkUnitStore?.type === 'request' ||\n outerWorkUnitStore?.type === 'cache'\n ? outerWorkUnitStore\n : undefined\n\n // Initialize the Store for this Cache entry.\n const cacheStore: UseCacheStore = {\n type: 'cache',\n phase: 'render',\n implicitTags: outerWorkUnitStore?.implicitTags,\n revalidate: defaultCacheLife.revalidate,\n expire: defaultCacheLife.expire,\n stale: defaultCacheLife.stale,\n explicitRevalidate: undefined,\n explicitExpire: undefined,\n explicitStale: undefined,\n tags: null,\n hmrRefreshHash:\n outerWorkUnitStore && getHmrRefreshHash(workStore, outerWorkUnitStore),\n isHmrRefresh: useCacheOrRequestStore?.isHmrRefresh ?? false,\n serverComponentsHmrCache: useCacheOrRequestStore?.serverComponentsHmrCache,\n forceRevalidate: shouldForceRevalidate(workStore, outerWorkUnitStore),\n draftMode:\n outerWorkUnitStore &&\n getDraftModeProviderForCacheScope(workStore, outerWorkUnitStore),\n }\n\n return workUnitAsyncStorage.run(\n cacheStore,\n generateCacheEntryImpl,\n outerWorkUnitStore,\n cacheStore,\n clientReferenceManifest,\n encodedArguments,\n fn,\n timeoutError\n )\n}\n\nfunction propagateCacheLifeAndTags(\n workUnitStore: WorkUnitStore | undefined,\n entry: CacheEntry\n): void {\n if (\n workUnitStore &&\n (workUnitStore.type === 'cache' ||\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-ppr' ||\n workUnitStore.type === 'prerender-legacy')\n ) {\n // Propagate tags and revalidate upwards\n const outerTags = workUnitStore.tags ?? (workUnitStore.tags = [])\n const entryTags = entry.tags\n for (let i = 0; i < entryTags.length; i++) {\n const tag = entryTags[i]\n if (!outerTags.includes(tag)) {\n outerTags.push(tag)\n }\n }\n if (workUnitStore.stale > entry.stale) {\n workUnitStore.stale = entry.stale\n }\n if (workUnitStore.revalidate > entry.revalidate) {\n workUnitStore.revalidate = entry.revalidate\n }\n if (workUnitStore.expire > entry.expire) {\n workUnitStore.expire = entry.expire\n }\n }\n}\n\nasync function collectResult(\n savedStream: ReadableStream,\n outerWorkUnitStore: WorkUnitStore | undefined,\n innerCacheStore: UseCacheStore,\n startTime: number,\n errors: Array<unknown>, // This is a live array that gets pushed into.,\n timer: any\n): Promise<CacheEntry> {\n // We create a buffered stream that collects all chunks until the end to\n // ensure that RSC has finished rendering and therefore we have collected\n // all tags. In the future the RSC API might allow for the equivalent of\n // the allReady Promise that exists on SSR streams.\n //\n // If something errored or rejected anywhere in the render, we close\n // the stream as errored. This lets a CacheHandler choose to save the\n // partial result up until that point for future hits for a while to avoid\n // unnecessary retries or not to retry. We use the end of the stream for\n // this to avoid another complicated side-channel. A receiver has to consider\n // that the stream might also error for other reasons anyway such as losing\n // connection.\n\n const buffer: any[] = []\n const reader = savedStream.getReader()\n for (let entry; !(entry = await reader.read()).done; ) {\n buffer.push(entry.value)\n }\n\n let idx = 0\n const bufferStream = new ReadableStream({\n pull(controller) {\n if (idx < buffer.length) {\n controller.enqueue(buffer[idx++])\n } else if (errors.length > 0) {\n // TODO: Should we use AggregateError here?\n controller.error(errors[0])\n } else {\n controller.close()\n }\n },\n })\n\n const collectedTags = innerCacheStore.tags\n // If cacheLife() was used to set an explicit revalidate time we use that.\n // Otherwise, we use the lowest of all inner fetch()/unstable_cache() or nested \"use cache\".\n // If they're lower than our default.\n const collectedRevalidate =\n innerCacheStore.explicitRevalidate !== undefined\n ? innerCacheStore.explicitRevalidate\n : innerCacheStore.revalidate\n const collectedExpire =\n innerCacheStore.explicitExpire !== undefined\n ? innerCacheStore.explicitExpire\n : innerCacheStore.expire\n const collectedStale =\n innerCacheStore.explicitStale !== undefined\n ? innerCacheStore.explicitStale\n : innerCacheStore.stale\n\n const entry: CacheEntry = {\n value: bufferStream,\n timestamp: startTime,\n revalidate: collectedRevalidate,\n expire: collectedExpire,\n stale: collectedStale,\n tags: collectedTags === null ? [] : collectedTags,\n }\n // Propagate tags/revalidate to the parent context.\n propagateCacheLifeAndTags(outerWorkUnitStore, entry)\n\n const cacheSignal =\n outerWorkUnitStore && outerWorkUnitStore.type === 'prerender'\n ? outerWorkUnitStore.cacheSignal\n : null\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n\n if (timer !== undefined) {\n clearTimeout(timer)\n }\n\n return entry\n}\n\nasync function generateCacheEntryImpl(\n outerWorkUnitStore: WorkUnitStore | undefined,\n innerCacheStore: UseCacheStore,\n clientReferenceManifest: DeepReadonly<ClientReferenceManifestForRsc>,\n encodedArguments: FormData | string,\n fn: (...args: unknown[]) => Promise<unknown>,\n timeoutError: UseCacheTimeoutError\n): Promise<[ReadableStream, Promise<CacheEntry>]> {\n const temporaryReferences = createServerTemporaryReferenceSet()\n\n const [, , args] =\n typeof encodedArguments === 'string'\n ? await decodeReply<CacheKeyParts>(\n encodedArguments,\n getServerModuleMap(),\n { temporaryReferences }\n )\n : await decodeReplyFromAsyncIterable<CacheKeyParts>(\n {\n async *[Symbol.asyncIterator]() {\n for (const entry of encodedArguments) {\n yield entry\n }\n\n // The encoded arguments might contain hanging promises. In this\n // case we don't want to reject with \"Error: Connection closed.\",\n // so we intentionally keep the iterable alive. This is similar to\n // the halting trick that we do while rendering.\n if (outerWorkUnitStore?.type === 'prerender') {\n await new Promise<void>((resolve) => {\n if (outerWorkUnitStore.renderSignal.aborted) {\n resolve()\n } else {\n outerWorkUnitStore.renderSignal.addEventListener(\n 'abort',\n () => resolve(),\n { once: true }\n )\n }\n })\n }\n },\n },\n getServerModuleMap(),\n { temporaryReferences }\n )\n\n // Track the timestamp when we started computing the result.\n const startTime = performance.timeOrigin + performance.now()\n\n // Invoke the inner function to load a new result. We delay the invocation\n // though, until React awaits the promise so that React's request store (ALS)\n // is available when the function is invoked. This allows us, for example, to\n // capture logs so that we can later replay them.\n const resultPromise = createLazyResult(() => fn.apply(null, args))\n\n let errors: Array<unknown> = []\n\n let timer = undefined\n const controller = new AbortController()\n if (outerWorkUnitStore?.type === 'prerender') {\n // If we're prerendering, we give you 50 seconds to fill a cache entry.\n // Otherwise we assume you stalled on hanging input and de-opt. This needs\n // to be lower than just the general timeout of 60 seconds.\n timer = setTimeout(() => {\n controller.abort(timeoutError)\n }, 50000)\n }\n\n const stream = renderToReadableStream(\n resultPromise,\n clientReferenceManifest.clientModules,\n {\n environmentName: 'Cache',\n signal: controller.signal,\n temporaryReferences,\n // In the \"Cache\" environment, we only need to make sure that the error\n // digests are handled correctly. Error formatting and reporting is not\n // necessary here; the errors are encoded in the stream, and will be\n // reported in the \"Server\" environment.\n onError: (error) => {\n const digest = getDigestForWellKnownError(error)\n\n if (digest) {\n return digest\n }\n\n if (process.env.NODE_ENV !== 'development') {\n // TODO: For now we're also reporting the error here, because in\n // production, the \"Server\" environment will only get the obfuscated\n // error (created by the Flight Client in the cache wrapper).\n console.error(error)\n }\n\n if (error === timeoutError) {\n // The timeout error already aborted the whole stream. We don't need\n // to also push this error into the `errors` array.\n return timeoutError.digest\n }\n\n errors.push(error)\n },\n }\n )\n\n const [returnStream, savedStream] = stream.tee()\n\n const promiseOfCacheEntry = collectResult(\n savedStream,\n outerWorkUnitStore,\n innerCacheStore,\n startTime,\n errors,\n timer\n )\n\n // Return the stream as we're creating it. This means that if it ends up\n // erroring we cannot return a stale-while-error version but it allows\n // streaming back the result earlier.\n return [returnStream, promiseOfCacheEntry]\n}\n\nfunction cloneCacheEntry(entry: CacheEntry): [CacheEntry, CacheEntry] {\n const [streamA, streamB] = entry.value.tee()\n entry.value = streamA\n const clonedEntry: CacheEntry = {\n value: streamB,\n timestamp: entry.timestamp,\n revalidate: entry.revalidate,\n expire: entry.expire,\n stale: entry.stale,\n tags: entry.tags,\n }\n return [entry, clonedEntry]\n}\n\nasync function clonePendingCacheEntry(\n pendingCacheEntry: Promise<CacheEntry>\n): Promise<[CacheEntry, CacheEntry]> {\n const entry = await pendingCacheEntry\n return cloneCacheEntry(entry)\n}\n\nasync function getNthCacheEntry(\n split: Promise<[CacheEntry, CacheEntry]>,\n i: number\n): Promise<CacheEntry> {\n return (await split)[i]\n}\n\nasync function encodeFormData(formData: FormData): Promise<string> {\n let result = ''\n for (let [key, value] of formData) {\n // We don't need this key to be serializable but from a security perspective it should not be\n // possible to generate a string that looks the same from a different structure. To ensure this\n // we need a delimeter between fields but just using a delimeter is not enough since a string\n // might contain that delimeter. We use the length of each field as the delimeter to avoid\n // escaping the values.\n result += key.length.toString(16) + ':' + key\n let stringValue\n if (typeof value === 'string') {\n stringValue = value\n } else {\n // The FormData might contain binary data that is not valid UTF-8 so this cache\n // key may generate a UCS-2 string. Passing this to another service needs to be\n // aware that the key might not be compatible.\n const arrayBuffer = await value.arrayBuffer()\n if (arrayBuffer.byteLength % 2 === 0) {\n stringValue = String.fromCodePoint(...new Uint16Array(arrayBuffer))\n } else {\n stringValue =\n String.fromCodePoint(\n ...new Uint16Array(arrayBuffer, 0, (arrayBuffer.byteLength - 1) / 2)\n ) +\n String.fromCodePoint(\n new Uint8Array(arrayBuffer, arrayBuffer.byteLength - 1, 1)[0]\n )\n }\n }\n result += stringValue.length.toString(16) + ':' + stringValue\n }\n return result\n}\n\nfunction createTrackedReadableStream(\n stream: ReadableStream,\n cacheSignal: CacheSignal\n) {\n const reader = stream.getReader()\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read()\n if (done) {\n controller.close()\n cacheSignal.endRead()\n } else {\n controller.enqueue(value)\n }\n },\n })\n}\n\nexport function cache(\n kind: string,\n id: string,\n boundArgsLength: number,\n fn: (...args: unknown[]) => Promise<unknown>\n) {\n const cacheHandler = getCacheHandler(kind)\n if (cacheHandler === undefined) {\n throw new Error('Unknown cache handler: ' + kind)\n }\n\n // Capture the timeout error here to ensure a useful stack.\n const timeoutError = new UseCacheTimeoutError()\n Error.captureStackTrace(timeoutError, cache)\n\n const name = fn.name\n const cachedFn = {\n [name]: async function (...args: any[]) {\n const workStore = workAsyncStorage.getStore()\n if (workStore === undefined) {\n throw new Error(\n '\"use cache\" cannot be used outside of App Router. Expected a WorkStore.'\n )\n }\n\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // Get the clientReferenceManifest while we're still in the outer Context.\n // In case getClientReferenceManifestSingleton is implemented using AsyncLocalStorage.\n const clientReferenceManifest = getClientReferenceManifestForRsc()\n\n // Because the Action ID is not yet unique per implementation of that Action we can't\n // safely reuse the results across builds yet. In the meantime we add the buildId to the\n // arguments as a seed to ensure they're not reused. Remove this once Action IDs hash\n // the implementation.\n const buildId = workStore.buildId\n\n // In dev mode, when the HMR refresh hash is set, we include it in the\n // cache key. This ensures that cache entries are not reused when server\n // components have been edited. This is a very coarse approach. But it's\n // also only a temporary solution until Action IDs are unique per\n // implementation. Remove this once Action IDs hash the implementation.\n const hmrRefreshHash =\n workUnitStore && getHmrRefreshHash(workStore, workUnitStore)\n\n const hangingInputAbortSignal =\n workUnitStore?.type === 'prerender'\n ? createHangingInputAbortSignal(workUnitStore)\n : undefined\n\n // When dynamicIO is not enabled, we can not encode searchParams as\n // hanging promises. To still avoid unused search params from making a\n // page dynamic, we overwrite them here with a promise that resolves to an\n // empty object, while also overwriting the to-be-invoked function for\n // generating a cache entry with a function that creates an erroring\n // searchParams prop before invoking the original function. This ensures\n // that used searchParams inside of cached functions would still yield an\n // error.\n if (!workStore.dynamicIOEnabled && isPageComponent(args)) {\n const [{ params, searchParams }] = args\n // Overwrite the props to omit $$isPageComponent.\n args = [{ params, searchParams }]\n\n const originalFn = fn\n\n fn = {\n [name]: async ({\n params: serializedParams,\n }: Omit<UseCachePageComponentProps, '$$isPageComponent'>) =>\n originalFn.apply(null, [\n {\n params: serializedParams,\n searchParams:\n makeErroringExoticSearchParamsForUseCache(workStore),\n },\n ]),\n }[name] as (...args: unknown[]) => Promise<unknown>\n }\n\n if (boundArgsLength > 0) {\n if (args.length === 0) {\n throw new InvariantError(\n `Expected the \"use cache\" function ${JSON.stringify(fn.name)} to receive its encrypted bound arguments as the first argument.`\n )\n }\n\n const encryptedBoundArgs = args.shift()\n const boundArgs = await decryptActionBoundArgs(id, encryptedBoundArgs)\n\n if (!Array.isArray(boundArgs)) {\n throw new InvariantError(\n `Expected the bound arguments of \"use cache\" function ${JSON.stringify(fn.name)} to deserialize into an array, got ${typeof boundArgs} instead.`\n )\n }\n\n if (boundArgsLength !== boundArgs.length) {\n throw new InvariantError(\n `Expected the \"use cache\" function ${JSON.stringify(fn.name)} to receive ${boundArgsLength} bound arguments, got ${boundArgs.length} instead.`\n )\n }\n\n args.unshift(boundArgs)\n }\n\n const temporaryReferences = createClientTemporaryReferenceSet()\n\n const cacheKeyParts: CacheKeyParts = hmrRefreshHash\n ? [buildId, id, args, hmrRefreshHash]\n : [buildId, id, args]\n\n const encodedCacheKeyParts: FormData | string = await encodeReply(\n cacheKeyParts,\n { temporaryReferences, signal: hangingInputAbortSignal }\n )\n\n const serializedCacheKey =\n typeof encodedCacheKeyParts === 'string'\n ? // Fast path for the simple case for simple inputs. We let the CacheHandler\n // Convert it to an ArrayBuffer if it wants to.\n encodedCacheKeyParts\n : await encodeFormData(encodedCacheKeyParts)\n\n let stream: undefined | ReadableStream = undefined\n\n // Get an immutable and mutable versions of the resume data cache.\n const prerenderResumeDataCache = workUnitStore\n ? getPrerenderResumeDataCache(workUnitStore)\n : null\n const renderResumeDataCache = workUnitStore\n ? getRenderResumeDataCache(workUnitStore)\n : null\n\n if (renderResumeDataCache) {\n const cacheSignal =\n workUnitStore && workUnitStore.type === 'prerender'\n ? workUnitStore.cacheSignal\n : null\n\n if (cacheSignal) {\n cacheSignal.beginRead()\n }\n const cachedEntry = renderResumeDataCache.cache.get(serializedCacheKey)\n if (cachedEntry !== undefined) {\n const existingEntry = await cachedEntry\n propagateCacheLifeAndTags(workUnitStore, existingEntry)\n if (\n workUnitStore !== undefined &&\n workUnitStore.type === 'prerender' &&\n existingEntry !== undefined &&\n (existingEntry.revalidate === 0 ||\n existingEntry.expire < DYNAMIC_EXPIRE)\n ) {\n // In a Dynamic I/O prerender, if the cache entry has revalidate: 0 or if the\n // expire time is under 5 minutes, then we consider this cache entry dynamic\n // as it's not worth generating static pages for such data. It's better to leave\n // a PPR hole that can be filled in dynamically with a potentially cached entry.\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n return makeHangingPromise(\n workUnitStore.renderSignal,\n 'dynamic \"use cache\"'\n )\n }\n const [streamA, streamB] = existingEntry.value.tee()\n existingEntry.value = streamB\n\n if (cacheSignal) {\n // When we have a cacheSignal we need to block on reading the cache\n // entry before ending the read.\n stream = createTrackedReadableStream(streamA, cacheSignal)\n } else {\n stream = streamA\n }\n } else {\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n }\n }\n\n if (stream === undefined) {\n const cacheSignal =\n workUnitStore && workUnitStore.type === 'prerender'\n ? workUnitStore.cacheSignal\n : null\n if (cacheSignal) {\n // Either the cache handler or the generation can be using I/O at this point.\n // We need to track when they start and when they complete.\n cacheSignal.beginRead()\n }\n\n const implicitTags = workUnitStore?.implicitTags\n const forceRevalidate = shouldForceRevalidate(workStore, workUnitStore)\n\n let entry = forceRevalidate\n ? undefined\n : 'getExpiration' in cacheHandler\n ? await cacheHandler.get(serializedCacheKey)\n : // Legacy cache handlers require implicit tags to be passed in,\n // instead of checking their staleness here, as we do for modern\n // cache handlers (see below).\n await cacheHandler.get(\n serializedCacheKey,\n implicitTags?.tags ?? []\n )\n\n if (entry && shouldDiscardCacheEntry(entry, workStore, implicitTags)) {\n entry = undefined\n }\n\n const currentTime = performance.timeOrigin + performance.now()\n if (\n workUnitStore !== undefined &&\n workUnitStore.type === 'prerender' &&\n entry !== undefined &&\n (entry.revalidate === 0 || entry.expire < DYNAMIC_EXPIRE)\n ) {\n // In a Dynamic I/O prerender, if the cache entry has revalidate: 0 or if the\n // expire time is under 5 minutes, then we consider this cache entry dynamic\n // as it's not worth generating static pages for such data. It's better to leave\n // a PPR hole that can be filled in dynamically with a potentially cached entry.\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n\n return makeHangingPromise(\n workUnitStore.renderSignal,\n 'dynamic \"use cache\"'\n )\n } else if (\n entry === undefined ||\n currentTime > entry.timestamp + entry.expire * 1000 ||\n (workStore.isStaticGeneration &&\n currentTime > entry.timestamp + entry.revalidate * 1000)\n ) {\n // Miss. Generate a new result.\n\n // If the cache entry is stale and we're prerendering, we don't want to use the\n // stale entry since it would unnecessarily need to shorten the lifetime of the\n // prerender. We're not time constrained here so we can re-generated it now.\n\n // We need to run this inside a clean AsyncLocalStorage snapshot so that the cache\n // generation cannot read anything from the context we're currently executing which\n // might include request specific things like cookies() inside a React.cache().\n // Note: It is important that we await at least once before this because it lets us\n // pop out of any stack specific contexts as well - aka \"Sync\" Local Storage.\n\n const [newStream, pendingCacheEntry] = await generateCacheEntry(\n workStore,\n workUnitStore,\n clientReferenceManifest,\n encodedCacheKeyParts,\n fn,\n timeoutError\n )\n\n // When draft mode is enabled, we must not save the cache entry.\n if (!workStore.isDraftMode) {\n let savedCacheEntry\n\n if (prerenderResumeDataCache) {\n // Create a clone that goes into the cache scope memory cache.\n const split = clonePendingCacheEntry(pendingCacheEntry)\n savedCacheEntry = getNthCacheEntry(split, 0)\n prerenderResumeDataCache.cache.set(\n serializedCacheKey,\n getNthCacheEntry(split, 1)\n )\n } else {\n savedCacheEntry = pendingCacheEntry\n }\n\n const promise = cacheHandler.set(\n serializedCacheKey,\n savedCacheEntry\n )\n\n workStore.pendingRevalidateWrites ??= []\n workStore.pendingRevalidateWrites.push(promise)\n }\n\n stream = newStream\n } else {\n propagateCacheLifeAndTags(workUnitStore, entry)\n\n // We want to return this stream, even if it's stale.\n stream = entry.value\n\n // If we have a cache scope, we need to clone the entry and set it on\n // the inner cache scope.\n if (prerenderResumeDataCache) {\n const [entryLeft, entryRight] = cloneCacheEntry(entry)\n if (cacheSignal) {\n stream = createTrackedReadableStream(entryLeft.value, cacheSignal)\n } else {\n stream = entryLeft.value\n }\n\n prerenderResumeDataCache.cache.set(\n serializedCacheKey,\n Promise.resolve(entryRight)\n )\n } else {\n // If we're not regenerating we need to signal that we've finished\n // putting the entry into the cache scope at this point. Otherwise we do\n // that inside generateCacheEntry.\n cacheSignal?.endRead()\n }\n\n if (currentTime > entry.timestamp + entry.revalidate * 1000) {\n // If this is stale, and we're not in a prerender (i.e. this is dynamic render),\n // then we should warm up the cache with a fresh revalidated entry.\n const [ignoredStream, pendingCacheEntry] = await generateCacheEntry(\n workStore,\n undefined, // This is not running within the context of this unit.\n clientReferenceManifest,\n encodedCacheKeyParts,\n fn,\n timeoutError\n )\n\n let savedCacheEntry: Promise<CacheEntry>\n if (prerenderResumeDataCache) {\n const split = clonePendingCacheEntry(pendingCacheEntry)\n savedCacheEntry = getNthCacheEntry(split, 0)\n prerenderResumeDataCache.cache.set(\n serializedCacheKey,\n getNthCacheEntry(split, 1)\n )\n } else {\n savedCacheEntry = pendingCacheEntry\n }\n\n const promise = cacheHandler.set(\n serializedCacheKey,\n savedCacheEntry\n )\n\n if (!workStore.pendingRevalidateWrites) {\n workStore.pendingRevalidateWrites = []\n }\n workStore.pendingRevalidateWrites.push(promise)\n\n await ignoredStream.cancel()\n }\n }\n }\n\n // Logs are replayed even if it's a hit - to ensure we see them on the client eventually.\n // If we didn't then the client wouldn't see the logs if it was seeded from a prewarm that\n // never made it to the client. However, this also means that you see logs even when the\n // cached function isn't actually re-executed. We should instead ensure prewarms always\n // make it to the client. Another issue is that this will cause double logging in the\n // server terminal. Once while generating the cache entry and once when replaying it on\n // the server, which is required to pick it up for replaying again on the client.\n const replayConsoleLogs = true\n\n const serverConsumerManifest = {\n // moduleLoading must be null because we don't want to trigger preloads of ClientReferences\n // to be added to the consumer. Instead, we'll wait for any ClientReference to be emitted\n // which themselves will handle the preloading.\n moduleLoading: null,\n moduleMap: isEdgeRuntime\n ? clientReferenceManifest.edgeRscModuleMapping\n : clientReferenceManifest.rscModuleMapping,\n serverModuleMap: getServerModuleMap(),\n }\n\n return createFromReadableStream(stream, {\n serverConsumerManifest,\n temporaryReferences,\n replayConsoleLogs,\n environmentName: 'Cache',\n })\n },\n }[name]\n\n return React.cache(cachedFn)\n}\n\n/**\n * Calls the given function only when the returned promise is awaited.\n */\nfunction createLazyResult<TResult>(\n fn: () => Promise<TResult>\n): PromiseLike<TResult> {\n let pendingResult: Promise<TResult> | undefined\n\n return {\n then(onfulfilled, onrejected) {\n if (!pendingResult) {\n pendingResult = fn()\n }\n\n return pendingResult.then(onfulfilled, onrejected)\n },\n }\n}\n\nfunction isPageComponent(\n args: any[]\n): args is [UseCachePageComponentProps, undefined] {\n if (args.length !== 2) {\n return false\n }\n\n const [props, ref] = args\n\n return (\n ref === undefined && // server components receive an undefined ref arg\n props !== null &&\n typeof props === 'object' &&\n (props as UseCachePageComponentProps).$$isPageComponent\n )\n}\n\nfunction shouldForceRevalidate(\n workStore: WorkStore,\n workUnitStore: WorkUnitStore | undefined\n): boolean {\n if (workStore.isOnDemandRevalidate || workStore.isDraftMode) {\n return true\n }\n\n if (workStore.dev && workUnitStore) {\n if (workUnitStore.type === 'request') {\n return workUnitStore.headers.get('cache-control') === 'no-cache'\n }\n\n if (workUnitStore.type === 'cache') {\n return workUnitStore.forceRevalidate\n }\n }\n\n return false\n}\n\nfunction shouldDiscardCacheEntry(\n entry: CacheEntry,\n workStore: WorkStore,\n implicitTags: ImplicitTags | undefined\n): boolean {\n // If the cache entry contains revalidated tags that the cache handler might\n // not know about yet, we need to discard it.\n if (entry.tags.some((tag) => isRecentlyRevalidatedTag(tag, workStore))) {\n return true\n }\n\n if (implicitTags) {\n // If the cache entry was created before any of the implicit tags were\n // revalidated last, we also need to discard it.\n if (entry.timestamp <= implicitTags.expiration) {\n return true\n }\n\n // Finally, if any of the implicit tags have been revalidated recently, we\n // also need to discard the cache entry.\n if (\n implicitTags.tags.some((tag) => isRecentlyRevalidatedTag(tag, workStore))\n ) {\n return true\n }\n }\n\n return false\n}\n\nfunction isRecentlyRevalidatedTag(tag: string, workStore: WorkStore): boolean {\n const { previouslyRevalidatedTags, pendingRevalidatedTags } = workStore\n\n // Was the tag previously revalidated (e.g. by a redirecting server action)?\n if (previouslyRevalidatedTags.includes(tag)) {\n return true\n }\n\n // It could also have been revalidated by the currently running server action.\n // In this case the revalidation might not have been propagated to the cache\n // handler yet, so we read it from the pending tags in the work store.\n if (pendingRevalidatedTags?.includes(tag)) {\n return true\n }\n\n return false\n}\n"],"names":["renderToReadableStream","decodeReply","decodeReplyFromAsyncIterable","createTemporaryReferenceSet","createServerTemporaryReferenceSet","createFromReadableStream","encodeReply","createClientTemporaryReferenceSet","workAsyncStorage","getHmrRefreshHash","getRenderResumeDataCache","getPrerenderResumeDataCache","workUnitAsyncStorage","getDraftModeProviderForCacheScope","runInCleanSnapshot","makeHangingPromise","getClientReferenceManifestForRsc","getServerModuleMap","decryptActionBoundArgs","InvariantError","getDigestForWellKnownError","DYNAMIC_EXPIRE","getCacheHandler","UseCacheTimeoutError","createHangingInputAbortSignal","makeErroringExoticSearchParamsForUseCache","React","isEdgeRuntime","process","env","NEXT_RUNTIME","generateCacheEntry","workStore","outerWorkUnitStore","clientReferenceManifest","encodedArguments","fn","timeoutError","generateCacheEntryWithRestoredWorkStore","run","generateCacheEntryWithCacheContext","cacheLifeProfiles","Error","defaultCacheLife","revalidate","expire","stale","useCacheOrRequestStore","type","undefined","cacheStore","phase","implicitTags","explicitRevalidate","explicitExpire","explicitStale","tags","hmrRefreshHash","isHmrRefresh","serverComponentsHmrCache","forceRevalidate","shouldForceRevalidate","draftMode","generateCacheEntryImpl","propagateCacheLifeAndTags","workUnitStore","entry","outerTags","entryTags","i","length","tag","includes","push","collectResult","savedStream","innerCacheStore","startTime","errors","timer","buffer","reader","getReader","read","done","value","idx","bufferStream","ReadableStream","pull","controller","enqueue","error","close","collectedTags","collectedRevalidate","collectedExpire","collectedStale","timestamp","cacheSignal","endRead","clearTimeout","temporaryReferences","args","Symbol","asyncIterator","Promise","resolve","renderSignal","aborted","addEventListener","once","performance","timeOrigin","now","resultPromise","createLazyResult","apply","AbortController","setTimeout","abort","stream","clientModules","environmentName","signal","onError","digest","NODE_ENV","console","returnStream","tee","promiseOfCacheEntry","cloneCacheEntry","streamA","streamB","clonedEntry","clonePendingCacheEntry","pendingCacheEntry","getNthCacheEntry","split","encodeFormData","formData","result","key","toString","stringValue","arrayBuffer","byteLength","String","fromCodePoint","Uint16Array","Uint8Array","createTrackedReadableStream","cache","kind","id","boundArgsLength","cacheHandler","captureStackTrace","name","cachedFn","getStore","buildId","hangingInputAbortSignal","dynamicIOEnabled","isPageComponent","params","searchParams","originalFn","serializedParams","JSON","stringify","encryptedBoundArgs","shift","boundArgs","Array","isArray","unshift","cacheKeyParts","encodedCacheKeyParts","serializedCacheKey","prerenderResumeDataCache","renderResumeDataCache","beginRead","cachedEntry","get","existingEntry","shouldDiscardCacheEntry","currentTime","isStaticGeneration","newStream","isDraftMode","savedCacheEntry","set","promise","pendingRevalidateWrites","entryLeft","entryRight","ignoredStream","cancel","replayConsoleLogs","serverConsumerManifest","moduleLoading","moduleMap","edgeRscModuleMapping","rscModuleMapping","serverModuleMap","pendingResult","then","onfulfilled","onrejected","props","ref","$$isPageComponent","isOnDemandRevalidate","dev","headers","some","isRecentlyRevalidatedTag","expiration","previouslyRevalidatedTags","pendingRevalidatedTags"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export function isStableBuild() {
2
2
  var _process_env___NEXT_VERSION;
3
- return !((_process_env___NEXT_VERSION = "15.3.0-canary.32") == 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.3.0-canary.33") == 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){
@@ -145,7 +145,7 @@ export declare function getExpectedRequestStore(callingExpression: string): Requ
145
145
  export declare function throwForMissingRequestStore(callingExpression: string): never;
146
146
  export declare function getPrerenderResumeDataCache(workUnitStore: WorkUnitStore): PrerenderResumeDataCache | null;
147
147
  export declare function getRenderResumeDataCache(workUnitStore: WorkUnitStore): RenderResumeDataCache | null;
148
- export declare function getHmrRefreshHash(workUnitStore: WorkUnitStore): string | undefined;
148
+ export declare function getHmrRefreshHash(workStore: WorkStore, workUnitStore: WorkUnitStore): string | undefined;
149
149
  /**
150
150
  * Returns a draft mode provider only if draft mode is enabled.
151
151
  */
@@ -99,8 +99,11 @@ function getRenderResumeDataCache(workUnitStore) {
99
99
  }
100
100
  return null;
101
101
  }
102
- function getHmrRefreshHash(workUnitStore) {
102
+ function getHmrRefreshHash(workStore, workUnitStore) {
103
103
  var _workUnitStore_cookies_get;
104
+ if (!workStore.dev) {
105
+ return undefined;
106
+ }
104
107
  return workUnitStore.type === 'cache' ? workUnitStore.hmrRefreshHash : workUnitStore.type === 'request' ? (_workUnitStore_cookies_get = workUnitStore.cookies.get('__next_hmr_refresh_hash__')) == null ? void 0 : _workUnitStore_cookies_get.value : undefined;
105
108
  }
106
109
  function getDraftModeProviderForCacheScope(workStore, workUnitStore) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/server/app-render/work-unit-async-storage.external.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\nimport type { DraftModeProvider } from '../async-storage/draft-mode-provider'\nimport type { ResponseCookies } from '../web/spec-extension/cookies'\nimport type { ReadonlyHeaders } from '../web/spec-extension/adapters/headers'\nimport type { ReadonlyRequestCookies } from '../web/spec-extension/adapters/request-cookies'\nimport type { CacheSignal } from './cache-signal'\nimport type { DynamicTrackingState } from './dynamic-rendering'\n\n// Share the instance module in the next-shared layer\nimport { workUnitAsyncStorageInstance } from './work-unit-async-storage-instance' with { 'turbopack-transition': 'next-shared' }\nimport type { ServerComponentsHmrCache } from '../response-cache'\nimport type {\n RenderResumeDataCache,\n PrerenderResumeDataCache,\n} from '../resume-data-cache/resume-data-cache'\nimport type { Params } from '../request/params'\nimport type { ImplicitTags } from '../lib/implicit-tags'\nimport type { WorkStore } from './work-async-storage.external'\n\nexport type WorkUnitPhase = 'action' | 'render' | 'after'\n\nexport interface CommonWorkUnitStore {\n /** NOTE: Will be mutated as phases change */\n phase: WorkUnitPhase\n readonly implicitTags: ImplicitTags | undefined\n}\n\nexport interface RequestStore extends CommonWorkUnitStore {\n type: 'request'\n\n /**\n * The URL of the request. This only specifies the pathname and the search\n * part of the URL.\n */\n readonly url: {\n /**\n * The pathname of the requested URL.\n */\n readonly pathname: string\n\n /**\n * The search part of the requested URL. If the request did not provide a\n * search part, this will be an empty string.\n */\n readonly search: string\n }\n\n readonly headers: ReadonlyHeaders\n // This is mutable because we need to reassign it when transitioning from the action phase to the render phase.\n // The cookie object itself is deliberately read only and thus can't be updated.\n cookies: ReadonlyRequestCookies\n readonly mutableCookies: ResponseCookies\n readonly userspaceMutableCookies: ResponseCookies\n readonly draftMode: DraftModeProvider\n readonly isHmrRefresh?: boolean\n readonly serverComponentsHmrCache?: ServerComponentsHmrCache\n\n readonly rootParams: Params\n\n /**\n * The resume data cache for this request. This will be a immutable cache.\n */\n renderResumeDataCache: RenderResumeDataCache | null\n\n // DEV-only\n usedDynamic?: boolean\n prerenderPhase?: boolean\n}\n\n/**\n * The Prerender store is for tracking information related to prerenders.\n *\n * It can be used for both RSC and SSR prerendering and should be scoped as close\n * to the individual `renderTo...` API call as possible. To keep the type simple\n * we don't distinguish between RSC and SSR prerendering explicitly but instead\n * use conditional object properties to infer which mode we are in. For instance cache tracking\n * only needs to happen during the RSC prerender when we are prospectively prerendering\n * to fill all caches.\n */\nexport interface PrerenderStoreModern extends CommonWorkUnitStore {\n type: 'prerender'\n\n /**\n * This signal is aborted when the React render is complete. (i.e. it is the same signal passed to react)\n */\n readonly renderSignal: AbortSignal\n /**\n * This is the AbortController which represents the boundary between Prerender and dynamic. In some renders it is\n * the same as the controller for the renderSignal but in others it is a separate controller. It should be aborted\n * whenever the we are no longer in the prerender phase of rendering. Typically this is after one task or when you call\n * a sync API which requires the prerender to end immediately\n */\n readonly controller: AbortController\n\n /**\n * when not null this signal is used to track cache reads during prerendering and\n * to await all cache reads completing before aborting the prerender.\n */\n readonly cacheSignal: null | CacheSignal\n\n /**\n * During some prerenders we want to track dynamic access.\n */\n readonly dynamicTracking: null | DynamicTrackingState\n\n readonly rootParams: Params\n\n // Collected revalidate times and tags for this document during the prerender.\n revalidate: number // in seconds. 0 means dynamic. INFINITE_CACHE and higher means never revalidate.\n expire: number // server expiration time\n stale: number // client expiration time\n tags: null | string[]\n\n /**\n * The resume data cache for this prerender.\n */\n prerenderResumeDataCache: PrerenderResumeDataCache | null\n\n // DEV ONLY\n // When used this flag informs certain APIs to skip logging because we're\n // not part of the primary render path and are just prerendering to produce\n // validation results\n validating?: boolean\n}\n\nexport interface PrerenderStorePPR extends CommonWorkUnitStore {\n type: 'prerender-ppr'\n readonly rootParams: Params\n readonly dynamicTracking: null | DynamicTrackingState\n // Collected revalidate times and tags for this document during the prerender.\n revalidate: number // in seconds. 0 means dynamic. INFINITE_CACHE and higher means never revalidate.\n expire: number // server expiration time\n stale: number // client expiration time\n tags: null | string[]\n\n /**\n * The resume data cache for this prerender.\n */\n prerenderResumeDataCache: PrerenderResumeDataCache\n}\n\nexport interface PrerenderStoreLegacy extends CommonWorkUnitStore {\n type: 'prerender-legacy'\n readonly rootParams: Params\n // Collected revalidate times and tags for this document during the prerender.\n revalidate: number // in seconds. 0 means dynamic. INFINITE_CACHE and higher means never revalidate.\n expire: number // server expiration time\n stale: number // client expiration time\n tags: null | string[]\n}\n\nexport type PrerenderStore =\n | PrerenderStoreLegacy\n | PrerenderStorePPR\n | PrerenderStoreModern\n\nexport interface UseCacheStore extends CommonWorkUnitStore {\n type: 'cache'\n // Collected revalidate times and tags for this cache entry during the cache render.\n revalidate: number // implicit revalidate time from inner caches / fetches\n expire: number // server expiration time\n stale: number // client expiration time\n explicitRevalidate: undefined | number // explicit revalidate time from cacheLife() calls\n explicitExpire: undefined | number // server expiration time\n explicitStale: undefined | number // client expiration time\n tags: null | string[]\n readonly hmrRefreshHash: string | undefined\n readonly isHmrRefresh: boolean\n readonly serverComponentsHmrCache: ServerComponentsHmrCache | undefined\n readonly forceRevalidate: boolean\n // Draft mode is only available if the outer work unit store is a request\n // store and draft mode is enabled.\n readonly draftMode: DraftModeProvider | undefined\n}\n\nexport interface UnstableCacheStore extends CommonWorkUnitStore {\n type: 'unstable-cache'\n // Draft mode is only available if the outer work unit store is a request\n // store and draft mode is enabled.\n readonly draftMode: DraftModeProvider | undefined\n}\n\n/**\n * The Cache store is for tracking information inside a \"use cache\" or unstable_cache context.\n * Inside this context we should never expose any request or page specific information.\n */\nexport type CacheStore = UseCacheStore | UnstableCacheStore\n\nexport type WorkUnitStore = RequestStore | CacheStore | PrerenderStore\n\nexport type WorkUnitAsyncStorage = AsyncLocalStorage<WorkUnitStore>\n\nexport { workUnitAsyncStorageInstance as workUnitAsyncStorage }\n\nexport function getExpectedRequestStore(\n callingExpression: string\n): RequestStore {\n const workUnitStore = workUnitAsyncStorageInstance.getStore()\n\n if (!workUnitStore) {\n throwForMissingRequestStore(callingExpression)\n }\n\n switch (workUnitStore.type) {\n case 'request':\n return workUnitStore\n\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n // This should not happen because we should have checked it already.\n throw new Error(\n `\\`${callingExpression}\\` cannot be called inside a prerender. This is a bug in Next.js.`\n )\n\n case 'cache':\n throw new Error(\n `\\`${callingExpression}\\` cannot be called inside \"use cache\". Call it outside and pass an argument instead. Read more: https://nextjs.org/docs/messages/next-request-in-use-cache`\n )\n\n case 'unstable-cache':\n throw new Error(\n `\\`${callingExpression}\\` cannot be called inside unstable_cache. Call it outside and pass an argument instead. Read more: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`\n )\n\n default:\n const _exhaustiveCheck: never = workUnitStore\n return _exhaustiveCheck\n }\n}\n\nexport function throwForMissingRequestStore(callingExpression: string): never {\n throw new Error(\n `\\`${callingExpression}\\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n}\n\nexport function getPrerenderResumeDataCache(\n workUnitStore: WorkUnitStore\n): PrerenderResumeDataCache | null {\n if (\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-ppr'\n ) {\n return workUnitStore.prerenderResumeDataCache\n }\n\n return null\n}\n\nexport function getRenderResumeDataCache(\n workUnitStore: WorkUnitStore\n): RenderResumeDataCache | null {\n if (\n workUnitStore.type !== 'prerender-legacy' &&\n workUnitStore.type !== 'cache' &&\n workUnitStore.type !== 'unstable-cache'\n ) {\n if (workUnitStore.type === 'request') {\n return workUnitStore.renderResumeDataCache\n }\n\n // We return the mutable resume data cache here as an immutable version of\n // the cache as it can also be used for reading.\n return workUnitStore.prerenderResumeDataCache\n }\n\n return null\n}\n\nexport function getHmrRefreshHash(\n workUnitStore: WorkUnitStore\n): string | undefined {\n return workUnitStore.type === 'cache'\n ? workUnitStore.hmrRefreshHash\n : workUnitStore.type === 'request'\n ? workUnitStore.cookies.get('__next_hmr_refresh_hash__')?.value\n : undefined\n}\n\n/**\n * Returns a draft mode provider only if draft mode is enabled.\n */\nexport function getDraftModeProviderForCacheScope(\n workStore: WorkStore,\n workUnitStore: WorkUnitStore\n): DraftModeProvider | undefined {\n if (workStore.isDraftMode) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n case 'request':\n return workUnitStore.draftMode\n default:\n return undefined\n }\n }\n\n return undefined\n}\n"],"names":["getDraftModeProviderForCacheScope","getExpectedRequestStore","getHmrRefreshHash","getPrerenderResumeDataCache","getRenderResumeDataCache","throwForMissingRequestStore","workUnitAsyncStorage","workUnitAsyncStorageInstance","callingExpression","workUnitStore","getStore","type","Error","_exhaustiveCheck","prerenderResumeDataCache","renderResumeDataCache","hmrRefreshHash","cookies","get","value","undefined","workStore","isDraftMode","draftMode"],"mappings":";;;;;;;;;;;;;;;;;;;;IA2RgBA,iCAAiC;eAAjCA;;IAzFAC,uBAAuB;eAAvBA;;IA4EAC,iBAAiB;eAAjBA;;IAjCAC,2BAA2B;eAA3BA;;IAaAC,wBAAwB;eAAxBA;;IAnBAC,2BAA2B;eAA3BA;;IAvCyBC,oBAAoB;eAApDC,0DAA4B;;;8CAvLQ;AAyLtC,SAASN,wBACdO,iBAAyB;IAEzB,MAAMC,gBAAgBF,0DAA4B,CAACG,QAAQ;IAE3D,IAAI,CAACD,eAAe;QAClBJ,4BAA4BG;IAC9B;IAEA,OAAQC,cAAcE,IAAI;QACxB,KAAK;YACH,OAAOF;QAET,KAAK;QACL,KAAK;QACL,KAAK;YACH,oEAAoE;YACpE,MAAM,qBAEL,CAFK,IAAIG,MACR,CAAC,EAAE,EAAEJ,kBAAkB,iEAAiE,CAAC,GADrF,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QAEF,KAAK;YACH,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,EAAE,EAAEJ,kBAAkB,2JAA2J,CAAC,GAD/K,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QAEF,KAAK;YACH,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,EAAE,EAAEJ,kBAAkB,sKAAsK,CAAC,GAD1L,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QAEF;YACE,MAAMK,mBAA0BJ;YAChC,OAAOI;IACX;AACF;AAEO,SAASR,4BAA4BG,iBAAyB;IACnE,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,EAAE,EAAEJ,kBAAkB,iHAAiH,CAAC,GADrI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEO,SAASL,4BACdM,aAA4B;IAE5B,IACEA,cAAcE,IAAI,KAAK,eACvBF,cAAcE,IAAI,KAAK,iBACvB;QACA,OAAOF,cAAcK,wBAAwB;IAC/C;IAEA,OAAO;AACT;AAEO,SAASV,yBACdK,aAA4B;IAE5B,IACEA,cAAcE,IAAI,KAAK,sBACvBF,cAAcE,IAAI,KAAK,WACvBF,cAAcE,IAAI,KAAK,kBACvB;QACA,IAAIF,cAAcE,IAAI,KAAK,WAAW;YACpC,OAAOF,cAAcM,qBAAqB;QAC5C;QAEA,0EAA0E;QAC1E,gDAAgD;QAChD,OAAON,cAAcK,wBAAwB;IAC/C;IAEA,OAAO;AACT;AAEO,SAASZ,kBACdO,aAA4B;QAKtBA;IAHN,OAAOA,cAAcE,IAAI,KAAK,UAC1BF,cAAcO,cAAc,GAC5BP,cAAcE,IAAI,KAAK,aACrBF,6BAAAA,cAAcQ,OAAO,CAACC,GAAG,CAAC,iDAA1BT,2BAAwDU,KAAK,GAC7DC;AACR;AAKO,SAASpB,kCACdqB,SAAoB,EACpBZ,aAA4B;IAE5B,IAAIY,UAAUC,WAAW,EAAE;QACzB,OAAQb,cAAcE,IAAI;YACxB,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAOF,cAAcc,SAAS;YAChC;gBACE,OAAOH;QACX;IACF;IAEA,OAAOA;AACT"}
1
+ {"version":3,"sources":["../../../src/server/app-render/work-unit-async-storage.external.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\nimport type { DraftModeProvider } from '../async-storage/draft-mode-provider'\nimport type { ResponseCookies } from '../web/spec-extension/cookies'\nimport type { ReadonlyHeaders } from '../web/spec-extension/adapters/headers'\nimport type { ReadonlyRequestCookies } from '../web/spec-extension/adapters/request-cookies'\nimport type { CacheSignal } from './cache-signal'\nimport type { DynamicTrackingState } from './dynamic-rendering'\n\n// Share the instance module in the next-shared layer\nimport { workUnitAsyncStorageInstance } from './work-unit-async-storage-instance' with { 'turbopack-transition': 'next-shared' }\nimport type { ServerComponentsHmrCache } from '../response-cache'\nimport type {\n RenderResumeDataCache,\n PrerenderResumeDataCache,\n} from '../resume-data-cache/resume-data-cache'\nimport type { Params } from '../request/params'\nimport type { ImplicitTags } from '../lib/implicit-tags'\nimport type { WorkStore } from './work-async-storage.external'\n\nexport type WorkUnitPhase = 'action' | 'render' | 'after'\n\nexport interface CommonWorkUnitStore {\n /** NOTE: Will be mutated as phases change */\n phase: WorkUnitPhase\n readonly implicitTags: ImplicitTags | undefined\n}\n\nexport interface RequestStore extends CommonWorkUnitStore {\n type: 'request'\n\n /**\n * The URL of the request. This only specifies the pathname and the search\n * part of the URL.\n */\n readonly url: {\n /**\n * The pathname of the requested URL.\n */\n readonly pathname: string\n\n /**\n * The search part of the requested URL. If the request did not provide a\n * search part, this will be an empty string.\n */\n readonly search: string\n }\n\n readonly headers: ReadonlyHeaders\n // This is mutable because we need to reassign it when transitioning from the action phase to the render phase.\n // The cookie object itself is deliberately read only and thus can't be updated.\n cookies: ReadonlyRequestCookies\n readonly mutableCookies: ResponseCookies\n readonly userspaceMutableCookies: ResponseCookies\n readonly draftMode: DraftModeProvider\n readonly isHmrRefresh?: boolean\n readonly serverComponentsHmrCache?: ServerComponentsHmrCache\n\n readonly rootParams: Params\n\n /**\n * The resume data cache for this request. This will be a immutable cache.\n */\n renderResumeDataCache: RenderResumeDataCache | null\n\n // DEV-only\n usedDynamic?: boolean\n prerenderPhase?: boolean\n}\n\n/**\n * The Prerender store is for tracking information related to prerenders.\n *\n * It can be used for both RSC and SSR prerendering and should be scoped as close\n * to the individual `renderTo...` API call as possible. To keep the type simple\n * we don't distinguish between RSC and SSR prerendering explicitly but instead\n * use conditional object properties to infer which mode we are in. For instance cache tracking\n * only needs to happen during the RSC prerender when we are prospectively prerendering\n * to fill all caches.\n */\nexport interface PrerenderStoreModern extends CommonWorkUnitStore {\n type: 'prerender'\n\n /**\n * This signal is aborted when the React render is complete. (i.e. it is the same signal passed to react)\n */\n readonly renderSignal: AbortSignal\n /**\n * This is the AbortController which represents the boundary between Prerender and dynamic. In some renders it is\n * the same as the controller for the renderSignal but in others it is a separate controller. It should be aborted\n * whenever the we are no longer in the prerender phase of rendering. Typically this is after one task or when you call\n * a sync API which requires the prerender to end immediately\n */\n readonly controller: AbortController\n\n /**\n * when not null this signal is used to track cache reads during prerendering and\n * to await all cache reads completing before aborting the prerender.\n */\n readonly cacheSignal: null | CacheSignal\n\n /**\n * During some prerenders we want to track dynamic access.\n */\n readonly dynamicTracking: null | DynamicTrackingState\n\n readonly rootParams: Params\n\n // Collected revalidate times and tags for this document during the prerender.\n revalidate: number // in seconds. 0 means dynamic. INFINITE_CACHE and higher means never revalidate.\n expire: number // server expiration time\n stale: number // client expiration time\n tags: null | string[]\n\n /**\n * The resume data cache for this prerender.\n */\n prerenderResumeDataCache: PrerenderResumeDataCache | null\n\n // DEV ONLY\n // When used this flag informs certain APIs to skip logging because we're\n // not part of the primary render path and are just prerendering to produce\n // validation results\n validating?: boolean\n}\n\nexport interface PrerenderStorePPR extends CommonWorkUnitStore {\n type: 'prerender-ppr'\n readonly rootParams: Params\n readonly dynamicTracking: null | DynamicTrackingState\n // Collected revalidate times and tags for this document during the prerender.\n revalidate: number // in seconds. 0 means dynamic. INFINITE_CACHE and higher means never revalidate.\n expire: number // server expiration time\n stale: number // client expiration time\n tags: null | string[]\n\n /**\n * The resume data cache for this prerender.\n */\n prerenderResumeDataCache: PrerenderResumeDataCache\n}\n\nexport interface PrerenderStoreLegacy extends CommonWorkUnitStore {\n type: 'prerender-legacy'\n readonly rootParams: Params\n // Collected revalidate times and tags for this document during the prerender.\n revalidate: number // in seconds. 0 means dynamic. INFINITE_CACHE and higher means never revalidate.\n expire: number // server expiration time\n stale: number // client expiration time\n tags: null | string[]\n}\n\nexport type PrerenderStore =\n | PrerenderStoreLegacy\n | PrerenderStorePPR\n | PrerenderStoreModern\n\nexport interface UseCacheStore extends CommonWorkUnitStore {\n type: 'cache'\n // Collected revalidate times and tags for this cache entry during the cache render.\n revalidate: number // implicit revalidate time from inner caches / fetches\n expire: number // server expiration time\n stale: number // client expiration time\n explicitRevalidate: undefined | number // explicit revalidate time from cacheLife() calls\n explicitExpire: undefined | number // server expiration time\n explicitStale: undefined | number // client expiration time\n tags: null | string[]\n readonly hmrRefreshHash: string | undefined\n readonly isHmrRefresh: boolean\n readonly serverComponentsHmrCache: ServerComponentsHmrCache | undefined\n readonly forceRevalidate: boolean\n // Draft mode is only available if the outer work unit store is a request\n // store and draft mode is enabled.\n readonly draftMode: DraftModeProvider | undefined\n}\n\nexport interface UnstableCacheStore extends CommonWorkUnitStore {\n type: 'unstable-cache'\n // Draft mode is only available if the outer work unit store is a request\n // store and draft mode is enabled.\n readonly draftMode: DraftModeProvider | undefined\n}\n\n/**\n * The Cache store is for tracking information inside a \"use cache\" or unstable_cache context.\n * Inside this context we should never expose any request or page specific information.\n */\nexport type CacheStore = UseCacheStore | UnstableCacheStore\n\nexport type WorkUnitStore = RequestStore | CacheStore | PrerenderStore\n\nexport type WorkUnitAsyncStorage = AsyncLocalStorage<WorkUnitStore>\n\nexport { workUnitAsyncStorageInstance as workUnitAsyncStorage }\n\nexport function getExpectedRequestStore(\n callingExpression: string\n): RequestStore {\n const workUnitStore = workUnitAsyncStorageInstance.getStore()\n\n if (!workUnitStore) {\n throwForMissingRequestStore(callingExpression)\n }\n\n switch (workUnitStore.type) {\n case 'request':\n return workUnitStore\n\n case 'prerender':\n case 'prerender-ppr':\n case 'prerender-legacy':\n // This should not happen because we should have checked it already.\n throw new Error(\n `\\`${callingExpression}\\` cannot be called inside a prerender. This is a bug in Next.js.`\n )\n\n case 'cache':\n throw new Error(\n `\\`${callingExpression}\\` cannot be called inside \"use cache\". Call it outside and pass an argument instead. Read more: https://nextjs.org/docs/messages/next-request-in-use-cache`\n )\n\n case 'unstable-cache':\n throw new Error(\n `\\`${callingExpression}\\` cannot be called inside unstable_cache. Call it outside and pass an argument instead. Read more: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`\n )\n\n default:\n const _exhaustiveCheck: never = workUnitStore\n return _exhaustiveCheck\n }\n}\n\nexport function throwForMissingRequestStore(callingExpression: string): never {\n throw new Error(\n `\\`${callingExpression}\\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n}\n\nexport function getPrerenderResumeDataCache(\n workUnitStore: WorkUnitStore\n): PrerenderResumeDataCache | null {\n if (\n workUnitStore.type === 'prerender' ||\n workUnitStore.type === 'prerender-ppr'\n ) {\n return workUnitStore.prerenderResumeDataCache\n }\n\n return null\n}\n\nexport function getRenderResumeDataCache(\n workUnitStore: WorkUnitStore\n): RenderResumeDataCache | null {\n if (\n workUnitStore.type !== 'prerender-legacy' &&\n workUnitStore.type !== 'cache' &&\n workUnitStore.type !== 'unstable-cache'\n ) {\n if (workUnitStore.type === 'request') {\n return workUnitStore.renderResumeDataCache\n }\n\n // We return the mutable resume data cache here as an immutable version of\n // the cache as it can also be used for reading.\n return workUnitStore.prerenderResumeDataCache\n }\n\n return null\n}\n\nexport function getHmrRefreshHash(\n workStore: WorkStore,\n workUnitStore: WorkUnitStore\n): string | undefined {\n if (!workStore.dev) {\n return undefined\n }\n\n return workUnitStore.type === 'cache'\n ? workUnitStore.hmrRefreshHash\n : workUnitStore.type === 'request'\n ? workUnitStore.cookies.get('__next_hmr_refresh_hash__')?.value\n : undefined\n}\n\n/**\n * Returns a draft mode provider only if draft mode is enabled.\n */\nexport function getDraftModeProviderForCacheScope(\n workStore: WorkStore,\n workUnitStore: WorkUnitStore\n): DraftModeProvider | undefined {\n if (workStore.isDraftMode) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n case 'request':\n return workUnitStore.draftMode\n default:\n return undefined\n }\n }\n\n return undefined\n}\n"],"names":["getDraftModeProviderForCacheScope","getExpectedRequestStore","getHmrRefreshHash","getPrerenderResumeDataCache","getRenderResumeDataCache","throwForMissingRequestStore","workUnitAsyncStorage","workUnitAsyncStorageInstance","callingExpression","workUnitStore","getStore","type","Error","_exhaustiveCheck","prerenderResumeDataCache","renderResumeDataCache","workStore","dev","undefined","hmrRefreshHash","cookies","get","value","isDraftMode","draftMode"],"mappings":";;;;;;;;;;;;;;;;;;;;IAgSgBA,iCAAiC;eAAjCA;;IA9FAC,uBAAuB;eAAvBA;;IA4EAC,iBAAiB;eAAjBA;;IAjCAC,2BAA2B;eAA3BA;;IAaAC,wBAAwB;eAAxBA;;IAnBAC,2BAA2B;eAA3BA;;IAvCyBC,oBAAoB;eAApDC,0DAA4B;;;8CAvLQ;AAyLtC,SAASN,wBACdO,iBAAyB;IAEzB,MAAMC,gBAAgBF,0DAA4B,CAACG,QAAQ;IAE3D,IAAI,CAACD,eAAe;QAClBJ,4BAA4BG;IAC9B;IAEA,OAAQC,cAAcE,IAAI;QACxB,KAAK;YACH,OAAOF;QAET,KAAK;QACL,KAAK;QACL,KAAK;YACH,oEAAoE;YACpE,MAAM,qBAEL,CAFK,IAAIG,MACR,CAAC,EAAE,EAAEJ,kBAAkB,iEAAiE,CAAC,GADrF,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QAEF,KAAK;YACH,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,EAAE,EAAEJ,kBAAkB,2JAA2J,CAAC,GAD/K,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QAEF,KAAK;YACH,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,EAAE,EAAEJ,kBAAkB,sKAAsK,CAAC,GAD1L,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QAEF;YACE,MAAMK,mBAA0BJ;YAChC,OAAOI;IACX;AACF;AAEO,SAASR,4BAA4BG,iBAAyB;IACnE,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,EAAE,EAAEJ,kBAAkB,iHAAiH,CAAC,GADrI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEO,SAASL,4BACdM,aAA4B;IAE5B,IACEA,cAAcE,IAAI,KAAK,eACvBF,cAAcE,IAAI,KAAK,iBACvB;QACA,OAAOF,cAAcK,wBAAwB;IAC/C;IAEA,OAAO;AACT;AAEO,SAASV,yBACdK,aAA4B;IAE5B,IACEA,cAAcE,IAAI,KAAK,sBACvBF,cAAcE,IAAI,KAAK,WACvBF,cAAcE,IAAI,KAAK,kBACvB;QACA,IAAIF,cAAcE,IAAI,KAAK,WAAW;YACpC,OAAOF,cAAcM,qBAAqB;QAC5C;QAEA,0EAA0E;QAC1E,gDAAgD;QAChD,OAAON,cAAcK,wBAAwB;IAC/C;IAEA,OAAO;AACT;AAEO,SAASZ,kBACdc,SAAoB,EACpBP,aAA4B;QAStBA;IAPN,IAAI,CAACO,UAAUC,GAAG,EAAE;QAClB,OAAOC;IACT;IAEA,OAAOT,cAAcE,IAAI,KAAK,UAC1BF,cAAcU,cAAc,GAC5BV,cAAcE,IAAI,KAAK,aACrBF,6BAAAA,cAAcW,OAAO,CAACC,GAAG,CAAC,iDAA1BZ,2BAAwDa,KAAK,GAC7DJ;AACR;AAKO,SAASlB,kCACdgB,SAAoB,EACpBP,aAA4B;IAE5B,IAAIO,UAAUO,WAAW,EAAE;QACzB,OAAQd,cAAcE,IAAI;YACxB,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAOF,cAAce,SAAS;YAChC;gBACE,OAAON;QACX;IACF;IAEA,OAAOA;AACT"}
@@ -139,7 +139,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
139
139
  }
140
140
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
141
141
  const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
142
- version: "15.3.0-canary.32"
142
+ version: "15.3.0-canary.33"
143
143
  });
144
144
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
145
145
  // of the current `next dev` invocation.
@@ -257,7 +257,7 @@ class HotReloaderWebpack {
257
257
  this.previewProps = previewProps;
258
258
  this.rewrites = rewrites;
259
259
  this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
260
- version: "15.3.0-canary.32"
260
+ version: "15.3.0-canary.33"
261
261
  });
262
262
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
263
263
  // of the current `next dev` invocation.
@@ -75,7 +75,7 @@ function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, maxEx
75
75
  } else {
76
76
  bundlerSuffix = '';
77
77
  }
78
- _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.3.0-canary.32"}`))}${bundlerSuffix}`);
78
+ _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.3.0-canary.33"}`))}${bundlerSuffix}`);
79
79
  if (appUrl) {
80
80
  _log.bootstrap(`- Local: ${appUrl}`);
81
81
  }
@@ -111,7 +111,7 @@ async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server
111
111
  async function startServer(serverOptions) {
112
112
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
113
113
  let { port } = serverOptions;
114
- process.title = `next-server (v${"15.3.0-canary.32"})`;
114
+ process.title = `next-server (v${"15.3.0-canary.33"})`;
115
115
  let handlersReady = ()=>{};
116
116
  let handlersError = ()=>{};
117
117
  let handlersPromise = new Promise((resolve, reject)=>{