@leverege/build-tools 2.0.5 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,281 +0,0 @@
1
- const exec = require( 'child_process' ).exec
2
- const fs = require( 'fs-extra' )
3
- const path = require( 'path' )
4
- const async = require( 'async' )
5
- const copy = require( 'recursive-copy' )
6
- const ora = require( 'ora' )
7
- const tar = require( 'tar' )
8
- const semver = require( 'semver' )
9
-
10
-
11
- class Packleator {
12
-
13
- static PRIVATE_PACKAGES_DIRECTORY = 'private_packages'
14
-
15
- constructor( options ) {
16
- const { args } = options
17
- this.privatePackages = new Set()
18
-
19
- this.args = args ? {
20
- ...args,
21
- output : args.output.substr( -1 ) === '/' ? args.output.substr( 0, args.output.length ) : args.output
22
- } : {} // args || {}
23
- this.spinner = ora( { text : 'Installing NPM dependencies...', spinner : 'monkey' } )
24
- this.stderr = ''
25
-
26
- this.tarredVersions = {}
27
-
28
- this.outputPackageJson = {}
29
- this.outputPackageLockJson = {}
30
- }
31
-
32
- async run() {
33
- try {
34
- this.spinner.start()
35
- await this.npmInstall()
36
-
37
- this.spinner.text = 'Copying files...'
38
- await this.copyFiles()
39
-
40
- process.chdir( this.args.output )
41
-
42
- this.outputPackageJson = await this.getPackageJson()
43
- this.outputPackageLockJson = await this.getPackageJson( undefined, true )
44
-
45
- this.spinner.text = 'Parsing private dependencies...'
46
- const deps = await this.getPrivateDeps()
47
-
48
- this.spinner.text = 'Packaging modules...'
49
- async.eachOfSeries( deps, ( item, key, callback ) => {
50
-
51
- if( this.args.verbose ) {
52
- console.log( item )
53
- }
54
- this.getPackageJson( item ).then((packageJson) => {
55
- const { name, version } = packageJson
56
-
57
- this.pack( name, version, item ).then(() => {
58
- callback()
59
- })
60
- })
61
- }, async ( err ) => {
62
- await this.rebuildPackageJson()
63
- await this.rebuildPackageLockJson()
64
-
65
- await fs.writeFile( 'package.json', JSON.stringify( this.outputPackageJson, null, 2 ) )
66
- await fs.writeFile( 'package-lock.json', JSON.stringify( this.outputPackageLockJson, null, 2 ) )
67
-
68
- await fs.remove( 'node_modules' )
69
-
70
- const { name, version } = this.outputPackageJson
71
- const fileName = `${name.replace( '@', '' ).replace( '/', '-' )}-${version}.tgz`
72
-
73
- process.chdir( '..' )
74
-
75
- this.spinner.text = 'Packaging results...'
76
- await tar.c( {
77
- file : fileName,
78
- strict : true,
79
- prefix : 'package/',
80
- C : this.args.output
81
- }, [ '.' ] )
82
-
83
- this.spinner.text = 'Cleaning up...'
84
- await this.cleanup()
85
-
86
- this.spinner.stop()
87
- } )
88
- } catch ( ex ) {
89
- this.spinner.stop()
90
- throw ex
91
- }
92
- }
93
-
94
- async rebuildPackageJson() {
95
- const packageJson = this.outputPackageJson
96
- const tarredPackages = Object.keys( this.tarredVersions )
97
- const { dependencies = {}, devDependencies = {} } = packageJson
98
-
99
- tarredPackages.forEach( ( tarredPackage ) => {
100
- if ( dependencies[tarredPackage] ) {
101
- const version = semver.maxSatisfying( this.tarredVersions[tarredPackage], dependencies[tarredPackage] )
102
-
103
- if ( version != null ) {
104
- packageJson.dependencies[tarredPackage] = `file:${Packleator.PRIVATE_PACKAGES_DIRECTORY}${path.sep}${tarredPackage.replace( '@', '' ).replace( '/', '-' )}-${version}.tgz`
105
- }
106
- }
107
-
108
- if ( devDependencies[tarredPackage] ) {
109
- const version = semver.maxSatisfying( this.tarredVersions[tarredPackage], devDependencies[tarredPackage] )
110
-
111
- if ( version != null ) {
112
- packageJson.devDependencies[tarredPackage] = `file:${Packleator.PRIVATE_PACKAGES_DIRECTORY}${path.sep}${tarredPackage.replace( '@', '' ).replace( '/', '-' )}-${version}.tgz`
113
- }
114
- }
115
- } )
116
-
117
- }
118
-
119
- async rebuildPackageLockJson() {
120
- const packageLockJson = this.outputPackageLockJson
121
- const tarredPackages = Object.keys( this.tarredVersions )
122
-
123
- const recurseDeps = ( deps ) => {
124
- Object
125
- .keys( deps )
126
- .forEach( ( key ) => {
127
- const dep = deps[key]
128
-
129
- tarredPackages.forEach( ( tarredPackage ) => {
130
- if ( key === tarredPackage ) {
131
- dep.version = `file:${Packleator.PRIVATE_PACKAGES_DIRECTORY}${path.sep}${key.replace( '@', '' ).replace( '/', '-' )}-${dep.version}.tgz`
132
- delete dep.resolved
133
- delete dep.integrity
134
- }
135
-
136
- if ( dep.requires && dep.requires[tarredPackage] ) {
137
- delete dep.requires[tarredPackage]
138
- }
139
- } )
140
-
141
- if ( dep.dependencies ) {
142
- recurseDeps( dep.dependencies )
143
- }
144
- } )
145
- }
146
-
147
- recurseDeps( packageLockJson.dependencies )
148
- }
149
-
150
- async copyFiles() {
151
- const startsWith = new RegExp( `^(dist|lib|image|package|${this.args.output})` )
152
- const endsWith = /\.tgz$/
153
- await fs.remove( this.args.output )
154
- await fs.mkdirp( this.args.output )
155
- await copy( '.', this.args.output, {
156
- overwrite : true,
157
- dot : true,
158
- filter : ( item ) => {
159
- if ( item === 'package.json' || item === 'package-lock.json' ) {
160
- return true
161
- }
162
-
163
- if ( startsWith.test( item ) || endsWith.test( item ) ) {
164
- return false
165
- }
166
-
167
- if ( item.startsWith( '.' ) && item.indexOf( '.babelrc' ) === -1 ) {
168
- return false
169
- }
170
-
171
- if ( this.args.ignore.length > 0 ) {
172
- return this.args.ignore.indexOf( item ) === -1
173
- }
174
-
175
- return true
176
- }
177
- } )
178
- }
179
-
180
- async pack( name, version, dir ) {
181
- const fileName = `${name.replace( '@', '' ).replace( '/', '-' )}-${version}.tgz`
182
-
183
- await tar.c( {
184
- file : fileName,
185
- C : dir,
186
- strict : true,
187
- prefix : 'package/'
188
- }, [ '.' ] )
189
-
190
- await fs.move( path.join( process.cwd(), fileName ), path.join( process.cwd(), Packleator.PRIVATE_PACKAGES_DIRECTORY, fileName ), { overwrite : true } )
191
-
192
- if ( this.tarredVersions[name] ) {
193
- this.tarredVersions[name].push( version )
194
- } else {
195
- this.tarredVersions[name] = [ version ]
196
- }
197
-
198
- if( this.args.verbose ) {
199
- console.log( fileName )
200
- }
201
- return fileName
202
- }
203
-
204
- async cleanup() {
205
- await copy( this.args.output, process.cwd(), {
206
- overwrite : true,
207
- filter : '*.tgz'
208
- } )
209
- await fs.remove( this.args.output )
210
- }
211
-
212
- async npmInstall( dir = process.cwd() ) {
213
- const currentDir = process.cwd()
214
-
215
- return new Promise( ( resolve, reject ) => {
216
- if ( currentDir !== dir ) {
217
- process.chdir( dir )
218
- }
219
-
220
- const npmInstall = exec( 'npm install' )
221
-
222
- npmInstall
223
- .stderr
224
- .on( 'data', ( data ) => {
225
- this.stderr += data.toString()
226
- } )
227
-
228
- npmInstall.on( 'exit', ( code ) => {
229
- if ( currentDir !== dir ) {
230
- process.chdir( currentDir )
231
- }
232
- resolve()
233
- } )
234
-
235
- npmInstall.on( 'error', ( err ) => {
236
- if ( currentDir !== dir ) {
237
- process.chdir( currentDir )
238
- }
239
- reject( err )
240
- } )
241
- } )
242
- }
243
-
244
- async getPrivateDeps( depth ) {
245
- return new Promise( ( resolve, reject ) => {
246
-
247
- const depthArg = depth != null ? ` --depth ${depth}` : ''
248
- exec( `npm ls --parseable --silent${depthArg}`, ( err, stdout, stderr ) => {
249
- if ( err && !stdout ) {
250
- reject( err )
251
- return
252
- }
253
-
254
- const dependencies = stdout.split( '\n' )
255
-
256
- if ( dependencies ) {
257
- resolve( dependencies.filter( ( item ) => {
258
- const parts = item.split( path.sep )
259
- return this.args.namespaces.indexOf( parts[parts.length - 2] ) !== -1
260
- } ) )
261
- } else {
262
- reject( new Error( 'Unable to resolve package.json dependencies' ) )
263
- }
264
- } )
265
- } )
266
- }
267
-
268
- async getPackageJson( dir = process.cwd(), lock = false ) {
269
- const lockModifier = lock ? '-lock' : ''
270
- try {
271
- const file = await fs.readFile( path.join( dir, `package${lockModifier}.json` ), 'utf-8' )
272
- const json = JSON.parse( file )
273
-
274
- return json
275
- } catch ( ex ) {
276
- throw new Error( 'Error getting package.json. Make sure the current directory contains a valid package.json file' )
277
- }
278
- }
279
- }
280
-
281
- module.exports = Packleator
@@ -1,86 +0,0 @@
1
- #!/usr/bin/env node
2
- const commandLineArgs = require( 'command-line-args' )
3
- const commandLineUsage = require( 'command-line-usage' )
4
- const path = require( 'path' )
5
- const Packleator = require( './Packleator' )
6
- const ansiLogo = require( './logo-ansi' )
7
-
8
- const defaultConfig = {
9
- namespaces : [ '@leverege' ],
10
- output : 'lev_dest'
11
- }
12
-
13
- const sections = [
14
- {
15
- content : ansiLogo,
16
- raw : true
17
- },
18
- {
19
- content : 'Bundles private/proprietary npm packages and source code into a tarball for distribution'
20
- },
21
- {
22
- header : 'Options',
23
- optionList : [
24
- {
25
- name : 'output',
26
- alias : 'o',
27
- description : 'The destination folder (optional)',
28
- defaultValue : 'lev_dest'
29
- },
30
- {
31
- name : 'ignore',
32
- alias : 'i',
33
- description : 'List of files or folders to ignore. Uses glob pattern matching (optional)',
34
- multiple : true
35
- },
36
- {
37
- name : 'namespaces',
38
- alias : 'n',
39
- description : 'List of npm namespaces to be considered private/proprietary (optional)',
40
- multiple : true
41
- },
42
- {
43
- name : 'verbose',
44
- alias : 'v',
45
- description : 'Log a little bit louder now'
46
- },
47
- {
48
- name : 'help',
49
- description : 'Print this usage guide.'
50
- }
51
- ]
52
- }
53
- ]
54
-
55
- const usage = commandLineUsage( sections )
56
-
57
- const optionDefinitions = [
58
- { name : 'output', alias : 'o', type : String, defaultValue : defaultConfig.output },
59
- { name : 'ignore', alias : 'i', type : String, multiple : true, defaultValue : [] },
60
- { name : 'namespaces', alias : 'n', type : String, defaultValue : defaultConfig.namespaces },
61
- { name : 'verbose', alias : 'v', type : Boolean, defaultValue : false },
62
- { name : 'help', type : Boolean }
63
- ]
64
-
65
- const args = commandLineArgs( optionDefinitions )
66
-
67
- async function main() {
68
- if ( args.help ) {
69
- console.log( usage )
70
- } else {
71
- const packleator = new Packleator( { ...defaultConfig, args } )
72
-
73
- if ( args.verbose ) {
74
- console.log( packleator.args )
75
- }
76
-
77
- try {
78
- await packleator.getPackageJson()
79
- await packleator.run()
80
- } catch ( ex ) {
81
- console.error( ex.message )
82
- }
83
- }
84
- }
85
-
86
- main()
@@ -1,16 +0,0 @@
1
- module.exports =
2
- ` . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
3
-  . . S% . . . . . . . . . . . . . . . . . . 
4
-  . .:% : . . . .. . . . . . ...... . ... .. . . . .. .. . ..... . .... . .. . ..... . ... . ..... . .. . . ..... . . . . 
5
-  . :88:.. . . .8: . .8. . .. @8X@@@@@@8% @88X . . tX8% 888@@@@@@@@t. t8@@@@@%;% . . @8@@@@@@@8%. .. ;t%88t@. .:X8@@@@@@@88 . . .
6
-  . .. 8888:. . .X8S . . S%  . . :S@;ttttt%. St%8.. . @S;@ XX8S:tttttt@ 8SS;tttS88 X.. ;SX;ttttt% . ..t @8tttX88 t. t@@S:t%%ttSt . . 
7
-  . . @8888;. :t @8;. . @@  . .8SS:;:;:: . 8SS. . . ;8@@. X88@.;:;:;. . X@:;::;.;X8t%. .8SX:;:;:: .% 8::t;:: S S . tSXt.;;:;:. . 
8
-  .  888; .t8 .X:. . XS@ . . :XSt . . . S8SS . :.%X : @@88 . . . @S . . 8888 :XS; . .. @@@8.. .... t%S:.. . . . . 
9
-  . . . ..888StS 8: ... . . @@  .. :X@   t ..%;t@.. ;@.S . X88;.  .8 : X@.: ...t8X.t. :@@ S ..S8.. . %X; tX8;. .  . . . 
10
-  . . t8888X %8t . .. @SX . . :XX ;;;;:t: ..8S@:.X888 .. X88S::;;;.% . @X@%S;%X8X@X . :@t;;;;;:;;. %@ .. ..  %t. t%X8;:;;; 8.. . 
11
-  . . . .:88Xtt88 . . @X  ..... :XSS..:..:.. . @X;: SS . . X88@ ::.:.. . @XX@X@@S@t ... .@@S ::..:.. ;88t ..... SX: tSX; ::.:... . 
12
-  . . :8888% . . @X S8@@8@: :XS8X@X@X@X: . %;8 @%X . . @88:S@X@X@@;. @X . ..8X8; .. :XS8S@X@X@@: t88 t8%S8:;t: t%XSX@@X@X@% . . 
13
-  . . . . . :X8@.: . . 88X8@888SS .8@@8888@888.. ..8S@X8 . . @8@@88888@8; S8 . . .@.8St. .8@888888888...% S%888Xt@t; .;%8888888@@8 . . .
14
-  . 8 :.. .;;:::;::. :;;::::;:;:. .:;. .;:;::;::::. .;: . .:;: :;:::::::::: . ..:t;:: . :%;;:::::::. . 
15
-  . . . . . X% . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . .. . . . 
16
-  . .. . . . . . . . . . . . . . . . . . . . . . . . .`
package/src/test.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "name": "@leverege/packagename",
3
- "main": "lib/index.js"
4
- }