import fs from 'fs-extra' import type { Manifest } from 'webextension-polyfill' import type PkgType from '../package.json' import { isDev, port, r } from '../scripts/utils' export async function getManifest() { const pkg = await fs.readJSON(r('package.json')) as typeof PkgType // update this file to update this manifest.json // can also be conditional based on your need const manifest: Manifest.WebExtensionManifest = { manifest_version: 3, name: pkg.displayName || pkg.name, version: pkg.version, description: pkg.description, action: { default_icon: './assets/icon-512.png', default_popup: './dist/popup/index.html', }, options_ui: { page: './dist/options/index.html', open_in_tab: true, }, background: { service_worker: './dist/background/index.mjs', }, icons: { 16: './assets/icon-512.png', 48: './assets/icon-512.png', 128: './assets/icon-512.png', }, permissions: [ 'tabs', 'storage', 'activeTab', ], host_permissions: ['*://*/*'], content_scripts: [ { matches: [ '', ], js: [ 'dist/contentScripts/index.global.js', ], }, ], web_accessible_resources: [ { resources: ['dist/contentScripts/style.css'], matches: [''], }, ], content_security_policy: { extension_pages: isDev // this is required on dev for Vite script to load ? `script-src \'self\' http://localhost:${port}; object-src \'self\'` : 'script-src \'self\'; object-src \'self\'', }, } // FIXME: not work in MV3 if (isDev && false) { // for content script, as browsers will cache them for each reload, // we use a background script to always inject the latest version // see src/background/contentScriptHMR.ts delete manifest.content_scripts manifest.permissions?.push('webNavigation') } return manifest }