summaryrefslogtreecommitdiff
path: root/cli/module_graph.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/module_graph.rs')
-rw-r--r--cli/module_graph.rs34
1 files changed, 33 insertions, 1 deletions
diff --git a/cli/module_graph.rs b/cli/module_graph.rs
index 9b3d79a94..4d0a4419f 100644
--- a/cli/module_graph.rs
+++ b/cli/module_graph.rs
@@ -441,7 +441,9 @@ impl Module {
} else {
None
};
+ let mut remapped_import = false;
let specifier = if let Some(module_specifier) = maybe_resolve {
+ remapped_import = true;
module_specifier
} else {
ModuleSpecifier::resolve_import(specifier, self.specifier.as_str())?
@@ -462,9 +464,11 @@ impl Module {
);
}
- // Disallow a remote URL from trying to import a local URL
+ // Disallow a remote URL from trying to import a local URL, unless it is a
+ // remapped import via the import map
if (referrer_scheme == "https" || referrer_scheme == "http")
&& !(specifier_scheme == "https" || specifier_scheme == "http")
+ && !remapped_import
{
return Err(
GraphError::InvalidLocalImport(specifier.clone(), location).into(),
@@ -2212,6 +2216,34 @@ pub mod tests {
}
#[tokio::test]
+ async fn test_graph_import_map_remote_to_local() {
+ let c = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
+ let fixtures = c.join("tests/module_graph");
+ let maybe_import_map = Some(
+ ImportMap::from_json(
+ "file:///tests/importmap.json",
+ r#"{
+ "imports": {
+ "https://deno.land/x/b/mod.js": "./b/mod.js"
+ }
+ }
+ "#,
+ )
+ .expect("could not parse import map"),
+ );
+ let handler = Rc::new(RefCell::new(MockSpecifierHandler {
+ fixtures,
+ ..Default::default()
+ }));
+ let mut builder = GraphBuilder::new(handler, maybe_import_map, None);
+ let specifier =
+ ModuleSpecifier::resolve_url_or_path("file:///tests/importremap.ts")
+ .expect("could not resolve module");
+ builder.add(&specifier, false).await.expect("could not add");
+ builder.get_graph();
+ }
+
+ #[tokio::test]
async fn test_graph_with_lockfile() {
let c = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
let fixtures = c.join("tests/module_graph");