@santi020k/eslint-config-basic 3.1.0 → 3.3.0

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/agent-skill-generator.d.ts +7 -18
  3. package/dist/agent-skill-generator.js +54 -18
  4. package/dist/agent-skill-generator.js.map +1 -0
  5. package/dist/cli-advanced.d.ts +7 -0
  6. package/dist/cli-advanced.js +74 -15
  7. package/dist/cli-advanced.js.map +1 -0
  8. package/dist/cli-migration.js +388 -34
  9. package/dist/cli-migration.js.map +1 -0
  10. package/dist/cli-package-manager.d.ts +10 -0
  11. package/dist/cli-package-manager.js +135 -0
  12. package/dist/cli-package-manager.js.map +1 -0
  13. package/dist/cli-preset.d.ts +103 -0
  14. package/dist/cli-preset.js +562 -0
  15. package/dist/cli-preset.js.map +1 -0
  16. package/dist/cli-workflows.js +1 -0
  17. package/dist/cli-workflows.js.map +1 -0
  18. package/dist/cli.d.ts +14 -2
  19. package/dist/cli.js +689 -94
  20. package/dist/cli.js.map +1 -0
  21. package/dist/define-config-metadata.d.ts +10 -0
  22. package/dist/define-config-metadata.js +16 -0
  23. package/dist/define-config-metadata.js.map +1 -0
  24. package/dist/frameworks.d.ts +1 -0
  25. package/dist/frameworks.js +6 -2
  26. package/dist/frameworks.js.map +1 -0
  27. package/dist/index.d.ts +10 -3
  28. package/dist/index.js +145 -27
  29. package/dist/index.js.map +1 -0
  30. package/dist/integrations.js +4 -1
  31. package/dist/integrations.js.map +1 -0
  32. package/dist/optional-package-errors.d.ts +3 -0
  33. package/dist/optional-package-errors.js +15 -0
  34. package/dist/optional-package-errors.js.map +1 -0
  35. package/dist/recommended.js +1 -0
  36. package/dist/recommended.js.map +1 -0
  37. package/dist/resolvers.js +1 -0
  38. package/dist/resolvers.js.map +1 -0
  39. package/dist/tailwind.d.ts +3 -1
  40. package/dist/tailwind.js +115 -13
  41. package/dist/tailwind.js.map +1 -0
  42. package/package.json +20 -19
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli-workflows.ts"],"sourcesContent":["/* eslint-disable complexity -- workflow handlers intentionally cover CLI output and compatibility branches */\n/* eslint-disable no-console -- CLI handlers own user-facing terminal output */\nimport { spawnSync } from 'node:child_process'\nimport { existsSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { basename, dirname, extname, join, relative, resolve } from 'node:path'\n\nexport interface CommandResult {\n status: number\n stderr: string\n stdout: string\n}\n\nexport type CommandRunner = (\n executable: string,\n args: string[],\n cwd: string\n) => CommandResult\n\nexport interface BaselineOptions {\n json?: boolean\n preset?: string\n prune?: boolean\n}\n\nexport interface ProfileOptions {\n concurrency?: string\n files?: string[]\n json?: boolean\n maxDurationMs?: number\n maxRuleTimeMs?: number\n maxWarnings?: number\n}\n\nexport interface SnapshotOptions {\n check?: boolean\n files?: string[]\n json?: boolean\n snapshotPath?: string\n}\n\nexport interface SnapshotDiff {\n added: string[]\n changed: { after: unknown, before: unknown, rule: string }[]\n file: string\n removed: string[]\n}\n\ninterface EslintSnapshotFile {\n globals: Record<string, unknown>\n languageOptions: {\n ecmaVersion?: unknown\n sourceType?: unknown\n }\n plugins: string[]\n rules: Record<string, unknown>\n}\n\ninterface EslintSnapshot {\n files: Record<string, EslintSnapshotFile>\n version: 1\n}\n\ninterface EslintStats {\n times?: {\n passes?: {\n fix?: { total?: number }\n parse?: { total?: number }\n rules?: Record<string, { total?: number }>\n total?: number\n }[]\n }\n}\n\ninterface EslintResult {\n errorCount?: number\n filePath?: string\n fatalErrorCount?: number\n stats?: EslintStats\n warningCount?: number\n}\n\ninterface ProfileRun {\n concurrency: string\n durationMs: number\n errorCount: number\n fatalErrorCount: number\n fileCount: number\n parseMs: number\n ruleMs: number\n slowestRules: { rule: string, timeMs: number }[]\n status: number\n warningCount: number\n}\n\ninterface ProjectEslint {\n calculateConfigForFile: (filePath: string) => Promise<unknown>\n isPathIgnored?: (filePath: string) => Promise<boolean>\n}\n\ntype ProjectEslintConstructor = new(options: { cwd: string }) => ProjectEslint\n\nconst SNAPSHOT_FILENAME = '.eslint-config-snapshot.json'\n\nconst SOURCE_EXTENSIONS = new Set([\n '.astro',\n '.cjs',\n '.css',\n '.cts',\n '.gql',\n '.graphql',\n '.html',\n '.js',\n '.json',\n '.json5',\n '.jsonc',\n '.jsx',\n '.md',\n '.mdx',\n '.mjs',\n '.mts',\n '.svelte',\n '.toml',\n '.ts',\n '.tsx',\n '.vue',\n '.yaml',\n '.yml'\n])\n\nconst IGNORED_DIRECTORIES = new Set([\n '.git',\n '.next',\n '.nuxt',\n '.output',\n '.turbo',\n 'build',\n 'coverage',\n 'dist',\n 'node_modules'\n])\n\nexport const defaultCommandRunner: CommandRunner = (executable, args, cwd) => {\n const result = spawnSync(executable, args, {\n cwd,\n encoding: 'utf8',\n env: process.env,\n maxBuffer: 50 * 1024 * 1024\n })\n\n return {\n status: result.status ?? 1,\n stderr: result.stderr,\n stdout: result.stdout\n }\n}\n\nconst readJson = (filePath: string): unknown => {\n if (!existsSync(filePath)) return null\n\n try {\n return JSON.parse(readFileSync(filePath, 'utf8')) as unknown\n } catch {\n return null\n }\n}\n\nconst resolveProjectRequire = (cwd: string) => createRequire(join(cwd, 'package.json'))\n\nconst resolveEslintCli = (cwd: string): string => {\n const projectRequire = resolveProjectRequire(cwd)\n const packagePath = projectRequire.resolve('eslint/package.json')\n const metadata = readJson(packagePath) as null | { bin?: string | Record<string, string> }\n const bin = typeof metadata?.bin === 'string' ? metadata.bin : metadata?.bin?.eslint\n\n if (!bin) throw new Error('The project ESLint CLI could not be resolved. Install eslint before running this command.')\n\n return resolve(dirname(packagePath), bin)\n}\n\nconst runEslint = (\n cwd: string,\n args: string[],\n runner: CommandRunner\n): CommandResult => runner(process.execPath, [resolveEslintCli(cwd), ...args], cwd)\n\nconst outputCommandFailure = (label: string, result: CommandResult): never => {\n const details = result.stderr.trim() || result.stdout.trim() || `exit code ${result.status}`\n\n throw new Error(`${label} failed: ${details}`)\n}\n\nconst createBackupPath = (filePath: string, suffix: string): string => {\n const preferred = `${filePath}.${suffix}.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 updateConfigStrictPreset = (cwd: string, preset: string): null | string => {\n if (!['ci', 'pedantic'].includes(preset)) {\n throw new Error(`Unsupported baseline preset \"${preset}\". Use \"ci\" or \"pedantic\".`)\n }\n\n const configPath = [\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n 'eslint.config.ts',\n 'eslint.config.mts',\n 'eslint.config.cts'\n ].map(name => join(cwd, name)).find(path => existsSync(path))\n\n if (!configPath) throw new Error('No eslint.config.* file was found. Run basic-eslint init first.')\n\n const content = readFileSync(configPath, 'utf8')\n\n if (new RegExp(`strict\\\\s*:\\\\s*['\"]${preset}['\"]`).test(content)) return null\n\n const zeroArgumentPattern = /\\bdefineConfig\\(\\s*\\)/\n\n if (!zeroArgumentPattern.test(content)) {\n throw new Error(\n `Cannot safely add strict: \"${preset}\" to a customized config. ` +\n 'Add it manually, then run basic-eslint baseline without --preset.'\n )\n }\n\n const backupPath = createBackupPath(configPath, 'baseline')\n\n writeFileSync(backupPath, content)\n\n writeFileSync(configPath, content.replace(zeroArgumentPattern, `defineConfig({ strict: '${preset}' })`))\n\n return basename(backupPath)\n}\n\nexport const handleBaseline = (\n cwd: string = process.cwd(),\n options: BaselineOptions = {},\n runner: CommandRunner = defaultCommandRunner\n): void => {\n const backup = options.preset ? updateConfigStrictPreset(cwd, options.preset) : null\n\n const args = options.prune ?\n ['.', '--prune-suppressions'] :\n ['.', '--fix', '--suppress-all']\n\n const result = runEslint(cwd, args, runner)\n\n if (result.status !== 0) outputCommandFailure('ESLint baseline', result)\n\n const payload = {\n action: options.prune ? 'pruned' : 'created',\n backup,\n preset: options.preset ?? null,\n suppressionsFile: join(cwd, 'eslint-suppressions.json')\n }\n\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2))\n\n return\n }\n\n console.log(options.prune ?\n '✅ Pruned unused ESLint suppressions.' :\n '✅ Created or refreshed eslint-suppressions.json for existing violations.')\n\n if (backup) console.log(`📦 Backed up the previous config to ${backup}.`)\n}\n\nconst getStatsPasses = (result: EslintResult) => result.stats?.times?.passes ?? []\n\nconst summarizeProfileResults = (\n concurrency: string,\n results: EslintResult[],\n durationMs: number,\n status: number\n): ProfileRun => {\n const ruleTimes = new Map<string, number>()\n let parseMs = 0\n let ruleMs = 0\n\n for (const result of results) {\n for (const pass of getStatsPasses(result)) {\n parseMs += pass.parse?.total ?? 0\n\n for (const [rule, timing] of Object.entries(pass.rules ?? {})) {\n const time = timing.total ?? 0\n\n ruleMs += time\n\n ruleTimes.set(rule, (ruleTimes.get(rule) ?? 0) + time)\n }\n }\n }\n\n return {\n concurrency,\n durationMs,\n errorCount: results.reduce((total, result) => total + (result.errorCount ?? 0), 0),\n fatalErrorCount: results.reduce((total, result) => total + (result.fatalErrorCount ?? 0), 0),\n fileCount: results.length,\n parseMs,\n ruleMs,\n slowestRules: [...ruleTimes.entries()]\n .sort((a, b) => b[1] - a[1])\n .slice(0, 15)\n .map(([rule, timeMs]) => ({ rule, timeMs })),\n status,\n warningCount: results.reduce((total, result) => total + (result.warningCount ?? 0), 0)\n }\n}\n\nconst runProfile = (\n cwd: string,\n files: string[],\n concurrency: string,\n runner: CommandRunner\n): ProfileRun => {\n const startedAt = performance.now()\n\n const result = runEslint(\n cwd,\n [...files, '--stats', '--format', 'json', '--concurrency', concurrency],\n runner\n )\n\n const durationMs = performance.now() - startedAt\n let parsed: EslintResult[] = []\n\n try {\n parsed = JSON.parse(result.stdout) as EslintResult[]\n } catch {\n outputCommandFailure('ESLint profile', result)\n }\n\n return summarizeProfileResults(concurrency, parsed, durationMs, result.status)\n}\n\nconst round = (value: number): number => Math.round(value * 100) / 100\n\nexport const handleProfile = (\n cwd: string = process.cwd(),\n options: ProfileOptions = {},\n runner: CommandRunner = defaultCommandRunner\n): void => {\n for (const [name, value] of [\n ['max-duration', options.maxDurationMs],\n ['max-rule-time', options.maxRuleTimeMs],\n ['max-warnings', options.maxWarnings]\n ] as const) {\n if (value !== undefined && (!Number.isFinite(value) || value < 0)) {\n throw new Error(`--${name} must be a non-negative number.`)\n }\n }\n\n const files = options.files?.length ? options.files : ['.']\n const concurrencyModes = options.concurrency ? [options.concurrency] : ['off', 'auto']\n const runs = concurrencyModes.map(concurrency => runProfile(cwd, files, concurrency, runner))\n const successfulRuns = runs.filter(run => run.fatalErrorCount === 0 && run.status < 2)\n\n const recommendation = successfulRuns.length > 0 ?\n successfulRuns.toSorted((a, b) => a.durationMs - b.durationMs)[0].concurrency :\n null\n\n const budgetRun = successfulRuns.toSorted((a, b) => a.durationMs - b.durationMs)[0] ?? runs[0]\n\n const violations: string[] = successfulRuns.length === 0 ?\n ['ESLint profiling did not produce a successful run.'] :\n []\n\n if (options.maxDurationMs !== undefined && budgetRun.durationMs > options.maxDurationMs) {\n violations.push(\n `Duration ${round(budgetRun.durationMs)}ms exceeds the ${options.maxDurationMs}ms budget.`\n )\n }\n\n if (options.maxWarnings !== undefined && budgetRun.warningCount > options.maxWarnings) {\n violations.push(\n `Warnings ${budgetRun.warningCount} exceed the ${options.maxWarnings} warning budget.`\n )\n }\n\n const slowestRule = budgetRun.slowestRules.at(0)\n\n if (options.maxRuleTimeMs !== undefined && slowestRule && slowestRule.timeMs > options.maxRuleTimeMs) {\n violations.push(\n `${slowestRule.rule} took ${round(slowestRule.timeMs)}ms, exceeding the ${options.maxRuleTimeMs}ms rule budget.`\n )\n }\n\n const payload = {\n budget: {\n limits: {\n maxDurationMs: options.maxDurationMs ?? null,\n maxRuleTimeMs: options.maxRuleTimeMs ?? null,\n maxWarnings: options.maxWarnings ?? null\n },\n passed: violations.length === 0,\n violations\n },\n recommendation,\n runs: runs.map(run => ({\n ...run,\n durationMs: round(run.durationMs),\n parseMs: round(run.parseMs),\n ruleMs: round(run.ruleMs),\n slowestRules: run.slowestRules.map(item => ({ ...item, timeMs: round(item.timeMs) }))\n }))\n }\n\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2))\n\n if (!payload.budget.passed) process.exitCode = 1\n\n return\n }\n\n console.log('ESLint performance profile:')\n\n for (const run of payload.runs) {\n console.log(\n `- concurrency=${run.concurrency}: ${run.durationMs}ms, ${run.fileCount} files, ` +\n `${run.errorCount} errors, ${run.warningCount} warnings`\n )\n }\n\n if (payload.recommendation) console.log(`- Recommended concurrency: ${payload.recommendation}`)\n\n if (!payload.budget.passed) {\n console.log('Budget violations:')\n\n for (const violation of payload.budget.violations) console.log(`- ${violation}`)\n\n process.exitCode = 1\n }\n\n const slowestRules = payload.runs[0]?.slowestRules ?? []\n\n if (slowestRules.length > 0) {\n console.log('Slowest rules:')\n\n for (const item of slowestRules.slice(0, 10)) {\n console.log(`- ${item.rule}: ${item.timeMs}ms`)\n }\n }\n}\n\nconst walkSourceFiles = (cwd: string, directory = cwd, output: string[] = []): string[] => {\n if (output.length >= 5000) return output\n\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (output.length >= 5000) break\n\n if (entry.isDirectory()) {\n if (!IGNORED_DIRECTORIES.has(entry.name)) {\n walkSourceFiles(cwd, join(directory, entry.name), output)\n }\n\n continue\n }\n\n if (SOURCE_EXTENSIONS.has(extname(entry.name))) {\n output.push(relative(cwd, join(directory, entry.name)))\n }\n }\n\n return output\n}\n\nconst classifyRepresentativeFile = (filePath: string): string => {\n if (/eslint\\.config\\.[cm]?[jt]s$/.test(filePath)) return 'config'\n\n if (/\\.(test|spec)\\.[cm]?[jt]sx?$/.test(filePath)) return 'test'\n\n return extname(filePath)\n}\n\nexport const findRepresentativeFiles = (cwd: string): string[] => {\n const selected = new Map<string, string>()\n\n for (const filePath of walkSourceFiles(cwd)) {\n const category = classifyRepresentativeFile(filePath)\n\n if (!selected.has(category)) selected.set(category, filePath)\n }\n\n return [...selected.values()].sort()\n}\n\nconst findUnignoredRepresentativeFiles = async (\n cwd: string,\n eslint: ProjectEslint\n): Promise<string[]> => {\n const selected = new Map<string, string>()\n\n for (const filePath of walkSourceFiles(cwd)) {\n const category = classifyRepresentativeFile(filePath)\n\n if (selected.has(category)) continue\n\n const config = eslint.isPathIgnored ?\n undefined :\n await eslint.calculateConfigForFile(filePath)\n\n const ignored = eslint.isPathIgnored ?\n await eslint.isPathIgnored(filePath) :\n config === null || config === undefined\n\n if (!ignored) selected.set(category, filePath)\n }\n\n return [...selected.values()].sort()\n}\n\nconst loadProjectEslint = (cwd: string): ProjectEslint => {\n const projectRequire = resolveProjectRequire(cwd)\n const eslintModule = projectRequire('eslint') as { ESLint?: ProjectEslintConstructor }\n\n if (!eslintModule.ESLint) throw new Error('The installed eslint package does not expose the ESLint API.')\n\n return new eslintModule.ESLint({ cwd })\n}\n\nconst normalizeSerializableObject = (value: unknown): Record<string, unknown> => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {}\n\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, entry]) => {\n try {\n JSON.stringify(entry)\n\n return true\n } catch {\n return false\n }\n })\n .sort(([a], [b]) => a.localeCompare(b))\n )\n}\n\nconst getObjectKeys = (value: unknown): string[] => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return []\n\n return Object.keys(value).sort()\n}\n\nconst normalizeConfig = (config: unknown): EslintSnapshotFile => {\n const resolved = config && typeof config === 'object' ?\n config as {\n languageOptions?: {\n ecmaVersion?: unknown\n globals?: unknown\n sourceType?: unknown\n }\n plugins?: unknown\n rules?: unknown\n } :\n {}\n\n return {\n globals: normalizeSerializableObject(resolved.languageOptions?.globals),\n languageOptions: {\n ecmaVersion: resolved.languageOptions?.ecmaVersion,\n sourceType: resolved.languageOptions?.sourceType\n },\n plugins: getObjectKeys(resolved.plugins),\n rules: normalizeSerializableObject(resolved.rules)\n }\n}\n\nexport const createConfigSnapshot = async (\n cwd: string,\n files?: string[],\n eslint: ProjectEslint = loadProjectEslint(cwd)\n): Promise<EslintSnapshot> => {\n const representativeFiles = files?.length ?\n files :\n await findUnignoredRepresentativeFiles(cwd, eslint)\n\n if (representativeFiles.length === 0) {\n throw new Error('No representative source files were found. Pass one or more --file paths.')\n }\n\n const entries = await Promise.all(representativeFiles.map(async filePath => {\n const config = await eslint.calculateConfigForFile(filePath)\n\n return [filePath, normalizeConfig(config)] as const\n }))\n\n return {\n files: Object.fromEntries(entries),\n version: 1\n }\n}\n\nconst sameValue = (left: unknown, right: unknown): boolean => JSON.stringify(left) === JSON.stringify(right)\n\nconst getSnapshotValues = (snapshot?: EslintSnapshotFile): Record<string, unknown> => {\n if (!snapshot) return {}\n\n return {\n ...snapshot.rules,\n ...Object.fromEntries(\n Object.entries(snapshot.globals).map(([name, value]) => [`globals:${name}`, value])\n ),\n ...Object.fromEntries(\n Object.entries(snapshot.languageOptions)\n .filter(([, value]) => value !== undefined)\n .map(([name, value]) => [`languageOptions:${name}`, value])\n ),\n ...Object.fromEntries(snapshot.plugins.map(name => [`plugins:${name}`, true]))\n }\n}\n\nexport const diffConfigSnapshots = (\n previous: EslintSnapshot,\n current: EslintSnapshot\n): SnapshotDiff[] => {\n const files = new Set([...Object.keys(previous.files), ...Object.keys(current.files)])\n const diffs: SnapshotDiff[] = []\n\n for (const file of [...files].sort()) {\n const before = getSnapshotValues(previous.files[file])\n const after = getSnapshotValues(current.files[file])\n const added = Object.keys(after).filter(rule => !(rule in before)).sort()\n const removed = Object.keys(before).filter(rule => !(rule in after)).sort()\n\n const changed = Object.keys(after)\n .filter(rule => rule in before && !sameValue(before[rule], after[rule]))\n .sort()\n .map(rule => ({ after: after[rule], before: before[rule], rule }))\n\n if (added.length > 0 || removed.length > 0 || changed.length > 0) {\n diffs.push({ added, changed, file, removed })\n }\n }\n\n return diffs\n}\n\nconst outputSnapshotDiff = (diffs: SnapshotDiff[]): void => {\n if (diffs.length === 0) {\n console.log('✅ Effective ESLint configuration matches the saved snapshot.')\n\n return\n }\n\n console.log(`ESLint configuration changed for ${diffs.length} representative file(s):`)\n\n for (const diff of diffs) {\n console.log(`- ${diff.file}`)\n\n if (diff.added.length > 0) console.log(` Added: ${diff.added.join(', ')}`)\n\n if (diff.removed.length > 0) console.log(` Removed: ${diff.removed.join(', ')}`)\n\n for (const change of diff.changed) {\n console.log(` Changed ${change.rule}: ${JSON.stringify(change.before)} → ${JSON.stringify(change.after)}`)\n }\n }\n}\n\nexport const handleSnapshot = async (\n cwd: string = process.cwd(),\n options: SnapshotOptions = {},\n eslint?: ProjectEslint\n): Promise<void> => {\n const snapshotPath = resolve(cwd, options.snapshotPath ?? SNAPSHOT_FILENAME)\n const previous = readJson(snapshotPath) as EslintSnapshot | null\n\n if (options.check) {\n if (!previous) {\n if (options.json) {\n console.log(JSON.stringify({ exists: false, snapshotPath }, null, 2))\n } else {\n console.error(`❌ Snapshot is missing: ${relative(cwd, snapshotPath)}`)\n }\n\n process.exitCode = 1\n\n return\n }\n\n const files = options.files?.length ? options.files : Object.keys(previous.files)\n const current = await createConfigSnapshot(cwd, files, eslint)\n const diffs = diffConfigSnapshots(previous, current)\n\n if (options.json) console.log(JSON.stringify({ diffs, snapshotPath }, null, 2))\n else outputSnapshotDiff(diffs)\n\n if (diffs.length > 0) process.exitCode = 1\n\n return\n }\n\n const current = await createConfigSnapshot(cwd, options.files, eslint)\n\n writeFileSync(snapshotPath, `${JSON.stringify(current, null, 2)}\\n`)\n\n if (options.json) {\n console.log(JSON.stringify({\n files: Object.keys(current.files),\n snapshotPath\n }, null, 2))\n } else {\n console.log(`✅ Saved effective ESLint configuration to ${relative(cwd, snapshotPath)}.`)\n }\n}\n\nexport const handleSnapshotDiff = async (\n cwd: string = process.cwd(),\n options: SnapshotOptions = {},\n eslint?: ProjectEslint\n): Promise<void> => {\n const snapshotPath = resolve(cwd, options.snapshotPath ?? SNAPSHOT_FILENAME)\n const previous = readJson(snapshotPath) as EslintSnapshot | null\n\n if (!previous) throw new Error(`Snapshot is missing: ${relative(cwd, snapshotPath)}. Run basic-eslint snapshot first.`)\n\n const files = options.files?.length ? options.files : Object.keys(previous.files)\n const current = await createConfigSnapshot(cwd, files, eslint)\n const diffs = diffConfigSnapshots(previous, current)\n\n if (options.json) console.log(JSON.stringify({ diffs, snapshotPath }, null, 2))\n else outputSnapshotDiff(diffs)\n\n if (diffs.length > 0) process.exitCode = 1\n}\n\nexport const isDirectory = (path: string): boolean => {\n try {\n return statSync(path).isDirectory()\n } catch {\n return false\n }\n}\n"],"mappings":"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","names":["current"]}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,15 @@
1
+ interface InstallResult {
2
+ error?: Error;
3
+ status: null | number;
4
+ stderr?: Buffer | string;
5
+ stdout?: Buffer | string;
6
+ }
7
+ type InstallRunner = (command: string, args: string[], options: {
8
+ cwd: string;
9
+ encoding: 'utf8';
10
+ maxBuffer: number;
11
+ stdio: 'pipe';
12
+ }) => InstallResult;
1
13
  declare const handleInit: (cwd?: string, check?: boolean, explicit?: boolean) => void;
2
14
  declare const handleUpdate: (cwd?: string) => void;
3
15
  declare const handleExplain: (cwd?: string, json?: boolean) => void;
@@ -14,8 +26,8 @@ interface DuplicateEslintInfo {
14
26
  * between editor and CLI.
15
27
  */
16
28
  declare const findDuplicateEslint: (cwd?: string) => DuplicateEslintInfo | null;
17
- declare const handleDoctor: (cwd?: string, json?: boolean, liteInstall?: boolean, fix?: boolean) => Promise<void>;
18
- declare const handleInstall: (cwd?: string, dryRun?: boolean) => void;
29
+ declare const handleDoctor: (cwd?: string, json?: boolean, liteInstall?: boolean, fix?: boolean, verbose?: boolean) => Promise<void>;
30
+ declare const handleInstall: (cwd?: string, dryRun?: boolean, runner?: InstallRunner) => void;
19
31
  declare const handleDocs: (cwd?: string) => void;
20
32
  declare const handleMigrate: (cwd?: string, write?: boolean, json?: boolean, target?: string, check?: boolean, full?: boolean) => void;
21
33
  declare const runCli: (argv?: string[], cwd?: string) => void;