diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/node/mod.rs | 90 | ||||
-rw-r--r-- | cli/tools/repl/session.rs | 4 | ||||
-rw-r--r-- | cli/worker.rs | 11 |
3 files changed, 14 insertions, 91 deletions
diff --git a/cli/node/mod.rs b/cli/node/mod.rs index dffcb7437..c5d3de968 100644 --- a/cli/node/mod.rs +++ b/cli/node/mod.rs @@ -13,11 +13,11 @@ use deno_core::anyhow::bail; use deno_core::anyhow::Context; use deno_core::error::generic_error; use deno_core::error::AnyError; -use deno_core::located_script_name; use deno_core::serde_json::Value; use deno_core::url::Url; -use deno_core::JsRuntime; +use deno_runtime::deno_node; use deno_runtime::deno_node::errors; +use deno_runtime::deno_node::find_builtin_node_module; use deno_runtime::deno_node::get_closest_package_json; use deno_runtime::deno_node::legacy_main_resolve; use deno_runtime::deno_node::package_exports_resolve; @@ -25,7 +25,6 @@ use deno_runtime::deno_node::package_imports_resolve; use deno_runtime::deno_node::package_resolve; use deno_runtime::deno_node::path_to_declaration_path; use deno_runtime::deno_node::NodeModuleKind; -use deno_runtime::deno_node::NodeModulePolyfill; use deno_runtime::deno_node::NodeModulePolyfillSpecifier; use deno_runtime::deno_node::NodePermissions; use deno_runtime::deno_node::NodeResolutionMode; @@ -33,8 +32,6 @@ use deno_runtime::deno_node::PackageJson; use deno_runtime::deno_node::PathClean; use deno_runtime::deno_node::RequireNpmResolver; use deno_runtime::deno_node::DEFAULT_CONDITIONS; -use deno_runtime::deno_node::NODE_GLOBAL_THIS_NAME; -use deno_runtime::deno_node::SUPPORTED_BUILTIN_NODE_MODULES; use deno_runtime::permissions::PermissionsContainer; use once_cell::sync::Lazy; use regex::Regex; @@ -123,16 +120,6 @@ static NODE_COMPAT_URL: Lazy<Url> = Lazy::new(|| { pub static MODULE_ALL_URL: Lazy<Url> = Lazy::new(|| NODE_COMPAT_URL.join("node/module_all.ts").unwrap()); -fn find_builtin_node_module(specifier: &str) -> Option<&NodeModulePolyfill> { - SUPPORTED_BUILTIN_NODE_MODULES - .iter() - .find(|m| m.name == specifier) -} - -fn is_builtin_node_module(specifier: &str) -> bool { - find_builtin_node_module(specifier).is_some() -} - pub fn resolve_builtin_node_module(specifier: &str) -> Result<Url, AnyError> { if let Some(module) = find_builtin_node_module(specifier) { match module.specifier { @@ -203,49 +190,6 @@ static RESERVED_WORDS: Lazy<HashSet<&str>> = Lazy::new(|| { ]) }); -pub async fn initialize_runtime( - js_runtime: &mut JsRuntime, - uses_local_node_modules_dir: bool, -) -> Result<(), AnyError> { - let source_code = &format!( - r#"(async function loadBuiltinNodeModules(moduleAllUrl, nodeGlobalThisName, usesLocalNodeModulesDir) {{ - const moduleAll = await import(moduleAllUrl); - Deno[Deno.internal].node.initialize(moduleAll.default, nodeGlobalThisName); - if (usesLocalNodeModulesDir) {{ - Deno[Deno.internal].require.setUsesLocalNodeModulesDir(); - }} - }})('{}', '{}', {});"#, - MODULE_ALL_URL.as_str(), - NODE_GLOBAL_THIS_NAME.as_str(), - uses_local_node_modules_dir, - ); - - let value = - js_runtime.execute_script(&located_script_name!(), source_code)?; - js_runtime.resolve_value(value).await?; - Ok(()) -} - -pub async fn initialize_binary_command( - js_runtime: &mut JsRuntime, - binary_name: &str, -) -> Result<(), AnyError> { - // overwrite what's done in deno_std in order to set the binary arg name - let source_code = &format!( - r#"(async function initializeBinaryCommand(binaryName) {{ - const process = Deno[Deno.internal].node.globalThis.process; - Object.defineProperty(process.argv, "0", {{ - get: () => binaryName, - }}); - }})('{binary_name}');"#, - ); - - let value = - js_runtime.execute_script(&located_script_name!(), source_code)?; - js_runtime.resolve_value(value).await?; - Ok(()) -} - /// This function is an implementation of `defaultResolve` in /// `lib/internal/modules/esm/resolve.js` from Node. pub fn node_resolve( @@ -258,7 +202,7 @@ pub fn node_resolve( // Note: if we are here, then the referrer is an esm module // TODO(bartlomieju): skipped "policy" part as we don't plan to support it - if is_builtin_node_module(specifier) { + if deno_node::is_builtin_node_module(specifier) { return Ok(Some(NodeResolution::BuiltIn(specifier.to_string()))); } @@ -273,7 +217,7 @@ pub fn node_resolve( let split_specifier = url.as_str().split(':'); let specifier = split_specifier.skip(1).collect::<String>(); - if is_builtin_node_module(&specifier) { + if deno_node::is_builtin_node_module(&specifier) { return Ok(Some(NodeResolution::BuiltIn(specifier))); } } @@ -451,32 +395,6 @@ fn resolve_bin_entry_value<'a>( } } -pub fn load_cjs_module_from_ext_node( - js_runtime: &mut JsRuntime, - module: &str, - main: bool, - inspect_brk: bool, -) -> Result<(), AnyError> { - fn escape_for_single_quote_string(text: &str) -> String { - text.replace('\\', r"\\").replace('\'', r"\'") - } - - let source_code = &format!( - r#"(function loadCjsModule(module, inspectBrk) {{ - if (inspectBrk) {{ - Deno[Deno.internal].require.setInspectBrk(); - }} - Deno[Deno.internal].require.Module._load(module, null, {main}); - }})('{module}', {inspect_brk});"#, - main = main, - module = escape_for_single_quote_string(module), - inspect_brk = inspect_brk, - ); - - js_runtime.execute_script(&located_script_name!(), source_code)?; - Ok(()) -} - fn package_config_resolve( package_subpath: &str, package_dir: &Path, diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs index 0e40a1e32..18b40a1b9 100644 --- a/cli/tools/repl/session.rs +++ b/cli/tools/repl/session.rs @@ -19,6 +19,7 @@ use deno_core::serde_json; use deno_core::serde_json::Value; use deno_core::LocalInspectorSession; use deno_graph::source::Resolver; +use deno_runtime::deno_node; use deno_runtime::worker::MainWorker; use super::cdp; @@ -460,8 +461,9 @@ impl ReplSession { 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( + deno_node::initialize_runtime( &mut self.worker.js_runtime, + crate::node::MODULE_ALL_URL.as_str(), self.proc_state.options.node_modules_dir(), ) .await?; diff --git a/cli/worker.rs b/cli/worker.rs index 60663ebc0..3748c007b 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -15,6 +15,7 @@ use deno_core::v8; use deno_core::Extension; use deno_core::ModuleId; use deno_runtime::colors; +use deno_runtime::deno_node; use deno_runtime::fmt_errors::format_js_error; use deno_runtime::ops::worker_host::CreateWebWorkerCb; use deno_runtime::ops::worker_host::WorkerEventCb; @@ -68,7 +69,7 @@ impl CliMainWorker { if self.is_main_cjs { self.ps.prepare_node_std_graph().await?; self.initialize_main_module_for_node().await?; - node::load_cjs_module_from_ext_node( + deno_node::load_cjs_module( &mut self.worker.js_runtime, &self.main_module.to_file_path().unwrap().to_string_lossy(), true, @@ -304,8 +305,9 @@ impl CliMainWorker { async fn initialize_main_module_for_node(&mut self) -> Result<(), AnyError> { self.ps.prepare_node_std_graph().await?; - node::initialize_runtime( + deno_node::initialize_runtime( &mut self.worker.js_runtime, + node::MODULE_ALL_URL.as_str(), self.ps.options.node_modules_dir(), ) .await?; @@ -317,7 +319,7 @@ impl CliMainWorker { .sub_path .as_deref() .unwrap_or(pkg_ref.req.name.as_str()); - node::initialize_binary_command( + deno_node::initialize_binary_command( &mut self.worker.js_runtime, binary_name, ) @@ -626,8 +628,9 @@ fn create_web_worker_pre_execute_module_callback( let fut = async move { // this will be up to date after pre-load if ps.npm_resolver.has_packages() { - node::initialize_runtime( + deno_node::initialize_runtime( &mut worker.js_runtime, + node::MODULE_ALL_URL.as_str(), ps.options.node_modules_dir(), ) .await?; |