1
1
import fs from 'fs/promises'
2
2
import path from 'path'
3
- import { createBundleBuilder } from '@ph.fritsche/toolbox/dist/builder/index.js'
4
- import { spawn } from 'child_process'
3
+ import { createBundleBuilder } from '@ph.fritsche/toolbox/dist/builder/index.js'
4
+ import { spawn } from 'child_process'
5
5
6
6
const dirname = path . dirname ( new URL ( import . meta. url ) . pathname )
7
7
const indexDirLib = path . join ( dirname , '../testenv/libs' )
@@ -13,124 +13,140 @@ const cmd = process.argv[2]
13
13
const names = process . argv . length > 3 ? process . argv . slice ( 3 ) : undefined
14
14
15
15
if ( cmd === 'install-lib' ) {
16
- await Promise . all (
17
- ( await getLibDirs ( names ) )
18
- . map ( ( [ name , dir ] ) => installLib ( name , dir ) )
19
- )
16
+ await Promise . all (
17
+ ( await getLibDirs ( names ) ) . map ( ( [ name , dir ] ) => installLib ( name , dir ) ) ,
18
+ )
20
19
} else if ( cmd === 'bundle-lib' ) {
21
- await Promise . all (
22
- ( await getLibDirs ( names ) )
23
- . map ( ( [ name , dir ] ) => buildLib ( name , dir ) )
24
- )
20
+ await Promise . all (
21
+ ( await getLibDirs ( names ) ) . map ( ( [ name , dir ] ) => buildLib ( name , dir ) ) ,
22
+ )
25
23
} else if ( cmd === 'bundle-env' ) {
26
- await Promise . all (
27
- ( await getEnvFiles ( names ) )
28
- . map ( ( [ name , file ] ) => buildEnv ( name , file ) )
29
- )
24
+ await Promise . all (
25
+ ( await getEnvFiles ( names ) ) . map ( ( [ name , file ] ) => buildEnv ( name , file ) ) ,
26
+ )
30
27
} else if ( ! cmd ) {
31
- await Promise . all ( [
32
- ...( await getLibDirs ( ) ) . map ( ( [ name , dir ] ) => installLib ( name , dir ) . then ( ( ) => buildLib ( name , dir ) ) ) ,
33
- ...( await getEnvFiles ( ) ) . map ( ( [ name , file ] ) => buildEnv ( name , file ) ) ,
34
- ] )
28
+ await Promise . all ( [
29
+ ...(
30
+ await getLibDirs ( )
31
+ ) . map ( ( [ name , dir ] ) =>
32
+ installLib ( name , dir ) . then ( ( ) => buildLib ( name , dir ) ) ,
33
+ ) ,
34
+ ...( await getEnvFiles ( ) ) . map ( ( [ name , file ] ) => buildEnv ( name , file ) ) ,
35
+ ] )
35
36
}
36
37
37
38
async function getLibDirs ( names ) {
38
- names ??= ( await fs . readdir ( indexDirLib ) ) . filter ( n => ! n . startsWith ( '.' ) )
39
-
40
- return await Promise . all ( names . map ( name => {
41
- const dir = `${ indexDirLib } /${ name } `
42
-
43
- return fs . stat ( `${ dir } /index.js` ) . then (
44
- ( ) => [ name , dir ] ,
45
- ( ) => { throw new Error ( `${ dir } /index.js could not be found.` ) }
46
- )
47
- } ) )
39
+ names ??= ( await fs . readdir ( indexDirLib ) ) . filter ( n => ! n . startsWith ( '.' ) )
40
+
41
+ return await Promise . all (
42
+ names . map ( name => {
43
+ const dir = `${ indexDirLib } /${ name } `
44
+
45
+ return fs . stat ( `${ dir } /index.js` ) . then (
46
+ ( ) => [ name , dir ] ,
47
+ ( ) => {
48
+ throw new Error ( `${ dir } /index.js could not be found.` )
49
+ } ,
50
+ )
51
+ } ) ,
52
+ )
48
53
}
49
54
50
55
async function getEnvFiles ( names ) {
51
- names ??= ( await fs . readdir ( indexDirEnv ) )
52
- . filter ( n => / ^ \w + \. j s $ / . test ( n ) )
53
- . filter ( n => ! ignoreEnv . includes ( n ) )
54
- . map ( f => f . slice ( 0 , f . length - 3 ) )
55
-
56
- return await Promise . all ( names . map ( async name => {
57
- const file = `${ indexDirEnv } /${ name } .js`
58
-
59
- return fs . stat ( file ) . then (
60
- ( ) => [ name , file ] ,
61
- ( ) => { throw new Error ( `${ file } could not be found.` ) }
62
- )
63
- } ) )
56
+ names ??= ( await fs . readdir ( indexDirEnv ) )
57
+ . filter ( n => / ^ \w + \. j s $ / . test ( n ) )
58
+ . filter ( n => ! ignoreEnv . includes ( n ) )
59
+ . map ( f => f . slice ( 0 , f . length - 3 ) )
60
+
61
+ return await Promise . all (
62
+ names . map ( async name => {
63
+ const file = `${ indexDirEnv } /${ name } .js`
64
+
65
+ return fs . stat ( file ) . then (
66
+ ( ) => [ name , file ] ,
67
+ ( ) => {
68
+ throw new Error ( `${ file } could not be found.` )
69
+ } ,
70
+ )
71
+ } ) ,
72
+ )
64
73
}
65
74
66
75
async function installLib ( name , dir ) {
67
- return new Promise ( ( res , rej ) => {
68
- const child = spawn ( 'npm' , [ 'i' ] , { cwd : dir } )
76
+ return new Promise ( ( res , rej ) => {
77
+ const child = spawn ( 'npm' , [ 'i' ] , { cwd : dir } )
69
78
70
- process . stdout . write ( `Installing library "${ name } " at ${ dir } \n` )
79
+ process . stdout . write ( `Installing library "${ name } " at ${ dir } \n` )
71
80
72
- child . on ( 'error' , e => {
73
- process . stdout . write ( `${ e . stack ?? String ( e ) } \n` )
74
- } )
75
- child . on ( 'exit' , ( code , signal ) => {
76
- ( code || signal ? rej ( code ) : res ( ) )
77
- } )
81
+ child . on ( 'error' , e => {
82
+ process . stdout . write ( `${ e . stack ?? String ( e ) } \n` )
83
+ } )
84
+ child . on ( 'exit' , ( code , signal ) => {
85
+ code || signal ? rej ( code ) : res ( )
78
86
} )
87
+ } )
79
88
}
80
89
81
90
async function buildLib ( name , dir ) {
82
- const { globals } = JSON . parse ( await fs . readFile ( `${ dir } /package.json` ) )
83
-
84
- process . stdout . write ( `Bundling library "${ name } " at ${ dir } /index.js\n` )
85
-
86
- const builder = createBundleBuilder ( {
87
- basePath : `${ dir } /` ,
88
- globals,
89
- } )
90
- builder . inputFiles . set ( `${ dir } /index.js` , undefined )
91
-
92
- builder . emitter . addListener ( 'complete' , e => {
93
- const content = String ( e . outputFiles . get ( 'index.js' ) ?. content )
94
- fs . writeFile ( `${ dir } /index.bundle.js` , content )
95
- . then ( ( ) => process . stdout . write ( [
96
- '<<<' ,
97
- `Wrote ${ dir } /index.bundle.js` ,
98
- `[${ content . length } bytes]` ,
99
- ...( ( globals && Object . keys ( globals ) . length )
100
- ? [
101
- ` Depending on:` ,
102
- ...Object . entries ( globals ) . map ( ( [ module , name ] ) => ` ${ name } => ${ module } ` ) ,
103
- ]
104
- : [ ] ) ,
105
- '>>>' ,
106
- '' ,
107
- ] . join ( '\n' ) ) )
108
- } )
91
+ const { globals} = JSON . parse ( await fs . readFile ( `${ dir } /package.json` ) )
92
+
93
+ process . stdout . write ( `Bundling library "${ name } " at ${ dir } /index.js\n` )
94
+
95
+ const builder = createBundleBuilder ( {
96
+ basePath : `${ dir } /` ,
97
+ globals,
98
+ } )
99
+ builder . inputFiles . set ( `${ dir } /index.js` , undefined )
100
+
101
+ builder . emitter . addListener ( 'complete' , e => {
102
+ const content = String ( e . outputFiles . get ( 'index.js' ) ?. content )
103
+ fs . writeFile ( `${ dir } /index.bundle.js` , content ) . then ( ( ) =>
104
+ process . stdout . write (
105
+ [
106
+ '<<<' ,
107
+ `Wrote ${ dir } /index.bundle.js` ,
108
+ `[${ content . length } bytes]` ,
109
+ ...( globals && Object . keys ( globals ) . length
110
+ ? [
111
+ ` Depending on:` ,
112
+ ...Object . entries ( globals ) . map (
113
+ ( [ module , name ] ) => ` ${ name } => ${ module } ` ,
114
+ ) ,
115
+ ]
116
+ : [ ] ) ,
117
+ '>>>' ,
118
+ '' ,
119
+ ] . join ( '\n' ) ,
120
+ ) ,
121
+ )
122
+ } )
109
123
110
- builder . build ( )
124
+ builder . build ( )
111
125
}
112
126
113
127
async function buildEnv ( name , file ) {
114
- process . stdout . write ( `Bundling environment "${ name } " at ${ file } \n` )
115
-
116
- const builder = createBundleBuilder ( {
117
- basePath : `${ indexDirEnv } /` ,
118
- } )
119
- const basename = path . basename ( file , '.js' )
120
- builder . inputFiles . set ( file , undefined )
121
-
122
- builder . emitter . addListener ( 'complete' , e => {
123
- const content = String ( e . outputFiles . get ( `${ basename } .js` ) ?. content )
124
- fs . writeFile ( `${ indexDirEnv } /${ basename } .bundle.js` , content )
125
- . then ( ( ) => process . stdout . write ( [
126
- '<<<' ,
127
- `Wrote ${ indexDirEnv } /${ basename } .bundle.js` ,
128
- `[${ content . length } bytes]` ,
129
- '>>>' ,
130
- '' ,
131
- ] . join ( '\n' ) ) )
132
- } )
128
+ process . stdout . write ( `Bundling environment "${ name } " at ${ file } \n` )
129
+
130
+ const builder = createBundleBuilder ( {
131
+ basePath : `${ indexDirEnv } /` ,
132
+ } )
133
+ const basename = path . basename ( file , '.js' )
134
+ builder . inputFiles . set ( file , undefined )
135
+
136
+ builder . emitter . addListener ( 'complete' , e => {
137
+ const content = String ( e . outputFiles . get ( `${ basename } .js` ) ?. content )
138
+ fs . writeFile ( `${ indexDirEnv } /${ basename } .bundle.js` , content ) . then ( ( ) =>
139
+ process . stdout . write (
140
+ [
141
+ '<<<' ,
142
+ `Wrote ${ indexDirEnv } /${ basename } .bundle.js` ,
143
+ `[${ content . length } bytes]` ,
144
+ '>>>' ,
145
+ '' ,
146
+ ] . join ( '\n' ) ,
147
+ ) ,
148
+ )
149
+ } )
133
150
134
- builder . build ( )
151
+ builder . build ( )
135
152
}
136
-
0 commit comments