@@ -27,6 +27,7 @@ const memoize = require("../util/memoize");
2727/** @typedef {import("../Module").BuildInfo } BuildInfo */
2828/** @typedef {import("../Module").CodeGenerationResult } CodeGenerationResult */
2929/** @typedef {import("../NormalModule") } NormalModule */
30+ /** @typedef {import("../NormalModule").NormalModuleCreateData } NormalModuleCreateData */
3031
3132/**
3233 * @param {string } name name of definitions
@@ -80,6 +81,7 @@ const getAssetSourceGenerator = memoize(() =>
8081 require ( "./AssetSourceGenerator" )
8182) ;
8283const getAssetBytesGenerator = memoize ( ( ) => require ( "./AssetBytesGenerator" ) ) ;
84+ const getNormalModule = memoize ( ( ) => require ( "../NormalModule" ) ) ;
8385
8486const type = ASSET_MODULE_TYPE ;
8587const PLUGIN_NAME = "AssetModulesPlugin" ;
@@ -94,6 +96,27 @@ class AssetModulesPlugin {
9496 compiler . hooks . compilation . tap (
9597 PLUGIN_NAME ,
9698 ( compilation , { normalModuleFactory } ) => {
99+ const NormalModule = getNormalModule ( ) ;
100+ for ( const type of [
101+ ASSET_MODULE_TYPE ,
102+ ASSET_MODULE_TYPE_BYTES ,
103+ ASSET_MODULE_TYPE_INLINE ,
104+ ASSET_MODULE_TYPE_RESOURCE ,
105+ ASSET_MODULE_TYPE_SOURCE
106+ ] ) {
107+ normalModuleFactory . hooks . createModuleClass
108+ . for ( type )
109+ . tap ( PLUGIN_NAME , ( createData , _resolveData ) => {
110+ // TODO create the module via new AssetModule with its own properties
111+ const module = new NormalModule (
112+ /** @type {NormalModuleCreateData } */
113+ ( createData )
114+ ) ;
115+ module . factoryMeta = { sideEffectFree : true } ;
116+ return module ;
117+ } ) ;
118+ }
119+
97120 normalModuleFactory . hooks . createParser
98121 . for ( ASSET_MODULE_TYPE )
99122 . tap ( PLUGIN_NAME , ( parserOptions ) => {
0 commit comments