-
Notifications
You must be signed in to change notification settings - Fork 5
/
rollup.config.ts
117 lines (102 loc) · 2.46 KB
/
rollup.config.ts
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import rollupPluginTerser from '@rollup/plugin-terser';
import rollupPluginGzip from 'rollup-plugin-gzip';
import rollupPluginTypescript from 'rollup-plugin-ts';
import type {RollupOptions} from 'rollup';
import p from './package.json' with {type: 'json'};
const pkg = p as typeof p & {
dependencies?: Record<string, string>;
peerDependencies?: Record<string, string>;
};
const externalDependencies = [
...Object.keys(pkg.dependencies ?? {}),
...Object.keys(pkg.peerDependencies ?? {})
];
const common = {
input: 'src/index.ts',
output: {
sourcemap: false
},
external: (source) => {
if (
source.startsWith('node:') ||
externalDependencies.some((dep) => source.startsWith(dep))
) {
return true;
}
return undefined;
},
treeshake: {
annotations: true,
moduleSideEffects: [],
propertyReadSideEffects: false,
unknownGlobalSideEffects: false
}
} satisfies Partial<RollupOptions>;
const copyright = `/*!
* ${pkg.name} v${pkg.version}
* Copyright ${new Date().getFullYear()} ${pkg.author.name}
* Released under the ${pkg.license} License
* ${pkg.homepage}
*/
`;
/**
* The node build.
*/
const node = {
...common,
output: [
{
...common.output,
file: pkg.main,
format: 'cjs'
},
{
...common.output,
file: pkg.module,
format: 'esm'
}
],
plugins: [
rollupPluginTypescript({
transpileOnly: true,
tsconfig: 'tsconfig.build.json'
})
]
} satisfies RollupOptions;
/**
* The web build.
*/
const web = {
...common,
output: [
{
...common.output,
sourcemap: true,
file: pkg.exports['web'].default,
format: 'iife',
name: 'iterOps',
banner: copyright
},
{
...common.output,
sourcemap: true,
file: pkg.exports['web'].import,
format: 'esm',
name: 'iterOps',
banner: copyright
}
],
plugins: [
rollupPluginTypescript({
transpileOnly: true,
tsconfig: 'tsconfig.build.web.json'
}),
rollupPluginTerser({
format: {
comments: 'some'
}
}),
rollupPluginGzip()
]
} satisfies RollupOptions;
export default [node, web];