feat: binary npm commands (#15542)

This commit is contained in:
David Sherret 2022-08-23 10:39:19 -04:00 committed by GitHub
parent 362af63c6f
commit e7367044d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 2389 additions and 196 deletions

View file

@ -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(