summaryrefslogtreecommitdiff
path: root/cli/factory.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/factory.rs')
-rw-r--r--cli/factory.rs50
1 files changed, 39 insertions, 11 deletions
diff --git a/cli/factory.rs b/cli/factory.rs
index 3bc5ef9e2..a3da40036 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -1,9 +1,11 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+use crate::args::npm_pkg_req_ref_to_binary_command;
use crate::args::CliOptions;
use crate::args::DenoSubcommand;
use crate::args::Flags;
use crate::args::Lockfile;
+use crate::args::PackageJsonDepsProvider;
use crate::args::StorageKeyResolver;
use crate::args::TsConfigType;
use crate::cache::Caches;
@@ -30,6 +32,7 @@ use crate::npm::NpmCache;
use crate::npm::NpmResolution;
use crate::npm::PackageJsonDepsInstaller;
use crate::resolver::CliGraphResolver;
+use crate::standalone::DenoCompileBinaryWriter;
use crate::tools::check::TypeChecker;
use crate::util::progress_bar::ProgressBar;
use crate::util::progress_bar::ProgressBarStyle;
@@ -151,6 +154,7 @@ struct CliFactoryServices {
npm_cache: Deferred<Arc<NpmCache>>,
npm_resolver: Deferred<Arc<CliNpmResolver>>,
npm_resolution: Deferred<Arc<NpmResolution>>,
+ package_json_deps_provider: Deferred<Arc<PackageJsonDepsProvider>>,
package_json_deps_installer: Deferred<Arc<PackageJsonDepsInstaller>>,
text_only_progress_bar: Deferred<ProgressBar>,
type_checker: Deferred<Arc<TypeChecker>>,
@@ -301,8 +305,9 @@ impl CliFactory {
.npm_resolver
.get_or_try_init_async(async {
let npm_resolution = self.npm_resolution().await?;
+ let fs = self.fs().clone();
let npm_fs_resolver = create_npm_fs_resolver(
- self.fs().clone(),
+ fs.clone(),
self.npm_cache()?.clone(),
self.text_only_progress_bar(),
CliNpmRegistryApi::default_url().to_owned(),
@@ -310,6 +315,7 @@ impl CliFactory {
self.options.node_modules_dir_path(),
);
Ok(Arc::new(CliNpmResolver::new(
+ fs.clone(),
npm_resolution.clone(),
npm_fs_resolver,
self.maybe_lockfile().as_ref().cloned(),
@@ -318,6 +324,14 @@ impl CliFactory {
.await
}
+ pub fn package_json_deps_provider(&self) -> &Arc<PackageJsonDepsProvider> {
+ self.services.package_json_deps_provider.get_or_init(|| {
+ Arc::new(PackageJsonDepsProvider::new(
+ self.options.maybe_package_json_deps(),
+ ))
+ })
+ }
+
pub async fn package_json_deps_installer(
&self,
) -> Result<&Arc<PackageJsonDepsInstaller>, AnyError> {
@@ -325,12 +339,10 @@ impl CliFactory {
.services
.package_json_deps_installer
.get_or_try_init_async(async {
- let npm_api = self.npm_api()?;
- let npm_resolution = self.npm_resolution().await?;
Ok(Arc::new(PackageJsonDepsInstaller::new(
- npm_api.clone(),
- npm_resolution.clone(),
- self.options.maybe_package_json_deps(),
+ self.package_json_deps_provider().clone(),
+ self.npm_api()?.clone(),
+ self.npm_resolution().await?.clone(),
)))
})
.await
@@ -365,6 +377,7 @@ impl CliFactory {
self.options.no_npm(),
self.npm_api()?.clone(),
self.npm_resolution().await?.clone(),
+ self.package_json_deps_provider().clone(),
self.package_json_deps_installer().await?.clone(),
)))
})
@@ -535,6 +548,21 @@ impl CliFactory {
self.services.cjs_resolutions.get_or_init(Default::default)
}
+ pub async fn create_compile_binary_writer(
+ &self,
+ ) -> Result<DenoCompileBinaryWriter, AnyError> {
+ Ok(DenoCompileBinaryWriter::new(
+ self.file_fetcher()?,
+ self.http_client(),
+ self.deno_dir()?,
+ self.npm_api()?,
+ self.npm_cache()?,
+ self.npm_resolver().await?,
+ self.npm_resolution().await?,
+ self.package_json_deps_provider(),
+ ))
+ }
+
/// Gets a function that can be used to create a CliMainWorkerFactory
/// for a file watcher.
pub async fn create_cli_main_worker_factory_func(
@@ -572,6 +600,7 @@ impl CliFactory {
NpmModuleLoader::new(
cjs_resolutions.clone(),
node_code_translator.clone(),
+ fs.clone(),
node_resolver.clone(),
),
)),
@@ -587,6 +616,7 @@ impl CliFactory {
&self,
) -> Result<CliMainWorkerFactory, AnyError> {
let node_resolver = self.node_resolver().await?;
+ let fs = self.fs();
Ok(CliMainWorkerFactory::new(
StorageKeyResolver::from_options(&self.options),
self.npm_resolver().await?.clone(),
@@ -603,6 +633,7 @@ impl CliFactory {
NpmModuleLoader::new(
self.cjs_resolutions().clone(),
self.node_code_translator().await?.clone(),
+ fs.clone(),
node_resolver.clone(),
),
)),
@@ -637,11 +668,8 @@ impl CliFactory {
if let Ok(pkg_ref) = NpmPackageReqReference::from_str(&flags.script) {
// if the user ran a binary command, we'll need to set process.argv[0]
// to be the name of the binary command instead of deno
- let binary_name = pkg_ref
- .sub_path
- .as_deref()
- .unwrap_or(pkg_ref.req.name.as_str());
- maybe_binary_command_name = Some(binary_name.to_string());
+ maybe_binary_command_name =
+ Some(npm_pkg_req_ref_to_binary_command(&pkg_ref));
}
}
maybe_binary_command_name