@@ -46,6 +46,7 @@ import {
46
46
type AppIsrManifestAction ,
47
47
} from '../dev/hot-reloader-types'
48
48
import { normalizedAssetPrefix } from '../../shared/lib/normalized-asset-prefix'
49
+ import { NEXT_PATCH_SYMBOL } from './patch-fetch'
49
50
50
51
const debug = setupDebug ( 'next:router-server:main' )
51
52
const isNextFont = ( pathname : string | null ) =>
@@ -109,6 +110,8 @@ export async function initialize(opts: {
109
110
110
111
let devBundlerService : DevBundlerService | undefined
111
112
113
+ let originalFetch = globalThis . fetch
114
+
112
115
if ( opts . dev ) {
113
116
const { Telemetry } =
114
117
require ( '../../telemetry/storage' ) as typeof import ( '../../telemetry/storage' )
@@ -121,6 +124,11 @@ export async function initialize(opts: {
121
124
const { setupDevBundler } =
122
125
require ( './router-utils/setup-dev-bundler' ) as typeof import ( './router-utils/setup-dev-bundler' )
123
126
127
+ const resetFetch = ( ) => {
128
+ globalThis . fetch = originalFetch
129
+ ; ( globalThis as Record < symbol , unknown > ) [ NEXT_PATCH_SYMBOL ] = false
130
+ }
131
+
124
132
const setupDevBundlerSpan = opts . startServerSpan
125
133
? opts . startServerSpan . traceChild ( 'setup-dev-bundler' )
126
134
: trace ( 'setup-dev-bundler' )
@@ -138,6 +146,7 @@ export async function initialize(opts: {
138
146
turbo : ! ! process . env . TURBOPACK ,
139
147
port : opts . port ,
140
148
onCleanup : opts . onCleanup ,
149
+ resetFetch,
141
150
} )
142
151
)
143
152
@@ -591,12 +600,12 @@ export async function initialize(opts: {
591
600
let requestHandler : WorkerRequestHandler = requestHandlerImpl
592
601
if ( config . experimental . testProxy ) {
593
602
// Intercept fetch and other testmode apis.
594
- const {
595
- wrapRequestHandlerWorker,
596
- interceptTestApis,
597
- } = require ( 'next/dist/experimental/testmode/server' )
603
+ const { wrapRequestHandlerWorker, interceptTestApis } =
604
+ require ( 'next/dist/experimental/testmode/server' ) as typeof import ( 'next/src/experimental/testmode/server' )
598
605
requestHandler = wrapRequestHandlerWorker ( requestHandler )
599
606
interceptTestApis ( )
607
+ // We treat the intercepted fetch as "original" fetch that should be reset to during HMR.
608
+ originalFetch = globalThis . fetch
600
609
}
601
610
requestHandlers [ opts . dir ] = requestHandler
602
611
0 commit comments