summaryrefslogtreecommitdiff
path: root/cli/args
diff options
context:
space:
mode:
Diffstat (limited to 'cli/args')
-rw-r--r--cli/args/config_file.rs61
-rw-r--r--cli/args/lockfile.rs20
-rw-r--r--cli/args/mod.rs22
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),