@@ -58,11 +58,16 @@ function recreateAgent(features, signal) {
5858 signal . addEventListener ( 'abort' , ( ) => inspector . detachAgent ( agent ) , { once : true } ) ;
5959
6060 if ( features . includes ( 'virtual-module-loader' ) ) {
61- const virtualModuleCache = new Map ( ) ;
61+ const virtualModuleSourceCache = new Map ( ) ;
62+ const moduleCache = new Map ( ) ;
6263 agent . hostDefinedOptions . loadImportedModule = ( referrer , specifier , attributes , hostDefined , finish ) => {
6364 const importerRealm = referrer instanceof Realm ? referrer : referrer . Realm ;
64- if ( importerRealm instanceof ManagedRealm && virtualModuleCache . has ( specifier ) ) {
65- finish ( importerRealm . compileModule ( virtualModuleCache . get ( specifier ) , { specifier } ) ) ;
65+ if ( importerRealm instanceof ManagedRealm && virtualModuleSourceCache . has ( specifier ) ) {
66+ if ( ! moduleCache . has ( specifier ) ) {
67+ const module = importerRealm . compileModule ( virtualModuleSourceCache . get ( specifier ) , { specifier } ) ;
68+ moduleCache . set ( specifier , module ) ;
69+ }
70+ finish ( moduleCache . get ( specifier ) ) ;
6671 return ;
6772 }
6873 finish ( Throw . SyntaxError ( 'Could not resolve module $1' , specifier ) ) ;
@@ -78,10 +83,10 @@ function recreateAgent(features, signal) {
7883 if ( surroundingAgent . debugger_cannotPreview ) {
7984 return surroundingAgent . debugger_cannotPreview ;
8085 }
81- virtualModuleCache . set ( specifier . stringValue ( ) , source . stringValue ( ) ) ;
86+ virtualModuleSourceCache . set ( specifier . stringValue ( ) , source . stringValue ( ) ) ;
8287 return Value . undefined ;
8388 } , 2 , 'defineModule' , [ 'SourceText' ] ) ;
84- /** @type {import('../../lib/engine262.mjs').ECMAScriptFunctionObject } */ ( /** @type {any } */ ( defineModule ) ) . SourceText = 'function defineModule(specifier, source) { [native code] }\n/** @example defineModule("lib", "export default 1;"); import("lib") */ ' ;
89+ /** @type {import('../../lib/engine262.mjs').ECMAScriptFunctionObject } */ ( /** @type {any } */ ( defineModule ) ) . SourceText = 'function defineModule(specifier, source) { [native code] }' ;
8590 CreateNonEnumerableDataPropertyOrThrow ( realm . GlobalObject , Value ( 'defineModule' ) , defineModule ) ;
8691 } ) ;
8792 }
0 commit comments