diff --git a/package-lock.json b/package-lock.json index 5f51dcd..5094df5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "typescript": "5.8.3", "vite": "6.3.5", "vite-plugin-checker": "0.9.3", + "vite-plugin-clean": "2.0.1", "vite-plugin-zip-pack": "1.2.4" }, "engines": { @@ -1125,6 +1126,42 @@ "dev": true, "license": "MIT" }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.44.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", @@ -1800,6 +1837,13 @@ "node": ">=6" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2849,6 +2893,17 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/vite-plugin-clean": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vite-plugin-clean/-/vite-plugin-clean-2.0.1.tgz", + "integrity": "sha512-I0pQDsY+VlqbKeR51v01fhujn+LSVnLS3a/6mcqVMCwuC5ZGBtR+wj3SxekaNpzsTwKfbkGbqoyHKn/CUEhg5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.4", + "vite": "^6.1.0" + } + }, "node_modules/vite-plugin-zip-pack": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/vite-plugin-zip-pack/-/vite-plugin-zip-pack-1.2.4.tgz", diff --git a/package.json b/package.json index 5969120..079725d 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "typescript": "5.8.3", "vite": "6.3.5", "vite-plugin-checker": "0.9.3", + "vite-plugin-clean": "2.0.1", "vite-plugin-zip-pack": "1.2.4" } } diff --git a/vite.config.ts b/vite.config.ts index 1b38d6a..2de9e05 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,7 @@ import react from "@vitejs/plugin-react"; import process from "node:process"; import zipPack from "vite-plugin-zip-pack"; import checker from 'vite-plugin-checker'; +import clean from 'vite-plugin-clean'; import vitePluginWextManifest from "./vite-plugin-wext-manifest"; @@ -15,6 +16,22 @@ export default defineConfig(({ mode }) => { const getOutDir = () => path.resolve(destPath, targetBrowser); + const getExtensionZipFileName = () => { + switch (targetBrowser) { + case 'opera': { + return `${targetBrowser}.crx`; + } + + case 'firefox': { + return `${targetBrowser}.xpi`; + } + + default: { + return `${targetBrowser}.zip`; + } + } + }; + return { root: sourcePath, @@ -35,12 +52,21 @@ export default defineConfig(({ mode }) => { plugins: [ react(), + // delete previous built compressed file + clean({ + targetFiles: [ + path.resolve(destPath, getExtensionZipFileName()) + ], + }), + + // Run typescript checker in worker thread checker({ typescript: { tsconfigPath: './tsconfig.json' }, }), + // Generate manifest.json for the browser vitePluginWextManifest({ manifestPath: "manifest.json", usePackageJSONVersion: true, @@ -48,9 +74,10 @@ export default defineConfig(({ mode }) => { !isDevelopment && zipPack({ - outDir: destPath, - outFileName: `${targetBrowser}.zip`, inDir: getOutDir(), + outDir: destPath, + outFileName: getExtensionZipFileName(), + enableLogging: true, }), ],