import { resolve } from 'path' import { readFileSync } from 'fs' import { defineConfig } from 'vite' import preact from '@preact/preset-vite' import { VitePWA } from 'vite-plugin-pwa' import replace from '@rollup/plugin-replace' function getGitRevision() { try { const rev = readFileSync('.git/HEAD').toString().trim(); if (rev.indexOf(':') === -1) { return rev; } else { return readFileSync('.git/' + rev.substring(5)).toString().trim(); } } catch (err) { console.error('Failed to get Git revision.'); return '?'; } } function getGitBranch() { try { const rev = readFileSync('.git/HEAD').toString().trim(); if (rev.indexOf(':') === -1) { return 'DETACHED'; } else { return rev.split('/').pop(); } } catch (err) { console.error('Failed to get Git branch.'); return '?'; } } function getVersion() { return readFileSync('VERSION').toString(); } const branch = getGitBranch(); const isNightly = branch !== 'production'; const iconPrefix = isNightly ? 'nightly-' : ''; export default defineConfig({ plugins: [ preact(), VitePWA({ srcDir: 'src', filename: 'sw.ts', strategies: 'injectManifest', manifest: { name: isNightly ? "REVOLT nightly" : "REVOLT", short_name: "REVOLT", description: isNightly ? "Early preview builds of REVOLT." : "User-first, privacy-focused chat platform.", categories: ["messaging"], start_url: "/", display: "standalone", orientation: "portrait", background_color: "#101823", icons: [ { "src": `/assets/icons/${iconPrefix}android-chrome-192x192.png`, "type": "image/png", "sizes": "192x192" }, { "src": `/assets/icons/${iconPrefix}android-chrome-512x512.png`, "type": "image/png", "sizes": "512x512" } ] } }), replace({ __GIT_REVISION__: getGitRevision(), __GIT_BRANCH__: getGitBranch(), __APP_VERSION__: getVersion(), preventAssignment: true }) ], build: { sourcemap: true, rollupOptions: { input: { main: resolve(__dirname, 'index.html'), ui: resolve(__dirname, 'ui/index.html') } } } })