This repository has been archived by the owner on Mar 3, 2024. It is now read-only.
/
rollup.config.mjs
88 lines (85 loc) · 2.89 KB
/
rollup.config.mjs
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
import fs from "node:fs";
import commonjs from "@rollup/plugin-commonjs";
import resolve from "@rollup/plugin-node-resolve";
import replace from "@rollup/plugin-replace";
import terser from "@rollup/plugin-terser";
import typescript from "@rollup/plugin-typescript";
import styles from "rollup-plugin-styles";
import svelte from "rollup-plugin-svelte";
import { visualizer } from "rollup-plugin-visualizer";
import sveltePreprocess from "svelte-preprocess";
import UserscriptHeader from "userscript-header";
const dev = process.env.NODE_ENV === "development"
|| process.env.npm_lifecycle_event?.startsWith("dev-");
const usHeader = UserscriptHeader.fromPackage("./package.json");
// create the meta file of the userscript
if (!fs.existsSync("packages")) {
fs.mkdirSync("packages");
}
fs.writeFile(
"packages/userscript.meta.js",
usHeader.toString(),
(err) => err && console.log(err),
);
export default {
input: "app/userscript/userscript.ts",
output: {
sourcemap: false,
format: "es",
name: "userscript",
file: "packages/userscript.user.js",
banner: `${usHeader}\n(async()=>{`,
footer: `})();`,
},
plugins: [
svelte({
preprocess: sveltePreprocess(),
compilerOptions: { dev },
onwarn (warning, handler) {
if (warning.code === "a11y-click-events-have-key-events") {
return;
}
handler(warning);
},
}),
replace({
"process.env.NODE_ENV": dev ? `"development"` : `"production"`,
preventAssignment: true,
}),
styles({
// at the document-start, the head may not exist yet
mode: ["inject", { singleTag: true, container: "html" }],
// attempts to minimize CSS by CSSNano or CSSO
// was allowing to save just a few KiB
}),
resolve({
browser: true,
dedupe: ["svelte"],
}),
commonjs(),
typescript(),
// If we're building for production (npm run build
// instead of npm run dev), minify
!dev && terser({
format: {
comments: function leaveMetaBlock (node, { value }) {
if (value.trim().startsWith("==UserScript==")
&& !("inmeta" in leaveMetaBlock)
) {
leaveMetaBlock.inmeta = true;
return true;
}
if (value.trim().startsWith("==/UserScript==") && leaveMetaBlock.inmeta) {
leaveMetaBlock.inmeta = false;
return true;
}
return leaveMetaBlock.inmeta;
},
},
}),
!dev && visualizer({
open: true,
template: "treemap",
}),
],
};