UNPKG

xo

Version:

JavaScript/TypeScript linter (ESLint wrapper) with great defaults

58 lines (57 loc) 2.11 kB
import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; import { Xo } from './xo.js'; const eslintConfigNames = [ 'eslint.config.js', 'eslint.config.mjs', 'eslint.config.cjs', 'eslint.config.ts', 'eslint.config.mts', 'eslint.config.cts', ]; function findEslintConfigDirectory(cwd) { let currentDirectory = cwd; for (;;) { for (const configName of eslintConfigNames) { if (fs.existsSync(path.join(currentDirectory, configName))) { return currentDirectory; } } const parentDirectory = path.dirname(currentDirectory); if (parentDirectory === currentDirectory) { return undefined; } currentDirectory = parentDirectory; } } function resolveConfigPathFromArgv() { const { argv } = process; for (const [index, argument] of argv.entries()) { if (argument === '--config' || argument === '-c') { return argv[index + 1]; } if (argument.startsWith('--config=')) { return argument.slice('--config='.length); } if (argument.startsWith('-c=')) { return argument.slice('-c='.length); } } return undefined; } function resolveAdapterCwd() { const configPath = resolveConfigPathFromArgv(); if (configPath !== undefined && configPath !== '') { return path.dirname(path.resolve(process.cwd(), configPath)); } return findEslintConfigDirectory(process.cwd()) ?? process.cwd(); } /* Keep the adapter small: resolve XO relative to the ESLint config location, then reuse XO's existing project config pipeline. The project files are resolved once when this module is imported; files added afterwards are not picked up until ESLint reloads the config. */ // `ts: true` keeps XO's TypeScript fallback so TS files are linted even without a `tsconfig.json`, matching the CLI. const eslintConfig = await new Xo({ cwd: resolveAdapterCwd(), ts: true }).getProjectEslintConfig(); export default eslintConfig; //# sourceMappingURL=eslint-adapter.js.map