jiek 1.1.12 → 2.0.0
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/README.md +53 -106
- package/bin/jiek-build.js +16 -0
- package/dist/cli-only-build.cjs +716 -0
- package/dist/cli-only-build.d.cts +91 -0
- package/dist/cli-only-build.d.ts +91 -0
- package/dist/cli-only-build.js +708 -0
- package/dist/cli.cjs +219 -565
- package/dist/cli.d.cts +0 -65
- package/dist/cli.d.ts +0 -65
- package/dist/cli.js +219 -565
- package/dist/index.d.cts +27 -0
- package/dist/index.d.ts +27 -0
- package/dist/rollup/index.cjs +102 -49
- package/dist/rollup/index.js +102 -47
- package/package.json +28 -11
- package/src/cli-only-build.ts +7 -0
- package/src/cli.ts +1 -7
- package/src/commands/base.ts +13 -3
- package/src/commands/build.ts +200 -39
- package/src/commands/descriptions.ts +12 -0
- package/src/commands/meta.ts +5 -0
- package/src/rollup/base.ts +44 -0
- package/src/rollup/index.ts +127 -39
- package/src/utils/filterSupport.ts +2 -6
- package/src/rollup/plugins/globals.ts +0 -34
package/src/rollup/index.ts
CHANGED
@@ -8,11 +8,9 @@ import { getWorkspaceDir } from '@jiek/utils/getWorkspaceDir'
|
|
8
8
|
import commonjs from '@rollup/plugin-commonjs'
|
9
9
|
import json from '@rollup/plugin-json'
|
10
10
|
import { nodeResolve } from '@rollup/plugin-node-resolve'
|
11
|
-
import terser from '@rollup/plugin-terser'
|
12
11
|
import { sendMessage } from 'execa'
|
13
12
|
import { isMatch } from 'micromatch'
|
14
13
|
import type { InputPluginOption, OutputOptions, OutputPlugin, Plugin, RollupOptions } from 'rollup'
|
15
|
-
import esbuild from 'rollup-plugin-esbuild'
|
16
14
|
import ts from 'typescript'
|
17
15
|
|
18
16
|
import { recusiveListFiles } from '#~/utils/recusiveListFiles.ts'
|
@@ -34,13 +32,36 @@ interface PackageJSON {
|
|
34
32
|
const {
|
35
33
|
JIEK_ROOT,
|
36
34
|
JIEK_NAME,
|
35
|
+
JIEK_BUILDER,
|
37
36
|
JIEK_ENTRIES,
|
37
|
+
JIEK_EXTERNAL,
|
38
38
|
JIEK_WITHOUT_JS,
|
39
39
|
JIEK_WITHOUT_DTS,
|
40
40
|
JIEK_WITHOUT_MINIFY,
|
41
|
+
JIEK_MINIFY_TYPE,
|
41
42
|
JIEK_NO_CLEAN,
|
42
|
-
JIEK_ONLY_MINIFY
|
43
|
+
JIEK_ONLY_MINIFY,
|
44
|
+
JIEK_TSCONFIG,
|
45
|
+
JIEK_DTSCONFIG
|
43
46
|
} = process.env
|
47
|
+
|
48
|
+
const resolveArrayString = (str: string | undefined) => {
|
49
|
+
const arr = [
|
50
|
+
...new Set(
|
51
|
+
str
|
52
|
+
?.split(',')
|
53
|
+
.map(e => e.trim())
|
54
|
+
.filter(e => e.length > 0)
|
55
|
+
?? []
|
56
|
+
)
|
57
|
+
]
|
58
|
+
return arr?.length ? arr : undefined
|
59
|
+
}
|
60
|
+
|
61
|
+
const entries = resolveArrayString(JIEK_ENTRIES)?.map(e => ({ 'index': '.' }[e] ?? e))
|
62
|
+
|
63
|
+
const commandExternal = resolveArrayString(JIEK_EXTERNAL)?.map(e => new RegExp(`^${e}$`))
|
64
|
+
|
44
65
|
const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir()
|
45
66
|
const COMMON_OPTIONS = {} satisfies RollupOptions
|
46
67
|
const COMMON_PLUGINS = [
|
@@ -61,6 +82,18 @@ const MINIFY_DEFAULT_VALUE = WITHOUT_MINIFY
|
|
61
82
|
? 'only-minify'
|
62
83
|
: true
|
63
84
|
|
85
|
+
type BuilderOptions = NonNullable<TemplateOptions['builder']>
|
86
|
+
|
87
|
+
const BUILDER_OPTIONS = {
|
88
|
+
type: JIEK_BUILDER ?? 'esbuild'
|
89
|
+
} as NonNullable<Exclude<BuilderOptions, string>>
|
90
|
+
|
91
|
+
type MinifyOptions = NonNullable<TemplateOptions['output']>['minifyOptions']
|
92
|
+
|
93
|
+
const MINIFY_OPTIONS = {
|
94
|
+
type: JIEK_MINIFY_TYPE ?? 'esbuild'
|
95
|
+
} as NonNullable<Exclude<MinifyOptions, string>>
|
96
|
+
|
64
97
|
const config = loadConfig({
|
65
98
|
root: WORKSPACE_ROOT
|
66
99
|
}) ?? {}
|
@@ -134,15 +167,37 @@ const reveal = (obj: string | Record<string, unknown>, keys: string[]) =>
|
|
134
167
|
return acc[key] as string | Record<string, unknown>
|
135
168
|
}, obj)
|
136
169
|
|
170
|
+
const resolveMinifyOptions = (minifyOptions: MinifyOptions): typeof MINIFY_OPTIONS =>
|
171
|
+
typeof minifyOptions === 'string'
|
172
|
+
? { type: minifyOptions }
|
173
|
+
: minifyOptions ?? { type: 'esbuild' }
|
174
|
+
|
175
|
+
const resolveBuilderOptions = (
|
176
|
+
builder: TemplateOptions['builder']
|
177
|
+
): Exclude<TemplateOptions['builder'], string | undefined> =>
|
178
|
+
typeof builder === 'string'
|
179
|
+
? { type: builder }
|
180
|
+
: builder ?? { type: 'esbuild' }
|
181
|
+
|
182
|
+
const resolvedMinifyOptions = resolveMinifyOptions(build.output?.minifyOptions ?? MINIFY_OPTIONS)
|
183
|
+
const { type: _resolvedMinifyOptionsType, ...noTypeResolvedMinifyOptions } = resolvedMinifyOptions
|
184
|
+
const resolvedBuilderOptions = resolveBuilderOptions(build.builder ?? BUILDER_OPTIONS)
|
185
|
+
const { type: _resolvedBuilderOptionsType, ...noTypeResolvedBuilderOptions } = resolvedBuilderOptions
|
186
|
+
|
137
187
|
const withMinify = (
|
138
188
|
output: OutputOptions & {
|
139
189
|
plugins?: OutputPlugin[]
|
140
190
|
},
|
141
191
|
minify = build?.output?.minify ?? MINIFY_DEFAULT_VALUE
|
142
|
-
): OutputOptions[] =>
|
143
|
-
minify === false
|
144
|
-
|
145
|
-
|
192
|
+
): OutputOptions[] => {
|
193
|
+
if (minify === false) return [output]
|
194
|
+
|
195
|
+
const minifyPlugin = resolvedMinifyOptions.type === 'esbuild'
|
196
|
+
? import('rollup-plugin-esbuild').then(({ minify }) => minify(noTypeResolvedMinifyOptions as any))
|
197
|
+
: resolvedMinifyOptions.type === 'swc'
|
198
|
+
? import('rollup-plugin-swc3').then(({ minify }) => minify(noTypeResolvedMinifyOptions as any))
|
199
|
+
: import('@rollup/plugin-terser').then(({ default: minify }) => minify(noTypeResolvedMinifyOptions as any))
|
200
|
+
return minify === 'only-minify'
|
146
201
|
? [{
|
147
202
|
...output,
|
148
203
|
// TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
|
@@ -155,7 +210,7 @@ const withMinify = (
|
|
155
210
|
})(),
|
156
211
|
plugins: [
|
157
212
|
...(output.plugins ?? []),
|
158
|
-
|
213
|
+
minifyPlugin
|
159
214
|
]
|
160
215
|
}]
|
161
216
|
: [
|
@@ -171,10 +226,11 @@ const withMinify = (
|
|
171
226
|
file: output.file?.replace(/(\.[cm]?js)$/, '.min$1'),
|
172
227
|
plugins: [
|
173
228
|
...(output.plugins ?? []),
|
174
|
-
|
229
|
+
minifyPlugin
|
175
230
|
]
|
176
231
|
}
|
177
232
|
]
|
233
|
+
}
|
178
234
|
|
179
235
|
const generateConfigs = (context: ConfigGenerateContext, options: TemplateOptions = {}): RollupOptions[] => {
|
180
236
|
const {
|
@@ -182,10 +238,11 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
182
238
|
name,
|
183
239
|
input,
|
184
240
|
output,
|
185
|
-
external,
|
241
|
+
external: inputExternal,
|
186
242
|
pkgIsModule,
|
187
243
|
conditionals
|
188
244
|
} = context
|
245
|
+
const external = [...inputExternal, ...(options.external ?? []), ...(commandExternal ?? [])]
|
189
246
|
const isModule = conditionals.includes('import')
|
190
247
|
const isCommonJS = conditionals.includes('require')
|
191
248
|
const isBrowser = conditionals.includes('browser')
|
@@ -193,12 +250,27 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
193
250
|
resolveWorkspacePath('tsconfig.json'),
|
194
251
|
resolveWorkspacePath('tsconfig.dts.json')
|
195
252
|
]
|
253
|
+
JIEK_TSCONFIG && dtsTSConfigPaths.push(resolveWorkspacePath(JIEK_TSCONFIG))
|
254
|
+
JIEK_DTSCONFIG && dtsTSConfigPaths.push(resolveWorkspacePath(JIEK_DTSCONFIG))
|
255
|
+
const buildTSConfigPaths = [
|
256
|
+
...dtsTSConfigPaths,
|
257
|
+
resolveWorkspacePath('tsconfig.build.json')
|
258
|
+
]
|
259
|
+
// 这里重复写了俩次 JIEK_TSCONFIG 到 tsconfig 的加载列表中
|
260
|
+
// 目的是保证在 build 的时候,JIEK_TSCONFIG 的优先级高于 JIEK_DTSCONFIG
|
261
|
+
JIEK_TSCONFIG && buildTSConfigPaths.push(resolveWorkspacePath(JIEK_TSCONFIG))
|
196
262
|
let dtsTSConfigPath: string | undefined
|
197
263
|
dtsTSConfigPaths.forEach(p => {
|
198
264
|
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
199
265
|
dtsTSConfigPath = p
|
200
266
|
}
|
201
267
|
})
|
268
|
+
let buildTSConfigPath: string | undefined
|
269
|
+
buildTSConfigPaths.forEach(p => {
|
270
|
+
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
271
|
+
buildTSConfigPath = p
|
272
|
+
}
|
273
|
+
})
|
202
274
|
let compilerOptions: ts.CompilerOptions = {}
|
203
275
|
if (dtsTSConfigPath) {
|
204
276
|
const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, resolve(input))
|
@@ -248,6 +320,31 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
248
320
|
|
249
321
|
const commonPlugins: Plugin[] = []
|
250
322
|
if (jsOutput && !WITHOUT_JS) {
|
323
|
+
const sourcemap = typeof options?.output?.sourcemap === 'object'
|
324
|
+
? options.output.sourcemap.js
|
325
|
+
: options?.output?.sourcemap
|
326
|
+
const builder = resolvedBuilderOptions.type === 'esbuild'
|
327
|
+
? import('rollup-plugin-esbuild').then(({ default: esbuild }) =>
|
328
|
+
esbuild({
|
329
|
+
sourceMap: sourcemap === 'hidden' ? false : !!sourcemap,
|
330
|
+
tsconfig: buildTSConfigPath,
|
331
|
+
...noTypeResolvedBuilderOptions
|
332
|
+
})
|
333
|
+
)
|
334
|
+
: import('rollup-plugin-swc3').then(({ default: swc }) =>
|
335
|
+
swc({
|
336
|
+
sourceMaps: typeof sourcemap === 'boolean'
|
337
|
+
? sourcemap
|
338
|
+
: typeof sourcemap === 'undefined'
|
339
|
+
? undefined
|
340
|
+
: ({
|
341
|
+
hidden: false,
|
342
|
+
inline: 'inline'
|
343
|
+
} as const)[sourcemap] ?? undefined,
|
344
|
+
tsconfig: buildTSConfigPath,
|
345
|
+
...noTypeResolvedBuilderOptions
|
346
|
+
})
|
347
|
+
)
|
251
348
|
rollupOptions.push({
|
252
349
|
input: inputObj,
|
253
350
|
external,
|
@@ -263,9 +360,7 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
263
360
|
.replace(/(\.[cm]?)ts$/, jsOutputSuffix)
|
264
361
|
: output.replace(`${jsOutdir}/`, '')
|
265
362
|
),
|
266
|
-
sourcemap
|
267
|
-
? options.output.sourcemap.js
|
268
|
-
: options?.output?.sourcemap,
|
363
|
+
sourcemap,
|
269
364
|
format: isModule ? 'esm' : (
|
270
365
|
isCommonJS ? 'cjs' : (
|
271
366
|
isBrowser ? 'umd' : (
|
@@ -289,9 +384,7 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
289
384
|
})
|
290
385
|
)
|
291
386
|
.catch(() => void 0),
|
292
|
-
|
293
|
-
tsconfig: dtsTSConfigPath
|
294
|
-
}),
|
387
|
+
builder,
|
295
388
|
commonjs(),
|
296
389
|
progress({
|
297
390
|
onEvent: (event, message) =>
|
@@ -338,7 +431,6 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
338
431
|
dts({
|
339
432
|
respectExternal: true,
|
340
433
|
compilerOptions: {
|
341
|
-
...compilerOptions,
|
342
434
|
// temp directory, it not affect the output
|
343
435
|
// but if the user not set it and `declaration`, inputs can't generate any dts files when the input relative imports of `package.json`
|
344
436
|
outDir: 'dist',
|
@@ -348,7 +440,8 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
348
440
|
// Expected '{', got 'type' (Note that you need plugins to import files that are not JavaScript)
|
349
441
|
// https://github.com/Swatinem/rollup-plugin-dts/issues/96
|
350
442
|
noEmit: false
|
351
|
-
}
|
443
|
+
},
|
444
|
+
tsconfig: dtsTSConfigPath
|
352
445
|
}),
|
353
446
|
progress({
|
354
447
|
onEvent: (event, message) =>
|
@@ -363,20 +456,22 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
363
456
|
]
|
364
457
|
})
|
365
458
|
}
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
459
|
+
if (rollupOptions.length > 0) {
|
460
|
+
// only push the first one a watcher plugin
|
461
|
+
rollupOptions[0].plugins = [
|
462
|
+
{
|
463
|
+
name: 'jiek-plugin-watcher',
|
464
|
+
watchChange: (id) =>
|
465
|
+
sendMessage(
|
466
|
+
{
|
467
|
+
type: 'watchChange',
|
468
|
+
data: { id, name: JIEK_NAME!, path, input }
|
469
|
+
} satisfies RollupProgressEvent
|
470
|
+
)
|
471
|
+
},
|
472
|
+
...(rollupOptions[0].plugins as any)
|
473
|
+
]
|
474
|
+
}
|
380
475
|
return rollupOptions
|
381
476
|
}
|
382
477
|
|
@@ -386,13 +481,6 @@ export function template(packageJSON: PackageJSON): RollupOptions[] {
|
|
386
481
|
if (!name) throw new Error('package.json name is required')
|
387
482
|
if (!entrypoints) throw new Error('package.json exports is required')
|
388
483
|
|
389
|
-
const entries = JIEK_ENTRIES
|
390
|
-
?.split(',')
|
391
|
-
.map(e => e.trim())
|
392
|
-
.map(e => ({
|
393
|
-
'index': '.'
|
394
|
-
}[e] ?? e))
|
395
|
-
|
396
484
|
const packageName = pascalCase(name)
|
397
485
|
|
398
486
|
const external = externalResolver(packageJSON as Record<string, unknown>)
|
@@ -6,8 +6,8 @@ import { filterPackagesFromDir } from '@pnpm/filter-workspace-packages'
|
|
6
6
|
import { program } from 'commander'
|
7
7
|
import { load } from 'js-yaml'
|
8
8
|
|
9
|
-
import { getRoot } from '
|
10
|
-
import { getWD } from '
|
9
|
+
import { getRoot } from '#~/utils/getRoot.ts'
|
10
|
+
import { getWD } from '#~/utils/getWD.ts'
|
11
11
|
|
12
12
|
export let type = ''
|
13
13
|
|
@@ -16,10 +16,6 @@ try {
|
|
16
16
|
require.resolve('@pnpm/filter-workspace-packages')
|
17
17
|
type = 'pnpm'
|
18
18
|
} catch { /* empty */ }
|
19
|
-
if (type !== '') {
|
20
|
-
program
|
21
|
-
.option('-f, --filter <filter>', 'filter packages, support fuzzy match and array. e.g. -f core,utils')
|
22
|
-
}
|
23
19
|
|
24
20
|
export interface ProjectsGraph {
|
25
21
|
wd: string
|
@@ -1,34 +0,0 @@
|
|
1
|
-
import type { Plugin, PluginImpl } from 'rollup'
|
2
|
-
|
3
|
-
import globalResolver from '../utils/globalResolver'
|
4
|
-
|
5
|
-
interface GlobalsOptions {
|
6
|
-
external?: (string | RegExp)[]
|
7
|
-
}
|
8
|
-
|
9
|
-
export function createGlobalsLinkage() {
|
10
|
-
let globals = {}
|
11
|
-
const dependencies = new Set<string>([])
|
12
|
-
return [
|
13
|
-
(({ external } = {}) => {
|
14
|
-
return {
|
15
|
-
name: 'globals',
|
16
|
-
resolveId(id) {
|
17
|
-
if (external?.some(dep => dep instanceof RegExp ? dep.test(id) : dep === id)) {
|
18
|
-
dependencies.add(id)
|
19
|
-
return { id, external: true }
|
20
|
-
}
|
21
|
-
return null
|
22
|
-
},
|
23
|
-
outputOptions(options) {
|
24
|
-
globals = [...dependencies].reduce((acc, value) => ({
|
25
|
-
...acc,
|
26
|
-
[value]: globalResolver(value)
|
27
|
-
}), {})
|
28
|
-
return { ...options, globals }
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}) as PluginImpl<GlobalsOptions>,
|
32
|
-
{ outputOptions: options => ({ ...options, globals }) } as Plugin
|
33
|
-
] as const
|
34
|
-
}
|