@@ -57,6 +57,7 @@ const { translators } = require(
5757const { getOptionValue } = require ( 'internal/options' ) ;
5858const {
5959 fetchModule,
60+ inFetchCache,
6061} = require ( 'internal/modules/esm/fetch_module' ) ;
6162
6263
@@ -338,23 +339,35 @@ class ESMLoader {
338339 * would have a cache key of https://example.com/foo and baseURL
339340 * of https://example.com/bar
340341 *
341- * MUST BE SYNCHRONOUS for import.meta initialization
342- * MUST BE CALLED AFTER receiving the url body due to I/O
343- * @param {string } url
344- * @returns {string }
342+ * ! MUST BE SYNCHRONOUS for import.meta initialization
343+ * ! MUST BE CALLED AFTER receiving the url body due to I/O
344+ * @param {URL['href'] } url
345+ * @returns {string|Promise<URL['href']> }
345346 */
346347 getBaseURL ( url ) {
347- if (
348+ if ( getOptionValue ( '--experimental-network-imports' ) && (
348349 StringPrototypeStartsWith ( url , 'http:' ) ||
349350 StringPrototypeStartsWith ( url , 'https:' )
350- ) {
351- // The request & response have already settled, so they are in
352- // fetchModule's cache, in which case, fetchModule returns
351+ ) ) {
352+ // When using network-imports, the request & response have already settled
353+ // so they are in fetchModule's cache, in which case, fetchModule returns
353354 // immediately and synchronously
354- url = fetchModule ( new URL ( url ) , { parentURL : url } ) . resolvedHREF ;
355- // This should only occur if the module hasn't been fetched yet
356- if ( typeof url !== 'string' ) { // [2]
357- throw new ERR_INTERNAL_ASSERTION ( `Base url for module ${ url } not loaded.` ) ;
355+ // Unless a custom loader bypassed the fetch cache, in which case we just
356+ // use the original url
357+ if ( inFetchCache ( url ) ) {
358+ const module = fetchModule ( new URL ( url ) , { parentURL : url } ) ;
359+ if ( typeof module ?. resolvedHREF === 'string' ) {
360+ return module . resolvedHREF ;
361+ }
362+ // Internal error
363+ throw new ERR_INTERNAL_ASSERTION (
364+ `Base url for module ${ url } not loaded.`
365+ ) ;
366+ } else {
367+ // A custom loader was used instead of network-imports.
368+ // Adding support for a response URL resolve return in custom loaders is
369+ // pending.
370+ return url ;
358371 }
359372 }
360373 return url ;
0 commit comments