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
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
/**
|
|
* Chrome Browser API Implementation
|
|
*
|
|
* Mapuje Chrome chrome.* API na nasze ujednolicone BrowserAPI
|
|
*/
|
|
|
|
import type { BrowserAPI } from './types';
|
|
|
|
// Chrome używa globalnego obiektu `chrome`
|
|
declare const chrome: any;
|
|
|
|
export const chromeAPI: BrowserAPI = {
|
|
// Tabs API - chrome.tabs.* → tabs.*
|
|
tabs: {
|
|
query: chrome.tabs.query,
|
|
onUpdated: {
|
|
addListener: chrome.tabs.onUpdated.addListener,
|
|
removeListener: chrome.tabs.onUpdated.removeListener,
|
|
},
|
|
},
|
|
|
|
// Badge API - Chrome używa action (nie browserAction)
|
|
badge: {
|
|
setBadgeText: chrome.action.setBadgeText,
|
|
setTitle: chrome.action.setTitle,
|
|
setBadgeBackgroundColor: chrome.action.setBadgeBackgroundColor,
|
|
},
|
|
|
|
// WebRequest API - chrome.webRequest.* → webRequest.*
|
|
webRequest: {
|
|
onBeforeRequest: {
|
|
addListener: chrome.webRequest.onBeforeRequest.addListener,
|
|
},
|
|
onBeforeSendHeaders: {
|
|
addListener: chrome.webRequest.onBeforeSendHeaders.addListener,
|
|
},
|
|
},
|
|
|
|
// Cookies API - chrome.cookies.* → cookies.*
|
|
cookies: {
|
|
getAll: chrome.cookies.getAll,
|
|
remove: chrome.cookies.remove,
|
|
},
|
|
|
|
// Extension API - chrome.extension.* → extension.*
|
|
extension: {
|
|
getBackgroundPage: chrome.extension.getBackgroundPage,
|
|
},
|
|
|
|
// Windows API - chrome.windows.* → windows.*
|
|
windows: {
|
|
WINDOW_ID_CURRENT: chrome.windows.WINDOW_ID_CURRENT,
|
|
},
|
|
}; |