voice-over-translation/vite/vite.config.ts
Toil 2c61a877a1
Some checks are pending
Build / node (22.x) (push) Waiting to run
Build / extension (22.x) (push) Waiting to run
Build / bun (push) Waiting to run
Release / Build Release (push) Waiting to run
Release / create_release (push) Blocked by required conditions
build: improved DX with autobuild using bun
2026-08-03 00:17:41 +03:00

103 lines
2.7 KiB
TypeScript

import path from "node:path";
import { defineConfig, type UserConfig } from "vite";
import { buildDefine } from "./lib/env";
import { distDir, singleFileBuildOptions, srcDir } from "./lib/paths";
import {
collectUsedUserscriptGrantsFromEntry,
getHeaders,
mergeUserscriptGrants,
type UserscriptHeader,
} from "./lib/userscript/grants";
import { formatUserscriptHeader } from "./lib/userscript/headers";
import {
getAvailableLocales,
getLocaleHeaderEntriesAsync,
} from "./lib/userscript/locales";
import { createBaseViteConfig } from "./lib/vite-base-config";
const USERSCRIPT_ENTRY = path.resolve(srcDir, "index.ts");
const USERSCRIPT_GLOBAL_NAME = "vot";
type UserscriptBranch = "dev" | "master";
function isDebugBuild(command: string, mode: string): boolean {
return command === "serve" || mode === "development";
}
function getUserscriptBranches({
debug,
version,
}: {
debug: boolean;
version: string;
}): {
repoBranch: UserscriptBranch;
repoUpdateBranch: UserscriptBranch;
} {
const isBeta = version.includes("beta");
return {
repoBranch: debug || isBeta ? "dev" : "master",
repoUpdateBranch: isBeta ? "dev" : "master",
};
}
export default defineConfig(async ({ command, mode }) => {
const baseConfig = createBaseViteConfig({ cacheName: "userscript" });
const debug = isDebugBuild(command, mode);
const minified = mode === "minify";
const headers = getHeaders<UserscriptHeader>();
const version = String(headers.version || "");
const authors = String(headers.author || "");
const filename = minified ? "vot-min" : "vot";
const { repoBranch, repoUpdateBranch } = getUserscriptBranches({
debug,
version,
});
const [availableLocales, localeEntries, detectedGrants] = await Promise.all([
getAvailableLocales(),
getLocaleHeaderEntriesAsync(),
collectUsedUserscriptGrantsFromEntry(USERSCRIPT_ENTRY),
]);
const banner = formatUserscriptHeader({
filename,
repoBranch,
repoUpdateBranch,
localeEntries,
grants: mergeUserscriptGrants(detectedGrants, headers.grant),
});
return {
...baseConfig,
define: buildDefine({
debug,
isExtension: false,
availableLocales,
repoBranch,
version,
authors,
crxjsBuild: false,
}),
build: {
...baseConfig.build,
...singleFileBuildOptions,
outDir: distDir,
emptyOutDir: false,
sourcemap: debug,
minify: minified ? "oxc" : false,
lib: {
entry: USERSCRIPT_ENTRY,
name: USERSCRIPT_GLOBAL_NAME,
formats: ["iife"],
fileName: () => `${filename}.user.js`,
},
rolldownOptions: {
output: {
postBanner: banner,
},
},
},
} satisfies UserConfig;
});