diff --git a/cli/module_graph.rs b/cli/module_graph.rs index b6759a9d2e..8c6f695523 100644 --- a/cli/module_graph.rs +++ b/cli/module_graph.rs @@ -41,8 +41,8 @@ use regex::Regex; use serde::Deserialize; use serde::Deserializer; use std::cell::RefCell; -use std::collections::HashMap; use std::collections::HashSet; +use std::collections::{BTreeSet, HashMap}; use std::error::Error; use std::fmt; use std::path::PathBuf; @@ -1098,7 +1098,7 @@ impl Graph { .modules .iter() .map(|(specifier, module)| { - let mut deps = HashSet::new(); + let mut deps = BTreeSet::new(); for (_, dep) in module.dependencies.iter() { if let Some(code_dep) = &dep.maybe_code { deps.insert(code_dep.clone()); diff --git a/cli/tests/076_info_json_deps_order.out b/cli/tests/076_info_json_deps_order.out new file mode 100644 index 0000000000..0c125122f7 --- /dev/null +++ b/cli/tests/076_info_json_deps_order.out @@ -0,0 +1,38 @@ +{ + "compiled": null, + "depCount": 4, + "fileType": "TypeScript", + "files": { + "[WILDCARD]cli/tests/076_info_json_deps_order.ts": { + "deps": [ + "[WILDCARD]cli/tests/recursive_imports/A.ts" + ], + "size": [WILDCARD] + }, + "[WILDCARD]cli/tests/recursive_imports/A.ts": { + "deps": [ + "[WILDCARD]cli/tests/recursive_imports/B.ts", + "[WILDCARD]cli/tests/recursive_imports/common.ts" + ], + "size": [WILDCARD] + }, + "[WILDCARD]cli/tests/recursive_imports/B.ts": { + "deps": [ + "[WILDCARD]cli/tests/recursive_imports/C.ts", + "[WILDCARD]cli/tests/recursive_imports/common.ts" + ], + "size": [WILDCARD] + }, + "[WILDCARD]cli/tests/recursive_imports/C.ts": { + "deps": [ + "[WILDCARD]cli/tests/recursive_imports/A.ts", + "[WILDCARD]cli/tests/recursive_imports/common.ts" + ], + "size": [WILDCARD] + }, + "[WILDCARD]cli/tests/recursive_imports/common.ts": { + "deps": [], + "size": [WILDCARD] + } + }, +[WILDCARD] diff --git a/cli/tests/076_info_json_deps_order.ts b/cli/tests/076_info_json_deps_order.ts new file mode 100644 index 0000000000..f9d35fd5ac --- /dev/null +++ b/cli/tests/076_info_json_deps_order.ts @@ -0,0 +1 @@ +import { A } from "./recursive_imports/A.ts"; diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index cd22526816..39147f0383 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -2434,6 +2434,11 @@ itest!(_075_import_local_query_hash { output: "075_import_local_query_hash.ts.out", }); +itest!(_076_info_json_deps_order { + args: "info --unstable --json 076_info_json_deps_order.ts", + output: "076_info_json_deps_order.out", +}); + itest!(js_import_detect { args: "run --quiet --reload js_import_detect.ts", output: "js_import_detect.ts.out", diff --git a/core/module_specifier.rs b/core/module_specifier.rs index aec568d473..29edc87716 100644 --- a/core/module_specifier.rs +++ b/core/module_specifier.rs @@ -48,7 +48,9 @@ impl fmt::Display for ModuleResolutionError { } } -#[derive(Debug, Clone, Eq, Hash, PartialEq, serde::Serialize)] +#[derive( + Debug, Clone, Eq, Hash, PartialEq, serde::Serialize, Ord, PartialOrd, +)] /// Resolved module specifier pub struct ModuleSpecifier(Url);