@@ -736,9 +736,10 @@ class AssetCompiler {
736736 let encoding = 'base64' ; // default encoding for all resources
737737 let hasInlineQuery = getQueryParam ( resource , 'inline' ) != null ;
738738 let isInlineSvg = false ;
739+ let svgOptions ;
739740
740741 if ( this . assetInline . isSvgFile ( resource ) ) {
741- const svgOptions = this . pluginOption . getInlineSvgOptions ( resource , createData ) ;
742+ svgOptions = this . pluginOption . getInlineSvgOptions ( resource , createData ) ;
742743
743744 isInlineSvg = svgOptions != null ;
744745 encoding = svgOptions ?. encoding ;
@@ -747,7 +748,7 @@ class AssetCompiler {
747748 // query `?inline`
748749 if ( hasInlineQuery || isInlineSvg ) {
749750 this . setAssetModuleTypeInline ( createData ) ;
750- this . setAssetModuleEncoding ( createData , encoding ) ;
751+ this . setAssetModuleEncoding ( createData , encoding , hasInlineQuery , svgOptions ) ;
751752 }
752753 }
753754
@@ -816,8 +817,10 @@ class AssetCompiler {
816817 *
817818 * @param {Object } module
818819 * @param {'base64' | false } encoding
820+ * @param {boolean } hasInlineQuery
821+ * @param {Object | null } svgOptions
819822 */
820- setAssetModuleEncoding ( module , encoding ) {
823+ setAssetModuleEncoding ( module , encoding , hasInlineQuery , svgOptions ) {
821824 if ( this . IS_WEBPACK_VERSION_LOWER_5_96_0 ) {
822825 // TODO: refactor into Exceptions
823826 throw new Error ( `\nThe support for the \`?inline\` query for assets is available since Webpack >= 5.96.` ) ;
@@ -832,15 +835,38 @@ class AssetCompiler {
832835 const publicPath = module . generator . publicPath ;
833836 const outputPath = module . generator . outputPath ;
834837 const emit = module . generator . emit ;
838+ const issuer = module . resourceResolveData ?. context ?. issuer ;
839+ const isIssuerScript = this . pluginOption . isScript ( issuer || '' ) ;
835840 let dataUrlOptions ;
836841
837842 if ( dataUrlOptionsType === 'function' ) {
838843 dataUrlOptions = moduleDataUrlOptions ;
844+ if ( isIssuerScript ) {
845+ dataUrlOptions = ( ...args ) => {
846+ // extra processes SVG loaded in a JS file, because it will not be processed in renderManifest
847+ let res = moduleDataUrlOptions ( ...args ) ;
848+ let normalized = this . assetInline . normalizeEncoding ( res , svgOptions ) ;
849+
850+ // TODO: research why is called double (perhaps the JS file (issuer) is called double)
851+ // console.log(
852+ // ' ====> INJECTION: ',
853+ // { isIssuerScript, resource: module.resource, svgOptions, normalized },
854+ // res,
855+ // args
856+ // );
857+
858+ return normalized . dataUrl ;
859+ } ;
860+ } else {
861+ dataUrlOptions = moduleDataUrlOptions ;
862+ }
839863 } else {
840864 dataUrlOptions = dataUrlOptionsType === 'object' ? { ...moduleDataUrlOptions } : { } ;
841865 dataUrlOptions . encoding = assetEncoding ;
842866 }
843867
868+ //console.log('*** saveData: ', { resource: module.resource, encoding, dataUrlOptions }, '\n');
869+
844870 module . generator = new AssetGenerator ( moduleGraph , dataUrlOptions , filename , publicPath , outputPath , emit ) ;
845871 }
846872
@@ -1040,7 +1066,11 @@ class AssetCompiler {
10401066 *
10411067 * @param {Object } module The Webpack module.
10421068 */
1043- afterBuildModule ( module ) { }
1069+ afterBuildModule ( module ) {
1070+ // if (module.resource.includes('&js')) {
1071+ // console.log('*** afterBuildModule: ', module);
1072+ // }
1073+ }
10441074
10451075 /**
10461076 * @param {Array<Object> } result
@@ -1107,34 +1137,38 @@ class AssetCompiler {
11071137 moduleType = buildInfo . dataUrl === true ? ASSET_MODULE_TYPE_INLINE : ASSET_MODULE_TYPE_RESOURCE ;
11081138 }
11091139
1110- if ( this . assetInline . isSvgFile ( resource ) && this . pluginOption . isInlineSvg ( resource ) ) {
1111- this . assetInline . saveData ( entry , chunk , module , codeGenerationResults , moduleType ) ;
1112- }
1113-
1114- switch ( moduleType ) {
1115- case JAVASCRIPT_MODULE_TYPE_AUTO :
1116- const assetModule = this . createAssetModule ( entry , chunk , module ) ;
1140+ let svgOption = null ;
11171141
1118- if ( assetModule == null ) continue ;
1119- if ( assetModule === false ) return ;
1120-
1121- assetModules . add ( assetModule ) ;
1122- break ;
1123- case ASSET_MODULE_TYPE_RESOURCE :
1124- // resource required in the template or in the CSS via url()
1125- this . assetResource . saveData ( module ) ;
1126- break ;
1127- case ASSET_MODULE_TYPE_INLINE :
1128- this . assetInline . saveData ( entry , chunk , module , codeGenerationResults , moduleType ) ;
1129- break ;
1130- case ASSET_MODULE_TYPE_SOURCE :
1131- // support the source type for SVG only
1132- if ( this . assetInline . isSvgFile ( resource ) ) {
1142+ // TODO: refactor
1143+ if ( this . assetInline . isSvgFile ( resource ) && this . pluginOption . isInlineSvg ( resource ) ) {
1144+ svgOption = this . pluginOption . getInlineSvgOptions ( resource , module ) ;
1145+ this . assetInline . saveData ( entry , chunk , module , codeGenerationResults , moduleType , svgOption ) ;
1146+ } else {
1147+ switch ( moduleType ) {
1148+ case JAVASCRIPT_MODULE_TYPE_AUTO :
1149+ const assetModule = this . createAssetModule ( entry , chunk , module ) ;
1150+
1151+ if ( assetModule == null ) continue ;
1152+ if ( assetModule === false ) return ;
1153+
1154+ assetModules . add ( assetModule ) ;
1155+ break ;
1156+ case ASSET_MODULE_TYPE_RESOURCE :
1157+ // resource required in the template or in the CSS via url()
1158+ this . assetResource . saveData ( module ) ;
1159+ break ;
1160+ case ASSET_MODULE_TYPE_INLINE :
11331161 this . assetInline . saveData ( entry , chunk , module , codeGenerationResults , moduleType ) ;
1134- }
1135- break ;
1136- default :
1137- // do nothing
1162+ break ;
1163+ case ASSET_MODULE_TYPE_SOURCE :
1164+ // support the source type for SVG only
1165+ if ( this . assetInline . isSvgFile ( resource ) ) {
1166+ this . assetInline . saveData ( entry , chunk , module , codeGenerationResults , moduleType ) ;
1167+ }
1168+ break ;
1169+ default :
1170+ // do nothing
1171+ }
11381172 }
11391173 }
11401174
0 commit comments