@soybeanjs/eslint-config
Version:
SoybeanJS's eslint flat config presets with prettier.
113 lines (112 loc) • 3.65 kB
TypeScript
import { FlatGitignoreOptions } from "eslint-config-flat-gitignore";
import { EslintRules, FlatESLintConfigItem, ImportRules, MergeIntersection, NRules, ReactHooksRules, ReactRules, RuleConfig, TypeScriptRules, UnicornRules, VueRules } from "@antfu/eslint-define-config";
import { BuiltInParserName, LiteralUnion, RequiredOptions } from "prettier";
//#region src/types/rule.d.ts
type PrettierCustomParser = 'astro' | 'svelte' | 'jsdoc-parser' | 'toml';
type PrettierParser = BuiltInParserName | PrettierCustomParser;
interface PrettierOptions extends RequiredOptions {
parser: LiteralUnion<PrettierParser>;
}
type PartialPrettierExtendedOptions = Partial<PrettierOptions>;
type WrapRuleConfig<T extends {
[key: string]: any;
}> = { [K in keyof T]: T[K] extends RuleConfig ? T[K] : RuleConfig<T[K]> };
type EslintFlatRules = WrapRuleConfig<MergeIntersection<EslintRules & ImportRules & NRules & UnicornRules & TypeScriptRules & VueRules & ReactRules & ReactHooksRules>>;
type FlatConfigItem = Omit<FlatESLintConfigItem<EslintFlatRules, false>, 'plugins'> & {
plugins?: Record<string, any>;
};
type RuleBaseOptions<T = NonNullable<unknown>> = T & {
/** The glob patterns to lint */
files?: string[];
};
type RequiredRuleBaseOptions = Required<RuleBaseOptions>;
type OnDemandRuleKey = 'vue' | 'react' | 'react-native' | 'solid' | 'svelte' | 'astro';
type VueOptions = RuleBaseOptions<{
/**
* The vue version
*
* @default 3
*/
version?: 2 | 3;
}>;
type RequiredVueOptions = Required<VueOptions>;
type OnDemandRuleOptions = Partial<Record<Exclude<OnDemandRuleKey, 'vue'>, RuleBaseOptions | boolean>>;
type RequiredOnDemandRuleOptions = Record<Exclude<OnDemandRuleKey, 'vue'>, RequiredRuleBaseOptions>;
//#endregion
//#region src/types/index.d.ts
type Awaitable<T> = T | Promise<T>;
interface BaseOptions {
/**
* The current working directory
*
* @default process.cwd()
*/
cwd: string;
/** The globs to ignore lint */
ignores: string[];
/**
* Enable gitignore support.
*
* Passing an object to configure the options.
*
* @default true
* @see https://github.com/antfu/eslint-config-flat-gitignore
*/
gitignore?: boolean | FlatGitignoreOptions;
/** The override rules */
overrides: Record<string, any>;
/**
* Default prettier rules
*
* @default
* ```json
* {
* "printWidth": 120,
* "singleQuote": true,
* "trailingComma": "none",
* "arrowParens": "avoid",
* "htmlWhitespaceSensitivity": "ignore"
* }
* ```
*/
prettierRules: PartialPrettierExtendedOptions;
/**
* Whether to use prettierrc
*
* If true, the rules in prettierrc will override the default rules
*
* @default true
*/
usePrettierrc: boolean;
/**
* @default
* {
* "html": true,
* "css": true,
* "json": true,
* }
*/
formatter: {
html?: boolean;
css?: boolean;
json?: boolean;
markdown?: boolean;
yaml?: boolean;
toml?: boolean;
};
}
type Options = Partial<BaseOptions> & {
vue?: VueOptions | boolean;
} & OnDemandRuleOptions & {
unocss?: boolean;
};
type ParsedOptions = BaseOptions & {
vue?: RequiredVueOptions;
} & Partial<RequiredOnDemandRuleOptions> & {
unocss?: boolean;
};
//#endregion
//#region src/index.d.ts
declare function defineConfig(options?: Partial<Options>, ...userConfigs: Awaitable<FlatConfigItem>[]): Promise<FlatConfigItem[]>;
//#endregion
export { Awaitable, BaseOptions, FlatConfigItem, OnDemandRuleKey, Options, ParsedOptions, PartialPrettierExtendedOptions, PrettierParser, RequiredOnDemandRuleOptions, RequiredRuleBaseOptions, RequiredVueOptions, defineConfig };