0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-10-29 08:58:01 -04:00

fix(cli): allow remapping to locals for import map (#8262)

Fixes #7723
This commit is contained in:
Kitson Kelly 2020-11-07 15:04:22 +11:00 committed by GitHub
parent 4f67f0cc60
commit 88c4d3145b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 1 deletions

View file

@ -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(),
@ -2211,6 +2215,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());

View file

@ -0,0 +1 @@
export const b = "b";

View file

@ -0,0 +1,3 @@
import * as a from "https://deno.land/x/a/mod.ts";
console.log(a);

View file

@ -0,0 +1 @@
export * as b from "../b/mod.js";