diff --git a/Cargo.lock b/Cargo.lock index 0988020..cf7304d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -521,6 +521,7 @@ dependencies = [ "pathdiff", "radix_trie", "rstest", + "rustc-hash", "serde", "serde_json", "serde_with", @@ -635,6 +636,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc_version" version = "0.4.1" diff --git a/Cargo.toml b/Cargo.toml index 77db356..6f665d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" serde_with = { version = "3", features = ["indexmap_2"] } thiserror = "2" +rustc-hash = "2" [dev-dependencies] rstest = "0.25.0" diff --git a/src/lib.rs b/src/lib.rs index 7f44c2d..4fec521 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,13 +6,15 @@ mod util; mod zip; use std::{ - collections::{HashMap, HashSet, hash_map::Entry}, + collections::hash_map::Entry, + hash::BuildHasherDefault, path::{Path, PathBuf}, }; use fancy_regex::Regex; use indexmap::IndexMap; use lazy_static::lazy_static; +use rustc_hash::{FxHashMap, FxHashSet, FxHasher}; use serde::{Deserialize, Serialize}; use serde_with::{DefaultOnNull, serde_as}; @@ -68,7 +70,7 @@ pub struct PackageInformation { discard_from_lookup: bool, #[serde_as(as = "Vec<(_, Option<_>)>")] - package_dependencies: HashMap>, + package_dependencies: FxHashMap>, } #[serde_as] @@ -91,21 +93,21 @@ pub struct Manifest { // "name": "@app/monorepo", // "workspace:." // }] - dependency_tree_roots: HashSet, + dependency_tree_roots: FxHashSet, // fallbackPool: [[ // "@app/monorepo", // "workspace:.", // ]] #[serde_as(as = "Vec<(_, _)>")] - fallback_pool: HashMap>, + fallback_pool: FxHashMap>, // fallbackExclusionList: [[ // "@app/server", // ["workspace:sources/server"], // ]] #[serde_as(as = "Vec<(_, _)>")] - fallback_exclusion_list: HashMap>, + fallback_exclusion_list: FxHashMap>, // packageRegistryData: [ // [null, [ @@ -115,7 +117,8 @@ pub struct Manifest { // }] // ] #[serde_as(as = "Vec<(DefaultOnNull<_>, Vec<(DefaultOnNull<_>, _)>)>")] - package_registry_data: HashMap>, + package_registry_data: + FxHashMap>>, } fn parse_scoped_package_name(specifier: &str) -> Option<(String, Option)> {