@@ -13,32 +13,46 @@ import { packages } from '../lib/packages';
1313
1414const minimatch = require ( 'minimatch' ) ;
1515const npmRun = require ( 'npm-run' ) ;
16+ const tar = require ( 'tar' ) ;
1617
1718const gitIgnore = fs . readFileSync ( path . join ( __dirname , '../.gitignore' ) , 'utf-8' )
1819 . split ( '\n' )
1920 . map ( line => line . replace ( / # .* / , '' ) )
2021 . filter ( line => ! line . match ( / ^ \s * $ / ) ) ;
2122
22- function gitIgnoreMatch ( p : string ) {
23+
24+ function _gitIgnoreMatch ( p : string ) {
2325 p = path . relative ( path . dirname ( __dirname ) , p ) ;
2426
2527 return gitIgnore . some ( line => minimatch ( p , line ) ) ;
2628}
2729
2830
29- function mkdirp ( p : string ) {
31+ function _mkdirp ( p : string ) {
3032 // Create parent folder if necessary.
3133 if ( ! fs . existsSync ( path . dirname ( p ) ) ) {
32- mkdirp ( path . dirname ( p ) ) ;
34+ _mkdirp ( path . dirname ( p ) ) ;
3335 }
3436 fs . mkdirSync ( p ) ;
3537}
3638
3739
38- function copy ( from : string , to : string ) {
40+ function _tar ( out : string , dir : string ) {
41+ return tar . create ( {
42+ gzip : true ,
43+ strict : true ,
44+ portable : true ,
45+ cwd : dir ,
46+ file : out ,
47+ sync : true ,
48+ } , [ '.' ] ) ;
49+ }
50+
51+
52+ function _copy ( from : string , to : string ) {
3953 // Create parent folder if necessary.
4054 if ( ! fs . existsSync ( path . dirname ( to ) ) ) {
41- mkdirp ( path . dirname ( to ) ) ;
55+ _mkdirp ( path . dirname ( to ) ) ;
4256 }
4357
4458 from = path . relative ( process . cwd ( ) , from ) ;
@@ -49,28 +63,28 @@ function copy(from: string, to: string) {
4963}
5064
5165
52- function recursiveCopy ( from : string , to : string , logger : Logger ) {
66+ function _recursiveCopy ( from : string , to : string , logger : Logger ) {
5367 if ( ! fs . existsSync ( from ) ) {
5468 logger . error ( `File "${ from } " does not exist.` ) ;
5569 process . exit ( 4 ) ;
5670 }
5771 if ( fs . statSync ( from ) . isDirectory ( ) ) {
5872 fs . readdirSync ( from ) . forEach ( fileName => {
59- recursiveCopy ( path . join ( from , fileName ) , path . join ( to , fileName ) , logger ) ;
73+ _recursiveCopy ( path . join ( from , fileName ) , path . join ( to , fileName ) , logger ) ;
6074 } ) ;
6175 } else {
62- copy ( from , to ) ;
76+ _copy ( from , to ) ;
6377 }
6478}
6579
6680
67- function rm ( p : string ) {
81+ function _rm ( p : string ) {
6882 p = path . relative ( process . cwd ( ) , p ) ;
6983 fs . unlinkSync ( p ) ;
7084}
7185
7286
73- function rimraf ( p : string ) {
87+ function _rimraf ( p : string ) {
7488 glob . sync ( path . join ( p , '**/*' ) , { dot : true , nodir : true } )
7589 . forEach ( p => fs . unlinkSync ( p ) ) ;
7690 glob . sync ( path . join ( p , '**/*' ) , { dot : true } )
@@ -79,10 +93,14 @@ function rimraf(p: string) {
7993}
8094
8195
82- export default function ( _ : { } , logger : Logger ) {
83- logger . info ( 'Removing dist/...' ) ;
84- rimraf ( path . join ( __dirname , '../dist' ) ) ;
96+ function _clean ( logger : Logger ) {
97+ logger . info ( 'Cleaning...' ) ;
98+ logger . info ( ' Removing dist/...' ) ;
99+ _rimraf ( path . join ( __dirname , '../dist' ) ) ;
100+ }
85101
102+
103+ function _sortPackages ( ) {
86104 // Order packages in order of dependency.
87105 // We use bubble sort because we need a full topological sort but adding another dependency
88106 // or implementing a full topo sort would be too much work and I'm lazy. We don't anticipate
@@ -106,7 +124,11 @@ export default function(_: {}, logger: Logger) {
106124 }
107125 } while ( swapped ) ;
108126
127+ return sortedPackages ;
128+ }
109129
130+
131+ function _build ( logger : Logger ) {
110132 logger . info ( 'Building...' ) ;
111133 const tsConfigPath = path . relative ( process . cwd ( ) , path . join ( __dirname , '../tsconfig.json' ) ) ;
112134 try {
@@ -116,14 +138,22 @@ export default function(_: {}, logger: Logger) {
116138 logger . error ( `TypeScript compiler failed:\n\nSTDOUT:\n ${ stdout } ` ) ;
117139 process . exit ( 1 ) ;
118140 }
141+ }
142+
143+
144+ export default function ( _ : { } , logger : Logger ) {
145+ _clean ( logger ) ;
146+
147+ const sortedPackages = _sortPackages ( ) ;
148+ _build ( logger ) ;
119149
120150 logger . info ( 'Moving packages to dist/' ) ;
121151 const packageLogger = new Logger ( 'packages' , logger ) ;
122152 for ( const packageName of sortedPackages ) {
123153 packageLogger . info ( packageName ) ;
124154 const pkg = packages [ packageName ] ;
125- recursiveCopy ( pkg . build , pkg . dist , logger ) ;
126- rimraf ( pkg . build ) ;
155+ _recursiveCopy ( pkg . build , pkg . dist , logger ) ;
156+ _rimraf ( pkg . build ) ;
127157 }
128158
129159 logger . info ( 'Copying resources...' ) ;
@@ -171,7 +201,7 @@ export default function(_: {}, logger: Logger) {
171201 }
172202
173203 // Skip files from gitignore.
174- if ( gitIgnoreMatch ( fileName ) ) {
204+ if ( _gitIgnoreMatch ( fileName ) ) {
175205 return false ;
176206 }
177207
@@ -180,14 +210,14 @@ export default function(_: {}, logger: Logger) {
180210
181211 subSubLogger . info ( `${ resources . length } resources...` ) ;
182212 resources . forEach ( fileName => {
183- copy ( path . join ( pkg . root , fileName ) , path . join ( pkg . dist , fileName ) ) ;
213+ _copy ( path . join ( pkg . root , fileName ) , path . join ( pkg . dist , fileName ) ) ;
184214 } ) ;
185215 }
186216
187217 logger . info ( 'Copying extra resources...' ) ;
188218 for ( const packageName of sortedPackages ) {
189219 const pkg = packages [ packageName ] ;
190- copy ( path . join ( __dirname , '../LICENSE' ) , path . join ( pkg . dist , 'LICENSE' ) ) ;
220+ _copy ( path . join ( __dirname , '../LICENSE' ) , path . join ( pkg . dist , 'LICENSE' ) ) ;
191221 }
192222
193223 logger . info ( 'Removing spec files...' ) ;
@@ -197,7 +227,7 @@ export default function(_: {}, logger: Logger) {
197227 const pkg = packages [ packageName ] ;
198228 const files = glob . sync ( path . join ( pkg . dist , '**/*_spec.js' ) ) ;
199229 specLogger . info ( ` ${ files . length } spec files found...` ) ;
200- files . forEach ( fileName => rm ( fileName ) ) ;
230+ files . forEach ( fileName => _rm ( fileName ) ) ;
201231 }
202232
203233 logger . info ( 'Setting versions...' ) ;
@@ -229,5 +259,13 @@ export default function(_: {}, logger: Logger) {
229259 fs . writeFileSync ( packageJsonPath , JSON . stringify ( packageJson , null , 2 ) + '\n' ) ;
230260 }
231261
262+ logger . info ( 'Tarring all packages...' ) ;
263+ const tarLogger = new Logger ( 'license' , logger ) ;
264+ Object . keys ( packages ) . forEach ( pkgName => {
265+ const pkg = packages [ pkgName ] ;
266+ tarLogger . info ( `${ pkgName } => ${ pkg . tar } ` ) ;
267+ _tar ( pkg . tar , pkg . dist ) ;
268+ } ) ;
269+
232270 logger . info ( `Done.` ) ;
233271}
0 commit comments