mirror of
https://github.com/denoland/deno.git
synced 2024-10-29 08:58:01 -04:00
parent
4f67f0cc60
commit
88c4d3145b
4 changed files with 38 additions and 1 deletions
|
@ -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());
|
||||
|
|
1
cli/tests/module_graph/file_tests-b-mod.js
Normal file
1
cli/tests/module_graph/file_tests-b-mod.js
Normal file
|
@ -0,0 +1 @@
|
|||
export const b = "b";
|
3
cli/tests/module_graph/file_tests-importremap.ts
Normal file
3
cli/tests/module_graph/file_tests-importremap.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
import * as a from "https://deno.land/x/a/mod.ts";
|
||||
|
||||
console.log(a);
|
1
cli/tests/module_graph/https_deno.land-x-a-mod.ts
Normal file
1
cli/tests/module_graph/https_deno.land-x-a-mod.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export * as b from "../b/mod.js";
|
Loading…
Reference in a new issue