import fs from 'fs'; import { resolve } from 'path'; import type { PluginOption } from 'vite'; // plugin to remove dev icons from prod build export function stripDevIcons (isDev: boolean) { if (isDev) return null return { name: 'strip-dev-icons', resolveId (source: string) { return source === 'virtual-module' ? source : null }, renderStart (outputOptions: any, inputOptions: any) { const outDir = outputOptions.dir fs.rm(resolve(outDir, 'dev-icon-32.png'), () => console.log(`Deleted dev-icon-32.png from prod build`)) fs.rm(resolve(outDir, 'dev-icon-128.png'), () => console.log(`Deleted dev-icon-128.png from prod build`)) } } } // plugin to support i18n export function crxI18n (options: { localize: boolean, src: string }): PluginOption { if (!options.localize) return null const getJsonFiles = (dir: string): Array => { const files = fs.readdirSync(dir, {recursive: true}) as string[] return files.filter(file => !!file && file.endsWith('.json')) } const entry = resolve(__dirname, options.src) const localeFiles = getJsonFiles(entry) const files = localeFiles.map(file => { return { id: '', fileName: file, source: fs.readFileSync(resolve(entry, file)) } }) return { name: 'crx-i18n', enforce: 'pre', buildStart: { order: 'post', handler() { files.forEach((file) => { const refId = this.emitFile({ type: 'asset', source: file.source, fileName: '_locales/'+file.fileName }) file.id = refId }) } } } }