chore(package.json): początek dodawania abstrakcji w build-time #125
7
.gitignore
vendored
7
.gitignore
vendored
@ -5,3 +5,10 @@ sidebar.js
|
||||
lib/*
|
||||
/yarn-error.log
|
||||
/rentgen.zip
|
||||
|
||||
# Generated PNG icons (build artifacts)
|
||||
/assets/icons/*.png
|
||||
/assets/icon-addon-*.png
|
||||
|
||||
# Exception: do not ignore the `browser-api` directory inside `lib`
|
||||
!/lib/browser-api/
|
54
lib/browser-api/chrome.ts
Normal file
54
lib/browser-api/chrome.ts
Normal file
@ -0,0 +1,54 @@
|
||||
/**
|
||||
* 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,
|
||||
},
|
||||
};
|
54
lib/browser-api/firefox.ts
Normal file
54
lib/browser-api/firefox.ts
Normal file
@ -0,0 +1,54 @@
|
||||
/**
|
||||
* 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,
|
||||
},
|
||||
};
|
27
lib/browser-api/index.ts
Normal file
27
lib/browser-api/index.ts
Normal file
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Browser API Abstraction - Main Export
|
||||
*
|
||||
* Eksportuje właściwą implementację na podstawie TARGET build variable
|
||||
*/
|
||||
|
||||
import type { BrowserAPI } from './types';
|
||||
|
||||
// Build-time selection of browser API implementation
|
||||
let browserApi: BrowserAPI;
|
||||
|
||||
// TARGET jest ustawiane przez esbuild.config.js na podstawie npm script
|
||||
if (process.env.TARGET === 'chrome') {
|
||||
// Chrome build - używamy chrome adapter
|
||||
const { chromeAPI } = require('./chrome');
|
||||
browserApi = chromeAPI;
|
||||
} else {
|
||||
// Firefox build (default) - używamy firefox adapter
|
||||
const { firefoxAPI } = require('./firefox');
|
||||
browserApi = firefoxAPI;
|
||||
}
|
||||
|
||||
// Eksportuj jako default export
|
||||
export default browserApi;
|
||||
|
||||
// Re-export typów dla wygody
|
||||
export * from './types';
|
124
lib/browser-api/types.ts
Normal file
124
lib/browser-api/types.ts
Normal file
@ -0,0 +1,124 @@
|
||||
/**
|
||||
* Browser API Abstraction - Typy na podstawie faktycznego użycia w kodzie
|
||||
*
|
||||
* Przeanalizowane pliki:
|
||||
* - util.ts: tabs.query, Tab.id
|
||||
* - tab-dropdown.tsx: tabs.query, Tab.id, Tab.title
|
||||
* - toolbar.tsx: tabs.query, tabs.onUpdated, Tab.url, windows.WINDOW_ID_CURRENT
|
||||
* - memory.ts: browserAction.*, webRequest.*, cookies.*, extension.*
|
||||
*/
|
||||
|
||||
// === Tab API (util.ts, tab-dropdown.tsx, toolbar.tsx) ===
|
||||
export interface Tab {
|
||||
id?: number; // util.ts: tab.id, tab-dropdown.tsx: tab.id
|
||||
title?: string; // tab-dropdown.tsx: tab.title
|
||||
url?: string; // toolbar.tsx: tab.url
|
||||
}
|
||||
|
||||
export interface TabQuery {
|
||||
currentWindow?: boolean; // util.ts, tab-dropdown.tsx
|
||||
active?: boolean; // toolbar.tsx
|
||||
windowId?: number; // toolbar.tsx
|
||||
}
|
||||
|
||||
// === Badge/BrowserAction API (memory.ts) ===
|
||||
export interface BadgeTextDetails {
|
||||
text: string; // memory.ts: setBadgeText
|
||||
tabId?: number; // memory.ts: setBadgeText (optional)
|
||||
}
|
||||
|
||||
export interface BadgeTitleDetails {
|
||||
title: string; // memory.ts: setTitle
|
||||
tabId?: number; // memory.ts: setTitle (optional)
|
||||
}
|
||||
|
||||
export interface BadgeColorDetails {
|
||||
color: string; // memory.ts: setBadgeBackgroundColor
|
||||
}
|
||||
|
||||
// === WebRequest API (memory.ts) ===
|
||||
export interface RequestDetails {
|
||||
requestId: string; // memory.ts: request.requestId
|
||||
requestHeaders?: RequestHeader[]; // memory.ts: request.requestHeaders
|
||||
// Note: ExtendedRequest konstruktor używa więcej pól,
|
||||
// ale tu skupiamy się na tym co bezpośrednio używa browser API
|
||||
}
|
||||
|
||||
export interface RequestHeader {
|
||||
name: string;
|
||||
value?: string;
|
||||
}
|
||||
|
||||
export interface RequestFilter {
|
||||
urls: string[]; // memory.ts: { urls: ['<all_urls>'] }
|
||||
}
|
||||
|
||||
export type RequestListener = (details: RequestDetails) => void;
|
||||
|
||||
// === Cookies API (memory.ts) ===
|
||||
export interface Cookie {
|
||||
name: string; // memory.ts: cookie.name
|
||||
domain: string; // memory.ts: cookie.domain
|
||||
}
|
||||
|
||||
export interface CookieQuery {
|
||||
domain?: string; // memory.ts: { domain: shorthost }
|
||||
}
|
||||
|
||||
export interface CookieRemove {
|
||||
name: string; // memory.ts: { name: cookie.name, url: ... }
|
||||
url: string; // memory.ts: { url: `https://${cookie.domain}` }
|
||||
}
|
||||
|
||||
// === Main Browser API Interface ===
|
||||
export interface BrowserAPI {
|
||||
// Tabs API
|
||||
tabs: {
|
||||
query(queryInfo: TabQuery): Promise<Tab[]>;
|
||||
onUpdated: {
|
||||
addListener(listener: (tabId: number, changeInfo: any, tab: Tab) => void): void;
|
||||
removeListener(listener: (tabId: number, changeInfo: any, tab: Tab) => void): void;
|
||||
};
|
||||
};
|
||||
|
||||
// Badge API (Firefox: browserAction, Chrome: action)
|
||||
badge: {
|
||||
setBadgeText(details: BadgeTextDetails): void;
|
||||
setTitle(details: BadgeTitleDetails): void;
|
||||
setBadgeBackgroundColor(details: BadgeColorDetails): void;
|
||||
};
|
||||
|
||||
// WebRequest API
|
||||
webRequest: {
|
||||
onBeforeRequest: {
|
||||
addListener(
|
||||
listener: RequestListener,
|
||||
filter: RequestFilter,
|
||||
extraInfoSpec?: string[]
|
||||
): void;
|
||||
};
|
||||
onBeforeSendHeaders: {
|
||||
addListener(
|
||||
listener: RequestListener,
|
||||
filter: RequestFilter,
|
||||
extraInfoSpec?: string[]
|
||||
): void;
|
||||
};
|
||||
};
|
||||
|
||||
// Cookies API
|
||||
cookies: {
|
||||
getAll(details: CookieQuery): Promise<Cookie[]>;
|
||||
remove(details: CookieRemove): Promise<Cookie | null>;
|
||||
};
|
||||
|
||||
// Extension API
|
||||
extension: {
|
||||
getBackgroundPage(): Window | null;
|
||||
};
|
||||
|
||||
// Windows API
|
||||
windows: {
|
||||
WINDOW_ID_CURRENT: number;
|
||||
};
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user