-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrollup.config.js
68 lines (65 loc) · 2.13 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
import sourcemaps from "rollup-plugin-sourcemaps";
import commonjs from "rollup-plugin-commonjs";
import ts from "@wessberg/rollup-plugin-ts";
import paths from "rollup-plugin-ts-paths";
import apiExtractor from "@rocketbase/rollup-plugin-api-extractor";
import execute from "@rocketbase/rollup-plugin-exec";
import sequential from "@rocketbase/rollup-plugin-sequential";
import nodeResolve from "rollup-plugin-node-resolve";
import { keys, mapValues, upperFirst, camelCase, template } from "lodash";
import pkg from "./package.json";
import { basename } from "path";
const { main, dependencies, module, unpkg, types } = pkg;
const formatModule = name => upperFirst(camelCase(name.indexOf("@") !== -1 ? name.split("/")[1] : name));
const yearRange = date => (new Date().getFullYear() === +date ? date : `${date} - ${new Date().getFullYear()}`);
const year = yearRange(pkg.since || new Date().getFullYear());
const external = keys(dependencies || {});
const globals = mapValues(dependencies || {}, (value, key) => formatModule(key));
const name = formatModule(pkg.name);
const banner = template(`
/**
* <%= nameFormatted %> (<%= name %> v<%= version %>)
* <%= description %>
* <%= homepage %>
* (c) <%= year %> <%= author %>
* @license <%= license || "MIT" %>
*/
`)({ ...pkg, nameFormatted: name, year }).trim();
const outputs = [
{ format: "cjs", file: main },
{ format: "umd", file: unpkg },
{ format: "esm", file: module }
];
export default {
input: "src/main.ts",
output: outputs.map(({ format, file }) => ({
exports: "named",
sourceMap: true,
file,
format,
globals,
name,
banner
})),
external,
plugins: [
sourcemaps(),
paths(),
commonjs(),
nodeResolve(),
ts({ tsconfig: "tsconfig.build.json" }),
sequential(
[
apiExtractor({
config: "build/api-extractor.json",
override: { name: basename(unpkg, ".js"), types },
cleanup: false
}),
execute(["api-documenter markdown --output-folder docs --input-folder dist", "rimraf temp api-extractor.json dist/*.*.d.ts"], {
stdio: "ignore"
})
],
{ once: true }
)
]
};