List imports by hand
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import messages from 'public/_locales/en/messages.json';
|
||||
import {} from 'wxt/browser';
|
||||
|
||||
export default defineBackground(() => {
|
||||
console.log(browser.runtime.id);
|
||||
|
||||
+65
-7
@@ -1,22 +1,80 @@
|
||||
/**
|
||||
* @module wxt/browser
|
||||
*/
|
||||
import originalBrowser from 'webextension-polyfill';
|
||||
import * as WebextensionPolyfill from 'webextension-polyfill';
|
||||
import originalBrowser, { Browser, Runtime, I18n } from 'webextension-polyfill';
|
||||
|
||||
export type { WebextensionPolyfill };
|
||||
|
||||
export interface AugmentedBrowser extends WebextensionPolyfill.Browser {
|
||||
export interface AugmentedBrowser extends Browser {
|
||||
runtime: WxtRuntime;
|
||||
i18n: WxtI18n;
|
||||
}
|
||||
|
||||
export interface WxtRuntime extends WebextensionPolyfill.Runtime.Static {
|
||||
export interface WxtRuntime extends Runtime.Static {
|
||||
// Overriden per-project
|
||||
}
|
||||
|
||||
export interface WxtI18n extends WebextensionPolyfill.I18n.Static {
|
||||
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.
|
||||
export {
|
||||
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,
|
||||
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';
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
import { browser, WebextensionPolyfill } from '~/browser';
|
||||
import { browser, Manifest } from '~/browser';
|
||||
import { logger } from './logger';
|
||||
import { MatchPattern } from '~/sandbox';
|
||||
|
||||
export function reloadContentScript(
|
||||
contentScript: WebextensionPolyfill.Manifest.ContentScript,
|
||||
) {
|
||||
export function reloadContentScript(contentScript: Manifest.ContentScript) {
|
||||
const manifest = browser.runtime.getManifest();
|
||||
if (manifest.manifest_version == 2) {
|
||||
void reloadContentScriptMv2(contentScript);
|
||||
@@ -14,7 +12,7 @@ export function reloadContentScript(
|
||||
}
|
||||
|
||||
export async function reloadContentScriptMv3(
|
||||
contentScript: WebextensionPolyfill.Manifest.ContentScript,
|
||||
contentScript: Manifest.ContentScript,
|
||||
) {
|
||||
const id = `wxt:${contentScript.js![0]}`;
|
||||
logger.log('Reloading content script:', contentScript);
|
||||
@@ -44,7 +42,7 @@ export async function reloadContentScriptMv3(
|
||||
}
|
||||
|
||||
export async function reloadContentScriptMv2(
|
||||
contentScript: WebextensionPolyfill.Manifest.ContentScript,
|
||||
contentScript: Manifest.ContentScript,
|
||||
) {
|
||||
throw Error('TODO: reloadContentScriptMv2');
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { WebextensionPolyfill } from '~/browser';
|
||||
import type { Manifest } from '~/browser';
|
||||
import { BuildOutput, EntrypointGroup, InternalConfig } from '~/types';
|
||||
import { findEntrypoints } from './find-entrypoints';
|
||||
import { generateTypesDir } from './generate-wxt-dir';
|
||||
@@ -24,7 +24,7 @@ export async function rebuild(
|
||||
},
|
||||
): Promise<{
|
||||
output: BuildOutput;
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest;
|
||||
manifest: Manifest.WebExtensionManifest;
|
||||
}> {
|
||||
const { default: ora } = await import('ora');
|
||||
const spinner = ora(`Preparing...`).start();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { WebextensionPolyfill } from '~/browser';
|
||||
import type { Manifest } from '~/browser';
|
||||
import { ContentScriptEntrypoint, InternalConfig } from '~/types';
|
||||
import { resolvePerBrowserOption } from './entrypoints';
|
||||
|
||||
@@ -19,7 +19,7 @@ export function hashContentScriptOptions(
|
||||
if (simplifiedOptions[key] == null) delete simplifiedOptions[key];
|
||||
});
|
||||
|
||||
const withDefaults: WebextensionPolyfill.Manifest.ContentScript = {
|
||||
const withDefaults: Manifest.ContentScript = {
|
||||
exclude_globs: [],
|
||||
exclude_matches: [],
|
||||
include_globs: [],
|
||||
@@ -46,7 +46,7 @@ export function hashContentScriptOptions(
|
||||
export function mapWxtOptionsToContentScript(
|
||||
options: ContentScriptEntrypoint['options'],
|
||||
config: InternalConfig,
|
||||
): Omit<WebextensionPolyfill.Manifest.ContentScript, 'js' | 'css'> {
|
||||
): Omit<Manifest.ContentScript, 'js' | 'css'> {
|
||||
return {
|
||||
matches: resolvePerBrowserOption(options.matches, config.browser),
|
||||
all_frames: resolvePerBrowserOption(options.allFrames, config.browser),
|
||||
|
||||
+12
-12
@@ -1,4 +1,4 @@
|
||||
import type { WebextensionPolyfill } from '~/browser';
|
||||
import type { Manifest } from '~/browser';
|
||||
import {
|
||||
Entrypoint,
|
||||
BackgroundEntrypoint,
|
||||
@@ -29,7 +29,7 @@ import defu from 'defu';
|
||||
* Writes the manifest to the output directory and the build output.
|
||||
*/
|
||||
export async function writeManifest(
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
manifest: Manifest.WebExtensionManifest,
|
||||
output: BuildOutput,
|
||||
config: InternalConfig,
|
||||
): Promise<void> {
|
||||
@@ -54,13 +54,13 @@ export async function generateMainfest(
|
||||
entrypoints: Entrypoint[],
|
||||
buildOutput: Omit<BuildOutput, 'manifest'>,
|
||||
config: InternalConfig,
|
||||
): Promise<WebextensionPolyfill.Manifest.WebExtensionManifest> {
|
||||
): Promise<Manifest.WebExtensionManifest> {
|
||||
const pkg = await getPackageJson(config);
|
||||
|
||||
const versionName = config.manifest.version_name ?? pkg?.version;
|
||||
const version = config.manifest.version ?? simplifyVersion(pkg?.version);
|
||||
|
||||
const baseManifest: WebextensionPolyfill.Manifest.WebExtensionManifest = {
|
||||
const baseManifest: Manifest.WebExtensionManifest = {
|
||||
manifest_version: config.manifestVersion,
|
||||
name: pkg?.name,
|
||||
description: pkg?.description,
|
||||
@@ -78,7 +78,7 @@ export async function generateMainfest(
|
||||
const manifest = defu(
|
||||
userManifest,
|
||||
baseManifest,
|
||||
) as WebextensionPolyfill.Manifest.WebExtensionManifest;
|
||||
) as Manifest.WebExtensionManifest;
|
||||
|
||||
addEntrypoints(manifest, entrypoints, buildOutput, config);
|
||||
|
||||
@@ -119,7 +119,7 @@ function simplifyVersion(versionName: string): string {
|
||||
}
|
||||
|
||||
function addEntrypoints(
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
manifest: Manifest.WebExtensionManifest,
|
||||
entrypoints: Entrypoint[],
|
||||
buildOutput: Omit<BuildOutput, 'manifest'>,
|
||||
config: InternalConfig,
|
||||
@@ -216,7 +216,7 @@ function addEntrypoints(
|
||||
config.outDir,
|
||||
'.html',
|
||||
);
|
||||
const options: WebextensionPolyfill.Manifest.ActionManifest = {};
|
||||
const options: Manifest.ActionManifest = {};
|
||||
if (popup.options.defaultIcon)
|
||||
options.default_icon = popup.options.defaultIcon;
|
||||
if (popup.options.defaultTitle)
|
||||
@@ -357,7 +357,7 @@ function addEntrypoints(
|
||||
|
||||
function discoverIcons(
|
||||
buildOutput: Omit<BuildOutput, 'manifest'>,
|
||||
): WebextensionPolyfill.Manifest.WebExtensionManifest['icons'] {
|
||||
): Manifest.WebExtensionManifest['icons'] {
|
||||
const icons: [string, string][] = [];
|
||||
// prettier-ignore
|
||||
// #region snippet
|
||||
@@ -390,7 +390,7 @@ function discoverIcons(
|
||||
}
|
||||
|
||||
function addDevModeCsp(
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
manifest: Manifest.WebExtensionManifest,
|
||||
config: InternalConfig,
|
||||
): void {
|
||||
const permission = `http://${config.server?.hostname ?? ''}/*`;
|
||||
@@ -423,7 +423,7 @@ function addDevModeCsp(
|
||||
}
|
||||
|
||||
function addDevModePermissions(
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
manifest: Manifest.WebExtensionManifest,
|
||||
config: InternalConfig,
|
||||
) {
|
||||
// For reloading the page
|
||||
@@ -511,7 +511,7 @@ export function getContentScriptsCssMap(
|
||||
}
|
||||
|
||||
function addPermission(
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
manifest: Manifest.WebExtensionManifest,
|
||||
permission: string,
|
||||
): void {
|
||||
manifest.permissions ??= [];
|
||||
@@ -520,7 +520,7 @@ function addPermission(
|
||||
}
|
||||
|
||||
function addHostPermission(
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
manifest: Manifest.WebExtensionManifest,
|
||||
hostPermission: string,
|
||||
): void {
|
||||
manifest.host_permissions ??= [];
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
import { resolve } from 'path';
|
||||
import { faker } from '@faker-js/faker';
|
||||
import merge from 'lodash.merge';
|
||||
import type { WebextensionPolyfill } from '~/browser';
|
||||
import type { Manifest } from '~/browser';
|
||||
import {
|
||||
FsCache,
|
||||
InternalConfig,
|
||||
@@ -157,12 +157,13 @@ export function fakeOutputFile(): OutputFile {
|
||||
return faker.helpers.arrayElement([fakeOutputAsset(), fakeOutputChunk()]);
|
||||
}
|
||||
|
||||
export const fakeManifest =
|
||||
fakeObjectCreator<WebextensionPolyfill.Manifest.WebExtensionManifest>(() => ({
|
||||
export const fakeManifest = fakeObjectCreator<Manifest.WebExtensionManifest>(
|
||||
() => ({
|
||||
manifest_version: faker.helpers.arrayElement([2, 3]),
|
||||
name: faker.string.alphanumeric(),
|
||||
version: `${faker.number.int()}.${faker.number.int()}.${faker.number.int()}`,
|
||||
}));
|
||||
}),
|
||||
);
|
||||
|
||||
export function fakeArray<T>(createItem: () => T, count = 3): T[] {
|
||||
const array: T[] = [];
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ import {
|
||||
defineDriver,
|
||||
Storage,
|
||||
} from 'unstorage';
|
||||
import { browser, WebextensionPolyfill } from '~/browser';
|
||||
import { browser, Storage as BrowserStorage } from '~/browser';
|
||||
|
||||
export interface WebExtensionDriverOptions {
|
||||
storageArea: 'sync' | 'local' | 'managed' | 'session';
|
||||
@@ -24,7 +24,7 @@ export const webExtensionDriver: (opts: WebExtensionDriverOptions) => Driver =
|
||||
};
|
||||
|
||||
const _storageListener: (
|
||||
changes: WebextensionPolyfill.Storage.StorageAreaSyncOnChangedChangesType,
|
||||
changes: BrowserStorage.StorageAreaSyncOnChangedChangesType,
|
||||
) => void = (changes) => {
|
||||
Object.entries(changes).forEach(([key, { newValue }]) => {
|
||||
_listeners.forEach((callback) => {
|
||||
|
||||
+12
-29
@@ -1,5 +1,5 @@
|
||||
import type * as vite from 'vite';
|
||||
import type { WebextensionPolyfill } from '~/browser';
|
||||
import type { Manifest, Scripting } from '~/browser';
|
||||
import { UnimportOptions } from 'unimport';
|
||||
import { LogLevel } from 'consola';
|
||||
import { ContentScriptContext } from '../client/content-scripts/content-script-context';
|
||||
@@ -167,9 +167,7 @@ export interface InlineConfig {
|
||||
* }
|
||||
* })
|
||||
*/
|
||||
transformManifest?: (
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
) => void;
|
||||
transformManifest?: (manifest: Manifest.WebExtensionManifest) => void;
|
||||
analysis?: {
|
||||
/**
|
||||
* Explicitly include bundle analysis when running `wxt build`. This can be overridden by the
|
||||
@@ -249,7 +247,7 @@ export type WxtViteConfig = Omit<
|
||||
>;
|
||||
|
||||
export interface BuildOutput {
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest;
|
||||
manifest: Manifest.WebExtensionManifest;
|
||||
publicAssets: OutputAsset[];
|
||||
steps: BuildStepOutput[];
|
||||
}
|
||||
@@ -326,10 +324,7 @@ export interface WxtDevServer
|
||||
* @param contentScript The manifest definition for a content script
|
||||
*/
|
||||
reloadContentScript: (
|
||||
contentScript: Omit<
|
||||
WebextensionPolyfill.Scripting.RegisteredContentScript,
|
||||
'id'
|
||||
>,
|
||||
contentScript: Omit<Scripting.RegisteredContentScript, 'id'>,
|
||||
) => void;
|
||||
}
|
||||
|
||||
@@ -474,51 +469,39 @@ export interface ContentScriptMainWorldDefinition
|
||||
}
|
||||
|
||||
export interface ContentScriptBaseDefinition extends ExcludableEntrypoint {
|
||||
matches: PerBrowserOption<
|
||||
WebextensionPolyfill.Manifest.ContentScript['matches']
|
||||
>;
|
||||
matches: PerBrowserOption<Manifest.ContentScript['matches']>;
|
||||
/**
|
||||
* See https://developer.chrome.com/docs/extensions/mv3/content_scripts/
|
||||
* @default "documentIdle"
|
||||
*/
|
||||
runAt?: PerBrowserOption<
|
||||
WebextensionPolyfill.Manifest.ContentScript['run_at']
|
||||
>;
|
||||
runAt?: PerBrowserOption<Manifest.ContentScript['run_at']>;
|
||||
/**
|
||||
* See https://developer.chrome.com/docs/extensions/mv3/content_scripts/
|
||||
* @default false
|
||||
*/
|
||||
matchAboutBlank?: PerBrowserOption<
|
||||
WebextensionPolyfill.Manifest.ContentScript['match_about_blank']
|
||||
Manifest.ContentScript['match_about_blank']
|
||||
>;
|
||||
/**
|
||||
* See https://developer.chrome.com/docs/extensions/mv3/content_scripts/
|
||||
* @default []
|
||||
*/
|
||||
excludeMatches?: PerBrowserOption<
|
||||
WebextensionPolyfill.Manifest.ContentScript['exclude_matches']
|
||||
>;
|
||||
excludeMatches?: PerBrowserOption<Manifest.ContentScript['exclude_matches']>;
|
||||
/**
|
||||
* See https://developer.chrome.com/docs/extensions/mv3/content_scripts/
|
||||
* @default []
|
||||
*/
|
||||
includeGlobs?: PerBrowserOption<
|
||||
WebextensionPolyfill.Manifest.ContentScript['include_globs']
|
||||
>;
|
||||
includeGlobs?: PerBrowserOption<Manifest.ContentScript['include_globs']>;
|
||||
/**
|
||||
* See https://developer.chrome.com/docs/extensions/mv3/content_scripts/
|
||||
* @default []
|
||||
*/
|
||||
excludeGlobs?: PerBrowserOption<
|
||||
WebextensionPolyfill.Manifest.ContentScript['exclude_globs']
|
||||
>;
|
||||
excludeGlobs?: PerBrowserOption<Manifest.ContentScript['exclude_globs']>;
|
||||
/**
|
||||
* See https://developer.chrome.com/docs/extensions/mv3/content_scripts/
|
||||
* @default false
|
||||
*/
|
||||
allFrames?: PerBrowserOption<
|
||||
WebextensionPolyfill.Manifest.ContentScript['all_frames']
|
||||
>;
|
||||
allFrames?: PerBrowserOption<Manifest.ContentScript['all_frames']>;
|
||||
/**
|
||||
* See https://developer.chrome.com/docs/extensions/mv3/content_scripts/
|
||||
* @default false
|
||||
@@ -578,7 +561,7 @@ export interface ExcludableEntrypoint {
|
||||
*/
|
||||
export type UserManifest = Partial<
|
||||
Omit<
|
||||
WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
Manifest.WebExtensionManifest,
|
||||
| 'background'
|
||||
| 'chrome_url_overrides'
|
||||
| 'devtools_page'
|
||||
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
} from './external';
|
||||
import { UnimportOptions } from 'unimport';
|
||||
import { ResolvedConfig } from 'c12';
|
||||
import type { WebextensionPolyfill } from '~/browser';
|
||||
import type { Manifest } from '~/browser';
|
||||
import type { PluginVisualizerOptions } from 'rollup-plugin-visualizer';
|
||||
|
||||
export interface InternalConfig {
|
||||
@@ -42,9 +42,7 @@ export interface InternalConfig {
|
||||
ignoredSources: string[];
|
||||
sourcesRoot: string;
|
||||
};
|
||||
transformManifest: (
|
||||
manifest: WebextensionPolyfill.Manifest.WebExtensionManifest,
|
||||
) => void;
|
||||
transformManifest: (manifest: Manifest.WebExtensionManifest) => void;
|
||||
analysis: {
|
||||
enabled: boolean;
|
||||
template: NonNullable<PluginVisualizerOptions['template']>;
|
||||
|
||||
Reference in New Issue
Block a user