Skip to content

Commit 65e598f

Browse files
authored
refactor: changed ModuleGraph dependencies to BoxDependency (#4026)
1 parent 3aca20d commit 65e598f

File tree

58 files changed

+446
-465
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+446
-465
lines changed

crates/rspack_core/src/compiler/compilation.rs

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ use crate::{
3131
cache::{use_code_splitting_cache, Cache, CodeSplittingCache},
3232
is_source_equal,
3333
tree_shaking::{optimizer, visitor::SymbolRef, BailoutFlag, OptimizeDependencyResult},
34-
AddQueue, AddTask, AddTaskResult, AdditionalChunkRuntimeRequirementsArgs, BoxModule,
35-
BoxModuleDependency, BuildQueue, BuildTask, BuildTaskResult, Chunk, ChunkByUkey,
36-
ChunkContentHash, ChunkGraph, ChunkGroup, ChunkGroupUkey, ChunkHashArgs, ChunkKind, ChunkUkey,
37-
CleanQueue, CleanTask, CleanTaskResult, CodeGenerationResult, CodeGenerationResults,
38-
CompilationLogger, CompilationLogging, CompilerOptions, ContentHashArgs, DependencyId, Entry,
39-
EntryData, EntryOptions, Entrypoint, FactorizeQueue, FactorizeTask, FactorizeTaskResult,
40-
Filename, Logger, Module, ModuleGraph, ModuleIdentifier, ModuleProfile, ModuleType, PathData,
41-
ProcessAssetsArgs, ProcessDependenciesQueue, ProcessDependenciesResult, ProcessDependenciesTask,
42-
RenderManifestArgs, Resolve, ResolverFactory, RuntimeGlobals, RuntimeModule, RuntimeSpec,
43-
SharedPluginDriver, SourceType, Stats, TaskResult, WorkerTask,
34+
AddQueue, AddTask, AddTaskResult, AdditionalChunkRuntimeRequirementsArgs, BoxDependency,
35+
BoxModule, BuildQueue, BuildTask, BuildTaskResult, Chunk, ChunkByUkey, ChunkContentHash,
36+
ChunkGraph, ChunkGroup, ChunkGroupUkey, ChunkHashArgs, ChunkKind, ChunkUkey, CleanQueue,
37+
CleanTask, CleanTaskResult, CodeGenerationResult, CodeGenerationResults, CompilationLogger,
38+
CompilationLogging, CompilerOptions, ContentHashArgs, DependencyId, Entry, EntryData,
39+
EntryOptions, Entrypoint, FactorizeQueue, FactorizeTask, FactorizeTaskResult, Filename, Logger,
40+
Module, ModuleGraph, ModuleIdentifier, ModuleProfile, ModuleType, PathData, ProcessAssetsArgs,
41+
ProcessDependenciesQueue, ProcessDependenciesResult, ProcessDependenciesTask, RenderManifestArgs,
42+
Resolve, ResolverFactory, RuntimeGlobals, RuntimeModule, RuntimeSpec, SharedPluginDriver,
43+
SourceType, Stats, TaskResult, WorkerTask,
4444
};
4545
use crate::{tree_shaking::visitor::OptimizeAnalyzeResult, Context};
4646

@@ -427,7 +427,10 @@ impl Compilation {
427427
.expect("dependency not found");
428428
let parent_module =
429429
parent_module_identifier.and_then(|id| self.module_graph.module_by_identifier(&id));
430-
if parent_module_identifier.is_some() && parent_module.is_none() {
430+
if parent_module_identifier.is_some()
431+
&& parent_module.is_none()
432+
&& dependency.as_module_dependency().is_none()
433+
{
431434
return;
432435
}
433436

@@ -536,19 +539,26 @@ impl Compilation {
536539
let mut sorted_dependencies = HashMap::default();
537540

538541
task.dependencies.into_iter().for_each(|dependency| {
539-
// TODO need implement more dependency `resource_identifier()`
540-
// https://github.com/webpack/webpack/blob/main/lib/Compilation.js#L1621
541-
let resource_identifier =
542-
if let Some(resource_identifier) = dependency.resource_identifier() {
543-
resource_identifier.to_string()
544-
} else {
545-
format!("{}|{}", dependency.dependency_type(), dependency.request())
546-
};
547-
548-
sorted_dependencies
549-
.entry(resource_identifier)
550-
.or_insert(vec![])
551-
.push(dependency);
542+
// only module dependency can put into resolve queue.
543+
if let Some(module_dependency) = dependency.as_module_dependency() {
544+
// TODO need implement more dependency `resource_identifier()`
545+
// https://github.com/webpack/webpack/blob/main/lib/Compilation.js#L1621
546+
let resource_identifier =
547+
if let Some(resource_identifier) = module_dependency.resource_identifier() {
548+
resource_identifier.to_string()
549+
} else {
550+
format!(
551+
"{}|{}",
552+
module_dependency.dependency_type(),
553+
module_dependency.request()
554+
)
555+
};
556+
557+
sorted_dependencies
558+
.entry(resource_identifier)
559+
.or_insert(vec![])
560+
.push(dependency);
561+
}
552562
});
553563

554564
for dependencies in sorted_dependencies.into_values() {
@@ -677,9 +687,11 @@ impl Compilation {
677687

678688
let mut dep_ids = vec![];
679689
for dependency in build_result.dependencies.iter() {
680-
self
681-
.module_graph
682-
.set_dependency_import_var(module.identifier(), dependency.request());
690+
if let Some(dependency) = dependency.as_module_dependency() {
691+
self
692+
.module_graph
693+
.set_dependency_import_var(module.identifier(), dependency.request());
694+
}
683695
dep_ids.push(*dependency.id());
684696
}
685697

@@ -843,7 +855,7 @@ impl Compilation {
843855
queue: &mut FactorizeQueue,
844856
original_module_identifier: Option<ModuleIdentifier>,
845857
original_module_context: Option<Context>,
846-
dependencies: Vec<BoxModuleDependency>,
858+
dependencies: Vec<BoxDependency>,
847859
is_entry: bool,
848860
module_type: Option<ModuleType>,
849861
side_effects: Option<bool>,

crates/rspack_core/src/compiler/queue.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::sync::Arc;
33
use rspack_error::{Diagnostic, Result};
44

55
use crate::{
6-
cache::Cache, BoxModuleDependency, BuildContext, BuildResult, Compilation, CompilerContext,
6+
cache::Cache, BoxDependency, BuildContext, BuildResult, Compilation, CompilerContext,
77
CompilerOptions, Context, ContextModuleFactory, DependencyType, Module, ModuleFactory,
88
ModuleFactoryCreateData, ModuleFactoryResult, ModuleGraph, ModuleGraphModule, ModuleIdentifier,
99
ModuleProfile, ModuleType, NormalModuleFactory, NormalModuleFactoryContext, Resolve,
@@ -27,7 +27,7 @@ pub struct FactorizeTask {
2727
pub original_module_identifier: Option<ModuleIdentifier>,
2828
pub original_module_context: Option<Context>,
2929
pub issuer: Option<String>,
30-
pub dependencies: Vec<BoxModuleDependency>,
30+
pub dependencies: Vec<BoxDependency>,
3131
pub is_entry: bool,
3232
pub module_type: Option<ModuleType>,
3333
pub side_effects: Option<bool>,
@@ -45,7 +45,7 @@ pub struct FactorizeTaskResult {
4545
pub original_module_identifier: Option<ModuleIdentifier>,
4646
pub factory_result: ModuleFactoryResult,
4747
pub module_graph_module: Box<ModuleGraphModule>,
48-
pub dependencies: Vec<BoxModuleDependency>,
48+
pub dependencies: Vec<BoxDependency>,
4949
pub diagnostics: Vec<Diagnostic>,
5050
pub is_entry: bool,
5151
pub current_profile: Option<ModuleProfile>,
@@ -131,7 +131,7 @@ pub struct AddTask {
131131
pub original_module_identifier: Option<ModuleIdentifier>,
132132
pub module: Box<dyn Module>,
133133
pub module_graph_module: Box<ModuleGraphModule>,
134-
pub dependencies: Vec<BoxModuleDependency>,
134+
pub dependencies: Vec<BoxDependency>,
135135
pub is_entry: bool,
136136
pub current_profile: Option<ModuleProfile>,
137137
}
@@ -203,7 +203,7 @@ impl AddTask {
203203
fn set_resolved_module(
204204
module_graph: &mut ModuleGraph,
205205
original_module_identifier: Option<ModuleIdentifier>,
206-
dependencies: Vec<BoxModuleDependency>,
206+
dependencies: Vec<BoxDependency>,
207207
module_identifier: ModuleIdentifier,
208208
) -> Result<()> {
209209
for dependency in dependencies {
@@ -300,7 +300,7 @@ pub type BuildQueue = WorkerQueue<BuildTask>;
300300

301301
pub struct ProcessDependenciesTask {
302302
pub original_module_identifier: ModuleIdentifier,
303-
pub dependencies: Vec<BoxModuleDependency>,
303+
pub dependencies: Vec<BoxDependency>,
304304
pub resolve_options: Option<Resolve>,
305305
}
306306

crates/rspack_core/src/context_module.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use rustc_hash::FxHashMap as HashMap;
1717
use rustc_hash::FxHashSet as HashSet;
1818

1919
use crate::{
20-
contextify, get_exports_type_with_strict, stringify_map, BoxModuleDependency, BuildContext,
21-
BuildInfo, BuildMeta, BuildResult, ChunkGraph, CodeGenerationResult, Compilation,
22-
ContextElementDependency, DependencyCategory, DependencyId, DependencyType, ExportsType,
23-
FakeNamespaceObjectMode, LibIdentOptions, Module, ModuleType, Resolve,
24-
ResolveOptionsWithDependencyType, ResolverFactory, RuntimeGlobals, SourceType,
20+
contextify, get_exports_type_with_strict, stringify_map, BoxDependency, BuildContext, BuildInfo,
21+
BuildMeta, BuildResult, ChunkGraph, CodeGenerationResult, Compilation, ContextElementDependency,
22+
DependencyCategory, DependencyId, DependencyType, ExportsType, FakeNamespaceObjectMode,
23+
LibIdentOptions, Module, ModuleType, Resolve, ResolveOptionsWithDependencyType, ResolverFactory,
24+
RuntimeGlobals, SourceType,
2525
};
2626

2727
#[derive(Debug, Clone)]
@@ -272,18 +272,20 @@ impl ContextModule {
272272
.module_graph
273273
.module_identifier_by_dependency_id(dependency)
274274
{
275-
let dependency = compilation
275+
if let Some(dependency) = compilation
276276
.module_graph
277277
.dependency_by_id(dependency)
278-
.expect("should have dependency");
279-
map.insert(
280-
dependency.user_request().to_string(),
281-
if let Some(module_id) = compilation.chunk_graph.get_module_id(*module_identifier) {
282-
format!("\"{module_id}\"")
283-
} else {
284-
"null".to_string()
285-
},
286-
);
278+
.and_then(|d| d.as_module_dependency())
279+
{
280+
map.insert(
281+
dependency.user_request().to_string(),
282+
if let Some(module_id) = compilation.chunk_graph.get_module_id(*module_identifier) {
283+
format!("\"{module_id}\"")
284+
} else {
285+
"null".to_string()
286+
},
287+
);
288+
}
287289
}
288290
}
289291
}
@@ -559,7 +561,7 @@ impl ContextModule {
559561
fn visit_dirs(
560562
ctx: &str,
561563
dir: &Path,
562-
dependencies: &mut Vec<BoxModuleDependency>,
564+
dependencies: &mut Vec<BoxDependency>,
563565
options: &ContextModuleOptions,
564566
resolve_options: &nodejs_resolver::Options,
565567
) -> Result<()> {

crates/rspack_core/src/context_module_factory.rs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ use rspack_error::{IntoTWithDiagnosticArray, Result, TWithDiagnosticArray};
44
use tracing::instrument;
55

66
use crate::{
7-
cache::Cache, resolve, BoxModule, ContextModule, ContextModuleOptions, MissingModule,
8-
ModuleDependency, ModuleExt, ModuleFactory, ModuleFactoryCreateData, ModuleFactoryResult,
9-
ModuleIdentifier, NormalModuleBeforeResolveArgs, RawModule, ResolveArgs, ResolveError,
10-
ResolveResult, SharedPluginDriver,
7+
cache::Cache, resolve, BoxModule, ContextModule, ContextModuleOptions, MissingModule, ModuleExt,
8+
ModuleFactory, ModuleFactoryCreateData, ModuleFactoryResult, ModuleIdentifier,
9+
NormalModuleBeforeResolveArgs, RawModule, ResolveArgs, ResolveError, ResolveResult,
10+
SharedPluginDriver,
1111
};
1212

1313
pub struct ContextModuleFactory {
@@ -41,16 +41,20 @@ impl ContextModuleFactory {
4141
&mut self,
4242
data: &mut ModuleFactoryCreateData,
4343
) -> Result<Option<TWithDiagnosticArray<ModuleFactoryResult>>> {
44+
let dependency = data
45+
.dependency
46+
.as_module_dependency_mut()
47+
.expect("should be module dependency");
4448
let mut before_resolve_args = NormalModuleBeforeResolveArgs {
45-
request: data.dependency.request().to_string(),
49+
request: dependency.request().to_string(),
4650
context: data.context.to_string(),
4751
};
4852
if let Ok(Some(false)) = self
4953
.plugin_driver
5054
.context_module_before_resolve(&mut before_resolve_args)
5155
.await
5256
{
53-
let specifier = data.dependency.request();
57+
let specifier = dependency.request();
5458
let ident = format!("{}{specifier}", data.context);
5559

5660
let module_identifier = ModuleIdentifier::from(format!("missing|{ident}"));
@@ -66,26 +70,30 @@ impl ContextModuleFactory {
6670
));
6771
}
6872
data.context = before_resolve_args.context.into();
69-
data.dependency.set_request(before_resolve_args.request);
73+
dependency.set_request(before_resolve_args.request);
7074
Ok(None)
7175
}
7276

7377
pub async fn resolve(
7478
&self,
7579
data: ModuleFactoryCreateData,
7680
) -> Result<TWithDiagnosticArray<ModuleFactoryResult>> {
81+
let dependency = data
82+
.dependency
83+
.as_module_dependency()
84+
.expect("should be module dependency");
7785
let factory_meta = Default::default();
7886
let mut file_dependencies = Default::default();
7987
let mut missing_dependencies = Default::default();
8088
let context_dependencies = Default::default();
81-
let specifier = data.dependency.request();
89+
let specifier = dependency.request();
8290
let resolve_args = ResolveArgs {
8391
context: data.context.clone(),
8492
importer: None,
8593
specifier,
86-
dependency_type: data.dependency.dependency_type(),
87-
dependency_category: data.dependency.category(),
88-
span: data.dependency.span().cloned(),
94+
dependency_type: dependency.dependency_type(),
95+
dependency_category: dependency.category(),
96+
span: dependency.span().cloned(),
8997
resolve_options: data.resolve_options.clone(),
9098
resolve_to_context: true,
9199
optional: false,
@@ -106,11 +114,7 @@ impl ContextModuleFactory {
106114
resource_query: resource.query,
107115
resource_fragment: resource.fragment,
108116
resolve_options: data.resolve_options,
109-
context_options: data
110-
.dependency
111-
.options()
112-
.expect("should has options")
113-
.clone(),
117+
context_options: dependency.options().expect("should has options").clone(),
114118
},
115119
plugin_driver.resolver_factory.clone(),
116120
)) as BoxModule,

crates/rspack_core/src/dependency/context_element_dependency.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
2-
Context, ContextMode, ContextOptions, Dependency, DependencyCategory, DependencyId,
3-
DependencyType, ModuleDependency,
2+
AsDependencyTemplate, Context, ContextMode, ContextOptions, Dependency, DependencyCategory,
3+
DependencyId, DependencyType, ModuleDependency,
44
};
55

66
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
@@ -16,6 +16,10 @@ pub struct ContextElementDependency {
1616
}
1717

1818
impl Dependency for ContextElementDependency {
19+
fn id(&self) -> &DependencyId {
20+
&self.id
21+
}
22+
1923
fn category(&self) -> &DependencyCategory {
2024
&self.category
2125
}
@@ -30,10 +34,6 @@ impl Dependency for ContextElementDependency {
3034
}
3135

3236
impl ModuleDependency for ContextElementDependency {
33-
fn id(&self) -> &DependencyId {
34-
&self.id
35-
}
36-
3737
fn request(&self) -> &str {
3838
&self.request
3939
}
@@ -65,3 +65,5 @@ impl ModuleDependency for ContextElementDependency {
6565
Some(&self.resource_identifier)
6666
}
6767
}
68+
69+
impl AsDependencyTemplate for ContextElementDependency {}

crates/rspack_core/src/dependency/dependency_template.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,17 @@ pub trait DependencyTemplate: Debug + Sync + Send {
2121
code_generatable_context: &mut TemplateContext,
2222
);
2323
}
24+
25+
pub type BoxDependencyTemplate = Box<dyn DependencyTemplate>;
26+
27+
pub trait AsDependencyTemplate {
28+
fn as_dependency_template(&self) -> Option<&dyn DependencyTemplate> {
29+
None
30+
}
31+
}
32+
33+
impl<T: DependencyTemplate> AsDependencyTemplate for T {
34+
fn as_dependency_template(&self) -> Option<&dyn DependencyTemplate> {
35+
Some(self)
36+
}
37+
}

crates/rspack_core/src/dependency/entry.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{
2-
Dependency, DependencyCategory, DependencyId, DependencyType, ErrorSpan, ModuleDependency,
2+
AsDependencyTemplate, Dependency, DependencyCategory, DependencyId, DependencyType, ErrorSpan,
3+
ModuleDependency,
34
};
45

56
#[derive(Debug, Hash, PartialEq, Eq, Clone)]
@@ -18,6 +19,10 @@ impl EntryDependency {
1819
}
1920

2021
impl Dependency for EntryDependency {
22+
fn id(&self) -> &DependencyId {
23+
&self.id
24+
}
25+
2126
fn category(&self) -> &DependencyCategory {
2227
&DependencyCategory::Esm
2328
}
@@ -28,10 +33,6 @@ impl Dependency for EntryDependency {
2833
}
2934

3035
impl ModuleDependency for EntryDependency {
31-
fn id(&self) -> &DependencyId {
32-
&self.id
33-
}
34-
3536
fn request(&self) -> &str {
3637
&self.request
3738
}
@@ -48,3 +49,5 @@ impl ModuleDependency for EntryDependency {
4849
self.request = request;
4950
}
5051
}
52+
53+
impl AsDependencyTemplate for EntryDependency {}

0 commit comments

Comments
 (0)