This repository has been archived by the owner on May 4, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rollup.config.js
117 lines (114 loc) · 2.42 KB
/
rollup.config.js
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
const path = require("path");
const { babel } = require("@rollup/plugin-babel");
const json = require("@rollup/plugin-json");
const commonjs = require("@rollup/plugin-commonjs");
const typescript = require("@rollup/plugin-typescript");
const createBanner = ({ name, version, author, repository, license }) => `/*!
* Copyright (c) Dekk
* @author ${typeof author === "object" ? author.name : author}
* @license ${license}
* @name ${name}
* @version ${version}
*${
repository
? ` @see ${typeof repository === "object" ? repository.url : repository}\n */`
: "/"
}`;
const commonPlugins = [
commonjs(),
json(),
babel({
babelHelpers: "runtime",
extensions: [".ts", ".tsx"],
}),
];
module.exports = () => {
const cwd = process.cwd();
const pkg = require(path.resolve(cwd, "package.json"));
const packageExports = pkg.exports
? Object.keys(pkg.exports)
.filter(key => key !== ".")
.map(key => key.replace(/^\.\//, ""))
: [];
const tsconfig = path.resolve(cwd, "tsconfig.json");
const external = [
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.dependencies || {}).map(key => new RegExp(`${key}/.*`)),
...Object.keys(pkg.peerDependencies || {}),
...Object.keys(pkg.peerDependencies || {}).map(key => new RegExp(`${key}/.*`)),
"path",
"fs",
];
return [
{
input: `src/index.ts`,
external,
output: [
{
banner: createBanner(pkg),
file: `dist/index.js`,
format: "cjs",
},
],
plugins: [
...commonPlugins,
typescript({
tsconfig,
}),
],
},
{
input: `src/index.ts`,
external,
output: [
{
banner: createBanner(pkg),
file: `dist/esm/index.js`,
format: "esm",
},
],
plugins: [
...commonPlugins,
typescript({
tsconfig,
declaration: false,
}),
],
},
...packageExports.map(packageExport => ({
input: `src/${packageExport}.ts`,
external,
output: [
{
banner: createBanner(pkg),
file: `dist/${packageExport}.js`,
format: "cjs",
},
],
plugins: [
...commonPlugins,
typescript({
tsconfig,
}),
],
})),
...packageExports.map(packageExport => ({
input: `src/${packageExport}.ts`,
external,
output: [
{
banner: createBanner(pkg),
file: `dist/esm/${packageExport}.js`,
format: "esm",
},
],
plugins: [
...commonPlugins,
typescript({
tsconfig,
declaration: false,
}),
],
})),
];
};