@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.
- package/lib/web/dnsify/index.js +3 -1
- package/lib/web/packleate/Packleator.js +3 -1
- package/lib/web/packleate/index.js +3 -1
- package/package.json +7 -7
- package/src/circleate +20 -46
- package/src/helmup +6 -24
- package/src/overwhelm +1 -1
- package/lib/server/circleate +0 -573
- package/lib/server/decrypt-secrets +0 -108
- package/lib/server/dockreate +0 -353
- package/lib/server/encrypt-secrets +0 -49
- package/lib/server/getfbcfg +0 -23
- package/lib/server/getjson +0 -48
- package/lib/server/git-tar +0 -89
- package/lib/server/helmdn +0 -111
- package/lib/server/helmify +0 -283
- package/lib/server/helmup +0 -349
- package/lib/server/overwhelm +0 -320
- package/lib/server/pkgck +0 -136
- package/lib/server/pkglint +0 -35
- package/lib/server/test.json +0 -4
- package/src/dnsify/CloudflareAPI.js +0 -99
- package/src/dnsify/accounts.json.enc +0 -0
- package/src/dnsify/index.js +0 -82
- package/src/packleate/Packleator.js +0 -281
- package/src/packleate/index.js +0 -86
- package/src/packleate/logo-ansi.js +0 -16
- package/src/test.json +0 -4
|
@@ -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
|
package/src/packleate/index.js
DELETED
|
@@ -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
|
-
`[0;5;37;47m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [0m
|
|
3
|
-
[0;5;37;47m . . S% . . . . . . . . . . . . . . . . . . [0m
|
|
4
|
-
[0;5;37;47m . .:[0;1;30;47m%[0;1;37;47m [0;5;37;47m: . . . .. . . . . . ...... . ... .. . . . .. .. . ..... . .... . .. . ..... . ... . ..... . .. . . ..... . . . . [0m
|
|
5
|
-
[0;5;37;47m . :[0;1;34;46m8[0;1;30;47m8[0;5;37;47m:.. . . .8: . [0;1;37;47m.[0;5;37;40m8[0;1;30;47m.[0;5;37;47m . .. [0;1;37;47m@[0;5;37;40m8[0;1;30;47mX@@@@@@8%[0;5;37;47m [0;1;37;47m@[0;1;30;47m88[0;5;37;47mX . . t[0;1;30;47mX8[0;1;37;47m%[0;5;37;47m 8[0;1;30;47m88@@@@@@@@[0;5;37;47mt. [0;1;37;47mt[0;5;37;40m8[0;1;30;47m@@@@@%[0;1;37;47m;[0;5;37;47m% . . [0;1;37;47m@[0;5;37;40m8[0;1;30;47m@@@@@@@8%[0;5;37;47m. .. ;[0;1;37;47mt[0;1;30;47m%88t[0;1;37;47m@[0;5;37;47m. .:[0;1;30;47mX8@@@@@@@8[0;1;37;47m8[0;5;37;47m . . .[0m
|
|
6
|
-
[0;5;37;47m . .. 8[0;5;34;44m8[0;1;30;46m8[0;5;37;47m8:. . .[0;1;37;47mX[0;1;31;47m8[0;5;37;47mS . . [0;5;37;40mS[0;34;40m%[0;5;35;40m [0;5;37;47m . . [0;1;30;47m:[0;34;40mS[0;5;30;40m@[0;5;35;40m;[0;5;36;40mt[0;5;35;40mt[0;5;36;40mt[0;5;35;40mt[0;5;36;40mt[0;5;35;40m%[0;5;36;40m.[0;5;37;47m S[0;5;35;40mt[0;34;40m%[0;5;37;40m8[0;5;37;47m.. . [0;1;30;47m@[0;34;40mS[0;5;35;40m;[0;5;37;47m@ [0;1;37;47mX[0;1;30;40mX[0;5;30;40m8[0;5;34;40mS[0;5;35;40m:[0;5;36;40mt[0;5;35;40mt[0;5;36;40mt[0;5;35;40mt[0;5;36;40mt[0;5;35;40mt[0;5;37;47m@ [0;1;30;47m8[0;34;40mS[0;5;30;40mS[0;5;35;40m;[0;5;36;40mt[0;5;35;40mt[0;5;36;40mt[0;5;34;40mS[0;1;30;40m8[0;5;30;40m8[0;5;35;40m [0;5;37;47mX.. [0;1;30;47m;[0;34;40mS[0;5;30;40mX[0;5;36;40m;[0;5;35;40mt[0;5;36;40mt[0;5;35;40mt[0;5;36;40mt[0;5;35;40mt[0;5;36;40m%[0;5;35;40m [0;5;37;47m. ..[0;1;37;47mt[0;5;36;40m [0;5;34;40m@[0;1;30;40m8[0;5;35;40mt[0;5;36;40mt[0;5;35;40mt[0;5;30;40mX8[0;5;34;40m8[0;5;33;40m [0;5;37;47mt. t[0;5;34;40m@[0;1;30;40m@[0;5;34;40mS[0;5;33;40m:[0;5;35;40mt[0;5;36;40m%[0;5;35;40m%[0;5;36;40mt[0;5;35;40mt[0;5;34;40mS[0;1;37;47mt[0;5;37;47m . . [0m
|
|
7
|
-
[0;5;37;47m . . @[0;5;36;44m8[0;34;46m8[0;1;30;47m8[0;5;37;47m8;. :[0;1;37;47mt[0;5;33;41m [0;5;37;43m@[0;5;37;47m8;. . [0;5;37;40m@[0;1;30;40m@[0;5;35;40m [0;5;37;47m . [0;1;30;47m.[0;1;30;40m8[0;5;34;40mS[0;5;37;47mS:;:;:: . [0;1;37;47m8[0;5;32;40mS[0;34;40mS[0;1;30;47m.[0;5;37;47m . . [0;1;37;47m;[0;5;30;40m8@[0;1;37;47m@[0;5;37;47m. [0;1;37;47mX[0;1;30;40m8[0;5;30;40m8[0;1;37;47m@[0;5;37;47m.;:;:;. . [0;1;30;47mX[0;1;30;40m@[0;5;36;40m:[0;5;37;47m;::;.;[0;1;30;47mX[0;1;30;40m8[0;5;35;40mt[0;5;37;47m%. [0;1;30;47m.[0;1;30;40m8[0;5;34;40mS[0;5;37;47mX:;:;:: .%[0;5;35;40m [0;1;30;40m8[0;5;35;40m:[0;1;37;47m:[0;5;37;47mt;:: S[0;1;30;47m [0;1;37;47mS[0;5;37;47m . t[0;5;30;40mS[0;1;30;40mX[0;1;30;47mt[0;5;37;47m.;;:;:. . [0m
|
|
8
|
-
[0;5;37;47m . [0;1;37;47m [0;5;34;44m8[0;1;34;46m8[0;36;44m8[0;1;37;47m;[0;5;37;47m .t[0;5;37;41m8[0;5;33;41m [0;5;33;43m.[0;1;35;47mX[0;5;37;47m:. . [0;5;37;40mX[0;34;40mS[0;5;37;40m@[0;5;37;47m . . [0;1;30;47m:[0;1;30;40mX[0;5;30;40mS[0;5;37;47mt . . . [0;1;30;47mS[0;1;30;40m8[0;5;34;40mS[0;5;37;47mS . :[0;5;36;40m.[0;34;40m%[0;1;30;47mX[0;5;37;47m : [0;1;37;47m@[0;1;30;40m@[0;5;30;40m8[0;1;37;47m8[0;5;37;47m . . . [0;1;30;47m@[0;34;40mS[0;5;35;40m [0;5;37;47m. . [0;1;37;47m8[0;5;30;40m88[0;5;37;47m8 [0;1;30;47m:[0;1;30;40mX[0;5;30;40mS[0;5;37;47m; . .. [0;1;30;47m@[0;1;30;40m@[0;5;34;40m@[0;5;37;47m8.. .... t[0;5;34;40m%[0;1;30;40mS[0;1;30;47m:[0;5;37;47m.. . . . . [0m
|
|
9
|
-
[0;5;37;47m . . . ..[0;1;30;47m8[0;5;36;44m8[0;1;30;46m8[0;5;34;44mS[0;1;30;47mt[0;5;37;47mS[0;1;37;47m [0;5;1;33;41m8[0;5;33;41m:[0;1;37;47m [0;5;37;47m... . . [0;5;37;40m@[0;1;30;40m@[0;5;35;40m [0;5;37;47m .. [0;1;30;47m:[0;1;30;40mX[0;5;30;40m@[0;5;36;40m [0;5;35;40m [0;5;36;40m [0;5;37;47mt ..%[0;5;35;40m;[0;32;40mt[0;1;30;47m@[0;5;37;47m.. [0;1;30;47m;[0;1;30;40m@[0;5;35;40m.[0;5;37;47mS . [0;1;37;47mX[0;1;30;40m8[0;5;34;40m8[0;5;33;40m;[0;5;35;40m.[0;5;36;40m [0;5;35;40m .[0;1;37;47m8[0;5;37;47m : [0;1;30;47mX[0;1;30;40m@[0;5;35;40m.[0;5;37;47m: ...t[0;1;30;47m8[0;34;40mX[0;5;36;40m.[0;5;37;47mt. [0;1;30;47m:[0;1;30;40m@[0;5;30;40m@[0;5;35;40m [0;5;37;47mS .[0;5;35;40m.[0;34;40mS[0;5;37;40m8[0;5;37;47m.. . %X; t[0;5;30;40mX[0;1;30;40m8[0;5;36;40m;[0;5;35;40m.[0;5;36;40m .[0;1;30;47m [0;5;37;47m . . . [0m
|
|
10
|
-
[0;5;37;47m . . t[0;36;47m8[0;5;34;44m8[0;1;30;46m8[0;5;36;44m8[0;5;36;40mX[0;1;37;47m [0;5;37;47m%8t . .. [0;5;37;40m@[0;34;40mS[0;5;37;40mX[0;5;37;47m . . [0;1;30;47m:[0;1;30;40mX[0;5;34;40mX[0;1;30;47m [0;1;37;47m;;;;:t[0;5;37;47m: ..[0;1;37;47m8[0;5;34;40mS[0;1;30;40m@[0;1;37;47m:[0;5;37;47m.[0;1;37;47mX[0;5;30;40m88[0;1;37;47m8[0;5;37;47m .. [0;1;37;47mX[0;1;30;40m88[0;1;30;47mS[0;1;37;47m::;;;.[0;5;37;47m% . [0;1;30;47m@[0;1;30;40mX[0;5;34;40m@[0;5;33;40m%[0;5;34;40mS[0;5;33;40m;[0;5;35;40m%[0;5;36;40mX[0;1;30;40m8[0;5;30;40mX[0;5;37;40m@[0;5;37;47mX . [0;1;30;47m:[0;34;40m@[0;5;33;40mt[0;1;30;47m;[0;1;37;47m;;;;:;[0;5;37;47m;. [0;5;37;40m%[0;1;30;40m@[0;5;33;40m [0;5;37;47m.. .. [0;5;36;40m [0;34;40m%[0;1;37;47mt[0;5;37;47m. t[0;5;34;40m%[0;1;30;40mX[0;5;37;40m8[0;1;37;47m;:;;; [0;5;37;47m8.. . [0m
|
|
11
|
-
[0;5;37;47m . . . .:8[0;1;30;46m8[0;5;34;44mX[0;5;36;40mt[0;5;34;44mt[0;34;46m8[0;1;30;47m8[0;5;37;47m . . [0;5;37;40m@[0;1;30;40mX[0;5;35;40m [0;5;37;47m ..... [0;1;30;47m:[0;1;30;40mX[0;5;34;40mS[0;5;37;47mS..:..:.. . [0;1;30;47m@[0;1;30;40mX[0;5;35;40m;[0;5;37;47m:[0;5;35;40m [0;34;40mS[0;1;30;47mS[0;5;37;47m . . [0;1;37;47mX[0;1;30;40m8[0;5;30;40m8[0;1;37;47m@[0;5;37;47m ::.:.. . [0;1;30;47m@[0;1;30;40mX[0;5;30;40mX[0;1;30;47m@X@@[0;5;30;40mS[0;1;30;40m@[0;1;30;47mt[0;5;37;47m ... [0;1;30;47m.[0;1;30;40m@[0;5;34;40m@[0;5;37;47mS ::..:.. [0;1;37;47m;[0;1;30;40m88[0;1;30;47mt[0;5;37;47m ..... [0;5;37;40mS[0;1;30;40mX[0;1;37;47m:[0;5;37;47m t[0;5;30;40mS[0;1;30;40mX[0;1;30;47m;[0;5;37;47m ::.:... . [0m
|
|
12
|
-
[0;5;37;47m . . [0;1;37;47m:[0;1;34;46m8[0;1;30;46m8[0;1;34;46m8[0;1;30;45m8[0;5;37;47m% . . [0;5;37;40m@[0;1;30;40mX[0;5;35;40m [0;5;37;47mS8@@8@: [0;1;30;47m:[0;1;30;40mX[0;5;30;40mS[0;1;37;47m8[0;5;37;47mX@X@X@X: . %[0;5;35;40m;[0;1;30;40m8[0;5;36;40m [0;5;34;40m@[0;5;33;40m%[0;5;37;47mX . . [0;1;37;47m@[0;1;30;40m8[0;5;34;40m8[0;1;37;47m:[0;5;37;47mS@X@X@@;. [0;1;30;47m@[0;34;40mX[0;5;36;40m [0;5;37;47m. ..[0;1;37;47m8[0;5;34;40mX[0;1;30;40m8[0;1;30;47m;[0;5;37;47m .. [0;1;30;47m:[0;1;30;40mX[0;5;30;40mS[0;1;37;47m8[0;5;37;47mS@X@X@@: [0;1;30;47mt[0;5;30;40m88[0;5;36;40m [0;1;37;47mt[0;5;37;47m8%S[0;1;37;47m8:[0;5;36;40m;[0;34;40mt[0;1;37;47m:[0;5;37;47m t[0;5;34;40m%[0;1;30;40mX[0;1;30;47mS[0;5;37;47mX@@X@X@% . . [0m
|
|
13
|
-
[0;5;37;47m . . . . . [0;1;37;47m:[0;5;34;44mX[0;1;30;47m8[0;5;37;47m@.: . . [0;5;37;40m8[0;5;30;40m8[0;5;34;40mX[0;5;30;40m8@8[0;5;34;40m8[0;5;30;40m8S[0;5;37;47mS [0;1;30;47m.[0;5;30;40m8[0;5;34;40m@[0;5;30;40m@88[0;5;34;40m8[0;5;30;40m8@[0;5;34;40m8[0;5;30;40m8[0;5;37;47m8.. ..[0;1;37;47m8[0;5;34;40mS[0;5;30;40m@X[0;1;37;47m8[0;5;37;47m . . [0;1;37;47m@[0;5;30;40m8@@[0;5;34;40m8[0;5;30;40m88[0;5;34;40m8[0;5;30;40m8[0;5;34;40m@[0;1;30;40m8[0;1;37;47m;[0;5;37;47m [0;1;30;47mS[0;5;30;40m8[0;5;36;40m [0;5;37;47m. . .@[0;5;35;40m.[0;5;30;40m8[0;5;37;40mS[0;5;37;47mt. [0;1;30;47m.[0;5;30;40m8[0;5;34;40m@[0;5;30;40m88[0;5;34;40m8[0;5;30;40m88[0;5;34;40m8[0;5;30;40m88[0;5;37;47m8...%[0;1;37;47m [0;5;37;40mS[0;5;36;40m%[0;5;30;40m888[0;5;34;40mX[0;5;33;40mt[0;5;37;40m@[0;1;37;47mt[0;5;37;47m; .;[0;5;33;40m%[0;5;30;40m8[0;5;34;40m8[0;5;30;40m88[0;5;34;40m8[0;5;30;40m88[0;5;34;40m@[0;1;30;40m@[0;1;30;47m8[0;5;37;47m . . .[0m
|
|
14
|
-
[0;5;37;47m . [0;36;47m8[0;1;37;47m [0;5;37;47m:.. .;;:::;::. :;;::::;:;:. .:;. .;:;::;::::. .;: . .:;: :;:::::::::: . ..:t;:: . :%;;:::::::. . [0m
|
|
15
|
-
[0;5;37;47m . . . . . X% . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . .. . . . [0m
|
|
16
|
-
[0;5;37;47m . .. . . . . . . . . . . . . . . . . . . . . . . . .[0m`
|
package/src/test.json
DELETED