diff options
| author | David Sherret <dsherret@users.noreply.github.com> | 2023-02-22 14:15:25 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-22 14:15:25 -0500 |
| commit | a6ca4d0d61c95b9f7fa79ecce81a31a6d1f6cc5d (patch) | |
| tree | 278a915d7722a8a3d1fffbfa1f3a12752f44d13f /cli/module_loader.rs | |
| parent | 0f9daaeacb402a7199e58b14ad01ec0091ac2c8d (diff) | |
refactor: use deno_graph for npm specifiers (#17858)
This changes npm specifiers to be handled by deno_graph and resolved to
an npm package name and version when the specifier is encountered. It
also slightly changes how npm specifier resolution occurs—previously it
would collect all the npm specifiers and resolve them all at once, but
now it resolves them on the fly as they are encountered in the module
graph.
https://github.com/denoland/deno_graph/pull/232
---------
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Diffstat (limited to 'cli/module_loader.rs')
| -rw-r--r-- | cli/module_loader.rs | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/cli/module_loader.rs b/cli/module_loader.rs index 462b41cbb..4ddb297a5 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -21,6 +21,8 @@ use deno_core::ModuleType; use deno_core::OpState; use deno_core::ResolutionKind; use deno_core::SourceMapGetter; +use deno_graph::EsmModule; +use deno_graph::JsonModule; use deno_runtime::permissions::PermissionsContainer; use std::cell::RefCell; use std::pin::Pin; @@ -78,23 +80,33 @@ impl CliModuleLoader { maybe_referrer: Option<ModuleSpecifier>, ) -> Result<ModuleCodeSource, AnyError> { if specifier.scheme() == "node" { - unreachable!("Node built-in modules should be handled internally."); + unreachable!(); // Node built-in modules should be handled internally. } let graph = self.ps.graph(); match graph.get(specifier) { - Some(deno_graph::Module { - maybe_source: Some(code), + Some(deno_graph::Module::Json(JsonModule { + source, media_type, specifier, .. - }) => { + })) => Ok(ModuleCodeSource { + code: source.to_string(), + found_url: specifier.clone(), + media_type: *media_type, + }), + Some(deno_graph::Module::Esm(EsmModule { + source, + media_type, + specifier, + .. + })) => { let code = match media_type { MediaType::JavaScript | MediaType::Unknown | MediaType::Cjs | MediaType::Mjs - | MediaType::Json => code.to_string(), + | MediaType::Json => source.to_string(), MediaType::Dts | MediaType::Dcts | MediaType::Dmts => "".to_string(), MediaType::TypeScript | MediaType::Mts @@ -107,7 +119,7 @@ impl CliModuleLoader { &self.ps.parsed_source_cache, specifier, *media_type, - code, + source, &self.ps.emit_options, self.ps.emit_options_hash, )? @@ -295,10 +307,8 @@ impl SourceMapGetter for CliModuleLoader { ) -> Option<String> { let graph = self.ps.graph(); let code = match graph.get(&resolve_url(file_name).ok()?) { - Some(deno_graph::Module { - maybe_source: Some(code), - .. - }) => code, + Some(deno_graph::Module::Esm(module)) => &module.source, + Some(deno_graph::Module::Json(module)) => &module.source, _ => return None, }; // Do NOT use .lines(): it skips the terminating empty line. |
