import fs from 'node:fs'; import fsp from 'node:fs/promises'; import path from 'node:path'; import process from 'node:process'; import url from 'node:url'; import {defineConfig} from 'vite'; // Vite Plugins import preactPreset from '@preact/preset-vite'; import webExtension from 'vite-plugin-web-extension'; const currentDir = path.dirname(url.fileURLToPath(import.meta.url)); const sourceDir = path.join(currentDir, 'source'); const queueVersion = '0.2.4'; const targetBrowser = process.env.VITE_BROWSER ?? 'firefox'; process.env.VITE_BROWSER = targetBrowser; let webExtConfig; if (targetBrowser === 'chromium') { fs.mkdirSync(path.join(currentDir, 'chromium'), {recursive: true}); webExtConfig = { browserConsole: true, chromiumProfile: 'chromium/', keepProfileChanges: true, startUrl: 'chrome://extensions/', target: 'chromium', }; } else { fs.mkdirSync(path.join(currentDir, 'firefox'), {recursive: true}); webExtConfig = { browserConsole: true, firefoxProfile: 'firefox/', keepProfileChanges: true, startUrl: 'about:debugging#/runtime/this-firefox', target: 'firefox-desktop', }; } const buildDir = path.join(currentDir, 'build', targetBrowser); export default defineConfig({ build: { minify: true, outDir: buildDir, sourcemap: 'inline', }, plugins: [ preactPreset(), // See vite-plugin-web-extension for documentation. // https://github.com/aklinker1/vite-plugin-web-extension webExtension({ assets: 'assets', browser: targetBrowser, async manifest() { const manifest = JSON.parse( await fsp.readFile( path.join(sourceDir, `${targetBrowser}-manifest.json`), // eslint-disable-next-line unicorn/prefer-json-parse-buffer 'utf-8', ), ) as Record; manifest.version = queueVersion; return manifest; }, webExtConfig, }), ], root: sourceDir, });