-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrollup.config.js
More file actions
114 lines (106 loc) · 2.75 KB
/
Copy pathrollup.config.js
File metadata and controls
114 lines (106 loc) · 2.75 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import commonjs from "@rollup/plugin-commonjs";
import resolve from "@rollup/plugin-node-resolve";
import typescript from "@rollup/plugin-typescript";
import dts from "rollup-plugin-dts";
import { globSync } from "glob";
import path from "path";
import { nodeExternals } from "rollup-plugin-node-externals";
const EXTENSIONS = [".js", ".ts"];
const environmentConfig = {
nodeOnly: ["logger"],
browserOnly: [],
};
const getAllSourceModules = () => {
return globSync(["src/*/index.ts", "src/*/*/index.ts"]).map((module) =>
path.posix.normalize(module).replace(/\\/g, "/"),
);
};
const getModulesForEnvironment = (environment = "node") => {
const allModules = getAllSourceModules();
return allModules.filter((module) => {
const modulePath = module.replace("src/", "").replace("/index.ts", "");
const topLevelModule = modulePath.split("/")[0];
const isNodeOnly = environmentConfig.nodeOnly.includes(topLevelModule);
const isBrowserOnly =
environmentConfig.browserOnly.includes(topLevelModule);
switch (environment) {
case "node":
return !isBrowserOnly;
case "browser":
return !isNodeOnly;
default:
return true;
}
});
};
const createTypescriptPlugin = () =>
typescript({
tsconfig: "./tsconfig.json",
declaration: false,
rootDir: "./",
outDir: undefined,
exclude: ["node_modules", "dist"],
});
const createModuleBuild = ({ input, environment, output }) => ({
input,
plugins: [
nodeExternals({
packagePath: "./package.json",
}),
resolve({
extensions: EXTENSIONS,
browser: environment === "browser",
preferBuiltins: environment === "node",
}),
commonjs(),
createTypescriptPlugin(),
],
output,
});
export default [
createModuleBuild({
input: ["build/node/index.ts", ...getModulesForEnvironment("node")],
environment: "node",
output: [
{
dir: "dist/cjs",
format: "cjs",
sourcemap: true,
preserveModules: true,
preserveModulesRoot: "src",
entryFileNames: "[name].cjs",
},
{
dir: "dist/esm",
format: "esm",
sourcemap: true,
preserveModules: true,
preserveModulesRoot: "src",
},
],
}),
createModuleBuild({
input: ["build/browser/index.ts", ...getModulesForEnvironment("browser")],
environment: "browser",
output: [
{
dir: "dist/browser",
format: "esm",
sourcemap: true,
preserveModules: true,
preserveModulesRoot: "src",
},
],
}),
{
input: ["index.ts", ...getAllSourceModules()],
plugins: [dts()],
output: [
{
dir: "dist/types",
preserveModules: true,
preserveModulesRoot: ".",
},
],
},
];