summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/compat/mod.rs15
-rw-r--r--cli/main.rs2
-rw-r--r--cli/tests/integration/compat_tests.rs12
3 files changed, 29 insertions, 0 deletions
diff --git a/cli/compat/mod.rs b/cli/compat/mod.rs
index 4ed02dfe7..401e1ab40 100644
--- a/cli/compat/mod.rs
+++ b/cli/compat/mod.rs
@@ -140,3 +140,18 @@ pub(crate) fn add_global_require(
fn escape_for_single_quote_string(text: &str) -> String {
text.replace(r"\", r"\\").replace("'", r"\'")
}
+
+pub fn setup_builtin_modules(
+ js_runtime: &mut JsRuntime,
+) -> Result<(), AnyError> {
+ let mut script = String::new();
+ for module in SUPPORTED_MODULES {
+ // skipping the modules that contains '/' as they are not available in NodeJS repl as well
+ if !module.contains('/') {
+ script = format!("{}const {} = require('{}');\n", script, module, module);
+ }
+ }
+
+ js_runtime.execute_script("setup_node_builtins.js", &script)?;
+ Ok(())
+}
diff --git a/cli/main.rs b/cli/main.rs
index 53069a796..5fe5d6659 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -902,6 +902,8 @@ async fn repl_command(
if flags.compat {
worker.execute_side_module(&compat::GLOBAL_URL).await?;
compat::add_global_require(&mut worker.js_runtime, main_module.as_str())?;
+ worker.run_event_loop(false).await?;
+ compat::setup_builtin_modules(&mut worker.js_runtime)?;
}
worker.run_event_loop(false).await?;
diff --git a/cli/tests/integration/compat_tests.rs b/cli/tests/integration/compat_tests.rs
index 714329dc2..7eff64f12 100644
--- a/cli/tests/integration/compat_tests.rs
+++ b/cli/tests/integration/compat_tests.rs
@@ -132,3 +132,15 @@ fn node_compat_url() {
assert!(!err.is_empty());
assert!(err.contains("file:///non_existent/node/global.ts"));
}
+
+#[test]
+fn native_modules_as_global_vars() {
+ let (out, _err) = util::run_and_collect_output_with_args(
+ true,
+ vec!["repl", "--compat", "--unstable", "--quiet"],
+ Some(vec!["if(cluster && v8 && sys) { true } else { false }"]),
+ None,
+ false,
+ );
+ assert!(out.contains("true"));
+}