summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-02-10 16:26:39 +0100
committerGitHub <noreply@github.com>2023-02-10 10:26:39 -0500
commit46817a0e3dc98197cd3e7af0b33efa3533f44ea0 (patch)
tree6c1912d38cf73977be0e375bba43af877013d7d6 /cli
parent5778e1196e5adbae77e5a05bd7cfb4879b012739 (diff)
refactor: clean up "cli/node/mod.rs" and "ext/node" (#17713)
This commit moves some code around from "cli/node/mod.rs" to "ext/node". Additionally "ext/node" was changed to factor out "ops.rs" and "polyfill.rs" modules.
Diffstat (limited to 'cli')
-rw-r--r--cli/node/mod.rs90
-rw-r--r--cli/tools/repl/session.rs4
-rw-r--r--cli/worker.rs11
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?;