jiek 2.0.1 → 2.0.2-alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. package/package.json +8 -5
  2. package/README.md +0 -78
  3. package/bin/jiek-build.js +0 -16
  4. package/bin/jiek.js +0 -13
  5. package/dist/cli-only-build.cjs +0 -743
  6. package/dist/cli-only-build.d.cts +0 -91
  7. package/dist/cli-only-build.d.ts +0 -91
  8. package/dist/cli-only-build.js +0 -735
  9. package/dist/cli.cjs +0 -4888
  10. package/dist/cli.d.cts +0 -67
  11. package/dist/cli.d.ts +0 -67
  12. package/dist/cli.js +0 -4857
  13. package/dist/index.cjs +0 -5
  14. package/dist/index.d.cts +0 -165
  15. package/dist/index.d.ts +0 -165
  16. package/dist/index.js +0 -3
  17. package/dist/rollup/index.cjs +0 -4893
  18. package/dist/rollup/index.d.cts +0 -10
  19. package/dist/rollup/index.d.ts +0 -10
  20. package/dist/rollup/index.js +0 -4880
  21. package/src/cli-only-build.ts +0 -7
  22. package/src/cli.ts +0 -3
  23. package/src/commands/base.ts +0 -18
  24. package/src/commands/build.ts +0 -462
  25. package/src/commands/descriptions.ts +0 -17
  26. package/src/commands/init.ts +0 -373
  27. package/src/commands/meta.ts +0 -5
  28. package/src/commands/publish.ts +0 -204
  29. package/src/index.ts +0 -8
  30. package/src/inner.ts +0 -11
  31. package/src/rollup/base.ts +0 -137
  32. package/src/rollup/index.ts +0 -565
  33. package/src/rollup/plugins/progress.ts +0 -26
  34. package/src/rollup/plugins/skip.ts +0 -21
  35. package/src/rollup/utils/commonOptions.ts +0 -9
  36. package/src/rollup/utils/externalResolver.ts +0 -35
  37. package/src/rollup/utils/globalResolver.ts +0 -13
  38. package/src/rollup/utils/withMinify.ts +0 -18
  39. package/src/utils/filterSupport.ts +0 -91
  40. package/src/utils/getExports.ts +0 -140
  41. package/src/utils/getRoot.ts +0 -16
  42. package/src/utils/getWD.ts +0 -31
  43. package/src/utils/loadConfig.ts +0 -111
  44. package/src/utils/recusiveListFiles.ts +0 -13
  45. package/src/utils/ts.ts +0 -94
  46. package/src/utils/tsRegister.ts +0 -26
@@ -1,137 +0,0 @@
1
- import type { InputPluginOption, OutputOptions } from 'rollup'
2
-
3
- export type Mapping2ROO<K extends keyof OutputOptions> = OutputOptions[K] | {
4
- js?: OutputOptions[K]
5
- dts?: OutputOptions[K]
6
- }
7
-
8
- export interface ConfigGenerateContext {
9
- path: string
10
- name: string
11
- input: string
12
- output: string
13
- external: (string | RegExp)[]
14
- pkgIsModule: boolean
15
- conditionals: string[]
16
- }
17
-
18
- export type OutputControl = boolean | ((context: ConfigGenerateContext) => boolean)
19
-
20
- export const BUILDER_TYPES = ['esbuild', 'swc'] as const
21
-
22
- export const BUILDER_TYPE_PACKAGE_NAME_MAP = {
23
- esbuild: 'rollup-plugin-esbuild',
24
- swc: 'rollup-plugin-swc3'
25
- }
26
-
27
- export interface TemplateOptions {
28
- /**
29
- * When the user configures type: module, the generated output from entry points that don't
30
- * have cts as a suffix will automatically include the CJS version.
31
- * if it is not configured, and the generated output from entry points that do not have mts
32
- * as a suffix will automatically include the ESM version.
33
- *
34
- * @default true
35
- */
36
- crossModuleConvertor?: boolean
37
- /**
38
- * Auto-detect the builder from the installed dependencies.
39
- * If the builder is not installed, it will prompt the user to install it.
40
- * If exists multiple builders, it will fall back to the 'esbuild'.
41
- *
42
- * @default 'esbuild'
43
- */
44
- builder?:
45
- | typeof BUILDER_TYPES[number]
46
- | ({
47
- type: 'esbuild'
48
- } & import('rollup-plugin-esbuild').Options)
49
- | ({
50
- type: 'swc'
51
- } & import('rollup-plugin-swc3').PluginOptions)
52
- output?: {
53
- /**
54
- * @default true
55
- *
56
- * When minify is set to true, the output will with minified files.
57
- * When minify is set to 'only-minify', the output will direct output minified files.
58
- */
59
- minify?: boolean | 'only-minify'
60
- minifyOptions?:
61
- | typeof BUILDER_TYPES[number]
62
- | 'terser'
63
- | (
64
- {
65
- type: 'terser'
66
- } & import('@rollup/plugin-terser').Options
67
- )
68
- | (
69
- {
70
- type: 'esbuild'
71
- } & Parameters<typeof import('rollup-plugin-esbuild').minify>[0]
72
- )
73
- | (
74
- {
75
- type: 'swc'
76
- } & Parameters<typeof import('rollup-plugin-swc3').minify>[0]
77
- )
78
- /**
79
- * @default 'dist'
80
- */
81
- dir?: Mapping2ROO<'dir'>
82
- sourcemap?: Mapping2ROO<'sourcemap'>
83
- strict?: Mapping2ROO<'strict'>
84
- js?: OutputControl
85
- dts?: OutputControl
86
- }
87
- /**
88
- * Set the external dependencies of the package.
89
- */
90
- external?: (string | RegExp)[]
91
- plugins?:
92
- | InputPluginOption
93
- | ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption)
94
- | {
95
- js: InputPluginOption
96
- dts?: InputPluginOption
97
- }
98
- | {
99
- js?: InputPluginOption
100
- dts: InputPluginOption
101
- }
102
- }
103
-
104
- export type RollupProgressEvent =
105
- | {
106
- type: 'init'
107
- data: {
108
- leafMap: Map<string, string[][]>
109
- targetsLength: number
110
- }
111
- }
112
- | {
113
- type: 'watchChange'
114
- data: {
115
- id: string
116
- name: string
117
- path: string
118
- input: string
119
- }
120
- }
121
- | {
122
- type: 'debug'
123
- data: unknown
124
- }
125
- | {
126
- type: 'progress'
127
- data: {
128
- // name, path, exportConditions, input
129
- name: string
130
- path: string
131
- exportConditions: string[]
132
- input: string
133
- tags?: string[]
134
- event?: string
135
- message?: string
136
- }
137
- }
@@ -1,565 +0,0 @@
1
- import fs from 'node:fs'
2
- import { dirname, extname, relative, resolve } from 'node:path'
3
-
4
- import type { RecursiveRecord } from '@jiek/pkger/entrypoints'
5
- import { getAllLeafs } from '@jiek/pkger/entrypoints'
6
- import { dts } from '@jiek/rollup-plugin-dts'
7
- import { getWorkspaceDir } from '@jiek/utils/getWorkspaceDir'
8
- import commonjs from '@rollup/plugin-commonjs'
9
- import json from '@rollup/plugin-json'
10
- import { nodeResolve } from '@rollup/plugin-node-resolve'
11
- import { sendMessage } from 'execa'
12
- import { isMatch } from 'micromatch'
13
- import type { InputPluginOption, OutputOptions, OutputPlugin, Plugin, RollupOptions } from 'rollup'
14
- import ts from 'typescript'
15
-
16
- import { recusiveListFiles } from '#~/utils/recusiveListFiles.ts'
17
-
18
- import { getExports, getOutDirs } from '../utils/getExports'
19
- import { loadConfig } from '../utils/loadConfig'
20
- import { getCompilerOptionsByFilePath } from '../utils/ts'
21
- import type { ConfigGenerateContext, RollupProgressEvent, TemplateOptions } from './base'
22
- import progress from './plugins/progress'
23
- import skip from './plugins/skip'
24
- import externalResolver from './utils/externalResolver'
25
-
26
- interface PackageJSON {
27
- name?: string
28
- type?: string
29
- exports?: Record<string, unknown> | string | string[]
30
- }
31
-
32
- const {
33
- JIEK_ROOT,
34
- JIEK_NAME,
35
- JIEK_BUILDER,
36
- JIEK_ENTRIES,
37
- JIEK_EXTERNAL,
38
- JIEK_WITHOUT_JS,
39
- JIEK_WITHOUT_DTS,
40
- JIEK_WITHOUT_MINIFY,
41
- JIEK_MINIFY_TYPE,
42
- JIEK_NO_CLEAN,
43
- JIEK_ONLY_MINIFY,
44
- JIEK_TSCONFIG,
45
- JIEK_DTSCONFIG
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
-
65
- const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir()
66
- const COMMON_OPTIONS = {} satisfies RollupOptions
67
- const COMMON_PLUGINS = [
68
- json()
69
- ]
70
-
71
- const WITHOUT_JS = JIEK_WITHOUT_JS === 'true'
72
- const WITHOUT_DTS = JIEK_WITHOUT_DTS === 'true'
73
- const WITHOUT_MINIFY = JIEK_WITHOUT_MINIFY === 'true'
74
-
75
- const ONLY_MINIFY = JIEK_ONLY_MINIFY === 'true'
76
-
77
- const CLEAN = JIEK_NO_CLEAN !== 'true'
78
-
79
- const MINIFY_DEFAULT_VALUE = WITHOUT_MINIFY
80
- ? false
81
- : ONLY_MINIFY
82
- ? 'only-minify'
83
- : true
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
-
97
- const config = loadConfig({
98
- root: WORKSPACE_ROOT
99
- }) ?? {}
100
- const { build = {} } = config
101
- const { js: jsOutdir, dts: dtsOutdir } = getOutDirs({
102
- config,
103
- pkgName: JIEK_NAME
104
- })
105
-
106
- if (CLEAN) {
107
- fs.existsSync(jsOutdir) && fs.rmdirSync(jsOutdir, { recursive: true })
108
- fs.existsSync(dtsOutdir) && fs.rmdirSync(dtsOutdir, { recursive: true })
109
- }
110
-
111
- const STYLE_REGEXP = /\.(css|s[ac]ss|less|styl)$/
112
-
113
- const resolveBuildPlugins = (context: ConfigGenerateContext, plugins: TemplateOptions['plugins']): {
114
- js: InputPluginOption
115
- dts: InputPluginOption
116
- } => {
117
- if (plugins === false || plugins === undefined || plugins === null) {
118
- return { js: [], dts: [] }
119
- }
120
- let js: InputPluginOption = []
121
- let dts: InputPluginOption = []
122
- switch (typeof plugins) {
123
- case 'function':
124
- js = plugins('js', context)
125
- dts = plugins('dts', context)
126
- break
127
- case 'object':
128
- if ('js' in plugins || 'dts' in plugins) {
129
- js = plugins.js ?? []
130
- dts = plugins.dts ?? []
131
- } else {
132
- js = plugins
133
- dts = plugins
134
- }
135
- break
136
- }
137
- return { js, dts }
138
- }
139
-
140
- const resolveOutputControls = (
141
- context: ConfigGenerateContext,
142
- output: TemplateOptions['output']
143
- ): { js: boolean; dts: boolean } => ({
144
- js: typeof output?.js === 'boolean'
145
- ? output.js
146
- : typeof output?.js === 'function'
147
- ? output.js(context)
148
- : true,
149
- dts: typeof output?.dts === 'boolean'
150
- ? output.dts
151
- : typeof output?.dts === 'function'
152
- ? output.dts(context)
153
- : true
154
- })
155
-
156
- const resolveWorkspacePath = (p: string) => resolve(WORKSPACE_ROOT, p)
157
-
158
- const pascalCase = (str: string) =>
159
- str
160
- .replace(/[@|/-](\w)/g, (_, $1) => $1.toUpperCase())
161
- .replace(/(?:^|-)(\w)/g, (_, $1) => $1.toUpperCase())
162
-
163
- const reveal = (obj: string | Record<string, unknown>, keys: string[]) =>
164
- keys.reduce((acc, key) => {
165
- if (typeof acc === 'string') throw new Error('key not found in exports')
166
- if (!(key in acc)) throw new Error(`key ${key} not found in exports`)
167
- return acc[key] as string | Record<string, unknown>
168
- }, obj)
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
-
187
- const withMinify = (
188
- output: OutputOptions & {
189
- plugins?: OutputPlugin[]
190
- },
191
- minify = build?.output?.minify ?? MINIFY_DEFAULT_VALUE
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'
201
- ? [{
202
- ...output,
203
- // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
204
- // TODO resolve dts output file name
205
- entryFileNames: chunkInfo =>
206
- typeof output.entryFileNames === 'function'
207
- ? output.entryFileNames(chunkInfo)
208
- : (() => {
209
- throw new Error('entryFileNames must be a function')
210
- })(),
211
- plugins: [
212
- ...(output.plugins ?? []),
213
- minifyPlugin
214
- ]
215
- }]
216
- : [
217
- output,
218
- {
219
- ...output,
220
- entryFileNames: chunkInfo =>
221
- typeof output.entryFileNames === 'function'
222
- ? output.entryFileNames(chunkInfo).replace(/(\.[cm]?js)$/, '.min$1')
223
- : (() => {
224
- throw new Error('entryFileNames must be a function')
225
- })(),
226
- file: output.file?.replace(/(\.[cm]?js)$/, '.min$1'),
227
- plugins: [
228
- ...(output.plugins ?? []),
229
- minifyPlugin
230
- ]
231
- }
232
- ]
233
- }
234
-
235
- const generateConfigs = (context: ConfigGenerateContext, options: TemplateOptions = {}): RollupOptions[] => {
236
- const {
237
- path,
238
- name,
239
- input,
240
- output,
241
- external: inputExternal,
242
- pkgIsModule,
243
- conditionals
244
- } = context
245
- const external = [...inputExternal, ...(options.external ?? []), ...(commandExternal ?? [])]
246
- const isModule = conditionals.includes('import')
247
- const isCommonJS = conditionals.includes('require')
248
- const isBrowser = conditionals.includes('browser')
249
- const dtsTSConfigPaths = [
250
- resolveWorkspacePath('tsconfig.json'),
251
- resolveWorkspacePath('tsconfig.dts.json')
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))
262
- let dtsTSConfigPath: string | undefined
263
- dtsTSConfigPaths.forEach(p => {
264
- if (fs.existsSync(p) && fs.statSync(p).isFile()) {
265
- dtsTSConfigPath = p
266
- }
267
- })
268
- let buildTSConfigPath: string | undefined
269
- buildTSConfigPaths.forEach(p => {
270
- if (fs.existsSync(p) && fs.statSync(p).isFile()) {
271
- buildTSConfigPath = p
272
- }
273
- })
274
- let compilerOptions: ts.CompilerOptions = {}
275
- if (dtsTSConfigPath) {
276
- const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, resolve(input))
277
- const { options, errors } = ts.convertCompilerOptionsFromJson(
278
- jsonCompilerOptions,
279
- dirname(dtsTSConfigPath)
280
- )
281
- if (errors.length > 0) {
282
- throw new Error(errors.map(e => e.messageText).join('\n'))
283
- }
284
- compilerOptions = options
285
- delete compilerOptions.composite
286
- }
287
- const exportConditions = [...conditionals, ...(compilerOptions.customConditions ?? [])]
288
- const throughEventProps: RollupProgressEvent & { type: 'progress' } = {
289
- type: 'progress',
290
- data: { name, path, exportConditions, input }
291
- }
292
- const { js: jsPlugins, dts: dtsPlugins } = resolveBuildPlugins(context, build.plugins)
293
- if (input.includes('**')) {
294
- throw new Error(
295
- 'input should not include "**", please read the [documentation](https://nodejs.org/api/packages.html#subpath-patterns).'
296
- )
297
- }
298
- const inputObj = !input.includes('*')
299
- ? input
300
- : recusiveListFiles(process.cwd())
301
- .filter(p => /(?<!\.d)\.[cm]?tsx?$/.test(p))
302
- .map(p => relative(process.cwd(), p))
303
- .filter(p => isMatch(p, input.slice(2)))
304
- const globCommonDir = input.includes('*')
305
- ? input.split('*')[0].replace('./', '')
306
- : ''
307
- const pathCommonDir = path.includes('*')
308
- ? path.split('*')[0].replace('./', '')
309
- : ''
310
- if (
311
- (globCommonDir.length > 0 && pathCommonDir.length === 0)
312
- || (globCommonDir.length === 0 && pathCommonDir.length > 0)
313
- ) {
314
- throw new Error('input and path should both include "*" or not include "*"')
315
- }
316
- const jsOutputSuffix = extname(output)
317
- const tsOutputSuffix = jsOutputSuffix.replace(/(\.[cm]?)js$/, '.d$1ts')
318
- const { js: jsOutput, dts: dtsOutput } = resolveOutputControls(context, build.output)
319
- const rollupOptions: RollupOptions[] = []
320
-
321
- const commonPlugins: Plugin[] = []
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
- )
348
- rollupOptions.push({
349
- input: inputObj,
350
- external,
351
- output: [
352
- ...withMinify({
353
- dir: jsOutdir,
354
- name,
355
- interop: 'auto',
356
- entryFileNames: (chunkInfo) => (
357
- Array.isArray(inputObj)
358
- ? chunkInfo.facadeModuleId!.replace(`${process.cwd()}/`, '')
359
- .replace(globCommonDir, pathCommonDir)
360
- .replace(/(\.[cm]?)ts$/, jsOutputSuffix)
361
- : output.replace(`${jsOutdir}/`, '')
362
- ),
363
- sourcemap,
364
- format: isModule ? 'esm' : (
365
- isCommonJS ? 'cjs' : (
366
- isBrowser ? 'umd' : (
367
- pkgIsModule ? 'esm' : 'cjs'
368
- )
369
- )
370
- ),
371
- strict: typeof options?.output?.strict === 'object'
372
- ? options.output.strict.js
373
- : options?.output?.strict
374
- })
375
- ],
376
- plugins: [
377
- ...commonPlugins,
378
- nodeResolve({ exportConditions }),
379
- import('rollup-plugin-postcss')
380
- .then(({ default: postcss }) =>
381
- postcss({
382
- extract: resolve(output.replace(/\.[cm]?js$/, '.css')),
383
- minimize: true
384
- })
385
- )
386
- .catch(() => void 0),
387
- builder,
388
- commonjs(),
389
- progress({
390
- onEvent: (event, message) =>
391
- sendMessage(
392
- {
393
- ...throughEventProps,
394
- data: { ...throughEventProps.data, event, message, tags: ['js'] }
395
- } satisfies RollupProgressEvent
396
- )
397
- }),
398
- jsPlugins
399
- ]
400
- })
401
- }
402
-
403
- if (dtsOutput && !WITHOUT_DTS) {
404
- rollupOptions.push({
405
- input: inputObj,
406
- external,
407
- output: [
408
- {
409
- dir: dtsOutdir,
410
- sourcemap: typeof options?.output?.sourcemap === 'object'
411
- ? options.output.sourcemap.dts
412
- : options?.output?.sourcemap,
413
- entryFileNames: (chunkInfo) => (
414
- Array.isArray(inputObj)
415
- ? chunkInfo.facadeModuleId!.replace(`${process.cwd()}/`, '')
416
- .replace(globCommonDir, pathCommonDir)
417
- .replace(/(\.[cm]?)ts$/, tsOutputSuffix)
418
- : output
419
- .replace(`${jsOutdir}/`, '')
420
- .replace(/(\.[cm]?)js$/, tsOutputSuffix)
421
- ),
422
- strict: typeof options?.output?.strict === 'object'
423
- ? options.output.strict.dts
424
- : options?.output?.strict
425
- }
426
- ],
427
- plugins: [
428
- ...commonPlugins,
429
- nodeResolve({ exportConditions }),
430
- skip({ patterns: [STYLE_REGEXP] }),
431
- dts({
432
- respectExternal: true,
433
- compilerOptions: {
434
- // temp directory, it not affect the output
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`
436
- outDir: 'dist',
437
- declaration: true,
438
- // https://github.com/Swatinem/rollup-plugin-dts/issues/143
439
- preserveSymlinks: false,
440
- // Expected '{', got 'type' (Note that you need plugins to import files that are not JavaScript)
441
- // https://github.com/Swatinem/rollup-plugin-dts/issues/96
442
- noEmit: false
443
- },
444
- tsconfig: dtsTSConfigPath
445
- }),
446
- progress({
447
- onEvent: (event, message) =>
448
- sendMessage(
449
- {
450
- ...throughEventProps,
451
- data: { ...throughEventProps.data, event, message, tags: ['dts'] }
452
- } satisfies RollupProgressEvent
453
- )
454
- }),
455
- dtsPlugins
456
- ]
457
- })
458
- }
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
- }
475
- return rollupOptions
476
- }
477
-
478
- export function template(packageJSON: PackageJSON): RollupOptions[] {
479
- const { name, type, exports: entrypoints } = packageJSON
480
- const pkgIsModule = type === 'module'
481
- if (!name) throw new Error('package.json name is required')
482
- if (!entrypoints) throw new Error('package.json exports is required')
483
-
484
- const packageName = pascalCase(name)
485
-
486
- const external = externalResolver(packageJSON as Record<string, unknown>)
487
-
488
- const [filteredResolvedEntrypoints, exports] = getExports({
489
- entrypoints,
490
- pkgIsModule,
491
- entries,
492
- pkgName: JIEK_NAME!,
493
- outdir: jsOutdir,
494
- config
495
- })
496
-
497
- const leafMap = new Map<string, string[][]>()
498
- getAllLeafs(filteredResolvedEntrypoints as RecursiveRecord<string>, ({ keys, value }) => {
499
- if (typeof value === 'string') {
500
- const keysArr = leafMap.get(value) ?? []
501
- leafMap.set(value, keysArr)
502
- keysArr.push(keys)
503
- }
504
- return false
505
- })
506
-
507
- const configs: RollupOptions[] = []
508
- leafMap.forEach((keysArr, input) =>
509
- keysArr.forEach((keys) => {
510
- const [path, ...conditionals] = keys
511
-
512
- const name = packageName + (path === '.' ? '' : pascalCase(path))
513
- const keyExports = reveal(exports, keys)
514
- const commonOptions = {
515
- path,
516
- name,
517
- input,
518
- external,
519
- pkgIsModule
520
- }
521
-
522
- switch (typeof keyExports) {
523
- case 'string': {
524
- configs.push(...generateConfigs({
525
- ...commonOptions,
526
- output: keyExports,
527
- conditionals
528
- }, build))
529
- break
530
- }
531
- case 'object': {
532
- getAllLeafs(keyExports as RecursiveRecord<string>, ({ keys: nextKeys, value }) => {
533
- const allConditionals = [...new Set([...conditionals, ...nextKeys])]
534
- if (typeof value === 'string') {
535
- configs.push(...generateConfigs({
536
- ...commonOptions,
537
- output: value,
538
- conditionals: allConditionals
539
- }, build))
540
- }
541
- return false
542
- })
543
- break
544
- }
545
- }
546
- })
547
- )
548
- sendMessage(
549
- {
550
- type: 'init',
551
- data: {
552
- leafMap,
553
- targetsLength: configs.length
554
- }
555
- } satisfies RollupProgressEvent
556
- )
557
- return configs.map(c => ({
558
- ...COMMON_OPTIONS,
559
- ...c,
560
- plugins: [
561
- ...COMMON_PLUGINS,
562
- c.plugins
563
- ]
564
- }))
565
- }