-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathvite.config.ts
More file actions
123 lines (109 loc) · 3.13 KB
/
vite.config.ts
File metadata and controls
123 lines (109 loc) · 3.13 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
115
116
117
118
119
120
121
122
123
/// <reference types="vitest" />
import path, { resolve } from "path";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ArcoResolver } from "unplugin-vue-components/resolvers";
import { visualizer } from "rollup-plugin-visualizer";
import { createRequire } from "module";
// Use createRequire instead of `import manifest from "./manifest.json"` to
// work around a Rolldown panic on nested member expressions of JSON imports.
const manifest = createRequire(import.meta.url)("./manifest.json");
const env = process.env;
const getCRXVersion = () => {
const crxVer = env.CRX_VER;
if (crxVer) {
let ver = crxVer;
if (ver.startsWith("v")) {
ver = ver.slice(1);
}
return ver.slice(0, 14);
}
return "0.0.0-dev";
};
// Workaround: Rolldown (Vite 8) panics on nested member expressions like
// `manifest.background.service_worker` during config transformation.
// Hoist `manifest.background` into a local variable to flatten the access.
const manifestBg = manifest.background;
function transformManifestForFirefox() {
manifestBg.scripts = [manifestBg.service_worker];
delete manifestBg.service_worker;
delete (manifest as any).version_name;
(manifest as any).browser_specific_settings = {
gecko: {
id: "proxyverse@byte.vet",
strict_min_version: "109.0",
},
};
}
type Transformer = {
manifest(): void;
};
const TRANSFORMER_CONFIG: Record<string, Transformer> = {
firefox: {
manifest: transformManifestForFirefox,
},
};
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
const transformer = TRANSFORMER_CONFIG[mode];
return {
plugins: [
vue(),
AutoImport({
resolvers: [ArcoResolver()],
}),
Components({
resolvers: [
ArcoResolver({
sideEffect: true,
}),
],
}),
{
name: "manifest",
generateBundle(_outputOption, bundle) {
const entry = Object.values(bundle).find(
(chunk) =>
chunk.type == "chunk" &&
chunk.isEntry &&
chunk.name == "background",
);
manifest.version = getCRXVersion().split("-", 1)[0];
manifest.version_name = getCRXVersion();
// avoid cache issues
manifestBg.service_worker = (entry as any).fileName;
transformer?.manifest();
this.emitFile({
type: "asset",
fileName: "manifest.json",
source: JSON.stringify(manifest, undefined, 2),
});
},
},
],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
build: {
sourcemap: true,
rollupOptions: {
input: {
index: resolve(__dirname, "index.html"),
popup: resolve(__dirname, "popup.html"),
background: "src/background.ts",
},
output: {},
plugins: [
visualizer({
filename: "stats.html",
open: true,
}),
],
},
},
};
});