@ -406,13 +406,15 @@ export function findExportedComponentLazy<T extends object = any>(...props: stri
} ) ;
} ) ;
}
}
const DefaultExtractAndLoadChunksRegex = /(?:Promise\.all\((\[\i\.\i\(".+?"\).+?\])\)|Promise\.resolve\(\)).then\(\i\.bind\(\i,"(.+?)"\)\)/ ;
/ * *
/ * *
* Extract and load chunks using their entry point
* Extract and load chunks using their entry point
* @param code An array of all the code the module factory containing the lazy chunk loading must include
* @param code An array of all the code the module factory containing the lazy chunk loading must include
* @param matcher A RegExp that returns the chunk ids array as the first capture group and the entry point id as the second . Defaults to a matcher that captures the lazy chunk loading found in the module factory
* @param matcher A RegExp that returns the chunk ids array as the first capture group and the entry point id as the second . Defaults to a matcher that captures the lazy chunk loading found in the module factory
* @returns A promise that resolves when the chunks were loaded
* @returns A promise that resolves when the chunks were loaded
* /
* /
export async function extractAndLoadChunks ( code : string [ ] , matcher : RegExp = /Promise\.all\((\[\i\.\i\(".+?"\).+?\])\).then\(\i\.bind\(\i,"(.+?)"\)\)/ ) {
export async function extractAndLoadChunks ( code : string [ ] , matcher : RegExp = DefaultExtractAndLoadChunksRegex ) {
const module = findModuleFactory ( . . . code ) ;
const module = findModuleFactory ( . . . code ) ;
if ( ! module ) {
if ( ! module ) {
const err = new Error ( "extractAndLoadChunks: Couldn't find module factory" ) ;
const err = new Error ( "extractAndLoadChunks: Couldn't find module factory" ) ;
@ -434,7 +436,7 @@ export async function extractAndLoadChunks(code: string[], matcher: RegExp = /Pr
}
}
const [ , rawChunkIds , entryPointId ] = match ;
const [ , rawChunkIds , entryPointId ] = match ;
if ( ! rawChunkIds || Number . isNaN ( entryPointId ) ) {
if ( Number . isNaN ( entryPointId ) ) {
const err = new Error ( "extractAndLoadChunks: Matcher didn't return a capturing group with the chunk ids array, or the entry point id returned as the second group wasn't a number" ) ;
const err = new Error ( "extractAndLoadChunks: Matcher didn't return a capturing group with the chunk ids array, or the entry point id returned as the second group wasn't a number" ) ;
logger . warn ( err , "Code:" , code , "Matcher:" , matcher ) ;
logger . warn ( err , "Code:" , code , "Matcher:" , matcher ) ;
@ -445,9 +447,11 @@ export async function extractAndLoadChunks(code: string[], matcher: RegExp = /Pr
return ;
return ;
}
}
const chunkIds = Array . from ( rawChunkIds . matchAll ( /\("(.+?)"\)/g ) ) . map ( ( m : any ) = > m [ 1 ] ) ;
if ( rawChunkIds ) {
const chunkIds = Array . from ( rawChunkIds . matchAll ( /\("(.+?)"\)/g ) ) . map ( ( m : any ) = > m [ 1 ] ) ;
await Promise . all ( chunkIds . map ( id = > wreq . e ( id ) ) ) ;
}
await Promise . all ( chunkIds . map ( id = > wreq . e ( id ) ) ) ;
wreq ( entryPointId ) ;
wreq ( entryPointId ) ;
}
}
@ -459,7 +463,7 @@ export async function extractAndLoadChunks(code: string[], matcher: RegExp = /Pr
* @param matcher A RegExp that returns the chunk ids array as the first capture group and the entry point id as the second . Defaults to a matcher that captures the lazy chunk loading found in the module factory
* @param matcher A RegExp that returns the chunk ids array as the first capture group and the entry point id as the second . Defaults to a matcher that captures the lazy chunk loading found in the module factory
* @returns A function that returns a promise that resolves when the chunks were loaded , on first call
* @returns A function that returns a promise that resolves when the chunks were loaded , on first call
* /
* /
export function extractAndLoadChunksLazy ( code : string [ ] , matcher : RegExp = /Promise\.all\((\[\i\.\i\(".+?"\).+?\])\).then\(\i\.bind\(\i,"(.+?)"\)\)/ ) {
export function extractAndLoadChunksLazy ( code : string [ ] , matcher = DefaultExtractAndLoadChunksRegex ) {
if ( IS_DEV ) lazyWebpackSearchHistory . push ( [ "extractAndLoadChunks" , [ code , matcher ] ] ) ;
if ( IS_DEV ) lazyWebpackSearchHistory . push ( [ "extractAndLoadChunks" , [ code , matcher ] ] ) ;
return ( ) = > extractAndLoadChunks ( code , matcher ) ;
return ( ) = > extractAndLoadChunks ( code , matcher ) ;