src/types.ts
import { type Linter } from 'eslint';
import type ts from 'typescript';
export type TSConfig = {
compilerOptions?: ts.CompilerOptions & {
lib?: string[];
};
files?: string[];
include?: string[];
exclude?: string[];
extends?: string;
references?: string[];
};
export type Dependencies = {
hasJest: boolean;
hasJestDom: boolean;
hasNodeTypes: boolean;
hasTestingLibrary: boolean;
hasNest: boolean;
storybook: {
hasStorybook: boolean;
hasStorybookTestingLibrary: boolean;
};
react: {
hasReact: boolean;
isCreateReactApp: boolean;
isNext: boolean;
isRemix: boolean;
isPreact: boolean;
version: null | string;
};
typescript: {
config: null | TSConfig;
hasTypeScript: boolean;
version: null | string;
};
hasTailwind: boolean;
};
export type ESLintConfig = Omit<
Linter.BaseConfig,
'$schema' | 'parser' | 'noInlineConfig' | 'processor' | 'rules'
> & {
root?: boolean;
rules: Linter.RulesRecord;
};
export type TopLevelESLintConfig = ESLintConfig & {
ignorePatterns?: string | string[];
};
export type OverrideESLintConfig = Omit<
ESLintConfig,
'root' | 'reportUnusedDisableDirectives'
> & {
excludedFiles?: string | string[];
files: string | string[];
};
/**
* a _non-override_ function creating rules, e.g. everything within the plugins
* folder
*
* e.g. createUnicornRules
*/
export type RulesetCreator = (
args: Dependencies & {
rules?: Linter.RulesRecord;
}
) => Linter.RulesRecord | null;
/**
* internal type including the custom `overrideType` property
*/
export type WithOverrideType<Override extends OverrideESLintConfig> =
Override & {
overrideType?: string;
};
/**
* type of primary functions within the overrides folder
*
* e.g. createReactOverride, createTypeScriptOverride, etc.
*/
export type OverrideCreator = (
args: Dependencies & Partial<OverrideESLintConfig>
) => WithOverrideType<OverrideESLintConfig> | null;
/**
* type of functions overriding overrides within the overrides folder
*
* e.g. nextjs, remix, etc.
*/
export type OverrideInternalOverride = (
args: Dependencies
) => OverrideESLintConfig | null;
/**
* type of function conditionally creating rules
*
* e.g. createJSXA11yRules
*/
export type RulesCreator = (
dependencies: Dependencies
) => Linter.RulesRecord | null;
export type SettingsCreator = (
Dependencies: Dependencies
) => OverrideESLintConfig['settings'] | null;
export type Flags = {
convertToESLintInternals?: boolean;
incrementalAdoption?: boolean;
blankSlate?: boolean;
};