jiek 1.0.7 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/cli.cjs +96 -9
- package/dist/cli.js +95 -7
- package/dist/cli.min.cjs +3 -3
- package/dist/cli.min.js +4 -4
- package/dist/rollup/index.cjs +40 -8
- package/dist/rollup/index.js +38 -6
- package/dist/rollup/index.min.cjs +4 -4
- package/dist/rollup/index.min.js +4 -4
- package/package.json +1 -1
- package/src/rollup/index.ts +47 -13
- package/src/rollup/utils/externalResolver.ts +10 -1
- package/src/utils/recusiveListFiles.ts +13 -0
- package/src/merge-package-json.ts +0 -75
package/src/rollup/index.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import '
|
1
|
+
import './base'
|
2
2
|
|
3
3
|
import fs from 'node:fs'
|
4
4
|
import { dirname, relative, resolve } from 'node:path'
|
@@ -16,6 +16,8 @@ import type { InputPluginOption, OutputOptions, OutputPlugin, RollupOptions } fr
|
|
16
16
|
import esbuild from 'rollup-plugin-esbuild'
|
17
17
|
import ts from 'typescript'
|
18
18
|
|
19
|
+
import { recusiveListFiles } from '#~/utils/recusiveListFiles.ts'
|
20
|
+
|
19
21
|
import { getExports } from '../utils/getExports'
|
20
22
|
import { loadConfig } from '../utils/loadConfig'
|
21
23
|
import { getCompilerOptionsByFilePath } from '../utils/ts'
|
@@ -58,9 +60,6 @@ const jsOutdir = `./${
|
|
58
60
|
|
59
61
|
const STYLE_REGEXP = /\.(css|s[ac]ss|less|styl)$/
|
60
62
|
|
61
|
-
// eslint-disable-next-line unused-imports/no-unused-vars
|
62
|
-
const debug = (...args: unknown[]) => sendMessage({ type: 'debug', data: args } satisfies RollupProgressEvent)
|
63
|
-
|
64
63
|
const resolveBuildPlugins = (context: ConfigGenerateContext, plugins: TemplateOptions['plugins']): {
|
65
64
|
js: InputPluginOption
|
66
65
|
dts: InputPluginOption
|
@@ -107,7 +106,7 @@ const withMinify = (
|
|
107
106
|
plugins?: OutputPlugin[]
|
108
107
|
},
|
109
108
|
minify = build?.output?.minify
|
110
|
-
) =>
|
109
|
+
): OutputOptions[] =>
|
111
110
|
minify === false
|
112
111
|
? [output]
|
113
112
|
: minify === 'only-minify'
|
@@ -115,7 +114,12 @@ const withMinify = (
|
|
115
114
|
...output,
|
116
115
|
// TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
|
117
116
|
// TODO resolve dts output file name
|
118
|
-
|
117
|
+
entryFileNames: chunkInfo =>
|
118
|
+
typeof output.entryFileNames === 'function'
|
119
|
+
? output.entryFileNames(chunkInfo).replace(/(\.[cm]?js)$/, '.min$1')
|
120
|
+
: (() => {
|
121
|
+
throw new Error('entryFileNames must be a function')
|
122
|
+
})(),
|
119
123
|
plugins: [
|
120
124
|
...(output.plugins ?? []),
|
121
125
|
terser()
|
@@ -125,6 +129,12 @@ const withMinify = (
|
|
125
129
|
output,
|
126
130
|
{
|
127
131
|
...output,
|
132
|
+
entryFileNames: chunkInfo =>
|
133
|
+
typeof output.entryFileNames === 'function'
|
134
|
+
? output.entryFileNames(chunkInfo).replace(/(\.[cm]?js)$/, '.min$1')
|
135
|
+
: (() => {
|
136
|
+
throw new Error('entryFileNames must be a function')
|
137
|
+
})(),
|
128
138
|
file: output.file?.replace(/(\.[cm]?js)$/, '.min$1'),
|
129
139
|
plugins: [
|
130
140
|
...(output.plugins ?? []),
|
@@ -176,15 +186,34 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
176
186
|
}
|
177
187
|
const outdir = options?.output?.dir
|
178
188
|
const { js: jsPlugins, dts: dtsPlugins } = resolveBuildPlugins(context, build.plugins)
|
189
|
+
if (input.includes('**')) {
|
190
|
+
throw new Error(
|
191
|
+
'input should not include "**", please read the [documentation](https://nodejs.org/api/packages.html#subpath-patterns).'
|
192
|
+
)
|
193
|
+
}
|
194
|
+
const inputObj = !input.includes('*')
|
195
|
+
? input
|
196
|
+
: recusiveListFiles(process.cwd())
|
197
|
+
.filter(p => /(?<!\.d)\.[cm]?tsx?$/.test(p))
|
198
|
+
const globCommonDir = input.includes('*')
|
199
|
+
? input.split('*')[0]
|
200
|
+
: ''
|
179
201
|
return [
|
180
202
|
{
|
181
|
-
input,
|
203
|
+
input: inputObj,
|
182
204
|
external,
|
183
205
|
output: [
|
184
206
|
...withMinify({
|
185
|
-
|
207
|
+
dir: jsOutdir,
|
186
208
|
name,
|
187
209
|
interop: 'auto',
|
210
|
+
entryFileNames: (chunkInfo) => (
|
211
|
+
Array.isArray(inputObj)
|
212
|
+
? chunkInfo.facadeModuleId!.replace(`${process.cwd()}/`, './')
|
213
|
+
.replace(globCommonDir, '')
|
214
|
+
.replace(/(\.[cm]?)ts$/, '$1js')
|
215
|
+
: output.replace(`${jsOutdir}/`, '')
|
216
|
+
),
|
188
217
|
sourcemap: typeof options?.output?.sourcemap === 'object'
|
189
218
|
? options.output.sourcemap.js
|
190
219
|
: options?.output?.sourcemap,
|
@@ -227,7 +256,7 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
227
256
|
]
|
228
257
|
},
|
229
258
|
{
|
230
|
-
input,
|
259
|
+
input: inputObj,
|
231
260
|
external,
|
232
261
|
output: [
|
233
262
|
{
|
@@ -235,10 +264,15 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
235
264
|
sourcemap: typeof options?.output?.sourcemap === 'object'
|
236
265
|
? options.output.sourcemap.dts
|
237
266
|
: options?.output?.sourcemap,
|
238
|
-
entryFileNames: () =>
|
239
|
-
|
240
|
-
.replace(`${
|
241
|
-
|
267
|
+
entryFileNames: (chunkInfo) => (
|
268
|
+
Array.isArray(inputObj)
|
269
|
+
? chunkInfo.facadeModuleId!.replace(`${process.cwd()}/`, './')
|
270
|
+
.replace(globCommonDir, '')
|
271
|
+
.replace(/(\.[cm]?)ts$/, '.d$1ts')
|
272
|
+
: output
|
273
|
+
.replace(`${jsOutdir}/`, '')
|
274
|
+
.replace(/(\.[cm]?)js$/, '.d$1ts')
|
275
|
+
),
|
242
276
|
strict: typeof options?.output?.strict === 'object'
|
243
277
|
? options.output.strict.dts
|
244
278
|
: options?.output?.strict
|
@@ -1,5 +1,11 @@
|
|
1
1
|
import fs from 'node:fs'
|
2
2
|
|
3
|
+
const EXCLUDE_SUFFIX = [
|
4
|
+
'te?xt',
|
5
|
+
'json',
|
6
|
+
'(css|s[ac]ss|less|styl)'
|
7
|
+
]
|
8
|
+
|
3
9
|
export default function(json: Record<string, unknown>): (string | RegExp)[]
|
4
10
|
export default function(path?: string): (string | RegExp)[]
|
5
11
|
export default function(jsonOrPath: string | Record<string, unknown> = process.cwd()): (string | RegExp)[] {
|
@@ -9,14 +15,17 @@ export default function(jsonOrPath: string | Record<string, unknown> = process.c
|
|
9
15
|
: {}
|
10
16
|
: jsonOrPath
|
11
17
|
const { name, dependencies = {}, peerDependencies = {}, optionalDependencies = {} } = pkg
|
18
|
+
if (!name) {
|
19
|
+
throw new Error('package.json must have a name field')
|
20
|
+
}
|
12
21
|
const external = <(string | RegExp)[]> Object
|
13
22
|
.keys(dependencies)
|
14
23
|
.concat(Object.keys(peerDependencies))
|
15
24
|
.concat(Object.keys(optionalDependencies))
|
16
|
-
.concat(name)
|
17
25
|
return external
|
18
26
|
.map(dep => new RegExp(`^${dep}(/.*)?$`))
|
19
27
|
.concat([
|
28
|
+
new RegExp(`^${name}(/.*)?(?<!${EXCLUDE_SUFFIX.map(suffix => `\\.${suffix}`).join('|')})$`),
|
20
29
|
/^node:/
|
21
30
|
])
|
22
31
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import fs from 'node:fs'
|
2
|
+
import { resolve } from 'node:path'
|
3
|
+
|
4
|
+
export const recusiveListFiles = (dir: string): string[] =>
|
5
|
+
fs.readdirSync(dir).reduce((acc, file) => {
|
6
|
+
const filePath = resolve(dir, file)
|
7
|
+
if (fs.statSync(filePath).isDirectory()) {
|
8
|
+
if (filePath.endsWith('/node_modules')) return acc
|
9
|
+
|
10
|
+
return [...acc, ...recusiveListFiles(filePath)]
|
11
|
+
}
|
12
|
+
return [...acc, filePath]
|
13
|
+
}, [] as string[])
|
@@ -1,75 +0,0 @@
|
|
1
|
-
import path from 'node:path'
|
2
|
-
|
3
|
-
import { type Options, pkger } from '@jiek/pkger'
|
4
|
-
import { commondir } from '@jiek/utils/commondir'
|
5
|
-
import type { Manifest } from '@pnpm/workspace.pkgs-graph'
|
6
|
-
|
7
|
-
export function mergePackageJson(manifest: Manifest & {
|
8
|
-
jiek?: Options
|
9
|
-
exports?: unknown | unknown[]
|
10
|
-
}, cwd: string, options: {
|
11
|
-
excludeDistInExports?: boolean
|
12
|
-
} = {}) {
|
13
|
-
const {
|
14
|
-
excludeDistInExports = false
|
15
|
-
} = options
|
16
|
-
const {
|
17
|
-
jiek: { cwd: _, ...jiek } = {}
|
18
|
-
} = manifest
|
19
|
-
const { outdir = 'dist' } = jiek
|
20
|
-
let { exports } = manifest
|
21
|
-
let includeIndex = false
|
22
|
-
if (typeof exports === 'string') {
|
23
|
-
includeIndex = true
|
24
|
-
exports = { '.': exports }
|
25
|
-
}
|
26
|
-
if (exports === undefined) {
|
27
|
-
exports = { '.': './src/index.ts' }
|
28
|
-
}
|
29
|
-
if (typeof exports === 'object') {
|
30
|
-
if (Array.isArray(exports) && exports.length > 0) {
|
31
|
-
includeIndex = true
|
32
|
-
} else {
|
33
|
-
includeIndex = !!(<Record<string, unknown>>exports)['.']
|
34
|
-
}
|
35
|
-
}
|
36
|
-
let inputs = Array.isArray(exports)
|
37
|
-
? exports as string[]
|
38
|
-
: Object
|
39
|
-
.entries(<Record<string, unknown>>exports)
|
40
|
-
.reduce((acc, [key, value]) => {
|
41
|
-
if (typeof value === 'string') return key === '.'
|
42
|
-
? [value, ...acc]
|
43
|
-
: acc.concat(value)
|
44
|
-
if (Array.isArray(value)) return acc.concat(value)
|
45
|
-
|
46
|
-
throw new TypeError(`Unexpected value type for key "${key}" in exports, expected string, got ${typeof value}`)
|
47
|
-
}, [] as string[])
|
48
|
-
if (excludeDistInExports) {
|
49
|
-
inputs = inputs.filter(input => !input.startsWith(`./${outdir}`) && !input.startsWith(outdir))
|
50
|
-
}
|
51
|
-
if (inputs.length === 0)
|
52
|
-
throw new Error('No inputs found')
|
53
|
-
|
54
|
-
const absoluteInputs = inputs.map(input => path.isAbsolute(input)
|
55
|
-
? input
|
56
|
-
: path.resolve(cwd, input)
|
57
|
-
)
|
58
|
-
let cDir = path.dirname(absoluteInputs[0])
|
59
|
-
if (absoluteInputs.length > 1) {
|
60
|
-
cDir = commondir(absoluteInputs, cwd)
|
61
|
-
}
|
62
|
-
const resolvedInputs = absoluteInputs.map(input => {
|
63
|
-
return path.relative(cDir, input)
|
64
|
-
})
|
65
|
-
return {
|
66
|
-
...manifest,
|
67
|
-
...pkger({
|
68
|
-
cwd,
|
69
|
-
noIndex: !includeIndex,
|
70
|
-
source: path.relative(cwd, cDir),
|
71
|
-
inputs: resolvedInputs,
|
72
|
-
...jiek
|
73
|
-
})
|
74
|
-
}
|
75
|
-
}
|