@@ -62,14 +62,9 @@ export function pitch(
6262
6363 validateSizes ( options . sizes ) ;
6464
65- generateSrcSetString ( this , remainingRequest , options )
66- . then ( ( srcSetString ) => {
67- callback (
68- null ,
69- `${
70- options . esModule ? "export default" : "module.exports ="
71- } \`${ srcSetString } \`;`
72- ) ;
65+ generateVirtualModuleCode ( this , remainingRequest , options )
66+ . then ( ( code ) => {
67+ callback ( null , code ) ;
7368 } )
7469 . catch ( ( error ) => {
7570 callback ( error , undefined ) ;
@@ -87,6 +82,11 @@ export function defaultResizeLoaderOptionsGenerator(
8782) : Record < string , any > {
8883 return {
8984 ...existingOptions ,
85+ ...( existingOptions ?. fileLoaderOptionsGenerator
86+ ? {
87+ fileLoaderOptionsGenerator : existingOptions . fileLoaderOptionsGenerator . toString ( ) ,
88+ }
89+ : { } ) ,
9090 // since we filtered out all the width that are too wide,
9191 // nothing to worry about there, need this to make sure
9292 // scales larger than 1x works
@@ -96,22 +96,33 @@ export function defaultResizeLoaderOptionsGenerator(
9696 } ;
9797}
9898
99- // return require('-!some-loader?{...}!resize-loader?{...}!file.png')
100- async function generateSrcSetString (
99+ /**
100+ * generate
101+ *
102+ * const import_0 = require('-!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/file-loader/dist/cjs.js!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/webpack-image-resize-loader/dist/cjs.js?{"scaleUp":true,"scale":0.5}!/Users/Calvin/GitHub/webpack-image-srcset-loader/test/e2e/fixtures/Macaca_nigra_self-portrait_large.jpg');
103+ * const import_1 = require('-!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/file-loader/dist/cjs.js!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/webpack-image-resize-loader/dist/cjs.js?{"scaleUp":true,"width":300}!/Users/Calvin/GitHub/webpack-image-srcset-loader/test/e2e/fixtures/Macaca_nigra_self-portrait_large.jpg');
104+ * const import_2 = require('-!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/file-loader/dist/cjs.js!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/webpack-image-resize-loader/dist/cjs.js?{"scaleUp":true}!/Users/Calvin/GitHub/webpack-image-srcset-loader/test/e2e/fixtures/Macaca_nigra_self-portrait_large.jpg');
105+ * const import_3 = require('-!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/file-loader/dist/cjs.js!/Users/Calvin/GitHub/webpack-image-srcset-loader/node_modules/webpack-image-resize-loader/dist/cjs.js?{"scaleUp":true,"scale":1}!/Users/Calvin/GitHub/webpack-image-srcset-loader/test/e2e/fixtures/Macaca_nigra_self-portrait_large.jpg');
106+ *
107+ * export default `${import_0.default || import_0} 1x, ${import_1.default || import_1} 300w, ${import_2.default || import_2}, ${import_3.default || import_3} 2x`;
108+ */
109+ async function generateVirtualModuleCode (
101110 context : loader . LoaderContext ,
102111 remainingRequest : string ,
103112 options : FullOptions
104113) : Promise < string > {
105114 const { fs, resourcePath } = context ;
106115
107- let result = "" ;
116+ let importBlock = "" ;
117+ let exportBlock = "" ;
118+ let importCount = 0 ;
108119 let width : number | undefined ;
109120
110121 const sizes = options . sizes ;
111122 const maxDensity = getMaxDensity ( sizes ) ;
112123 const separator = ", " ;
113- const requireStart = "${require('-! " ;
114- const requireEnd = "').default }" ;
124+ const tsStart = "${" ;
125+ const tsEnd = "}" ;
115126
116127 for ( const size of sizes ) {
117128 // no need for options.scale or options.width if size === "orignal"
@@ -124,8 +135,10 @@ async function generateSrcSetString(
124135 options . resizeLoaderOptionsGenerator
125136 ) ;
126137
127- result += `${ requireStart } ${ requireString } ${ requireEnd } ${ separator } ` ;
138+ importBlock += `const import_${ importCount } = require('-!${ requireString } ');\n` ;
139+ exportBlock += `${ tsStart } import_${ importCount } .default || import_${ importCount } ${ tsEnd } ${ separator } ` ;
128140
141+ importCount ++ ;
129142 continue ;
130143 }
131144
@@ -148,10 +161,19 @@ async function generateSrcSetString(
148161 options . resizeLoaderOptionsGenerator
149162 ) ;
150163
151- result += `${ requireStart } ${ requireString } ${ requireEnd } ${ size } ${ separator } ` ;
164+ importBlock += `const import_${ importCount } = require('-!${ requireString } ');\n` ;
165+ exportBlock += `${ tsStart } import_${ importCount } .default || import_${ importCount } ${ tsEnd } ${ size } ${ separator } ` ;
166+
167+ importCount ++ ;
152168 }
153169
154- result = result . substring ( 0 , result . length - 2 ) ;
170+ exportBlock = exportBlock . substring ( 0 , exportBlock . length - 2 ) ;
171+
172+ const result = `
173+ ${ importBlock }
174+ ${
175+ options . esModule ? "export default `" : "module.exports = `"
176+ } ${ exportBlock } \`;`. trim ( ) ;
155177
156178 return result ;
157179}
0 commit comments