UNPKG

eslint-config-xaxa

Version:

The ultimate ESLint config - successor to Airbnb Config. Built on Anthony Fu's ESLint config, Airbnb, ESLint Stylistic, Perfectionist, React, TypeScript, Astro, JSDocs, Prettier, Node.js, Unicorns, Promises, and more.

57 lines (47 loc) 1.61 kB
import { typescript } from '@antfu/eslint-config'; import { FlatConfigComposer } from 'eslint-flat-config-utils'; import { isPackageExists } from 'local-pkg'; import type { OptionsTypescript, UserConfig } from './types'; import type { Awaitable } from './utils.ts'; import { airbnb, type OptionsAirbnb } from './configs/index.ts'; export type { OptionsAirbnb, OptionsTypescript, UserConfig, }; export interface OptionsAirbnbTypescript { /** * Enable TypeScript support * * @default auto-detect if TypeScript is installed */ typescript?: boolean | OptionsTypescript; } /** * * @param {OptionsAirbnb & OptionsAirbnbTypescript} options - Options for Airbnb preset including TypeScript support. * @param {UserConfig[]} userConfigs - User-defined configurations to be merged with the preset. * @returns */ export default function airbnbPreset( options: OptionsAirbnb & OptionsAirbnbTypescript = {}, ...userConfigs: Awaitable<UserConfig>[] | UserConfig[] ): FlatConfigComposer { const isTypescript = isPackageExists('typescript'); const { typescript: enableTypeScript = isTypescript, ...opts } = { ...options }; const configs = [ airbnb(opts as OptionsAirbnb), enableTypeScript && typescript(enableTypeScript === true ? {} : enableTypeScript as OptionsTypescript), ]; let composer = new FlatConfigComposer(); composer = composer .append( ...configs.flat().filter(Boolean), ...userConfigs.flat().filter(Boolean) as any, // ? NOTE: bruh... it's okay ); return composer; } export { airbnbPreset as airbnb, typescript, };