@@ -53,11 +53,10 @@ class CSSMonster {
5353 sources : [ path . resolve ( cwd , "src" ) ] ,
5454 minify : true ,
5555 purge : true ,
56- purgeCSS : {
57- content : [ path . resolve ( cwd , "**/*.html" ) ] ,
58- } ,
56+ purgeCSS : null ,
5957 blacklist : [ ] ,
6058 include : [ ] ,
59+ autoresolve : false ,
6160 } ;
6261 this . run ( ) ;
6362 }
@@ -67,7 +66,7 @@ class CSSMonster {
6766 if ( fs . existsSync ( this . tempDir ) ) {
6867 fs . rmdirSync ( this . tempDir , { recursive : true } ) ;
6968 }
70- fs . mkdir ( this . tempDir , error => {
69+ fs . mkdir ( this . tempDir , ( error ) => {
7170 if ( error ) {
7271 reject ( error ) ;
7372 }
@@ -179,12 +178,21 @@ class CSSMonster {
179178 }
180179 }
181180
181+ /** autoresolve */
182+ if ( typeof config . autoresolve !== "undefined" ) {
183+ if ( typeof config . autoresolve === "boolean" ) {
184+ this . config . autoresolve = config . autoresolve ;
185+ } else {
186+ reject ( "Incorrect configuration: autoresolve must be a boolean." ) ;
187+ }
188+ }
189+
182190 resolve ( ) ;
183191 } ) ;
184192 }
185193
186194 removeIgnored ( files ) {
187- return new Promise ( resolve => {
195+ return new Promise ( ( resolve ) => {
188196 if ( ! files . length || ! this . config . blacklist . length ) {
189197 resolve ( files ) ;
190198 }
@@ -225,17 +233,39 @@ class CSSMonster {
225233 resolve ( files ) ;
226234 }
227235 const movedFiles = [ ] ;
236+ let count = 0 ;
228237 for ( let i = 0 ; i < files . length ; i ++ ) {
229238 const filename = files [ i ] . replace ( / ( .* \/ ) | ( .* \\ ) / , "" ) ;
230- fs . copyFile ( files [ i ] , `${ this . tempDir } /${ filename } ` , error => {
231- if ( error ) {
232- reject ( error ) ;
233- }
234- movedFiles . push ( `${ this . tempDir } /${ filename } ` ) ;
235- if ( movedFiles . length === files . length ) {
236- resolve ( movedFiles ) ;
239+ if ( ! fs . existsSync ( `${ this . tempDir } /${ filename } ` ) ) {
240+ fs . copyFile ( files [ i ] , `${ this . tempDir } /${ filename } ` , ( error ) => {
241+ if ( error ) {
242+ reject ( error ) ;
243+ }
244+ movedFiles . push ( `${ this . tempDir } /${ filename } ` ) ;
245+ count ++ ;
246+ if ( count === files . length ) {
247+ resolve ( movedFiles ) ;
248+ }
249+ } ) ;
250+ } else {
251+ if ( this . config . autoresolve ) {
252+ const newFileData = fs . readFileSync ( files [ i ] ) . toString ( ) ;
253+ let tempFileData = fs . readFileSync ( `${ this . tempDir } /${ filename } ` ) . toString ( ) ;
254+ tempFileData += "\n" ;
255+ tempFileData += newFileData ;
256+ fs . writeFile ( `${ this . tempDir } /${ filename } ` , tempFileData , ( error ) => {
257+ if ( error ) {
258+ reject ( error ) ;
259+ }
260+ count ++ ;
261+ if ( count === files . length ) {
262+ resolve ( movedFiles ) ;
263+ }
264+ } ) ;
265+ } else {
266+ reject ( `Two files have the same name "${ filename } " rename one of the files or enable the CSSMonster autoresolve setting.` ) ;
237267 }
238- } ) ;
268+ }
239269 }
240270 } ) ;
241271 }
@@ -253,7 +283,7 @@ class CSSMonster {
253283 if ( fs . existsSync ( `${ this . tempDir } /normalize.css` ) ) {
254284 fs . unlinkSync ( `${ this . tempDir } /normalize.css` ) ;
255285 }
256- fs . writeFile ( `${ this . tempDir } /normalize.css` , data , error => {
286+ fs . writeFile ( `${ this . tempDir } /normalize.css` , data , ( error ) => {
257287 if ( error ) {
258288 reject ( error ) ;
259289 }
@@ -297,7 +327,7 @@ class CSSMonster {
297327 let fileName = result . stats . entry . replace ( / ( .* \/ ) | ( .* \\ ) / , "" ) . replace ( / ( .s c s s ) $ / g, "" ) ;
298328 if ( fileName ) {
299329 const newFile = `${ this . tempDir } /${ fileName } .css` ;
300- fs . writeFile ( newFile , result . css . toString ( ) , error => {
330+ fs . writeFile ( newFile , result . css . toString ( ) , ( error ) => {
301331 if ( error ) {
302332 reject ( "Something went wrong saving the file" + error ) ;
303333 }
@@ -327,12 +357,12 @@ class CSSMonster {
327357 let minified = 0 ;
328358 for ( let i = 0 ; i < files . length ; i ++ ) {
329359 minify ( files [ i ] )
330- . then ( css => {
331- fs . unlink ( files [ i ] , error => {
360+ . then ( ( css ) => {
361+ fs . unlink ( files [ i ] , ( error ) => {
332362 if ( error ) {
333363 reject ( error ) ;
334364 }
335- fs . writeFile ( files [ i ] , css , error => {
365+ fs . writeFile ( files [ i ] , css , ( error ) => {
336366 if ( error ) {
337367 reject ( error ) ;
338368 }
@@ -343,7 +373,7 @@ class CSSMonster {
343373 } ) ;
344374 } ) ;
345375 } )
346- . catch ( error => {
376+ . catch ( ( error ) => {
347377 reject ( error ) ;
348378 } ) ;
349379 }
@@ -362,12 +392,12 @@ class CSSMonster {
362392 purgeCSSConfig . css = [ `${ this . tempDir } /**/*.css` ] ;
363393 const purgecssResult = await new PurgeCSS ( ) . purge ( purgeCSSConfig ) ;
364394 const purgedFiles = [ ] ;
365- purgecssResult . forEach ( result => {
366- fs . unlink ( result . file , error => {
395+ purgecssResult . forEach ( ( result ) => {
396+ fs . unlink ( result . file , ( error ) => {
367397 if ( error ) {
368398 throw error ;
369399 }
370- fs . writeFile ( result . file , result . css , error => {
400+ fs . writeFile ( result . file , result . css , ( error ) => {
371401 if ( error ) {
372402 throw error ;
373403 }
@@ -385,7 +415,7 @@ class CSSMonster {
385415 if ( fs . existsSync ( this . config . outDir ) ) {
386416 fs . rmdirSync ( this . config . outDir , { recursive : true } ) ;
387417 }
388- fs . rename ( this . tempDir , this . config . outDir , error => {
418+ fs . rename ( this . tempDir , this . config . outDir , ( error ) => {
389419 if ( error ) {
390420 reject ( error ) ;
391421 }
@@ -395,7 +425,7 @@ class CSSMonster {
395425 }
396426
397427 cleanup ( ) {
398- return new Promise ( resolve => {
428+ return new Promise ( ( resolve ) => {
399429 if ( fs . existsSync ( this . tempDir ) ) {
400430 fs . rmdirSync ( this . tempDir , { recursive : true } ) ;
401431 }
0 commit comments