Files
mp-silma-ai-aide/vite.config.ts
T

73 lines
1.9 KiB
TypeScript

import { existsSync, readFileSync } from "node:fs";
import { resolve } from "node:path";
import { parse as parseDotenv } from "dotenv";
import { defineConfig, type Plugin } from "vite";
function loadExtensionEnv(mode: string): NodeJS.ProcessEnv {
const fileEnv: Record<string, string> = {};
for (const fileName of [".env", ".env.local", `.env.${mode}`, `.env.${mode}.local`]) {
const path = resolve(process.cwd(), fileName);
if (existsSync(path)) {
Object.assign(fileEnv, parseDotenv(readFileSync(path)));
}
}
return { ...fileEnv, ...process.env };
}
function getGiteaHostPermissions(baseUrl?: string): string[] {
if (!baseUrl?.trim()) {
return [];
}
try {
const url = new URL(baseUrl);
return [`${url.protocol}//${url.host}/*`];
} catch {
console.warn(`VITE_GITEA_BASE_URL is not a valid URL: ${baseUrl}`);
return [];
}
}
function chromeExtensionManifest(mode: string): Plugin {
return {
name: "chrome-extension-manifest",
generateBundle() {
const env = loadExtensionEnv(mode);
const manifest = {
manifest_version: 3,
name: "Silma AI Aide",
version: "0.1.0",
description: "A Vite-powered popup for Gitea-backed Silma AI aide workflows.",
action: {
default_title: "Silma AI Aide",
default_popup: "index.html"
},
permissions: ["storage"],
host_permissions: getGiteaHostPermissions(env.VITE_GITEA_BASE_URL)
};
this.emitFile({
type: "asset",
fileName: "manifest.json",
source: `${JSON.stringify(manifest, null, 2)}\n`
});
}
};
}
export default defineConfig(({ mode }) => ({
plugins: [chromeExtensionManifest(mode)],
build: {
outDir: "dist",
emptyOutDir: true,
rollupOptions: {
input: {
popup: resolve(__dirname, "index.html")
}
}
}
}));