UNPKG

@soybeanjs/eslint-config

Version:

SoybeanJS's eslint flat config presets with prettier.

113 lines (112 loc) 3.65 kB
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 };