diff options
-rw-r--r-- | cli/compat/mod.rs | 15 | ||||
-rw-r--r-- | cli/main.rs | 2 | ||||
-rw-r--r-- | cli/tests/integration/compat_tests.rs | 12 |
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")); +} |