@@ -30,31 +30,40 @@ const path = require('path');
30
30
const deployDir = process . argv [ 2 ] || __dirname ;
31
31
const parseCSS = require ( './modules/ast/css.js' ) ;
32
32
33
- function compressFile ( filePath ) {
34
- let content = fs . readFileSync ( filePath , 'utf8' ) ;
35
- if ( filePath . endsWith ( '.css' ) ) {
36
- content = parseCSS . JSON ( content ) ;
37
- let compressed = '' ;
38
- const rule_ = ( rule ) => {
33
+ function serializeRules ( rules ) {
34
+ let result = '' ;
35
+
36
+ const ruleToString = ( rule ) => {
37
+ if ( ! rule ) return '' ;
38
+
39
+ if ( rule . type === 'at-rule' ) {
40
+ let innerContent = '' ;
41
+ if ( rule . rules && rule . rules . length > 0 ) {
42
+ innerContent = serializeRules ( rule . rules ) ;
43
+ }
44
+ return `${ rule . name } {${ innerContent } }` ;
45
+ } else if ( rule . type === 'rule' ) {
39
46
const props = [ ] ;
40
47
for ( const [ key , value ] of Object . entries ( rule . properties ) ) {
41
48
props . push ( `${ key } :${ value } ` ) ;
42
49
}
43
- return rule . selectors . join ( ',' ) + '{' + props . join ( ';' ) + '}' ;
50
+ return ` ${ rule . selectors . join ( ',' ) } { ${ props . join ( ';' ) } }` ;
44
51
}
45
- content . forEach ( rule => {
46
- if ( rule && rule . type == 'at-rule' ) {
47
- compressed += rule . name + '{' ;
48
- rule . rules . forEach ( rule__ => {
49
- if ( rule__ ) {
50
- compressed += rule_ ( rule__ ) ;
51
- }
52
- } )
53
- compressed += '}'
54
- } else if ( rule ) {
55
- compressed += rule_ ( rule ) ;
56
- }
57
- } ) ;
52
+ return '' ;
53
+ } ;
54
+
55
+ for ( const rule of rules ) {
56
+ result += ruleToString ( rule ) ;
57
+ }
58
+
59
+ return result ;
60
+ }
61
+
62
+ function compressFile ( filePath ) {
63
+ let content = fs . readFileSync ( filePath , 'utf8' ) ;
64
+ if ( filePath . endsWith ( '.css' ) ) {
65
+ content = parseCSS . JSON ( content ) ;
66
+ const compressed = serializeRules ( content ) ;
58
67
fs . writeFileSync ( filePath , compressed , 'utf8' ) ;
59
68
return ;
60
69
}
0 commit comments