From cdfa6723efc2edea298d38967d7e1c2f96814b2f Mon Sep 17 00:00:00 2001 From: sethburkart123 Date: Sun, 20 Oct 2024 11:24:30 +1100 Subject: [PATCH] fix: add patchPackage to fix Chrome 130+ compatability --- lib/patchPackage.ts | 65 +++++++++++++++++++++++++++++++++++++++++++++ vite.config.ts | 4 ++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 lib/patchPackage.ts diff --git a/lib/patchPackage.ts b/lib/patchPackage.ts new file mode 100644 index 00000000..ab59850b --- /dev/null +++ b/lib/patchPackage.ts @@ -0,0 +1,65 @@ +/* + TEMPORARY FIX FOR CHROME 130+ builds +*/ + +import path from 'node:path'; +import fs from 'fs'; +import { PluginOption } from 'vite'; +import { ManifestV3Export } from '@crxjs/vite-plugin'; + +const manifestPath = path.resolve('dist/chrome/manifest.json'); + +export function updateManifestPlugin(): PluginOption { + return { + name: 'update-manifest-plugin', + enforce: 'post', + closeBundle() { + forceDisableUseDynamicUrl(); + }, + + configureServer(server) { + server.httpServer?.once('listening', () => { + const updated = forceDisableUseDynamicUrl(); + if (updated) { + server.ws.send({ type: 'full-reload' }); + console.log('** updated **'); + } + + fs.watchFile(manifestPath, () => { + console.log('** watchFile ** '); + const manifestContents = JSON.parse(fs.readFileSync(manifestPath, 'utf8')); + if (manifestContents.web_accessible_resources.some((resource: any) => resource.use_dynamic_url)) { + const updated = forceDisableUseDynamicUrl(); + if (updated) { + server.ws.send({ type: 'full-reload' }); + console.log('** updated **'); + } + } + }); + }); + }, + + writeBundle() { + console.log('### writeBundle ##'); + forceDisableUseDynamicUrl(); + }, + }; +} + +function forceDisableUseDynamicUrl() { + if (!fs.existsSync(manifestPath)) { + return false; + } + + const manifestContents = JSON.parse(fs.readFileSync(manifestPath, 'utf8')) as Awaited; + + if (typeof manifestContents === 'function' || !manifestContents.web_accessible_resources) return false; + if (manifestContents.web_accessible_resources.every((resource) => !resource.use_dynamic_url)) return false; + + manifestContents.web_accessible_resources.forEach((resource) => { + if (resource.use_dynamic_url) resource.use_dynamic_url = false; + }); + + fs.writeFileSync(manifestPath, JSON.stringify(manifestContents, null, 2)); + return true; +} diff --git a/vite.config.ts b/vite.config.ts index d31518f5..535c56e4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from 'vite'; import { join, resolve } from 'path'; +import { updateManifestPlugin } from './lib/patchPackage'; import { base64Loader } from './lib/base64loader'; import type { BuildTarget } from './lib/types'; @@ -31,7 +32,8 @@ export default defineConfig({ crx({ manifest: targets.find(t => t.browser === mode.toLowerCase())?.manifest ?? chrome.manifest, browser: mode.toLowerCase() === "firefox" ? "firefox" : "chrome" - }) + }), + updateManifestPlugin() ], root: resolve(__dirname, './src'), resolve: {