@@ -18,25 +18,30 @@ declare global {
18
18
// RuntimeGlobals.require
19
19
var __RUNTIME_GLOBALS_REQUIRE__ : unknown ;
20
20
// RuntimeGlobals.ensure
21
- var __RUNTIME_GLOBALS_ENSURE_CHUNK__ : ( chunkId : ChunkId ) => Promise < unknown > ;
21
+ var __RUNTIME_GLOBALS_ENSURE_CHUNK__ : (
22
+ chunkId : ChunkId ,
23
+ ...args : unknown [ ]
24
+ ) => Promise < unknown > ;
22
25
// RuntimeGlobals.getChunkScriptFilename
23
26
var __RUNTIME_GLOBALS_GET_CHUNK_SCRIPT_FILENAME__ : (
24
27
chunkId : ChunkId ,
28
+ ...args : unknown [ ]
25
29
) => string ;
26
30
// RuntimeGlobals.getChunkCssFilename
27
31
var __RUNTIME_GLOBALS_GET_CSS_FILENAME__ :
28
- | ( ( chunkId : ChunkId ) => string )
32
+ | ( ( chunkId : ChunkId , ... args : unknown [ ] ) => string )
29
33
| undefined ;
30
34
// RuntimeGlobals.getChunkCssFilename when using Rspack.CssExtractPlugin
31
35
var __RUNTIME_GLOBALS_GET_MINI_CSS_EXTRACT_FILENAME__ :
32
- | ( ( chunkId : ChunkId ) => string )
36
+ | ( ( chunkId : ChunkId , ... args : unknown [ ] ) => string )
33
37
| undefined ;
34
38
// RuntimeGlobals.loadScript
35
39
var __RUNTIME_GLOBALS_LOAD_SCRIPT__ : (
36
40
url : ChunkSrcUrl ,
37
41
done : unknown ,
38
42
key : string ,
39
43
chunkId : ChunkId ,
44
+ ...args : unknown [ ]
40
45
) => void ;
41
46
// RuntimeGlobals.publicPath
42
47
var __RUNTIME_GLOBALS_PUBLIC_PATH__ : string ;
@@ -199,21 +204,52 @@ const originalLoadScript = __RUNTIME_GLOBALS_LOAD_SCRIPT__;
199
204
// if users want to support es5, add Promise polyfill first https://github.com/webpack/webpack/issues/12877
200
205
function ensureChunk (
201
206
chunkId : string ,
207
+ // args placeholder, to avoid that other webpack runtime would add arg for __webpack_require__.e
208
+ arg0 : unknown ,
209
+ arg1 : unknown ,
210
+ arg2 : unknown ,
211
+ arg3 : unknown ,
212
+ arg4 : unknown ,
213
+ arg5 : unknown ,
214
+ arg6 : unknown ,
202
215
callingCounter : { count : number } = { count : 0 } ,
216
+ ...args : unknown [ ]
203
217
) : Promise < unknown > {
204
- const result = originalEnsureChunk ( chunkId ) ;
205
- const originalScriptFilename = originalGetChunkScriptFilename ( chunkId ) ;
206
- const originalCssFilename = originalGetCssFilename ( chunkId ) ;
218
+ const result = originalEnsureChunk (
219
+ chunkId ,
220
+ arg0 ,
221
+ arg1 ,
222
+ arg2 ,
223
+ arg3 ,
224
+ arg4 ,
225
+ arg5 ,
226
+ arg6 ,
227
+ callingCounter ,
228
+ ...args ,
229
+ ) ;
207
230
208
- // mark the async chunk name in the global variables and share it with initial chunk retry to avoid duplicate retrying
209
- if ( typeof window !== 'undefined' ) {
210
- if ( originalScriptFilename ) {
211
- window . __RB_ASYNC_CHUNKS__ [ originalScriptFilename ] = true ;
212
- }
213
- if ( originalCssFilename ) {
214
- window . __RB_ASYNC_CHUNKS__ [ originalCssFilename ] = true ;
231
+ try {
232
+ const originalScriptFilename = originalGetChunkScriptFilename ( chunkId ) ;
233
+ const originalCssFilename = originalGetCssFilename ( chunkId ) ;
234
+
235
+ // mark the async chunk name in the global variables and share it with initial chunk retry to avoid duplicate retrying
236
+ if ( typeof window !== 'undefined' ) {
237
+ if ( originalScriptFilename ) {
238
+ window . __RB_ASYNC_CHUNKS__ [ originalScriptFilename ] = true ;
239
+ }
240
+ if ( originalCssFilename ) {
241
+ window . __RB_ASYNC_CHUNKS__ [ originalCssFilename ] = true ;
242
+ }
215
243
}
244
+ } catch ( e ) {
245
+ console . log ( '[@rsbuild/plugin-assets-retry] get original script or css filename error' , e ) ;
246
+ }
247
+
248
+ // if __webpack_require__.e is polluted by other runtime codes, fallback to originalEnsureChunk
249
+ if ( ! callingCounter || typeof callingCounter . count !== 'number' ) {
250
+ return result ;
216
251
}
252
+
217
253
callingCounter . count += 1 ;
218
254
219
255
return result . catch ( ( error : Error ) => {
@@ -278,12 +314,23 @@ function ensureChunk(
278
314
config . onRetry ( context ) ;
279
315
}
280
316
281
- const nextPromise = ensureChunk ( chunkId , callingCounter ) ;
317
+ const nextPromise = ensureChunk (
318
+ chunkId ,
319
+ arg0 ,
320
+ arg1 ,
321
+ arg2 ,
322
+ arg3 ,
323
+ arg4 ,
324
+ arg5 ,
325
+ arg6 ,
326
+ callingCounter ,
327
+ ...args ,
328
+ ) ;
282
329
return nextPromise . then ( ( result ) => {
283
330
// when after retrying the third time
284
331
// ensureChunk(chunkId, { count: 3 }), at that time, existRetryTimes === 2
285
332
// after all, callingCounter.count is 4
286
- const isLastSuccessRetry = callingCounter . count === existRetryTimes + 2 ;
333
+ const isLastSuccessRetry = callingCounter ? .count === existRetryTimes + 2 ;
287
334
if ( typeof config . onSuccess === 'function' && isLastSuccessRetry ) {
288
335
const context = createContext ( existRetryTimes + 1 ) ;
289
336
config . onSuccess ( context ) ;
@@ -298,13 +345,15 @@ function loadScript(
298
345
done : unknown ,
299
346
key : string ,
300
347
chunkId : ChunkId ,
348
+ ...args : unknown [ ]
301
349
) {
302
350
const retry = globalCurrRetrying [ chunkId ] ;
303
351
return originalLoadScript (
304
352
retry ? retry . nextRetryUrl : originalUrl ,
305
353
done ,
306
354
key ,
307
355
chunkId ,
356
+ ...args ,
308
357
) ;
309
358
}
310
359
@@ -316,7 +365,10 @@ function registerAsyncChunkRetry() {
316
365
317
366
if ( typeof __RUNTIME_GLOBALS_REQUIRE__ !== 'undefined' ) {
318
367
try {
319
- __RUNTIME_GLOBALS_ENSURE_CHUNK__ = ensureChunk ;
368
+ __RUNTIME_GLOBALS_ENSURE_CHUNK__ = ensureChunk as (
369
+ chunkId : string ,
370
+ ...args : unknown [ ]
371
+ ) => Promise < unknown > ;
320
372
__RUNTIME_GLOBALS_LOAD_SCRIPT__ = loadScript ;
321
373
} catch ( e ) {
322
374
console . error (
0 commit comments