From ea97410fb4c37afaba4e5852fef1999777b11098 Mon Sep 17 00:00:00 2001 From: Aaron Date: Sun, 4 Aug 2024 08:59:45 -0500 Subject: [PATCH] fix(types): `PublicPath` type resolution with `extensionApi: "chrome"` (#901) --- packages/wxt/src/browser/chrome.ts | 9 ++------- packages/wxt/src/browser/index.ts | 14 +++++++------- .../wxt/src/client/content-scripts/ui/index.ts | 2 ++ .../src/core/utils/building/generate-wxt-dir.ts | 8 ++++---- .../wxt/src/core/utils/building/resolve-config.ts | 2 -- .../wxt/src/core/utils/testing/fake-objects.ts | 1 - packages/wxt/src/types.ts | 1 - 7 files changed, 15 insertions(+), 22 deletions(-) diff --git a/packages/wxt/src/browser/chrome.ts b/packages/wxt/src/browser/chrome.ts index 6111ac7d..d95bf905 100644 --- a/packages/wxt/src/browser/chrome.ts +++ b/packages/wxt/src/browser/chrome.ts @@ -1,4 +1,6 @@ /// +import type { WxtRuntime, WxtI18n } from './index'; + /** * EXPERIMENTAL * @@ -7,13 +9,6 @@ * @module wxt/browser/chrome */ -export interface WxtRuntime { - // Overriden per-project -} -export interface WxtI18n { - // Overriden per-project -} - export type Chrome = typeof chrome; export type WxtBrowser = Omit & { runtime: WxtRuntime & Omit; diff --git a/packages/wxt/src/browser/index.ts b/packages/wxt/src/browser/index.ts index fee152da..eeb0a4f3 100644 --- a/packages/wxt/src/browser/index.ts +++ b/packages/wxt/src/browser/index.ts @@ -4,18 +4,18 @@ * @module wxt/browser */ -import originalBrowser, { Browser, Runtime, I18n } from 'webextension-polyfill'; +import originalBrowser, { Browser } from 'webextension-polyfill'; -export interface AugmentedBrowser extends Browser { - runtime: WxtRuntime; - i18n: WxtI18n; -} +export type AugmentedBrowser = Omit & { + runtime: WxtRuntime & Omit; + i18n: WxtI18n & Omit; +}; -export interface WxtRuntime extends Runtime.Static { +export interface WxtRuntime { // Overriden per-project } -export interface WxtI18n extends I18n.Static { +export interface WxtI18n { // Overriden per-project } diff --git a/packages/wxt/src/client/content-scripts/ui/index.ts b/packages/wxt/src/client/content-scripts/ui/index.ts index 9abd5cf6..c9ba6fb4 100644 --- a/packages/wxt/src/client/content-scripts/ui/index.ts +++ b/packages/wxt/src/client/content-scripts/ui/index.ts @@ -62,6 +62,7 @@ export function createIframeUi( const wrapper = document.createElement('div'); wrapper.setAttribute('data-wxt-iframe', ''); const iframe = document.createElement('iframe'); + // @ts-expect-error: getURL is defined per-project, but not inside the package iframe.src = browser.runtime.getURL(options.page); wrapper.appendChild(iframe); @@ -258,6 +259,7 @@ function mountUi( * Load the CSS for the current entrypoint. */ async function loadCss(): Promise { + // @ts-expect-error: getURL is defined per-project, but not inside the package const url = browser.runtime.getURL( `/content-scripts/${import.meta.env.ENTRYPOINT}.css`, ); diff --git a/packages/wxt/src/core/utils/building/generate-wxt-dir.ts b/packages/wxt/src/core/utils/building/generate-wxt-dir.ts index 386dd55d..74bdf433 100644 --- a/packages/wxt/src/core/utils/building/generate-wxt-dir.ts +++ b/packages/wxt/src/core/utils/building/generate-wxt-dir.ts @@ -94,9 +94,9 @@ async function getPathsDeclarationEntry( .join('\n'); const template = `// Generated by wxt -import "${wxt.config.browserModule}"; +import "wxt/browser"; -declare module "${wxt.config.browserModule}" { +declare module "wxt/browser" { export type PublicPath = {{ union }} type HtmlPublicPath = Extract @@ -117,9 +117,9 @@ declare module "${wxt.config.browserModule}" { async function getI18nDeclarationEntry(): Promise { const defaultLocale = wxt.config.manifest.default_locale; const template = `// Generated by wxt -import "${wxt.config.browserModule}"; +import "wxt/browser"; -declare module "${wxt.config.browserModule}" { +declare module "wxt/browser" { /** * See https://developer.chrome.com/docs/extensions/reference/i18n/#method-getMessage */ diff --git a/packages/wxt/src/core/utils/building/resolve-config.ts b/packages/wxt/src/core/utils/building/resolve-config.ts index 7bb7fcc7..6959b5b0 100644 --- a/packages/wxt/src/core/utils/building/resolve-config.ts +++ b/packages/wxt/src/core/utils/building/resolve-config.ts @@ -183,8 +183,6 @@ export async function resolveConfig( userConfigMetadata: userConfigMetadata ?? {}, alias, extensionApi, - browserModule: - extensionApi === 'chrome' ? 'wxt/browser/chrome' : 'wxt/browser', entrypointLoader: mergedConfig.entrypointLoader ?? 'vite-node', experimental: defu(mergedConfig.experimental, {}), dev: { diff --git a/packages/wxt/src/core/utils/testing/fake-objects.ts b/packages/wxt/src/core/utils/testing/fake-objects.ts index 63906398..51f628ae 100644 --- a/packages/wxt/src/core/utils/testing/fake-objects.ts +++ b/packages/wxt/src/core/utils/testing/fake-objects.ts @@ -297,7 +297,6 @@ export const fakeResolvedConfig = fakeObjectCreator(() => { userConfigMetadata: {}, alias: {}, extensionApi: 'webextension-polyfill', - browserModule: 'wxt/browser', entrypointLoader: 'vite-node', experimental: {}, dev: { diff --git a/packages/wxt/src/types.ts b/packages/wxt/src/types.ts index 747a6898..f65a7d6c 100644 --- a/packages/wxt/src/types.ts +++ b/packages/wxt/src/types.ts @@ -1215,7 +1215,6 @@ export interface ResolvedConfig { */ alias: Record; extensionApi: 'webextension-polyfill' | 'chrome'; - browserModule: 'wxt/browser' | 'wxt/browser/chrome'; entrypointLoader: 'vite-node' | 'jiti'; experimental: {}; dev: {