rspack_core/dependency/
factorize_info.rs1use rspack_cacheable::cacheable;
2use rspack_error::Diagnostic;
3use rspack_paths::ArcPathSet;
4
5use super::{BoxDependency, DependencyId};
6
7#[cacheable]
8#[derive(Debug, Clone, Default)]
9pub struct FactorizeInfo {
10 related_dep_ids: Vec<DependencyId>,
11 file_dependencies: ArcPathSet,
12 context_dependencies: ArcPathSet,
13 missing_dependencies: ArcPathSet,
14 diagnostics: Vec<Diagnostic>,
15}
16
17impl FactorizeInfo {
18 pub fn new(
19 diagnostics: Vec<Diagnostic>,
20 related_dep_ids: Vec<DependencyId>,
21 file_dependencies: ArcPathSet,
22 context_dependencies: ArcPathSet,
23 missing_dependencies: ArcPathSet,
24 ) -> Self {
25 Self {
26 related_dep_ids,
27 file_dependencies,
28 context_dependencies,
29 missing_dependencies,
30 diagnostics,
31 }
32 }
33
34 pub fn get_from(dep: &BoxDependency) -> Option<&FactorizeInfo> {
35 if let Some(d) = dep.as_context_dependency() {
36 Some(d.factorize_info())
37 } else if let Some(d) = dep.as_module_dependency() {
38 Some(d.factorize_info())
39 } else {
40 None
41 }
42 }
43
44 pub fn revoke(dep: &mut BoxDependency) -> Option<FactorizeInfo> {
45 if let Some(d) = dep.as_context_dependency_mut() {
46 Some(std::mem::take(d.factorize_info_mut()))
47 } else if let Some(d) = dep.as_module_dependency_mut() {
48 Some(std::mem::take(d.factorize_info_mut()))
49 } else {
50 None
51 }
52 }
53
54 pub fn is_success(&self) -> bool {
55 self.diagnostics.is_empty()
56 }
57
58 pub fn related_dep_ids(&self) -> &[DependencyId] {
59 &self.related_dep_ids
60 }
61
62 pub fn file_dependencies(&self) -> &ArcPathSet {
63 &self.file_dependencies
64 }
65
66 pub fn context_dependencies(&self) -> &ArcPathSet {
67 &self.context_dependencies
68 }
69
70 pub fn missing_dependencies(&self) -> &ArcPathSet {
71 &self.missing_dependencies
72 }
73
74 pub fn diagnostics(&self) -> &[Diagnostic] {
75 &self.diagnostics
76 }
77}