Skip to content

Commit

Permalink
fix(types): PublicPath type resolution with extensionApi: "chrome" (
Browse files Browse the repository at this point in the history
  • Loading branch information
aklinker1 authored Aug 4, 2024
1 parent e36549d commit ea97410
Show file tree
Hide file tree
Showing 7 changed files with 15 additions and 22 deletions.
9 changes: 2 additions & 7 deletions packages/wxt/src/browser/chrome.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
/// <reference types="chrome" />
import type { WxtRuntime, WxtI18n } from './index';

/**
* EXPERIMENTAL
*
Expand All @@ -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<Chrome, 'runtime' | 'i18n'> & {
runtime: WxtRuntime & Omit<Chrome['runtime'], 'getURL'>;
Expand Down
14 changes: 7 additions & 7 deletions packages/wxt/src/browser/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<Browser, 'runtime' | 'i18n'> & {
runtime: WxtRuntime & Omit<Browser['runtime'], 'getURL'>;
i18n: WxtI18n & Omit<Browser['i18n'], 'getMessage'>;
};

export interface WxtRuntime extends Runtime.Static {
export interface WxtRuntime {
// Overriden per-project
}

export interface WxtI18n extends I18n.Static {
export interface WxtI18n {
// Overriden per-project
}

Expand Down
2 changes: 2 additions & 0 deletions packages/wxt/src/client/content-scripts/ui/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ export function createIframeUi<TMounted>(
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);

Expand Down Expand Up @@ -258,6 +259,7 @@ function mountUi(
* Load the CSS for the current entrypoint.
*/
async function loadCss(): Promise<string> {
// @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`,
);
Expand Down
8 changes: 4 additions & 4 deletions packages/wxt/src/core/utils/building/generate-wxt-dir.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<PublicPath, \`\${string}.html\`>
Expand All @@ -117,9 +117,9 @@ declare module "${wxt.config.browserModule}" {
async function getI18nDeclarationEntry(): Promise<WxtDirFileEntry> {
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
*/
Expand Down
2 changes: 0 additions & 2 deletions packages/wxt/src/core/utils/building/resolve-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
1 change: 0 additions & 1 deletion packages/wxt/src/core/utils/testing/fake-objects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,6 @@ export const fakeResolvedConfig = fakeObjectCreator<ResolvedConfig>(() => {
userConfigMetadata: {},
alias: {},
extensionApi: 'webextension-polyfill',
browserModule: 'wxt/browser',
entrypointLoader: 'vite-node',
experimental: {},
dev: {
Expand Down
1 change: 0 additions & 1 deletion packages/wxt/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1215,7 +1215,6 @@ export interface ResolvedConfig {
*/
alias: Record<string, string>;
extensionApi: 'webextension-polyfill' | 'chrome';
browserModule: 'wxt/browser' | 'wxt/browser/chrome';
entrypointLoader: 'vite-node' | 'jiti';
experimental: {};
dev: {
Expand Down

0 comments on commit ea97410

Please sign in to comment.