-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy pathrollup.config.ts
More file actions
96 lines (89 loc) · 3.74 KB
/
Copy pathrollup.config.ts
File metadata and controls
96 lines (89 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import type { Plugin } from 'rollup';
import alias from '@rollup/plugin-alias';
import esbuild from 'rollup-plugin-esbuild';
import terser from '@rollup/plugin-terser';
import { dts } from 'rollup-plugin-dts';
import { globSync } from 'glob';
import { dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
const outputDir = (input: string) => input.replace(/^src/g, 'dist').replace(/\/[^/]*$/g, '');
const replacePath = (input: string) => input.replace(/(^src\/|\.ts$)/g, '');
const fixCjsDefaultInterop = (): Plugin => ({
name: 'fix-cjs-default-interop',
renderChunk: (code, _chunk, outputOptions) => {
if (outputOptions.format !== 'cjs') {
return null;
}
return {
code: `${code}Object.defineProperty(module.exports, 'default', { value: module.exports, enumerable: false });\n`,
map: null
};
}
});
const ts = () => {
const plugins = [
alias({ entries: [{ find: '@', replacement: resolve(dirname(fileURLToPath(import.meta.url)), 'src') }] }),
esbuild({ minify: false, target: 'es2021' }),
terser()
];
const defaultExportPlugins = [...plugins, fixCjsDefaultInterop()];
const config = (input: string | Record<string, string>, outputDir: string, entryPlugins = plugins) => ({
input,
output: [
{ dir: outputDir, format: 'es' },
{ dir: outputDir, format: 'cjs', entryFileNames: '[name].cjs' }
],
plugins: entryPlugins
});
return [
config('src/index.ts', 'dist'),
config('src/plugin.ts', 'dist'),
config('src/timezone.ts', 'dist'),
config(Object.fromEntries(globSync('src/numerals/**/*.ts').map(input => [replacePath(input), input])), 'dist', defaultExportPlugins),
globSync('src/locales/**/*.ts').map(input => config(input, outputDir(input), defaultExportPlugins)),
globSync('src/plugins/**/*.ts').map(input => config(input, outputDir(input))),
config(Object.fromEntries(globSync('src/timezones/**/*.ts').map(input => [replacePath(input), input])), 'dist', defaultExportPlugins)
].flat();
};
const types = () => {
const plugins = [
alias({ entries: [{ find: '@', replacement: resolve(dirname(fileURLToPath(import.meta.url)), 'src') }] }),
dts()
];
const cjsExportEquals = (): Plugin => ({
name: 'cjs-dts-export-equals',
renderChunk: (code) => code.replace(/export \{ (\w+) as default \};\n?$/, 'export = $1;\n')
});
const cjsPlugins = [...plugins, cjsExportEquals()];
const config = (input: string | Record<string, string>, outputDir: string) => ({
input,
output: { dir: outputDir },
plugins
});
const cjsConfig = (input: string | Record<string, string>, outputDir: string) => ({
input,
output: { dir: outputDir, entryFileNames: '[name].d.cts' },
plugins: cjsPlugins
});
return [
config('src/index.ts', 'dist'),
config('src/plugin.ts', 'dist'),
config('src/timezone.ts', 'dist'),
config(Object.fromEntries(globSync('src/numerals/**/*.ts').map(input => [replacePath(input), input])), 'dist'),
cjsConfig(Object.fromEntries(globSync('src/numerals/**/*.ts').map(input => [replacePath(input), input])), 'dist'),
globSync('src/locales/**/*.ts').map(input => config(input, outputDir(input))),
globSync('src/locales/**/*.ts').map(input => cjsConfig(input, outputDir(input))),
globSync('src/plugins/**/*.ts').map(input => config(input, outputDir(input))),
config(Object.fromEntries(globSync('src/timezones/**/*.ts').map(input => [replacePath(input), input])), 'dist'),
cjsConfig(Object.fromEntries(globSync('src/timezones/**/*.ts').map(input => [replacePath(input), input])), 'dist')
].flat();
};
export default (args: Record<string, string>) => {
if (args['config-ts']) {
return ts();
}
if (args['config-types']) {
return types();
}
return [...ts(), ...types()];
};