summaryrefslogtreecommitdiff
path: root/cli/tools/repl/session.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-02-01 16:37:05 -0500
committerGitHub <noreply@github.com>2023-02-01 16:37:05 -0500
commitdc854e83a4bd7c1726532502595948f604f0edc1 (patch)
tree1299eace805b8b66e389c6fb626a2acd44faff97 /cli/tools/repl/session.rs
parentf6f76a76b2b06c6546bb00117e61f4c743d1eba6 (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.rs27
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(())
}