11use std:: {
2+ collections:: HashMap ,
23 hash:: Hash ,
34 ptr:: NonNull ,
45 sync:: { Arc , RwLock } ,
@@ -13,32 +14,32 @@ use napi::{
1314use rspack_collections:: { IdentifierMap , IdentifierSet } ;
1415use rspack_core:: {
1516 AfterResolveResult , AssetEmittedInfo , AsyncModulesArtifact , BeforeResolveResult , BindingCell ,
16- BoxModule , ChunkUkey , Compilation , CompilationAdditionalTreeRuntimeRequirements ,
17+ BoxModule , ChunkGraph , ChunkUkey , Compilation , CompilationAdditionalTreeRuntimeRequirements ,
1718 CompilationAdditionalTreeRuntimeRequirementsHook , CompilationAfterOptimizeModules ,
1819 CompilationAfterOptimizeModulesHook , CompilationAfterProcessAssets ,
1920 CompilationAfterProcessAssetsHook , CompilationAfterSeal , CompilationAfterSealHook ,
20- CompilationBuildModule , CompilationBuildModuleHook , CompilationChunkAsset ,
21- CompilationChunkAssetHook , CompilationChunkHash , CompilationChunkHashHook ,
22- CompilationExecuteModule , CompilationExecuteModuleHook , CompilationFinishModules ,
23- CompilationFinishModulesHook , CompilationId , CompilationOptimizeChunkModules ,
24- CompilationOptimizeChunkModulesHook , CompilationOptimizeModules , CompilationOptimizeModulesHook ,
25- CompilationOptimizeTree , CompilationOptimizeTreeHook , CompilationParams ,
26- CompilationProcessAssets , CompilationProcessAssetsHook , CompilationRuntimeModule ,
27- CompilationRuntimeModuleHook , CompilationRuntimeRequirementInTree ,
28- CompilationRuntimeRequirementInTreeHook , CompilationSeal , CompilationSealHook ,
29- CompilationStillValidModule , CompilationStillValidModuleHook , CompilationSucceedModule ,
30- CompilationSucceedModuleHook , CompilerAfterEmit , CompilerAfterEmitHook , CompilerAssetEmitted ,
31- CompilerAssetEmittedHook , CompilerCompilation , CompilerCompilationHook , CompilerEmit ,
32- CompilerEmitHook , CompilerFinishMake , CompilerFinishMakeHook , CompilerId , CompilerMake ,
33- CompilerMakeHook , CompilerShouldEmit , CompilerShouldEmitHook , CompilerThisCompilation ,
34- CompilerThisCompilationHook , ContextModuleFactoryAfterResolve ,
21+ CompilationBeforeModuleIds , CompilationBeforeModuleIdsHook , CompilationBuildModule ,
22+ CompilationBuildModuleHook , CompilationChunkAsset , CompilationChunkAssetHook ,
23+ CompilationChunkHash , CompilationChunkHashHook , CompilationExecuteModule ,
24+ CompilationExecuteModuleHook , CompilationFinishModules , CompilationFinishModulesHook ,
25+ CompilationId , CompilationOptimizeChunkModules , CompilationOptimizeChunkModulesHook ,
26+ CompilationOptimizeModules , CompilationOptimizeModulesHook , CompilationOptimizeTree ,
27+ CompilationOptimizeTreeHook , CompilationParams , CompilationProcessAssets ,
28+ CompilationProcessAssetsHook , CompilationRuntimeModule , CompilationRuntimeModuleHook ,
29+ CompilationRuntimeRequirementInTree , CompilationRuntimeRequirementInTreeHook , CompilationSeal ,
30+ CompilationSealHook , CompilationStillValidModule , CompilationStillValidModuleHook ,
31+ CompilationSucceedModule , CompilationSucceedModuleHook , CompilerAfterEmit , CompilerAfterEmitHook ,
32+ CompilerAssetEmitted , CompilerAssetEmittedHook , CompilerCompilation , CompilerCompilationHook ,
33+ CompilerEmit , CompilerEmitHook , CompilerFinishMake , CompilerFinishMakeHook , CompilerId ,
34+ CompilerMake , CompilerMakeHook , CompilerShouldEmit , CompilerShouldEmitHook ,
35+ CompilerThisCompilation , CompilerThisCompilationHook , ContextModuleFactoryAfterResolve ,
3536 ContextModuleFactoryAfterResolveHook , ContextModuleFactoryBeforeResolve ,
3637 ContextModuleFactoryBeforeResolveHook , ExecuteModuleId , Module , ModuleFactoryCreateData ,
37- ModuleIdentifier , NormalModuleCreateData , NormalModuleFactoryAfterResolve ,
38- NormalModuleFactoryAfterResolveHook , NormalModuleFactoryBeforeResolve ,
39- NormalModuleFactoryBeforeResolveHook , NormalModuleFactoryCreateModule ,
40- NormalModuleFactoryCreateModuleHook , NormalModuleFactoryFactorize ,
41- NormalModuleFactoryFactorizeHook , NormalModuleFactoryResolve ,
38+ ModuleId , ModuleIdentifier , ModuleIdsArtifact , NormalModuleCreateData ,
39+ NormalModuleFactoryAfterResolve , NormalModuleFactoryAfterResolveHook ,
40+ NormalModuleFactoryBeforeResolve , NormalModuleFactoryBeforeResolveHook ,
41+ NormalModuleFactoryCreateModule , NormalModuleFactoryCreateModuleHook ,
42+ NormalModuleFactoryFactorize , NormalModuleFactoryFactorizeHook , NormalModuleFactoryResolve ,
4243 NormalModuleFactoryResolveForScheme , NormalModuleFactoryResolveForSchemeHook ,
4344 NormalModuleFactoryResolveHook , NormalModuleFactoryResolveResult , ResourceData , RuntimeGlobals ,
4445 RuntimeModule , Scheme , build_module_graph:: BuildModuleGraphArtifact , parse_resource,
@@ -101,6 +102,34 @@ use crate::{
101102 source:: JsSourceToJs ,
102103} ;
103104
105+ #[ napi( object) ]
106+ pub struct JsModuleForIds {
107+ pub identifier : String ,
108+ }
109+
110+ #[ napi( object) ]
111+ pub struct JsBeforeModuleIdsArg {
112+ pub modules : Vec < JsModuleForIds > ,
113+ }
114+
115+ impl JsBeforeModuleIdsArg {
116+ pub fn new ( _compilation : & Compilation , modules : & IdentifierSet ) -> Self {
117+ Self {
118+ modules : modules
119+ . iter ( )
120+ . map ( |id| JsModuleForIds {
121+ identifier : id. to_string ( ) ,
122+ } )
123+ . collect ( ) ,
124+ }
125+ }
126+ }
127+
128+ #[ napi( object) ]
129+ pub struct JsBeforeModuleIdsResult {
130+ pub assignments : HashMap < String , String > ,
131+ }
132+
104133#[ napi( object) ]
105134pub struct JsTap < ' f > {
106135 #[ napi( ts_type = "(...args: any[]) => any" ) ]
@@ -343,6 +372,7 @@ pub enum RegisterJsTapKind {
343372 CompilationAfterOptimizeModules ,
344373 CompilationOptimizeTree ,
345374 CompilationOptimizeChunkModules ,
375+ CompilationBeforeModuleIds ,
346376 CompilationAdditionalTreeRuntimeRequirements ,
347377 CompilationRuntimeRequirementInTree ,
348378 CompilationRuntimeModule ,
@@ -479,6 +509,11 @@ pub struct RegisterJsTaps {
479509 ts_type = "(stages: Array<number>) => Array<{ function: (() => Promise<boolean | undefined>); stage: number; }>"
480510 ) ]
481511 pub register_compilation_optimize_chunk_modules_taps : RegisterFunction < ( ) , Promise < Option < bool > > > ,
512+ #[ napi(
513+ ts_type = "(stages: Array<number>) => Array<{ function: ((arg: JsBeforeModuleIdsArg) => JsBeforeModuleIdsResult); stage: number; }>"
514+ ) ]
515+ pub register_compilation_before_module_ids_taps :
516+ RegisterFunction < JsBeforeModuleIdsArg , JsBeforeModuleIdsResult > ,
482517 #[ napi(
483518 ts_type = "(stages: Array<number>) => Array<{ function: ((arg: Chunk) => Buffer); stage: number; }>"
484519 ) ]
@@ -750,6 +785,13 @@ define_register!(
750785 kind = RegisterJsTapKind :: CompilationOptimizeChunkModules ,
751786 skip = true ,
752787) ;
788+ define_register ! (
789+ RegisterCompilationBeforeModuleIdsTaps ,
790+ tap = CompilationBeforeModuleIdsTap <JsBeforeModuleIdsArg , JsBeforeModuleIdsResult > @ CompilationBeforeModuleIdsHook ,
791+ cache = false ,
792+ kind = RegisterJsTapKind :: CompilationBeforeModuleIds ,
793+ skip = true ,
794+ ) ;
753795define_register ! (
754796 RegisterCompilationAdditionalTreeRuntimeRequirementsTaps ,
755797 tap = CompilationAdditionalTreeRuntimeRequirementsTap <JsAdditionalTreeRuntimeRequirementsArg , Option <JsAdditionalTreeRuntimeRequirementsResult >> @ CompilationAdditionalTreeRuntimeRequirementsHook ,
@@ -1275,6 +1317,30 @@ impl CompilationOptimizeChunkModules for CompilationOptimizeChunkModulesTap {
12751317 }
12761318}
12771319
1320+ #[ async_trait]
1321+ impl CompilationBeforeModuleIds for CompilationBeforeModuleIdsTap {
1322+ async fn run (
1323+ & self ,
1324+ compilation : & Compilation ,
1325+ modules : & IdentifierSet ,
1326+ module_ids : & mut ModuleIdsArtifact ,
1327+ ) -> rspack_error:: Result < ( ) > {
1328+ let arg = JsBeforeModuleIdsArg :: new ( compilation, modules) ;
1329+ let result: JsBeforeModuleIdsResult = self . function . call_with_sync ( arg) . await ?;
1330+
1331+ for ( identifier_str, id) in result. assignments {
1332+ let identifier = ModuleIdentifier :: from ( identifier_str. as_str ( ) ) ;
1333+ ChunkGraph :: set_module_id ( module_ids, identifier, ModuleId :: from ( id) ) ;
1334+ }
1335+
1336+ Ok ( ( ) )
1337+ }
1338+
1339+ fn stage ( & self ) -> i32 {
1340+ self . stage
1341+ }
1342+ }
1343+
12781344#[ async_trait]
12791345impl CompilationAdditionalTreeRuntimeRequirements
12801346 for CompilationAdditionalTreeRuntimeRequirementsTap
0 commit comments