jiek 1.0.7 → 1.0.9
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/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
|
-
}
|