UNPKG

eslint-plugin-import-x

Version:
152 lines (151 loc) 5.69 kB
import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import type { MinimatchOptions } from 'minimatch'; import type { KebabCase } from 'type-fest'; import type { NapiResolveOptions as ResolveOptions } from 'unrs-resolver'; import type { ImportType as ImportType_, LegacyImportResolver, LegacyResolver, PluginName } from './utils/index.js'; export type { LegacyResolver, LegacyResolverName, LegacyResolverName as ResolverName, LegacyImportResolver, LegacyImportResolver as ImportResolver, LegacyResolverResolve, LegacyResolverResolve as ResolverResolve, LegacyResolverResolveImport, LegacyResolverResolveImport as ResolverResolveImport, LegacyResolverRecord, LegacyResolverRecord as ResolverRecord, LegacyResolverObject, LegacyResolverObject as ResolverObject, } from './utils/index.js'; export type ImportType = ImportType_ | 'object' | 'type'; export interface NodeResolverOptions { extensions?: readonly string[]; moduleDirectory?: string[]; paths?: string[]; } export interface WebpackResolverOptions { config?: string | { resolve: ResolveOptions; }; 'config-index'?: number; env?: Record<string, unknown>; argv?: Record<string, unknown>; } export interface TsResolverOptions extends ResolveOptions { alwaysTryTypes?: boolean; project?: string[] | string; extensions?: string[]; } export type NewResolverResolve = (modulePath: string, sourceFile: string) => ResolvedResult; export interface NewResolver { interfaceVersion: 3; name?: string; resolve: NewResolverResolve; } export type FileExtension = `.${string}`; export type DocStyle = 'jsdoc' | 'tomdoc'; export type Arrayable<T> = T | readonly T[]; export interface ResultNotFound { found: false; path?: undefined; } export interface ResultFound { found: true; path: string | null; } export type Resolver = LegacyResolver | NewResolver; export type ResolvedResult = ResultNotFound | ResultFound; export interface ImportSettings { cache?: { lifetime?: number | '∞' | 'Infinity'; }; coreModules?: string[]; docstyle?: DocStyle[]; extensions?: readonly FileExtension[]; externalModuleFolders?: string[]; ignore?: string[]; internalRegex?: string; parsers?: Record<string, readonly FileExtension[]>; resolve?: NodeResolverOptions; resolver?: LegacyImportResolver; 'resolver-legacy'?: LegacyImportResolver; 'resolver-next'?: NewResolver[]; } export type WithPluginName<T extends string | object> = T extends string ? `${PluginName}/${KebabCase<T>}` : { [K in keyof T as WithPluginName<`${KebabCase<K & string>}`>]: T[K]; }; export type PluginSettings = WithPluginName<ImportSettings>; export interface PluginConfig extends TSESLint.ClassicConfig.Config { plugins?: [PluginName]; settings?: PluginSettings; rules?: Record<`${PluginName}/${string}`, TSESLint.ClassicConfig.RuleEntry>; } export interface PluginFlatBaseConfig extends TSESLint.FlatConfig.Config { settings?: PluginSettings; rules?: Record<`${PluginName}/${string}`, TSESLint.FlatConfig.RuleEntry>; } export interface PluginFlatConfig extends PluginFlatBaseConfig { name?: `${PluginName}/${string}`; } export interface RuleContext<TMessageIds extends string = string, TOptions extends readonly unknown[] = readonly unknown[]> extends Omit<TSESLint.RuleContext<TMessageIds, TOptions>, 'settings'> { settings: PluginSettings; } export interface ChildContext { cacheKey: string; settings: PluginSettings; parserPath?: string | null; parserOptions?: TSESLint.ParserOptions; languageOptions?: TSESLint.FlatConfig.LanguageOptions; path: string; filename?: string; } export interface ParseError extends Error { lineNumber: number; column: number; } export interface CustomESTreeNode<Type extends string> extends Omit<TSESTree.BaseNode, 'type'> { type: Type; } export type ExportDefaultSpecifier = CustomESTreeNode<'ExportDefaultSpecifier'>; export interface ExportNamespaceSpecifier extends CustomESTreeNode<'ExportNamespaceSpecifier'> { exported: TSESTree.Identifier; } export interface PathGroup { pattern: string; group: ImportType; patternOptions?: MinimatchOptions; position?: 'before' | 'after'; } export type ExportAndImportKind = 'value' | 'type'; export type NewLinesOptions = 'always' | 'always-and-inside-groups' | 'ignore' | 'never'; export type NamedTypes = 'mixed' | 'types-first' | 'types-last'; export interface NamedOptions { enabled?: boolean; import?: boolean; export?: boolean; require?: boolean; cjsExports?: boolean; types?: NamedTypes; } export interface AlphabetizeOptions { caseInsensitive: boolean; order: 'ignore' | 'asc' | 'desc'; orderImportKind: 'ignore' | 'asc' | 'desc'; } export type ImportEntryType = 'import:object' | 'import' | 'require' | 'export'; export type LiteralNodeValue = string | number | bigint | boolean | RegExp | null; export interface ImportEntry { type: ImportEntryType; node: TSESTree.Node & { importKind?: ExportAndImportKind; exportKind?: ExportAndImportKind; }; value: LiteralNodeValue; alias?: string; kind?: ExportAndImportKind; displayName?: LiteralNodeValue; } export interface ImportEntryWithRank extends ImportEntry { rank: number; isMultiline?: boolean; } export interface RanksPathGroup { pattern: string; patternOptions?: MinimatchOptions; group: string; position?: number; } export type RanksGroups = Record<string, number>; export interface Ranks { omittedTypes: string[]; groups: RanksGroups; pathGroups: RanksPathGroup[]; maxPosition: number; }