@fast-china/eslint-config 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,353 @@
1
+ import { t as RuleOptions } from "./typegen.mjs";
2
+ import { Config } from "eslint/config";
3
+ import { Linter } from "eslint";
4
+ //#region src/configs/angular.d.ts
5
+ /**
6
+ * Angular TypeScript 源码与 HTML 模板检查的细分选项。
7
+ *
8
+ * 该对象通过 `fastConfig({ angular: { ... } })` 传入。只要传入对象,Angular 支持就会
9
+ * 被启用;未指定的字段继续使用各自默认值。Angular 配置始终包含框架 TypeScript 规则
10
+ * 和外部 `.html` 模板基础规则,本接口只控制成本或迁移影响较高的可选部分。
11
+ *
12
+ * Angular 支持依赖顶层 `typescript` 能力,不能与 `typescript: false` 同时使用。
13
+ * 这些选项不会修改 Angular 编译器、CLI 或模板类型检查配置。
14
+ */
15
+ interface AngularConfigOptions {
16
+ /**
17
+ * 是否使用 Angular 官方 processor,从 TypeScript 文件的
18
+ * `@Component({ template: ... })` 元数据中提取内联 HTML 并复用模板规则进行检查。
19
+ *
20
+ * 关闭后仍会检查 Angular TypeScript 源码和外部 `.html` 模板,只是不再处理组件中的
21
+ * 内联模板。大型项目若主要使用外部模板,或 processor 与其他工具发生冲突,可暂时关闭。
22
+ * @default true
23
+ */
24
+ inlineTemplates?: boolean;
25
+ /**
26
+ * 是否在模板基础正确性规则之外启用 Angular 模板无障碍规则组。
27
+ *
28
+ * 该规则组检查替代文本、键盘交互、焦点、表单标签和 ARIA 等可访问性问题,适用于
29
+ * 外部模板与已提取的内联模板。关闭后仍保留模板语法、严格比较和现代控制流等基础规则。
30
+ * 对旧项目而言可能一次产生较多报告,建议在确认迁移计划后再决定是否临时关闭。
31
+ * @default true
32
+ */
33
+ templateAccessibility?: boolean;
34
+ }
35
+ //#endregion
36
+ //#region src/configs/environment.d.ts
37
+ type RuntimeEnvironment = "browser" | "node" | "universal";
38
+ //#endregion
39
+ //#region src/configs/lodash.d.ts
40
+ /** 项目允许使用的 Lodash 导入来源。 */
41
+ type LodashPreference = "lodash" | "lodash-unified";
42
+ //#endregion
43
+ //#region src/configs/react.d.ts
44
+ /**
45
+ * React 与兼容 JSX 运行时的检测设置。
46
+ *
47
+ * 该对象通过 `fastConfig({ react: { ... } })` 传入。传入对象会启用 React 支持,并在
48
+ * JavaScript/JSX 和 TypeScript/TSX 文件上加载对应的 `@eslint-react` 推荐预置、React
49
+ * 官方 Hooks Flat Config 以及本库规则。实际文件范围仍受顶层 `javascript`、
50
+ * `typescript` 开关控制。
51
+ *
52
+ * 这些字段只传给 ESLint 插件用于理解项目的 React 语义,不会改变 JSX 编译方式、自动
53
+ * 导入 React、设置打包器别名或安装兼容运行时。
54
+ */
55
+ interface ReactConfigOptions {
56
+ /**
57
+ * 提供 React API 与 JSX 运行时的包入口名称。
58
+ *
59
+ * 标准 React 项目保持 `"react"`;Preact 等兼容运行时可填写自身包名,使
60
+ * `@eslint-react` 按正确的导入来源识别组件和 API。该设置不会修改 TypeScript
61
+ * `jsxImportSource`、Babel、Vite 或其他构建工具配置,两侧需要由项目自行保持一致。
62
+ * @default "react"
63
+ */
64
+ importSource?: string;
65
+ /**
66
+ * 项目约定用于切换多态组件底层元素或组件类型的属性名。
67
+ *
68
+ * 例如 `<Button as="a" />` 中的 `as`。插件会据此理解多态组件最终渲染元素的语义,
69
+ * 从而提高 DOM 与可访问性相关规则的判断准确度;未采用多态组件时通常无需修改。
70
+ * @default "as"
71
+ */
72
+ polymorphicPropName?: string;
73
+ /**
74
+ * 供插件选择版本相关行为的 React 版本号或自动检测标记。
75
+ *
76
+ * `"detect"` 会尝试从当前项目依赖解析已安装的 React 版本。monorepo、PnP、兼容运行时
77
+ * 或依赖不可见的执行环境若无法可靠检测,可传入明确版本号,例如 `"19.1.0"`。
78
+ * 该值只影响 lint 规则判断,不会限制或安装 React 依赖版本。
79
+ * @default "detect"
80
+ */
81
+ version?: string;
82
+ }
83
+ //#endregion
84
+ //#region src/configs/typescript.d.ts
85
+ /**
86
+ * TypeScript 解析器、推荐预置与类型感知检查选项。
87
+ *
88
+ * 该对象通过 `fastConfig({ typescript: { ... } })` 传入。传入对象会启用 TypeScript
89
+ * 支持,并检查 `.ts`、`.cts`、`.mts` 与 `.tsx`。相同的类型感知状态还会传递给已启用的
90
+ * Vue 和 React 配置,使普通 TypeScript 文件、Vue SFC 与 TSX 使用一致的检查级别。
91
+ *
92
+ * 默认模式不读取类型信息,启动快且不要求文件属于某个 tsconfig;类型感知模式会启动
93
+ * typescript-eslint Project Service,能够执行更强的语义规则,但要求项目配置和执行目录
94
+ * 正确,并会增加首次检查时间与内存占用。
95
+ */
96
+ interface TypeScriptConfigOptions {
97
+ /**
98
+ * 是否启用依赖完整 TypeScript 类型信息的规则。
99
+ *
100
+ * `false` 使用 typescript-eslint 的 `recommended` 与 `stylistic` 预置,不创建 TypeScript
101
+ * Program。`true` 切换到 `recommendedTypeChecked` 与 `stylisticTypeChecked`,并启用
102
+ * `parserOptions.projectService`。被检查文件通常需要包含在可发现的 tsconfig 中,否则
103
+ * Project Service 会报告文件不属于项目。
104
+ *
105
+ * 开启后 Vue 与 React 的 TypeScript 规则也会选择类型感知版本。大型 monorepo 建议评估
106
+ * lint 启动耗时和内存占用,并确保各工作区 tsconfig 边界明确。
107
+ * @default false
108
+ */
109
+ typeChecked?: boolean;
110
+ /**
111
+ * typescript-eslint 查找 tsconfig 与创建 Project Service 时使用的根目录。
112
+ *
113
+ * 仅在 `typeChecked: true` 时写入解析器选项。普通单仓库通常可让 typescript-eslint 从
114
+ * `eslint.config.*` 调用栈推断;复杂 monorepo、共享配置包装层或从其他目录启动 ESLint
115
+ * 时,建议传入配置文件所在目录的绝对路径,例如 `import.meta.dirname`,避免发现错误的
116
+ * tsconfig 或跨越预期的项目边界。
117
+ * @default undefined
118
+ */
119
+ tsconfigRootDir?: string;
120
+ }
121
+ //#endregion
122
+ //#region src/code/index.d.ts
123
+ /**
124
+ * `fastConfig()` 的项目级 ESLint Flat Config 选项。
125
+ *
126
+ * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@default` 标注的值;
127
+ * 布尔选项传入 `false` 会让工厂完全跳过对应片段,支持对象形式的框架或 TypeScript
128
+ * 选项传入 `true` 时采用其内部默认值,传入对象时则在启用能力的同时覆盖内部默认值。
129
+ *
130
+ * `rules` 会在全部内置规则和 Prettier 兼容层之后应用;`fastConfig()` 的其余位置参数
131
+ * 又会排在 `rules` 之后。因此,常规的全项目规则放在 `rules` 中,按文件覆盖或需要最高
132
+ * 优先级的配置应通过其余位置参数传入。
133
+ *
134
+ * 这些选项只负责生成 ESLint 配置,不会修改 TypeScript、Vite 或各框架的构建配置。
135
+ *
136
+ * @example
137
+ * ```ts
138
+ * export default fastConfig({
139
+ * environment: "browser",
140
+ * react: { version: "detect" },
141
+ * typescript: { typeChecked: true },
142
+ * vue: false,
143
+ * });
144
+ * ```
145
+ */
146
+ interface FastConfigOptions {
147
+ /**
148
+ * 是否启用 Angular 源码与模板检查。
149
+ *
150
+ * `true` 使用 Angular 默认选项;传入对象可控制内联模板与模板无障碍规则。
151
+ * 启用后会检查 Angular TypeScript 源码、外部 `.html` 模板,并默认提取
152
+ * `@Component()` 中的内联模板。Angular 依赖 TypeScript 解析能力,因此不能与
153
+ * `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。
154
+ *
155
+ * 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。
156
+ * @default false
157
+ */
158
+ angular?: boolean | AngularConfigOptions;
159
+ /**
160
+ * 应用代码实际运行的环境,用于声明 ESLint 可识别的运行时全局变量。
161
+ *
162
+ * - `"browser"`:提供浏览器全局变量,例如 `window`、`document`。
163
+ * - `"node"`:提供 Node.js 全局变量,例如 `process`、`Buffer`。
164
+ * - `"universal"`:同时提供浏览器与 Node.js 全局变量,适合 SSR 或同构代码。
165
+ *
166
+ * 常见 Vue、React、Angular 与 Vite 浏览器应用通常保持 `"browser"`。无论选择哪种
167
+ * 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js
168
+ * 全局变量。此选项不改变 JavaScript 编译目标或打包平台。
169
+ * @default "browser"
170
+ */
171
+ environment?: RuntimeEnvironment;
172
+ /**
173
+ * 追加到应用代码运行环境中的项目级全局变量。
174
+ *
175
+ * 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循
176
+ * ESLint `Linter.Globals`,可以声明为 `"readonly"`、`"writable"` 或 `"off"`。
177
+ * 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。
178
+ * @default undefined
179
+ */
180
+ globals?: Linter.Globals;
181
+ /**
182
+ * 是否读取运行 ESLint 的项目根目录中的 `.gitignore` 并转换为全局忽略规则。
183
+ *
184
+ * 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、
185
+ * 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。
186
+ * @default true
187
+ */
188
+ gitignore?: boolean;
189
+ /**
190
+ * 追加到内置全局忽略集合末尾的 ESLint glob 模式。
191
+ *
192
+ * 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,
193
+ * 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。
194
+ * @default []
195
+ */
196
+ ignores?: readonly string[];
197
+ /**
198
+ * 是否为全部已启用代码文件加载 `eslint-plugin-import-x` 推荐规则和本库覆盖规则。
199
+ *
200
+ * 该片段检查常见的 ESM 导入导出问题,但共享配置不会猜测项目的路径别名或自定义
201
+ * resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些
202
+ * 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响
203
+ * JavaScript 或 TypeScript 的基础语法检查。
204
+ * @default true
205
+ */
206
+ imports?: boolean;
207
+ /**
208
+ * 是否让工厂接管 JavaScript、CommonJS、ES Module 与 JSX 文件。
209
+ *
210
+ * 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、
211
+ * 环境全局变量、import、regexp、Lodash 或 React 的 JavaScript 配置范围,但不会影响
212
+ * 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。
213
+ * @default true
214
+ */
215
+ javascript?: boolean;
216
+ /**
217
+ * 是否检查 JSON、JSONC 与 JSON5 文件,并为三种方言分别使用兼容的推荐规则。
218
+ *
219
+ * 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应
220
+ * 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。
221
+ * @default true
222
+ */
223
+ json?: boolean;
224
+ /**
225
+ * 是否统一项目中的 Lodash 静态 ESM 导入来源。
226
+ *
227
+ * - `false`:不限制 `lodash`、`lodash-es` 与 `lodash-unified` 的使用。
228
+ * - `"lodash"`:允许 `lodash` 及其子路径,禁止混用另外两个包。
229
+ * - `"lodash-unified"`:统一使用 `lodash-unified`,禁止另外两个包及其子路径。
230
+ *
231
+ * 该能力只约束静态 `import`/`export`,不会检查动态 `import()` 或 CommonJS
232
+ * `require()`,也不会安装、替换或迁移任何 Lodash 依赖。
233
+ * @default false
234
+ */
235
+ lodash?: false | LodashPreference;
236
+ /**
237
+ * 是否使用 `@eslint/markdown` 推荐配置检查 `.md` 文档的结构和 Markdown 语法。
238
+ *
239
+ * 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架
240
+ * 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。
241
+ * @default true
242
+ */
243
+ markdown?: boolean;
244
+ /**
245
+ * 是否加载 `eslint-config-prettier`,关闭与 Prettier 冲突的 ESLint 格式规则。
246
+ *
247
+ * 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装
248
+ * 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地
249
+ * 重新启用某条格式规则。
250
+ * @default true
251
+ */
252
+ prettier?: boolean;
253
+ /**
254
+ * 是否为全部已启用代码文件加载 `eslint-plugin-regexp` 推荐规则。
255
+ *
256
+ * 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则
257
+ * 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。
258
+ * @default true
259
+ */
260
+ regexp?: boolean;
261
+ /**
262
+ * 是否启用 React、JSX/TSX 与 Hooks 正确性规则。
263
+ *
264
+ * `true` 使用默认 React 设置;传入对象可指定 React 版本、兼容 JSX 运行时包和多态
265
+ * 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言
266
+ * 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的
267
+ * `importSource`,但此选项不会修改 JSX 编译器或打包器设置。
268
+ * @default false
269
+ */
270
+ react?: boolean | ReactConfigOptions;
271
+ /**
272
+ * 应用于全部已启用 JavaScript、TypeScript 和 Vue 文件的项目级规则记录。
273
+ *
274
+ * `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在
275
+ * 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。
276
+ * JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。
277
+ * @default undefined
278
+ */
279
+ rules?: RuleOptions;
280
+ /**
281
+ * 是否启用 `package.json` 顶层字段的固定顺序规则。
282
+ *
283
+ * 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的
284
+ * `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。
285
+ * 启用此项会同时加载 JSON 解析配置。
286
+ * @default false
287
+ */
288
+ sortPackageJson?: boolean;
289
+ /**
290
+ * 是否按 TypeScript 配置主题顺序整理 `tsconfig.json` 与 `tsconfig.*.json`。
291
+ *
292
+ * 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生
293
+ * 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。
294
+ * @default false
295
+ */
296
+ sortTsconfig?: boolean;
297
+ /**
298
+ * 是否让工厂接管 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件。
299
+ *
300
+ * `true` 使用无需类型信息的 TypeScript 推荐与风格预置;传入对象可进一步启用
301
+ * `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的
302
+ * TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript
303
+ * 脚本解析,并且不能再启用 Angular。
304
+ * @default true
305
+ */
306
+ typescript?: boolean | TypeScriptConfigOptions;
307
+ /**
308
+ * 是否让工厂接管 Vue 3 `.vue` 单文件组件。
309
+ *
310
+ * 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随
311
+ * `typescript`:TypeScript 开启时同时支持 `<script lang="ts">` 和类型感知选项,
312
+ * 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。
313
+ * @default true
314
+ */
315
+ vue?: boolean;
316
+ }
317
+ /** `fastConfig()` 使用的稳定默认值;对象被冻结,避免运行时被意外修改。 */
318
+ declare const defaultConfigOptions: Readonly<{
319
+ readonly angular: false;
320
+ readonly environment: "browser";
321
+ readonly gitignore: true;
322
+ readonly imports: true;
323
+ readonly javascript: true;
324
+ readonly json: true;
325
+ readonly lodash: false;
326
+ readonly markdown: true;
327
+ readonly prettier: true;
328
+ readonly react: false;
329
+ readonly regexp: true;
330
+ readonly sortPackageJson: false;
331
+ readonly sortTsconfig: false;
332
+ readonly typescript: true;
333
+ readonly vue: true;
334
+ }>;
335
+ /**
336
+ * 创建面向 Vue 3、React、Angular、Vite、TypeScript、JavaScript 与 Node.js 项目的 ESLint Flat Config。
337
+ *
338
+ * 默认导出就是此函数。额外配置参数会放在内置配置之后,因此项目可以按文件范围
339
+ * 覆盖任何默认规则,而无需再次调用 ESLint 的 `defineConfig()`。
340
+ */
341
+ declare const fastConfig: (options?: FastConfigOptions, ...overrides: Config[]) => Config[];
342
+ //#endregion
343
+ //#region src/index.d.ts
344
+ type RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<keyof Rules, keyof RuleOptions>, never>;
345
+ /**
346
+ * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。
347
+ *
348
+ * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。
349
+ */
350
+ declare const defineRules: <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>) => Rules & Linter.RulesRecord;
351
+ //#endregion
352
+ export { type AngularConfigOptions, type FastConfigOptions, type LodashPreference, type ReactConfigOptions, type RuleOptions, type RuntimeEnvironment, type TypeScriptConfigOptions, fastConfig as default, fastConfig, defaultConfigOptions, defineRules };
353
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/configs/angular.ts","../src/configs/environment.ts","../src/configs/lodash.ts","../src/configs/react.ts","../src/configs/typescript.ts","../src/code/index.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;;;UAoBiB;;;;;;;;;EAShB;;;;;;;;;EASA;;;;KC/BW;;;;KCDA;;;;;;;;;;;;;;UCcK;;;;;;;;;EAShB;;;;;;;;EAQA;;;;;;;;;EASA;;;;;;;;;;;;;;;UC3BgB;;;;;;;;;;;;;EAahB;;;;;;;;;;EAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;UCIgB;;;;;;;;;;;;EAYhB,oBAAoB;;;;;;;;;;;;;EAapB,cAAc;;;;;;;;;EASd,UAAU,OAAO;;;;;;;;EAQjB;;;;;;;;EAQA;;;;;;;;;;EAUA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;;;;;EAYA,iBAAiB;;;;;;;;EAQjB;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;;;EAUA,kBAAkB;;;;;;;;;EASlB,QAAQ;;;;;;;;;EASR;;;;;;;;EAQA;;;;;;;;;;EAUA,uBAAuB;;;;;;;;;EASvB;;;cAIY,sBAAoB;;;;;;;;;;;;;;;;;;;;;;;cAwBpB,aAAc,UAAS,sBAA2B,WAAW,aAAW;;;KC5OhF,uBAAuB,cAAc,eAAe,QAAQ,OAAO,cAAc,aAAa;;;;;;cAOtF,oBAAqB,cAAc,aAAa,OAAO,uBAAuB,WAAS,QAAQ,OAAO"}