diff --git a/packages/next/src/server/base-server.ts b/packages/next/src/server/base-server.ts index 02d0e24cc83524..d9cf2abc4cf65d 100644 --- a/packages/next/src/server/base-server.ts +++ b/packages/next/src/server/base-server.ts @@ -1467,6 +1467,8 @@ export default abstract class Server< incrementalCache.resetRequestCache() addRequestMeta(req, 'incrementalCache', incrementalCache) + // This is needed for pages router to leverage unstable_cache + // TODO: re-work this handling to not use global and use a AsyncStore ;(globalThis as any).__incrementalCache = incrementalCache } @@ -2457,13 +2459,15 @@ export default abstract class Server< // use existing incrementalCache instance if available const incrementalCache: import('./lib/incremental-cache').IncrementalCache = - (globalThis as any).__incrementalCache || - (await this.getIncrementalCache({ - requestHeaders: Object.assign({}, req.headers), - requestProtocol: protocol.substring(0, protocol.length - 1) as - | 'http' - | 'https', - })) + process.env.NEXT_RUNTIME === 'edge' && + (globalThis as any).__incrementalCache + ? (globalThis as any).__incrementalCache + : await this.getIncrementalCache({ + requestHeaders: Object.assign({}, req.headers), + requestProtocol: protocol.substring(0, protocol.length - 1) as + | 'http' + | 'https', + }) // TODO: investigate, this is not safe across multiple concurrent requests incrementalCache.resetRequestCache() diff --git a/packages/next/src/server/web/adapter.ts b/packages/next/src/server/web/adapter.ts index 79b18811a7c775..3f27a3ac81172d 100644 --- a/packages/next/src/server/web/adapter.ts +++ b/packages/next/src/server/web/adapter.ts @@ -186,7 +186,10 @@ export async function adapter( } if ( - !(globalThis as any).__incrementalCache && + // If we are inside of the next start sandbox + // leverage the shared instance if not we need + // to create a fresh cache instance each time + !(globalThis as any).__incrementalCacheShared && (params as any).IncrementalCache ) { ;(globalThis as any).__incrementalCache = new ( diff --git a/packages/next/src/server/web/sandbox/sandbox.ts b/packages/next/src/server/web/sandbox/sandbox.ts index 3e1784bd8468c2..039cb50b4e313e 100644 --- a/packages/next/src/server/web/sandbox/sandbox.ts +++ b/packages/next/src/server/web/sandbox/sandbox.ts @@ -77,6 +77,7 @@ export async function getRuntimeContext( }) if (params.incrementalCache) { + runtime.context.globalThis.__incrementalCacheShared = true runtime.context.globalThis.__incrementalCache = params.incrementalCache }