From ab679ba413772849e0c263315587334b42c25ed0 Mon Sep 17 00:00:00 2001 From: Aaron Date: Sat, 25 Jul 2026 21:15:59 -0500 Subject: [PATCH] fix: Handle edge case where eslint version cannot be found --- packages/wxt/src/core/resolve-config.ts | 34 ++++++++++++++++--------- packages/wxt/src/types.ts | 6 ++--- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/wxt/src/core/resolve-config.ts b/packages/wxt/src/core/resolve-config.ts index 10c0eb7b..f04c711e 100644 --- a/packages/wxt/src/core/resolve-config.ts +++ b/packages/wxt/src/core/resolve-config.ts @@ -376,7 +376,11 @@ async function getUnimportOptions( config: InlineConfig, ): Promise { const disabled = config.imports === false; - const eslintrc = await getUnimportEslintOptions(wxtDir, config.imports); + const eslintrc = await getUnimportEslintOptions( + logger, + wxtDir, + config.imports, + ); // mlly sometimes picks up things as exports that aren't. That's what this array contains. const invalidExports = ['options']; @@ -516,28 +520,34 @@ async function getUnimportOptions( } async function getUnimportEslintOptions( + logger: Logger, wxtDir: string, options: InlineConfig['imports'], ): Promise { const inlineEnabled = options === false ? false : (options?.eslintrc?.enabled ?? 'auto'); - let enabled: ResolvedEslintrc['enabled']; const version = await getEslintVersion(); - let major = parseInt(version[0]) as Exclude< - ResolvedEslintrc['enabled'], - false - >; + const major = parseInt(version[0]); + let enabled: ResolvedEslintrc['enabled']; switch (inlineEnabled) { case 'auto': - if (isNaN(major)) enabled = false; - else if (major <= 8) enabled = 8; - else if (major >= 9) enabled = major; - else enabled = false; - break; case true: - enabled = major; + if (isNaN(major)) { + if (inlineEnabled === true) { + logger.warn( + 'Could not determine installed ESLint version, `eslint-auto-imports.mjs` not generated', + ); + } + enabled = false; + } else if (major <= 8) { + enabled = 8; + } else if (major >= 9) { + enabled = 9; + } else { + enabled = false; + } break; default: enabled = inlineEnabled; diff --git a/packages/wxt/src/types.ts b/packages/wxt/src/types.ts index 7ad8cb64..a3c5282a 100644 --- a/packages/wxt/src/types.ts +++ b/packages/wxt/src/types.ts @@ -1646,16 +1646,16 @@ export interface Eslintrc { * When true, generates a file that can be used by ESLint to know which * variables are valid globals. * - * - `true`: Version of `package.json``. - * - `false`: Don't generate the file. * - `'auto'`: Check if eslint is installed, and if it is, generate a compatible * config file. + * - `true`: Same as `'auto'`. + * - `false`: Don't generate the file. * - `8`: Generate a config file compatible with ESLint 8. * - `9`: Generate a config file compatible with ESLint 9. * * @default 'auto' */ - enabled?: false | true | 'auto' | 8 | 9; + enabled?: 'auto' | boolean | 8 | 9; /** * File path to save the generated eslint config. *