@@ -150,6 +150,15 @@ class CSSMonster {
150150 }
151151 }
152152
153+ /** Minify */
154+ if ( typeof config . minify !== "undefined" ) {
155+ if ( typeof config . minify === "boolean" ) {
156+ this . config . minify = config . minify ;
157+ } else {
158+ reject ( "Incorrect configuration: minify must be a boolean." ) ;
159+ }
160+ }
161+
153162 /** Set values based on env */
154163 if ( this . config . env === "dev" || this . config . env === "development" ) {
155164 this . config . minify = false ;
@@ -199,38 +208,20 @@ class CSSMonster {
199208 copyCSS ( files ) {
200209 return new Promise ( ( resolve , reject ) => {
201210 if ( ! files . length ) {
202- resolve ( ) ;
211+ resolve ( files ) ;
203212 }
204- let moved = 0 ;
213+ const movedFiles = [ ] ;
205214 for ( let i = 0 ; i < files . length ; i ++ ) {
206215 const filename = files [ i ] . replace ( / ( .* \/ ) | ( .* \\ ) / , "" ) ;
207- if ( this . config . minify ) {
208- minify ( files [ i ] )
209- . then ( css => {
210- fs . writeFile ( `${ this . tempDir } /${ filename } ` , css , error => {
211- if ( error ) {
212- reject ( error ) ;
213- }
214- moved ++ ;
215- if ( moved === files . length ) {
216- resolve ( ) ;
217- }
218- } ) ;
219- } )
220- . catch ( error => {
221- reject ( error ) ;
222- } ) ;
223- } else {
224- fs . copyFile ( files [ i ] , `${ this . tempDir } /${ filename } ` , error => {
225- if ( error ) {
226- reject ( error ) ;
227- }
228- moved ++ ;
229- if ( moved === files . length ) {
230- resolve ( ) ;
231- }
232- } ) ;
233- }
216+ fs . copyFile ( files [ i ] , `${ this . tempDir } /${ filename } ` , error => {
217+ if ( error ) {
218+ reject ( error ) ;
219+ }
220+ movedFiles . push ( `${ this . tempDir } /${ filename } ` ) ;
221+ if ( movedFiles . length === files . length ) {
222+ resolve ( movedFiles ) ;
223+ }
224+ } ) ;
234225 }
235226 } ) ;
236227 }
@@ -274,15 +265,15 @@ class CSSMonster {
274265 compileSCSS ( files ) {
275266 return new Promise ( ( resolve , reject ) => {
276267 if ( ! files . length ) {
277- resolve ( ) ;
268+ resolve ( files ) ;
278269 }
279- let compiled = 0 ;
270+ const compiledFiles = [ ] ;
280271 for ( let i = 0 ; i < files . length ; i ++ ) {
281272 const file = files [ i ] ;
282273 sass . render (
283274 {
284275 file : file ,
285- outputStyle : this . config . minify ? "compressed" : "expanded" ,
276+ outputStyle : "expanded" ,
286277 } ,
287278 ( error , result ) => {
288279 if ( error ) {
@@ -295,9 +286,9 @@ class CSSMonster {
295286 if ( error ) {
296287 reject ( "Something went wrong saving the file" + error ) ;
297288 }
298- compiled ++ ;
299- if ( compiled === files . length ) {
300- resolve ( ) ;
289+ compiledFiles . push ( newFile ) ;
290+ if ( compiledFiles . length === files . length ) {
291+ resolve ( compiledFiles ) ;
301292 }
302293 } ) ;
303294 } else {
@@ -310,6 +301,41 @@ class CSSMonster {
310301 } ) ;
311302 }
312303
304+ minifyCSSFiles ( ) {
305+ return new Promise ( ( resolve , reject ) => {
306+ glob ( `${ this . tempDir } /*.css` , ( error , files ) => {
307+ if ( error ) {
308+ reject ( error ) ;
309+ } else if ( ! files . length || ! this . config . minify ) {
310+ resolve ( ) ;
311+ }
312+ let minified = 0 ;
313+ for ( let i = 0 ; i < files . length ; i ++ ) {
314+ minify ( files [ i ] )
315+ . then ( css => {
316+ fs . unlink ( files [ i ] , error => {
317+ if ( error ) {
318+ reject ( error ) ;
319+ }
320+ fs . writeFile ( files [ i ] , css , error => {
321+ if ( error ) {
322+ reject ( error ) ;
323+ }
324+ minified ++ ;
325+ if ( minified === files . length ) {
326+ resolve ( ) ;
327+ }
328+ } ) ;
329+ } ) ;
330+ } )
331+ . catch ( error => {
332+ reject ( error ) ;
333+ } ) ;
334+ }
335+ } ) ;
336+ } ) ;
337+ }
338+
313339 commenceThePurge ( ) {
314340 return new Promise ( ( resolve , reject ) => {
315341 const purgeCSSConfig = this . config . purgeCSS ;
@@ -322,7 +348,7 @@ class CSSMonster {
322348 purgeCSSConfig . css = [ `${ this . tempDir } /**/*.css` ] ;
323349 const purgeCss = new Purgecss ( purgeCSSConfig ) ;
324350 const purgecssResult = purgeCss . purge ( ) ;
325- let purged = 0 ;
351+ const purgedFiles = [ ] ;
326352 purgecssResult . forEach ( result => {
327353 fs . unlink ( result . file , error => {
328354 if ( error ) {
@@ -332,9 +358,9 @@ class CSSMonster {
332358 if ( error ) {
333359 reject ( error ) ;
334360 }
335- purged ++ ;
336- if ( purged === purgecssResult . length ) {
337- resolve ( ) ;
361+ purgedFiles . push ( result . file ) ;
362+ if ( purgedFiles . length === purgecssResult . length ) {
363+ resolve ( purgedFiles ) ;
338364 }
339365 } ) ;
340366 } ) ;
@@ -377,14 +403,14 @@ class CSSMonster {
377403 spinner . text = "Managing CSS" ;
378404 let cssFiles = await this . getCSSFiles ( ) ;
379405 cssFiles = await this . removeIgnored ( cssFiles ) ;
380- await this . copyCSS ( cssFiles ) ;
406+ const copiedCSSFiles = await this . copyCSS ( cssFiles ) ;
381407
382408 /** Handle SCSS */
383409 spinner . text = "Collecting SCSS" ;
384410 let scssFiles = await this . getSCSSFiles ( ) ;
385411 scssFiles = await this . removeIgnored ( scssFiles ) ;
386- spinner . text = "Compiling CSS " ;
387- await this . compileSCSS ( scssFiles ) ;
412+ spinner . text = "Compiling SCSS " ;
413+ const compiledFiles = await this . compileSCSS ( scssFiles ) ;
388414
389415 /** Normalize */
390416 await this . normalizeCSS ( ) ;
@@ -395,6 +421,12 @@ class CSSMonster {
395421 await this . commenceThePurge ( ) ;
396422 }
397423
424+ /** Handle Minify */
425+ if ( this . config . minify ) {
426+ spinner . text = "Minifying CSS" ;
427+ await this . minifyCSSFiles ( ) ;
428+ }
429+
398430 /** Deliver CSS */
399431 spinner . text = "Delivering CSS" ;
400432 await this . deliverCSS ( ) ;
@@ -406,6 +438,7 @@ class CSSMonster {
406438 spinner . succeed ( "CSSMonster" ) ;
407439 process . exit ( 0 ) ;
408440 } catch ( error ) {
441+ console . log ( error ) ;
409442 spinner . fail ( error ) ;
410443 console . log ( "\n" ) ;
411444 process . exit ( 1 ) ;
0 commit comments