From dd8d4fc29a78300d7598626825932f38f0bb9c38 Mon Sep 17 00:00:00 2001 From: Andrei L <1881266+unrevised6419@users.noreply.github.com> Date: Wed, 17 Dec 2025 16:29:09 +0100 Subject: [PATCH 1/3] fix(imports): generate .d.ts file for eslint > 9 auto imports --- packages/wxt/src/builtin-modules/unimport.ts | 46 +++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/wxt/src/builtin-modules/unimport.ts b/packages/wxt/src/builtin-modules/unimport.ts index a0b72bc58..e8d6ed790 100644 --- a/packages/wxt/src/builtin-modules/unimport.ts +++ b/packages/wxt/src/builtin-modules/unimport.ts @@ -6,8 +6,9 @@ import type { WxtModule, WxtResolvedUnimportOptions, } from '../types'; -import { type Unimport, createUnimport, toExports } from 'unimport'; +import { createUnimport, toExports, type Unimport } from 'unimport'; import UnimportPlugin from 'unimport/unplugin'; +import { basename, dirname, extname, join } from 'node:path'; export default defineWxtModule({ name: 'wxt:built-in:unimport', @@ -51,14 +52,13 @@ export default defineWxtModule({ if (!wxt.config.imports.eslintrc.enabled) return; - // Only generate ESLint config if that feature is enabled - entries.push( - await getEslintConfigEntry( - unimport, - wxt.config.imports.eslintrc.enabled, - wxt.config.imports, - ), + const eslintConfigEntries = await getEslintConfigEntry( + unimport, + wxt.config.imports.eslintrc.enabled, + wxt.config.imports, ); + + entries.push(...eslintConfigEntries); }); // Add vite plugin @@ -105,7 +105,7 @@ async function getEslintConfigEntry( unimport: Unimport, version: 8 | 9, options: WxtResolvedUnimportOptions, -): Promise { +): Promise { const globals = (await unimport.getImports()) .map((i) => i.as ?? i.name) .filter(Boolean) @@ -115,7 +115,7 @@ async function getEslintConfigEntry( return globals; }, {}); - if (version <= 8) return getEslint8ConfigEntry(options, globals); + if (version <= 8) return [getEslint8ConfigEntry(options, globals)]; else return getEslint9ConfigEntry(options, globals); } @@ -132,8 +132,8 @@ export function getEslint8ConfigEntry( export function getEslint9ConfigEntry( options: WxtResolvedUnimportOptions, globals: Record, -): WxtDirFileEntry { - return { +): WxtDirFileEntry[] { + const javaScriptFileEntry: WxtDirFileEntry = { path: options.eslintrc.filePath, text: `const globals = ${JSON.stringify(globals, null, 2)} @@ -147,4 +147,26 @@ export default { }; `, }; + + const javaScriptFileDirname = dirname(options.eslintrc.filePath); + const javaScriptFileExtension = extname(options.eslintrc.filePath); + const javaScriptFileBasename = basename( + options.eslintrc.filePath, + javaScriptFileExtension, + ); + + const typeScriptFilePath = join( + javaScriptFileDirname, + `${javaScriptFileBasename}.d.ts`, + ); + + const typeScriptFileEntry: WxtDirFileEntry = { + path: typeScriptFilePath, + text: `import type { ConfigObject } from "@eslint/core"; +declare const config: ConfigObject; +export default config; +`, + }; + + return [javaScriptFileEntry, typeScriptFileEntry]; } From 9c7166f5f9a423904832559983de67a67cc660e6 Mon Sep 17 00:00:00 2001 From: PatrykKuniczak Date: Fri, 24 Apr 2026 11:55:08 +0200 Subject: [PATCH 2/3] Simplify getting typeScriptFilePath --- packages/wxt/src/builtin-modules/unimport.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/packages/wxt/src/builtin-modules/unimport.ts b/packages/wxt/src/builtin-modules/unimport.ts index e8d6ed790..0433b39ac 100644 --- a/packages/wxt/src/builtin-modules/unimport.ts +++ b/packages/wxt/src/builtin-modules/unimport.ts @@ -148,17 +148,9 @@ export default { `, }; - const javaScriptFileDirname = dirname(options.eslintrc.filePath); - const javaScriptFileExtension = extname(options.eslintrc.filePath); - const javaScriptFileBasename = basename( - options.eslintrc.filePath, - javaScriptFileExtension, - ); - - const typeScriptFilePath = join( - javaScriptFileDirname, - `${javaScriptFileBasename}.d.ts`, - ); + const typeScriptFilePath = + options.eslintrc.filePath.slice(0, -extname(options.eslintrc.filePath)) + + '.d.ts'; const typeScriptFileEntry: WxtDirFileEntry = { path: typeScriptFilePath, From 839268dae6b4080a220a30cd1995358fd3a3178a Mon Sep 17 00:00:00 2001 From: PatrykKuniczak Date: Fri, 24 Apr 2026 15:40:35 +0200 Subject: [PATCH 3/3] fix: remove unused imports of unimport.ts --- packages/wxt/src/builtin-modules/unimport.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wxt/src/builtin-modules/unimport.ts b/packages/wxt/src/builtin-modules/unimport.ts index 0433b39ac..3f3b83596 100644 --- a/packages/wxt/src/builtin-modules/unimport.ts +++ b/packages/wxt/src/builtin-modules/unimport.ts @@ -8,7 +8,7 @@ import type { } from '../types'; import { createUnimport, toExports, type Unimport } from 'unimport'; import UnimportPlugin from 'unimport/unplugin'; -import { basename, dirname, extname, join } from 'node:path'; +import { extname } from 'node:path'; export default defineWxtModule({ name: 'wxt:built-in:unimport',