import { resolve } from 'node:path'; import { defineConfig, type PluginOption } from "vite"; import libAssetsPlugin from '@laynezh/vite-plugin-lib-assets'; import makeManifestPlugin from './utils/plugins/make-manifest-plugin'; import { watchPublicPlugin, watchRebuildPlugin } from '@extension/hmr'; import { isDev, isProduction, watchOption } from '@extension/vite-config'; const rootDir = resolve(__dirname); const srcDir = resolve(rootDir, 'src'); const outDir = resolve(rootDir, '..', 'dist'); export default defineConfig({ resolve: { alias: { '@root': rootDir, '@src': srcDir, '@assets': resolve(srcDir, 'assets'), }, conditions: ['browser', 'module', 'import', 'default'], mainFields: ['browser', 'module', 'main'] }, server: { // Restrict CORS to only allow localhost cors: { origin: ['http://localhost:5173', 'http://localhost:3000'], methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], credentials: true }, host: 'localhost', }, plugins: [ libAssetsPlugin({ outputPath: outDir, }) as PluginOption, watchPublicPlugin(), makeManifestPlugin({ outDir }), isDev && watchRebuildPlugin({ reload: true, id: 'chrome-extension-hmr' }), ], publicDir: resolve(rootDir, 'public'), build: { lib: { formats: ['iife'], entry: resolve(__dirname, 'src/background/index.ts'), name: 'BackgroundScript', fileName: 'background', }, outDir, emptyOutDir: false, sourcemap: isDev, minify: isProduction, reportCompressedSize: isProduction, watch: watchOption, rollupOptions: { external: [ 'chrome', // 'chromium-bidi/lib/cjs/bidiMapper/BidiMapper.js' ], }, }, envDir: '../', });