diff options
Diffstat (limited to 'cli/tools')
-rw-r--r-- | cli/tools/bench/mod.rs | 19 | ||||
-rw-r--r-- | cli/tools/bundle.rs | 16 | ||||
-rw-r--r-- | cli/tools/compile.rs | 6 | ||||
-rw-r--r-- | cli/tools/coverage/mod.rs | 7 | ||||
-rw-r--r-- | cli/tools/doc.rs | 12 | ||||
-rw-r--r-- | cli/tools/fmt.rs | 13 | ||||
-rw-r--r-- | cli/tools/info.rs | 12 | ||||
-rw-r--r-- | cli/tools/installer.rs | 39 | ||||
-rw-r--r-- | cli/tools/jupyter/mod.rs | 8 | ||||
-rw-r--r-- | cli/tools/lint/mod.rs | 13 | ||||
-rw-r--r-- | cli/tools/registry/mod.rs | 10 | ||||
-rw-r--r-- | cli/tools/registry/pm.rs | 19 | ||||
-rw-r--r-- | cli/tools/repl/mod.rs | 9 | ||||
-rw-r--r-- | cli/tools/run/mod.rs | 32 | ||||
-rw-r--r-- | cli/tools/task.rs | 6 | ||||
-rw-r--r-- | cli/tools/test/mod.rs | 17 | ||||
-rw-r--r-- | cli/tools/upgrade.rs | 15 | ||||
-rw-r--r-- | cli/tools/vendor/mod.rs | 4 |
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(¤t_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"); } |