-
Notifications
You must be signed in to change notification settings - Fork 59
/
rollup.config.mjs
77 lines (74 loc) · 2.13 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
import { nodeResolve } from "@rollup/plugin-node-resolve";
import terser from "@rollup/plugin-terser";
import json from "@rollup/plugin-json";
import typescript from "@rollup/plugin-typescript";
import manifest from "./build-scripts/rollup/manifest-plugin.mjs";
import postcss from "rollup-plugin-postcss";
import postcssUrl from "postcss-url";
import commonjs from "@rollup/plugin-commonjs";
import monaco from "rollup-plugin-monaco-editor";
import copy from "rollup-plugin-copy";
import fs from "fs-extra";
import path from "path";
const isProdBuild = process.env.NODE_ENV === "production";
/**
* @type { import("rollup").MergedRollupOptions }
*/
const config = {
input: "src/index.ts",
output: {
dir: "esphome_dashboard/static/js/esphome/",
format: "module",
entryFileNames: isProdBuild ? "[name]-[hash].js" : "[name].js",
chunkFileNames: isProdBuild ? "c.[hash].js" : "[name].js",
assetFileNames: isProdBuild ? "a.[hash].js" : "[name].js",
sourcemap: true,
},
preserveEntrySignatures: false,
plugins: [
typescript(),
postcss({
plugins: [
postcssUrl({
url: (asset) => {
if (!/\.ttf$/.test(asset.url)) return asset.url;
const distPath = path.join(process.cwd(), "esphome");
const distFontsPath = path.join(distPath, "fonts");
fs.ensureDirSync(distFontsPath);
const targetFontPath = path.join(
"esphome_dashboard/static/fonts/",
asset.pathname,
);
fs.copySync(asset.absolutePath, targetFontPath);
return "./static/fonts/" + asset.pathname;
},
}),
],
}),
copy({
targets: [
{ src: "schema/*.json", dest: "esphome_dashboard/static/schema" },
],
}),
monaco({
languages: ["yaml"],
sourcemap: false,
}),
nodeResolve({
browser: true,
preferBuiltins: false,
}),
commonjs(),
json(),
manifest(),
isProdBuild &&
terser({
ecma: 2019,
toplevel: true,
format: {
comments: false,
},
}),
].filter(Boolean),
};
export default config;