diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-02-01 16:37:05 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-01 16:37:05 -0500 |
commit | dc854e83a4bd7c1726532502595948f604f0edc1 (patch) | |
tree | 1299eace805b8b66e389c6fb626a2acd44faff97 /cli/tools/repl/session.rs | |
parent | f6f76a76b2b06c6546bb00117e61f4c743d1eba6 (diff) |
fix(repl): handle @types/node not being cached in the repl (#17617)
Closes #17599
Diffstat (limited to 'cli/tools/repl/session.rs')
-rw-r--r-- | cli/tools/repl/session.rs | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs index e288ab0e6..0e40a1e32 100644 --- a/cli/tools/repl/session.rs +++ b/cli/tools/repl/session.rs @@ -398,7 +398,9 @@ impl ReplSession { scope_analysis: false, })?; - self.check_for_npm_imports(&parsed_module.program()).await?; + self + .check_for_npm_or_node_imports(&parsed_module.program()) + .await?; let transpiled_src = parsed_module .transpile(&deno_ast::EmitOptions { @@ -428,14 +430,14 @@ impl ReplSession { }) } - async fn check_for_npm_imports( + async fn check_for_npm_or_node_imports( &mut self, program: &swc_ast::Program, ) -> Result<(), AnyError> { let mut collector = ImportCollector::new(); program.visit_with(&mut collector); - let npm_imports = collector + let resolved_imports = collector .imports .iter() .flat_map(|i| { @@ -445,11 +447,17 @@ impl ReplSession { .as_ref() .and_then(|resolver| resolver.resolve(i, &self.referrer).ok()) .or_else(|| ModuleSpecifier::parse(i).ok()) - .and_then(|url| NpmPackageReference::from_specifier(&url).ok()) }) + .collect::<Vec<_>>(); + + let npm_imports = resolved_imports + .iter() + .flat_map(|url| NpmPackageReference::from_specifier(url).ok()) .map(|r| r.req) .collect::<Vec<_>>(); - if !npm_imports.is_empty() { + let has_node_specifier = + resolved_imports.iter().any(|url| url.scheme() == "node"); + if !npm_imports.is_empty() || has_node_specifier { if !self.has_initialized_node_runtime { self.proc_state.prepare_node_std_graph().await?; crate::node::initialize_runtime( @@ -465,6 +473,15 @@ impl ReplSession { .npm_resolver .add_package_reqs(npm_imports) .await?; + + // prevent messages in the repl about @types/node not being cached + if has_node_specifier { + self + .proc_state + .npm_resolver + .inject_synthetic_types_node_package() + .await?; + } } Ok(()) } |