@addonova/browser 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +693 -2
- package/dist/adapters/chrome/index.d.ts +9 -0
- package/dist/adapters/chrome/index.d.ts.map +1 -0
- package/dist/adapters/chrome/index.js +12 -0
- package/dist/adapters/chrome/index.js.map +1 -0
- package/dist/adapters/chromium/index.d.ts +12 -0
- package/dist/adapters/chromium/index.d.ts.map +1 -0
- package/dist/adapters/chromium/index.js +12 -0
- package/dist/adapters/chromium/index.js.map +1 -0
- package/dist/adapters/edge/index.d.ts +11 -0
- package/dist/adapters/edge/index.d.ts.map +1 -0
- package/dist/adapters/edge/index.js +13 -0
- package/dist/adapters/edge/index.js.map +1 -0
- package/dist/adapters/firefox/index.d.ts +10 -0
- package/dist/adapters/firefox/index.d.ts.map +1 -0
- package/dist/adapters/firefox/index.js +12 -0
- package/dist/adapters/firefox/index.js.map +1 -0
- package/dist/adapters/shared/adapter.d.ts +13 -0
- package/dist/adapters/shared/adapter.d.ts.map +1 -0
- package/dist/adapters/shared/adapter.js +24 -0
- package/dist/adapters/shared/adapter.js.map +1 -0
- package/dist/adapters/shared/namespace.d.ts +4 -0
- package/dist/adapters/shared/namespace.d.ts.map +1 -0
- package/dist/adapters/shared/namespace.js +20 -0
- package/dist/adapters/shared/namespace.js.map +1 -0
- package/dist/adapters/types.d.ts +10 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/api/action/index.d.ts +6 -0
- package/dist/api/action/index.d.ts.map +1 -0
- package/dist/api/action/index.js +56 -0
- package/dist/api/action/index.js.map +1 -0
- package/dist/api/alarms/index.d.ts +5 -0
- package/dist/api/alarms/index.d.ts.map +1 -0
- package/dist/api/alarms/index.js +34 -0
- package/dist/api/alarms/index.js.map +1 -0
- package/dist/api/bookmarks/index.d.ts +5 -0
- package/dist/api/bookmarks/index.d.ts.map +1 -0
- package/dist/api/bookmarks/index.js +39 -0
- package/dist/api/bookmarks/index.js.map +1 -0
- package/dist/api/browser.d.ts +3 -0
- package/dist/api/browser.d.ts.map +1 -0
- package/dist/api/browser.js +2 -0
- package/dist/api/browser.js.map +1 -0
- package/dist/api/commands/index.d.ts +5 -0
- package/dist/api/commands/index.d.ts.map +1 -0
- package/dist/api/commands/index.js +12 -0
- package/dist/api/commands/index.js.map +1 -0
- package/dist/api/context-menus/index.d.ts +5 -0
- package/dist/api/context-menus/index.d.ts.map +1 -0
- package/dist/api/context-menus/index.js +21 -0
- package/dist/api/context-menus/index.js.map +1 -0
- package/dist/api/cookies/index.d.ts +5 -0
- package/dist/api/cookies/index.d.ts.map +1 -0
- package/dist/api/cookies/index.js +21 -0
- package/dist/api/cookies/index.js.map +1 -0
- package/dist/api/downloads/index.d.ts +5 -0
- package/dist/api/downloads/index.d.ts.map +1 -0
- package/dist/api/downloads/index.js +20 -0
- package/dist/api/downloads/index.js.map +1 -0
- package/dist/api/helpers.d.ts +17 -0
- package/dist/api/helpers.d.ts.map +1 -0
- package/dist/api/helpers.js +100 -0
- package/dist/api/helpers.js.map +1 -0
- package/dist/api/i18n/index.d.ts +5 -0
- package/dist/api/i18n/index.d.ts.map +1 -0
- package/dist/api/i18n/index.js +17 -0
- package/dist/api/i18n/index.js.map +1 -0
- package/dist/api/lazy-adapter.d.ts +5 -0
- package/dist/api/lazy-adapter.d.ts.map +1 -0
- package/dist/api/lazy-adapter.js +37 -0
- package/dist/api/lazy-adapter.js.map +1 -0
- package/dist/api/notifications/index.d.ts +5 -0
- package/dist/api/notifications/index.d.ts.map +1 -0
- package/dist/api/notifications/index.js +27 -0
- package/dist/api/notifications/index.js.map +1 -0
- package/dist/api/permissions/index.d.ts +5 -0
- package/dist/api/permissions/index.d.ts.map +1 -0
- package/dist/api/permissions/index.js +24 -0
- package/dist/api/permissions/index.js.map +1 -0
- package/dist/api/runtime/index.d.ts +5 -0
- package/dist/api/runtime/index.d.ts.map +1 -0
- package/dist/api/runtime/index.js +38 -0
- package/dist/api/runtime/index.js.map +1 -0
- package/dist/api/scripting/index.d.ts +5 -0
- package/dist/api/scripting/index.d.ts.map +1 -0
- package/dist/api/scripting/index.js +15 -0
- package/dist/api/scripting/index.js.map +1 -0
- package/dist/api/sessions/index.d.ts +5 -0
- package/dist/api/sessions/index.d.ts.map +1 -0
- package/dist/api/sessions/index.js +19 -0
- package/dist/api/sessions/index.js.map +1 -0
- package/dist/api/singletons.d.ts +40 -0
- package/dist/api/singletons.d.ts.map +1 -0
- package/dist/api/singletons.js +60 -0
- package/dist/api/singletons.js.map +1 -0
- package/dist/api/storage/area.d.ts +4 -0
- package/dist/api/storage/area.d.ts.map +1 -0
- package/dist/api/storage/area.js +29 -0
- package/dist/api/storage/area.js.map +1 -0
- package/dist/api/storage/index.d.ts +7 -0
- package/dist/api/storage/index.d.ts.map +1 -0
- package/dist/api/storage/index.js +37 -0
- package/dist/api/storage/index.js.map +1 -0
- package/dist/api/storage/item.d.ts +4 -0
- package/dist/api/storage/item.d.ts.map +1 -0
- package/dist/api/storage/item.js +109 -0
- package/dist/api/storage/item.js.map +1 -0
- package/dist/api/tabs/index.d.ts +5 -0
- package/dist/api/tabs/index.d.ts.map +1 -0
- package/dist/api/tabs/index.js +49 -0
- package/dist/api/tabs/index.js.map +1 -0
- package/dist/api/web-navigation/index.d.ts +5 -0
- package/dist/api/web-navigation/index.d.ts.map +1 -0
- package/dist/api/web-navigation/index.js +30 -0
- package/dist/api/web-navigation/index.js.map +1 -0
- package/dist/api/web-request/index.d.ts +5 -0
- package/dist/api/web-request/index.d.ts.map +1 -0
- package/dist/api/web-request/index.js +27 -0
- package/dist/api/web-request/index.js.map +1 -0
- package/dist/api/windows/index.d.ts +5 -0
- package/dist/api/windows/index.d.ts.map +1 -0
- package/dist/api/windows/index.js +27 -0
- package/dist/api/windows/index.js.map +1 -0
- package/dist/browser/detect.d.ts +19 -0
- package/dist/browser/detect.d.ts.map +1 -0
- package/dist/browser/detect.js +89 -0
- package/dist/browser/detect.js.map +1 -0
- package/dist/browser/info.d.ts +17 -0
- package/dist/browser/info.d.ts.map +1 -0
- package/dist/browser/info.js +77 -0
- package/dist/browser/info.js.map +1 -0
- package/dist/browser/resolve.d.ts +9 -0
- package/dist/browser/resolve.d.ts.map +1 -0
- package/dist/browser/resolve.js +57 -0
- package/dist/browser/resolve.js.map +1 -0
- package/dist/browser/support.d.ts +8 -0
- package/dist/browser/support.d.ts.map +1 -0
- package/dist/browser/support.js +18 -0
- package/dist/browser/support.js.map +1 -0
- package/dist/build/target.d.ts +5 -0
- package/dist/build/target.d.ts.map +1 -0
- package/dist/build/target.js +21 -0
- package/dist/build/target.js.map +1 -0
- package/dist/content/context.d.ts +24 -0
- package/dist/content/context.d.ts.map +1 -0
- package/dist/content/context.js +157 -0
- package/dist/content/context.js.map +1 -0
- package/dist/content/index.d.ts +7 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +4 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/inject-root.d.ts +2 -0
- package/dist/content/inject-root.d.ts.map +1 -0
- package/dist/content/inject-root.js +4 -0
- package/dist/content/inject-root.js.map +1 -0
- package/dist/content/inject-script.d.ts +16 -0
- package/dist/content/inject-script.d.ts.map +1 -0
- package/dist/content/inject-script.js +39 -0
- package/dist/content/inject-script.js.map +1 -0
- package/dist/content/ui.d.ts +50 -0
- package/dist/content/ui.d.ts.map +1 -0
- package/dist/content/ui.js +331 -0
- package/dist/content/ui.js.map +1 -0
- package/dist/entries/chrome.d.ts +52 -0
- package/dist/entries/chrome.d.ts.map +1 -0
- package/dist/entries/chrome.js +101 -0
- package/dist/entries/chrome.js.map +1 -0
- package/dist/entries/chromium.d.ts +52 -0
- package/dist/entries/chromium.d.ts.map +1 -0
- package/dist/entries/chromium.js +102 -0
- package/dist/entries/chromium.js.map +1 -0
- package/dist/entries/edge.d.ts +52 -0
- package/dist/entries/edge.d.ts.map +1 -0
- package/dist/entries/edge.js +101 -0
- package/dist/entries/edge.js.map +1 -0
- package/dist/entries/firefox.d.ts +52 -0
- package/dist/entries/firefox.d.ts.map +1 -0
- package/dist/entries/firefox.js +100 -0
- package/dist/entries/firefox.js.map +1 -0
- package/dist/entries/info.d.ts +5 -0
- package/dist/entries/info.d.ts.map +1 -0
- package/dist/entries/info.js +21 -0
- package/dist/entries/info.js.map +1 -0
- package/dist/entries/shared-exports.d.ts +20 -0
- package/dist/entries/shared-exports.d.ts.map +1 -0
- package/dist/entries/shared-exports.js +10 -0
- package/dist/entries/shared-exports.js.map +1 -0
- package/dist/entries/support.d.ts +6 -0
- package/dist/entries/support.d.ts.map +1 -0
- package/dist/entries/support.js +16 -0
- package/dist/entries/support.js.map +1 -0
- package/dist/entries/utilities.d.ts +6 -0
- package/dist/entries/utilities.d.ts.map +1 -0
- package/dist/entries/utilities.js +7 -0
- package/dist/entries/utilities.js.map +1 -0
- package/dist/i18n/index.d.ts +16 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +52 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/messaging/index.d.ts +22 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +100 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/messaging/proxy.d.ts +17 -0
- package/dist/messaging/proxy.d.ts.map +1 -0
- package/dist/messaging/proxy.js +61 -0
- package/dist/messaging/proxy.js.map +1 -0
- package/dist/messaging/root.d.ts +4 -0
- package/dist/messaging/root.d.ts.map +1 -0
- package/dist/messaging/root.js +9 -0
- package/dist/messaging/root.js.map +1 -0
- package/dist/shared/capabilities.d.ts +25 -0
- package/dist/shared/capabilities.d.ts.map +1 -0
- package/dist/shared/capabilities.js +41 -0
- package/dist/shared/capabilities.js.map +1 -0
- package/dist/shared/errors.d.ts +18 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +32 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/events.d.ts +11 -0
- package/dist/shared/events.d.ts.map +1 -0
- package/dist/shared/events.js +19 -0
- package/dist/shared/events.js.map +1 -0
- package/dist/shared/objects.d.ts +4 -0
- package/dist/shared/objects.d.ts.map +1 -0
- package/dist/shared/objects.js +14 -0
- package/dist/shared/objects.js.map +1 -0
- package/dist/shared/promises.d.ts +11 -0
- package/dist/shared/promises.d.ts.map +1 -0
- package/dist/shared/promises.js +70 -0
- package/dist/shared/promises.js.map +1 -0
- package/dist/testing/fake-browser.d.ts +184 -0
- package/dist/testing/fake-browser.d.ts.map +1 -0
- package/dist/testing/fake-browser.js +994 -0
- package/dist/testing/fake-browser.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/setup.d.ts +2 -0
- package/dist/testing/setup.d.ts.map +1 -0
- package/dist/testing/setup.js +6 -0
- package/dist/testing/setup.js.map +1 -0
- package/dist/types/action.d.ts +35 -0
- package/dist/types/action.d.ts.map +1 -0
- package/dist/types/action.js +2 -0
- package/dist/types/action.js.map +1 -0
- package/dist/types/alarms.d.ts +21 -0
- package/dist/types/alarms.d.ts.map +1 -0
- package/dist/types/alarms.js +2 -0
- package/dist/types/alarms.js.map +1 -0
- package/dist/types/bookmarks.d.ts +57 -0
- package/dist/types/bookmarks.d.ts.map +1 -0
- package/dist/types/bookmarks.js +2 -0
- package/dist/types/bookmarks.js.map +1 -0
- package/dist/types/commands.d.ts +11 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/commands.js +2 -0
- package/dist/types/commands.js.map +1 -0
- package/dist/types/context-menus.d.ts +48 -0
- package/dist/types/context-menus.d.ts.map +1 -0
- package/dist/types/context-menus.js +2 -0
- package/dist/types/context-menus.js.map +1 -0
- package/dist/types/cookies.d.ts +54 -0
- package/dist/types/cookies.d.ts.map +1 -0
- package/dist/types/cookies.js +2 -0
- package/dist/types/cookies.js.map +1 -0
- package/dist/types/downloads.d.ts +43 -0
- package/dist/types/downloads.d.ts.map +1 -0
- package/dist/types/downloads.js +2 -0
- package/dist/types/downloads.js.map +1 -0
- package/dist/types/i18n.d.ts +14 -0
- package/dist/types/i18n.d.ts.map +1 -0
- package/dist/types/i18n.js +2 -0
- package/dist/types/i18n.js.map +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/notifications.d.ts +35 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/notifications.js +2 -0
- package/dist/types/notifications.js.map +1 -0
- package/dist/types/permissions.d.ts +14 -0
- package/dist/types/permissions.d.ts.map +1 -0
- package/dist/types/permissions.js +2 -0
- package/dist/types/permissions.js.map +1 -0
- package/dist/types/runtime.d.ts +58 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +2 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/scripting.d.ts +30 -0
- package/dist/types/scripting.d.ts.map +1 -0
- package/dist/types/scripting.js +2 -0
- package/dist/types/scripting.js.map +1 -0
- package/dist/types/sessions.d.ts +28 -0
- package/dist/types/sessions.d.ts.map +1 -0
- package/dist/types/sessions.js +2 -0
- package/dist/types/sessions.js.map +1 -0
- package/dist/types/storage.d.ts +51 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +2 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/types/tabs.d.ts +96 -0
- package/dist/types/tabs.d.ts.map +1 -0
- package/dist/types/tabs.js +2 -0
- package/dist/types/tabs.js.map +1 -0
- package/dist/types/web-navigation.d.ts +28 -0
- package/dist/types/web-navigation.d.ts.map +1 -0
- package/dist/types/web-navigation.js +2 -0
- package/dist/types/web-navigation.js.map +1 -0
- package/dist/types/web-request.d.ts +20 -0
- package/dist/types/web-request.d.ts.map +1 -0
- package/dist/types/web-request.js +2 -0
- package/dist/types/web-request.js.map +1 -0
- package/dist/types/windows.d.ts +52 -0
- package/dist/types/windows.d.ts.map +1 -0
- package/dist/types/windows.js +2 -0
- package/dist/types/windows.js.map +1 -0
- package/package.json +97 -4
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { BrowserApiError } from '../shared/errors.js';
|
|
2
|
+
export function createI18nHelper(api, options = {}) {
|
|
3
|
+
const fallbackToKey = options.fallbackToKey ?? true;
|
|
4
|
+
const resolvedApi = api ?? getGlobalI18n();
|
|
5
|
+
const raw = (messageName, substitutions) => substitutions === undefined
|
|
6
|
+
? resolvedApi.getMessage(messageName)
|
|
7
|
+
: resolvedApi.getMessage(messageName, substitutions);
|
|
8
|
+
return {
|
|
9
|
+
get locale() {
|
|
10
|
+
return resolvedApi.getUILanguage();
|
|
11
|
+
},
|
|
12
|
+
t(messageName, substitutions) {
|
|
13
|
+
const message = raw(messageName, substitutions);
|
|
14
|
+
return message === '' && fallbackToKey ? messageName : message;
|
|
15
|
+
},
|
|
16
|
+
raw,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function formatMessage(message, substitutions) {
|
|
20
|
+
if (substitutions === undefined) {
|
|
21
|
+
return message;
|
|
22
|
+
}
|
|
23
|
+
const values = typeof substitutions === 'string' ? [substitutions] : substitutions;
|
|
24
|
+
let result = message.replace(/\$\$/g, '\u0000');
|
|
25
|
+
values.forEach((value, index) => {
|
|
26
|
+
result = result.replaceAll(`$${index + 1}`, value);
|
|
27
|
+
});
|
|
28
|
+
return result.replace(/\u0000/g, '$');
|
|
29
|
+
}
|
|
30
|
+
export const i18nHelper = {
|
|
31
|
+
get locale() {
|
|
32
|
+
return createI18nHelper().locale;
|
|
33
|
+
},
|
|
34
|
+
t(messageName, substitutions) {
|
|
35
|
+
return createI18nHelper().t(messageName, substitutions);
|
|
36
|
+
},
|
|
37
|
+
raw(messageName, substitutions) {
|
|
38
|
+
return createI18nHelper().raw(messageName, substitutions);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
export function t(messageName, substitutions) {
|
|
42
|
+
return createI18nHelper().t(messageName, substitutions);
|
|
43
|
+
}
|
|
44
|
+
function getGlobalI18n() {
|
|
45
|
+
const global = globalThis;
|
|
46
|
+
const api = global.browser?.i18n ?? global.chrome?.i18n;
|
|
47
|
+
if (api === undefined) {
|
|
48
|
+
throw new BrowserApiError('BROWSER_UNSUPPORTED_ENVIRONMENT', 'The i18n API is not available in this environment.', { api: 'i18n.getMessage' });
|
|
49
|
+
}
|
|
50
|
+
return api;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAiBtD,MAAM,UAAU,gBAAgB,CAC9B,GAAoB,EACpB,OAAO,GAAsB,EAAE;IAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IACpD,MAAM,WAAW,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;IAE3C,MAAM,GAAG,GAAG,CACV,WAAmB,EACnB,aAAiC,EACzB,EAAE,CACV,aAAa,KAAK,SAAS;QACzB,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC;QACrC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEzD,OAAO;QACL,IAAI,MAAM;YACR,OAAO,WAAW,CAAC,aAAa,EAAE,CAAC;QACrC,CAAC;QACD,CAAC,CAAC,WAAmB,EAAE,aAAiC;YACtD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAEhD,OAAO,OAAO,KAAK,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,CAAC;QACD,GAAG;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,aAAiC;IAEjC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GACV,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IACtE,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEhD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,IAAI,MAAM;QACR,OAAO,gBAAgB,EAAE,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,CAAC,CAAC,WAAW,EAAE,aAAa;QAC1B,OAAO,gBAAgB,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IACD,GAAG,CAAC,WAAW,EAAE,aAAa;QAC5B,OAAO,gBAAgB,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,CAAC,CACf,WAAmB,EACnB,aAAiC;IAEjC,OAAO,gBAAgB,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,UAGd,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IAExD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CACvB,iCAAiC,EACjC,oDAAoD,EACpD,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAC3B,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { BrowserApiError, isBrowserApiError, isPermissionError, normalizeBrowserApiError, } from './shared/errors.ts';
|
|
2
|
+
export type { BrowserApiErrorCode, BrowserApiErrorOptions, NormalizeBrowserApiErrorOptions, } from './shared/errors.ts';
|
|
3
|
+
export { callbackToPromise, isPromiseLike, promisifyMethod, readLastError, resolveMaybePromise, } from './shared/promises.ts';
|
|
4
|
+
export type { Callback, CallbackOptions } from './shared/promises.ts';
|
|
5
|
+
export { isBrowserEvent, passthroughEvent, requireEvent, } from './shared/events.ts';
|
|
6
|
+
export type { BrowserEvent, BrowserEventListener } from './shared/events.ts';
|
|
7
|
+
export { BROWSER_TARGETS, availableCapability, isBrowserTarget, isManifestVersion, unavailableCapability, } from './shared/capabilities.ts';
|
|
8
|
+
export type { ApiAvailability, ApiAvailabilityReason, BrowserEngine, BrowserTarget, CapabilityProvider, CapabilityQuery, ManifestVersion, } from './shared/capabilities.ts';
|
|
9
|
+
export type { BrowserAdapter } from './adapters/types.ts';
|
|
10
|
+
export { browserInfo, getBrowserInfo } from './browser/info.ts';
|
|
11
|
+
export type { BrowserInfo, BrowserInfoOptions } from './browser/info.ts';
|
|
12
|
+
export { getAvailability, isBrowserSupported, supports, } from './browser/support.ts';
|
|
13
|
+
export { browser } from './api/browser.ts';
|
|
14
|
+
export type { Browser } from './api/browser.ts';
|
|
15
|
+
export { action, alarms, bookmarks, commands, contextMenus, cookies, downloads, i18n, notifications, permissions, runtime, scripting, sessions, storage, tabs, webNavigation, webRequest, windows, } from './api/singletons.ts';
|
|
16
|
+
export type * from './types/index.ts';
|
|
17
|
+
export { createStorageArea, createStorageItem, } from './api/storage/index.ts';
|
|
18
|
+
export type { StorageItem, StorageItemMeta, StorageItemOptions, StorageItemValue, } from './api/storage/index.ts';
|
|
19
|
+
export { createExtensionMessaging } from './messaging/index.ts';
|
|
20
|
+
export type { ExtensionMessenger, MessageContext, MessageData, MessageHandler, MessageKeys, MessageProtocol, MessageReturn, MessageSendArgs, MessagingRuntime, } from './messaging/index.ts';
|
|
21
|
+
export { defineExtensionMessaging } from './messaging/root.ts';
|
|
22
|
+
export { createProxyServices } from './messaging/proxy.ts';
|
|
23
|
+
export type { AsyncService, DefineProxyService, MessengerFactory, ProxyServiceFactory, ProxyServiceRegistration, } from './messaging/proxy.ts';
|
|
24
|
+
export { defineProxyService } from './messaging/root.ts';
|
|
25
|
+
export { createContentScriptContext, createIframeUi, createIntegratedUi, createInjectScript, createShadowRootUi, } from './content/index.ts';
|
|
26
|
+
export { injectScript } from './content/inject-root.ts';
|
|
27
|
+
export type { AutoMountOptions, BaseUiOptions, ContentScriptContext, ContentScriptContextOptions, ContentScriptRuntime, ContentScriptTimer, ContentScriptUi, IframeUiOptions, InjectScript, InjectScriptApis, InjectScriptOptions, IntegratedUiOptions, ShadowRootContentScriptUi, ShadowRootUiOptions, UiAlignment, UiAnchor, UiAppendMode, UiPosition, } from './content/index.ts';
|
|
28
|
+
export { createI18nHelper, formatMessage, i18nHelper, t, } from './i18n/index.ts';
|
|
29
|
+
export type { I18nHelper, I18nHelperOptions, I18nMessageApi, I18nSubstitutions, } from './i18n/index.ts';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { BrowserApiError, isBrowserApiError, isPermissionError, normalizeBrowserApiError, } from './shared/errors.js';
|
|
2
|
+
export { callbackToPromise, isPromiseLike, promisifyMethod, readLastError, resolveMaybePromise, } from './shared/promises.js';
|
|
3
|
+
export { isBrowserEvent, passthroughEvent, requireEvent, } from './shared/events.js';
|
|
4
|
+
export { BROWSER_TARGETS, availableCapability, isBrowserTarget, isManifestVersion, unavailableCapability, } from './shared/capabilities.js';
|
|
5
|
+
export { browserInfo, getBrowserInfo } from './browser/info.js';
|
|
6
|
+
export { getAvailability, isBrowserSupported, supports, } from './browser/support.js';
|
|
7
|
+
export { browser } from './api/browser.js';
|
|
8
|
+
export { action, alarms, bookmarks, commands, contextMenus, cookies, downloads, i18n, notifications, permissions, runtime, scripting, sessions, storage, tabs, webNavigation, webRequest, windows, } from './api/singletons.js';
|
|
9
|
+
export { createStorageArea, createStorageItem, } from './api/storage/index.js';
|
|
10
|
+
export { createExtensionMessaging } from './messaging/index.js';
|
|
11
|
+
export { defineExtensionMessaging } from './messaging/root.js';
|
|
12
|
+
export { createProxyServices } from './messaging/proxy.js';
|
|
13
|
+
export { defineProxyService } from './messaging/root.js';
|
|
14
|
+
export { createContentScriptContext, createIframeUi, createIntegratedUi, createInjectScript, createShadowRootUi, } from './content/index.js';
|
|
15
|
+
export { injectScript } from './content/inject-root.js';
|
|
16
|
+
export { createI18nHelper, formatMessage, i18nHelper, t, } from './i18n/index.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAalC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,SAAS,EACT,IAAI,EACJ,aAAa,EACb,WAAW,EACX,OAAO,EACP,SAAS,EACT,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,aAAa,EACb,UAAU,EACV,OAAO,GACR,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAYhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EACL,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAsBxD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,CAAC,GACF,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BrowserEvent } from '../shared/events.ts';
|
|
2
|
+
import type { MessageSender, SendResponse } from '../types/runtime.ts';
|
|
3
|
+
export interface MessagingRuntime {
|
|
4
|
+
sendMessage<T = unknown>(message: unknown): Promise<T>;
|
|
5
|
+
readonly onMessage: BrowserEvent<(message: unknown, sender: MessageSender, sendResponse: SendResponse) => boolean | void>;
|
|
6
|
+
}
|
|
7
|
+
export type MessageProtocol = object;
|
|
8
|
+
export type MessageKeys<P extends object> = Extract<keyof P, string>;
|
|
9
|
+
export type MessageData<P extends object, K extends MessageKeys<P>> = P[K] extends (...args: infer Args) => unknown ? Args extends readonly [] ? undefined : Args[0] : never;
|
|
10
|
+
export type MessageReturn<P extends object, K extends MessageKeys<P>> = P[K] extends (...args: never[]) => infer Result ? Awaited<Result> : never;
|
|
11
|
+
export type MessageSendArgs<P extends object, K extends MessageKeys<P>> = P[K] extends (...args: infer Args) => unknown ? Args extends readonly [] ? [] : [data: Args[0]] : never;
|
|
12
|
+
export interface MessageContext<Data = unknown, Sender = MessageSender> {
|
|
13
|
+
readonly data: Data;
|
|
14
|
+
readonly sender: Sender;
|
|
15
|
+
}
|
|
16
|
+
export type MessageHandler<P extends object, K extends MessageKeys<P>, Sender = MessageSender> = (message: MessageContext<MessageData<P, K>, Sender>) => P[K] extends (...args: never[]) => infer Result ? Result | Promise<Result> : never;
|
|
17
|
+
export interface ExtensionMessenger<P extends object> {
|
|
18
|
+
sendMessage<K extends MessageKeys<P>>(type: K, ...args: MessageSendArgs<P, K>): Promise<MessageReturn<P, K>>;
|
|
19
|
+
onMessage<K extends MessageKeys<P>>(type: K, handler: MessageHandler<P, K>): () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function createExtensionMessaging<P extends object = Record<string, (data?: unknown) => unknown>>(runtime: MessagingRuntime): ExtensionMessenger<P>;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { BrowserApiError, isBrowserApiError } from '../shared/errors.js';
|
|
2
|
+
const MESSAGE_KEY = '__addonova_message__';
|
|
3
|
+
const RESPONSE_KEY = '__addonova_message_response__';
|
|
4
|
+
export function createExtensionMessaging(runtime) {
|
|
5
|
+
return {
|
|
6
|
+
async sendMessage(type, ...args) {
|
|
7
|
+
const messageArgs = args;
|
|
8
|
+
const envelope = {
|
|
9
|
+
[MESSAGE_KEY]: true,
|
|
10
|
+
type,
|
|
11
|
+
...(messageArgs.length === 0 ? {} : { data: messageArgs[0] }),
|
|
12
|
+
};
|
|
13
|
+
const response = await runtime.sendMessage(envelope);
|
|
14
|
+
if (!isMessageResponse(response)) {
|
|
15
|
+
return response;
|
|
16
|
+
}
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
throw deserializeError(response.error);
|
|
19
|
+
}
|
|
20
|
+
return response.data;
|
|
21
|
+
},
|
|
22
|
+
onMessage(type, handler) {
|
|
23
|
+
const listener = (message, sender, sendResponse) => {
|
|
24
|
+
if (!isMessageEnvelope(message) || message.type !== type) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
void Promise.resolve(handler({
|
|
28
|
+
data: message.data,
|
|
29
|
+
sender,
|
|
30
|
+
})).then((data) => {
|
|
31
|
+
sendResponse(successResponse(data));
|
|
32
|
+
}, (error) => {
|
|
33
|
+
sendResponse(failureResponse(error));
|
|
34
|
+
});
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
37
|
+
runtime.onMessage.addListener(listener);
|
|
38
|
+
return () => runtime.onMessage.removeListener(listener);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function isMessageEnvelope(value) {
|
|
43
|
+
return (isRecord(value) &&
|
|
44
|
+
value[MESSAGE_KEY] === true &&
|
|
45
|
+
typeof value.type === 'string');
|
|
46
|
+
}
|
|
47
|
+
function isMessageResponse(value) {
|
|
48
|
+
return isRecord(value) && value[RESPONSE_KEY] === true;
|
|
49
|
+
}
|
|
50
|
+
function successResponse(data) {
|
|
51
|
+
return { [RESPONSE_KEY]: true, ok: true, data };
|
|
52
|
+
}
|
|
53
|
+
function failureResponse(error) {
|
|
54
|
+
return {
|
|
55
|
+
[RESPONSE_KEY]: true,
|
|
56
|
+
ok: false,
|
|
57
|
+
error: serializeError(error),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function serializeError(error) {
|
|
61
|
+
const name = error instanceof Error && error.name !== ''
|
|
62
|
+
? error.name
|
|
63
|
+
: 'Error';
|
|
64
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
65
|
+
return {
|
|
66
|
+
name,
|
|
67
|
+
message,
|
|
68
|
+
...(isBrowserApiError(error) ? { code: error.code } : {}),
|
|
69
|
+
...(error instanceof Error && error.stack !== undefined
|
|
70
|
+
? { stack: error.stack }
|
|
71
|
+
: {}),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function deserializeError(error) {
|
|
75
|
+
if (error === undefined) {
|
|
76
|
+
return new BrowserApiError('BROWSER_API_FAILED', 'The message handler failed without an error.', { api: 'runtime.sendMessage' });
|
|
77
|
+
}
|
|
78
|
+
if (error.code !== undefined && isBrowserApiErrorCode(error.code)) {
|
|
79
|
+
return new BrowserApiError(error.code, error.message, {
|
|
80
|
+
api: 'runtime.sendMessage',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const result = new Error(error.message);
|
|
84
|
+
result.name = error.name;
|
|
85
|
+
if (error.stack !== undefined) {
|
|
86
|
+
result.stack = error.stack;
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
function isBrowserApiErrorCode(value) {
|
|
91
|
+
return (value === 'BROWSER_UNSUPPORTED_ENVIRONMENT' ||
|
|
92
|
+
value === 'BROWSER_UNSUPPORTED_API' ||
|
|
93
|
+
value === 'BROWSER_PERMISSION_DENIED' ||
|
|
94
|
+
value === 'BROWSER_API_FAILED' ||
|
|
95
|
+
value === 'BROWSER_INVALID_ARGUMENT');
|
|
96
|
+
}
|
|
97
|
+
function isRecord(value) {
|
|
98
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAczE,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAC3C,MAAM,YAAY,GAAG,+BAA+B,CAAC;AAwErD,MAAM,UAAU,wBAAwB,CAEtC,OAAyB;IACzB,OAAO;QACL,KAAK,CAAC,WAAW,CACf,IAAO,EACP,GAAG,IAA2B;YAE9B,MAAM,WAAW,GAAG,IAA0B,CAAC;YAC/C,MAAM,QAAQ,GAAoB;gBAChC,CAAC,WAAW,CAAC,EAAE,IAAI;gBACnB,IAAI;gBACJ,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAU,QAAQ,CAAC,CAAC;YAE9D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,QAA+B,CAAC;YACzC,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,OAAO,QAAQ,CAAC,IAA2B,CAAC;QAC9C,CAAC;QACD,SAAS,CACP,IAAO,EACP,OAA6B;YAE7B,MAAM,QAAQ,GAAG,CACf,OAAgB,EAChB,MAAqB,EACrB,YAA0B,EACjB,EAAE;gBACX,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACzD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,KAAK,OAAO,CAAC,OAAO,CAClB,OAAO,CAAC;oBACN,IAAI,EAAE,OAAO,CAAC,IAAyB;oBACvC,MAAM;iBACP,CAAC,CACH,CAAC,IAAI,CACJ,CAAC,IAAI,EAAE,EAAE;oBACP,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtC,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;oBACjB,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,CAAC,CACF,CAAC;gBAEF,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAExC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI;QAC3B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAC/B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO;QACL,CAAC,YAAY,CAAC,EAAE,IAAI;QACpB,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,IAAI,GACR,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE;QACzC,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,OAAO,CAAC;IACd,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzD,OAAO;QACL,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YACrD,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YACxB,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyC;IACjE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,eAAe,CACxB,oBAAoB,EACpB,8CAA8C,EAC9C,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAC/B,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE;YACpD,GAAG,EAAE,qBAAqB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAEzB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,CACL,KAAK,KAAK,iCAAiC;QAC3C,KAAK,KAAK,yBAAyB;QACnC,KAAK,KAAK,2BAA2B;QACrC,KAAK,KAAK,oBAAoB;QAC9B,KAAK,KAAK,0BAA0B,CACrC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ExtensionMessenger } from './index.ts';
|
|
2
|
+
export type AsyncService<Service extends object> = {
|
|
3
|
+
[Key in keyof Service]: Service[Key] extends (...args: infer Args) => infer Result ? (...args: Args) => Promise<Awaited<Result>> : never;
|
|
4
|
+
};
|
|
5
|
+
export type ProxyServiceFactory<Service extends object, Args extends readonly unknown[]> = (...args: Args) => Service;
|
|
6
|
+
export type ProxyServiceRegistration<Service extends object, Args extends readonly unknown[]> = {
|
|
7
|
+
(...args: Args): Service;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
dispose(): void;
|
|
10
|
+
};
|
|
11
|
+
export type MessengerFactory = <P extends object = Record<string, (data?: unknown) => unknown>>() => ExtensionMessenger<P>;
|
|
12
|
+
export type DefineProxyService = <Service extends object, Args extends readonly unknown[] = readonly unknown[]>(name: string, create: ProxyServiceFactory<Service, Args>) => [
|
|
13
|
+
register: ProxyServiceRegistration<Service, Args>,
|
|
14
|
+
get: () => AsyncService<Service>
|
|
15
|
+
];
|
|
16
|
+
export declare function createProxyServices(createMessenger: MessengerFactory): DefineProxyService;
|
|
17
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/messaging/proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAcrD,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,MAAM,IAAI;KAChD,GAAG,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAC3C,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,MAAM,MAAM,GACb,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAC3C,KAAK;CACV,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,OAAO,SAAS,MAAM,EACtB,IAAI,SAAS,SAAS,OAAO,EAAE,IAC7B,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAE/B,MAAM,MAAM,wBAAwB,CAClC,OAAO,SAAS,MAAM,EACtB,IAAI,SAAS,SAAS,OAAO,EAAE,IAC7B;IACF,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OACzD,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE7B,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,SAAS,MAAM,EACtB,IAAI,SAAS,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,EAEpD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,KACvC;IACH,QAAQ,EAAE,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC;IACjD,GAAG,EAAE,MAAM,YAAY,CAAC,OAAO,CAAC;CACjC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,gBAAgB,GAChC,kBAAkB,CA4FpB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BrowserApiError } from '../shared/errors.js';
|
|
2
|
+
const PROXY_PREFIX = '__addonova_proxy__:';
|
|
3
|
+
export function createProxyServices(createMessenger) {
|
|
4
|
+
const messaging = createMessenger();
|
|
5
|
+
const services = new Map();
|
|
6
|
+
return function defineProxyService(name, create) {
|
|
7
|
+
const messageType = `${PROXY_PREFIX}${name}`;
|
|
8
|
+
let dispose;
|
|
9
|
+
const register = ((...args) => {
|
|
10
|
+
if (services.has(name)) {
|
|
11
|
+
throw new BrowserApiError('BROWSER_INVALID_ARGUMENT', `Proxy service "${name}" is already registered.`);
|
|
12
|
+
}
|
|
13
|
+
const service = create(...args);
|
|
14
|
+
services.set(name, service);
|
|
15
|
+
const removeListener = messaging.onMessage(messageType, async ({ data }) => {
|
|
16
|
+
if (!isProxyRequest(data)) {
|
|
17
|
+
throw new BrowserApiError('BROWSER_INVALID_ARGUMENT', `Invalid proxy request for service "${name}".`);
|
|
18
|
+
}
|
|
19
|
+
const method = service[data.method];
|
|
20
|
+
if (typeof method !== 'function') {
|
|
21
|
+
throw new BrowserApiError('BROWSER_UNSUPPORTED_API', `Proxy service "${name}" does not implement "${data.method}".`);
|
|
22
|
+
}
|
|
23
|
+
return await method.apply(service, [...data.args]);
|
|
24
|
+
});
|
|
25
|
+
dispose = () => {
|
|
26
|
+
removeListener();
|
|
27
|
+
services.delete(name);
|
|
28
|
+
dispose = undefined;
|
|
29
|
+
};
|
|
30
|
+
return service;
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(register, 'name', { value: name });
|
|
33
|
+
Object.defineProperty(register, 'dispose', {
|
|
34
|
+
value: () => {
|
|
35
|
+
dispose?.();
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
const get = () => {
|
|
39
|
+
const proxy = new Proxy({}, {
|
|
40
|
+
get(_target, property) {
|
|
41
|
+
if (typeof property === 'symbol' || property === 'then') {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return (...args) => messaging.sendMessage(messageType, {
|
|
45
|
+
method: property,
|
|
46
|
+
args,
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
return proxy;
|
|
51
|
+
};
|
|
52
|
+
return [register, get];
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function isProxyRequest(value) {
|
|
56
|
+
return (typeof value === 'object' &&
|
|
57
|
+
value !== null &&
|
|
58
|
+
typeof value.method === 'string' &&
|
|
59
|
+
Array.isArray(value.args));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/messaging/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAiD3C,MAAM,UAAU,mBAAmB,CACjC,eAAiC;IAEjC,MAAM,SAAS,GAAG,eAAe,EAAiB,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C,OAAO,SAAS,kBAAkB,CAIhC,IAAY,EACZ,MAA0C;QAK1C,MAAM,WAAW,GAAG,GAAG,YAAY,GAAG,IAAI,EAAE,CAAC;QAC7C,IAAI,OAAiC,CAAC;QAEtC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAU,EAAW,EAAE;YAC3C,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,eAAe,CACvB,0BAA0B,EAC1B,kBAAkB,IAAI,0BAA0B,CACjD,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAE5B,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CACxC,WAAW,EACX,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,eAAe,CACvB,0BAA0B,EAC1B,sCAAsC,IAAI,IAAI,CAC/C,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAI,OAAmC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEjE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,MAAM,IAAI,eAAe,CACvB,yBAAyB,EACzB,kBAAkB,IAAI,yBAAyB,IAAI,CAAC,MAAM,IAAI,CAC/D,CAAC;gBACJ,CAAC;gBAED,OAAO,MACL,MACD,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC,CACF,CAAC;YAEF,OAAO,GAAG,GAAG,EAAE;gBACb,cAAc,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,OAAO,GAAG,SAAS,CAAC;YACtB,CAAC,CAAC;YAEF,OAAO,OAAO,CAAC;QACjB,CAAC,CAA4C,CAAC;QAE9C,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;YACzC,KAAK,EAAE,GAAG,EAAE;gBACV,OAAO,EAAE,EAAE,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,GAA0B,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,EAAE,EACF;gBACE,GAAG,CAAC,OAAO,EAAE,QAAQ;oBACnB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;wBACxD,OAAO,SAAS,CAAC;oBACnB,CAAC;oBAED,OAAO,CAAC,GAAG,IAAwB,EAAoB,EAAE,CACvD,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE;wBACjC,MAAM,EAAE,QAAQ;wBAChB,IAAI;qBACL,CAAC,CAAC;gBACP,CAAC;aACF,CACF,CAAC;YAEF,OAAO,KAA8B,CAAC;QACxC,CAAC,CAAC;QAEF,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ;QAC1D,KAAK,CAAC,OAAO,CAAE,KAA4B,CAAC,IAAI,CAAC,CAClD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ExtensionMessenger } from './index.ts';
|
|
2
|
+
export declare function defineExtensionMessaging<P extends object = Record<string, (data?: unknown) => unknown>>(): ExtensionMessenger<P>;
|
|
3
|
+
export declare const defineProxyService: import("./proxy.ts").DefineProxyService;
|
|
4
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/messaging/root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMrD,wBAAgB,wBAAwB,CACtC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,KAC3D,kBAAkB,CAAC,CAAC,CAAC,CAEzB;AAED,eAAO,MAAM,kBAAkB,yCAAuC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { runtime } from '../api/singletons.js';
|
|
2
|
+
import { createExtensionMessaging } from './index.js';
|
|
3
|
+
import { createProxyServices } from './proxy.js';
|
|
4
|
+
const createMessenger = () => createExtensionMessaging(runtime);
|
|
5
|
+
export function defineExtensionMessaging() {
|
|
6
|
+
return createExtensionMessaging(runtime);
|
|
7
|
+
}
|
|
8
|
+
export const defineProxyService = createProxyServices(createMessenger);
|
|
9
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/messaging/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,eAAe,GAAG,GAAqB,EAAE,CAC7C,wBAAwB,CAAI,OAAO,CAAC,CAAC;AAEvC,MAAM,UAAU,wBAAwB;IAGtC,OAAO,wBAAwB,CAAI,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const BROWSER_TARGETS: readonly ['chrome', 'chromium', 'firefox', 'edge'];
|
|
2
|
+
export type BrowserTarget = (typeof BROWSER_TARGETS)[number];
|
|
3
|
+
export type BrowserEngine = 'chromium' | 'gecko' | 'unknown';
|
|
4
|
+
export type ManifestVersion = 2 | 3;
|
|
5
|
+
export type ApiAvailabilityReason = 'missing-api' | 'missing-permission' | 'unsupported-manifest' | 'unsupported-browser';
|
|
6
|
+
export interface CapabilityQuery {
|
|
7
|
+
readonly namespace: string;
|
|
8
|
+
readonly method?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function normalizeQuery(api: string | CapabilityQuery): CapabilityQuery;
|
|
11
|
+
export interface ApiAvailability {
|
|
12
|
+
readonly namespace: string;
|
|
13
|
+
readonly method?: string;
|
|
14
|
+
readonly available: boolean;
|
|
15
|
+
readonly reason?: ApiAvailabilityReason;
|
|
16
|
+
}
|
|
17
|
+
export interface CapabilityProvider {
|
|
18
|
+
supports(query: CapabilityQuery): boolean;
|
|
19
|
+
availability(query: CapabilityQuery): ApiAvailability;
|
|
20
|
+
}
|
|
21
|
+
export declare function isBrowserTarget(value: unknown): value is BrowserTarget;
|
|
22
|
+
export declare function isManifestVersion(value: unknown): value is ManifestVersion;
|
|
23
|
+
export declare function availableCapability(query: CapabilityQuery): ApiAvailability;
|
|
24
|
+
export declare function unavailableCapability(query: CapabilityQuery, reason: ApiAvailabilityReason): ApiAvailability;
|
|
25
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/shared/capabilities.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,YAC1B,QAAQ,EACR,UAAU,EACV,SAAS,EACT,MAAM,CACE,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC;AAEpC,MAAM,MAAM,qBAAqB,GAC7B,aAAa,GACb,oBAAoB,GACpB,sBAAsB,GACtB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,GAAG,eAAe,GAC5B,eAAe,CAajB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;IAC1C,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAAC;CACvD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAKtE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAM3E;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,qBAAqB,GAC5B,eAAe,CAOjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const BROWSER_TARGETS = [
|
|
2
|
+
'chrome',
|
|
3
|
+
'chromium',
|
|
4
|
+
'firefox',
|
|
5
|
+
'edge',
|
|
6
|
+
];
|
|
7
|
+
export function normalizeQuery(api) {
|
|
8
|
+
if (typeof api !== 'string') {
|
|
9
|
+
return api;
|
|
10
|
+
}
|
|
11
|
+
const separator = api.indexOf('.');
|
|
12
|
+
return separator === -1
|
|
13
|
+
? { namespace: api }
|
|
14
|
+
: {
|
|
15
|
+
namespace: api.slice(0, separator),
|
|
16
|
+
method: api.slice(separator + 1),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function isBrowserTarget(value) {
|
|
20
|
+
return (typeof value === 'string' &&
|
|
21
|
+
BROWSER_TARGETS.includes(value));
|
|
22
|
+
}
|
|
23
|
+
export function isManifestVersion(value) {
|
|
24
|
+
return value === 2 || value === 3;
|
|
25
|
+
}
|
|
26
|
+
export function availableCapability(query) {
|
|
27
|
+
return {
|
|
28
|
+
namespace: query.namespace,
|
|
29
|
+
...(query.method === undefined ? {} : { method: query.method }),
|
|
30
|
+
available: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function unavailableCapability(query, reason) {
|
|
34
|
+
return {
|
|
35
|
+
namespace: query.namespace,
|
|
36
|
+
...(query.method === undefined ? {} : { method: query.method }),
|
|
37
|
+
available: false,
|
|
38
|
+
reason,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/shared/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ;IACR,UAAU;IACV,SAAS;IACT,MAAM;CACE,CAAC;AAmBX,MAAM,UAAU,cAAc,CAC5B,GAA6B;IAE7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEnC,OAAO,SAAS,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;QACpB,CAAC,CAAC;YACE,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;SACjC,CAAC;AACR,CAAC;AAcD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,eAAqC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/D,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAsB,EACtB,MAA6B;IAE7B,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/D,SAAS,EAAE,KAAK;QAChB,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type BrowserApiErrorCode = 'BROWSER_UNSUPPORTED_ENVIRONMENT' | 'BROWSER_UNSUPPORTED_API' | 'BROWSER_PERMISSION_DENIED' | 'BROWSER_API_FAILED' | 'BROWSER_INVALID_ARGUMENT';
|
|
2
|
+
export interface BrowserApiErrorOptions {
|
|
3
|
+
api?: string;
|
|
4
|
+
cause?: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface NormalizeBrowserApiErrorOptions {
|
|
7
|
+
code?: BrowserApiErrorCode;
|
|
8
|
+
api?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class BrowserApiError extends Error {
|
|
11
|
+
readonly code: BrowserApiErrorCode;
|
|
12
|
+
readonly api: string | undefined;
|
|
13
|
+
constructor(code: BrowserApiErrorCode, message: string, options?: BrowserApiErrorOptions);
|
|
14
|
+
}
|
|
15
|
+
export declare function isBrowserApiError(value: unknown): value is BrowserApiError;
|
|
16
|
+
export declare function isPermissionError(error: unknown): boolean;
|
|
17
|
+
export declare function normalizeBrowserApiError(error: unknown, options?: NormalizeBrowserApiErrorOptions): BrowserApiError;
|
|
18
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,iCAAiC,GACjC,yBAAyB,GACzB,2BAA2B,GAC3B,oBAAoB,GACpB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC,YACE,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,EASrC;CACF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGzD;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,+BAAoC,GAC5C,eAAe,CAgBjB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class BrowserApiError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
api;
|
|
4
|
+
constructor(code, message, options = {}) {
|
|
5
|
+
super(message, options.cause === undefined ? undefined : { cause: options.cause });
|
|
6
|
+
this.name = 'BrowserApiError';
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.api = options.api;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function isBrowserApiError(value) {
|
|
12
|
+
return value instanceof BrowserApiError;
|
|
13
|
+
}
|
|
14
|
+
export function isPermissionError(error) {
|
|
15
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
16
|
+
return /permission|not allowed|denied|access/i.test(message);
|
|
17
|
+
}
|
|
18
|
+
export function normalizeBrowserApiError(error, options = {}) {
|
|
19
|
+
if (isBrowserApiError(error)) {
|
|
20
|
+
return error;
|
|
21
|
+
}
|
|
22
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
23
|
+
const code = options.code ??
|
|
24
|
+
(isPermissionError(error)
|
|
25
|
+
? 'BROWSER_PERMISSION_DENIED'
|
|
26
|
+
: 'BROWSER_API_FAILED');
|
|
27
|
+
return new BrowserApiError(code, message, {
|
|
28
|
+
...(options.api === undefined ? {} : { api: options.api }),
|
|
29
|
+
cause: error,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAsB;IAC1B,GAAG,CAAqB;IAEjC,YACE,IAAyB,EACzB,OAAe,EACf,OAAO,GAA2B,EAAE;QAEpC,KAAK,CACH,OAAO,EACP,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACnE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,eAAe,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAc,EACd,OAAO,GAAoC,EAAE;IAE7C,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,IAAI,GACR,OAAO,CAAC,IAAI;QACZ,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACvB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAE5B,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE;QACxC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type BrowserEventListener = (...args: never[]) => unknown;
|
|
2
|
+
export interface BrowserEvent<TListener extends BrowserEventListener = BrowserEventListener> {
|
|
3
|
+
addListener(listener: TListener): void;
|
|
4
|
+
removeListener(listener: TListener): void;
|
|
5
|
+
hasListener?(listener: TListener): boolean;
|
|
6
|
+
hasListeners?(): boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function isBrowserEvent(value: unknown): value is BrowserEvent;
|
|
9
|
+
export declare function requireEvent<TEvent extends BrowserEvent>(event: TEvent | undefined | null, api: string): TEvent;
|
|
10
|
+
export declare function passthroughEvent<TEvent extends BrowserEvent>(event: TEvent): TEvent;
|
|
11
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/shared/events.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAEjE,MAAM,WAAW,YAAY,CAC3B,SAAS,SAAS,oBAAoB,GAAG,oBAAoB;IAE7D,WAAW,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1C,WAAW,CAAC,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3C,YAAY,CAAC,IAAI,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAMpE;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAS,YAAY,EACtD,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,GAAG,EAAE,MAAM,GACV,MAAM,CAUR;AAED,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,YAAY,EAC1D,KAAK,EAAE,MAAM,GACZ,MAAM,CAER"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BrowserApiError } from './errors.js';
|
|
2
|
+
export function isBrowserEvent(value) {
|
|
3
|
+
return (isRecord(value) &&
|
|
4
|
+
typeof value.addListener === 'function' &&
|
|
5
|
+
typeof value.removeListener === 'function');
|
|
6
|
+
}
|
|
7
|
+
export function requireEvent(event, api) {
|
|
8
|
+
if (event === undefined || event === null || !isBrowserEvent(event)) {
|
|
9
|
+
throw new BrowserApiError('BROWSER_UNSUPPORTED_API', `The browser API "${api}" is not available in this environment.`, { api });
|
|
10
|
+
}
|
|
11
|
+
return event;
|
|
12
|
+
}
|
|
13
|
+
export function passthroughEvent(event) {
|
|
14
|
+
return event;
|
|
15
|
+
}
|
|
16
|
+
function isRecord(value) {
|
|
17
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/shared/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAa9C,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,WAAW,KAAK,UAAU;QACvC,OAAO,KAAK,CAAC,cAAc,KAAK,UAAU,CAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAgC,EAChC,GAAW;IAEX,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,eAAe,CACvB,yBAAyB,EACzB,oBAAoB,GAAG,yCAAyC,EAChE,EAAE,GAAG,EAAE,CACR,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAa;IAEb,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
2
|
+
export declare function readProperty(scope: unknown, key: string): unknown;
|
|
3
|
+
export declare function readPath(scope: unknown, ...keys: readonly string[]): unknown;
|
|
4
|
+
//# sourceMappingURL=objects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/shared/objects.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAQ5E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function isRecord(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
export function readProperty(scope, key) {
|
|
5
|
+
return isRecord(scope) ? scope[key] : undefined;
|
|
6
|
+
}
|
|
7
|
+
export function readPath(scope, ...keys) {
|
|
8
|
+
let current = scope;
|
|
9
|
+
for (const key of keys) {
|
|
10
|
+
current = readProperty(current, key);
|
|
11
|
+
}
|
|
12
|
+
return current;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/shared/objects.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,GAAW;IACtD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,GAAG,IAAuB;IACjE,IAAI,OAAO,GAAY,KAAK,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type Callback<Result> = (result: Result) => void;
|
|
2
|
+
export interface CallbackOptions {
|
|
3
|
+
scope?: unknown;
|
|
4
|
+
api?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function readLastError(scope: unknown): string | null;
|
|
7
|
+
export declare function callbackToPromise<TResult>(run: (callback: Callback<TResult>) => void, options?: CallbackOptions): Promise<TResult>;
|
|
8
|
+
export declare function promisifyMethod<Args extends unknown[], Result>(method: (...args: [...Args, Callback<Result>]) => void, options?: CallbackOptions): (...args: Args) => Promise<Result>;
|
|
9
|
+
export declare function isPromiseLike<T>(value: T | PromiseLike<T>): value is PromiseLike<T>;
|
|
10
|
+
export declare function resolveMaybePromise<T>(value: T | PromiseLike<T>): Promise<T>;
|
|
11
|
+
//# sourceMappingURL=promises.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promises.d.ts","sourceRoot":"","sources":["../../src/shared/promises.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAwB3D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EACvC,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAC1C,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CA+ClB;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EAC5D,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EACtD,OAAO,GAAE,eAAoB,GAC5B,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAKpC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GACxB,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAMzB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC,CAEZ"}
|