/* eslint-disable @typescript-eslint/naming-convention */ import {type Manifest} from "webextension-polyfill"; /** * Creates the WebExtension manifest based on the browser target. * * @param browser The browser target ("firefox" or "chromium"). * @returns The WebExtension manifest. */ export function createManifest(browser: string): Manifest.WebExtensionManifest { const manifest: Manifest.WebExtensionManifest = { manifest_version: Number.NaN, name: "Queue", version: "0.3.2", permissions: ["contextMenus", "storage"], options_ui: { page: "options/index.html", open_in_tab: true, }, }; const icons: Manifest.IconPath = { 128: "queue.png", }; const action: Manifest.ActionManifest = { default_icon: icons, }; const backgroundScript = "background/setup.js"; if (browser === "firefox") { manifest.manifest_version = 2; manifest.background = { scripts: [backgroundScript], }; manifest.browser_action = action; manifest.browser_specific_settings = { gecko: { id: "{c3560e6b-00e5-4ab3-b89e-8a54ee5b2c9f}", strict_min_version: "102.0", }, }; } else if (browser === "chromium") { manifest.manifest_version = 3; manifest.action = action; manifest.background = { service_worker: backgroundScript, type: "module", }; } else { throw new Error(`Unknown target browser: ${browser}`); } if (Number.isNaN(manifest.manifest_version)) { throw new TypeError("Manifest version is NaN"); } return manifest; }