summaryrefslogtreecommitdiff
path: root/cli/tools
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools')
-rw-r--r--cli/tools/bench/mod.rs19
-rw-r--r--cli/tools/bundle.rs16
-rw-r--r--cli/tools/compile.rs6
-rw-r--r--cli/tools/coverage/mod.rs7
-rw-r--r--cli/tools/doc.rs12
-rw-r--r--cli/tools/fmt.rs13
-rw-r--r--cli/tools/info.rs12
-rw-r--r--cli/tools/installer.rs39
-rw-r--r--cli/tools/jupyter/mod.rs8
-rw-r--r--cli/tools/lint/mod.rs13
-rw-r--r--cli/tools/registry/mod.rs10
-rw-r--r--cli/tools/registry/pm.rs19
-rw-r--r--cli/tools/repl/mod.rs9
-rw-r--r--cli/tools/run/mod.rs32
-rw-r--r--cli/tools/task.rs6
-rw-r--r--cli/tools/test/mod.rs17
-rw-r--r--cli/tools/upgrade.rs15
-rw-r--r--cli/tools/vendor/mod.rs4
18 files changed, 144 insertions, 113 deletions
diff --git a/cli/tools/bench/mod.rs b/cli/tools/bench/mod.rs
index 5bbf5ce8d..9cf222c45 100644
--- a/cli/tools/bench/mod.rs
+++ b/cli/tools/bench/mod.rs
@@ -1,12 +1,10 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use crate::args::BenchFlags;
-use crate::args::CliOptions;
use crate::args::Flags;
use crate::colors;
use crate::display::write_json_to_stdout;
use crate::factory::CliFactory;
-use crate::factory::CliFactoryBuilder;
use crate::graph_util::has_graph_root_local_dependent_changed;
use crate::ops;
use crate::tools::test::format_test_error;
@@ -403,14 +401,13 @@ fn has_supported_bench_path_name(path: &Path) -> bool {
}
pub async fn run_benchmarks(
- flags: Flags,
+ flags: Arc<Flags>,
bench_flags: BenchFlags,
) -> Result<(), AnyError> {
- let cli_options = CliOptions::from_flags(flags)?;
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let workspace_bench_options =
cli_options.resolve_workspace_bench_options(&bench_flags);
- let factory = CliFactory::from_cli_options(Arc::new(cli_options));
- let cli_options = factory.cli_options();
// Various bench files should not share the same permissions in terms of
// `PermissionsContainer` - otherwise granting/revoking permissions in one
// file would have impact on other files, which is undesirable.
@@ -464,7 +461,7 @@ pub async fn run_benchmarks(
// TODO(bartlomieju): heavy duplication of code with `cli/tools/test.rs`
pub async fn run_benchmarks_with_watch(
- flags: Flags,
+ flags: Arc<Flags>,
bench_flags: BenchFlags,
) -> Result<(), AnyError> {
file_watcher::watch_func(
@@ -480,9 +477,11 @@ pub async fn run_benchmarks_with_watch(
move |flags, watcher_communicator, changed_paths| {
let bench_flags = bench_flags.clone();
Ok(async move {
- let factory = CliFactoryBuilder::new()
- .build_from_flags_for_watcher(flags, watcher_communicator.clone())?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags_for_watcher(
+ flags,
+ watcher_communicator.clone(),
+ );
+ let cli_options = factory.cli_options()?;
let workspace_bench_options =
cli_options.resolve_workspace_bench_options(&bench_flags);
diff --git a/cli/tools/bundle.rs b/cli/tools/bundle.rs
index ef058f0d0..f2157ecd8 100644
--- a/cli/tools/bundle.rs
+++ b/cli/tools/bundle.rs
@@ -1,6 +1,7 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use std::path::PathBuf;
+use std::sync::Arc;
use deno_core::error::AnyError;
use deno_graph::Module;
@@ -11,13 +12,12 @@ use crate::args::CliOptions;
use crate::args::Flags;
use crate::args::TsConfigType;
use crate::factory::CliFactory;
-use crate::factory::CliFactoryBuilder;
use crate::graph_util::error_for_any_npm_specifier;
use crate::util;
use crate::util::display;
pub async fn bundle(
- flags: Flags,
+ flags: Arc<Flags>,
bundle_flags: BundleFlags,
) -> Result<(), AnyError> {
log::info!(
@@ -35,11 +35,11 @@ pub async fn bundle(
move |flags, watcher_communicator, _changed_paths| {
let bundle_flags = bundle_flags.clone();
Ok(async move {
- let factory = CliFactoryBuilder::new().build_from_flags_for_watcher(
+ let factory = CliFactory::from_flags_for_watcher(
flags,
watcher_communicator.clone(),
- )?;
- let cli_options = factory.cli_options();
+ );
+ let cli_options = factory.cli_options()?;
let _ = watcher_communicator.watch_paths(cli_options.watch_paths());
bundle_action(factory, &bundle_flags).await?;
@@ -49,7 +49,7 @@ pub async fn bundle(
)
.await?;
} else {
- let factory = CliFactory::from_flags(flags)?;
+ let factory = CliFactory::from_flags(flags);
bundle_action(factory, &bundle_flags).await?;
}
@@ -60,11 +60,11 @@ async fn bundle_action(
factory: CliFactory,
bundle_flags: &BundleFlags,
) -> Result<(), AnyError> {
- let cli_options = factory.cli_options();
+ let cli_options = factory.cli_options()?;
let module_specifier = cli_options.resolve_main_module()?;
log::debug!(">>>>> bundle START");
let module_graph_creator = factory.module_graph_creator().await?;
- let cli_options = factory.cli_options();
+ let cli_options = factory.cli_options()?;
let graph = module_graph_creator
.create_graph_and_maybe_check(vec![module_specifier.clone()])
diff --git a/cli/tools/compile.rs b/cli/tools/compile.rs
index 5500f9512..4df8e772b 100644
--- a/cli/tools/compile.rs
+++ b/cli/tools/compile.rs
@@ -22,11 +22,11 @@ use std::sync::Arc;
use super::installer::infer_name_from_url;
pub async fn compile(
- flags: Flags,
+ flags: Arc<Flags>,
compile_flags: CompileFlags,
) -> Result<(), AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let module_graph_creator = factory.module_graph_creator().await?;
let parsed_source_cache = factory.parsed_source_cache();
let binary_writer = factory.create_compile_binary_writer().await?;
diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs
index c9eda3c19..f88b3bc64 100644
--- a/cli/tools/coverage/mod.rs
+++ b/cli/tools/coverage/mod.rs
@@ -32,6 +32,7 @@ use std::io::BufWriter;
use std::io::Write;
use std::path::Path;
use std::path::PathBuf;
+use std::sync::Arc;
use text_lines::TextLines;
use uuid::Uuid;
@@ -473,17 +474,17 @@ fn filter_coverages(
}
pub async fn cover_files(
- flags: Flags,
+ flags: Arc<Flags>,
coverage_flags: CoverageFlags,
) -> Result<(), AnyError> {
if coverage_flags.files.include.is_empty() {
return Err(generic_error("No matching coverage profiles found"));
}
- let factory = CliFactory::from_flags(flags)?;
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let npm_resolver = factory.npm_resolver().await?;
let file_fetcher = factory.file_fetcher()?;
- let cli_options = factory.cli_options();
let emitter = factory.emitter()?;
assert!(!coverage_flags.files.include.is_empty());
diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs
index 138e0a47d..824a3fc38 100644
--- a/cli/tools/doc.rs
+++ b/cli/tools/doc.rs
@@ -29,6 +29,7 @@ use doc::DocDiagnostic;
use indexmap::IndexMap;
use std::collections::BTreeMap;
use std::rc::Rc;
+use std::sync::Arc;
async fn generate_doc_nodes_for_builtin_types(
doc_flags: DocFlags,
@@ -83,9 +84,12 @@ async fn generate_doc_nodes_for_builtin_types(
Ok(IndexMap::from([(source_file_specifier, nodes)]))
}
-pub async fn doc(flags: Flags, doc_flags: DocFlags) -> Result<(), AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+pub async fn doc(
+ flags: Arc<Flags>,
+ doc_flags: DocFlags,
+) -> Result<(), AnyError> {
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let module_info_cache = factory.module_info_cache()?;
let parsed_source_cache = factory.parsed_source_cache();
let capturing_parser = parsed_source_cache.as_capturing_parser();
@@ -102,7 +106,7 @@ pub async fn doc(flags: Flags, doc_flags: DocFlags) -> Result<(), AnyError> {
}
DocSourceFileFlag::Paths(ref source_files) => {
let module_graph_creator = factory.module_graph_creator().await?;
- let maybe_lockfile = factory.maybe_lockfile();
+ let maybe_lockfile = cli_options.maybe_lockfile();
let module_specifiers = collect_specifiers(
FilePatterns {
diff --git a/cli/tools/fmt.rs b/cli/tools/fmt.rs
index 277a79cda..baecb482f 100644
--- a/cli/tools/fmt.rs
+++ b/cli/tools/fmt.rs
@@ -49,7 +49,10 @@ use std::sync::Arc;
use crate::cache::IncrementalCache;
/// Format JavaScript/TypeScript files.
-pub async fn format(flags: Flags, fmt_flags: FmtFlags) -> Result<(), AnyError> {
+pub async fn format(
+ flags: Arc<Flags>,
+ fmt_flags: FmtFlags,
+) -> Result<(), AnyError> {
if fmt_flags.is_stdin() {
let cli_options = CliOptions::from_flags(flags)?;
let start_dir = &cli_options.start_dir;
@@ -74,8 +77,8 @@ pub async fn format(flags: Flags, fmt_flags: FmtFlags) -> Result<(), AnyError> {
move |flags, watcher_communicator, changed_paths| {
let fmt_flags = fmt_flags.clone();
Ok(async move {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let caches = factory.caches()?;
let mut paths_with_options_batches =
resolve_paths_with_options_batches(cli_options, &fmt_flags)?;
@@ -119,9 +122,9 @@ pub async fn format(flags: Flags, fmt_flags: FmtFlags) -> Result<(), AnyError> {
)
.await?;
} else {
- let factory = CliFactory::from_flags(flags)?;
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let caches = factory.caches()?;
- let cli_options = factory.cli_options();
let paths_with_options_batches =
resolve_paths_with_options_batches(cli_options, &fmt_flags)?;
format_files(caches, &fmt_flags, paths_with_options_batches).await?;
diff --git a/cli/tools/info.rs b/cli/tools/info.rs
index 18a4bed57..a15252c7c 100644
--- a/cli/tools/info.rs
+++ b/cli/tools/info.rs
@@ -4,6 +4,7 @@ use std::collections::HashMap;
use std::collections::HashSet;
use std::fmt;
use std::fmt::Write;
+use std::sync::Arc;
use deno_ast::ModuleSpecifier;
use deno_core::anyhow::bail;
@@ -34,14 +35,17 @@ use crate::npm::CliNpmResolver;
use crate::npm::ManagedCliNpmResolver;
use crate::util::checksum;
-pub async fn info(flags: Flags, info_flags: InfoFlags) -> Result<(), AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+pub async fn info(
+ flags: Arc<Flags>,
+ info_flags: InfoFlags,
+) -> Result<(), AnyError> {
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
if let Some(specifier) = info_flags.file {
let module_graph_builder = factory.module_graph_builder().await?;
let module_graph_creator = factory.module_graph_creator().await?;
let npm_resolver = factory.npm_resolver().await?;
- let maybe_lockfile = factory.maybe_lockfile();
+ let maybe_lockfile = cli_options.maybe_lockfile();
let resolver = factory.workspace_resolver().await?;
let maybe_import_specifier =
diff --git a/cli/tools/installer.rs b/cli/tools/installer.rs
index b7b9b4d96..01ed36711 100644
--- a/cli/tools/installer.rs
+++ b/cli/tools/installer.rs
@@ -35,6 +35,7 @@ use std::path::PathBuf;
#[cfg(not(windows))]
use std::os::unix::fs::PermissionsExt;
+use std::sync::Arc;
static EXEC_NAME_RE: Lazy<Regex> = Lazy::new(|| {
RegexBuilder::new(r"^[a-z0-9][\w-]*$")
@@ -261,17 +262,17 @@ pub fn uninstall(uninstall_flags: UninstallFlags) -> Result<(), AnyError> {
}
async fn install_local(
- flags: Flags,
+ flags: Arc<Flags>,
maybe_add_flags: Option<AddFlags>,
) -> Result<(), AnyError> {
if let Some(add_flags) = maybe_add_flags {
return super::registry::add(flags, add_flags).await;
}
- let factory = CliFactory::from_flags(flags)?;
+ let factory = CliFactory::from_flags(flags);
crate::module_loader::load_top_level_deps(&factory).await?;
- if let Some(lockfile) = factory.cli_options().maybe_lockfile() {
+ if let Some(lockfile) = factory.cli_options()?.maybe_lockfile() {
lockfile.write_if_changed()?;
}
@@ -279,7 +280,7 @@ async fn install_local(
}
pub async fn install_command(
- flags: Flags,
+ flags: Arc<Flags>,
install_flags: InstallFlags,
) -> Result<(), AnyError> {
if !install_flags.global {
@@ -297,11 +298,11 @@ pub async fn install_command(
}
async fn install_global(
- flags: Flags,
+ flags: Arc<Flags>,
install_flags_global: InstallFlagsGlobal,
) -> Result<(), AnyError> {
// ensure the module is cached
- let factory = CliFactory::from_flags(flags.clone())?;
+ let factory = CliFactory::from_flags(flags.clone());
factory
.main_module_graph_container()
.await?
@@ -310,16 +311,16 @@ async fn install_global(
let http_client = factory.http_client_provider();
// create the install shim
- create_install_shim(http_client, flags, install_flags_global).await
+ create_install_shim(http_client, &flags, install_flags_global).await
}
async fn create_install_shim(
http_client_provider: &HttpClientProvider,
- flags: Flags,
+ flags: &Flags,
install_flags_global: InstallFlagsGlobal,
) -> Result<(), AnyError> {
let shim_data =
- resolve_shim_data(http_client_provider, &flags, &install_flags_global)
+ resolve_shim_data(http_client_provider, flags, &install_flags_global)
.await?;
// ensure directory exists
@@ -778,7 +779,7 @@ mod tests {
create_install_shim(
&HttpClientProvider::new(None, None),
- Flags {
+ &Flags {
unstable_config: UnstableConfig {
legacy_flag_enabled: true,
..Default::default()
@@ -1173,7 +1174,7 @@ mod tests {
create_install_shim(
&HttpClientProvider::new(None, None),
- Flags::default(),
+ &Flags::default(),
InstallFlagsGlobal {
module_url: local_module_str.to_string(),
args: vec![],
@@ -1203,7 +1204,7 @@ mod tests {
create_install_shim(
&HttpClientProvider::new(None, None),
- Flags::default(),
+ &Flags::default(),
InstallFlagsGlobal {
module_url: "http://localhost:4545/echo_server.ts".to_string(),
args: vec![],
@@ -1224,7 +1225,7 @@ mod tests {
// No force. Install failed.
let no_force_result = create_install_shim(
&HttpClientProvider::new(None, None),
- Flags::default(),
+ &Flags::default(),
InstallFlagsGlobal {
module_url: "http://localhost:4545/cat.ts".to_string(), // using a different URL
args: vec![],
@@ -1246,7 +1247,7 @@ mod tests {
// Force. Install success.
let force_result = create_install_shim(
&HttpClientProvider::new(None, None),
- Flags::default(),
+ &Flags::default(),
InstallFlagsGlobal {
module_url: "http://localhost:4545/cat.ts".to_string(), // using a different URL
args: vec![],
@@ -1274,7 +1275,7 @@ mod tests {
let result = create_install_shim(
&HttpClientProvider::new(None, None),
- Flags {
+ &Flags {
config_flag: ConfigFlag::Path(config_file_path.to_string()),
..Flags::default()
},
@@ -1307,7 +1308,7 @@ mod tests {
create_install_shim(
&HttpClientProvider::new(None, None),
- Flags::default(),
+ &Flags::default(),
InstallFlagsGlobal {
module_url: "http://localhost:4545/echo_server.ts".to_string(),
args: vec!["\"".to_string()],
@@ -1348,7 +1349,7 @@ mod tests {
create_install_shim(
&HttpClientProvider::new(None, None),
- Flags::default(),
+ &Flags::default(),
InstallFlagsGlobal {
module_url: local_module_str.to_string(),
args: vec![],
@@ -1390,7 +1391,7 @@ mod tests {
let result = create_install_shim(
&HttpClientProvider::new(None, None),
- Flags {
+ &Flags {
import_map_path: Some(import_map_path.to_string()),
..Flags::default()
},
@@ -1436,7 +1437,7 @@ mod tests {
let result = create_install_shim(
&HttpClientProvider::new(None, None),
- Flags::default(),
+ &Flags::default(),
InstallFlagsGlobal {
module_url: file_module_string.to_string(),
args: vec![],
diff --git a/cli/tools/jupyter/mod.rs b/cli/tools/jupyter/mod.rs
index 1197d3df7..eff7f4f9d 100644
--- a/cli/tools/jupyter/mod.rs
+++ b/cli/tools/jupyter/mod.rs
@@ -1,5 +1,7 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+use std::sync::Arc;
+
use crate::args::Flags;
use crate::args::JupyterFlags;
use crate::cdp;
@@ -36,7 +38,7 @@ mod install;
pub mod server;
pub async fn kernel(
- flags: Flags,
+ flags: Arc<Flags>,
jupyter_flags: JupyterFlags,
) -> Result<(), AnyError> {
log::info!(
@@ -56,8 +58,8 @@ pub async fn kernel(
let connection_filepath = jupyter_flags.conn_file.unwrap();
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let main_module =
resolve_url_or_path("./$deno$jupyter.ts", cli_options.initial_cwd())
.unwrap();
diff --git a/cli/tools/lint/mod.rs b/cli/tools/lint/mod.rs
index 3b2af12fb..942129120 100644
--- a/cli/tools/lint/mod.rs
+++ b/cli/tools/lint/mod.rs
@@ -76,7 +76,10 @@ fn create_reporter(kind: LintReporterKind) -> Box<dyn LintReporter + Send> {
}
}
-pub async fn lint(flags: Flags, lint_flags: LintFlags) -> Result<(), AnyError> {
+pub async fn lint(
+ flags: Arc<Flags>,
+ lint_flags: LintFlags,
+) -> Result<(), AnyError> {
if let Some(watch_flags) = &lint_flags.watch {
if lint_flags.is_stdin() {
return Err(generic_error(
@@ -89,8 +92,8 @@ pub async fn lint(flags: Flags, lint_flags: LintFlags) -> Result<(), AnyError> {
move |flags, watcher_communicator, changed_paths| {
let lint_flags = lint_flags.clone();
Ok(async move {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let lint_config = cli_options.resolve_deno_lint_config()?;
let mut paths_with_options_batches =
resolve_paths_with_options_batches(cli_options, &lint_flags)?;
@@ -140,8 +143,8 @@ pub async fn lint(flags: Flags, lint_flags: LintFlags) -> Result<(), AnyError> {
)
.await?;
} else {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let is_stdin = lint_flags.is_stdin();
let deno_lint_config = cli_options.resolve_deno_lint_config()?;
let workspace_lint_options =
diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs
index 1c4e1bea7..bf9ce8586 100644
--- a/cli/tools/registry/mod.rs
+++ b/cli/tools/registry/mod.rs
@@ -72,16 +72,16 @@ use self::paths::CollectedPublishPath;
use self::tar::PublishableTarball;
pub async fn publish(
- flags: Flags,
+ flags: Arc<Flags>,
publish_flags: PublishFlags,
) -> Result<(), AnyError> {
- let cli_factory = CliFactory::from_flags(flags)?;
+ let cli_factory = CliFactory::from_flags(flags);
let auth_method =
get_auth_method(publish_flags.token, publish_flags.dry_run)?;
- let directory_path = cli_factory.cli_options().initial_cwd();
- let cli_options = cli_factory.cli_options();
+ let cli_options = cli_factory.cli_options()?;
+ let directory_path = cli_options.initial_cwd();
let publish_configs = cli_options.start_dir.jsr_packages_for_publish();
if publish_configs.is_empty() {
match cli_options.start_dir.maybe_deno_json() {
@@ -121,7 +121,7 @@ pub async fn publish(
cli_factory.module_graph_creator().await?.clone(),
cli_factory.parsed_source_cache().clone(),
cli_factory.type_checker().await?.clone(),
- cli_factory.cli_options().clone(),
+ cli_options.clone(),
specifier_unfurler,
);
diff --git a/cli/tools/registry/pm.rs b/cli/tools/registry/pm.rs
index 4573f196d..233e68240 100644
--- a/cli/tools/registry/pm.rs
+++ b/cli/tools/registry/pm.rs
@@ -119,9 +119,9 @@ impl DenoOrPackageJson {
/// creates a `deno.json` file - in this case
/// we also return a new `CliFactory` that knows about
/// the new config
- fn from_flags(flags: Flags) -> Result<(Self, CliFactory), AnyError> {
- let factory = CliFactory::from_flags(flags.clone())?;
- let options = factory.cli_options();
+ fn from_flags(flags: Arc<Flags>) -> Result<(Self, CliFactory), AnyError> {
+ let factory = CliFactory::from_flags(flags.clone());
+ let options = factory.cli_options()?;
let start_dir = &options.start_dir;
match (start_dir.maybe_deno_json(), start_dir.maybe_pkg_json()) {
@@ -142,8 +142,8 @@ impl DenoOrPackageJson {
.context("Failed to create deno.json file")?;
drop(factory); // drop to prevent use
log::info!("Created deno.json configuration file.");
- let factory = CliFactory::from_flags(flags.clone())?;
- let options = factory.cli_options().clone();
+ let factory = CliFactory::from_flags(flags.clone());
+ let options = factory.cli_options()?.clone();
let start_dir = &options.start_dir;
Ok((
DenoOrPackageJson::Deno(
@@ -175,7 +175,10 @@ fn package_json_dependency_entry(
}
}
-pub async fn add(flags: Flags, add_flags: AddFlags) -> Result<(), AnyError> {
+pub async fn add(
+ flags: Arc<Flags>,
+ add_flags: AddFlags,
+) -> Result<(), AnyError> {
let (config_file, cli_factory) =
DenoOrPackageJson::from_flags(flags.clone())?;
@@ -307,9 +310,9 @@ pub async fn add(flags: Flags, add_flags: AddFlags) -> Result<(), AnyError> {
// clear the previously cached package.json from memory before reloading it
deno_node::PackageJsonThreadLocalCache::clear();
// make a new CliFactory to pick up the updated config file
- let cli_factory = CliFactory::from_flags(flags)?;
+ let cli_factory = CliFactory::from_flags(flags);
// cache deps
- if cli_factory.cli_options().enable_future_features() {
+ if cli_factory.cli_options()?.enable_future_features() {
crate::module_loader::load_top_level_deps(&cli_factory).await?;
}
diff --git a/cli/tools/repl/mod.rs b/cli/tools/repl/mod.rs
index 5bd59888d..9798a6967 100644
--- a/cli/tools/repl/mod.rs
+++ b/cli/tools/repl/mod.rs
@@ -156,9 +156,12 @@ async fn read_eval_file(
}
#[allow(clippy::print_stdout)]
-pub async fn run(flags: Flags, repl_flags: ReplFlags) -> Result<i32, AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+pub async fn run(
+ flags: Arc<Flags>,
+ repl_flags: ReplFlags,
+) -> Result<i32, AnyError> {
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let main_module = cli_options.resolve_main_module()?;
let permissions = PermissionsContainer::new(Permissions::from_options(
&cli_options.permissions_options()?,
diff --git a/cli/tools/run/mod.rs b/cli/tools/run/mod.rs
index f70cfd066..baa8e72db 100644
--- a/cli/tools/run/mod.rs
+++ b/cli/tools/run/mod.rs
@@ -1,6 +1,7 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use std::io::Read;
+use std::sync::Arc;
use deno_core::error::AnyError;
use deno_runtime::deno_permissions::Permissions;
@@ -11,7 +12,6 @@ use crate::args::EvalFlags;
use crate::args::Flags;
use crate::args::WatchFlagsWithPaths;
use crate::factory::CliFactory;
-use crate::factory::CliFactoryBuilder;
use crate::file_fetcher::File;
use crate::util;
use crate::util::file_watcher::WatcherRestartMode;
@@ -20,7 +20,7 @@ pub mod hmr;
pub async fn run_script(
mode: WorkerExecutionMode,
- flags: Flags,
+ flags: Arc<Flags>,
watch: Option<WatchFlagsWithPaths>,
) -> Result<i32, AnyError> {
if !flags.has_permission() && flags.has_permission_in_argv() {
@@ -40,10 +40,10 @@ To grant permissions, set them before the script argument. For example:
// TODO(bartlomieju): actually I think it will also fail if there's an import
// map specified and bare specifier is used on the command line
- let factory = CliFactory::from_flags(flags)?;
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let deno_dir = factory.deno_dir()?;
let http_client = factory.http_client_provider();
- let cli_options = factory.cli_options();
if cli_options.unstable_sloppy_imports() {
log::warn!(
@@ -76,9 +76,9 @@ To grant permissions, set them before the script argument. For example:
Ok(exit_code)
}
-pub async fn run_from_stdin(flags: Flags) -> Result<i32, AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+pub async fn run_from_stdin(flags: Arc<Flags>) -> Result<i32, AnyError> {
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let main_module = cli_options.resolve_main_module()?;
maybe_npm_install(&factory).await?;
@@ -109,7 +109,7 @@ pub async fn run_from_stdin(flags: Flags) -> Result<i32, AnyError> {
// code properly.
async fn run_with_watch(
mode: WorkerExecutionMode,
- flags: Flags,
+ flags: Arc<Flags>,
watch_flags: WatchFlagsWithPaths,
) -> Result<i32, AnyError> {
util::file_watcher::watch_recv(
@@ -122,9 +122,11 @@ async fn run_with_watch(
WatcherRestartMode::Automatic,
move |flags, watcher_communicator, _changed_paths| {
Ok(async move {
- let factory = CliFactoryBuilder::new()
- .build_from_flags_for_watcher(flags, watcher_communicator.clone())?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags_for_watcher(
+ flags,
+ watcher_communicator.clone(),
+ );
+ let cli_options = factory.cli_options()?;
let main_module = cli_options.resolve_main_module()?;
maybe_npm_install(&factory).await?;
@@ -156,11 +158,11 @@ async fn run_with_watch(
}
pub async fn eval_command(
- flags: Flags,
+ flags: Arc<Flags>,
eval_flags: EvalFlags,
) -> Result<i32, AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let file_fetcher = factory.file_fetcher()?;
let main_module = cli_options.resolve_main_module()?;
@@ -195,7 +197,7 @@ pub async fn eval_command(
async fn maybe_npm_install(factory: &CliFactory) -> Result<(), AnyError> {
// ensure an "npm install" is done if the user has explicitly
// opted into using a managed node_modules directory
- if factory.cli_options().node_modules_dir_enablement() == Some(true) {
+ if factory.cli_options()?.node_modules_dir_enablement() == Some(true) {
if let Some(npm_resolver) = factory.npm_resolver().await?.as_managed() {
npm_resolver.ensure_top_level_package_json_install().await?;
}
diff --git a/cli/tools/task.rs b/cli/tools/task.rs
index d2e16fb12..f296a070f 100644
--- a/cli/tools/task.rs
+++ b/cli/tools/task.rs
@@ -26,11 +26,11 @@ use std::rc::Rc;
use std::sync::Arc;
pub async fn execute_script(
- flags: Flags,
+ flags: Arc<Flags>,
task_flags: TaskFlags,
) -> Result<i32, AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let start_dir = &cli_options.start_dir;
if !start_dir.has_deno_or_pkg_json() {
bail!("deno task couldn't find deno.json(c). See https://deno.land/manual@v{}/getting_started/configuration_file", env!("CARGO_PKG_VERSION"))
diff --git a/cli/tools/test/mod.rs b/cli/tools/test/mod.rs
index 587b737d6..904b9ecb7 100644
--- a/cli/tools/test/mod.rs
+++ b/cli/tools/test/mod.rs
@@ -7,7 +7,6 @@ use crate::args::TestReporterConfig;
use crate::colors;
use crate::display;
use crate::factory::CliFactory;
-use crate::factory::CliFactoryBuilder;
use crate::file_fetcher::File;
use crate::file_fetcher::FileFetcher;
use crate::graph_container::MainModuleGraphContainer;
@@ -1738,11 +1737,11 @@ async fn fetch_specifiers_with_test_mode(
}
pub async fn run_tests(
- flags: Flags,
+ flags: Arc<Flags>,
test_flags: TestFlags,
) -> Result<(), AnyError> {
- let factory = CliFactory::from_flags(flags)?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags(flags);
+ let cli_options = factory.cli_options()?;
let workspace_test_options =
cli_options.resolve_workspace_test_options(&test_flags);
let file_fetcher = factory.file_fetcher()?;
@@ -1821,7 +1820,7 @@ pub async fn run_tests(
}
pub async fn run_tests_with_watch(
- flags: Flags,
+ flags: Arc<Flags>,
test_flags: TestFlags,
) -> Result<(), AnyError> {
// On top of the sigint handlers which are added and unbound for each test
@@ -1850,9 +1849,11 @@ pub async fn run_tests_with_watch(
move |flags, watcher_communicator, changed_paths| {
let test_flags = test_flags.clone();
Ok(async move {
- let factory = CliFactoryBuilder::new()
- .build_from_flags_for_watcher(flags, watcher_communicator.clone())?;
- let cli_options = factory.cli_options();
+ let factory = CliFactory::from_flags_for_watcher(
+ flags,
+ watcher_communicator.clone(),
+ );
+ let cli_options = factory.cli_options()?;
let workspace_test_options =
cli_options.resolve_workspace_test_options(&test_flags);
diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs
index fd8394efa..8349f060c 100644
--- a/cli/tools/upgrade.rs
+++ b/cli/tools/upgrade.rs
@@ -371,15 +371,20 @@ async fn fetch_and_store_latest_version<
}
pub async fn upgrade(
- flags: Flags,
+ flags: Arc<Flags>,
upgrade_flags: UpgradeFlags,
) -> Result<(), AnyError> {
- let factory = CliFactory::from_flags(flags)?;
+ let factory = CliFactory::from_flags(flags);
let client = factory.http_client_provider().get_or_create()?;
let current_exe_path = std::env::current_exe()?;
- let full_path_output_flag = upgrade_flags
- .output
- .map(|output| factory.cli_options().initial_cwd().join(output));
+ let full_path_output_flag = match &upgrade_flags.output {
+ Some(output) => Some(
+ std::env::current_dir()
+ .context("failed getting cwd")?
+ .join(output),
+ ),
+ None => None,
+ };
let output_exe_path =
full_path_output_flag.as_ref().unwrap_or(&current_exe_path);
diff --git a/cli/tools/vendor/mod.rs b/cli/tools/vendor/mod.rs
index 73aada7cf..e14452372 100644
--- a/cli/tools/vendor/mod.rs
+++ b/cli/tools/vendor/mod.rs
@@ -36,7 +36,7 @@ mod specifiers;
mod test;
pub async fn vendor(
- flags: Flags,
+ flags: Arc<Flags>,
vendor_flags: VendorFlags,
) -> Result<(), AnyError> {
log::info!(
@@ -52,7 +52,7 @@ pub async fn vendor(
validate_output_dir(&output_dir, &vendor_flags)?;
validate_options(&mut cli_options, &output_dir)?;
let factory = CliFactory::from_cli_options(Arc::new(cli_options));
- let cli_options = factory.cli_options();
+ let cli_options = factory.cli_options()?;
if cli_options.workspace().config_folders().len() > 1 {
bail!("deno vendor is not supported in a workspace. Set `\"vendor\": true` in the workspace deno.json file instead");
}