0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 17:34:47 -05:00

feat(npm): support npm specifiers in remote modules without --unstable (#17889)

Closes #17455
This commit is contained in:
David Sherret 2023-02-23 09:48:29 -05:00 committed by GitHub
parent 6de815859b
commit 998aeff3d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 31 deletions

View file

@ -497,39 +497,27 @@ impl ProcState {
let graph_data = self.graph_data.read(); let graph_data = self.graph_data.read();
let graph = &graph_data.graph; let graph = &graph_data.graph;
let maybe_resolved = match graph.get(&referrer) { let maybe_resolved = match graph.get(&referrer) {
Some(Module::Esm(module)) => module Some(Module::Esm(module)) => {
.dependencies module.dependencies.get(specifier).map(|d| &d.maybe_code)
.get(specifier) }
.map(|d| (&module.specifier, &d.maybe_code)),
_ => None, _ => None,
}; };
match maybe_resolved { match maybe_resolved {
Some((found_referrer, Resolution::Ok(resolved))) => { Some(Resolution::Ok(resolved)) => {
let specifier = &resolved.specifier; let specifier = &resolved.specifier;
return match graph.get(specifier) { return match graph.get(specifier) {
Some(Module::Npm(module)) => { Some(Module::Npm(module)) => self
if !self.options.unstable() .handle_node_resolve_result(node::node_resolve_npm_reference(
&& matches!(found_referrer.scheme(), "http" | "https") &module.nv_reference,
{ NodeResolutionMode::Execution,
return Err(custom_error( &self.npm_resolver,
"NotSupported", permissions,
format!("importing npm specifiers in remote modules requires the --unstable flag (referrer: {found_referrer})"), ))
)); .with_context(|| {
} format!("Could not resolve '{}'.", module.nv_reference)
}),
self
.handle_node_resolve_result(node::node_resolve_npm_reference(
&module.nv_reference,
NodeResolutionMode::Execution,
&self.npm_resolver,
permissions,
))
.with_context(|| {
format!("Could not resolve '{}'.", module.nv_reference)
})
}
Some(Module::Node(module)) => { Some(Module::Node(module)) => {
node::resolve_builtin_node_module(&module.module_name) node::resolve_builtin_node_module(&module.module_name)
} }
@ -539,13 +527,13 @@ impl ProcState {
None => Ok(specifier.clone()), None => Ok(specifier.clone()),
}; };
} }
Some((_, Resolution::Err(err))) => { Some(Resolution::Err(err)) => {
return Err(custom_error( return Err(custom_error(
"TypeError", "TypeError",
format!("{}\n", err.to_string_with_range()), format!("{}\n", err.to_string_with_range()),
)) ))
} }
Some((_, Resolution::None)) | None => {} Some(Resolution::None) | None => {}
} }
} }

View file

@ -217,11 +217,11 @@ itest!(sub_paths {
}); });
itest!(remote_npm_specifier { itest!(remote_npm_specifier {
args: "run --quiet npm/remote_npm_specifier/main.ts", args: "run --quiet -A npm/remote_npm_specifier/main.ts",
output: "npm/remote_npm_specifier/main.out", output: "npm/remote_npm_specifier/main.out",
envs: env_vars_for_npm_tests(), envs: env_vars_for_npm_tests(),
http_server: true, http_server: true,
exit_code: 1, exit_code: 0,
}); });
itest!(tarball_with_global_header { itest!(tarball_with_global_header {

View file

@ -1 +1 @@
error: importing npm specifiers in remote modules requires the --unstable flag (referrer: http://localhost:4545/npm/remote_npm_specifier/remote.ts) test