@@ -127,41 +127,80 @@ module.exports = function(grunt) {
127
127
} ) ;
128
128
129
129
130
+ var Promise = require ( "bluebird" ) ;
130
131
var exec = require ( 'child_process' ) . exec ;
131
132
133
+ function execp ( cmd ) {
134
+ var resolve , reject ;
135
+ var promise = new Promise ( function ( _resolve , _reject ) {
136
+ resolve = _resolve ;
137
+ reject = _reject ;
138
+ } ) ;
139
+ try {
140
+ exec ( cmd , function ( error , out ) {
141
+ if ( error ) {
142
+ reject ( error ) ;
143
+ } else {
144
+ resolve ( out ) ;
145
+ }
146
+ } ) ;
147
+ } catch ( error ) {
148
+ reject ( error ) ;
149
+ }
150
+ return promise ;
151
+ }
152
+
132
153
grunt . registerTask ( 'stats' , function ( ) {
133
- var done = this . async ( ) ;
134
- exec ( 'cat dist/immutable.js | wc -c' , function ( error , out ) {
135
- if ( error ) throw new Error ( error ) ;
136
- var rawBytes = parseInt ( out ) ;
137
- console . log ( ' Concatenated: ' +
138
- ( rawBytes + ' bytes' ) . cyan ) ;
139
- exec ( 'gzip -c dist/immutable.js | wc -c' , function ( error , out ) {
140
- if ( error ) throw new Error ( error ) ;
141
- var zippedBytes = parseInt ( out ) ;
142
- var pctOfA = Math . floor ( 10000 * ( 1 - ( zippedBytes / rawBytes ) ) ) / 100 ;
143
- console . log ( ' Compressed: ' +
144
- ( zippedBytes + ' bytes' ) . cyan + ' ' +
145
- ( pctOfA + '%' ) . green ) ;
146
- exec ( 'cat dist/immutable.min.js | wc -c' , function ( error , out ) {
147
- if ( error ) throw new Error ( error ) ;
148
- var minifiedBytes = parseInt ( out ) ;
149
- var pctOfA = Math . floor ( 10000 * ( 1 - ( minifiedBytes / rawBytes ) ) ) / 100 ;
150
- console . log ( ' Minified: ' +
151
- ( minifiedBytes + ' bytes' ) . cyan + ' ' +
152
- ( pctOfA + '%' ) . green ) ;
153
- exec ( 'gzip -c dist/immutable.min.js | wc -c' , function ( error , out ) {
154
- if ( error ) throw new Error ( error ) ;
155
- var zippedMinBytes = parseInt ( out ) ;
156
- var pctOfA = Math . floor ( 10000 * ( 1 - ( zippedMinBytes / rawBytes ) ) ) / 100 ;
157
- console . log ( ' Min\'d & Cmprs\'d: ' +
158
- ( zippedMinBytes + ' bytes' ) . cyan + ' ' +
159
- ( pctOfA + '%' ) . green ) ;
160
- done ( ) ;
161
- } )
162
- } )
163
- } )
164
- } )
154
+ Promise . all ( [
155
+ execp ( 'cat dist/immutable.js | wc -c' ) ,
156
+ execp ( 'git show master:dist/immutable.js | wc -c' ) ,
157
+ execp ( 'cat dist/immutable.min.js | wc -c' ) ,
158
+ execp ( 'git show master:dist/immutable.min.js | wc -c' ) ,
159
+ execp ( 'cat dist/immutable.min.js | gzip -c | wc -c' ) ,
160
+ execp ( 'git show master:dist/immutable.min.js | gzip -c | wc -c' ) ,
161
+ ] ) . then ( function ( results ) {
162
+ return results . map ( function ( result ) { return parseInt ( result ) ; } ) ;
163
+ } ) . then ( function ( results ) {
164
+ var rawNew = results [ 0 ] ;
165
+ var rawOld = results [ 1 ] ;
166
+ var minNew = results [ 2 ] ;
167
+ var minOld = results [ 3 ] ;
168
+ var zipNew = results [ 4 ] ;
169
+ var zipOld = results [ 5 ] ;
170
+
171
+ function space ( n , s ) {
172
+ return Array ( Math . max ( 0 , 10 + n - ( s || '' ) . length ) ) . join ( ' ' ) + ( s || '' ) ;
173
+ }
174
+
175
+ function bytes ( b ) {
176
+ return b . toString ( ) . replace ( / \B (? = ( \d { 3 } ) + (? ! \d ) ) / g, ',' ) + ' bytes' ;
177
+ }
178
+
179
+ function diff ( n , o ) {
180
+ var d = n - o ;
181
+ return d === 0 ? '' : d < 0 ? ( ' ' + bytes ( d ) ) . green : ( ' +' + bytes ( d ) ) . red ;
182
+ }
183
+
184
+ function pct ( s , b ) {
185
+ var p = Math . floor ( 10000 * ( 1 - ( s / b ) ) ) / 100 ;
186
+ return ( ' ' + p + '%' ) . grey ;
187
+ }
188
+
189
+ console . log ( ' Raw: ' +
190
+ space ( 14 , bytes ( rawNew ) . cyan ) + ' ' + space ( 15 , diff ( rawNew , rawOld ) )
191
+ ) ;
192
+ console . log ( ' Min: ' +
193
+ space ( 14 , bytes ( minNew ) . cyan ) + pct ( minNew , rawNew ) + space ( 15 , diff ( minNew , minOld ) )
194
+ ) ;
195
+ console . log ( ' Zip: ' +
196
+ space ( 14 , bytes ( zipNew ) . cyan ) + pct ( zipNew , rawNew ) + space ( 15 , diff ( zipNew , zipOld ) )
197
+ ) ;
198
+
199
+ } ) . then ( this . async ( ) ) . catch ( function ( error ) {
200
+ setTimeout ( function ( ) {
201
+ throw error ;
202
+ } , 0 ) ;
203
+ } ) ;
165
204
} ) ;
166
205
167
206
grunt . registerTask ( 'init_ts_compiler' , function ( ) {
0 commit comments