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
text/typescript
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,
};