@@ -441,7 +441,9 @@ impl Module {
441
441
} else {
442
442
None
443
443
} ;
444
+ let mut remapped_import = false ;
444
445
let specifier = if let Some ( module_specifier) = maybe_resolve {
446
+ remapped_import = true ;
445
447
module_specifier
446
448
} else {
447
449
ModuleSpecifier :: resolve_import ( specifier, self . specifier . as_str ( ) ) ?
@@ -462,9 +464,11 @@ impl Module {
462
464
) ;
463
465
}
464
466
465
- // Disallow a remote URL from trying to import a local URL
467
+ // Disallow a remote URL from trying to import a local URL, unless it is a
468
+ // remapped import via the import map
466
469
if ( referrer_scheme == "https" || referrer_scheme == "http" )
467
470
&& !( specifier_scheme == "https" || specifier_scheme == "http" )
471
+ && !remapped_import
468
472
{
469
473
return Err (
470
474
GraphError :: InvalidLocalImport ( specifier. clone ( ) , location) . into ( ) ,
@@ -2211,6 +2215,34 @@ pub mod tests {
2211
2215
}
2212
2216
}
2213
2217
2218
+ #[ tokio:: test]
2219
+ async fn test_graph_import_map_remote_to_local ( ) {
2220
+ let c = PathBuf :: from ( env:: var_os ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) ;
2221
+ let fixtures = c. join ( "tests/module_graph" ) ;
2222
+ let maybe_import_map = Some (
2223
+ ImportMap :: from_json (
2224
+ "file:///tests/importmap.json" ,
2225
+ r#"{
2226
+ "imports": {
2227
+ "https://deno.land/x/b/mod.js": "./b/mod.js"
2228
+ }
2229
+ }
2230
+ "# ,
2231
+ )
2232
+ . expect ( "could not parse import map" ) ,
2233
+ ) ;
2234
+ let handler = Rc :: new ( RefCell :: new ( MockSpecifierHandler {
2235
+ fixtures,
2236
+ ..Default :: default ( )
2237
+ } ) ) ;
2238
+ let mut builder = GraphBuilder :: new ( handler, maybe_import_map, None ) ;
2239
+ let specifier =
2240
+ ModuleSpecifier :: resolve_url_or_path ( "file:///tests/importremap.ts" )
2241
+ . expect ( "could not resolve module" ) ;
2242
+ builder. add ( & specifier, false ) . await . expect ( "could not add" ) ;
2243
+ builder. get_graph ( ) ;
2244
+ }
2245
+
2214
2246
#[ tokio:: test]
2215
2247
async fn test_graph_with_lockfile ( ) {
2216
2248
let c = PathBuf :: from ( env:: var_os ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) ;
0 commit comments