diff --git a/packages/wxt/src/builtin-modules/unimport.ts b/packages/wxt/src/builtin-modules/unimport.ts index a0b72bc58..3f3b83596 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 { extname } 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,18 @@ export default { }; `, }; + + const typeScriptFilePath = + options.eslintrc.filePath.slice(0, -extname(options.eslintrc.filePath)) + + '.d.ts'; + + const typeScriptFileEntry: WxtDirFileEntry = { + path: typeScriptFilePath, + text: `import type { ConfigObject } from "@eslint/core"; +declare const config: ConfigObject; +export default config; +`, + }; + + return [javaScriptFileEntry, typeScriptFileEntry]; }