diff options
Diffstat (limited to 'cli/worker.rs')
-rw-r--r-- | cli/worker.rs | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/cli/worker.rs b/cli/worker.rs index b2cc508bb..2069690e0 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -10,6 +10,7 @@ use deno_core::located_script_name; use deno_core::serde_json::json; use deno_core::Extension; use deno_core::ModuleId; +use deno_graph::source::ResolveResponse; use deno_runtime::colors; use deno_runtime::ops::worker_host::CreateWebWorkerCb; use deno_runtime::ops::worker_host::WorkerEventCb; @@ -26,6 +27,7 @@ use crate::errors; use crate::fmt_errors::format_js_error; use crate::module_loader::CliModuleLoader; use crate::node; +use crate::npm::NpmPackageReference; use crate::ops; use crate::proc_state::ProcState; use crate::tools; @@ -35,6 +37,7 @@ use crate::version; pub struct CliMainWorker { main_module: ModuleSpecifier, + is_main_cjs: bool, worker: MainWorker, ps: ProcState, } @@ -99,8 +102,14 @@ impl CliMainWorker { true, )?; } + } else if self.is_main_cjs { + node::initialize_runtime(&mut self.worker.js_runtime).await?; + node::load_cjs_module_from_ext_node( + &mut self.worker.js_runtime, + &self.main_module.to_file_path().unwrap().to_string_lossy(), + true, + )?; } else { - // Regular ES module execution self.execute_main_module_possibly_with_npm().await?; } @@ -438,13 +447,31 @@ impl CliMainWorker { } } -pub fn create_main_worker( +pub async fn create_main_worker( ps: &ProcState, main_module: ModuleSpecifier, permissions: Permissions, mut custom_extensions: Vec<Extension>, stdio: deno_runtime::ops::io::Stdio, -) -> CliMainWorker { +) -> Result<CliMainWorker, AnyError> { + let (main_module, is_main_cjs) = if let Ok(package_ref) = + NpmPackageReference::from_specifier(&main_module) + { + ps.npm_resolver + .add_package_reqs(vec![package_ref.req.clone()]) + .await?; + ps.npm_resolver.cache_packages().await?; + ps.prepare_node_std_graph().await?; + let resolve_response = node::node_resolve_binary_export( + &package_ref.req, + package_ref.sub_path.as_deref(), + &ps.npm_resolver, + )?; + let is_main_cjs = matches!(resolve_response, ResolveResponse::CommonJs(_)); + (resolve_response.to_result()?, is_main_cjs) + } else { + (main_module, false) + }; let module_loader = CliModuleLoader::new(ps.clone()); let maybe_inspector_server = ps.maybe_inspector_server.clone(); @@ -518,11 +545,12 @@ pub fn create_main_worker( permissions, options, ); - CliMainWorker { + Ok(CliMainWorker { main_module, + is_main_cjs, worker, ps: ps.clone(), - } + }) } fn create_web_worker_preload_module_callback( |