jiek 1.1.5 → 1.1.6
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/jiek.js +1 -1
- package/dist/cli.cjs +116 -109
- package/dist/cli.js +116 -109
- package/dist/cli.min.cjs +4 -4
- package/dist/cli.min.js +3 -3
- package/dist/rollup/index.cjs +1 -1
- package/dist/rollup/index.js +1 -1
- package/dist/rollup/index.min.cjs +4 -4
- package/dist/rollup/index.min.js +3 -3
- package/package.json +3 -3
- package/src/commands/build.ts +120 -111
- package/src/utils/filterSupport.ts +9 -4
package/src/commands/build.ts
CHANGED
@@ -8,7 +8,8 @@ import { execaCommand } from 'execa'
|
|
8
8
|
|
9
9
|
import { actionDone, actionRestore } from '../inner'
|
10
10
|
import type { RollupProgressEvent, TemplateOptions } from '../rollup/base'
|
11
|
-
import {
|
11
|
+
import type { ProjectsGraph } from '../utils/filterSupport'
|
12
|
+
import { filterPackagesGraph } from '../utils/filterSupport'
|
12
13
|
import { loadConfig } from '../utils/loadConfig'
|
13
14
|
import { tsRegisterName } from '../utils/tsRegister'
|
14
15
|
|
@@ -59,127 +60,135 @@ program
|
|
59
60
|
actionRestore()
|
60
61
|
const { build } = loadConfig()
|
61
62
|
silent = silent ?? build?.silent ?? false
|
62
|
-
const {
|
63
|
-
wd,
|
64
|
-
value = {}
|
65
|
-
} = await getSelectedProjectsGraph() ?? {}
|
66
|
-
|
67
|
-
if (Object.keys(value).length === 0) {
|
68
|
-
throw new Error('no package found')
|
69
|
-
}
|
70
|
-
const wdNodeModules = path.resolve(wd, 'node_modules')
|
71
|
-
if (!fs.existsSync(wdNodeModules)) {
|
72
|
-
fs.mkdirSync(wdNodeModules)
|
73
|
-
}
|
74
|
-
const jiekTempDir = (...paths: string[]) => path.resolve(wdNodeModules, '.jiek', ...paths)
|
75
|
-
if (!fs.existsSync(jiekTempDir())) {
|
76
|
-
fs.mkdirSync(jiekTempDir())
|
77
|
-
}
|
78
63
|
|
79
|
-
const rollupBinaryPath = require.resolve('rollup')
|
80
|
-
.replace(/dist\/rollup.js$/, 'dist/bin/rollup')
|
81
64
|
const multiBars = new MultiBar({
|
82
65
|
clearOnComplete: false,
|
83
66
|
hideCursor: true,
|
84
|
-
format: '- {bar} | {status} | {input} | {message}'
|
67
|
+
format: '- {bar} | {status} | {pkgName} | {input} | {message}'
|
85
68
|
}, Presets.shades_classic)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
69
|
+
|
70
|
+
const buildPackage = async ({
|
71
|
+
wd,
|
72
|
+
value = {}
|
73
|
+
}: ProjectsGraph) => {
|
74
|
+
if (Object.keys(value).length === 0) {
|
75
|
+
throw new Error('no package found')
|
76
|
+
}
|
77
|
+
const wdNodeModules = path.resolve(wd, 'node_modules')
|
78
|
+
if (!fs.existsSync(wdNodeModules)) {
|
79
|
+
fs.mkdirSync(wdNodeModules)
|
80
|
+
}
|
81
|
+
const jiekTempDir = (...paths: string[]) => path.resolve(wdNodeModules, '.jiek', ...paths)
|
82
|
+
if (!fs.existsSync(jiekTempDir())) {
|
83
|
+
fs.mkdirSync(jiekTempDir())
|
84
|
+
}
|
85
|
+
|
86
|
+
const rollupBinaryPath = require.resolve('rollup')
|
87
|
+
.replace(/dist\/rollup.js$/, 'dist/bin/rollup')
|
88
|
+
let i = 0
|
89
|
+
await Promise.all(
|
90
|
+
Object.entries(value).map(async ([dir, manifest]) => {
|
91
|
+
// TODO support auto build child packages in workspaces
|
92
|
+
const escapeManifestName = manifest.name?.replace(/^@/g, '').replace(/\//g, '+')
|
93
|
+
const configFile = jiekTempDir(
|
94
|
+
`${escapeManifestName ?? `anonymous-${i++}`}.rollup.config.js`
|
95
|
+
)
|
96
|
+
fs.writeFileSync(configFile, FILE_TEMPLATE(manifest))
|
97
|
+
let prefix = ''
|
98
|
+
if (tsRegisterName) {
|
99
|
+
prefix = `node -r ${tsRegisterName} `
|
109
100
|
}
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
101
|
+
const command = `${prefix}${rollupBinaryPath} --silent -c ${configFile}`
|
102
|
+
const child = execaCommand(command, {
|
103
|
+
ipc: true,
|
104
|
+
cwd: dir,
|
105
|
+
env: {
|
106
|
+
...process.env,
|
107
|
+
JIEK_ROOT: wd,
|
108
|
+
JIEK_ENTRIES: entries,
|
109
|
+
JIEK_WITHOUT_JS: String(withoutJs),
|
110
|
+
JIEK_WITHOUT_DTS: String(withoutDts)
|
111
|
+
}
|
112
|
+
})
|
113
|
+
const bars: Record<string, ReturnType<typeof multiBars.create>> = {}
|
114
|
+
let inputMaxLen = 10
|
115
|
+
child.on('message', (e: RollupProgressEvent) => {
|
116
|
+
if (e.type === 'debug') console.log(...(Array.isArray(e.data) ? e.data : [e.data]))
|
117
|
+
})
|
118
|
+
!silent && child.on('message', (e: RollupProgressEvent) => {
|
119
|
+
if (e.type === 'init') {
|
120
|
+
const { leafMap, targetsLength } = e.data
|
121
|
+
const leafs = Array
|
122
|
+
.from(leafMap.entries())
|
123
|
+
.flatMap(([input, pathAndCondiions]) =>
|
124
|
+
pathAndCondiions.map(([path, ...conditions]) => ({
|
125
|
+
input,
|
126
|
+
path,
|
127
|
+
conditions
|
128
|
+
}))
|
129
|
+
)
|
130
|
+
console.log(`Package '${manifest.name}' has ${targetsLength} targets to build`)
|
131
|
+
leafs.forEach(({ input }) => {
|
132
|
+
inputMaxLen = Math.max(inputMaxLen, input.length)
|
133
|
+
})
|
134
|
+
leafs.forEach(({ input, path }) => {
|
135
|
+
const key = `${input}:${path}`
|
136
|
+
if (bars[key]) return
|
137
|
+
bars[key] = multiBars.create(50, 0, {
|
138
|
+
pkgName: manifest.name,
|
139
|
+
input: input.padEnd(inputMaxLen),
|
140
|
+
status: 'waiting'.padEnd(10)
|
141
|
+
}, {
|
142
|
+
barsize: 20,
|
143
|
+
linewrap: true
|
144
|
+
})
|
141
145
|
})
|
146
|
+
}
|
147
|
+
if (e.type === 'progress') {
|
148
|
+
const {
|
149
|
+
path,
|
150
|
+
tags,
|
151
|
+
input,
|
152
|
+
event,
|
153
|
+
message
|
154
|
+
} = e.data
|
155
|
+
const bar = bars[`${input}:${path}`]
|
156
|
+
if (!bar) return
|
157
|
+
bar.update(
|
158
|
+
{
|
159
|
+
start: 0,
|
160
|
+
resolve: 20,
|
161
|
+
end: 50
|
162
|
+
}[event ?? 'start'] ?? 0,
|
163
|
+
{
|
164
|
+
input: input.padEnd(inputMaxLen),
|
165
|
+
status: event?.padEnd(10),
|
166
|
+
message: `${tags?.join(', ')}: ${message}`
|
167
|
+
}
|
168
|
+
)
|
169
|
+
}
|
170
|
+
})
|
171
|
+
await new Promise<void>((resolve, reject) => {
|
172
|
+
let errorStr = ''
|
173
|
+
child.stderr?.on('data', (data) => {
|
174
|
+
errorStr += data
|
142
175
|
})
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
input,
|
149
|
-
event,
|
150
|
-
message
|
151
|
-
} = e.data
|
152
|
-
const bar = bars[`${input}:${path}`]
|
153
|
-
if (!bar) return
|
154
|
-
bar.update(
|
155
|
-
{
|
156
|
-
start: 0,
|
157
|
-
resolve: 20,
|
158
|
-
end: 50
|
159
|
-
}[event ?? 'start'] ?? 0,
|
160
|
-
{
|
161
|
-
input: input.padEnd(inputMaxLen),
|
162
|
-
status: event?.padEnd(10),
|
163
|
-
message: `${tags?.join(', ')}: ${message}`
|
164
|
-
}
|
165
|
-
)
|
166
|
-
}
|
167
|
-
})
|
168
|
-
await new Promise<void>((resolve, reject) => {
|
169
|
-
let errorStr = ''
|
170
|
-
child.stderr?.on('data', (data) => {
|
171
|
-
errorStr += data
|
176
|
+
child.once('exit', (code) =>
|
177
|
+
code === 0
|
178
|
+
? resolve()
|
179
|
+
: reject(new Error(`rollup build failed:\n${errorStr}`)))
|
180
|
+
verbose && child.stdout?.pipe(process.stdout)
|
172
181
|
})
|
173
|
-
child.once('exit', (code) =>
|
174
|
-
code === 0
|
175
|
-
? resolve()
|
176
|
-
: reject(new Error(`rollup build failed:\n${errorStr}`)))
|
177
|
-
verbose && child.stdout?.pipe(process.stdout)
|
178
182
|
})
|
183
|
+
)
|
184
|
+
}
|
185
|
+
const filters: string[] = program.getOptionValue('filter').split(',')
|
186
|
+
const packages = await filterPackagesGraph(filters)
|
187
|
+
await Promise
|
188
|
+
.all(packages.map(buildPackage))
|
189
|
+
.finally(() => {
|
190
|
+
multiBars.stop()
|
179
191
|
})
|
180
|
-
).finally(() => {
|
181
|
-
multiBars.stop()
|
182
|
-
})
|
183
192
|
|
184
193
|
actionDone()
|
185
194
|
})
|
@@ -18,10 +18,10 @@ try {
|
|
18
18
|
} catch { /* empty */ }
|
19
19
|
if (type !== '') {
|
20
20
|
program
|
21
|
-
.option('-f, --filter <filter>', 'filter packages')
|
21
|
+
.option('-f, --filter <filter>', 'filter packages, support fuzzy match and array. e.g. -f core,utils')
|
22
22
|
}
|
23
23
|
|
24
|
-
interface ProjectsGraph {
|
24
|
+
export interface ProjectsGraph {
|
25
25
|
wd: string
|
26
26
|
root: string
|
27
27
|
value?: Record<string, {
|
@@ -31,8 +31,13 @@ interface ProjectsGraph {
|
|
31
31
|
}>
|
32
32
|
}
|
33
33
|
|
34
|
-
export
|
35
|
-
|
34
|
+
export function filterPackagesGraph(filters: string[]): Promise<ProjectsGraph[]> {
|
35
|
+
return Promise.all(filters.map(async filter => getSelectedProjectsGraph(filter)))
|
36
|
+
}
|
37
|
+
|
38
|
+
export async function getSelectedProjectsGraph(
|
39
|
+
filter = program.getOptionValue('filter')
|
40
|
+
): Promise<ProjectsGraph> {
|
36
41
|
const root = getRoot()
|
37
42
|
const { wd, notWorkspace } = getWD()
|
38
43
|
if (!notWorkspace && type === 'pnpm') {
|