diff options
Diffstat (limited to 'cli/args/package_json.rs')
-rw-r--r-- | cli/args/package_json.rs | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/cli/args/package_json.rs b/cli/args/package_json.rs index 8ee30214e..4dc449d57 100644 --- a/cli/args/package_json.rs +++ b/cli/args/package_json.rs @@ -1,7 +1,5 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -use std::collections::BTreeMap; -use std::collections::HashMap; use std::path::Path; use std::path::PathBuf; @@ -13,6 +11,7 @@ use deno_runtime::deno_node::PackageJson; use deno_semver::package::PackageReq; use deno_semver::VersionReq; use deno_semver::VersionReqSpecifierParseError; +use indexmap::IndexMap; use thiserror::Error; #[derive(Debug, Error, Clone)] @@ -26,7 +25,7 @@ pub enum PackageJsonDepValueParseError { } pub type PackageJsonDeps = - BTreeMap<String, Result<PackageReq, PackageJsonDepValueParseError>>; + IndexMap<String, Result<PackageReq, PackageJsonDepValueParseError>>; #[derive(Debug, Default)] pub struct PackageJsonDepsProvider(Option<PackageJsonDeps>); @@ -92,24 +91,25 @@ pub fn get_local_package_json_version_reqs( } fn insert_deps( - deps: Option<&HashMap<String, String>>, + deps: Option<&IndexMap<String, String>>, result: &mut PackageJsonDeps, ) { if let Some(deps) = deps { for (key, value) in deps { - result.insert(key.to_string(), parse_entry(key, value)); + result + .entry(key.to_string()) + .or_insert_with(|| parse_entry(key, value)); } } } let deps = package_json.dependencies.as_ref(); let dev_deps = package_json.dev_dependencies.as_ref(); - let mut result = BTreeMap::new(); + let mut result = IndexMap::new(); - // insert the dev dependencies first so the dependencies will - // take priority and overwrite any collisions - insert_deps(dev_deps, &mut result); + // favors the deps over dev_deps insert_deps(deps, &mut result); + insert_deps(dev_deps, &mut result); result } @@ -182,7 +182,7 @@ mod test { fn get_local_package_json_version_reqs_for_tests( package_json: &PackageJson, - ) -> BTreeMap<String, Result<PackageReq, String>> { + ) -> IndexMap<String, Result<PackageReq, String>> { get_local_package_json_version_reqs(package_json) .into_iter() .map(|(k, v)| { @@ -194,17 +194,17 @@ mod test { }, ) }) - .collect::<BTreeMap<_, _>>() + .collect::<IndexMap<_, _>>() } #[test] fn test_get_local_package_json_version_reqs() { let mut package_json = PackageJson::empty(PathBuf::from("/package.json")); - package_json.dependencies = Some(HashMap::from([ + package_json.dependencies = Some(IndexMap::from([ ("test".to_string(), "^1.2".to_string()), ("other".to_string(), "npm:package@~1.3".to_string()), ])); - package_json.dev_dependencies = Some(HashMap::from([ + package_json.dev_dependencies = Some(IndexMap::from([ ("package_b".to_string(), "~2.2".to_string()), // should be ignored ("other".to_string(), "^3.2".to_string()), @@ -212,7 +212,7 @@ mod test { let deps = get_local_package_json_version_reqs_for_tests(&package_json); assert_eq!( deps, - BTreeMap::from([ + IndexMap::from([ ( "test".to_string(), Ok(PackageReq::from_str("test@^1.2").unwrap()) @@ -232,14 +232,14 @@ mod test { #[test] fn test_get_local_package_json_version_reqs_errors_non_npm_specifier() { let mut package_json = PackageJson::empty(PathBuf::from("/package.json")); - package_json.dependencies = Some(HashMap::from([( + package_json.dependencies = Some(IndexMap::from([( "test".to_string(), "1.x - 1.3".to_string(), )])); let map = get_local_package_json_version_reqs_for_tests(&package_json); assert_eq!( map, - BTreeMap::from([( + IndexMap::from([( "test".to_string(), Err( concat!( @@ -256,7 +256,7 @@ mod test { #[test] fn test_get_local_package_json_version_reqs_skips_certain_specifiers() { let mut package_json = PackageJson::empty(PathBuf::from("/package.json")); - package_json.dependencies = Some(HashMap::from([ + package_json.dependencies = Some(IndexMap::from([ ("test".to_string(), "1".to_string()), ("work-test".to_string(), "workspace:1.1.1".to_string()), ("file-test".to_string(), "file:something".to_string()), @@ -267,7 +267,7 @@ mod test { let result = get_local_package_json_version_reqs_for_tests(&package_json); assert_eq!( result, - BTreeMap::from([ + IndexMap::from([ ( "file-test".to_string(), Err("Not implemented scheme 'file'".to_string()), |