Skip to content

Commit ed4b6ed

Browse files
authored
refactor: make compilation readonly for runtimeModule hook (#12670)
1 parent 4ecc5cb commit ed4b6ed

File tree

3 files changed

+20
-18
lines changed

3 files changed

+20
-18
lines changed

crates/rspack_binding_api/src/plugins/interceptor.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use napi::{
1010
Env, JsValue,
1111
bindgen_prelude::{Buffer, FromNapiValue, Function, JsValuesTupleIntoVec, Promise, ToNapiValue},
1212
};
13-
use rspack_collections::IdentifierSet;
13+
use rspack_collections::{IdentifierMap, IdentifierSet};
1414
use rspack_core::{
1515
AfterResolveResult, AssetEmittedInfo, AsyncModulesArtifact, BeforeResolveResult, BindingCell,
1616
BoxModule, ChunkUkey, Compilation, CompilationAdditionalTreeRuntimeRequirements,
@@ -41,7 +41,7 @@ use rspack_core::{
4141
NormalModuleFactoryFactorizeHook, NormalModuleFactoryResolve,
4242
NormalModuleFactoryResolveForScheme, NormalModuleFactoryResolveForSchemeHook,
4343
NormalModuleFactoryResolveHook, NormalModuleFactoryResolveResult, ResourceData, RuntimeGlobals,
44-
Scheme, build_module_graph::BuildModuleGraphArtifact, parse_resource,
44+
RuntimeModule, Scheme, build_module_graph::BuildModuleGraphArtifact, parse_resource,
4545
rspack_sources::RawStringSource,
4646
};
4747
use rspack_error::Diagnostic;
@@ -1340,11 +1340,12 @@ impl CompilationRuntimeRequirementInTree for CompilationRuntimeRequirementInTree
13401340
impl CompilationRuntimeModule for CompilationRuntimeModuleTap {
13411341
async fn run(
13421342
&self,
1343-
compilation: &mut Compilation,
1343+
compilation: &Compilation,
13441344
m: &ModuleIdentifier,
13451345
chunk_ukey: &ChunkUkey,
1346+
runtime_modules: &mut IdentifierMap<Box<dyn RuntimeModule>>,
13461347
) -> rspack_error::Result<()> {
1347-
let Some(module) = compilation.runtime_modules.get(m) else {
1348+
let Some(module) = runtime_modules.get(m) else {
13481349
return Ok(());
13491350
};
13501351
let source_string = module.generate(compilation).await?;
@@ -1364,10 +1365,7 @@ impl CompilationRuntimeModule for CompilationRuntimeModuleTap {
13641365
if let Some(module) = self.function.call_with_sync(arg).await?
13651366
&& let Some(source) = module.source
13661367
{
1367-
let module = compilation
1368-
.runtime_modules
1369-
.get_mut(m)
1370-
.expect("should have module");
1368+
let module = runtime_modules.get_mut(m).expect("should have module");
13711369
match source.source {
13721370
napi::Either::A(string) => {
13731371
module.set_custom_source(string);

crates/rspack_core/src/compilation/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ define_hook!(CompilationOptimizeTree: Series(compilation: &Compilation));
8686
define_hook!(CompilationOptimizeChunkModules: SeriesBail(compilation: &mut Compilation) -> bool);
8787
define_hook!(CompilationModuleIds: Series(compilation: &Compilation, module_ids: &mut ModuleIdsArtifact, diagnostics: &mut Vec<Diagnostic>));
8888
define_hook!(CompilationChunkIds: Series(compilation: &Compilation, chunk_by_ukey: &mut ChunkByUkey, named_chunk_ids_artifact: &mut ChunkNamedIdArtifact, diagnostics: &mut Vec<Diagnostic>));
89-
define_hook!(CompilationRuntimeModule: Series(compilation: &mut Compilation, module: &ModuleIdentifier, chunk: &ChunkUkey));
89+
define_hook!(CompilationRuntimeModule: Series(compilation: &Compilation, module: &ModuleIdentifier, chunk: &ChunkUkey, runtime_modules: &mut IdentifierMap<Box<dyn RuntimeModule>>));
9090
define_hook!(CompilationAdditionalModuleRuntimeRequirements: Series(compilation: &Compilation, module_identifier: &ModuleIdentifier, runtime_requirements: &mut RuntimeGlobals),tracing=false);
9191
define_hook!(CompilationRuntimeRequirementInModule: SeriesBail(compilation: &Compilation, module_identifier: &ModuleIdentifier, all_runtime_requirements: &RuntimeGlobals, runtime_requirements: &RuntimeGlobals, runtime_requirements_mut: &mut RuntimeGlobals),tracing=false);
9292
define_hook!(CompilationAdditionalChunkRuntimeRequirements: Series(compilation: &mut Compilation, chunk_ukey: &ChunkUkey, runtime_requirements: &mut RuntimeGlobals));
@@ -2286,6 +2286,7 @@ impl Compilation {
22862286
// NOTE: webpack runs hooks.runtime_module in compilation.add_runtime_module
22872287
// and overwrite the runtime_module.generate() to get new source in create_chunk_assets
22882288
// this needs full runtime requirements, so run hooks.runtime_module after runtime_requirements_in_tree
2289+
let mut runtime_modules = mem::take(&mut self.runtime_modules);
22892290
for entry_ukey in &entries {
22902291
let runtime_module_ids: Vec<_> = self
22912292
.chunk_graph
@@ -2296,11 +2297,12 @@ impl Compilation {
22962297
plugin_driver
22972298
.compilation_hooks
22982299
.runtime_module
2299-
.call(self, &runtime_module_id, entry_ukey)
2300+
.call(self, &runtime_module_id, entry_ukey, &mut runtime_modules)
23002301
.await
23012302
.map_err(|e| e.wrap_err("caused by plugins in Compilation.hooks.runtimeModule"))?;
23022303
}
23032304
}
2305+
self.runtime_modules = runtime_modules;
23042306

23052307
logger.time_end(start);
23062308
Ok(())

crates/rspack_plugin_devtool/src/source_map_dev_tool_module_options_plugin.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
use rspack_collections::IdentifierMap;
12
use rspack_core::{
23
BoxModule, ChunkUkey, Compilation, CompilationBuildModule, CompilationId,
3-
CompilationRuntimeModule, CompilerId, ModuleIdentifier, Plugin,
4+
CompilationRuntimeModule, CompilerId, ModuleIdentifier, Plugin, RuntimeModule,
45
};
56
use rspack_error::Result;
67
use rspack_hook::{plugin, plugin_hook};
@@ -46,21 +47,22 @@ async fn build_module(
4647
#[plugin_hook(CompilationRuntimeModule for SourceMapDevToolModuleOptionsPlugin)]
4748
async fn runtime_module(
4849
&self,
49-
compilation: &mut Compilation,
50-
module: &ModuleIdentifier,
50+
_compilation: &Compilation,
51+
module_identifier: &ModuleIdentifier,
5152
_chunk: &ChunkUkey,
53+
runtime_modules: &mut IdentifierMap<Box<dyn RuntimeModule>>,
5254
) -> Result<()> {
53-
let Some(module) = compilation.runtime_modules.get_mut(module) else {
55+
let Some(runtime_module) = runtime_modules.get_mut(module_identifier) else {
5456
return Ok(());
5557
};
5658
if self.module {
57-
module.set_source_map_kind(SourceMapKind::SourceMap);
59+
runtime_module.set_source_map_kind(SourceMapKind::SourceMap);
5860
} else {
59-
module.set_source_map_kind(SourceMapKind::SimpleSourceMap);
61+
runtime_module.set_source_map_kind(SourceMapKind::SimpleSourceMap);
6062
}
6163
if self.cheap {
62-
let current_kind = *module.get_source_map_kind();
63-
module.set_source_map_kind(current_kind | SourceMapKind::Cheap)
64+
let current_kind = *runtime_module.get_source_map_kind();
65+
runtime_module.set_source_map_kind(current_kind | SourceMapKind::Cheap)
6466
}
6567
Ok(())
6668
}

0 commit comments

Comments
 (0)