Skip to content

Commit 79d7c9b

Browse files
authored
perf: merge HarmonyImportSideEffectDependency into HarmonyImportDependency (#4037)
1 parent 7a71faa commit 79d7c9b

File tree

6 files changed

+39
-200
lines changed

6 files changed

+39
-200
lines changed

crates/rspack_core/src/dependency/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ pub enum DependencyType {
4444
// Harmony import
4545
EsmImport,
4646
EsmImportSpecifier,
47-
EsmImportSideEffect,
4847
// Harmony export
4948
EsmExport,
5049
EsmExportImportedSpecifier,
@@ -96,7 +95,6 @@ impl Display for DependencyType {
9695
DependencyType::Unknown => write!(f, "unknown"),
9796
DependencyType::Entry => write!(f, "entry"),
9897
DependencyType::EsmImport => write!(f, "esm import"),
99-
DependencyType::EsmImportSideEffect => write!(f, "esm import side effect"),
10098
DependencyType::EsmExport => write!(f, "esm export"),
10199
DependencyType::EsmExportSpecifier => write!(f, "esm export specifier"),
102100
DependencyType::EsmExportImportedSpecifier => write!(f, "esm export import specifier"),

crates/rspack_plugin_javascript/src/dependency/esm/harmony_import_dependency.rs

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use rspack_core::tree_shaking::symbol::{self, IndirectTopLevelSymbol};
22
use rspack_core::tree_shaking::visitor::SymbolRef;
33
use rspack_core::{
4-
import_statement, Dependency, DependencyCategory, DependencyId, DependencyTemplate,
5-
DependencyType, ErrorSpan, InitFragment, InitFragmentStage, ModuleDependency, RuntimeGlobals,
6-
TemplateContext, TemplateReplaceSource,
4+
import_statement, ConnectionState, Dependency, DependencyCategory, DependencyCondition,
5+
DependencyId, DependencyTemplate, DependencyType, ErrorSpan, InitFragment, InitFragmentStage,
6+
ModuleDependency, ModuleIdentifier, RuntimeGlobals, TemplateContext, TemplateReplaceSource,
77
};
88
use rspack_core::{ExportsReferencedType, ModuleGraph, RuntimeSpec};
9+
use rustc_hash::FxHashSet as HashSet;
910
use swc_core::ecma::atoms::JsWord;
1011

1112
use super::create_resource_identifier_for_esm_dependency;
@@ -17,6 +18,7 @@ pub enum Specifier {
1718
Named(JsWord, Option<JsWord>),
1819
}
1920

21+
// HarmonyImportDependency is merged HarmonyImportSideEffectDependency.
2022
#[derive(Debug, Clone)]
2123
pub struct HarmonyImportDependency {
2224
pub request: JsWord,
@@ -236,4 +238,37 @@ impl ModuleDependency for HarmonyImportDependency {
236238
) -> ExportsReferencedType {
237239
ExportsReferencedType::No
238240
}
241+
242+
// It's from HarmonyImportSideEffectDependency.
243+
fn get_condition(&self, _module_graph: &ModuleGraph) -> Option<DependencyCondition> {
244+
let id = self.id;
245+
Some(DependencyCondition::Fn(Box::new(
246+
move |_, _, module_graph| {
247+
if let Some(module) = module_graph
248+
.parent_module_by_dependency_id(&id)
249+
.and_then(|module_identifier| module_graph.module_by_identifier(&module_identifier))
250+
{
251+
module.get_side_effects_connection_state(module_graph, &mut HashSet::default())
252+
} else {
253+
ConnectionState::Bool(true)
254+
}
255+
},
256+
)))
257+
}
258+
259+
// It's from HarmonyImportSideEffectDependency.
260+
fn get_module_evaluation_side_effects_state(
261+
&self,
262+
module_graph: &ModuleGraph,
263+
module_chain: &mut HashSet<ModuleIdentifier>,
264+
) -> ConnectionState {
265+
if let Some(module) = module_graph
266+
.parent_module_by_dependency_id(&self.id)
267+
.and_then(|module_identifier| module_graph.module_by_identifier(&module_identifier))
268+
{
269+
module.get_side_effects_connection_state(module_graph, module_chain)
270+
} else {
271+
ConnectionState::Bool(true)
272+
}
273+
}
239274
}

crates/rspack_plugin_javascript/src/dependency/esm/harmony_import_side_effect_dependency.rs

Lines changed: 0 additions & 96 deletions
This file was deleted.

crates/rspack_plugin_javascript/src/dependency/esm/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ pub use harmony_import_specifier_dependency::*;
1717
mod import_dependency;
1818
pub use import_dependency::*;
1919
use rspack_core::DependencyCategory;
20-
mod harmony_import_side_effect_dependency;
21-
pub use harmony_import_side_effect_dependency::*;
2220
pub fn create_resource_identifier_for_esm_dependency(request: &str) -> String {
2321
format!("{}|{}", DependencyCategory::Esm, &request)
2422
}

crates/rspack_plugin_javascript/src/visitors/dependency/harmony_import_dependency_scanner.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use swc_core::{
1818

1919
use crate::dependency::{
2020
HarmonyExportImportedSpecifierDependency, HarmonyImportDependency,
21-
HarmonyImportSideEffectDependency, HarmonyImportSpecifierDependency, Specifier,
21+
HarmonyImportSpecifierDependency, Specifier,
2222
};
2323

2424
pub struct ImporterReferenceInfo {
@@ -120,10 +120,6 @@ impl Visit for HarmonyImportDependencyScanner<'_> {
120120
dependency_type,
121121
importer_info.exports_all,
122122
)));
123-
// TODO merge HarmonyImportSideEffectDependency and HarmonyImportDependency
124-
self
125-
.dependencies
126-
.push(Box::new(HarmonyImportSideEffectDependency::new(request)));
127123
}
128124

129125
// collect import reference info

0 commit comments

Comments
 (0)