summaryrefslogtreecommitdiff
path: root/cli/worker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/worker.rs')
-rw-r--r--cli/worker.rs38
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(