This commit is contained in:
Aaron
2024-07-23 15:50:17 -05:00
parent 8d5fbb2a32
commit 4c684e7966
14 changed files with 121 additions and 104 deletions
+1
View File
@@ -20,6 +20,7 @@ export default defineConfig({
},
experimental: {
entrypointImporter: 'vite-node',
extensionApi: 'chrome',
},
runner: {
startUrls: ['https://duckduckgo.com'],
+9
View File
@@ -49,6 +49,14 @@
"types": "./dist/browser.d.ts",
"default": "./dist/browser.mjs"
},
"./browser/chrome": {
"types": "./dist/browser/chrome.d.ts",
"import": "./dist/browser/chrome.js"
},
"./browser/webextension-polyfill": {
"types": "./dist/browser/webextension-polyfill.d.ts",
"import": "./dist/browser/webextension-polyfill.js"
},
"./testing": {
"types": "./dist/testing/index.d.ts",
"default": "./dist/testing/index.mjs"
@@ -121,6 +129,7 @@
"devDependencies": {
"@aklinker1/check": "^1.3.1",
"@faker-js/faker": "^8.4.1",
"@types/chrome": "^0.0.268",
"@types/fs-extra": "^11.0.4",
"@types/lodash.merge": "^4.6.9",
"@types/natural-compare": "^1.4.3",
+5 -2
View File
@@ -15,6 +15,9 @@ export interface WxtI18n {
// Overriden per-project
}
const browser: AugmentedBrowser =
export const browser: AugmentedBrowser =
// @ts-expect-error
globalThis.browser?.runtime?.id == null ? chrome : browser;
globalThis.browser?.runtime?.id == null
? globalThis.chrome
: // @ts-expect-error
globalThis.browser;
+3 -77
View File
@@ -1,81 +1,7 @@
/**
* @module wxt/browser
*/
import originalBrowser, { Browser, Runtime, I18n } from 'webextension-polyfill';
export * from './webextension-polyfill';
export interface AugmentedBrowser extends Browser {
runtime: WxtRuntime;
i18n: WxtI18n;
}
export interface WxtRuntime extends Runtime.Static {
// Overriden per-project
}
export interface WxtI18n extends I18n.Static {
// Overriden per-project
}
export const browser: AugmentedBrowser = originalBrowser;
// re-export all the types from webextension-polyfill
// Because webextension-polyfill uses a weird namespace with "import export", there isn't a good way
// to get these types without re-listing them.
/** @ignore */
export type {
ActivityLog,
Alarms,
Bookmarks,
Action,
BrowserAction,
BrowserSettings,
BrowsingData,
CaptivePortal,
Clipboard,
Commands,
ContentScripts,
ContextualIdentities,
Cookies,
DeclarativeNetRequest,
Devtools,
Dns,
Downloads,
Events,
Experiments,
Extension,
ExtensionTypes,
Find,
GeckoProfiler,
History,
I18n,
Identity,
Idle,
Management,
Manifest, // TODO: Export custom manifest types that are valid for both Chrome and Firefox.
ContextMenus,
Menus,
NetworkStatus,
NormandyAddonStudy,
Notifications,
Omnibox,
PageAction,
Permissions,
Pkcs11,
Privacy,
Proxy,
Runtime,
Scripting,
Search,
Sessions,
SidebarAction,
Storage,
Tabs,
Theme,
TopSites,
Types,
Urlbar,
UserScripts,
WebNavigation,
WebRequest,
Windows,
} from 'webextension-polyfill';
// Overridden when types are generated per project
export type PublicPath = string;
@@ -0,0 +1,78 @@
import originalBrowser, { Browser, Runtime, I18n } from 'webextension-polyfill';
export interface AugmentedBrowser extends Browser {
runtime: WxtRuntime;
i18n: WxtI18n;
}
export interface WxtRuntime extends Runtime.Static {
// Overriden per-project
}
export interface WxtI18n extends I18n.Static {
// Overriden per-project
}
export const browser: AugmentedBrowser = originalBrowser;
// re-export all the types from webextension-polyfill
// Because webextension-polyfill uses a weird namespace with "import export", there isn't a good way
// to get these types without re-listing them.
/** @ignore */
export type {
ActivityLog,
Alarms,
Bookmarks,
Action,
BrowserAction,
BrowserSettings,
BrowsingData,
CaptivePortal,
Clipboard,
Commands,
ContentScripts,
ContextualIdentities,
Cookies,
DeclarativeNetRequest,
Devtools,
Dns,
Downloads,
Events,
Experiments,
Extension,
ExtensionTypes,
Find,
GeckoProfiler,
History,
I18n,
Identity,
Idle,
Management,
Manifest, // TODO: Export custom manifest types that are valid for both Chrome and Firefox.
ContextMenus,
Menus,
NetworkStatus,
NormandyAddonStudy,
Notifications,
Omnibox,
PageAction,
Permissions,
Pkcs11,
Privacy,
Proxy,
Runtime,
Scripting,
Search,
Sessions,
SidebarAction,
Storage,
Tabs,
Theme,
TopSites,
Types,
Urlbar,
UserScripts,
WebNavigation,
WebRequest,
Windows,
} from 'webextension-polyfill';
@@ -22,5 +22,5 @@ export function getUniqueEventName(eventName: string): string {
? 'build'
: import.meta.env.ENTRYPOINT;
return `${browser.runtime.id}:${entrypointName}:${eventName}`;
return `${browser?.runtime?.id}:${entrypointName}:${eventName}`;
}
@@ -13,9 +13,9 @@ export function resolveExtensionApi(config: ResolvedConfig): vite.Plugin {
return {
resolve: {
alias: {
'wxt/browser': 'wxt/browser/chrome',
},
alias: [
{ find: /^wxt\/browser$/, replacement: 'wxt/browser/chrome' },
],
},
};
},
@@ -29,6 +29,8 @@ export function webextensionPolyfillMock(
config.wxtModuleDir,
'dist/virtual/mock-browser',
),
'wxt/browser': 'wxt/testing',
'wxt/browser/chrome': 'wxt/testing',
},
},
ssr: {
+4 -4
View File
@@ -469,10 +469,10 @@ function addDevModeCsp(manifest: Manifest.WebExtensionManifest): void {
const extensionPagesCsp = new ContentSecurityPolicy(
manifest.manifest_version === 3
? // @ts-expect-error: extension_pages is not typed
(manifest.content_security_policy?.extension_pages ??
"script-src 'self' 'wasm-unsafe-eval'; object-src 'self';") // default extension_pages CSP for MV3
: (manifest.content_security_policy ??
"script-src 'self'; object-src 'self';"), // default CSP for MV2
manifest.content_security_policy?.extension_pages ??
"script-src 'self' 'wasm-unsafe-eval'; object-src 'self';" // default extension_pages CSP for MV3
: manifest.content_security_policy ??
"script-src 'self'; object-src 'self';", // default CSP for MV2
);
const sandboxCsp = new ContentSecurityPolicy(
// @ts-expect-error: sandbox is not typed
-5
View File
@@ -49,8 +49,3 @@ declare module 'web-ext-run/util/logger' {
}
export const consoleStream: IConsoleStream;
}
declare module 'wxt/browser' {
// Overridden when types are generated per project
export type PublicPath = string;
}
@@ -0,0 +1,3 @@
import { fakeBrowser } from 'wxt/testing';
export const browser = fakeBrowser;
+3
View File
@@ -0,0 +1,3 @@
import { fakeBrowser } from 'wxt/testing';
export const browser = fakeBrowser;
-3
View File
@@ -1,3 +0,0 @@
import { fakeBrowser as mockBrowser } from 'wxt/testing';
export default mockBrowser;
+9 -9
View File
@@ -192,9 +192,6 @@ importers:
'@aklinker1/rollup-plugin-visualizer':
specifier: 5.12.0
version: 5.12.0(rollup@3.29.4)
'@types/chrome':
specifier: '*'
version: 0.0.269
'@types/webextension-polyfill':
specifier: ^0.10.7
version: 0.10.7
@@ -319,6 +316,9 @@ importers:
'@faker-js/faker':
specifier: ^8.4.1
version: 8.4.1
'@types/chrome':
specifier: ^0.0.268
version: 0.0.268
'@types/fs-extra':
specifier: ^11.0.4
version: 11.0.4
@@ -1918,12 +1918,12 @@ packages:
'@babel/types': 7.24.7
dev: false
/@types/chrome@0.0.269:
resolution: {integrity: sha512-vF7x8YywnhXX2F06njQ/OE7a3Qeful43C5GUOsUksXWk89WoSFUU3iLeZW8lDpVO9atm8iZIEiLQTRC3H7NOXQ==}
/@types/chrome@0.0.268:
resolution: {integrity: sha512-7N1QH9buudSJ7sI8Pe4mBHJr5oZ48s0hcanI9w3wgijAlv1OZNUZve9JR4x42dn5lJ5Sm87V1JNfnoh10EnQlA==}
dependencies:
'@types/filesystem': 0.0.36
'@types/har-format': 1.2.15
dev: false
dev: true
/@types/estree@1.0.5:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
@@ -1932,11 +1932,11 @@ packages:
resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==}
dependencies:
'@types/filewriter': 0.0.33
dev: false
dev: true
/@types/filewriter@0.0.33:
resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==}
dev: false
dev: true
/@types/fs-extra@11.0.4:
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
@@ -1947,7 +1947,7 @@ packages:
/@types/har-format@1.2.15:
resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==}
dev: false
dev: true
/@types/hast@3.0.4:
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}