diff options
Diffstat (limited to 'cli/args')
-rw-r--r-- | cli/args/config_file.rs | 61 | ||||
-rw-r--r-- | cli/args/lockfile.rs | 20 | ||||
-rw-r--r-- | cli/args/mod.rs | 22 |
3 files changed, 52 insertions, 51 deletions
diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs index ed31a47a6..c2f02e5c1 100644 --- a/cli/args/config_file.rs +++ b/cli/args/config_file.rs @@ -790,11 +790,11 @@ impl ConfigFile { config_path.display() ) })?; - Self::from_specifier(&config_specifier) + Self::from_specifier(config_specifier) } - pub fn from_specifier(specifier: &ModuleSpecifier) -> Result<Self, AnyError> { - let config_path = specifier_to_file_path(specifier)?; + pub fn from_specifier(specifier: ModuleSpecifier) -> Result<Self, AnyError> { + let config_path = specifier_to_file_path(&specifier)?; let config_text = match std::fs::read_to_string(config_path) { Ok(text) => text, Err(err) => bail!( @@ -806,10 +806,7 @@ impl ConfigFile { Self::new(&config_text, specifier) } - pub fn new( - text: &str, - specifier: &ModuleSpecifier, - ) -> Result<Self, AnyError> { + pub fn new(text: &str, specifier: ModuleSpecifier) -> Result<Self, AnyError> { let jsonc = match jsonc_parser::parse_to_serde_value(text, &Default::default()) { Ok(None) => json!({}), @@ -830,10 +827,7 @@ impl ConfigFile { }; let json: ConfigFileJson = serde_json::from_value(jsonc)?; - Ok(Self { - specifier: specifier.to_owned(), - json, - }) + Ok(Self { specifier, json }) } /// Returns true if the configuration indicates that JavaScript should be @@ -1089,6 +1083,26 @@ impl ConfigFile { Ok(None) } } + + pub fn resolve_lockfile_path(&self) -> Result<Option<PathBuf>, AnyError> { + match self.to_lock_config()? { + Some(LockConfig::Bool(lock)) if !lock => Ok(None), + Some(LockConfig::PathBuf(lock)) => Ok(Some( + self + .specifier + .to_file_path() + .unwrap() + .parent() + .unwrap() + .join(lock), + )), + _ => { + let mut path = self.specifier.to_file_path().unwrap(); + path.set_file_name("deno.lock"); + Ok(Some(path)) + } + } + } } /// Represents the "default" type library that should be used when type @@ -1324,7 +1338,8 @@ mod tests { }"#; let config_dir = ModuleSpecifier::parse("file:///deno/").unwrap(); let config_specifier = config_dir.join("tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = + ConfigFile::new(config_text, config_specifier.clone()).unwrap(); let (options_value, ignored) = config_file.to_compiler_options().unwrap(); assert!(options_value.is_object()); let options = options_value.as_object().unwrap(); @@ -1405,7 +1420,7 @@ mod tests { }"#; let config_dir = ModuleSpecifier::parse("file:///deno/").unwrap(); let config_specifier = config_dir.join("tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let lint_files = unpack_object(config_file.to_lint_config(), "lint").files; assert_eq!( @@ -1446,7 +1461,7 @@ mod tests { }"#; let config_dir = ModuleSpecifier::parse("file:///deno/").unwrap(); let config_specifier = config_dir.join("tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let lint_include = unpack_object(config_file.to_lint_config(), "lint") .files @@ -1489,9 +1504,9 @@ mod tests { let config_specifier = ModuleSpecifier::parse("file:///deno/tsconfig.json").unwrap(); let config_file_both = - ConfigFile::new(config_text_both, &config_specifier).unwrap(); + ConfigFile::new(config_text_both, config_specifier.clone()).unwrap(); let config_file_deprecated = - ConfigFile::new(config_text_deprecated, &config_specifier).unwrap(); + ConfigFile::new(config_text_deprecated, config_specifier).unwrap(); fn unpack_options(config_file: ConfigFile) -> FmtOptionsConfig { unpack_object(config_file.to_fmt_config(), "fmt").options @@ -1509,7 +1524,7 @@ mod tests { let config_text = ""; let config_specifier = ModuleSpecifier::parse("file:///deno/tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let (options_value, _) = config_file.to_compiler_options().unwrap(); assert!(options_value.is_object()); } @@ -1519,7 +1534,7 @@ mod tests { let config_text = r#"//{"foo":"bar"}"#; let config_specifier = ModuleSpecifier::parse("file:///deno/tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let (options_value, _) = config_file.to_compiler_options().unwrap(); assert!(options_value.is_object()); } @@ -1535,7 +1550,7 @@ mod tests { }"#; let config_specifier = ModuleSpecifier::parse("file:///deno/tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let (options_value, _) = config_file.to_compiler_options().unwrap(); assert!(options_value.is_object()); @@ -1561,7 +1576,7 @@ mod tests { }"#; let config_specifier = ModuleSpecifier::parse("file:///deno/tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let (options_value, _) = config_file.to_compiler_options().unwrap(); assert!(options_value.is_object()); @@ -1587,7 +1602,7 @@ mod tests { let config_specifier = ModuleSpecifier::parse("file:///deno/tsconfig.json").unwrap(); // Emit error: Unable to parse config file JSON "<config_path>" because of Unexpected token on line 1 column 6. - assert!(ConfigFile::new(config_text, &config_specifier).is_err()); + assert!(ConfigFile::new(config_text, config_specifier).is_err()); } #[test] @@ -1596,7 +1611,7 @@ mod tests { let config_specifier = ModuleSpecifier::parse("file:///deno/tsconfig.json").unwrap(); // Emit error: config file JSON "<config_path>" should be an object - assert!(ConfigFile::new(config_text, &config_specifier).is_err()); + assert!(ConfigFile::new(config_text, config_specifier).is_err()); } #[test] @@ -1708,7 +1723,7 @@ mod tests { fn run_task_error_test(config_text: &str, expected_error: &str) { let config_dir = ModuleSpecifier::parse("file:///deno/").unwrap(); let config_specifier = config_dir.join("tsconfig.json").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); assert_eq!( config_file .resolve_tasks_config() diff --git a/cli/args/lockfile.rs b/cli/args/lockfile.rs index aa7e51fa1..c169c7b00 100644 --- a/cli/args/lockfile.rs +++ b/cli/args/lockfile.rs @@ -17,7 +17,6 @@ use deno_npm::resolution::ValidSerializedNpmResolutionSnapshot; use deno_npm::NpmPackageId; use deno_semver::npm::NpmPackageReq; -use crate::args::config_file::LockConfig; use crate::args::ConfigFile; use crate::npm::CliNpmRegistryApi; use crate::Flags; @@ -45,22 +44,9 @@ pub fn discover( None => match maybe_config_file { Some(config_file) => { if config_file.specifier.scheme() == "file" { - match config_file.to_lock_config()? { - Some(LockConfig::Bool(lock)) if !lock => { - return Ok(None); - } - Some(LockConfig::PathBuf(lock)) => config_file - .specifier - .to_file_path() - .unwrap() - .parent() - .unwrap() - .join(lock), - _ => { - let mut path = config_file.specifier.to_file_path().unwrap(); - path.set_file_name("deno.lock"); - path - } + match config_file.resolve_lockfile_path()? { + Some(path) => path, + None => return Ok(None), } } else { return Ok(None); diff --git a/cli/args/mod.rs b/cli/args/mod.rs index fdef50983..5dd723eaf 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -8,7 +8,7 @@ mod lockfile; pub mod package_json; pub use self::import_map::resolve_import_map_from_specifier; -use self::lockfile::snapshot_from_lockfile; +pub use self::lockfile::snapshot_from_lockfile; use self::package_json::PackageJsonDeps; use ::import_map::ImportMap; use deno_core::resolve_url_or_path; @@ -577,7 +577,7 @@ impl CliOptions { flags: Flags, initial_cwd: PathBuf, maybe_config_file: Option<ConfigFile>, - maybe_lockfile: Option<Lockfile>, + maybe_lockfile: Option<Arc<Mutex<Lockfile>>>, maybe_package_json: Option<PackageJson>, ) -> Result<Self, AnyError> { if let Some(insecure_allowlist) = @@ -594,7 +594,6 @@ impl CliOptions { eprintln!("{}", colors::yellow(msg)); } - let maybe_lockfile = maybe_lockfile.map(|l| Arc::new(Mutex::new(l))); let maybe_node_modules_folder = resolve_local_node_modules_folder( &initial_cwd, &flags, @@ -647,7 +646,7 @@ impl CliOptions { flags, initial_cwd, maybe_config_file, - maybe_lock_file, + maybe_lock_file.map(|l| Arc::new(Mutex::new(l))), maybe_package_json, ) } @@ -1348,7 +1347,7 @@ pub fn resolve_no_prompt(flags: &Flags) -> bool { flags.no_prompt || has_flag_env_var("DENO_NO_PROMPT") } -fn has_flag_env_var(name: &str) -> bool { +pub fn has_flag_env_var(name: &str) -> bool { let value = env::var(name); matches!(value.as_ref().map(|s| s.as_str()), Ok("1")) } @@ -1375,7 +1374,7 @@ mod test { }"#; let config_specifier = ModuleSpecifier::parse("file:///deno/deno.jsonc").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let actual = resolve_import_map_specifier( None, Some(&config_file), @@ -1396,7 +1395,7 @@ mod test { }"#; let config_specifier = ModuleSpecifier::parse("file:///deno/deno.jsonc").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let actual = resolve_import_map_specifier( None, Some(&config_file), @@ -1419,7 +1418,7 @@ mod test { }"#; let config_specifier = ModuleSpecifier::parse("https://example.com/deno.jsonc").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let actual = resolve_import_map_specifier( None, Some(&config_file), @@ -1443,7 +1442,7 @@ mod test { let cwd = &std::env::current_dir().unwrap(); let config_specifier = ModuleSpecifier::parse("file:///deno/deno.jsonc").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let actual = resolve_import_map_specifier( Some("import-map.json"), Some(&config_file), @@ -1465,7 +1464,8 @@ mod test { }"#; let config_specifier = ModuleSpecifier::parse("file:///deno/deno.jsonc").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = + ConfigFile::new(config_text, config_specifier.clone()).unwrap(); let actual = resolve_import_map_specifier( None, Some(&config_file), @@ -1481,7 +1481,7 @@ mod test { let config_text = r#"{}"#; let config_specifier = ModuleSpecifier::parse("file:///deno/deno.jsonc").unwrap(); - let config_file = ConfigFile::new(config_text, &config_specifier).unwrap(); + let config_file = ConfigFile::new(config_text, config_specifier).unwrap(); let actual = resolve_import_map_specifier( None, Some(&config_file), |