@santi020k/eslint-config-basic 3.5.4 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["/* eslint-disable complexity -- CLI planners and dispatchers intentionally cover many validated command branches */\n/* eslint-disable no-console -- CLI handlers own user-facing terminal output */\nimport { spawnSync } from 'node:child_process'\nimport { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { createRequire, findPackageJSON } from 'node:module'\nimport { basename, dirname, join } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport { findTailwindEntryPoint } from '@santi020k/eslint-config-core'\n\nimport {\n analyzeEslintConfig,\n ESLINT_CONFIG_FILENAMES,\n handleGenerateSkill\n} from './agent-skill-generator.js'\nimport { handleCompatibility, handleExplainRule } from './cli-advanced.js'\nimport { getExplicitConfigFeaturePackages, handleMigrateV3 } from './cli-migration.js'\nimport {\n addCompatibleConfigVersions,\n createInstallCommand,\n createInstallInvocation,\n detectPackageManager,\n findPnpmWorkspaceRoot,\n getCatalogPreference,\n getCompatibleConfigVersion } from './cli-package-manager.js'\nimport { handleExplainPreset } from './cli-preset.js'\nimport {\n handleBaseline,\n handleConfigTypes,\n handleProfile,\n handleSnapshot,\n handleSnapshotDiff\n} from './cli-workflows.js'\nimport { detectProjectOptions } from './index.js'\nimport { findCssComponentClasses } from './tailwind.js'\n\ninterface InstallResult {\n error?: Error\n status: null | number\n stderr?: Buffer | string\n stdout?: Buffer | string\n}\n\ntype InstallRunner = (\n command: string,\n args: string[],\n options: { cwd: string, encoding: 'utf8', maxBuffer: number, stdio: 'pipe' }\n) => InstallResult\n\nconst getDefaultConfigFilename = (cwd: string): string => {\n const packageJsonPath = join(cwd, 'package.json')\n\n if (!existsSync(packageJsonPath)) return 'eslint.config.mjs'\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as { type?: string }\n\n return packageJson.type === 'module' ? 'eslint.config.js' : 'eslint.config.mjs'\n } catch {\n return 'eslint.config.mjs'\n }\n}\n\nconst resolveConfigPath = (cwd: string): string => {\n const existingConfigPath = ESLINT_CONFIG_FILENAMES\n .map(filename => join(cwd, filename))\n .find(p => existsSync(p))\n\n return existingConfigPath ?? join(cwd, getDefaultConfigFilename(cwd))\n}\n\nconst getFrameworkKeys = (detectedFrameworks?: string[]): string[] => {\n const frameworkKeys = new Set(detectedFrameworks ?? [])\n\n if (\n frameworkKeys.has('next') ||\n frameworkKeys.has('expo') ||\n frameworkKeys.has('react-router') ||\n (frameworkKeys.has('tanstack-start') && !frameworkKeys.has('solid'))\n ) {\n frameworkKeys.add('react')\n }\n\n return [...frameworkKeys].sort()\n}\n\nconst toPropertyKey = (key: string): string => /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? key : `'${key}'`\n\nconst FRAMEWORK_PACKAGE_TO_KEY: Record<string, string> = {\n '@santi020k/eslint-config-angular': 'angular',\n '@santi020k/eslint-config-astro': 'astro',\n '@santi020k/eslint-config-expo': 'expo',\n '@santi020k/eslint-config-hono': 'hono',\n '@santi020k/eslint-config-lit': 'lit',\n '@santi020k/eslint-config-nest': 'nest',\n '@santi020k/eslint-config-next': 'next',\n '@santi020k/eslint-config-nuxt': 'nuxt',\n '@santi020k/eslint-config-preact': 'preact',\n '@santi020k/eslint-config-qwik': 'qwik',\n '@santi020k/eslint-config-react': 'react',\n '@santi020k/eslint-config-react-router': 'react-router',\n '@santi020k/eslint-config-remix': 'react-router',\n '@santi020k/eslint-config-slidev': 'slidev',\n '@santi020k/eslint-config-solid': 'solid',\n '@santi020k/eslint-config-svelte': 'svelte',\n '@santi020k/eslint-config-tanstack-start': 'tanstack-start',\n '@santi020k/eslint-config-vite': 'vite',\n '@santi020k/eslint-config-vue': 'vue'\n}\n\nconst FRAMEWORK_KEY_TO_PACKAGE = {\n ...Object.fromEntries(\n Object.entries(FRAMEWORK_PACKAGE_TO_KEY)\n .filter(([packageName]) => packageName !== '@santi020k/eslint-config-remix')\n .map(([packageName, framework]) => [framework, packageName])\n ),\n 'react-router': '@santi020k/eslint-config-react-router'\n} as Record<string, string>\n\nconst LITE_PACKAGE_NAME = '@santi020k/eslint-config-lite'\nconst INTEGRATIONS_PACKAGE_NAME = '@santi020k/eslint-config-integrations'\nconst ASTRO_DOCTOR_PACKAGE_NAME = '@santi020k/eslint-plugin-astro-doctor'\nconst BASIC_PACKAGE_NAME = '@santi020k/eslint-config-basic'\nconst FULL_PACKAGE_NAME = '@santi020k/eslint-config-full'\nconst TYPESCRIPT_PACKAGE_NAME = 'typescript'\n\nconst CATEGORY_PACKAGES = {\n extensions: '@santi020k/eslint-config-extensions',\n formats: '@santi020k/eslint-config-formats',\n libraries: '@santi020k/eslint-config-libraries',\n testing: '@santi020k/eslint-config-testing',\n tools: '@santi020k/eslint-config-tools'\n} as const\n\nconst PRESET_INSTALL_PACKAGES: Record<string, string[]> = {\n all: Object.values(CATEGORY_PACKAGES),\n app: [CATEGORY_PACKAGES.testing, CATEGORY_PACKAGES.tools],\n ci: [CATEGORY_PACKAGES.extensions, CATEGORY_PACKAGES.tools],\n library: [CATEGORY_PACKAGES.extensions, CATEGORY_PACKAGES.tools],\n monorepo: [CATEGORY_PACKAGES.extensions, CATEGORY_PACKAGES.tools]\n}\n\ntype DoctorFeatureCategory = keyof typeof CATEGORY_PACKAGES | 'frameworks'\n\ninterface DoctorFeatureActivation {\n detected: boolean\n enabled: boolean\n installed: boolean\n name: string\n package: string\n reason?: string\n}\n\ninterface DoctorProjectActivation {\n extensions: DoctorFeatureActivation[]\n formats: DoctorFeatureActivation[]\n frameworks: DoctorFeatureActivation[]\n ignores: string[]\n inactivePackages: { package: string, reason: string }[]\n libraries: DoctorFeatureActivation[]\n path: string\n runtime: string\n tailwind: {\n componentClasses: number\n detected: boolean\n entryPoint: null | string\n exceptionGuidance?: string\n unknownClassPolicy: 'fallback-off' | 'off' | 'strict' | 'strict-with-css-components'\n }\n testing: DoctorFeatureActivation[]\n tools: DoctorFeatureActivation[]\n typescript: {\n detected: boolean\n enabled: boolean\n installed: boolean\n mode: 'off' | 'syntax' | 'type-aware'\n package: string\n reason?: string\n tsconfig: null | string\n }\n}\n\nconst getConfigPathIfPresent = (cwd: string): null | string => {\n const configPath = ESLINT_CONFIG_FILENAMES\n .map(filename => join(cwd, filename))\n .find(p => existsSync(p))\n\n return configPath ?? null\n}\n\nconst readPackageJson = (cwd: string): null | Record<string, unknown> => {\n const packageJsonPath = join(cwd, 'package.json')\n\n if (!existsSync(packageJsonPath)) return null\n\n try {\n return JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as Record<string, unknown>\n } catch {\n return null\n }\n}\n\nconst getDeclaredDependencyNames = (packageJson: null | Record<string, unknown>): Set<string> => {\n const dependencyFields = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies'\n ]\n\n const names = new Set<string>()\n\n for (const field of dependencyFields) {\n const dependencies = packageJson?.[field]\n\n if (!dependencies || typeof dependencies !== 'object' || Array.isArray(dependencies)) continue\n\n for (const name of Object.keys(dependencies)) {\n names.add(name)\n }\n }\n\n return names\n}\n\nconst needsIntegrationPackage = (summary: ReturnType<typeof getProjectSummary>): boolean => (\n summary.libraries.length > 0 ||\n summary.testing.length > 0 ||\n summary.formats.length > 0 ||\n summary.tools.length > 0 ||\n summary.extensions.some(extension => extension !== 'boundaries')\n)\n\nconst hasPresetAll = (configContent: null | string): boolean => Boolean(\n configContent && (\n /\\bPreset\\.All\\b/.test(configContent) ||\n /preset\\s*:\\s*['\"]all['\"]/.test(configContent)\n )\n)\n\nconst getLiteInstallPackages = (\n summary: ReturnType<typeof getProjectSummary>,\n declaredDependencies: Set<string>\n): string[] => {\n const packages = new Set<string>([\n 'eslint',\n LITE_PACKAGE_NAME\n ])\n\n for (const framework of summary.frameworks) {\n const packageName = FRAMEWORK_KEY_TO_PACKAGE[framework]\n\n if (packageName) packages.add(packageName)\n }\n\n if (needsIntegrationPackage(summary)) {\n packages.add(INTEGRATIONS_PACKAGE_NAME)\n }\n\n if (summary.typescript && !declaredDependencies.has(TYPESCRIPT_PACKAGE_NAME)) {\n packages.add(TYPESCRIPT_PACKAGE_NAME)\n }\n\n return [...packages]\n}\n\nconst getInstallPackages = (\n summary: ReturnType<typeof getProjectSummary>,\n declaredDependencies: Set<string>,\n explicitFeaturePackages: string[] = []\n): string[] => {\n const usesFullPackage = declaredDependencies.has(FULL_PACKAGE_NAME)\n const packages = new Set<string>(['eslint'])\n\n if (!usesFullPackage) packages.add(BASIC_PACKAGE_NAME)\n\n if (!usesFullPackage) {\n for (const framework of summary.frameworks) {\n const packageName = FRAMEWORK_KEY_TO_PACKAGE[framework]\n\n if (packageName) packages.add(packageName)\n }\n\n const categorySelections = [\n [summary.extensions, CATEGORY_PACKAGES.extensions],\n [summary.formats, CATEGORY_PACKAGES.formats],\n [summary.libraries, CATEGORY_PACKAGES.libraries],\n [summary.testing, CATEGORY_PACKAGES.testing],\n [summary.tools, CATEGORY_PACKAGES.tools]\n ] as const\n\n for (const [features, packageName] of categorySelections) {\n if (features.length > 0) packages.add(packageName)\n }\n\n for (const packageName of explicitFeaturePackages) {\n packages.add(packageName)\n }\n\n for (const packageName of PRESET_INSTALL_PACKAGES[summary.preset] ?? []) {\n packages.add(packageName)\n }\n }\n\n if (summary.typescript) packages.add(TYPESCRIPT_PACKAGE_NAME)\n\n return [...packages].filter(packageName => !declaredDependencies.has(packageName))\n}\n\nconst hasLintScript = (cwd: string): boolean => {\n const packageJson = readPackageJson(cwd) as null | { scripts?: Record<string, string> }\n\n return Boolean(packageJson?.scripts?.lint)\n}\n\nconst getWorkspacePatternsFromPackageJson = (packageJson: null | Record<string, unknown>): string[] => {\n const workspaces = packageJson?.workspaces\n\n if (Array.isArray(workspaces)) {\n return workspaces.filter((value): value is string => typeof value === 'string')\n }\n\n if (workspaces && typeof workspaces === 'object' && Array.isArray((workspaces as { packages?: unknown }).packages)) {\n return (workspaces as { packages: unknown[] }).packages.filter((value): value is string => typeof value === 'string')\n }\n\n return []\n}\n\nconst getWorkspacePatternsFromPnpm = (cwd: string): string[] => {\n const workspacePath = join(cwd, 'pnpm-workspace.yaml')\n\n if (!existsSync(workspacePath)) return []\n\n const content = readFileSync(workspacePath, 'utf8')\n const patterns: string[] = []\n let inPackages = false\n\n for (const line of content.split(/\\r?\\n/)) {\n if (/^packages:\\s*$/.test(line)) {\n inPackages = true\n\n continue\n }\n\n if (inPackages && /^\\S/.test(line)) break\n\n const match = inPackages ? /^\\s*-\\s*['\"]?([^'\"]+)['\"]?\\s*$/.exec(line) : null\n\n if (match?.[1] && !match[1].startsWith('!')) patterns.push(match[1])\n }\n\n return patterns\n}\n\nconst expandWorkspacePattern = (cwd: string, pattern: string): string[] => {\n const normalized = pattern.replace(/\\/$/, '')\n\n if (!normalized.endsWith('/*')) return []\n\n const base = normalized.slice(0, -2)\n const basePath = join(cwd, base)\n\n if (!existsSync(basePath)) return []\n\n return readdirSync(basePath, { withFileTypes: true })\n .filter(entry => entry.isDirectory())\n .map(entry => `${base}/${entry.name}`)\n .filter(projectPath => existsSync(join(cwd, projectPath, 'package.json')))\n}\n\nconst detectWorkspaceProjects = (cwd: string): string[] => {\n const patterns = [\n ...getWorkspacePatternsFromPackageJson(readPackageJson(cwd)),\n ...getWorkspacePatternsFromPnpm(cwd)\n ]\n\n return [...new Set(patterns.flatMap(pattern => expandWorkspacePattern(cwd, pattern)))].sort()\n}\n\nconst createExplicitOptions = (cwd: string): string[] => {\n // Project summarization is declared later beside the doctor workflow that also consumes it.\n // eslint-disable-next-line no-use-before-define\n const summary = getProjectSummary(cwd)\n const options: string[] = []\n\n const features = [...new Set([\n ...summary.extensions,\n ...summary.formats,\n ...summary.libraries,\n ...summary.testing,\n ...summary.tools\n ])].sort()\n\n if (summary.typescript) options.push(' typescript: true,')\n\n if (summary.frameworks.length > 0) {\n options.push(\n ' frameworks: {',\n ...summary.frameworks.map(framework => ` ${toPropertyKey(framework)}: true,`),\n ' },'\n )\n }\n\n if (features.length > 0) {\n options.push(\n ' features: {',\n ...features.map(feature => ` ${toPropertyKey(feature)}: true,`),\n ' },'\n )\n }\n\n return options\n}\n\nconst createConfigContent = (cwd: string, explicit = false): { configContent: string, configPath: string } => {\n const explicitOptions = explicit ? createExplicitOptions(cwd) : []\n\n const invocation = explicitOptions.length > 0 ?\n ['export default defineConfig({', ...explicitOptions, '})'] :\n ['export default defineConfig()']\n\n const configContent = [\n 'import { defineConfig } from \\'@santi020k/eslint-config-basic\\'',\n '',\n ...invocation,\n ''\n ].join('\\n')\n\n return {\n configContent,\n configPath: resolveConfigPath(cwd)\n }\n}\n\nconst formatList = (values: undefined | unknown[]): string => {\n if (!values?.length) return 'none'\n\n return values.join(', ')\n}\n\nconst getProjectSummary = (cwd: string) => {\n const options = detectProjectOptions(cwd)\n const workspaceProjects = detectWorkspaceProjects(cwd)\n let typescriptMode: DoctorProjectActivation['typescript']['mode'] = 'off'\n\n if (options.typescript) {\n typescriptMode = options.typescript === 'syntax' ? 'syntax' : 'type-aware'\n }\n\n return {\n detectedProjects: Object.keys(options.projects ?? {}).sort(),\n extensions: options.extensions ?? [],\n formats: options.formats ?? [],\n frameworks: getFrameworkKeys(options.detectedFrameworks),\n libraries: options.libraries ?? [],\n nextMode: options.nextMode ?? 'n/a',\n preset: options.preset ?? 'basic',\n runtime: options.runtime ?? 'universal',\n testing: options.testing ?? [],\n tools: options.tools ?? [],\n typescript: Boolean(options.typescript),\n typescriptMode,\n workspaceProjects\n }\n}\n\nconst getDetectedProjectPaths = (cwd: string): string[] => {\n const summary = getProjectSummary(cwd)\n\n return summary.workspaceProjects.length > 0 ?\n [...new Set([...summary.detectedProjects, ...summary.workspaceProjects])] :\n ['.']\n}\n\nconst getTailwindUnknownClassPolicy = (\n detected: boolean,\n entryPoint: null | string,\n componentClasses = 0\n): DoctorProjectActivation['tailwind']['unknownClassPolicy'] => {\n if (!detected) return 'off'\n\n if (!entryPoint) return 'fallback-off'\n\n return componentClasses > 0 ? 'strict-with-css-components' : 'strict'\n}\n\nconst getTailwindEntryPoints = (cwd: string) => getDetectedProjectPaths(cwd).flatMap(projectPath => {\n const projectRoot = projectPath === '.' ? cwd : join(cwd, projectPath)\n const summary = getProjectSummary(projectRoot)\n\n if (!summary.libraries.includes('tailwind')) return []\n\n const entryPoint = findTailwindEntryPoint(projectRoot) ?? null\n const componentClasses = entryPoint ? findCssComponentClasses(projectRoot, entryPoint).length : 0\n\n return [{\n componentClasses,\n entryPoint,\n path: projectPath,\n unknownClassPolicy: getTailwindUnknownClassPolicy(true, entryPoint, componentClasses)\n }]\n})\n\nconst getDeclarationProjectWarnings = (cwd: string): string[] => (\n getDetectedProjectPaths(cwd).flatMap(projectPath => {\n const projectRoot = projectPath === '.' ? cwd : join(cwd, projectPath)\n const summary = getProjectSummary(projectRoot)\n\n if (summary.typescriptMode !== 'syntax') return []\n\n const packageName = readPackageJson(projectRoot)?.name\n const packageLabel = typeof packageName === 'string' ? `${projectPath} (${packageName})` : projectPath\n\n return [\n `TypeScript declarations were detected in ${packageLabel}, but no supported package-local tsconfig was found. ` +\n 'The package uses syntax-only linting to avoid a project-service parse failure. Add a tsconfig.json that includes ' +\n 'the declarations for type-aware linting, or add their patterns to `typescript.untypedFiles` when a parent ' +\n 'type-aware project intentionally owns them.'\n ]\n })\n)\n\nconst getInstallProjectSummary = (cwd: string): ReturnType<typeof getProjectSummary> => {\n const rootSummary = getProjectSummary(cwd)\n\n const projectPaths = [...new Set([\n ...rootSummary.detectedProjects,\n ...rootSummary.workspaceProjects\n ])]\n\n const projectSummaries = projectPaths.map(projectPath => (\n getProjectSummary(join(cwd, projectPath))\n ))\n\n const summaries = [rootSummary, ...projectSummaries]\n let typescriptMode: DoctorProjectActivation['typescript']['mode'] = 'off'\n\n if (summaries.some(summary => summary.typescriptMode === 'type-aware')) {\n typescriptMode = 'type-aware'\n } else if (summaries.some(summary => summary.typescriptMode === 'syntax')) {\n typescriptMode = 'syntax'\n }\n\n return {\n ...rootSummary,\n extensions: [...new Set(summaries.flatMap(summary => summary.extensions))],\n formats: [...new Set(summaries.flatMap(summary => summary.formats))],\n frameworks: [...new Set(summaries.flatMap(summary => summary.frameworks))].sort(),\n libraries: [...new Set(summaries.flatMap(summary => summary.libraries))],\n testing: [...new Set(summaries.flatMap(summary => summary.testing))],\n tools: [...new Set(summaries.flatMap(summary => summary.tools))],\n typescript: summaries.some(summary => summary.typescript),\n typescriptMode\n }\n}\n\nconst getWorkspaceDeclaredConfigPackages = (\n cwd: string,\n summary: ReturnType<typeof getProjectSummary>\n): string[] => {\n const packages = new Set<string>()\n\n for (const projectPath of summary.detectedProjects) {\n for (const packageName of getDeclaredDependencyNames(readPackageJson(join(cwd, projectPath)))) {\n if (packageName.startsWith('@santi020k/eslint-config-')) packages.add(packageName)\n }\n }\n\n return [...packages]\n}\n\nconst createStandardsContent = (cwd: string): string => {\n const summary = getProjectSummary(cwd)\n\n return [\n '# ESLint Standards',\n '',\n 'This document was generated from the active project dependencies detected by `@santi020k/eslint-config-basic`.',\n '',\n '## Active Profile',\n '',\n `- TypeScript: ${summary.typescript ? 'enabled' : 'disabled'}`,\n `- Preset: ${summary.preset}`,\n `- Runtime: ${summary.runtime}`,\n `- Next.js mode: ${summary.nextMode}`,\n `- Frameworks: ${formatList(summary.frameworks)}`,\n `- Libraries: ${formatList(summary.libraries)}`,\n `- Testing: ${formatList(summary.testing)}`,\n `- Formats: ${formatList(summary.formats)}`,\n `- Tools: ${formatList(summary.tools)}`,\n `- Extensions: ${formatList(summary.extensions)}`,\n '',\n '## Recommended Config',\n '',\n '```js',\n 'import { defineConfig } from \\'@santi020k/eslint-config-basic\\'',\n '',\n 'export default await defineConfig()',\n '```',\n '',\n 'Use `basic-eslint explain` when you want to inspect what the zero-config setup detects.'\n ].join('\\n')\n}\n\nconst getCliVersion = (): string => {\n const cliDir = dirname(fileURLToPath(import.meta.url))\n const packageJsonPath = join(cliDir, '..', 'package.json')\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as { version?: string }\n\n return packageJson.version ?? 'unknown'\n } catch {\n return 'unknown'\n }\n}\n\nconst printUsage = () => {\n console.log([\n 'Usage: basic-eslint <command> [options]',\n '',\n 'Commands:',\n ' init Create eslint.config.js/mjs if missing',\n ' update Regenerate eslint.config.js/mjs from detection',\n ' explain Print detected v3 config inputs',\n ' explain-preset Compare the current config with a preset',\n ' inspect Print detected inputs and active config features',\n ' install Install missing packages for detected v3 features',\n ' doctor Check project setup for common v3 adoption issues',\n ' compatibility Check runtime and config package compatibility',\n ' config-types Emit and verify portable ESLint config declarations',\n ' docs Generate ESLINT_STANDARDS.md from detection',\n ' migrate Plan or apply v1-to-v2 and v2-to-v3 migrations',\n ' baseline Suppress existing violations for incremental adoption',\n ' profile Compare ESLint performance and report slow rules',\n ' snapshot Save the effective rules for representative files',\n ' diff Compare effective rules with the saved snapshot',\n ' generate-skill Generate AI agent standards files',\n '',\n 'Options:',\n ' --analyze-source explain-preset: lint source and preview autofix without writing',\n ' --force Overwrite existing generated skill sections/files',\n ' --check Verify generated files, migrations, or snapshots without writing',\n ' --concurrency profile: off, auto, or a worker count',\n ' --create generate-skill: scaffold a root AGENTS.md when missing',\n ' --dry-run install: print the detected install command without running it',\n ' --explicit init: write detected settings explicitly',\n ' --file explain/explain-preset/profile/snapshot/diff: file or lint target (repeatable)',\n ' --fix doctor: safely repair generated config and package metadata',\n ' --full migrate --to v3: choose the batteries-included package',\n ' --json Print JSON for commands that support it',\n ' --lite-install doctor: print the deprecated v2 Lite install command (removed in v4)',\n ' --max-duration profile: maximum duration in milliseconds',\n ' --max-rule-time profile: maximum time for the slowest rule in milliseconds',\n ' --max-warnings profile: maximum warning count',\n ' --compatibility explain-preset: write a temporary compatibility override',\n ' --output explain-preset: compatibility override path',\n ' --preset baseline: enable ci or pedantic strict mode before suppressing',\n ' --prune baseline: remove suppressions for resolved violations',\n ' --rules-only snapshot: store only effective rules for compact CI review',\n ' --semantic-only explain-preset: preview or write only non-formatting fixes',\n ' --snapshot-path snapshot/diff: override .eslint-config-snapshot.json',\n ' --to migrate: target version (v2 or v3)',\n ' --verbose doctor: print per-project activation details',\n ' --with-eslint-mcp generate-skill: scaffold the official ESLint MCP server',\n ' --write Apply safe migrations for commands that support it',\n ' --help, -h Show this help message',\n ' --version, -v Show CLI version'\n ].join('\\n'))\n}\n\nconst COMMAND_OPTIONS: Partial<Record<string, string[]>> = {\n baseline: ['--json', '--preset', '--prune'],\n compatibility: ['--json'],\n 'config-types': ['--file', '--json'],\n diff: ['--file', '--json', '--snapshot-path'],\n docs: [],\n doctor: ['--fix', '--json', '--lite-install', '--verbose'],\n explain: ['--file', '--json'],\n 'explain-preset': [\n '--analyze-source',\n '--compatibility',\n '--file',\n '--json',\n '--output',\n '--semantic-only',\n '--write'\n ],\n 'generate-skill': ['--check', '--create', '--force', '--with-eslint-mcp'],\n init: ['--check', '--explicit'],\n inspect: ['--json'],\n install: ['--dry-run'],\n migrate: ['--check', '--full', '--json', '--to', '--write'],\n profile: ['--concurrency', '--file', '--json', '--max-duration', '--max-rule-time', '--max-warnings'],\n snapshot: ['--check', '--file', '--json', '--rules-only', '--snapshot-path'],\n update: []\n}\n\nconst VALUE_OPTIONS = new Set([\n '--concurrency',\n '--file',\n '--max-duration',\n '--max-rule-time',\n '--max-warnings',\n '--output',\n '--preset',\n '--snapshot-path',\n '--to'\n])\n\nconst printCommandUsage = (command: string): void => {\n let positional = ''\n\n if (command === 'explain') positional = ' [rule]'\n else if (command === 'explain-preset') positional = ' <preset>'\n\n const options = COMMAND_OPTIONS[command] ?? []\n\n console.log([\n 'Usage: basic-eslint <command> [options]',\n '',\n `Usage: basic-eslint ${command}${positional}${options.length > 0 ? ' [options]' : ''}`,\n ...(options.length > 0 ? ['', 'Options:', ...options.map(option => ` ${option}`)] : [])\n ].join('\\n'))\n}\n\nconst validateCommandArguments = (\n command: string,\n args: string[]\n): { ok: boolean, positional?: string } => {\n const allowed = COMMAND_OPTIONS[command]\n\n if (!allowed) return { ok: true }\n\n const allowedOptions = new Set(allowed)\n const positionals: string[] = []\n\n for (let index = 0; index < args.length; index++) {\n const argument = args[index]\n\n if (!argument.startsWith('-')) {\n positionals.push(argument)\n\n continue\n }\n\n const option = argument.includes('=') ? argument.slice(0, argument.indexOf('=')) : argument\n\n if (!allowedOptions.has(option)) {\n console.error(`Unknown option for ${command}: ${option}`)\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n if (argument.includes('=') && !VALUE_OPTIONS.has(option)) {\n console.error(`Option ${option} does not accept a value.`)\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n if (VALUE_OPTIONS.has(option) && !argument.includes('=')) {\n const value = args[index + 1]\n\n if (!value || value.startsWith('-')) {\n console.error(\n ['--max-duration', '--max-rule-time', '--max-warnings'].includes(option) ?\n `${option} must be a non-negative number.` :\n `Option ${option} requires a value.`\n )\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n index++\n } else if (VALUE_OPTIONS.has(option) && argument.endsWith('=')) {\n console.error(\n ['--max-duration', '--max-rule-time', '--max-warnings'].includes(option) ?\n `${option} must be a non-negative number.` :\n `Option ${option} requires a value.`\n )\n\n process.exitCode = 1\n\n return { ok: false }\n }\n }\n\n const maximumPositionals = command === 'explain' || command === 'explain-preset' ? 1 : 0\n\n if (positionals.length > maximumPositionals) {\n console.error(`Unexpected argument for ${command}: ${positionals[maximumPositionals]}`)\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n return { ok: true, positional: positionals[0] }\n}\n\nexport const handleInit = (cwd: string = process.cwd(), check = false, explicit = false) => {\n const configPath = resolveConfigPath(cwd)\n\n if (check) {\n const exists = existsSync(configPath)\n\n console.log(JSON.stringify({\n configFile: exists ? basename(configPath) : null,\n exists,\n ok: exists\n }, null, 2))\n\n if (!exists) process.exitCode = 1\n\n return\n }\n\n if (existsSync(configPath)) {\n console.error(`⚠️ ${basename(configPath)} already exists. Skipping...`)\n\n return\n }\n\n console.log('🔍 Detecting project settings...')\n\n const { configContent } = createConfigContent(cwd, explicit)\n\n writeFileSync(configPath, configContent)\n\n console.log(`✅ Created ${basename(configPath)} with auto-detected settings!`)\n\n console.log('🚀 Ready to lint!')\n}\n\nexport const handleUpdate = (cwd: string = process.cwd()) => {\n console.log('🔍 Detecting project settings...')\n\n const { configContent, configPath } = createConfigContent(cwd)\n\n if (existsSync(configPath)) {\n const backupPath = `${configPath}.bak`\n const existing = readFileSync(configPath, 'utf8')\n\n writeFileSync(backupPath, existing)\n\n console.log(`📦 Backed up existing config to ${basename(backupPath)}`)\n }\n\n writeFileSync(configPath, configContent)\n\n console.log(`✅ Updated ${basename(configPath)} with auto-detected settings!`)\n\n console.log('🚀 Ready to lint!')\n}\n\nexport const handleExplain = (cwd: string = process.cwd(), json = false) => {\n const summary = getProjectSummary(cwd)\n\n if (json) {\n console.log(JSON.stringify(summary, null, 2))\n\n return\n }\n\n console.log([\n 'ESLint Basic detected configuration:',\n `- TypeScript: ${summary.typescript ? 'enabled' : 'disabled'}`,\n `- Preset: ${summary.preset}`,\n `- Runtime: ${summary.runtime}`,\n `- Next.js mode: ${summary.nextMode}`,\n `- Frameworks: ${formatList(summary.frameworks)}`,\n `- Libraries: ${formatList(summary.libraries)}`,\n `- Testing: ${formatList(summary.testing)}`,\n `- Formats: ${formatList(summary.formats)}`,\n `- Tools: ${formatList(summary.tools)}`,\n `- Extensions: ${formatList(summary.extensions)}`\n ].join('\\n'))\n}\n\nexport const handleInspect = async (cwd: string = process.cwd(), json = false) => {\n const summary = getProjectSummary(cwd)\n const activeConfig = await analyzeEslintConfig(cwd)\n\n const payload = {\n activeConfig,\n detected: summary,\n packageManager: detectPackageManager(cwd),\n tailwindEntryPoints: getTailwindEntryPoints(cwd)\n }\n\n if (json) {\n console.log(JSON.stringify(payload, null, 2))\n\n return\n }\n\n console.log([\n 'ESLint Basic inspection:',\n `- Package manager: ${payload.packageManager}`,\n `- Config source: ${activeConfig?.source ?? 'not found'}`,\n `- Config file: ${activeConfig?.configFile ?? 'none'}`,\n `- TypeScript: ${summary.typescript ? 'enabled' : 'disabled'}`,\n `- Preset: ${summary.preset}`,\n `- Runtime: ${summary.runtime}`,\n `- Frameworks: ${formatList(summary.frameworks)}`,\n `- Libraries: ${formatList(summary.libraries)}`,\n `- Testing: ${formatList(summary.testing)}`,\n `- Formats: ${formatList(summary.formats)}`,\n `- Tools: ${formatList(summary.tools)}`,\n `- Extensions: ${formatList(summary.extensions)}`,\n `- Workspace projects: ${formatList(summary.workspaceProjects)}`\n ].join('\\n'))\n}\n\ninterface DuplicateEslintInfo {\n configVersion: string\n projectVersion: string\n}\n\ninterface PackageMetadata {\n engines?: { node?: string }\n name?: string\n peerDependencies?: { eslint?: string }\n version?: string\n}\n\ninterface SemverApi {\n Range: new(range: string) => {\n range: string\n set: { value: string }[][]\n }\n minVersion: (range: string) => null | { version: string }\n satisfies: (version: string, range: string) => boolean\n subset: (subRange: string, superRange: string) => boolean\n validRange: (range: string) => null | string\n}\n\nconst semver = createRequire(import.meta.url)('semver') as SemverApi\n\nconst intersectTwoSemverRanges = (left: string, right: string): null | string => {\n if (semver.subset(left, right)) return left\n\n if (semver.subset(right, left)) return right\n\n const intersections = new Set<string>()\n const leftRange = new semver.Range(left)\n const rightRange = new semver.Range(right)\n\n for (const leftComparators of leftRange.set) {\n for (const rightComparators of rightRange.set) {\n const candidate = [...leftComparators, ...rightComparators]\n .map(comparator => comparator.value)\n .filter(Boolean)\n .join(' ')\n\n const normalized = new semver.Range(candidate || '*').range || '*'\n\n if (semver.minVersion(normalized)) intersections.add(normalized)\n }\n }\n\n return intersections.size > 0 ? [...intersections].join(' || ') : null\n}\n\nconst intersectSemverRanges = (ranges: string[]): null | string => {\n const validRanges = ranges.filter(range => semver.validRange(range) !== null)\n\n if (validRanges.length !== ranges.length || validRanges.length === 0) return null\n\n let intersection = validRanges[0]\n\n for (const range of validRanges.slice(1)) {\n intersection = intersectTwoSemverRanges(intersection, range) ?? ''\n\n if (!intersection) return null\n }\n\n return intersection\n}\n\nconst readPackageMetadataFromMain = (mainPath: string): null | PackageMetadata => {\n let directory = dirname(mainPath)\n\n for (let depth = 0; depth < 4; depth++) {\n const packagePath = join(directory, 'package.json')\n\n if (existsSync(packagePath)) {\n const metadata = JSON.parse(readFileSync(packagePath, 'utf8')) as PackageMetadata\n\n // Resolution by the requested specifier is authoritative. npm aliases\n // such as `typescript: npm:@typescript/typescript6@...` intentionally\n // expose a manifest whose real name differs from the installed key.\n if (metadata.name && metadata.version) return metadata\n }\n\n directory = dirname(directory)\n }\n\n return null\n}\n\nconst resolvePackageMetadata = (cwd: string, packageName: string): null | PackageMetadata => {\n const candidateRoots = [...new Set([\n cwd,\n findPnpmWorkspaceRoot(cwd)\n ].filter((root): root is string => Boolean(root)))]\n\n for (const candidateRoot of candidateRoots) {\n try {\n const manifestPath = findPackageJSON(\n packageName,\n pathToFileURL(join(candidateRoot, 'package.json'))\n )\n\n if (manifestPath) {\n const metadata = JSON.parse(readFileSync(manifestPath, 'utf8')) as PackageMetadata\n\n return metadata\n }\n } catch {\n // Fall through to main-entry and aggregate-package resolution.\n }\n\n try {\n const projectRequire = createRequire(join(candidateRoot, 'package.json'))\n\n try {\n const metadata = readPackageMetadataFromMain(projectRequire.resolve(packageName))\n\n if (metadata) return metadata\n } catch {\n const integrationsMain = projectRequire.resolve(INTEGRATIONS_PACKAGE_NAME)\n const integrationsRequire = createRequire(integrationsMain)\n const metadata = readPackageMetadataFromMain(integrationsRequire.resolve(packageName))\n\n if (metadata) return metadata\n }\n } catch {\n // Try a sibling workspace package below.\n }\n\n for (const projectPath of detectWorkspaceProjects(candidateRoot)) {\n const metadata = readPackageJson(join(candidateRoot, projectPath)) as null | PackageMetadata\n\n if (metadata?.name === packageName) return metadata\n }\n }\n\n return null\n}\n\ninterface NodeEngineAssessment {\n compatible: boolean\n consumerRange: null | string\n requiredRange: null | string\n targetRange: null | string\n}\n\nconst assessConsumerNodeEngine = (\n cwd: string,\n packageJson: null | Record<string, unknown>\n): NodeEngineAssessment => {\n const declaredConfigPackages = [...getDeclaredDependencyNames(packageJson)]\n .filter(packageName => packageName.startsWith('@santi020k/eslint-config-'))\n\n const requiredRanges = declaredConfigPackages.flatMap(packageName => {\n const range = resolvePackageMetadata(cwd, packageName)?.engines?.node\n\n return range ? [range] : []\n })\n\n const requiredRange = intersectSemverRanges(requiredRanges)\n const engines = packageJson?.engines\n\n const consumerRange = engines && typeof engines === 'object' && !Array.isArray(engines) ?\n (engines as Record<string, unknown>).node :\n null\n\n const normalizedConsumerRange = typeof consumerRange === 'string' ? consumerRange : null\n\n if (requiredRanges.length === 0) {\n return {\n compatible: true,\n consumerRange: normalizedConsumerRange,\n requiredRange: null,\n targetRange: null\n }\n }\n\n if (!requiredRange) {\n return {\n compatible: false,\n consumerRange: normalizedConsumerRange,\n requiredRange: null,\n targetRange: null\n }\n }\n\n if (!normalizedConsumerRange || !semver.validRange(normalizedConsumerRange)) {\n return {\n compatible: false,\n consumerRange: normalizedConsumerRange,\n requiredRange,\n targetRange: requiredRange\n }\n }\n\n const compatible = requiredRanges.every(range => semver.subset(normalizedConsumerRange, range))\n\n return {\n compatible,\n consumerRange: normalizedConsumerRange,\n requiredRange,\n targetRange: compatible ?\n null :\n intersectSemverRanges([normalizedConsumerRange, ...requiredRanges])\n }\n}\n\nconst getConsumerNodeEngineWarning = (\n cwd: string,\n packageJson: null | Record<string, unknown>\n): null | string => {\n const assessment = assessConsumerNodeEngine(cwd, packageJson)\n\n if (assessment.compatible) return null\n\n if (!assessment.requiredRange) {\n return 'Installed config packages do not share a compatible Node engine range.'\n }\n\n if (!assessment.consumerRange) {\n return `package.json does not declare engines.node; installed config packages require ${assessment.requiredRange}.`\n }\n\n if (!semver.validRange(assessment.consumerRange)) {\n return `package.json engines.node ${assessment.consumerRange} is invalid; ` +\n `installed config packages require ${assessment.requiredRange}.`\n }\n\n return `package.json engines.node ${assessment.consumerRange} permits unsupported runtimes; ` +\n `installed config packages require ${assessment.requiredRange}.`\n}\n\nconst getAstroDoctorNodeWarning = (metadata: PackageMetadata): null | string => {\n const nodeRange = metadata.engines?.node\n\n if (!nodeRange || semver.satisfies(process.versions.node, nodeRange)) return null\n\n return `Astro Doctor ${metadata.version ?? ''} requires Node ${nodeRange}, ` +\n `but the current runtime is ${process.versions.node}.`\n}\n\nconst getAstroDoctorEslintWarning = (\n metadata: PackageMetadata,\n eslintMetadata: null | PackageMetadata\n): null | string => {\n const eslintRange = metadata.peerDependencies?.eslint\n const eslintVersion = eslintMetadata?.version\n\n if (!eslintRange || !eslintVersion || semver.satisfies(eslintVersion, eslintRange)) return null\n\n return `Astro Doctor ${metadata.version ?? ''} requires ESLint ${eslintRange}, ` +\n `but this project resolves ${eslintVersion}.`\n}\n\nconst getAstroDoctorCompatibilityWarnings = (cwd: string, enabled: boolean): string[] => {\n if (!enabled) return []\n\n const pluginMetadata = resolvePackageMetadata(cwd, ASTRO_DOCTOR_PACKAGE_NAME)\n\n if (!pluginMetadata) {\n return [\n `Astro Doctor is enabled, but ${ASTRO_DOCTOR_PACKAGE_NAME} could not be resolved. ` +\n 'Reinstall dependencies or disable the `astro-doctor` feature.'\n ]\n }\n\n const eslintMetadata = resolvePackageMetadata(cwd, 'eslint')\n\n return [\n getAstroDoctorNodeWarning(pluginMetadata),\n getAstroDoctorEslintWarning(pluginMetadata, eslintMetadata)\n ].filter((warning): warning is string => warning !== null)\n}\n\n/**\n * Detects whether the project and the config packages resolve two different\n * physical copies of ESLint (e.g. a project pinning an older ESLint while the\n * config packages resolve their own ESLint 10 dependency). Only ESLint 10 is\n * supported; two parallel copies can also apply subtly different rule behavior\n * between editor and CLI.\n */\nexport const findDuplicateEslint = (cwd: string = process.cwd()): DuplicateEslintInfo | null => {\n try {\n const projectRequire = createRequire(join(cwd, 'package.json'))\n const projectEslintPkgPath = projectRequire.resolve('eslint/package.json')\n const coreMainPath = projectRequire.resolve('@santi020k/eslint-config-core')\n const coreRequire = createRequire(coreMainPath)\n const coreEslintPkgPath = coreRequire.resolve('eslint/package.json')\n\n if (projectEslintPkgPath === coreEslintPkgPath) return null\n\n const projectVersion = (JSON.parse(readFileSync(projectEslintPkgPath, 'utf8')) as { version?: string }).version ?? 'unknown'\n const configVersion = (JSON.parse(readFileSync(coreEslintPkgPath, 'utf8')) as { version?: string }).version ?? 'unknown'\n\n if (projectVersion === configVersion) return null\n\n return { configVersion, projectVersion }\n } catch {\n return null\n }\n}\n\nconst validateConfigContent = (\n configContent: string,\n hasV1FrameworkImports: boolean,\n declaredDependencies: Set<string>,\n summary: ReturnType<typeof getProjectSummary>\n): string[] => {\n const warnings: string[] = []\n\n if (hasV1FrameworkImports) {\n warnings.push('Config still imports v1 framework packages. Run `basic-eslint migrate --write` or switch to framework booleans.')\n }\n\n const usesComposerCall = /from\\s*['\"]@santi020k\\/eslint-config-(?:basic|full|lite)['\"]/.test(configContent) &&\n /\\b(?:defineConfig|eslintConfig)\\s*\\(/.test(configContent)\n\n const usesRecommendedComposer = /from\\s*['\"]@santi020k\\/eslint-config-(?:basic|full)\\/recommended['\"]/.test(\n configContent\n )\n\n const usesBasicComposer = usesComposerCall || usesRecommendedComposer\n\n const hasDetectedProjectScopes = summary.workspaceProjects.every(project => (\n summary.detectedProjects.includes(project)\n ))\n\n if (\n summary.workspaceProjects.length > 0 &&\n !configContent.includes('projects:') &&\n !(usesBasicComposer && hasDetectedProjectScopes)\n ) {\n warnings.push('Workspace packages were detected, but the root config does not use `projects` scoping.')\n }\n\n if (configContent.includes(LITE_PACKAGE_NAME)) {\n const missingFrameworkPackages = summary.frameworks\n .map(framework => FRAMEWORK_KEY_TO_PACKAGE[framework])\n .filter((packageName): packageName is string => Boolean(packageName))\n .filter(packageName => !declaredDependencies.has(packageName))\n\n if (missingFrameworkPackages.length > 0) {\n warnings.push(\n `Lite config detected ${formatList(summary.frameworks)}, but these framework config packages are not declared: ` +\n `${missingFrameworkPackages.join(', ')}. Install them or disable those frameworks.`\n )\n }\n\n if (needsIntegrationPackage(summary) && !declaredDependencies.has(INTEGRATIONS_PACKAGE_NAME)) {\n warnings.push(\n `Lite config detected optional integrations, but ${INTEGRATIONS_PACKAGE_NAME} is not declared. ` +\n 'Install it or remove the selected libraries, testing tools, formats, tools, and extension integrations.'\n )\n }\n\n if (hasPresetAll(configContent)) {\n warnings.push(\n 'Lite config uses Preset.All, which enables every optional integration and reduces the dependency benefits of lite. ' +\n 'Prefer enabling only the integrations this project uses.'\n )\n }\n }\n\n const missingPackages = getInstallPackages(\n summary,\n declaredDependencies,\n getExplicitConfigFeaturePackages(configContent)\n )\n\n if (missingPackages.length > 0) {\n warnings.push(\n `The active configuration requires undeclared packages: ${missingPackages.join(', ')}. ` +\n 'Run `basic-eslint install` to add the modular v3 dependency set.'\n )\n }\n\n return warnings\n}\n\nconst validateProjectSetup = (\n cwd: string,\n configPath: null | string,\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n hasV1FrameworkImports: boolean\n) => {\n const issues: string[] = []\n const warnings: string[] = []\n\n if (!readPackageJson(cwd)) {\n issues.push('package.json is missing or invalid.')\n }\n\n if (!configPath) {\n warnings.push('No eslint.config.js/mjs/cjs file found. Run `basic-eslint init` to create one.')\n } else if (!activeConfig && !hasV1FrameworkImports) {\n issues.push(`${basename(configPath)} could not be loaded. Run ESLint directly to see the import error.`)\n }\n\n if (!hasLintScript(cwd)) {\n warnings.push('No `lint` script found in package.json.')\n }\n\n return { issues, warnings }\n}\n\nconst isAstroDoctorConfigured = (\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n configContent: null | string\n): boolean => [\n activeConfig?.extensions.includes('Astro Doctor') ?? false,\n configContent?.includes('astro-doctor') ?? false,\n configContent?.includes('AstroDoctor') ?? false\n].includes(true)\n\nconst isAstroConfigured = (\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n summary: ReturnType<typeof getProjectSummary>\n): boolean => [\n activeConfig?.frameworks.includes('Astro') ?? false,\n summary.frameworks.includes('astro')\n].some(Boolean)\n\nconst checkAstroDoctorStatus = (\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n configContent: null | string,\n summary: ReturnType<typeof getProjectSummary>,\n warnings: string[]\n): boolean => {\n const astroDoctorEnabled = isAstroDoctorConfigured(activeConfig, configContent)\n const astroEnabled = isAstroConfigured(activeConfig, summary)\n\n if (astroDoctorEnabled && !astroEnabled) {\n warnings.push(\n 'Astro Doctor is enabled without Astro. Enable `frameworks: { astro: true }` or remove the `astro-doctor` feature.'\n )\n } else if (astroEnabled && !astroDoctorEnabled) {\n warnings.push(\n 'Astro was detected without Astro Doctor. Enable `features: { \"astro-doctor\": true }` for additional Astro diagnostics.'\n )\n }\n\n return astroDoctorEnabled\n}\n\nconst checkDuplicateEslint = (cwd: string, warnings: string[]) => {\n const duplicateEslint = findDuplicateEslint(cwd)\n\n if (duplicateEslint) {\n warnings.push(\n `Two ESLint copies are installed: the project resolves ${duplicateEslint.projectVersion} while the config packages resolve ${duplicateEslint.configVersion}. ` +\n 'Only ESLint 10 is supported, and parallel copies can apply different rule behavior between your editor and CLI. ' +\n 'Align the project\\'s eslint version with the config\\'s (or dedupe via your package manager).'\n )\n }\n}\n\nconst getTailwindEntryPointWarnings = (cwd: string): string[] => (\n getTailwindEntryPoints(cwd).flatMap(({ entryPoint, path: projectPath }) => {\n if (entryPoint) return []\n\n return [\n `Tailwind CSS was detected in ${projectPath}, but no conventional CSS entry point was found. ` +\n '`better-tailwindcss/no-unknown-classes` falls back to off; set `tailwind.entryPoint` ' +\n 'to enable strict validation or `tailwind.noUnknownClasses: false` to document a mixed CSS system.'\n ]\n })\n)\n\nconst buildDoctorDiagnosis = (\n cwd: string,\n packageJson: null | Record<string, unknown>,\n configPath: null | string,\n configContent: null | string,\n hasV1FrameworkImports: boolean,\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n declaredDependencies: Set<string>,\n summary: ReturnType<typeof getProjectSummary>\n): { issues: string[], warnings: string[] } => {\n const { issues, warnings } = validateProjectSetup(cwd, configPath, activeConfig, hasV1FrameworkImports)\n\n if (configContent) {\n warnings.push(...validateConfigContent(configContent, hasV1FrameworkImports, declaredDependencies, summary))\n }\n\n const astroDoctorEnabled = checkAstroDoctorStatus(activeConfig, configContent, summary, warnings)\n\n warnings.push(...getAstroDoctorCompatibilityWarnings(cwd, astroDoctorEnabled))\n\n checkDuplicateEslint(cwd, warnings)\n\n warnings.push(...getDeclarationProjectWarnings(cwd))\n\n warnings.push(...getTailwindEntryPointWarnings(cwd))\n\n const nodeEngineWarning = getConsumerNodeEngineWarning(cwd, packageJson)\n\n if (nodeEngineWarning) warnings.push(nodeEngineWarning)\n\n return { issues, warnings }\n}\n\nconst DOCTOR_FEATURE_ALIASES: Record<string, string> = {\n 'astro-doctor': 'Astro Doctor',\n 'best-practices': 'Best Practices',\n compat: 'Browser Compat',\n nest: 'NestJS',\n next: 'Next.js',\n node: 'Node.js',\n solid: 'SolidJS',\n 'tanstack-start': 'TanStack Start',\n tailwind: 'Tailwind CSS'\n}\n\nconst normalizeDoctorFeature = (value: string): string => {\n const comparableValue = DOCTOR_FEATURE_ALIASES[value] ?? value\n\n return comparableValue.toLowerCase().replaceAll(/[^a-z0-9]/g, '')\n}\n\nconst isDoctorFeatureEnabled = (name: string, enabled: string[]): boolean => {\n const normalizedName = normalizeDoctorFeature(name)\n\n return enabled.some(value => normalizeDoctorFeature(value) === normalizedName)\n}\n\nconst getTypeScriptConfig = (cwd: string): null | string => [\n 'tsconfig.json',\n 'tsconfig.base.json',\n 'tsconfig.app.json',\n 'tsconfig.node.json',\n 'tsconfig.eslint.json'\n].find(fileName => existsSync(join(cwd, fileName))) ?? null\n\nconst getCategoryPackageInstalled = (\n cwd: string,\n packageName: string\n): boolean => [\n packageName,\n INTEGRATIONS_PACKAGE_NAME,\n FULL_PACKAGE_NAME\n].some(candidate => resolvePackageMetadata(cwd, candidate) !== null)\n\nconst createDoctorFeatureActivations = (\n cwd: string,\n category: DoctorFeatureCategory,\n detected: string[],\n enabled: string[],\n includeEnabled = false\n): DoctorFeatureActivation[] => {\n const names = [...detected]\n\n if (includeEnabled) {\n for (const enabledName of enabled) {\n if (!isDoctorFeatureEnabled(enabledName, names)) names.push(enabledName)\n }\n }\n\n return names.map(name => {\n const packageName = category === 'frameworks' ?\n Object.entries(FRAMEWORK_KEY_TO_PACKAGE)\n .find(([framework]) => isDoctorFeatureEnabled(name, [framework]))?.[1] :\n CATEGORY_PACKAGES[category]\n\n if (!packageName) throw new Error(`Unknown doctor ${category} feature: ${name}`)\n\n const installed = getCategoryPackageInstalled(cwd, packageName)\n const isDetected = isDoctorFeatureEnabled(name, detected)\n const isEnabled = installed && isDoctorFeatureEnabled(name, enabled)\n let reason: string | undefined\n\n if (!installed) {\n reason = isDetected ?\n `Detected, but ${packageName} is not installed.` :\n `Enabled in the active config, but ${packageName} is not installed.`\n } else if (!isEnabled) {\n reason = 'Detected and installed, but the active config did not load this pack.'\n }\n\n return {\n detected: isDetected,\n enabled: isEnabled,\n installed,\n name,\n package: packageName,\n ...(reason ? { reason } : {})\n }\n })\n}\n\nconst getInactiveDoctorPackages = (\n cwd: string,\n detectedFrameworks: string[],\n summary: ReturnType<typeof getProjectSummary>,\n activeConfig?: NonNullable<Awaited<ReturnType<typeof analyzeEslintConfig>>>\n): DoctorProjectActivation['inactivePackages'] => {\n const inactivePackages = Object.entries(FRAMEWORK_KEY_TO_PACKAGE)\n .filter(([framework, packageName]) => (\n !detectedFrameworks.includes(framework) &&\n !isDoctorFeatureEnabled(framework, activeConfig?.frameworks ?? []) &&\n resolvePackageMetadata(cwd, packageName) !== null\n ))\n .map(([, packageName]) => ({\n package: packageName,\n reason: 'Installed, but no matching framework signal was detected in this project.'\n }))\n\n for (const [category, packageName] of Object.entries(CATEGORY_PACKAGES)) {\n if (\n summary[category as keyof typeof CATEGORY_PACKAGES].length === 0 &&\n (activeConfig?.[category as keyof typeof CATEGORY_PACKAGES]?.length ?? 0) === 0 &&\n resolvePackageMetadata(cwd, packageName) !== null\n ) {\n inactivePackages.push({\n package: packageName,\n reason: `Installed, but no ${category} signals were detected in this project.`\n })\n }\n }\n\n return inactivePackages\n}\n\nconst getDoctorProjectActivations = async (cwd: string): Promise<DoctorProjectActivation[]> => {\n const rootSummary = getProjectSummary(cwd)\n\n const projectPaths = [...new Set([\n '.',\n ...rootSummary.detectedProjects,\n ...rootSummary.workspaceProjects\n ])].sort((left, right) => {\n if (left === '.') return -1\n\n if (right === '.') return 1\n\n return left.localeCompare(right)\n })\n\n return Promise.all(projectPaths.map(async projectPath => {\n const projectRoot = projectPath === '.' ? cwd : join(cwd, projectPath)\n const summary = getProjectSummary(projectRoot)\n const projectActiveConfig = await analyzeEslintConfig(cwd, { projectPath, projectPaths }) ?? undefined\n const tsconfig = getTypeScriptConfig(projectRoot)\n const typescriptInstalled = resolvePackageMetadata(projectRoot, TYPESCRIPT_PACKAGE_NAME) !== null\n const typescriptEnabled = summary.typescript && Boolean(projectActiveConfig?.typescript)\n const tailwindDetected = summary.libraries.includes('tailwind')\n const tailwindEntryPoint = tailwindDetected ? findTailwindEntryPoint(projectRoot) ?? null : null\n\n const tailwindComponentClasses = tailwindEntryPoint ?\n findCssComponentClasses(projectRoot, tailwindEntryPoint).length :\n 0\n\n let typescriptMode: DoctorProjectActivation['typescript']['mode'] = 'off'\n let typescriptReason: string | undefined\n\n if (typescriptEnabled) {\n typescriptMode = summary.typescriptMode\n }\n\n if (!typescriptInstalled && summary.typescript) {\n typescriptReason = summary.typescriptMode === 'syntax' ?\n 'TypeScript declarations were detected, but TypeScript is not installed.' :\n 'A tsconfig was detected, but TypeScript is not installed.'\n } else if (typescriptInstalled && !summary.typescript) {\n typescriptReason = 'Installed, but no supported tsconfig was detected in this project.'\n } else if (typescriptInstalled && summary.typescript && !typescriptEnabled) {\n typescriptReason = 'Detected and installed, but the active config did not enable TypeScript.'\n }\n\n return {\n extensions: createDoctorFeatureActivations(\n projectRoot,\n 'extensions',\n summary.extensions,\n projectActiveConfig?.extensions ?? [],\n true\n ),\n formats: createDoctorFeatureActivations(\n projectRoot,\n 'formats',\n summary.formats,\n projectActiveConfig?.formats ?? [],\n true\n ),\n frameworks: createDoctorFeatureActivations(\n projectRoot,\n 'frameworks',\n summary.frameworks,\n projectActiveConfig?.frameworks ?? [],\n true\n ),\n ignores: projectActiveConfig?.ignores ?? [],\n inactivePackages: getInactiveDoctorPackages(projectRoot, summary.frameworks, summary, projectActiveConfig),\n libraries: createDoctorFeatureActivations(\n projectRoot,\n 'libraries',\n summary.libraries,\n projectActiveConfig?.libraries ?? [],\n true\n ),\n path: projectPath,\n runtime: summary.runtime,\n tailwind: {\n componentClasses: tailwindComponentClasses,\n detected: tailwindDetected,\n entryPoint: tailwindEntryPoint,\n ...(tailwindDetected ?\n {\n exceptionGuidance: tailwindEntryPoint ?\n 'Keep unknown-class exceptions project-scoped with anchored `tailwind.ignore` patterns; ' +\n 'use a JSX comment for a one-line MDX directive.' :\n 'Set a project-scoped `tailwind.entryPoint` before adding unknown-class exceptions.'\n } :\n {}),\n unknownClassPolicy: getTailwindUnknownClassPolicy(\n tailwindDetected,\n tailwindEntryPoint,\n tailwindComponentClasses\n )\n },\n testing: createDoctorFeatureActivations(\n projectRoot,\n 'testing',\n summary.testing,\n projectActiveConfig?.testing ?? [],\n true\n ),\n tools: createDoctorFeatureActivations(\n projectRoot,\n 'tools',\n summary.tools,\n projectActiveConfig?.tools ?? [],\n true\n ),\n typescript: {\n detected: summary.typescript,\n enabled: typescriptEnabled,\n installed: typescriptInstalled,\n mode: typescriptMode,\n package: TYPESCRIPT_PACKAGE_NAME,\n ...(typescriptReason ? { reason: typescriptReason } : {}),\n tsconfig\n }\n }\n }))\n}\n\nconst formatDoctorActivation = (features: DoctorFeatureActivation[]): string => (\n features.length === 0 ?\n 'none' :\n features.map(feature => {\n const states = [\n feature.installed ? 'I' : '-',\n feature.detected ? 'D' : '-',\n feature.enabled ? 'E' : '-'\n ].join('')\n\n return `${feature.name}[${states}]`\n }).join(',')\n)\n\nconst formatDoctorProjectTable = (projects: DoctorProjectActivation[]): string[] => [\n '',\n 'Per-project activation (I=installed, D=detected, E=enabled):',\n 'Project | Runtime | TypeScript | Tailwind entry | Frameworks | Formats | Libraries | Extensions | Testing | Tools | Ignores',\n '--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---',\n ...projects.flatMap(project => {\n const typescriptStates = [\n project.typescript.installed ? 'I' : '-',\n project.typescript.detected ? 'D' : '-',\n project.typescript.enabled ? 'E' : '-'\n ].join('')\n\n const row = [\n project.path,\n project.runtime,\n `${project.typescript.mode}:${project.typescript.tsconfig ?? 'none'}[${typescriptStates}]`,\n project.tailwind.componentClasses > 0 ?\n `${project.tailwind.entryPoint ?? 'none'} (${project.tailwind.componentClasses} CSS classes)` :\n project.tailwind.entryPoint ?? 'none',\n formatDoctorActivation(project.frameworks),\n formatDoctorActivation(project.formats),\n formatDoctorActivation(project.libraries),\n formatDoctorActivation(project.extensions),\n formatDoctorActivation(project.testing),\n formatDoctorActivation(project.tools),\n formatList(project.ignores)\n ].join(' | ')\n\n const explanations = [\n project.typescript.reason,\n ...project.frameworks.map(feature => feature.reason),\n ...project.formats.map(feature => feature.reason),\n ...project.libraries.map(feature => feature.reason),\n ...project.extensions.map(feature => feature.reason),\n ...project.testing.map(feature => feature.reason),\n ...project.tools.map(feature => feature.reason),\n ...project.inactivePackages.map(item => `${item.package}: ${item.reason}`)\n ].filter((reason): reason is string => Boolean(reason))\n\n return [\n row,\n ...explanations.map(reason => ` ${project.path}: ${reason}`)\n ]\n })\n]\n\nconst outputDoctorResult = (\n json: boolean,\n verbose: boolean,\n configPath: null | string,\n packageManager: string,\n summary: ReturnType<typeof getProjectSummary>,\n installCommand: string | undefined,\n requiredPackages: string[],\n issues: string[],\n warnings: string[],\n projects: DoctorProjectActivation[],\n fixes: string[] = []\n): void => {\n let status = 'passed'\n\n if (issues.length > 0) {\n status = 'failed'\n } else if (warnings.length > 0) {\n status = 'passed with warnings'\n }\n\n const payload = {\n configFile: configPath ? basename(configPath) : null,\n fixes,\n ...(installCommand ? { installCommand } : {}),\n issues,\n packageManager,\n projects,\n requiredPackages,\n status,\n warnings,\n workspaceProjects: summary.workspaceProjects\n }\n\n if (json) {\n console.log(JSON.stringify(payload, null, 2))\n\n if (issues.length > 0) process.exitCode = 1\n\n return\n }\n\n console.log([\n `ESLint Basic doctor: ${status}`,\n `- Package manager: ${payload.packageManager}`,\n `- Config file: ${payload.configFile ?? 'none'}`,\n `- Workspace projects: ${formatList(summary.workspaceProjects)}`,\n `- Required packages: ${formatList(requiredPackages)}`,\n ...(installCommand ? [`- Install command: ${installCommand}`] : []),\n ...(verbose ? formatDoctorProjectTable(projects) : []),\n ...(fixes.length > 0 ? ['', 'Fixes applied:', ...fixes.map(fix => `- ${fix}`)] : []),\n ...(issues.length > 0 ? ['', 'Issues:', ...issues.map(issue => `- ${issue}`)] : []),\n ...(warnings.length > 0 ? ['', 'Warnings:', ...warnings.map(warning => `- ${warning}`)] : [])\n ].join('\\n'))\n\n if (issues.length > 0) process.exitCode = 1\n}\n\nconst createDoctorBackupPath = (filePath: string): string => {\n const preferred = `${filePath}.doctor.bak`\n\n if (!existsSync(preferred)) return preferred\n\n let index = 2\n\n while (existsSync(`${preferred}.${index}`)) index++\n\n return `${preferred}.${index}`\n}\n\nconst getDoctorDependencyVersion = (packageName: string): string => {\n if (packageName === 'eslint') return '^10.0.0'\n\n if (packageName === TYPESCRIPT_PACKAGE_NAME) return '^5.0.0'\n\n return '^3.0.0'\n}\n\nconst applyDoctorFixes = (\n cwd: string,\n packageJson: null | Record<string, unknown>,\n configPath: null | string,\n configContent: null | string,\n summary: ReturnType<typeof getProjectSummary>\n): string[] => {\n const fixes: string[] = []\n\n if (packageJson) {\n const updated = structuredClone(packageJson) as {\n devDependencies?: Record<string, string>\n engines?: Record<string, string>\n scripts?: Record<string, string>\n }\n\n let packageChanged = false\n\n updated.scripts ??= {}\n\n if (!updated.scripts.lint) {\n updated.scripts.lint = 'eslint .'\n\n packageChanged = true\n\n fixes.push('Added the `lint` script.')\n }\n\n updated.devDependencies ??= {}\n\n const declared = getDeclaredDependencyNames(packageJson)\n\n const explicitFeaturePackages = configContent ?\n getExplicitConfigFeaturePackages(configContent) :\n []\n\n const missingPackages = getInstallPackages(summary, declared, explicitFeaturePackages)\n\n const missingDependencies = Object.fromEntries(\n missingPackages.map(packageName => [packageName, getDoctorDependencyVersion(packageName)])\n )\n\n updated.devDependencies = {\n ...updated.devDependencies,\n ...missingDependencies\n }\n\n for (const packageName of missingPackages) {\n fixes.push(`Declared ${packageName}.`)\n\n packageChanged = true\n }\n\n const nodeEngine = assessConsumerNodeEngine(cwd, packageJson)\n\n if (!nodeEngine.compatible && nodeEngine.targetRange) {\n updated.engines ??= {}\n\n updated.engines.node = nodeEngine.targetRange\n\n packageChanged = true\n\n fixes.push(\n nodeEngine.consumerRange ?\n `Changed engines.node from ${nodeEngine.consumerRange} to ${nodeEngine.targetRange}.` :\n `Declared engines.node as ${nodeEngine.targetRange}.`\n )\n }\n\n if (packageChanged) {\n const packagePath = join(cwd, 'package.json')\n const backupPath = createDoctorBackupPath(packagePath)\n\n writeFileSync(backupPath, `${JSON.stringify(packageJson, null, 2)}\\n`)\n\n writeFileSync(packagePath, `${JSON.stringify(updated, null, 2)}\\n`)\n\n fixes.push(`Backed up package.json to ${basename(backupPath)}.`)\n }\n }\n\n if (!configPath) {\n const generated = createConfigContent(cwd)\n\n writeFileSync(generated.configPath, generated.configContent)\n\n fixes.push(`Created ${basename(generated.configPath)}.`)\n } else if (\n configContent &&\n Object.keys(FRAMEWORK_PACKAGE_TO_KEY).some(packageName => configContent.includes(packageName))\n ) {\n // The migration parser is declared later as a public helper and is safe to call after module initialization.\n // eslint-disable-next-line no-use-before-define\n const result = migrateConfigContent(configContent)\n\n if (result.changed) {\n const backupPath = createDoctorBackupPath(configPath)\n\n writeFileSync(backupPath, configContent)\n\n writeFileSync(configPath, result.content)\n\n fixes.push(`Migrated v1 framework imports and backed up the config to ${basename(backupPath)}.`)\n }\n }\n\n return fixes\n}\n\nconst hasV1FrameworkPackageImports = (configContent: null | string): boolean => (\n configContent !== null &&\n Object.keys(FRAMEWORK_PACKAGE_TO_KEY).some(packageName => configContent.includes(packageName))\n)\n\nexport const handleDoctor = async (\n cwd: string = process.cwd(),\n json = false,\n liteInstall = false,\n fix = false,\n verbose = false\n) => {\n const pnpmWorkspaceRoot = findPnpmWorkspaceRoot(cwd)\n const projectRoot = pnpmWorkspaceRoot ?? cwd\n const packageManager = detectPackageManager(projectRoot)\n const workspaceRoot = packageManager === 'pnpm' && pnpmWorkspaceRoot !== undefined\n const catalog = workspaceRoot ? getCatalogPreference(readPackageJson(projectRoot)) : false\n let configPath = getConfigPathIfPresent(projectRoot)\n let packageJson = readPackageJson(projectRoot)\n let declaredDependencies = getDeclaredDependencyNames(packageJson)\n let summary = getInstallProjectSummary(projectRoot)\n let activeConfig = await analyzeEslintConfig(projectRoot)\n let configContent = configPath ? readFileSync(configPath, 'utf8') : null\n let hasV1FrameworkImports = hasV1FrameworkPackageImports(configContent)\n\n if (liteInstall) {\n const liteInstallPackages = getLiteInstallPackages(summary, declaredDependencies)\n\n const liteInstallCommand = createInstallCommand(\n packageManager,\n addCompatibleConfigVersions(\n liteInstallPackages,\n getCompatibleConfigVersion(packageJson, getCliVersion(), pnpmWorkspaceRoot)\n ),\n workspaceRoot,\n catalog\n )\n\n if (json) {\n console.log(JSON.stringify({\n command: liteInstallCommand,\n packageManager,\n packages: liteInstallPackages\n }, null, 2))\n } else {\n console.log(liteInstallCommand)\n }\n\n return\n }\n\n const fixes = fix ? applyDoctorFixes(projectRoot, packageJson, configPath, configContent, summary) : []\n\n if (fixes.length > 0) {\n configPath = getConfigPathIfPresent(projectRoot)\n\n packageJson = readPackageJson(projectRoot)\n\n declaredDependencies = getDeclaredDependencyNames(packageJson)\n\n summary = getInstallProjectSummary(projectRoot)\n\n activeConfig = await analyzeEslintConfig(projectRoot)\n\n configContent = configPath ? readFileSync(configPath, 'utf8') : null\n\n hasV1FrameworkImports = hasV1FrameworkPackageImports(configContent)\n }\n\n const explicitFeaturePackages = configContent ?\n getExplicitConfigFeaturePackages(configContent) :\n []\n\n const requiredPackages = getInstallPackages(summary, declaredDependencies, explicitFeaturePackages)\n\n const installCommand = requiredPackages.length > 0 ?\n createInstallCommand(\n packageManager,\n addCompatibleConfigVersions(\n requiredPackages,\n getCompatibleConfigVersion(packageJson, getCliVersion(), pnpmWorkspaceRoot)\n ),\n workspaceRoot,\n catalog\n ) :\n undefined\n\n const { issues, warnings } = buildDoctorDiagnosis(\n projectRoot,\n packageJson,\n configPath,\n configContent,\n hasV1FrameworkImports,\n activeConfig,\n declaredDependencies,\n summary\n )\n\n const projects = await getDoctorProjectActivations(projectRoot)\n\n outputDoctorResult(\n json,\n verbose,\n configPath,\n packageManager,\n summary,\n installCommand,\n requiredPackages,\n issues,\n warnings,\n projects,\n fixes\n )\n}\n\nconst isMinimumReleaseAgeFailure = (output: string): boolean => (\n /minimum[\\s_-]*release[\\s_-]*age/i.test(output) ||\n /release (?:is )?(?:too young|not old enough)/i.test(output) ||\n /blocked by (?:the )?minimum age/i.test(output)\n)\n\nexport const handleInstall = (\n cwd: string = process.cwd(),\n dryRun = false,\n runner: InstallRunner = spawnSync\n) => {\n const pnpmWorkspaceRoot = findPnpmWorkspaceRoot(cwd)\n const projectRoot = pnpmWorkspaceRoot ?? cwd\n const packageJson = readPackageJson(projectRoot)\n\n if (!packageJson) {\n console.error('❌ package.json is missing or invalid.')\n\n process.exitCode = 1\n\n return\n }\n\n const packageManager = detectPackageManager(projectRoot)\n const configPath = getConfigPathIfPresent(projectRoot)\n\n const explicitFeaturePackages = configPath ?\n getExplicitConfigFeaturePackages(readFileSync(configPath, 'utf8')) :\n []\n\n const packages = getInstallPackages(\n getInstallProjectSummary(projectRoot),\n getDeclaredDependencyNames(packageJson),\n explicitFeaturePackages\n )\n\n const workspaceRoot = packageManager === 'pnpm' && pnpmWorkspaceRoot !== undefined\n const catalog = workspaceRoot ? getCatalogPreference(packageJson) : false\n\n const installPackages = addCompatibleConfigVersions(\n packages,\n getCompatibleConfigVersion(packageJson, getCliVersion(), pnpmWorkspaceRoot)\n )\n\n if (packages.length === 0) {\n console.log('✅ All packages required by the detected ESLint configuration are already declared.')\n\n return\n }\n\n const installCommand = createInstallCommand(packageManager, installPackages, workspaceRoot, catalog)\n\n if (dryRun) {\n console.log(installCommand)\n\n return\n }\n\n console.log(`Installing detected ESLint dependencies:\\n${installCommand}`)\n\n const [command, args] = createInstallInvocation(packageManager, installPackages, workspaceRoot, catalog)\n\n const result = runner(command, args, {\n cwd: projectRoot,\n encoding: 'utf8',\n maxBuffer: 16 * 1024 * 1024,\n stdio: 'pipe'\n })\n\n const stdout = String(result.stdout ?? '')\n const stderr = String(result.stderr ?? '')\n\n if (stdout) process.stdout.write(stdout)\n\n if (stderr) process.stderr.write(stderr)\n\n if (result.error) {\n console.error(`❌ Failed to run ${packageManager}: ${result.error.message}`)\n\n process.exitCode = 1\n } else if (result.status !== 0) {\n if (packageManager === 'pnpm' && isMinimumReleaseAgeFailure(`${stdout}\\n${stderr}`)) {\n console.error(\n '❌ pnpm minimumReleaseAge temporarily blocks the compatible ESLint config release ' +\n `(${installPackages.join(', ')}). Keep the generated compatible range and either wait for the policy window ` +\n 'or add the exact release to minimumReleaseAgeExclude in pnpm-workspace.yaml.'\n )\n }\n\n process.exitCode = result.status ?? 1\n }\n}\n\nexport const handleDocs = (cwd: string = process.cwd()) => {\n const outputPath = join(cwd, 'ESLINT_STANDARDS.md')\n\n writeFileSync(outputPath, createStandardsContent(cwd))\n\n console.log('✅ Generated ESLINT_STANDARDS.md')\n}\n\nconst migrateConfigContent = (content: string): { changed: boolean, content: string, frameworks: string[] } => {\n const importedFrameworks = Object.entries(FRAMEWORK_PACKAGE_TO_KEY)\n .filter(([packageName]) => content.includes(packageName))\n .map(([, framework]) => framework)\n\n if (importedFrameworks.length === 0) {\n return { changed: false, content, frameworks: [] }\n }\n\n const frameworks = getFrameworkKeys(importedFrameworks)\n\n const migrated = [\n 'import { defineConfig } from \\'@santi020k/eslint-config-basic\\'',\n '',\n 'export default await defineConfig({',\n ' frameworks: {',\n ` ${frameworks.map(key => `${toPropertyKey(key)}: true`).join(',\\n ')}`,\n ' }',\n '})',\n ''\n ].join('\\n')\n\n return { changed: true, content: migrated, frameworks }\n}\n\nconst processConfigMigration = (configPath: string, write: boolean, suggestions: string[]): string[] => {\n const applied: string[] = []\n\n if (!existsSync(configPath)) {\n if (write) suggestions.push('- No ESLint config file was found to rewrite.')\n\n return applied\n }\n\n const configContent = readFileSync(configPath, 'utf8')\n\n if (configContent.includes('@santi020k/eslint-config-') && !configContent.includes('frameworks:')) {\n suggestions.push('- This config appears to import v1 framework packages; replace those imports with framework booleans.')\n }\n\n if (!write) return applied\n\n const result = migrateConfigContent(configContent)\n\n if (result.changed) {\n const backupPath = `${configPath}.bak`\n\n writeFileSync(backupPath, configContent)\n\n writeFileSync(configPath, result.content)\n\n const message = `Rewrote ${basename(configPath)} with framework booleans: ${result.frameworks.join(', ')}. Original backed up to ${basename(backupPath)}.`\n\n applied.push(message)\n\n suggestions.push(`- ${message}`)\n } else {\n suggestions.push('- No v1 framework imports were found to rewrite.')\n }\n\n return applied\n}\n\nexport const handleMigrate = (\n cwd: string = process.cwd(),\n write = false,\n json = false,\n target = 'v2',\n check = false,\n full = false\n) => {\n if (target === 'v3' || target === '3') {\n const summary = getInstallProjectSummary(cwd)\n\n handleMigrateV3(cwd, {\n declaredConfigPackages: getWorkspaceDeclaredConfigPackages(cwd, summary),\n extensions: summary.extensions,\n formats: summary.formats,\n frameworks: summary.frameworks,\n libraries: summary.libraries,\n packageManager: detectPackageManager(cwd),\n testing: summary.testing,\n tools: summary.tools,\n typescript: summary.typescript\n }, { check, full, json, write })\n\n return\n }\n\n if (target !== 'v2' && target !== '2') {\n throw new Error(`Unsupported migration target \"${target}\". Use --to v2 or --to v3.`)\n }\n\n const configPath = getConfigPathIfPresent(cwd) ?? join(cwd, getDefaultConfigFilename(cwd))\n\n const suggestions = [\n 'v1 to v2 migration suggestions:',\n '- Install only @santi020k/eslint-config-basic for the public config API.',\n '- Replace framework imports with bundled booleans such as frameworks: { react: true, next: true }.',\n '- Remove app-level @santi020k/eslint-config-react/next/vue/etc. config package imports.',\n '- Try defineConfig() first; v3 auto-detects supported frameworks and integrations.',\n '- Use basic-eslint explain to review what v3 detects before committing the migration.'\n ]\n\n const applied = processConfigMigration(configPath, write, suggestions)\n\n if (json) {\n console.log(JSON.stringify({\n applied,\n configFile: existsSync(configPath) ? basename(configPath) : null,\n suggestions: suggestions.slice(1),\n title: suggestions[0],\n write\n }, null, 2))\n\n return\n }\n\n console.log(suggestions.join('\\n'))\n}\n\nconst dispatchCommand = (\n command: string,\n cwd: string,\n flags: {\n concurrency?: string\n files: string[]\n hasAnalyzeSource: boolean\n hasCheck: boolean\n hasCompatibility: boolean\n hasCreate: boolean\n hasDryRun: boolean\n hasExplicit: boolean\n hasFix: boolean\n hasForce: boolean\n hasFull: boolean\n hasJson: boolean\n hasLiteInstall: boolean\n hasPrune: boolean\n hasRulesOnly: boolean\n hasSemanticOnly: boolean\n hasVerbose: boolean\n hasWrite: boolean\n hasWithEslintMcp: boolean\n maxDurationMs?: number\n maxRuleTimeMs?: number\n maxWarnings?: number\n output?: string\n preset?: string\n positional?: string\n rule?: string\n snapshotPath?: string\n target?: string\n }\n) => {\n switch (command) {\n case 'baseline': {\n try {\n handleBaseline(cwd, {\n json: flags.hasJson,\n preset: flags.preset,\n prune: flags.hasPrune\n })\n } catch (error) {\n console.error(`❌ Failed to create ESLint baseline: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'compatibility': {\n handleCompatibility(cwd, flags.hasJson)\n\n break\n }\n\n case 'config-types': {\n try {\n handleConfigTypes(cwd, {\n files: flags.files,\n json: flags.hasJson\n })\n } catch (error) {\n console.error(`❌ Failed to check config declaration portability: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'diff': {\n handleSnapshotDiff(cwd, {\n files: flags.files,\n json: flags.hasJson,\n rulesOnly: flags.hasRulesOnly,\n snapshotPath: flags.snapshotPath\n }).catch((error: unknown) => {\n console.error(`❌ Failed to diff ESLint configuration: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'docs': {\n handleDocs(cwd)\n\n break\n }\n\n case 'doctor': {\n handleDoctor(cwd, flags.hasJson, flags.hasLiteInstall, flags.hasFix, flags.hasVerbose)\n .catch((error: unknown) => {\n console.error(`❌ Failed to run doctor: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'explain': {\n if (flags.rule) {\n handleExplainRule(cwd, {\n file: flags.files[0],\n json: flags.hasJson,\n rule: flags.rule\n }).catch((error: unknown) => {\n console.error(`❌ Failed to explain ESLint rule: ${String(error)}`)\n\n process.exitCode = 1\n })\n } else {\n handleExplain(cwd, flags.hasJson)\n }\n\n break\n }\n\n case 'explain-preset': {\n if (!flags.positional) {\n console.error('Missing preset. Usage: basic-eslint explain-preset <preset> [options]')\n\n process.exitCode = 1\n\n break\n }\n\n handleExplainPreset(cwd, flags.positional, {\n analyzeSource: flags.hasAnalyzeSource,\n compatibility: flags.hasCompatibility,\n file: flags.files[0],\n files: flags.files,\n json: flags.hasJson,\n output: flags.output,\n semanticOnly: flags.hasSemanticOnly,\n write: flags.hasWrite\n }).catch((error: unknown) => {\n console.error(`❌ Failed to explain preset: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'generate-skill': {\n handleGenerateSkill(cwd, flags.hasForce, {\n check: flags.hasCheck,\n createAgentsMd: flags.hasCreate,\n withEslintMcp: flags.hasWithEslintMcp\n }).catch((error: unknown) => {\n console.error(`❌ Failed to generate skill files: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'init': {\n handleInit(cwd, flags.hasCheck, flags.hasExplicit)\n\n break\n }\n\n case 'inspect': {\n handleInspect(cwd, flags.hasJson).catch((error: unknown) => {\n console.error(`❌ Failed to inspect project: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'install': {\n handleInstall(cwd, flags.hasDryRun)\n\n break\n }\n\n case 'migrate': {\n try {\n handleMigrate(\n cwd,\n flags.hasWrite,\n flags.hasJson,\n flags.target ?? 'v2',\n flags.hasCheck,\n flags.hasFull\n )\n } catch (error) {\n console.error(`❌ Failed to migrate ESLint configuration: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'profile': {\n try {\n handleProfile(cwd, {\n concurrency: flags.concurrency,\n files: flags.files,\n json: flags.hasJson,\n maxDurationMs: flags.maxDurationMs,\n maxRuleTimeMs: flags.maxRuleTimeMs,\n maxWarnings: flags.maxWarnings\n })\n } catch (error) {\n console.error(`❌ Failed to profile ESLint: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'snapshot': {\n handleSnapshot(cwd, {\n check: flags.hasCheck,\n files: flags.files,\n json: flags.hasJson,\n rulesOnly: flags.hasRulesOnly,\n snapshotPath: flags.snapshotPath\n }).catch((error: unknown) => {\n console.error(`❌ Failed to snapshot ESLint configuration: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'update': {\n handleUpdate(cwd)\n\n break\n }\n\n default: {\n console.error(`Unknown command: ${command}`)\n\n printUsage()\n\n process.exitCode = 1\n }\n }\n}\n\nconst getFlagValue = (argv: string[], flag: string): string | undefined => {\n const inline = argv.find(argument => argument.startsWith(`${flag}=`))\n\n if (inline) return inline.slice(flag.length + 1)\n\n const index = argv.indexOf(flag)\n\n return index >= 0 ? argv[index + 1] : undefined\n}\n\nconst getFlagValues = (argv: string[], flag: string): string[] => argv.flatMap((argument, index) => {\n if (argument.startsWith(`${flag}=`)) return [argument.slice(flag.length + 1)]\n\n if (argument === flag && argv[index + 1]) return [argv[index + 1]]\n\n return []\n})\n\nconst getNumericFlagValue = (argv: string[], flag: string): number | undefined => {\n const value = getFlagValue(argv, flag)\n const present = argv.includes(flag) || argv.some(argument => argument.startsWith(`${flag}=`))\n\n if (!present) return undefined\n\n if (value === undefined || value.trim() === '' || value.startsWith('--')) return Number.NaN\n\n return Number(value)\n}\n\nexport const runCli = (argv: string[] = process.argv, cwd: string = process.cwd()) => {\n const command = argv[2]\n const isHelp = argv.slice(3).some(argument => argument === '--help' || argument === '-h')\n const isVersion = command === '--version' || command === '-v'\n\n if (!command || command === '--help' || command === '-h') {\n printUsage()\n\n return\n }\n\n if (isVersion) {\n console.log(getCliVersion())\n\n return\n }\n\n if (isHelp) {\n if (COMMAND_OPTIONS[command]) printCommandUsage(command)\n else printUsage()\n\n return\n }\n\n const validation = validateCommandArguments(command, argv.slice(3))\n\n if (!validation.ok) return\n\n dispatchCommand(command, cwd, {\n concurrency: getFlagValue(argv, '--concurrency'),\n files: getFlagValues(argv, '--file'),\n hasAnalyzeSource: argv.includes('--analyze-source'),\n hasCheck: argv.includes('--check'),\n hasCompatibility: argv.includes('--compatibility'),\n hasCreate: argv.includes('--create'),\n hasDryRun: argv.includes('--dry-run'),\n hasExplicit: argv.includes('--explicit'),\n hasFix: argv.includes('--fix'),\n hasForce: argv.includes('--force'),\n hasFull: argv.includes('--full'),\n hasJson: argv.includes('--json'),\n hasLiteInstall: argv.includes('--lite-install'),\n hasPrune: argv.includes('--prune'),\n hasRulesOnly: argv.includes('--rules-only'),\n hasSemanticOnly: argv.includes('--semantic-only'),\n hasVerbose: argv.includes('--verbose'),\n hasWithEslintMcp: argv.includes('--with-eslint-mcp'),\n hasWrite: argv.includes('--write'),\n maxDurationMs: getNumericFlagValue(argv, '--max-duration'),\n maxRuleTimeMs: getNumericFlagValue(argv, '--max-rule-time'),\n maxWarnings: getNumericFlagValue(argv, '--max-warnings'),\n output: getFlagValue(argv, '--output'),\n positional: validation.positional,\n preset: getFlagValue(argv, '--preset'),\n rule: command === 'explain' ? validation.positional : undefined,\n snapshotPath: getFlagValue(argv, '--snapshot-path'),\n target: getFlagValue(argv, '--to')\n })\n}\n\nexport const isCliEntrypoint = (\n entryPath: string,\n modulePath: string = fileURLToPath(import.meta.url)\n): boolean => entryPath === modulePath || [\n 'basic-eslint',\n 'cli.js',\n 'cli.ts'\n].includes(basename(entryPath))\n\n// Only run if this is the entry point\nif (process.argv[1] && isCliEntrypoint(process.argv[1])) {\n runCli()\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["/* eslint-disable complexity -- CLI planners and dispatchers intentionally cover many validated command branches */\n/* eslint-disable no-console -- CLI handlers own user-facing terminal output */\nimport { spawnSync } from 'node:child_process'\nimport { existsSync, readdirSync, readFileSync, realpathSync, writeFileSync } from 'node:fs'\nimport { createRequire, findPackageJSON } from 'node:module'\nimport { basename, dirname, join, relative } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport { findTailwindEntryPoint } from '@santi020k/eslint-config-core'\n\nimport {\n analyzeEslintConfig,\n ESLINT_CONFIG_FILENAMES,\n handleGenerateSkill\n} from './agent-skill-generator.js'\nimport { handleCompatibility, handleExplainRule } from './cli-advanced.js'\nimport { getConsumerOverrideGuidance } from './cli-consumer-guidance.js'\nimport { getExplicitConfigFeaturePackages, handleMigrateV3 } from './cli-migration.js'\nimport {\n addCompatibleConfigVersions,\n createInstallCommand,\n createInstallInvocation,\n detectPackageManager,\n findPnpmWorkspaceRoot,\n getCatalogPreference,\n getCompatibleConfigVersion } from './cli-package-manager.js'\nimport { handleExplainPreset } from './cli-preset.js'\nimport {\n handleBaseline,\n handleConfigTypes,\n handleProfile,\n handleSnapshot,\n handleSnapshotDiff\n} from './cli-workflows.js'\nimport { detectProjectOptions } from './index.js'\nimport { findCssComponentClasses } from './tailwind.js'\n\ninterface InstallResult {\n error?: Error\n status: null | number\n stderr?: Buffer | string\n stdout?: Buffer | string\n}\n\ntype InstallRunner = (\n command: string,\n args: string[],\n options: { cwd: string, encoding: 'utf8', maxBuffer: number, stdio: 'pipe' }\n) => InstallResult\n\nconst getDefaultConfigFilename = (cwd: string): string => {\n const packageJsonPath = join(cwd, 'package.json')\n\n if (!existsSync(packageJsonPath)) return 'eslint.config.mjs'\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as { type?: string }\n\n return packageJson.type === 'module' ? 'eslint.config.js' : 'eslint.config.mjs'\n } catch {\n return 'eslint.config.mjs'\n }\n}\n\nconst resolveConfigPath = (cwd: string): string => {\n const existingConfigPath = ESLINT_CONFIG_FILENAMES\n .map(filename => join(cwd, filename))\n .find(p => existsSync(p))\n\n return existingConfigPath ?? join(cwd, getDefaultConfigFilename(cwd))\n}\n\nconst getFrameworkKeys = (detectedFrameworks?: string[]): string[] => {\n const frameworkKeys = new Set(detectedFrameworks ?? [])\n\n if (\n frameworkKeys.has('next') ||\n frameworkKeys.has('expo') ||\n frameworkKeys.has('react-router') ||\n (frameworkKeys.has('tanstack-start') && !frameworkKeys.has('solid'))\n ) {\n frameworkKeys.add('react')\n }\n\n return [...frameworkKeys].sort()\n}\n\nconst toPropertyKey = (key: string): string => /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? key : `'${key}'`\n\nconst FRAMEWORK_PACKAGE_TO_KEY: Record<string, string> = {\n '@santi020k/eslint-config-angular': 'angular',\n '@santi020k/eslint-config-astro': 'astro',\n '@santi020k/eslint-config-expo': 'expo',\n '@santi020k/eslint-config-hono': 'hono',\n '@santi020k/eslint-config-lit': 'lit',\n '@santi020k/eslint-config-nest': 'nest',\n '@santi020k/eslint-config-next': 'next',\n '@santi020k/eslint-config-nuxt': 'nuxt',\n '@santi020k/eslint-config-preact': 'preact',\n '@santi020k/eslint-config-qwik': 'qwik',\n '@santi020k/eslint-config-react': 'react',\n '@santi020k/eslint-config-react-router': 'react-router',\n '@santi020k/eslint-config-remix': 'react-router',\n '@santi020k/eslint-config-slidev': 'slidev',\n '@santi020k/eslint-config-solid': 'solid',\n '@santi020k/eslint-config-svelte': 'svelte',\n '@santi020k/eslint-config-tanstack-start': 'tanstack-start',\n '@santi020k/eslint-config-vite': 'vite',\n '@santi020k/eslint-config-vue': 'vue'\n}\n\nconst FRAMEWORK_KEY_TO_PACKAGE = {\n ...Object.fromEntries(\n Object.entries(FRAMEWORK_PACKAGE_TO_KEY)\n .filter(([packageName]) => packageName !== '@santi020k/eslint-config-remix')\n .map(([packageName, framework]) => [framework, packageName])\n ),\n 'react-router': '@santi020k/eslint-config-react-router'\n} as Record<string, string>\n\nconst LITE_PACKAGE_NAME = '@santi020k/eslint-config-lite'\nconst INTEGRATIONS_PACKAGE_NAME = '@santi020k/eslint-config-integrations'\nconst ASTRO_DOCTOR_PACKAGE_NAME = '@santi020k/eslint-plugin-astro-doctor'\nconst BASIC_PACKAGE_NAME = '@santi020k/eslint-config-basic'\nconst FULL_PACKAGE_NAME = '@santi020k/eslint-config-full'\nconst TYPESCRIPT_PACKAGE_NAME = 'typescript'\n\nconst CATEGORY_PACKAGES = {\n extensions: '@santi020k/eslint-config-extensions',\n formats: '@santi020k/eslint-config-formats',\n libraries: '@santi020k/eslint-config-libraries',\n testing: '@santi020k/eslint-config-testing',\n tools: '@santi020k/eslint-config-tools'\n} as const\n\nconst PRESET_INSTALL_PACKAGES: Record<string, string[]> = {\n all: Object.values(CATEGORY_PACKAGES),\n app: [CATEGORY_PACKAGES.testing, CATEGORY_PACKAGES.tools],\n ci: [CATEGORY_PACKAGES.extensions, CATEGORY_PACKAGES.tools],\n library: [CATEGORY_PACKAGES.extensions, CATEGORY_PACKAGES.tools],\n monorepo: [CATEGORY_PACKAGES.extensions, CATEGORY_PACKAGES.tools]\n}\n\ntype DoctorFeatureCategory = keyof typeof CATEGORY_PACKAGES | 'frameworks'\n\ninterface DoctorFeatureActivation {\n detected: boolean\n enabled: boolean\n installed: boolean\n name: string\n package: string\n reason?: string\n}\n\ninterface DoctorProjectActivation {\n extensions: DoctorFeatureActivation[]\n formats: DoctorFeatureActivation[]\n frameworks: DoctorFeatureActivation[]\n ignores: string[]\n inactivePackages: { package: string, reason: string }[]\n libraries: DoctorFeatureActivation[]\n lintOwnership: { guidance: string, localConfig: null | string, lintScript: null | string }\n path: string\n runtime: string\n tailwind: {\n componentClasses: number\n detected: boolean\n entryPoint: null | string\n exceptionGuidance?: string\n unknownClassPolicy: 'fallback-off' | 'off' | 'strict' | 'strict-with-css-components'\n }\n testing: DoctorFeatureActivation[]\n tools: DoctorFeatureActivation[]\n typescript: {\n detected: boolean\n enabled: boolean\n installed: boolean\n mode: 'off' | 'syntax' | 'type-aware'\n package: string\n reason?: string\n tsconfig: null | string\n }\n}\n\nconst getConfigPathIfPresent = (cwd: string): null | string => {\n const configPath = ESLINT_CONFIG_FILENAMES\n .map(filename => join(cwd, filename))\n .find(p => existsSync(p))\n\n return configPath ?? null\n}\n\nconst readPackageJson = (cwd: string): null | Record<string, unknown> => {\n const packageJsonPath = join(cwd, 'package.json')\n\n if (!existsSync(packageJsonPath)) return null\n\n try {\n return JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as Record<string, unknown>\n } catch {\n return null\n }\n}\n\nconst getDeclaredDependencyNames = (packageJson: null | Record<string, unknown>): Set<string> => {\n const dependencyFields = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies'\n ]\n\n const names = new Set<string>()\n\n for (const field of dependencyFields) {\n const dependencies = packageJson?.[field]\n\n if (!dependencies || typeof dependencies !== 'object' || Array.isArray(dependencies)) continue\n\n for (const name of Object.keys(dependencies)) {\n names.add(name)\n }\n }\n\n return names\n}\n\nconst needsIntegrationPackage = (summary: ReturnType<typeof getProjectSummary>): boolean => (\n summary.libraries.length > 0 ||\n summary.testing.length > 0 ||\n summary.formats.length > 0 ||\n summary.tools.length > 0 ||\n summary.extensions.some(extension => extension !== 'boundaries')\n)\n\nconst hasPresetAll = (configContent: null | string): boolean => Boolean(\n configContent && (\n /\\bPreset\\.All\\b/.test(configContent) ||\n /preset\\s*:\\s*['\"]all['\"]/.test(configContent)\n )\n)\n\nconst getLiteInstallPackages = (\n summary: ReturnType<typeof getProjectSummary>,\n declaredDependencies: Set<string>\n): string[] => {\n const packages = new Set<string>([\n 'eslint',\n LITE_PACKAGE_NAME\n ])\n\n for (const framework of summary.frameworks) {\n const packageName = FRAMEWORK_KEY_TO_PACKAGE[framework]\n\n if (packageName) packages.add(packageName)\n }\n\n if (needsIntegrationPackage(summary)) {\n packages.add(INTEGRATIONS_PACKAGE_NAME)\n }\n\n if (summary.typescript && !declaredDependencies.has(TYPESCRIPT_PACKAGE_NAME)) {\n packages.add(TYPESCRIPT_PACKAGE_NAME)\n }\n\n return [...packages]\n}\n\nconst getInstallPackages = (\n summary: ReturnType<typeof getProjectSummary>,\n declaredDependencies: Set<string>,\n explicitFeaturePackages: string[] = []\n): string[] => {\n const usesFullPackage = declaredDependencies.has(FULL_PACKAGE_NAME)\n const packages = new Set<string>(['eslint'])\n\n if (!usesFullPackage) packages.add(BASIC_PACKAGE_NAME)\n\n if (!usesFullPackage) {\n for (const framework of summary.frameworks) {\n const packageName = FRAMEWORK_KEY_TO_PACKAGE[framework]\n\n if (packageName) packages.add(packageName)\n }\n\n const categorySelections = [\n [summary.extensions, CATEGORY_PACKAGES.extensions],\n [summary.formats, CATEGORY_PACKAGES.formats],\n [summary.libraries, CATEGORY_PACKAGES.libraries],\n [summary.testing, CATEGORY_PACKAGES.testing],\n [summary.tools, CATEGORY_PACKAGES.tools]\n ] as const\n\n for (const [features, packageName] of categorySelections) {\n if (features.length > 0) packages.add(packageName)\n }\n\n for (const packageName of explicitFeaturePackages) {\n packages.add(packageName)\n }\n\n for (const packageName of PRESET_INSTALL_PACKAGES[summary.preset] ?? []) {\n packages.add(packageName)\n }\n }\n\n if (summary.typescript) packages.add(TYPESCRIPT_PACKAGE_NAME)\n\n return [...packages].filter(packageName => !declaredDependencies.has(packageName))\n}\n\nconst hasLintScript = (cwd: string): boolean => {\n const packageJson = readPackageJson(cwd) as null | { scripts?: Record<string, string> }\n\n return Boolean(packageJson?.scripts?.lint)\n}\n\nconst getWorkspacePatternsFromPackageJson = (packageJson: null | Record<string, unknown>): string[] => {\n const workspaces = packageJson?.workspaces\n\n if (Array.isArray(workspaces)) {\n return workspaces.filter((value): value is string => typeof value === 'string')\n }\n\n if (workspaces && typeof workspaces === 'object' && Array.isArray((workspaces as { packages?: unknown }).packages)) {\n return (workspaces as { packages: unknown[] }).packages.filter((value): value is string => typeof value === 'string')\n }\n\n return []\n}\n\nconst getWorkspacePatternsFromPnpm = (cwd: string): string[] => {\n const workspacePath = join(cwd, 'pnpm-workspace.yaml')\n\n if (!existsSync(workspacePath)) return []\n\n const content = readFileSync(workspacePath, 'utf8')\n const patterns: string[] = []\n let inPackages = false\n\n for (const line of content.split(/\\r?\\n/)) {\n if (/^packages:\\s*$/.test(line)) {\n inPackages = true\n\n continue\n }\n\n if (inPackages && /^\\S/.test(line)) break\n\n const match = inPackages ? /^\\s*-\\s*['\"]?([^'\"]+)['\"]?\\s*$/.exec(line) : null\n\n if (match?.[1] && !match[1].startsWith('!')) patterns.push(match[1])\n }\n\n return patterns\n}\n\nconst expandWorkspacePattern = (cwd: string, pattern: string): string[] => {\n const normalized = pattern.replace(/\\/$/, '')\n\n if (!normalized.endsWith('/*')) return []\n\n const base = normalized.slice(0, -2)\n const basePath = join(cwd, base)\n\n if (!existsSync(basePath)) return []\n\n return readdirSync(basePath, { withFileTypes: true })\n .filter(entry => entry.isDirectory())\n .map(entry => `${base}/${entry.name}`)\n .filter(projectPath => existsSync(join(cwd, projectPath, 'package.json')))\n}\n\nconst detectWorkspaceProjects = (cwd: string): string[] => {\n const patterns = [\n ...getWorkspacePatternsFromPackageJson(readPackageJson(cwd)),\n ...getWorkspacePatternsFromPnpm(cwd)\n ]\n\n return [...new Set(patterns.flatMap(pattern => expandWorkspacePattern(cwd, pattern)))].sort()\n}\n\nconst createExplicitOptions = (cwd: string): string[] => {\n // Project summarization is declared later beside the doctor workflow that also consumes it.\n // eslint-disable-next-line no-use-before-define\n const summary = getProjectSummary(cwd)\n const options: string[] = []\n\n const features = [...new Set([\n ...summary.extensions,\n ...summary.formats,\n ...summary.libraries,\n ...summary.testing,\n ...summary.tools\n ])].sort()\n\n if (summary.typescript) options.push(' typescript: true,')\n\n if (summary.frameworks.length > 0) {\n options.push(\n ' frameworks: {',\n ...summary.frameworks.map(framework => ` ${toPropertyKey(framework)}: true,`),\n ' },'\n )\n }\n\n if (features.length > 0) {\n options.push(\n ' features: {',\n ...features.map(feature => ` ${toPropertyKey(feature)}: true,`),\n ' },'\n )\n }\n\n return options\n}\n\nconst createConfigContent = (cwd: string, explicit = false): { configContent: string, configPath: string } => {\n const explicitOptions = explicit ? createExplicitOptions(cwd) : []\n\n const invocation = explicitOptions.length > 0 ?\n ['export default defineConfig({', ...explicitOptions, '})'] :\n ['export default defineConfig()']\n\n const configContent = [\n 'import { defineConfig } from \\'@santi020k/eslint-config-basic\\'',\n '',\n ...invocation,\n ''\n ].join('\\n')\n\n return {\n configContent,\n configPath: resolveConfigPath(cwd)\n }\n}\n\nconst formatList = (values: undefined | unknown[]): string => {\n if (!values?.length) return 'none'\n\n return values.join(', ')\n}\n\nconst getProjectSummary = (cwd: string) => {\n const options = detectProjectOptions(cwd)\n const workspaceProjects = detectWorkspaceProjects(cwd)\n let typescriptMode: DoctorProjectActivation['typescript']['mode'] = 'off'\n\n if (options.typescript) {\n typescriptMode = options.typescript === 'syntax' ? 'syntax' : 'type-aware'\n }\n\n return {\n detectedProjects: Object.keys(options.projects ?? {}).sort(),\n extensions: options.extensions ?? [],\n formats: options.formats ?? [],\n frameworks: getFrameworkKeys(options.detectedFrameworks),\n libraries: options.libraries ?? [],\n nextMode: options.nextMode ?? 'n/a',\n preset: options.preset ?? 'basic',\n runtime: options.runtime ?? 'universal',\n testing: options.testing ?? [],\n tools: options.tools ?? [],\n typescript: Boolean(options.typescript),\n typescriptMode,\n workspaceProjects\n }\n}\n\nconst getDetectedProjectPaths = (cwd: string): string[] => {\n const summary = getProjectSummary(cwd)\n\n return summary.workspaceProjects.length > 0 ?\n [...new Set([...summary.detectedProjects, ...summary.workspaceProjects])] :\n ['.']\n}\n\nconst getTailwindUnknownClassPolicy = (\n detected: boolean,\n entryPoint: null | string,\n componentClasses = 0\n): DoctorProjectActivation['tailwind']['unknownClassPolicy'] => {\n if (!detected) return 'off'\n\n if (!entryPoint) return 'fallback-off'\n\n return componentClasses > 0 ? 'strict-with-css-components' : 'strict'\n}\n\nconst getTailwindEntryPoints = (cwd: string) => getDetectedProjectPaths(cwd).flatMap(projectPath => {\n const projectRoot = projectPath === '.' ? cwd : join(cwd, projectPath)\n const summary = getProjectSummary(projectRoot)\n\n if (!summary.libraries.includes('tailwind')) return []\n\n const entryPoint = findTailwindEntryPoint(projectRoot) ?? null\n const componentClasses = entryPoint ? findCssComponentClasses(projectRoot, entryPoint).length : 0\n\n return [{\n componentClasses,\n entryPoint,\n path: projectPath,\n unknownClassPolicy: getTailwindUnknownClassPolicy(true, entryPoint, componentClasses)\n }]\n})\n\nconst getDeclarationProjectWarnings = (cwd: string): string[] => (\n getDetectedProjectPaths(cwd).flatMap(projectPath => {\n const projectRoot = projectPath === '.' ? cwd : join(cwd, projectPath)\n const summary = getProjectSummary(projectRoot)\n\n if (summary.typescriptMode !== 'syntax') return []\n\n const packageName = readPackageJson(projectRoot)?.name\n const packageLabel = typeof packageName === 'string' ? `${projectPath} (${packageName})` : projectPath\n\n return [\n `TypeScript declarations were detected in ${packageLabel}, but no supported package-local tsconfig was found. ` +\n 'The package uses syntax-only linting to avoid a project-service parse failure. Add a tsconfig.json that includes ' +\n 'the declarations for type-aware linting, or add their patterns to `typescript.untypedFiles` when a parent ' +\n 'type-aware project intentionally owns them.'\n ]\n })\n)\n\nconst getInstallProjectSummary = (cwd: string): ReturnType<typeof getProjectSummary> => {\n const rootSummary = getProjectSummary(cwd)\n\n const projectPaths = [...new Set([\n ...rootSummary.detectedProjects,\n ...rootSummary.workspaceProjects\n ])]\n\n const projectSummaries = projectPaths.map(projectPath => (\n getProjectSummary(join(cwd, projectPath))\n ))\n\n const summaries = [rootSummary, ...projectSummaries]\n let typescriptMode: DoctorProjectActivation['typescript']['mode'] = 'off'\n\n if (summaries.some(summary => summary.typescriptMode === 'type-aware')) {\n typescriptMode = 'type-aware'\n } else if (summaries.some(summary => summary.typescriptMode === 'syntax')) {\n typescriptMode = 'syntax'\n }\n\n return {\n ...rootSummary,\n extensions: [...new Set(summaries.flatMap(summary => summary.extensions))],\n formats: [...new Set(summaries.flatMap(summary => summary.formats))],\n frameworks: [...new Set(summaries.flatMap(summary => summary.frameworks))].sort(),\n libraries: [...new Set(summaries.flatMap(summary => summary.libraries))],\n testing: [...new Set(summaries.flatMap(summary => summary.testing))],\n tools: [...new Set(summaries.flatMap(summary => summary.tools))],\n typescript: summaries.some(summary => summary.typescript),\n typescriptMode\n }\n}\n\nconst getWorkspaceDeclaredConfigPackages = (\n cwd: string,\n summary: ReturnType<typeof getProjectSummary>\n): string[] => {\n const packages = new Set<string>()\n\n for (const projectPath of summary.detectedProjects) {\n for (const packageName of getDeclaredDependencyNames(readPackageJson(join(cwd, projectPath)))) {\n if (packageName.startsWith('@santi020k/eslint-config-')) packages.add(packageName)\n }\n }\n\n return [...packages]\n}\n\nconst createStandardsContent = (cwd: string): string => {\n const summary = getProjectSummary(cwd)\n\n return [\n '# ESLint Standards',\n '',\n 'This document was generated from the active project dependencies detected by `@santi020k/eslint-config-basic`.',\n '',\n '## Active Profile',\n '',\n `- TypeScript: ${summary.typescript ? 'enabled' : 'disabled'}`,\n `- Preset: ${summary.preset}`,\n `- Runtime: ${summary.runtime}`,\n `- Next.js mode: ${summary.nextMode}`,\n `- Frameworks: ${formatList(summary.frameworks)}`,\n `- Libraries: ${formatList(summary.libraries)}`,\n `- Testing: ${formatList(summary.testing)}`,\n `- Formats: ${formatList(summary.formats)}`,\n `- Tools: ${formatList(summary.tools)}`,\n `- Extensions: ${formatList(summary.extensions)}`,\n '',\n '## Recommended Config',\n '',\n '```js',\n 'import { defineConfig } from \\'@santi020k/eslint-config-basic\\'',\n '',\n 'export default await defineConfig()',\n '```',\n '',\n 'Use `basic-eslint explain` when you want to inspect what the zero-config setup detects.'\n ].join('\\n')\n}\n\nconst getCliVersion = (): string => {\n const cliDir = dirname(fileURLToPath(import.meta.url))\n const packageJsonPath = join(cliDir, '..', 'package.json')\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as { version?: string }\n\n return packageJson.version ?? 'unknown'\n } catch {\n return 'unknown'\n }\n}\n\nconst printUsage = () => {\n console.log([\n 'Usage: basic-eslint <command> [options]',\n '',\n 'Commands:',\n ' init Create eslint.config.js/mjs if missing',\n ' update Regenerate eslint.config.js/mjs from detection',\n ' explain Print detected v3 config inputs',\n ' explain-preset Compare the current config with a preset',\n ' inspect Print detected inputs and active config features',\n ' install Install missing packages for detected v3 features',\n ' doctor Check project setup for common v3 adoption issues',\n ' compatibility Check runtime and config package compatibility',\n ' config-types Emit and verify portable ESLint config declarations',\n ' docs Generate ESLINT_STANDARDS.md from detection',\n ' migrate Plan or apply v1-to-v2 and v2-to-v3 migrations',\n ' baseline Suppress existing violations for incremental adoption',\n ' profile Compare ESLint performance and report slow rules',\n ' snapshot Save the effective rules for representative files',\n ' diff Compare effective rules with the saved snapshot',\n ' generate-skill Generate AI agent standards files',\n '',\n 'Options:',\n ' --analyze-source explain-preset: lint source and preview autofix without writing',\n ' --force Overwrite existing generated skill sections/files',\n ' --check Verify generated files, migrations, or snapshots without writing',\n ' --concurrency profile: off, auto, or a worker count',\n ' --create generate-skill: scaffold a root AGENTS.md when missing',\n ' --dry-run install: print the detected install command without running it',\n ' --explicit init: write detected settings explicitly',\n ' --file explain/explain-preset/profile/snapshot/diff: file or lint target (repeatable)',\n ' --fix doctor: safely repair generated config and package metadata',\n ' --full migrate --to v3: choose the batteries-included package',\n ' --json Print JSON for commands that support it',\n ' --lite-install doctor: print the deprecated v2 Lite install command (removed in v4)',\n ' --max-duration profile: maximum duration in milliseconds',\n ' --max-rule-time profile: maximum time for the slowest rule in milliseconds',\n ' --max-warnings profile: maximum warning count',\n ' --compatibility explain-preset: write a temporary compatibility override',\n ' --output explain-preset: compatibility override path',\n ' --preset baseline: enable ci or pedantic strict mode before suppressing',\n ' --prune baseline: remove suppressions for resolved violations',\n ' --rules-only snapshot: store only effective rules for compact CI review',\n ' --semantic-only explain-preset: preview or write only non-formatting fixes',\n ' --snapshot-path snapshot/diff: override .eslint-config-snapshot.json',\n ' --to migrate: target version (v2 or v3)',\n ' --verbose doctor: print per-project activation details',\n ' --with-eslint-mcp generate-skill: scaffold the official ESLint MCP server',\n ' --write Apply safe migrations for commands that support it',\n ' --help, -h Show this help message',\n ' --version, -v Show CLI version'\n ].join('\\n'))\n}\n\nconst COMMAND_OPTIONS: Partial<Record<string, string[]>> = {\n baseline: ['--json', '--preset', '--prune'],\n compatibility: ['--json'],\n 'config-types': ['--file', '--json'],\n diff: ['--file', '--json', '--snapshot-path'],\n docs: [],\n doctor: ['--fix', '--json', '--lite-install', '--verbose'],\n explain: ['--file', '--json'],\n 'explain-preset': [\n '--analyze-source',\n '--compatibility',\n '--file',\n '--json',\n '--output',\n '--semantic-only',\n '--write'\n ],\n 'generate-skill': ['--check', '--create', '--force', '--with-eslint-mcp'],\n init: ['--check', '--explicit'],\n inspect: ['--json'],\n install: ['--dry-run'],\n migrate: ['--check', '--full', '--json', '--to', '--write'],\n profile: ['--concurrency', '--file', '--json', '--max-duration', '--max-rule-time', '--max-warnings'],\n snapshot: ['--check', '--file', '--json', '--rules-only', '--snapshot-path'],\n update: []\n}\n\nconst VALUE_OPTIONS = new Set([\n '--concurrency',\n '--file',\n '--max-duration',\n '--max-rule-time',\n '--max-warnings',\n '--output',\n '--preset',\n '--snapshot-path',\n '--to'\n])\n\nconst printCommandUsage = (command: string): void => {\n let positional = ''\n\n if (command === 'explain') positional = ' [rule]'\n else if (command === 'explain-preset') positional = ' <preset>'\n\n const options = COMMAND_OPTIONS[command] ?? []\n\n console.log([\n 'Usage: basic-eslint <command> [options]',\n '',\n `Usage: basic-eslint ${command}${positional}${options.length > 0 ? ' [options]' : ''}`,\n ...(options.length > 0 ? ['', 'Options:', ...options.map(option => ` ${option}`)] : [])\n ].join('\\n'))\n}\n\nconst validateCommandArguments = (\n command: string,\n args: string[]\n): { ok: boolean, positional?: string } => {\n const allowed = COMMAND_OPTIONS[command]\n\n if (!allowed) return { ok: true }\n\n const allowedOptions = new Set(allowed)\n const positionals: string[] = []\n\n for (let index = 0; index < args.length; index++) {\n const argument = args[index]\n\n if (!argument.startsWith('-')) {\n positionals.push(argument)\n\n continue\n }\n\n const option = argument.includes('=') ? argument.slice(0, argument.indexOf('=')) : argument\n\n if (!allowedOptions.has(option)) {\n console.error(`Unknown option for ${command}: ${option}`)\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n if (argument.includes('=') && !VALUE_OPTIONS.has(option)) {\n console.error(`Option ${option} does not accept a value.`)\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n if (VALUE_OPTIONS.has(option) && !argument.includes('=')) {\n const value = args[index + 1]\n\n if (!value || value.startsWith('-')) {\n console.error(\n ['--max-duration', '--max-rule-time', '--max-warnings'].includes(option) ?\n `${option} must be a non-negative number.` :\n `Option ${option} requires a value.`\n )\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n index++\n } else if (VALUE_OPTIONS.has(option) && argument.endsWith('=')) {\n console.error(\n ['--max-duration', '--max-rule-time', '--max-warnings'].includes(option) ?\n `${option} must be a non-negative number.` :\n `Option ${option} requires a value.`\n )\n\n process.exitCode = 1\n\n return { ok: false }\n }\n }\n\n const maximumPositionals = command === 'explain' || command === 'explain-preset' ? 1 : 0\n\n if (positionals.length > maximumPositionals) {\n console.error(`Unexpected argument for ${command}: ${positionals[maximumPositionals]}`)\n\n process.exitCode = 1\n\n return { ok: false }\n }\n\n return { ok: true, positional: positionals[0] }\n}\n\nexport const handleInit = (cwd: string = process.cwd(), check = false, explicit = false) => {\n const configPath = resolveConfigPath(cwd)\n\n if (check) {\n const exists = existsSync(configPath)\n\n console.log(JSON.stringify({\n configFile: exists ? basename(configPath) : null,\n exists,\n ok: exists\n }, null, 2))\n\n if (!exists) process.exitCode = 1\n\n return\n }\n\n if (existsSync(configPath)) {\n console.error(`⚠️ ${basename(configPath)} already exists. Skipping...`)\n\n return\n }\n\n console.log('🔍 Detecting project settings...')\n\n const { configContent } = createConfigContent(cwd, explicit)\n\n writeFileSync(configPath, configContent)\n\n console.log(`✅ Created ${basename(configPath)} with auto-detected settings!`)\n\n console.log('🚀 Ready to lint!')\n}\n\nexport const handleUpdate = (cwd: string = process.cwd()) => {\n console.log('🔍 Detecting project settings...')\n\n const { configContent, configPath } = createConfigContent(cwd)\n\n if (existsSync(configPath)) {\n const backupPath = `${configPath}.bak`\n const existing = readFileSync(configPath, 'utf8')\n\n writeFileSync(backupPath, existing)\n\n console.log(`📦 Backed up existing config to ${basename(backupPath)}`)\n }\n\n writeFileSync(configPath, configContent)\n\n console.log(`✅ Updated ${basename(configPath)} with auto-detected settings!`)\n\n console.log('🚀 Ready to lint!')\n}\n\nexport const handleExplain = (cwd: string = process.cwd(), json = false) => {\n const summary = getProjectSummary(cwd)\n\n if (json) {\n console.log(JSON.stringify(summary, null, 2))\n\n return\n }\n\n console.log([\n 'ESLint Basic detected configuration:',\n `- TypeScript: ${summary.typescript ? 'enabled' : 'disabled'}`,\n `- Preset: ${summary.preset}`,\n `- Runtime: ${summary.runtime}`,\n `- Next.js mode: ${summary.nextMode}`,\n `- Frameworks: ${formatList(summary.frameworks)}`,\n `- Libraries: ${formatList(summary.libraries)}`,\n `- Testing: ${formatList(summary.testing)}`,\n `- Formats: ${formatList(summary.formats)}`,\n `- Tools: ${formatList(summary.tools)}`,\n `- Extensions: ${formatList(summary.extensions)}`\n ].join('\\n'))\n}\n\nexport const handleInspect = async (cwd: string = process.cwd(), json = false) => {\n const summary = getProjectSummary(cwd)\n const activeConfig = await analyzeEslintConfig(cwd)\n\n const payload = {\n activeConfig,\n detected: summary,\n packageManager: detectPackageManager(cwd),\n tailwindEntryPoints: getTailwindEntryPoints(cwd)\n }\n\n if (json) {\n console.log(JSON.stringify(payload, null, 2))\n\n return\n }\n\n console.log([\n 'ESLint Basic inspection:',\n `- Package manager: ${payload.packageManager}`,\n `- Config source: ${activeConfig?.source ?? 'not found'}`,\n `- Config file: ${activeConfig?.configFile ?? 'none'}`,\n `- TypeScript: ${summary.typescript ? 'enabled' : 'disabled'}`,\n `- Preset: ${summary.preset}`,\n `- Runtime: ${summary.runtime}`,\n `- Frameworks: ${formatList(summary.frameworks)}`,\n `- Libraries: ${formatList(summary.libraries)}`,\n `- Testing: ${formatList(summary.testing)}`,\n `- Formats: ${formatList(summary.formats)}`,\n `- Tools: ${formatList(summary.tools)}`,\n `- Extensions: ${formatList(summary.extensions)}`,\n `- Workspace projects: ${formatList(summary.workspaceProjects)}`\n ].join('\\n'))\n}\n\ninterface DuplicateEslintInfo {\n configVersion: string\n projectVersion: string\n}\n\ninterface PackageMetadata {\n engines?: { node?: string }\n name?: string\n peerDependencies?: { eslint?: string }\n version?: string\n}\n\ninterface SemverApi {\n Range: new(range: string) => {\n range: string\n set: { value: string }[][]\n }\n minVersion: (range: string) => null | { version: string }\n satisfies: (version: string, range: string) => boolean\n subset: (subRange: string, superRange: string) => boolean\n validRange: (range: string) => null | string\n}\n\nconst semver = createRequire(import.meta.url)('semver') as SemverApi\n\nconst intersectTwoSemverRanges = (left: string, right: string): null | string => {\n if (semver.subset(left, right)) return left\n\n if (semver.subset(right, left)) return right\n\n const intersections = new Set<string>()\n const leftRange = new semver.Range(left)\n const rightRange = new semver.Range(right)\n\n for (const leftComparators of leftRange.set) {\n for (const rightComparators of rightRange.set) {\n const candidate = [...leftComparators, ...rightComparators]\n .map(comparator => comparator.value)\n .filter(Boolean)\n .join(' ')\n\n const normalized = new semver.Range(candidate || '*').range || '*'\n\n if (semver.minVersion(normalized)) intersections.add(normalized)\n }\n }\n\n return intersections.size > 0 ? [...intersections].join(' || ') : null\n}\n\nconst intersectSemverRanges = (ranges: string[]): null | string => {\n const validRanges = ranges.filter(range => semver.validRange(range) !== null)\n\n if (validRanges.length !== ranges.length || validRanges.length === 0) return null\n\n let intersection = validRanges[0]\n\n for (const range of validRanges.slice(1)) {\n intersection = intersectTwoSemverRanges(intersection, range) ?? ''\n\n if (!intersection) return null\n }\n\n return intersection\n}\n\nconst readPackageMetadataFromMain = (mainPath: string): null | PackageMetadata => {\n let directory = dirname(mainPath)\n\n for (let depth = 0; depth < 4; depth++) {\n const packagePath = join(directory, 'package.json')\n\n if (existsSync(packagePath)) {\n const metadata = JSON.parse(readFileSync(packagePath, 'utf8')) as PackageMetadata\n\n // Resolution by the requested specifier is authoritative. npm aliases\n // such as `typescript: npm:@typescript/typescript6@...` intentionally\n // expose a manifest whose real name differs from the installed key.\n if (metadata.name && metadata.version) return metadata\n }\n\n directory = dirname(directory)\n }\n\n return null\n}\n\nconst resolvePackageMetadata = (cwd: string, packageName: string): null | PackageMetadata => {\n const candidateRoots = [...new Set([\n cwd,\n findPnpmWorkspaceRoot(cwd)\n ].filter((root): root is string => Boolean(root)))]\n\n for (const candidateRoot of candidateRoots) {\n try {\n const manifestPath = findPackageJSON(\n packageName,\n pathToFileURL(join(candidateRoot, 'package.json'))\n )\n\n if (manifestPath) {\n const metadata = JSON.parse(readFileSync(manifestPath, 'utf8')) as PackageMetadata\n\n return metadata\n }\n } catch {\n // Fall through to main-entry and aggregate-package resolution.\n }\n\n try {\n const projectRequire = createRequire(join(candidateRoot, 'package.json'))\n\n try {\n const metadata = readPackageMetadataFromMain(projectRequire.resolve(packageName))\n\n if (metadata) return metadata\n } catch {\n const integrationsMain = projectRequire.resolve(INTEGRATIONS_PACKAGE_NAME)\n const integrationsRequire = createRequire(integrationsMain)\n const metadata = readPackageMetadataFromMain(integrationsRequire.resolve(packageName))\n\n if (metadata) return metadata\n }\n } catch {\n // Try a sibling workspace package below.\n }\n\n for (const projectPath of detectWorkspaceProjects(candidateRoot)) {\n const metadata = readPackageJson(join(candidateRoot, projectPath)) as null | PackageMetadata\n\n if (metadata?.name === packageName) return metadata\n }\n }\n\n return null\n}\n\ninterface NodeEngineAssessment {\n compatible: boolean\n consumerRange: null | string\n requiredRange: null | string\n targetRange: null | string\n}\n\nconst assessConsumerNodeEngine = (\n cwd: string,\n packageJson: null | Record<string, unknown>\n): NodeEngineAssessment => {\n const declaredConfigPackages = [...getDeclaredDependencyNames(packageJson)]\n .filter(packageName => packageName.startsWith('@santi020k/eslint-config-'))\n\n const requiredRanges = declaredConfigPackages.flatMap(packageName => {\n const range = resolvePackageMetadata(cwd, packageName)?.engines?.node\n\n return range ? [range] : []\n })\n\n const requiredRange = intersectSemverRanges(requiredRanges)\n const engines = packageJson?.engines\n\n const consumerRange = engines && typeof engines === 'object' && !Array.isArray(engines) ?\n (engines as Record<string, unknown>).node :\n null\n\n const normalizedConsumerRange = typeof consumerRange === 'string' ? consumerRange : null\n\n if (requiredRanges.length === 0) {\n return {\n compatible: true,\n consumerRange: normalizedConsumerRange,\n requiredRange: null,\n targetRange: null\n }\n }\n\n if (!requiredRange) {\n return {\n compatible: false,\n consumerRange: normalizedConsumerRange,\n requiredRange: null,\n targetRange: null\n }\n }\n\n if (!normalizedConsumerRange || !semver.validRange(normalizedConsumerRange)) {\n return {\n compatible: false,\n consumerRange: normalizedConsumerRange,\n requiredRange,\n targetRange: requiredRange\n }\n }\n\n const compatible = requiredRanges.every(range => semver.subset(normalizedConsumerRange, range))\n\n return {\n compatible,\n consumerRange: normalizedConsumerRange,\n requiredRange,\n targetRange: compatible ?\n null :\n intersectSemverRanges([normalizedConsumerRange, ...requiredRanges])\n }\n}\n\nconst getConsumerNodeEngineWarning = (\n cwd: string,\n packageJson: null | Record<string, unknown>\n): null | string => {\n const assessment = assessConsumerNodeEngine(cwd, packageJson)\n\n if (assessment.compatible) return null\n\n if (!assessment.requiredRange) {\n return 'Installed config packages do not share a compatible Node engine range.'\n }\n\n if (!assessment.consumerRange) {\n return `package.json does not declare engines.node; installed config packages require ${assessment.requiredRange}.`\n }\n\n if (!semver.validRange(assessment.consumerRange)) {\n return `package.json engines.node ${assessment.consumerRange} is invalid; ` +\n `installed config packages require ${assessment.requiredRange}.`\n }\n\n return `package.json engines.node ${assessment.consumerRange} permits unsupported runtimes; ` +\n `installed config packages require ${assessment.requiredRange}.`\n}\n\nconst getAstroDoctorNodeWarning = (metadata: PackageMetadata): null | string => {\n const nodeRange = metadata.engines?.node\n\n if (!nodeRange || semver.satisfies(process.versions.node, nodeRange)) return null\n\n return `Astro Doctor ${metadata.version ?? ''} requires Node ${nodeRange}, ` +\n `but the current runtime is ${process.versions.node}.`\n}\n\nconst getAstroDoctorEslintWarning = (\n metadata: PackageMetadata,\n eslintMetadata: null | PackageMetadata\n): null | string => {\n const eslintRange = metadata.peerDependencies?.eslint\n const eslintVersion = eslintMetadata?.version\n\n if (!eslintRange || !eslintVersion || semver.satisfies(eslintVersion, eslintRange)) return null\n\n return `Astro Doctor ${metadata.version ?? ''} requires ESLint ${eslintRange}, ` +\n `but this project resolves ${eslintVersion}.`\n}\n\nconst resolveBundledAstroDoctorMetadata = (cwd: string): null | PackageMetadata => {\n const projectBase = pathToFileURL(join(cwd, 'package.json'))\n\n for (const parent of [null, INTEGRATIONS_PACKAGE_NAME, FULL_PACKAGE_NAME]) {\n try {\n const parentManifest = parent ? findPackageJSON(parent, projectBase) : null\n const parentBase = parentManifest ? pathToFileURL(realpathSync(parentManifest)) : projectBase\n const extensionsManifest = findPackageJSON('@santi020k/eslint-config-extensions', parentBase)\n\n if (!extensionsManifest) continue\n\n const bundleBase = pathToFileURL(join(dirname(realpathSync(extensionsManifest)), 'dist/vendor/package.json'))\n const pluginManifest = findPackageJSON(ASTRO_DOCTOR_PACKAGE_NAME, bundleBase)\n\n if (!pluginManifest) continue\n\n return readPackageMetadataFromMain(join(dirname(pluginManifest), 'index.js'))\n } catch {\n // Older adapters and source workspaces resolve the plugin normally.\n }\n }\n\n return null\n}\n\nconst getAstroDoctorCompatibilityWarnings = (cwd: string, enabled: boolean): string[] => {\n if (!enabled) return []\n\n const pluginMetadata = resolveBundledAstroDoctorMetadata(cwd) ??\n resolvePackageMetadata(cwd, ASTRO_DOCTOR_PACKAGE_NAME)\n\n if (!pluginMetadata) {\n return [\n `Astro Doctor is enabled, but ${ASTRO_DOCTOR_PACKAGE_NAME} could not be resolved. ` +\n 'Reinstall dependencies or disable the `astro-doctor` feature.'\n ]\n }\n\n const eslintMetadata = resolvePackageMetadata(cwd, 'eslint')\n\n return [\n getAstroDoctorNodeWarning(pluginMetadata),\n getAstroDoctorEslintWarning(pluginMetadata, eslintMetadata)\n ].filter((warning): warning is string => warning !== null)\n}\n\n/**\n * Detects whether the project and the config packages resolve two different\n * physical copies of ESLint (e.g. a project pinning an older ESLint while the\n * config packages resolve their own ESLint 10 dependency). Only ESLint 10 is\n * supported; two parallel copies can also apply subtly different rule behavior\n * between editor and CLI.\n */\nexport const findDuplicateEslint = (cwd: string = process.cwd()): DuplicateEslintInfo | null => {\n try {\n const projectRequire = createRequire(join(cwd, 'package.json'))\n const projectEslintPkgPath = projectRequire.resolve('eslint/package.json')\n const coreMainPath = projectRequire.resolve('@santi020k/eslint-config-core')\n const coreRequire = createRequire(coreMainPath)\n const coreEslintPkgPath = coreRequire.resolve('eslint/package.json')\n\n if (projectEslintPkgPath === coreEslintPkgPath) return null\n\n const projectVersion = (JSON.parse(readFileSync(projectEslintPkgPath, 'utf8')) as { version?: string }).version ?? 'unknown'\n const configVersion = (JSON.parse(readFileSync(coreEslintPkgPath, 'utf8')) as { version?: string }).version ?? 'unknown'\n\n if (projectVersion === configVersion) return null\n\n return { configVersion, projectVersion }\n } catch {\n return null\n }\n}\n\nconst validateConfigContent = (\n configContent: string,\n hasV1FrameworkImports: boolean,\n declaredDependencies: Set<string>,\n summary: ReturnType<typeof getProjectSummary>\n): string[] => {\n const warnings: string[] = []\n\n if (hasV1FrameworkImports) {\n warnings.push('Config still imports v1 framework packages. Run `basic-eslint migrate --write` or switch to framework booleans.')\n }\n\n const usesComposerCall = /from\\s*['\"]@santi020k\\/eslint-config-(?:basic|full|lite)['\"]/.test(configContent) &&\n /\\b(?:defineConfig|eslintConfig)\\s*\\(/.test(configContent)\n\n const usesRecommendedComposer = /from\\s*['\"]@santi020k\\/eslint-config-(?:basic|full)\\/recommended['\"]/.test(\n configContent\n )\n\n const usesBasicComposer = usesComposerCall || usesRecommendedComposer\n\n const hasDetectedProjectScopes = summary.workspaceProjects.every(project => (\n summary.detectedProjects.includes(project)\n ))\n\n if (\n summary.workspaceProjects.length > 0 &&\n !configContent.includes('projects:') &&\n !(usesBasicComposer && hasDetectedProjectScopes)\n ) {\n warnings.push('Workspace packages were detected, but the root config does not use `projects` scoping.')\n }\n\n if (configContent.includes(LITE_PACKAGE_NAME)) {\n const missingFrameworkPackages = summary.frameworks\n .map(framework => FRAMEWORK_KEY_TO_PACKAGE[framework])\n .filter((packageName): packageName is string => Boolean(packageName))\n .filter(packageName => !declaredDependencies.has(packageName))\n\n if (missingFrameworkPackages.length > 0) {\n warnings.push(\n `Lite config detected ${formatList(summary.frameworks)}, but these framework config packages are not declared: ` +\n `${missingFrameworkPackages.join(', ')}. Install them or disable those frameworks.`\n )\n }\n\n if (needsIntegrationPackage(summary) && !declaredDependencies.has(INTEGRATIONS_PACKAGE_NAME)) {\n warnings.push(\n `Lite config detected optional integrations, but ${INTEGRATIONS_PACKAGE_NAME} is not declared. ` +\n 'Install it or remove the selected libraries, testing tools, formats, tools, and extension integrations.'\n )\n }\n\n if (hasPresetAll(configContent)) {\n warnings.push(\n 'Lite config uses Preset.All, which enables every optional integration and reduces the dependency benefits of lite. ' +\n 'Prefer enabling only the integrations this project uses.'\n )\n }\n }\n\n const missingPackages = getInstallPackages(\n summary,\n declaredDependencies,\n getExplicitConfigFeaturePackages(configContent)\n )\n\n if (missingPackages.length > 0) {\n warnings.push(\n `The active configuration requires undeclared packages: ${missingPackages.join(', ')}. ` +\n 'Run `basic-eslint install` to add the modular v3 dependency set.'\n )\n }\n\n return warnings\n}\n\nconst validateProjectSetup = (\n cwd: string,\n configPath: null | string,\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n hasV1FrameworkImports: boolean\n) => {\n const issues: string[] = []\n const warnings: string[] = []\n\n if (!readPackageJson(cwd)) {\n issues.push('package.json is missing or invalid.')\n }\n\n if (!configPath) {\n warnings.push('No eslint.config.js/mjs/cjs file found. Run `basic-eslint init` to create one.')\n } else if (!activeConfig && !hasV1FrameworkImports) {\n issues.push(`${basename(configPath)} could not be loaded. Run ESLint directly to see the import error.`)\n }\n\n if (!hasLintScript(cwd)) {\n warnings.push('No `lint` script found in package.json.')\n }\n\n return { issues, warnings }\n}\n\nconst isAstroDoctorConfigured = (\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n configContent: null | string\n): boolean => [\n activeConfig?.extensions.includes('Astro Doctor') ?? false,\n configContent?.includes('astro-doctor') ?? false,\n configContent?.includes('AstroDoctor') ?? false\n].includes(true)\n\nconst isAstroConfigured = (\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n summary: ReturnType<typeof getProjectSummary>\n): boolean => [\n activeConfig?.frameworks.includes('Astro') ?? false,\n summary.frameworks.includes('astro')\n].some(Boolean)\n\nconst checkAstroDoctorStatus = (\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n configContent: null | string,\n summary: ReturnType<typeof getProjectSummary>,\n warnings: string[]\n): boolean => {\n const astroDoctorEnabled = isAstroDoctorConfigured(activeConfig, configContent)\n const astroEnabled = isAstroConfigured(activeConfig, summary)\n\n if (astroDoctorEnabled && !astroEnabled) {\n warnings.push(\n 'Astro Doctor is enabled without Astro. Enable `frameworks: { astro: true }` or remove the `astro-doctor` feature.'\n )\n } else if (astroEnabled && !astroDoctorEnabled) {\n warnings.push(\n 'Astro was detected without Astro Doctor. Enable `features: { \"astro-doctor\": true }` for additional Astro diagnostics.'\n )\n }\n\n return astroDoctorEnabled\n}\n\nconst checkDuplicateEslint = (cwd: string, warnings: string[]) => {\n const duplicateEslint = findDuplicateEslint(cwd)\n\n if (duplicateEslint) {\n warnings.push(\n `Two ESLint copies are installed: the project resolves ${duplicateEslint.projectVersion} while the config packages resolve ${duplicateEslint.configVersion}. ` +\n 'Only ESLint 10 is supported, and parallel copies can apply different rule behavior between your editor and CLI. ' +\n 'Align the project\\'s eslint version with the config\\'s (or dedupe via your package manager).'\n )\n }\n}\n\nconst getTailwindEntryPointWarnings = (cwd: string): string[] => (\n getTailwindEntryPoints(cwd).flatMap(({ entryPoint, path: projectPath }) => {\n if (entryPoint) return []\n\n return [\n `Tailwind CSS was detected in ${projectPath}, but no conventional CSS entry point was found. ` +\n '`better-tailwindcss/no-unknown-classes` falls back to off; set `tailwind.entryPoint` ' +\n 'to enable strict validation or `tailwind.noUnknownClasses: false` to document a mixed CSS system.'\n ]\n })\n)\n\nconst buildDoctorDiagnosis = (\n cwd: string,\n packageJson: null | Record<string, unknown>,\n configPath: null | string,\n configContent: null | string,\n hasV1FrameworkImports: boolean,\n activeConfig: Awaited<ReturnType<typeof analyzeEslintConfig>>,\n declaredDependencies: Set<string>,\n summary: ReturnType<typeof getProjectSummary>\n): { issues: string[], warnings: string[] } => {\n const { issues, warnings } = validateProjectSetup(cwd, configPath, activeConfig, hasV1FrameworkImports)\n\n if (configContent) {\n warnings.push(...validateConfigContent(configContent, hasV1FrameworkImports, declaredDependencies, summary))\n }\n\n const astroDoctorEnabled = checkAstroDoctorStatus(activeConfig, configContent, summary, warnings)\n\n warnings.push(...getAstroDoctorCompatibilityWarnings(cwd, astroDoctorEnabled))\n\n checkDuplicateEslint(cwd, warnings)\n\n warnings.push(...getDeclarationProjectWarnings(cwd))\n\n warnings.push(...getTailwindEntryPointWarnings(cwd))\n\n const nodeEngineWarning = getConsumerNodeEngineWarning(cwd, packageJson)\n\n if (nodeEngineWarning) warnings.push(nodeEngineWarning)\n\n return { issues, warnings }\n}\n\nconst DOCTOR_FEATURE_ALIASES: Record<string, string> = {\n 'astro-doctor': 'Astro Doctor',\n 'best-practices': 'Best Practices',\n compat: 'Browser Compat',\n nest: 'NestJS',\n next: 'Next.js',\n node: 'Node.js',\n solid: 'SolidJS',\n 'tanstack-start': 'TanStack Start',\n tailwind: 'Tailwind CSS'\n}\n\nconst normalizeDoctorFeature = (value: string): string => {\n const comparableValue = DOCTOR_FEATURE_ALIASES[value] ?? value\n\n return comparableValue.toLowerCase().replaceAll(/[^a-z0-9]/g, '')\n}\n\nconst isDoctorFeatureEnabled = (name: string, enabled: string[]): boolean => {\n const normalizedName = normalizeDoctorFeature(name)\n\n return enabled.some(value => normalizeDoctorFeature(value) === normalizedName)\n}\n\nconst getTypeScriptConfig = (cwd: string): null | string => [\n 'tsconfig.json',\n 'tsconfig.base.json',\n 'tsconfig.app.json',\n 'tsconfig.node.json',\n 'tsconfig.eslint.json'\n].find(fileName => existsSync(join(cwd, fileName))) ?? null\n\nconst getCategoryPackageInstalled = (\n cwd: string,\n packageName: string\n): boolean => [\n packageName,\n INTEGRATIONS_PACKAGE_NAME,\n FULL_PACKAGE_NAME\n].some(candidate => resolvePackageMetadata(cwd, candidate) !== null)\n\nconst createDoctorFeatureActivations = (\n cwd: string,\n category: DoctorFeatureCategory,\n detected: string[],\n enabled: string[],\n includeEnabled = false\n): DoctorFeatureActivation[] => {\n const names = [...detected]\n\n if (includeEnabled) {\n for (const enabledName of enabled) {\n if (!isDoctorFeatureEnabled(enabledName, names)) names.push(enabledName)\n }\n }\n\n return names.map(name => {\n const packageName = category === 'frameworks' ?\n Object.entries(FRAMEWORK_KEY_TO_PACKAGE)\n .find(([framework]) => isDoctorFeatureEnabled(name, [framework]))?.[1] :\n CATEGORY_PACKAGES[category]\n\n if (!packageName) throw new Error(`Unknown doctor ${category} feature: ${name}`)\n\n const installed = getCategoryPackageInstalled(cwd, packageName)\n const isDetected = isDoctorFeatureEnabled(name, detected)\n const isEnabled = installed && isDoctorFeatureEnabled(name, enabled)\n let reason: string | undefined\n\n if (!installed) {\n reason = isDetected ?\n `Detected, but ${packageName} is not installed.` :\n `Enabled in the active config, but ${packageName} is not installed.`\n } else if (!isEnabled) {\n reason = 'Detected and installed, but the active config did not load this pack.'\n }\n\n return {\n detected: isDetected,\n enabled: isEnabled,\n installed,\n name,\n package: packageName,\n ...(reason ? { reason } : {})\n }\n })\n}\n\nconst getInactiveDoctorPackages = (\n cwd: string,\n detectedFrameworks: string[],\n summary: ReturnType<typeof getProjectSummary>,\n activeConfig?: NonNullable<Awaited<ReturnType<typeof analyzeEslintConfig>>>\n): DoctorProjectActivation['inactivePackages'] => {\n const inactivePackages = Object.entries(FRAMEWORK_KEY_TO_PACKAGE)\n .filter(([framework, packageName]) => (\n !detectedFrameworks.includes(framework) &&\n !isDoctorFeatureEnabled(framework, activeConfig?.frameworks ?? []) &&\n resolvePackageMetadata(cwd, packageName) !== null\n ))\n .map(([, packageName]) => ({\n package: packageName,\n reason: 'Installed, but no matching framework signal was detected in this project.'\n }))\n\n for (const [category, packageName] of Object.entries(CATEGORY_PACKAGES)) {\n if (\n summary[category as keyof typeof CATEGORY_PACKAGES].length === 0 &&\n (activeConfig?.[category as keyof typeof CATEGORY_PACKAGES]?.length ?? 0) === 0 &&\n resolvePackageMetadata(cwd, packageName) !== null\n ) {\n inactivePackages.push({\n package: packageName,\n reason: `Installed, but no ${category} signals were detected in this project.`\n })\n }\n }\n\n return inactivePackages\n}\n\nconst getDoctorProjectActivations = async (cwd: string): Promise<DoctorProjectActivation[]> => {\n const rootSummary = getProjectSummary(cwd)\n\n const projectPaths = [...new Set([\n '.',\n ...rootSummary.detectedProjects,\n ...rootSummary.workspaceProjects\n ])].sort((left, right) => {\n if (left === '.') return -1\n\n if (right === '.') return 1\n\n return left.localeCompare(right)\n })\n\n return Promise.all(projectPaths.map(async projectPath => {\n const projectRoot = projectPath === '.' ? cwd : join(cwd, projectPath)\n const summary = getProjectSummary(projectRoot)\n const projectActiveConfig = await analyzeEslintConfig(cwd, { projectPath, projectPaths }) ?? undefined\n const localConfig = getConfigPathIfPresent(projectRoot)\n const manifest = readPackageJson(projectRoot)\n const scripts = manifest?.scripts\n\n const lintScript = scripts && typeof scripts === 'object' && 'lint' in scripts &&\n typeof scripts.lint === 'string' ?\n scripts.lint :\n null\n\n const lintOwnership = {\n guidance: projectPath !== '.' && (localConfig || lintScript) ?\n 'This package declares a local config or lint script. Review root/package lint overlap; use `projects` ' +\n 'for root-owned scopes or explicit root ignores for independently linted apps. Keep type-aware ' +\n 'TypeScript scoped to each app instead of disabling it across the workspace.' :\n 'Use `projects` to scope framework, runtime, and TypeScript settings to this package when root lint owns it.',\n lintScript,\n localConfig: localConfig ? relative(projectRoot, localConfig) : null\n }\n\n const tsconfig = getTypeScriptConfig(projectRoot)\n const typescriptInstalled = resolvePackageMetadata(projectRoot, TYPESCRIPT_PACKAGE_NAME) !== null\n const typescriptEnabled = summary.typescript && Boolean(projectActiveConfig?.typescript)\n const tailwindDetected = summary.libraries.includes('tailwind')\n const tailwindEntryPoint = tailwindDetected ? findTailwindEntryPoint(projectRoot) ?? null : null\n\n const tailwindComponentClasses = tailwindEntryPoint ?\n findCssComponentClasses(projectRoot, tailwindEntryPoint).length :\n 0\n\n let typescriptMode: DoctorProjectActivation['typescript']['mode'] = 'off'\n let typescriptReason: string | undefined\n\n if (typescriptEnabled) {\n typescriptMode = summary.typescriptMode\n }\n\n if (!typescriptInstalled && summary.typescript) {\n typescriptReason = summary.typescriptMode === 'syntax' ?\n 'TypeScript declarations were detected, but TypeScript is not installed.' :\n 'A tsconfig was detected, but TypeScript is not installed.'\n } else if (typescriptInstalled && !summary.typescript) {\n typescriptReason = 'Installed, but no supported tsconfig was detected in this project.'\n } else if (typescriptInstalled && summary.typescript && !typescriptEnabled) {\n typescriptReason = 'Detected and installed, but the active config did not enable TypeScript.'\n }\n\n return {\n extensions: createDoctorFeatureActivations(\n projectRoot,\n 'extensions',\n summary.extensions,\n projectActiveConfig?.extensions ?? [],\n true\n ),\n formats: createDoctorFeatureActivations(\n projectRoot,\n 'formats',\n summary.formats,\n projectActiveConfig?.formats ?? [],\n true\n ),\n frameworks: createDoctorFeatureActivations(\n projectRoot,\n 'frameworks',\n summary.frameworks,\n projectActiveConfig?.frameworks ?? [],\n true\n ),\n ignores: projectActiveConfig?.ignores ?? [],\n inactivePackages: getInactiveDoctorPackages(projectRoot, summary.frameworks, summary, projectActiveConfig),\n libraries: createDoctorFeatureActivations(\n projectRoot,\n 'libraries',\n summary.libraries,\n projectActiveConfig?.libraries ?? [],\n true\n ),\n lintOwnership,\n path: projectPath,\n runtime: summary.runtime,\n tailwind: {\n componentClasses: tailwindComponentClasses,\n detected: tailwindDetected,\n entryPoint: tailwindEntryPoint,\n ...(tailwindDetected ?\n {\n exceptionGuidance: tailwindEntryPoint ?\n 'Keep unknown-class exceptions project-scoped with anchored `tailwind.ignore` patterns; ' +\n 'use a JSX comment for a one-line MDX directive.' :\n 'Set a project-scoped `tailwind.entryPoint` before adding unknown-class exceptions.'\n } :\n {}),\n unknownClassPolicy: getTailwindUnknownClassPolicy(\n tailwindDetected,\n tailwindEntryPoint,\n tailwindComponentClasses\n )\n },\n testing: createDoctorFeatureActivations(\n projectRoot,\n 'testing',\n summary.testing,\n projectActiveConfig?.testing ?? [],\n true\n ),\n tools: createDoctorFeatureActivations(\n projectRoot,\n 'tools',\n summary.tools,\n projectActiveConfig?.tools ?? [],\n true\n ),\n typescript: {\n detected: summary.typescript,\n enabled: typescriptEnabled,\n installed: typescriptInstalled,\n mode: typescriptMode,\n package: TYPESCRIPT_PACKAGE_NAME,\n ...(typescriptReason ? { reason: typescriptReason } : {}),\n tsconfig\n }\n }\n }))\n}\n\nconst formatDoctorActivation = (features: DoctorFeatureActivation[]): string => (\n features.length === 0 ?\n 'none' :\n features.map(feature => {\n const states = [\n feature.installed ? 'I' : '-',\n feature.detected ? 'D' : '-',\n feature.enabled ? 'E' : '-'\n ].join('')\n\n return `${feature.name}[${states}]`\n }).join(',')\n)\n\nconst formatDoctorProjectTable = (projects: DoctorProjectActivation[]): string[] => [\n '',\n 'Per-project activation (I=installed, D=detected, E=enabled):',\n 'Project | Runtime | TypeScript | Tailwind entry | Frameworks | Formats | Libraries | Extensions | Testing | Tools | Ignores',\n '--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---',\n ...projects.flatMap(project => {\n const typescriptStates = [\n project.typescript.installed ? 'I' : '-',\n project.typescript.detected ? 'D' : '-',\n project.typescript.enabled ? 'E' : '-'\n ].join('')\n\n const row = [\n project.path,\n project.runtime,\n `${project.typescript.mode}:${project.typescript.tsconfig ?? 'none'}[${typescriptStates}]`,\n project.tailwind.componentClasses > 0 ?\n `${project.tailwind.entryPoint ?? 'none'} (${project.tailwind.componentClasses} CSS classes)` :\n project.tailwind.entryPoint ?? 'none',\n formatDoctorActivation(project.frameworks),\n formatDoctorActivation(project.formats),\n formatDoctorActivation(project.libraries),\n formatDoctorActivation(project.extensions),\n formatDoctorActivation(project.testing),\n formatDoctorActivation(project.tools),\n formatList(project.ignores)\n ].join(' | ')\n\n const explanations = [\n project.typescript.reason,\n ...(project.path === '.' ? [] : [project.lintOwnership.guidance]),\n ...project.frameworks.map(feature => feature.reason),\n ...project.formats.map(feature => feature.reason),\n ...project.libraries.map(feature => feature.reason),\n ...project.extensions.map(feature => feature.reason),\n ...project.testing.map(feature => feature.reason),\n ...project.tools.map(feature => feature.reason),\n ...project.inactivePackages.map(item => `${item.package}: ${item.reason}`)\n ].filter((reason): reason is string => Boolean(reason))\n\n return [\n row,\n ...explanations.map(reason => ` ${project.path}: ${reason}`)\n ]\n })\n]\n\nconst outputDoctorResult = (\n json: boolean,\n verbose: boolean,\n configPath: null | string,\n packageManager: string,\n summary: ReturnType<typeof getProjectSummary>,\n installCommand: string | undefined,\n requiredPackages: string[],\n issues: string[],\n warnings: string[],\n projects: DoctorProjectActivation[],\n fixes: string[] = []\n): void => {\n let status = 'passed'\n\n if (issues.length > 0) {\n status = 'failed'\n } else if (warnings.length > 0) {\n status = 'passed with warnings'\n }\n\n const payload = {\n configFile: configPath ? basename(configPath) : null,\n fixes,\n ...(installCommand ? { installCommand } : {}),\n issues,\n packageManager,\n projects,\n requiredPackages,\n status,\n warnings,\n workspaceProjects: summary.workspaceProjects\n }\n\n if (json) {\n console.log(JSON.stringify(payload, null, 2))\n\n if (issues.length > 0) process.exitCode = 1\n\n return\n }\n\n console.log([\n `ESLint Basic doctor: ${status}`,\n `- Package manager: ${payload.packageManager}`,\n `- Config file: ${payload.configFile ?? 'none'}`,\n `- Workspace projects: ${formatList(summary.workspaceProjects)}`,\n `- Required packages: ${formatList(requiredPackages)}`,\n ...(installCommand ? [`- Install command: ${installCommand}`] : []),\n ...(verbose ? formatDoctorProjectTable(projects) : []),\n ...(fixes.length > 0 ? ['', 'Fixes applied:', ...fixes.map(fix => `- ${fix}`)] : []),\n ...(issues.length > 0 ? ['', 'Issues:', ...issues.map(issue => `- ${issue}`)] : []),\n ...(warnings.length > 0 ? ['', 'Warnings:', ...warnings.map(warning => `- ${warning}`)] : [])\n ].join('\\n'))\n\n if (issues.length > 0) process.exitCode = 1\n}\n\nconst createDoctorBackupPath = (filePath: string): string => {\n const preferred = `${filePath}.doctor.bak`\n\n if (!existsSync(preferred)) return preferred\n\n let index = 2\n\n while (existsSync(`${preferred}.${index}`)) index++\n\n return `${preferred}.${index}`\n}\n\nconst getDoctorDependencyVersion = (packageName: string): string => {\n if (packageName === 'eslint') return '^10.0.0'\n\n if (packageName === TYPESCRIPT_PACKAGE_NAME) return '^5.0.0'\n\n return '^3.0.0'\n}\n\nconst applyDoctorFixes = (\n cwd: string,\n packageJson: null | Record<string, unknown>,\n configPath: null | string,\n configContent: null | string,\n summary: ReturnType<typeof getProjectSummary>\n): string[] => {\n const fixes: string[] = []\n\n if (packageJson) {\n const updated = structuredClone(packageJson) as {\n devDependencies?: Record<string, string>\n engines?: Record<string, string>\n scripts?: Record<string, string>\n }\n\n let packageChanged = false\n\n updated.scripts ??= {}\n\n if (!updated.scripts.lint) {\n updated.scripts.lint = 'eslint . --max-warnings=0'\n\n packageChanged = true\n\n fixes.push('Added the `lint` script.')\n }\n\n updated.devDependencies ??= {}\n\n const declared = getDeclaredDependencyNames(packageJson)\n\n const explicitFeaturePackages = configContent ?\n getExplicitConfigFeaturePackages(configContent) :\n []\n\n const missingPackages = getInstallPackages(summary, declared, explicitFeaturePackages)\n\n const missingDependencies = Object.fromEntries(\n missingPackages.map(packageName => [packageName, getDoctorDependencyVersion(packageName)])\n )\n\n updated.devDependencies = {\n ...updated.devDependencies,\n ...missingDependencies\n }\n\n for (const packageName of missingPackages) {\n fixes.push(`Declared ${packageName}.`)\n\n packageChanged = true\n }\n\n const nodeEngine = assessConsumerNodeEngine(cwd, packageJson)\n\n if (!nodeEngine.compatible && nodeEngine.targetRange) {\n updated.engines ??= {}\n\n updated.engines.node = nodeEngine.targetRange\n\n packageChanged = true\n\n fixes.push(\n nodeEngine.consumerRange ?\n `Changed engines.node from ${nodeEngine.consumerRange} to ${nodeEngine.targetRange}.` :\n `Declared engines.node as ${nodeEngine.targetRange}.`\n )\n }\n\n if (packageChanged) {\n const packagePath = join(cwd, 'package.json')\n const backupPath = createDoctorBackupPath(packagePath)\n\n writeFileSync(backupPath, `${JSON.stringify(packageJson, null, 2)}\\n`)\n\n writeFileSync(packagePath, `${JSON.stringify(updated, null, 2)}\\n`)\n\n fixes.push(`Backed up package.json to ${basename(backupPath)}.`)\n }\n }\n\n if (!configPath) {\n const generated = createConfigContent(cwd)\n\n writeFileSync(generated.configPath, generated.configContent)\n\n fixes.push(`Created ${basename(generated.configPath)}.`)\n } else if (\n configContent &&\n Object.keys(FRAMEWORK_PACKAGE_TO_KEY).some(packageName => configContent.includes(packageName))\n ) {\n // The migration parser is declared later as a public helper and is safe to call after module initialization.\n // eslint-disable-next-line no-use-before-define\n const result = migrateConfigContent(configContent)\n\n if (result.changed) {\n const backupPath = createDoctorBackupPath(configPath)\n\n writeFileSync(backupPath, configContent)\n\n writeFileSync(configPath, result.content)\n\n fixes.push(`Migrated v1 framework imports and backed up the config to ${basename(backupPath)}.`)\n }\n }\n\n return fixes\n}\n\nconst hasV1FrameworkPackageImports = (configContent: null | string): boolean => (\n configContent !== null &&\n Object.keys(FRAMEWORK_PACKAGE_TO_KEY).some(packageName => configContent.includes(packageName))\n)\n\nexport const handleDoctor = async (\n cwd: string = process.cwd(),\n json = false,\n liteInstall = false,\n fix = false,\n verbose = false\n) => {\n const pnpmWorkspaceRoot = findPnpmWorkspaceRoot(cwd)\n const projectRoot = pnpmWorkspaceRoot ?? cwd\n const packageManager = detectPackageManager(projectRoot)\n const workspaceRoot = packageManager === 'pnpm' && pnpmWorkspaceRoot !== undefined\n const catalog = workspaceRoot ? getCatalogPreference(readPackageJson(projectRoot)) : false\n let configPath = getConfigPathIfPresent(projectRoot)\n let packageJson = readPackageJson(projectRoot)\n let declaredDependencies = getDeclaredDependencyNames(packageJson)\n let summary = getInstallProjectSummary(projectRoot)\n let activeConfig = await analyzeEslintConfig(projectRoot)\n let configContent = configPath ? readFileSync(configPath, 'utf8') : null\n let hasV1FrameworkImports = hasV1FrameworkPackageImports(configContent)\n\n if (liteInstall) {\n const liteInstallPackages = getLiteInstallPackages(summary, declaredDependencies)\n\n const liteInstallCommand = createInstallCommand(\n packageManager,\n addCompatibleConfigVersions(\n liteInstallPackages,\n getCompatibleConfigVersion(packageJson, getCliVersion(), pnpmWorkspaceRoot)\n ),\n workspaceRoot,\n catalog\n )\n\n if (json) {\n console.log(JSON.stringify({\n command: liteInstallCommand,\n packageManager,\n packages: liteInstallPackages\n }, null, 2))\n } else {\n console.log(liteInstallCommand)\n }\n\n return\n }\n\n const fixes = fix ? applyDoctorFixes(projectRoot, packageJson, configPath, configContent, summary) : []\n\n if (fixes.length > 0) {\n configPath = getConfigPathIfPresent(projectRoot)\n\n packageJson = readPackageJson(projectRoot)\n\n declaredDependencies = getDeclaredDependencyNames(packageJson)\n\n summary = getInstallProjectSummary(projectRoot)\n\n activeConfig = await analyzeEslintConfig(projectRoot)\n\n configContent = configPath ? readFileSync(configPath, 'utf8') : null\n\n hasV1FrameworkImports = hasV1FrameworkPackageImports(configContent)\n }\n\n const explicitFeaturePackages = configContent ?\n getExplicitConfigFeaturePackages(configContent) :\n []\n\n const requiredPackages = getInstallPackages(summary, declaredDependencies, explicitFeaturePackages)\n\n const installCommand = requiredPackages.length > 0 ?\n createInstallCommand(\n packageManager,\n addCompatibleConfigVersions(\n requiredPackages,\n getCompatibleConfigVersion(packageJson, getCliVersion(), pnpmWorkspaceRoot)\n ),\n workspaceRoot,\n catalog\n ) :\n undefined\n\n const { issues, warnings } = buildDoctorDiagnosis(\n projectRoot,\n packageJson,\n configPath,\n configContent,\n hasV1FrameworkImports,\n activeConfig,\n declaredDependencies,\n summary\n )\n\n const projects = await getDoctorProjectActivations(projectRoot)\n\n warnings.push(...await getConsumerOverrideGuidance(projectRoot, configPath))\n\n outputDoctorResult(\n json,\n verbose,\n configPath,\n packageManager,\n summary,\n installCommand,\n requiredPackages,\n issues,\n warnings,\n projects,\n fixes\n )\n}\n\nconst isMinimumReleaseAgeFailure = (output: string): boolean => (\n /minimum[\\s_-]*release[\\s_-]*age/i.test(output) ||\n /release (?:is )?(?:too young|not old enough)/i.test(output) ||\n /blocked by (?:the )?minimum age/i.test(output)\n)\n\nexport const handleInstall = (\n cwd: string = process.cwd(),\n dryRun = false,\n runner: InstallRunner = spawnSync\n) => {\n const pnpmWorkspaceRoot = findPnpmWorkspaceRoot(cwd)\n const projectRoot = pnpmWorkspaceRoot ?? cwd\n const packageJson = readPackageJson(projectRoot)\n\n if (!packageJson) {\n console.error('❌ package.json is missing or invalid.')\n\n process.exitCode = 1\n\n return\n }\n\n const packageManager = detectPackageManager(projectRoot)\n const configPath = getConfigPathIfPresent(projectRoot)\n\n const explicitFeaturePackages = configPath ?\n getExplicitConfigFeaturePackages(readFileSync(configPath, 'utf8')) :\n []\n\n const packages = getInstallPackages(\n getInstallProjectSummary(projectRoot),\n getDeclaredDependencyNames(packageJson),\n explicitFeaturePackages\n )\n\n const workspaceRoot = packageManager === 'pnpm' && pnpmWorkspaceRoot !== undefined\n const catalog = workspaceRoot ? getCatalogPreference(packageJson) : false\n\n const installPackages = addCompatibleConfigVersions(\n packages,\n getCompatibleConfigVersion(packageJson, getCliVersion(), pnpmWorkspaceRoot)\n )\n\n if (packages.length === 0) {\n console.log('✅ All packages required by the detected ESLint configuration are already declared.')\n\n return\n }\n\n const installCommand = createInstallCommand(packageManager, installPackages, workspaceRoot, catalog)\n\n if (dryRun) {\n console.log(installCommand)\n\n return\n }\n\n console.log(`Installing detected ESLint dependencies:\\n${installCommand}`)\n\n const [command, args] = createInstallInvocation(packageManager, installPackages, workspaceRoot, catalog)\n\n const result = runner(command, args, {\n cwd: projectRoot,\n encoding: 'utf8',\n maxBuffer: 16 * 1024 * 1024,\n stdio: 'pipe'\n })\n\n const stdout = String(result.stdout ?? '')\n const stderr = String(result.stderr ?? '')\n\n if (stdout) process.stdout.write(stdout)\n\n if (stderr) process.stderr.write(stderr)\n\n if (result.error) {\n console.error(`❌ Failed to run ${packageManager}: ${result.error.message}`)\n\n process.exitCode = 1\n } else if (result.status !== 0) {\n if (packageManager === 'pnpm' && isMinimumReleaseAgeFailure(`${stdout}\\n${stderr}`)) {\n console.error(\n '❌ pnpm minimumReleaseAge temporarily blocks the compatible ESLint config release ' +\n `(${installPackages.join(', ')}). Keep the generated compatible range and either wait for the policy window ` +\n 'or add the exact release to minimumReleaseAgeExclude in pnpm-workspace.yaml.'\n )\n }\n\n process.exitCode = result.status ?? 1\n }\n}\n\nexport const handleDocs = (cwd: string = process.cwd()) => {\n const outputPath = join(cwd, 'ESLINT_STANDARDS.md')\n\n writeFileSync(outputPath, createStandardsContent(cwd))\n\n console.log('✅ Generated ESLINT_STANDARDS.md')\n}\n\nconst migrateConfigContent = (content: string): { changed: boolean, content: string, frameworks: string[] } => {\n const importedFrameworks = Object.entries(FRAMEWORK_PACKAGE_TO_KEY)\n .filter(([packageName]) => content.includes(packageName))\n .map(([, framework]) => framework)\n\n if (importedFrameworks.length === 0) {\n return { changed: false, content, frameworks: [] }\n }\n\n const frameworks = getFrameworkKeys(importedFrameworks)\n\n const migrated = [\n 'import { defineConfig } from \\'@santi020k/eslint-config-basic\\'',\n '',\n 'export default await defineConfig({',\n ' frameworks: {',\n ` ${frameworks.map(key => `${toPropertyKey(key)}: true`).join(',\\n ')}`,\n ' }',\n '})',\n ''\n ].join('\\n')\n\n return { changed: true, content: migrated, frameworks }\n}\n\nconst processConfigMigration = (configPath: string, write: boolean, suggestions: string[]): string[] => {\n const applied: string[] = []\n\n if (!existsSync(configPath)) {\n if (write) suggestions.push('- No ESLint config file was found to rewrite.')\n\n return applied\n }\n\n const configContent = readFileSync(configPath, 'utf8')\n\n if (configContent.includes('@santi020k/eslint-config-') && !configContent.includes('frameworks:')) {\n suggestions.push('- This config appears to import v1 framework packages; replace those imports with framework booleans.')\n }\n\n if (!write) return applied\n\n const result = migrateConfigContent(configContent)\n\n if (result.changed) {\n const backupPath = `${configPath}.bak`\n\n writeFileSync(backupPath, configContent)\n\n writeFileSync(configPath, result.content)\n\n const message = `Rewrote ${basename(configPath)} with framework booleans: ${result.frameworks.join(', ')}. Original backed up to ${basename(backupPath)}.`\n\n applied.push(message)\n\n suggestions.push(`- ${message}`)\n } else {\n suggestions.push('- No v1 framework imports were found to rewrite.')\n }\n\n return applied\n}\n\nexport const handleMigrate = (\n cwd: string = process.cwd(),\n write = false,\n json = false,\n target = 'v2',\n check = false,\n full = false\n) => {\n if (target === 'v3' || target === '3') {\n const summary = getInstallProjectSummary(cwd)\n\n handleMigrateV3(cwd, {\n declaredConfigPackages: getWorkspaceDeclaredConfigPackages(cwd, summary),\n extensions: summary.extensions,\n formats: summary.formats,\n frameworks: summary.frameworks,\n libraries: summary.libraries,\n packageManager: detectPackageManager(cwd),\n testing: summary.testing,\n tools: summary.tools,\n typescript: summary.typescript\n }, { check, full, json, write })\n\n return\n }\n\n if (target !== 'v2' && target !== '2') {\n throw new Error(`Unsupported migration target \"${target}\". Use --to v2 or --to v3.`)\n }\n\n const configPath = getConfigPathIfPresent(cwd) ?? join(cwd, getDefaultConfigFilename(cwd))\n\n const suggestions = [\n 'v1 to v2 migration suggestions:',\n '- Install only @santi020k/eslint-config-basic for the public config API.',\n '- Replace framework imports with bundled booleans such as frameworks: { react: true, next: true }.',\n '- Remove app-level @santi020k/eslint-config-react/next/vue/etc. config package imports.',\n '- Try defineConfig() first; v3 auto-detects supported frameworks and integrations.',\n '- Use basic-eslint explain to review what v3 detects before committing the migration.'\n ]\n\n const applied = processConfigMigration(configPath, write, suggestions)\n\n if (json) {\n console.log(JSON.stringify({\n applied,\n configFile: existsSync(configPath) ? basename(configPath) : null,\n suggestions: suggestions.slice(1),\n title: suggestions[0],\n write\n }, null, 2))\n\n return\n }\n\n console.log(suggestions.join('\\n'))\n}\n\nconst dispatchCommand = (\n command: string,\n cwd: string,\n flags: {\n concurrency?: string\n files: string[]\n hasAnalyzeSource: boolean\n hasCheck: boolean\n hasCompatibility: boolean\n hasCreate: boolean\n hasDryRun: boolean\n hasExplicit: boolean\n hasFix: boolean\n hasForce: boolean\n hasFull: boolean\n hasJson: boolean\n hasLiteInstall: boolean\n hasPrune: boolean\n hasRulesOnly: boolean\n hasSemanticOnly: boolean\n hasVerbose: boolean\n hasWrite: boolean\n hasWithEslintMcp: boolean\n maxDurationMs?: number\n maxRuleTimeMs?: number\n maxWarnings?: number\n output?: string\n preset?: string\n positional?: string\n rule?: string\n snapshotPath?: string\n target?: string\n }\n) => {\n switch (command) {\n case 'baseline': {\n try {\n handleBaseline(cwd, {\n json: flags.hasJson,\n preset: flags.preset,\n prune: flags.hasPrune\n })\n } catch (error) {\n console.error(`❌ Failed to create ESLint baseline: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'compatibility': {\n handleCompatibility(cwd, flags.hasJson)\n\n break\n }\n\n case 'config-types': {\n try {\n handleConfigTypes(cwd, {\n files: flags.files,\n json: flags.hasJson\n })\n } catch (error) {\n console.error(`❌ Failed to check config declaration portability: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'diff': {\n handleSnapshotDiff(cwd, {\n files: flags.files,\n json: flags.hasJson,\n rulesOnly: flags.hasRulesOnly,\n snapshotPath: flags.snapshotPath\n }).catch((error: unknown) => {\n console.error(`❌ Failed to diff ESLint configuration: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'docs': {\n handleDocs(cwd)\n\n break\n }\n\n case 'doctor': {\n handleDoctor(cwd, flags.hasJson, flags.hasLiteInstall, flags.hasFix, flags.hasVerbose)\n .catch((error: unknown) => {\n console.error(`❌ Failed to run doctor: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'explain': {\n if (flags.rule) {\n handleExplainRule(cwd, {\n file: flags.files[0],\n json: flags.hasJson,\n rule: flags.rule\n }).catch((error: unknown) => {\n console.error(`❌ Failed to explain ESLint rule: ${String(error)}`)\n\n process.exitCode = 1\n })\n } else {\n handleExplain(cwd, flags.hasJson)\n }\n\n break\n }\n\n case 'explain-preset': {\n if (!flags.positional) {\n console.error('Missing preset. Usage: basic-eslint explain-preset <preset> [options]')\n\n process.exitCode = 1\n\n break\n }\n\n handleExplainPreset(cwd, flags.positional, {\n analyzeSource: flags.hasAnalyzeSource,\n compatibility: flags.hasCompatibility,\n file: flags.files[0],\n files: flags.files,\n json: flags.hasJson,\n output: flags.output,\n semanticOnly: flags.hasSemanticOnly,\n write: flags.hasWrite\n }).catch((error: unknown) => {\n console.error(`❌ Failed to explain preset: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'generate-skill': {\n handleGenerateSkill(cwd, flags.hasForce, {\n check: flags.hasCheck,\n createAgentsMd: flags.hasCreate,\n withEslintMcp: flags.hasWithEslintMcp\n }).catch((error: unknown) => {\n console.error(`❌ Failed to generate skill files: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'init': {\n handleInit(cwd, flags.hasCheck, flags.hasExplicit)\n\n break\n }\n\n case 'inspect': {\n handleInspect(cwd, flags.hasJson).catch((error: unknown) => {\n console.error(`❌ Failed to inspect project: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'install': {\n handleInstall(cwd, flags.hasDryRun)\n\n break\n }\n\n case 'migrate': {\n try {\n handleMigrate(\n cwd,\n flags.hasWrite,\n flags.hasJson,\n flags.target ?? 'v2',\n flags.hasCheck,\n flags.hasFull\n )\n } catch (error) {\n console.error(`❌ Failed to migrate ESLint configuration: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'profile': {\n try {\n handleProfile(cwd, {\n concurrency: flags.concurrency,\n files: flags.files,\n json: flags.hasJson,\n maxDurationMs: flags.maxDurationMs,\n maxRuleTimeMs: flags.maxRuleTimeMs,\n maxWarnings: flags.maxWarnings\n })\n } catch (error) {\n console.error(`❌ Failed to profile ESLint: ${String(error)}`)\n\n process.exitCode = 1\n }\n\n break\n }\n\n case 'snapshot': {\n handleSnapshot(cwd, {\n check: flags.hasCheck,\n files: flags.files,\n json: flags.hasJson,\n rulesOnly: flags.hasRulesOnly,\n snapshotPath: flags.snapshotPath\n }).catch((error: unknown) => {\n console.error(`❌ Failed to snapshot ESLint configuration: ${String(error)}`)\n\n process.exitCode = 1\n })\n\n break\n }\n\n case 'update': {\n handleUpdate(cwd)\n\n break\n }\n\n default: {\n console.error(`Unknown command: ${command}`)\n\n printUsage()\n\n process.exitCode = 1\n }\n }\n}\n\nconst getFlagValue = (argv: string[], flag: string): string | undefined => {\n const inline = argv.find(argument => argument.startsWith(`${flag}=`))\n\n if (inline) return inline.slice(flag.length + 1)\n\n const index = argv.indexOf(flag)\n\n return index >= 0 ? argv[index + 1] : undefined\n}\n\nconst getFlagValues = (argv: string[], flag: string): string[] => argv.flatMap((argument, index) => {\n if (argument.startsWith(`${flag}=`)) return [argument.slice(flag.length + 1)]\n\n if (argument === flag && argv[index + 1]) return [argv[index + 1]]\n\n return []\n})\n\nconst getNumericFlagValue = (argv: string[], flag: string): number | undefined => {\n const value = getFlagValue(argv, flag)\n const present = argv.includes(flag) || argv.some(argument => argument.startsWith(`${flag}=`))\n\n if (!present) return undefined\n\n if (value === undefined || value.trim() === '' || value.startsWith('--')) return Number.NaN\n\n return Number(value)\n}\n\nexport const runCli = (argv: string[] = process.argv, cwd: string = process.cwd()) => {\n const command = argv[2]\n const isHelp = argv.slice(3).some(argument => argument === '--help' || argument === '-h')\n const isVersion = command === '--version' || command === '-v'\n\n if (!command || command === '--help' || command === '-h') {\n printUsage()\n\n return\n }\n\n if (isVersion) {\n console.log(getCliVersion())\n\n return\n }\n\n if (isHelp) {\n if (COMMAND_OPTIONS[command]) printCommandUsage(command)\n else printUsage()\n\n return\n }\n\n const validation = validateCommandArguments(command, argv.slice(3))\n\n if (!validation.ok) return\n\n dispatchCommand(command, cwd, {\n concurrency: getFlagValue(argv, '--concurrency'),\n files: getFlagValues(argv, '--file'),\n hasAnalyzeSource: argv.includes('--analyze-source'),\n hasCheck: argv.includes('--check'),\n hasCompatibility: argv.includes('--compatibility'),\n hasCreate: argv.includes('--create'),\n hasDryRun: argv.includes('--dry-run'),\n hasExplicit: argv.includes('--explicit'),\n hasFix: argv.includes('--fix'),\n hasForce: argv.includes('--force'),\n hasFull: argv.includes('--full'),\n hasJson: argv.includes('--json'),\n hasLiteInstall: argv.includes('--lite-install'),\n hasPrune: argv.includes('--prune'),\n hasRulesOnly: argv.includes('--rules-only'),\n hasSemanticOnly: argv.includes('--semantic-only'),\n hasVerbose: argv.includes('--verbose'),\n hasWithEslintMcp: argv.includes('--with-eslint-mcp'),\n hasWrite: argv.includes('--write'),\n maxDurationMs: getNumericFlagValue(argv, '--max-duration'),\n maxRuleTimeMs: getNumericFlagValue(argv, '--max-rule-time'),\n maxWarnings: getNumericFlagValue(argv, '--max-warnings'),\n output: getFlagValue(argv, '--output'),\n positional: validation.positional,\n preset: getFlagValue(argv, '--preset'),\n rule: command === 'explain' ? validation.positional : undefined,\n snapshotPath: getFlagValue(argv, '--snapshot-path'),\n target: getFlagValue(argv, '--to')\n })\n}\n\nexport const isCliEntrypoint = (\n entryPath: string,\n modulePath: string = fileURLToPath(import.meta.url)\n): boolean => entryPath === modulePath || [\n 'basic-eslint',\n 'cli.js',\n 'cli.ts'\n].includes(basename(entryPath))\n\n// Only run if this is the entry point\nif (process.argv[1] && isCliEntrypoint(process.argv[1])) {\n runCli()\n}\n"],"mappings":"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","names":[]}