From d64af5d4f0bb07640948c1ae098ad816cf87f1f4 Mon Sep 17 00:00:00 2001 From: Aaron Date: Wed, 24 Jul 2024 13:39:30 -0500 Subject: [PATCH] Move option out of experimental --- .../src/core/utils/building/resolve-config.ts | 26 +++++++++++-------- .../src/core/utils/testing/fake-objects.ts | 2 +- packages/wxt/src/types.ts | 18 +++++++------ pnpm-lock.yaml | 5 +--- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/packages/wxt/src/core/utils/building/resolve-config.ts b/packages/wxt/src/core/utils/building/resolve-config.ts index 557a7e1b..3b12b057 100644 --- a/packages/wxt/src/core/utils/building/resolve-config.ts +++ b/packages/wxt/src/core/utils/building/resolve-config.ts @@ -147,12 +147,8 @@ export async function resolveConfig( {}, ); - const experimental = defu(mergedConfig.experimental, { - extensionApi: 'webextension-polyfill' as const, - entrypointImporter: 'jiti' as const, - }); - - if (experimental.extensionApi === 'chrome') { + const extensionApi = mergedConfig.extensionApi ?? 'webextension-polyfill'; + if (extensionApi === 'chrome') { await ensureDependencyInstalled('@types/chrome', { dev: true, }); @@ -167,7 +163,13 @@ export async function resolveConfig( filterEntrypoints, env, fsCache: createFsCache(wxtDir), - imports: await getUnimportOptions(wxtDir, srcDir, logger, mergedConfig), + imports: await getUnimportOptions( + wxtDir, + srcDir, + logger, + extensionApi, + mergedConfig, + ), logger, manifest: await resolveManifestConfig(env, mergedConfig.manifest), manifestVersion, @@ -186,7 +188,10 @@ export async function resolveConfig( analysis: resolveAnalysisConfig(root, mergedConfig), userConfigMetadata: userConfigMetadata ?? {}, alias, - experimental, + extensionApi, + experimental: defu(mergedConfig.experimental, { + entrypointImporter: 'jiti' as const, + }), dev: { server: devServerConfig, reloadCommand, @@ -315,6 +320,7 @@ async function getUnimportOptions( wxtDir: string, srcDir: string, logger: Logger, + extensionApi: ResolvedConfig['extensionApi'], config: InlineConfig, ): Promise { if (config.imports === false) return false; @@ -335,9 +341,7 @@ async function getUnimportOptions( }, { package: - config.experimental?.extensionApi === 'chrome' - ? 'wxt/browser/chrome' - : 'wxt/browser', + extensionApi === 'chrome' ? 'wxt/browser/chrome' : 'wxt/browser', }, { package: 'wxt/sandbox' }, { package: 'wxt/storage' }, diff --git a/packages/wxt/src/core/utils/testing/fake-objects.ts b/packages/wxt/src/core/utils/testing/fake-objects.ts index c3f56672..39e714fd 100644 --- a/packages/wxt/src/core/utils/testing/fake-objects.ts +++ b/packages/wxt/src/core/utils/testing/fake-objects.ts @@ -296,8 +296,8 @@ export const fakeResolvedConfig = fakeObjectCreator(() => { transformManifest: () => {}, userConfigMetadata: {}, alias: {}, + extensionApi: 'webextension-polyfill', experimental: { - extensionApi: 'webextension-polyfill', entrypointImporter: 'jiti', }, dev: { diff --git a/packages/wxt/src/types.ts b/packages/wxt/src/types.ts index fb8cc5d1..1531a10f 100644 --- a/packages/wxt/src/types.ts +++ b/packages/wxt/src/types.ts @@ -292,17 +292,19 @@ export interface InlineConfig { * } */ alias?: Record; + /** + * Which extension API to use. + * + * - `"webextension-polyfill"`: Use `browser` and types from [`webextension-polyfill`](https://www.npmjs.com/package/webextension-polyfill) + * - `"chrome"` (experimental): Use the vanilla `browser`/`chrome` globals provided by the browser without any polyfills. Types provided by [`@types/chrome`](https://www.npmjs.com/package/@types/chrome), make sure to install the package or types won't work. + * + * @default "webextension-polyfill" + */ + extensionApi?: 'webextension-polyfill' | 'chrome'; /** * Experimental settings - use with caution. */ experimental?: { - /** - * Which extension API to use. To switch to `"chrome"`, make sure to - * install the `@types/chrome` package. - * - * @default "webextension-polyfill" - */ - extensionApi?: 'webextension-polyfill' | 'chrome'; /** * Method used to import entrypoint files during the build process to extract their options. * @@ -1189,8 +1191,8 @@ export interface ResolvedConfig { * Import aliases to absolute paths. */ alias: Record; + extensionApi: 'webextension-polyfill' | 'chrome'; experimental: { - extensionApi: 'webextension-polyfill' | 'chrome'; entrypointImporter: 'jiti' | 'vite-runtime' | 'vite-node'; }; dev: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8642d88..bb97ad21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -380,9 +380,6 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) devDependencies: - '@types/chrome': - specifier: ^0.0.268 - version: 0.0.268 '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -7266,7 +7263,7 @@ packages: peerDependencies: vite: ^4.0.0 || ^5.0.0 dependencies: - vite: 5.3.4(sass@1.77.8) + vite: 5.3.4(@types/node@20.14.11) dev: true /vitest@2.0.3: