diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-09-13 00:11:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-12 18:11:32 -0400 |
commit | 233d5422fdf7493bbd1768c611811085c0ff46ab (patch) | |
tree | 1b5638dd94732e2bf76187fab99f54cbff4616e2 | |
parent | 98454c1eb802b91a8c77dd97888a8994c85dfa46 (diff) |
fix(npm): use shim from deno_node crate for 'module' built-in module (#15881)
-rw-r--r-- | cli/module_loader.rs | 16 | ||||
-rw-r--r-- | cli/node/mod.rs | 12 | ||||
-rw-r--r-- | cli/tests/integration/npm_tests.rs | 7 | ||||
-rw-r--r-- | cli/tests/testdata/npm/builtin_module_module/main.js | 1 | ||||
-rw-r--r-- | cli/tests/testdata/npm/builtin_module_module/main.out | 2 | ||||
-rw-r--r-- | cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/index.js | 5 | ||||
-rw-r--r-- | cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/package.json | 5 |
7 files changed, 41 insertions, 7 deletions
diff --git a/cli/module_loader.rs b/cli/module_loader.rs index d3293c957..2a7a69dca 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -63,6 +63,7 @@ impl CliModuleLoader { fn load_prepared_module( &self, specifier: &ModuleSpecifier, + maybe_referrer: Option<ModuleSpecifier>, ) -> Result<ModuleCodeSource, AnyError> { if specifier.as_str() == "node:module" { return Ok(ModuleCodeSource { @@ -121,10 +122,13 @@ impl CliModuleLoader { media_type: *media_type, }) } - _ => Err(anyhow!( - "Loading unprepared module: {}", - specifier.to_string() - )), + _ => { + let mut msg = format!("Loading unprepared module: {}", specifier); + if let Some(referrer) = maybe_referrer { + msg = format!("{}, imported from: {}", msg, referrer.as_str()); + } + Err(anyhow!(msg)) + } } } @@ -164,7 +168,7 @@ impl CliModuleLoader { media_type: MediaType::from(specifier), } } else { - self.load_prepared_module(specifier)? + self.load_prepared_module(specifier, maybe_referrer)? }; let code = if self.ps.options.is_inspecting() { // we need the code with the source map in order for @@ -261,7 +265,7 @@ impl SourceMapGetter for CliModuleLoader { "wasm" | "file" | "http" | "https" | "data" | "blob" => (), _ => return None, } - let source = self.load_prepared_module(&specifier).ok()?; + let source = self.load_prepared_module(&specifier, None).ok()?; source_map_from_code(&source.code) } diff --git a/cli/node/mod.rs b/cli/node/mod.rs index 690a21181..cd803cc4f 100644 --- a/cli/node/mod.rs +++ b/cli/node/mod.rs @@ -138,7 +138,10 @@ static SUPPORTED_MODULES: &[NodeModulePolyfill] = &[ }, NodeModulePolyfill { name: "module", - specifier: "node/module.ts", + // NOTE(bartlomieju): `module` is special, because we don't want to use + // `deno_std/node/module.ts`, but instead use a special shim that we + // provide in `ext/node`. + specifier: "[USE `deno_node::MODULE_ES_SHIM` to get this module]", }, NodeModulePolyfill { name: "net", @@ -265,6 +268,13 @@ fn is_builtin_node_module(specifier: &str) -> bool { } pub fn resolve_builtin_node_module(specifier: &str) -> Result<Url, AnyError> { + // NOTE(bartlomieju): `module` is special, because we don't want to use + // `deno_std/node/module.ts`, but instead use a special shim that we + // provide in `ext/node`. + if specifier == "module" { + return Ok(Url::parse("node:module").unwrap()); + } + if let Some(module) = find_builtin_node_module(specifier) { let module_url = NODE_COMPAT_URL.join(module.specifier).unwrap(); return Ok(module_url); diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs index 8bbb89d65..85c31786c 100644 --- a/cli/tests/integration/npm_tests.rs +++ b/cli/tests/integration/npm_tests.rs @@ -402,6 +402,13 @@ itest!(deno_run_non_existent { exit_code: 1, }); +itest!(builtin_module_module { + args: "run --allow-read --quiet --unstable npm/builtin_module_module/main.js", + output: "npm/builtin_module_module/main.out", + envs: env_vars(), + http_server: true, +}); + #[test] fn ensure_registry_files_local() { // ensures the registry files all point at local tarballs diff --git a/cli/tests/testdata/npm/builtin_module_module/main.js b/cli/tests/testdata/npm/builtin_module_module/main.js new file mode 100644 index 000000000..9a036791b --- /dev/null +++ b/cli/tests/testdata/npm/builtin_module_module/main.js @@ -0,0 +1 @@ +import "npm:@denotest/builtin-module-module"; diff --git a/cli/tests/testdata/npm/builtin_module_module/main.out b/cli/tests/testdata/npm/builtin_module_module/main.out new file mode 100644 index 000000000..b0a370638 --- /dev/null +++ b/cli/tests/testdata/npm/builtin_module_module/main.out @@ -0,0 +1,2 @@ +function +function diff --git a/cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/index.js b/cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/index.js new file mode 100644 index 000000000..cb610a613 --- /dev/null +++ b/cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/index.js @@ -0,0 +1,5 @@ +import m1 from "node:module"; +import m2 from "module"; + +console.log(typeof m1.Module); +console.log(typeof m2.Module);
\ No newline at end of file diff --git a/cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/package.json b/cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/package.json new file mode 100644 index 000000000..5167f18a3 --- /dev/null +++ b/cli/tests/testdata/npm/registry/@denotest/builtin-module-module/1.0.0/package.json @@ -0,0 +1,5 @@ +{ + "name": "@denotest/builtin-module-module", + "version": "1.0.0", + "type": "module" +} |