rentgen/lib/browser-api/firefox.ts
am0 e1d9b8c874 feat(lib/browser-api): dodaj warstwę abstrakcji Browser API dla wsparcia Chrome i Firefox
Wprowadza infrastrukturę umożliwiającą budowanie rozszerzenia dla Chrome i Firefox z jednej bazy kodu. Mapuje różnice w API między przeglądarkami na ujednolicone interfejsy.

ZMIANY:
* lib/browser-api/types.ts - typy oparte na analizie rzeczywistego użycia API w kodzie
* lib/browser-api/firefox.ts - adapter mapujący browser.* na BrowserAPI
* lib/browser-api/chrome.ts - adapter mapujący chrome.* na BrowserAPI
* lib/browser-api/index.ts - build-time selection adaptera na podstawie TARGET

KLUCZOWE RÓŻNICE OBSŁUŻONE:
- Firefox: browser.browserAction.* vs Chrome: chrome.action.*
- Firefox: browser.tabs.* vs Chrome: chrome.tabs.*
- Firefox: browser.cookies.* vs Chrome: chrome.cookies.*
- Firefox: browser.webRequest.* vs Chrome: chrome.webRequest.*

TYPY OPARTE NA FAKTYCZNYM UŻYCIU:
Przeanalizowano 4 pliki używające browser API:
- memory.ts: badge, webRequest, cookies, extension API
- toolbar.tsx: tabs.query, tabs.onUpdated, windows.WINDOW_ID_CURRENT
- tab-dropdown.tsx: tabs.query
- util.ts: tabs.query

STATUS: Preparatory change - istniejący kod pozostaje niezmieniony.
Kolejne commity będą refaktorować pliki do używania nowej abstrakcji.

TARGET: Umożliwienie
> rentgen@0.1.10 build:firefox
> TARGET=firefox node esbuild.config.js

Add-on was built i
> rentgen@0.1.10 build:chrome
> TARGET=chrome node esbuild.config.js

Add-on was built
2025-09-08 10:50:09 +02:00

54 lines
1.5 KiB
TypeScript

/**
* Firefox Browser API Implementation
*
* Mapuje Firefox browser.* API na nasze ujednolicone BrowserAPI
*/
import type { BrowserAPI } from './types';
// Firefox używa globalnego obiektu `browser`
declare const browser: any;
export const firefoxAPI: BrowserAPI = {
// Tabs API - direct mapping
tabs: {
query: browser.tabs.query,
onUpdated: {
addListener: browser.tabs.onUpdated.addListener,
removeListener: browser.tabs.onUpdated.removeListener,
},
},
// Badge API - Firefox używa browserAction
badge: {
setBadgeText: browser.browserAction.setBadgeText,
setTitle: browser.browserAction.setTitle,
setBadgeBackgroundColor: browser.browserAction.setBadgeBackgroundColor,
},
// WebRequest API - direct mapping
webRequest: {
onBeforeRequest: {
addListener: browser.webRequest.onBeforeRequest.addListener,
},
onBeforeSendHeaders: {
addListener: browser.webRequest.onBeforeSendHeaders.addListener,
},
},
// Cookies API - direct mapping
cookies: {
getAll: browser.cookies.getAll,
remove: browser.cookies.remove,
},
// Extension API - direct mapping
extension: {
getBackgroundPage: browser.extension.getBackgroundPage,
},
// Windows API - direct mapping
windows: {
WINDOW_ID_CURRENT: browser.windows.WINDOW_ID_CURRENT,
},
};