Skip to content
Snippets Groups Projects
vite.config.ts 2.29 KiB
Newer Older
insert's avatar
insert committed
import { resolve } from 'path'
insert's avatar
insert committed
import { readFileSync } from 'fs'
insert's avatar
insert committed
import { defineConfig } from 'vite'
import preact from '@preact/preset-vite'
insert's avatar
insert committed
import { VitePWA } from 'vite-plugin-pwa'
insert's avatar
insert committed
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 '?';
  }
}
insert's avatar
insert committed

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 '?';
  }
}

insert's avatar
insert committed
function getVersion() {
  return readFileSync('VERSION').toString();
}

const branch = getGitBranch();
const isNightly = branch !== 'production';
const iconPrefix = isNightly ? 'nightly-' : '';

insert's avatar
insert committed
export default defineConfig({
insert's avatar
insert committed
  plugins: [
    preact(),
    VitePWA({
insert's avatar
insert committed
      srcDir: 'src',
      filename: 'sw.ts',
      strategies: 'injectManifest',
insert's avatar
insert committed
      manifest: {
        name: isNightly ? "REVOLT nightly" : "REVOLT",
insert's avatar
insert committed
        short_name: "REVOLT",
        description: isNightly ? "Early preview builds of REVOLT." : "User-first, privacy-focused chat platform.",
insert's avatar
insert committed
        categories: ["messaging"],
        start_url: "/",
        display: "standalone",
        orientation: "portrait",
        background_color: "#101823",
        icons: [
            {
                "src": `/assets/icons/${iconPrefix}android-chrome-192x192.png`,
insert's avatar
insert committed
                "type": "image/png",
                "sizes": "192x192"
            },
            {
                "src": `/assets/icons/${iconPrefix}android-chrome-512x512.png`,
insert's avatar
insert committed
                "type": "image/png",
                "sizes": "512x512"
            }
        ]
insert's avatar
insert committed
      }
insert's avatar
insert committed
    }),
    replace({
      __GIT_REVISION__: getGitRevision(),
      __GIT_BRANCH__: getGitBranch(),
insert's avatar
insert committed
      __APP_VERSION__: getVersion(),
insert's avatar
insert committed
      preventAssignment: true
insert's avatar
insert committed
    })
  ],
insert's avatar
insert committed
  build: {
insert's avatar
insert committed
    sourcemap: true,
insert's avatar
insert committed
    rollupOptions: {
      input: {
        main: resolve(__dirname, 'index.html'),
        ui: resolve(__dirname, 'ui/index.html')
      }
    }
  }
insert's avatar
insert committed
})