@@ -33,6 +33,7 @@ export enum AssetCommentEnum {
3333
3434export interface Asset {
3535 module ?: boolean ;
36+ loaded ?: boolean ;
3637 type : AssetTypeEnum ;
3738 /** Only used when type is AssetTypeEnum.RUNTIME */
3839 library ?: string ;
@@ -313,19 +314,20 @@ export function getUrlAssets(urls: string | string[]) {
313314export async function fetchScripts ( jsList : Asset [ ] , fetch : Fetch = defaultFetch ) : Promise < string [ ] > {
314315 let jsBeforeRuntime = '' ;
315316 let jsAfterRuntime = '' ;
316-
317317 jsList . forEach ( ( asset ) => {
318318 if ( asset . type === AssetTypeEnum . RUNTIME ) {
319319 const { library, version } = asset ;
320320 const globalLib = `window['${ library } ']` ;
321321 const backupLib = `window['__${ library } __']` ;
322322 const versionedLib = `window['${ library } @${ version } ']` ;
323- jsBeforeRuntime = `${ jsBeforeRuntime } if (${ globalLib } ) {${ backupLib } = ${ globalLib } ;}\n` ;
324- jsAfterRuntime = `${ jsAfterRuntime } ${ versionedLib } = ${ globalLib } ; if (${ backupLib } ) {${ globalLib } = ${ backupLib } ;${ backupLib } = undefined;}\n` ;
323+ const backupCode = `if (${ globalLib } ) {${ backupLib } = ${ globalLib } ;}\n` ;
324+ const restoreCode = `if (${ backupLib } ) {${ globalLib } = ${ backupLib } ;${ backupLib } = undefined;}\n` ;
325+ jsBeforeRuntime = `${ jsBeforeRuntime } ${ backupCode } ${ asset . loaded ? `${ globalLib } = ${ versionedLib } ;` : '' } ` ;
326+ jsAfterRuntime = `${ jsAfterRuntime } ${ asset . loaded ? '' : `${ versionedLib } = ${ globalLib } ;` } ${ restoreCode } ` ;
325327 }
326328 } ) ;
327329
328- const result = await Promise . all ( jsList . map ( async ( asset ) => {
330+ const result = await Promise . all ( jsList . filter ( ( asset ) => ! asset . loaded ) . map ( async ( asset ) => {
329331 const { type, content } = asset ;
330332 if ( type === AssetTypeEnum . INLINE ) {
331333 return {
0 commit comments