diff options
Diffstat (limited to 'cli/proc_state.rs')
-rw-r--r-- | cli/proc_state.rs | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/cli/proc_state.rs b/cli/proc_state.rs index 16e80d6f6..fd5ad4840 100644 --- a/cli/proc_state.rs +++ b/cli/proc_state.rs @@ -23,7 +23,7 @@ use crate::graph_util::ModuleEntry; use crate::http_util::HttpClient; use crate::node; use crate::node::NodeResolution; -use crate::npm::resolve_npm_package_reqs; +use crate::npm::resolve_graph_npm_info; use crate::npm::NpmCache; use crate::npm::NpmPackageReference; use crate::npm::NpmPackageResolver; @@ -261,20 +261,16 @@ impl ProcState { http_client.clone(), progress_bar.clone(), ); - let maybe_lockfile = lockfile.as_ref().cloned(); - let mut npm_resolver = NpmPackageResolver::new( + let npm_resolver = NpmPackageResolver::new_with_maybe_lockfile( npm_cache.clone(), api, cli_options.no_npm(), cli_options .resolve_local_node_modules_folder() .with_context(|| "Resolving local node_modules folder.")?, - ); - if let Some(lockfile) = maybe_lockfile { - npm_resolver - .add_lockfile_and_maybe_regenerate_snapshot(lockfile) - .await?; - } + lockfile.as_ref().cloned(), + ) + .await?; let node_analysis_cache = NodeAnalysisCache::new(Some(dir.node_analysis_db_file_path())); @@ -424,7 +420,7 @@ impl ProcState { graph_data.entries().map(|(s, _)| s).cloned().collect() }; - let npm_package_reqs = { + let (npm_package_reqs, has_node_builtin_specifier) = { let mut graph_data = self.graph_data.write(); graph_data.add_graph(&graph); let check_js = self.options.check_js(); @@ -435,7 +431,10 @@ impl ProcState { check_js, ) .unwrap()?; - graph_data.npm_package_reqs().clone() + ( + graph_data.npm_package_reqs().clone(), + graph_data.has_node_builtin_specifier(), + ) }; if !npm_package_reqs.is_empty() { @@ -443,6 +442,15 @@ impl ProcState { self.prepare_node_std_graph().await?; } + if has_node_builtin_specifier + && self.options.type_check_mode() != TypeCheckMode::None + { + self + .npm_resolver + .inject_synthetic_types_node_package() + .await?; + } + drop(_pb_clear_guard); // type check if necessary @@ -614,6 +622,11 @@ impl ProcState { } } + // Built-in Node modules + if let Some(module_name) = specifier.strip_prefix("node:") { + return node::resolve_builtin_node_module(module_name); + } + // FIXME(bartlomieju): this is a hacky way to provide compatibility with REPL // and `Deno.core.evalContext` API. Ideally we should always have a referrer filled // but sadly that's not the case due to missing APIs in V8. @@ -732,9 +745,20 @@ impl ProcState { .await; // add the found npm package requirements to the npm resolver and cache them - let npm_package_reqs = resolve_npm_package_reqs(&graph); - if !npm_package_reqs.is_empty() { - self.npm_resolver.add_package_reqs(npm_package_reqs).await?; + let graph_npm_info = resolve_graph_npm_info(&graph); + if !graph_npm_info.package_reqs.is_empty() { + self + .npm_resolver + .add_package_reqs(graph_npm_info.package_reqs) + .await?; + } + if graph_npm_info.has_node_builtin_specifier + && self.options.type_check_mode() != TypeCheckMode::None + { + self + .npm_resolver + .inject_synthetic_types_node_package() + .await?; } Ok(graph) |