@fast-china/eslint-config 2.0.4 → 2.0.5

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.
Files changed (117) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +1 -1
  3. package/README.zh.md +1 -1
  4. package/dist/configs/angular.d.mts +7 -2
  5. package/dist/configs/angular.d.mts.map +1 -1
  6. package/dist/configs/angular.mjs +4 -0
  7. package/dist/configs/angular.mjs.map +1 -1
  8. package/dist/configs/common.d.mts +4 -0
  9. package/dist/configs/common.d.mts.map +1 -1
  10. package/dist/configs/common.mjs +4 -0
  11. package/dist/configs/common.mjs.map +1 -1
  12. package/dist/configs/environment.d.mts +16 -4
  13. package/dist/configs/environment.d.mts.map +1 -1
  14. package/dist/configs/environment.mjs +4 -0
  15. package/dist/configs/environment.mjs.map +1 -1
  16. package/dist/configs/ignores.d.mts +16 -2
  17. package/dist/configs/ignores.d.mts.map +1 -1
  18. package/dist/configs/ignores.mjs +16 -2
  19. package/dist/configs/ignores.mjs.map +1 -1
  20. package/dist/configs/import.d.mts +4 -0
  21. package/dist/configs/import.d.mts.map +1 -1
  22. package/dist/configs/import.mjs +4 -0
  23. package/dist/configs/import.mjs.map +1 -1
  24. package/dist/configs/javascript.d.mts +5 -0
  25. package/dist/configs/javascript.d.mts.map +1 -1
  26. package/dist/configs/javascript.mjs +5 -0
  27. package/dist/configs/javascript.mjs.map +1 -1
  28. package/dist/configs/json.d.mts +4 -0
  29. package/dist/configs/json.d.mts.map +1 -1
  30. package/dist/configs/json.mjs +4 -0
  31. package/dist/configs/json.mjs.map +1 -1
  32. package/dist/configs/lodash.d.mts +11 -1
  33. package/dist/configs/lodash.d.mts.map +1 -1
  34. package/dist/configs/lodash.mjs +6 -0
  35. package/dist/configs/lodash.mjs.map +1 -1
  36. package/dist/configs/markdown.d.mts +3 -0
  37. package/dist/configs/markdown.d.mts.map +1 -1
  38. package/dist/configs/markdown.mjs +3 -0
  39. package/dist/configs/markdown.mjs.map +1 -1
  40. package/dist/configs/prettier.d.mts +3 -0
  41. package/dist/configs/prettier.d.mts.map +1 -1
  42. package/dist/configs/prettier.mjs +3 -0
  43. package/dist/configs/prettier.mjs.map +1 -1
  44. package/dist/configs/react.d.mts +13 -6
  45. package/dist/configs/react.d.mts.map +1 -1
  46. package/dist/configs/react.mjs +5 -0
  47. package/dist/configs/react.mjs.map +1 -1
  48. package/dist/configs/regexp.d.mts +4 -0
  49. package/dist/configs/regexp.d.mts.map +1 -1
  50. package/dist/configs/regexp.mjs +4 -0
  51. package/dist/configs/regexp.mjs.map +1 -1
  52. package/dist/configs/sort-package.d.mts +3 -0
  53. package/dist/configs/sort-package.d.mts.map +1 -1
  54. package/dist/configs/sort-package.mjs +3 -0
  55. package/dist/configs/sort-package.mjs.map +1 -1
  56. package/dist/configs/sort-tsconfig.d.mts +3 -0
  57. package/dist/configs/sort-tsconfig.d.mts.map +1 -1
  58. package/dist/configs/sort-tsconfig.mjs +3 -0
  59. package/dist/configs/sort-tsconfig.mjs.map +1 -1
  60. package/dist/configs/typescript.d.mts +19 -3
  61. package/dist/configs/typescript.d.mts.map +1 -1
  62. package/dist/configs/typescript.mjs +16 -1
  63. package/dist/configs/typescript.mjs.map +1 -1
  64. package/dist/configs/vue.d.mts +7 -2
  65. package/dist/configs/vue.d.mts.map +1 -1
  66. package/dist/configs/vue.mjs +4 -0
  67. package/dist/configs/vue.mjs.map +1 -1
  68. package/dist/constants/index.d.mts +12 -2
  69. package/dist/constants/index.d.mts.map +1 -1
  70. package/dist/constants/index.mjs +12 -2
  71. package/dist/constants/index.mjs.map +1 -1
  72. package/dist/index.d.mts +48 -19
  73. package/dist/index.d.mts.map +1 -1
  74. package/dist/index.mjs +31 -1
  75. package/dist/index.mjs.map +1 -1
  76. package/dist/rules/angular.d.mts +15 -2
  77. package/dist/rules/angular.d.mts.map +1 -1
  78. package/dist/rules/angular.mjs +15 -2
  79. package/dist/rules/angular.mjs.map +1 -1
  80. package/dist/rules/common.d.mts +1 -0
  81. package/dist/rules/common.d.mts.map +1 -1
  82. package/dist/rules/common.mjs +1 -0
  83. package/dist/rules/common.mjs.map +1 -1
  84. package/dist/rules/import.d.mts +7 -1
  85. package/dist/rules/import.d.mts.map +1 -1
  86. package/dist/rules/import.mjs +7 -1
  87. package/dist/rules/import.mjs.map +1 -1
  88. package/dist/rules/javascript.d.mts +2 -0
  89. package/dist/rules/javascript.d.mts.map +1 -1
  90. package/dist/rules/javascript.mjs +2 -0
  91. package/dist/rules/javascript.mjs.map +1 -1
  92. package/dist/rules/lodash.d.mts +2 -0
  93. package/dist/rules/lodash.d.mts.map +1 -1
  94. package/dist/rules/lodash.mjs +2 -0
  95. package/dist/rules/lodash.mjs.map +1 -1
  96. package/dist/rules/react.d.mts +1 -0
  97. package/dist/rules/react.d.mts.map +1 -1
  98. package/dist/rules/react.mjs +1 -0
  99. package/dist/rules/react.mjs.map +1 -1
  100. package/dist/rules/sort-package.d.mts +1 -0
  101. package/dist/rules/sort-package.d.mts.map +1 -1
  102. package/dist/rules/sort-package.mjs +1 -0
  103. package/dist/rules/sort-package.mjs.map +1 -1
  104. package/dist/rules/sort-tsconfig.d.mts +1 -0
  105. package/dist/rules/sort-tsconfig.d.mts.map +1 -1
  106. package/dist/rules/sort-tsconfig.mjs +1 -0
  107. package/dist/rules/sort-tsconfig.mjs.map +1 -1
  108. package/dist/rules/typescript.d.mts +2 -0
  109. package/dist/rules/typescript.d.mts.map +1 -1
  110. package/dist/rules/typescript.mjs +2 -0
  111. package/dist/rules/typescript.mjs.map +1 -1
  112. package/dist/rules/vue.d.mts +2 -0
  113. package/dist/rules/vue.d.mts.map +1 -1
  114. package/dist/rules/vue.mjs +2 -0
  115. package/dist/rules/vue.mjs.map +1 -1
  116. package/docs/engineering-audit.zh.md +5 -2
  117. package/package.json +6 -3
package/dist/index.d.mts CHANGED
@@ -10,13 +10,20 @@ type RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<
10
10
  /**
11
11
  * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。
12
12
  *
13
+ * @remarks
13
14
  * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。
15
+ *
16
+ * @typeParam Rules - 调用方传入的规则记录类型;保留字面量键和值以提供精确推断。
17
+ * @param rules - 需要进行规则名、严重级别和选项校验的 ESLint 规则记录。
18
+ * @returns 原始规则记录。返回值同时兼容 ESLint 的通用 `RulesRecord` 类型。
14
19
  */
15
20
  declare const defineRules: <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>) => Rules & Linter.RulesRecord;
16
21
  /**
17
22
  * 核心工厂 `fastConfig()` 的项目级 ESLint Flat Config 选项。
18
23
  *
19
- * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@default` 标注的值;
24
+ * @remarks
25
+ *
26
+ * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@defaultValue` 标注的值;
20
27
  * 布尔选项传入 `false` 会让工厂完全跳过对应片段,支持对象形式的框架或 TypeScript
21
28
  * 选项传入 `true` 时采用其内部默认值,传入对象时则在启用能力的同时覆盖内部默认值。
22
29
  *
@@ -46,7 +53,7 @@ interface FastConfigOptions {
46
53
  * `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。
47
54
  *
48
55
  * 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。
49
- * @default false
56
+ * @defaultValue `false`
50
57
  */
51
58
  angular?: boolean | AngularConfigOptions;
52
59
  /**
@@ -59,7 +66,7 @@ interface FastConfigOptions {
59
66
  * 常见 Vue、React、Angular 与 Vite 浏览器应用通常保持 `"browser"`。无论选择哪种
60
67
  * 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js
61
68
  * 全局变量。此选项不改变 JavaScript 编译目标或打包平台。
62
- * @default "browser"
69
+ * @defaultValue `"browser"`
63
70
  */
64
71
  environment?: RuntimeEnvironment;
65
72
  /**
@@ -68,7 +75,7 @@ interface FastConfigOptions {
68
75
  * 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循
69
76
  * ESLint `Linter.Globals`,可以声明为 `"readonly"`、`"writable"` 或 `"off"`。
70
77
  * 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。
71
- * @default undefined
78
+ * @defaultValue `undefined`
72
79
  */
73
80
  globals?: Linter.Globals;
74
81
  /**
@@ -76,7 +83,7 @@ interface FastConfigOptions {
76
83
  *
77
84
  * 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、
78
85
  * 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。
79
- * @default true
86
+ * @defaultValue `true`
80
87
  */
81
88
  gitignore?: boolean;
82
89
  /**
@@ -84,7 +91,7 @@ interface FastConfigOptions {
84
91
  *
85
92
  * 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,
86
93
  * 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。
87
- * @default []
94
+ * @defaultValue `[]`
88
95
  */
89
96
  ignores?: readonly string[];
90
97
  /**
@@ -94,7 +101,7 @@ interface FastConfigOptions {
94
101
  * resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些
95
102
  * 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响
96
103
  * JavaScript 或 TypeScript 的基础语法检查。
97
- * @default true
104
+ * @defaultValue `true`
98
105
  */
99
106
  imports?: boolean;
100
107
  /**
@@ -103,7 +110,7 @@ interface FastConfigOptions {
103
110
  * 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、
104
111
  * 环境全局变量、import、regexp 或 React 的 JavaScript 配置范围,但不会影响
105
112
  * 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。
106
- * @default true
113
+ * @defaultValue `true`
107
114
  */
108
115
  javascript?: boolean;
109
116
  /**
@@ -111,7 +118,7 @@ interface FastConfigOptions {
111
118
  *
112
119
  * 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应
113
120
  * 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。
114
- * @default true
121
+ * @defaultValue `true`
115
122
  */
116
123
  json?: boolean;
117
124
  /**
@@ -119,7 +126,7 @@ interface FastConfigOptions {
119
126
  *
120
127
  * 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架
121
128
  * 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。
122
- * @default false
129
+ * @defaultValue `false`
123
130
  */
124
131
  markdown?: boolean;
125
132
  /**
@@ -128,7 +135,7 @@ interface FastConfigOptions {
128
135
  * 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装
129
136
  * 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地
130
137
  * 重新启用某条格式规则。
131
- * @default true
138
+ * @defaultValue `true`
132
139
  */
133
140
  prettier?: boolean;
134
141
  /**
@@ -136,7 +143,7 @@ interface FastConfigOptions {
136
143
  *
137
144
  * 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则
138
145
  * 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。
139
- * @default true
146
+ * @defaultValue `true`
140
147
  */
141
148
  regexp?: boolean;
142
149
  /**
@@ -146,7 +153,7 @@ interface FastConfigOptions {
146
153
  * 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言
147
154
  * 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的
148
155
  * `importSource`,但此选项不会修改 JSX 编译器或打包器设置。
149
- * @default false
156
+ * @defaultValue `false`
150
157
  */
151
158
  react?: boolean | ReactConfigOptions;
152
159
  /**
@@ -155,7 +162,7 @@ interface FastConfigOptions {
155
162
  * `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在
156
163
  * 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。
157
164
  * JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。
158
- * @default undefined
165
+ * @defaultValue `undefined`
159
166
  */
160
167
  rules?: RuleOptions;
161
168
  /**
@@ -164,7 +171,7 @@ interface FastConfigOptions {
164
171
  * 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的
165
172
  * `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。
166
173
  * 启用此项会同时加载 JSON 解析配置。
167
- * @default false
174
+ * @defaultValue `false`
168
175
  */
169
176
  sortPackageJson?: boolean;
170
177
  /**
@@ -172,7 +179,7 @@ interface FastConfigOptions {
172
179
  *
173
180
  * 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生
174
181
  * 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。
175
- * @default false
182
+ * @defaultValue `false`
176
183
  */
177
184
  sortTsconfig?: boolean;
178
185
  /**
@@ -182,7 +189,7 @@ interface FastConfigOptions {
182
189
  * `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的
183
190
  * TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript
184
191
  * 脚本解析,并且不能再启用 Angular。
185
- * @default true
192
+ * @defaultValue `true`
186
193
  */
187
194
  typescript?: boolean | TypeScriptConfigOptions;
188
195
  /**
@@ -191,11 +198,17 @@ interface FastConfigOptions {
191
198
  * 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随
192
199
  * `typescript`:TypeScript 开启时同时支持 `<script lang="ts">` 和类型感知选项,
193
200
  * 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。
194
- * @default true
201
+ * @defaultValue `true`
195
202
  */
196
203
  vue?: boolean;
197
204
  }
198
- /** `fastConfig()` 使用的稳定默认值;对象被冻结,避免运行时被意外修改。 */
205
+ /**
206
+ * `fastConfig()` 使用的稳定默认选项。
207
+ *
208
+ * @remarks
209
+ * 对象在运行时被冻结,不包含无固定默认值的 `globals`、`ignores` 与 `rules` 字段。
210
+ * 调用方应将其视为只读参考,不应依赖修改该对象来改变工厂行为。
211
+ */
199
212
  declare const defaultConfigOptions: Readonly<{
200
213
  readonly angular: false;
201
214
  readonly environment: "browser";
@@ -215,10 +228,26 @@ declare const defaultConfigOptions: Readonly<{
215
228
  /**
216
229
  * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。
217
230
  *
231
+ * @remarks
218
232
  * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和
219
233
  * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略
220
234
  * 通过 `@fast-china/eslint-config/configs` 独立组合。
221
235
  * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。
236
+ *
237
+ * @param options - 控制内置语言、框架、插件与项目级规则的选项。
238
+ * @param overrides - 追加到全部内置片段之后的 ESLint Flat Config,可用于按文件覆盖默认行为。
239
+ * @returns 按应用顺序展开、可直接导出给 ESLint 的 Flat Config 数组。
240
+ * @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。
241
+ *
242
+ * @example
243
+ * ```ts
244
+ * import fastConfig from "@fast-china/eslint-config";
245
+ *
246
+ * export default fastConfig(
247
+ * { react: true, vue: false },
248
+ * { files: ["src/index.ts"], rules: { "no-console": "error" } },
249
+ * );
250
+ * ```
222
251
  */
223
252
  declare const fastConfig: (options?: FastConfigOptions, ...overrides: Config[]) => Config[];
224
253
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;KA0BK,uBAAuB,cAAc,eAAe,QAAQ,OAAO,cAAc,aAAa;;;;;;cAOtF,oBAAqB,cAAc,aAAa,OAAO,uBAAuB,WAAS,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;UA2BlG;;;;;;;;;;;;EAYhB,oBAAoB;;;;;;;;;;;;;EAapB,cAAc;;;;;;;;;EASd,UAAU,OAAO;;;;;;;;EAQjB;;;;;;;;EAQA;;;;;;;;;;EAUA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;EAQA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;;;EAUA,kBAAkB;;;;;;;;;EASlB,QAAQ;;;;;;;;;EASR;;;;;;;;EAQA;;;;;;;;;;EAUA,uBAAuB;;;;;;;;;EASvB;;;cAIY,sBAAoB;;;;;;;;;;;;;;;;;;;;;;;;cAyBpB,aAAc,UAAS,sBAA2B,WAAW,aAAW"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;KA6BK,uBAAuB,cAAc,eAAe,QAAQ,OAAO,cAAc,aAAa;;;;;;;;;;;cAYtF,oBAAqB,cAAc,aAAa,OAAO,uBAAuB,WAAS,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;UA6BlG;;;;;;;;;;;;EAYhB,oBAAoB;;;;;;;;;;;;;EAapB,cAAc;;;;;;;;;EASd,UAAU,OAAO;;;;;;;;EAQjB;;;;;;;;EAQA;;;;;;;;;;EAUA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;EAQA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;;;EAUA,kBAAkB;;;;;;;;;EASlB,QAAQ;;;;;;;;;EASR;;;;;;;;EAQA;;;;;;;;;;EAUA,uBAAuB;;;;;;;;;EASvB;;;;;;;;;cAUY,sBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyCpB,aAAc,UAAS,sBAA2B,WAAW,aAAW"}
package/dist/index.mjs CHANGED
@@ -18,15 +18,29 @@ import { defineConfig } from "eslint/config";
18
18
  //#region src/index.ts
19
19
  /**
20
20
  * 根入口提供面向 Vue 3 浏览器管理项目的默认配置工厂。
21
+ *
21
22
  * 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。
23
+ *
24
+ * @packageDocumentation
22
25
  */
23
26
  /**
24
27
  * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。
25
28
  *
29
+ * @remarks
26
30
  * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。
31
+ *
32
+ * @typeParam Rules - 调用方传入的规则记录类型;保留字面量键和值以提供精确推断。
33
+ * @param rules - 需要进行规则名、严重级别和选项校验的 ESLint 规则记录。
34
+ * @returns 原始规则记录。返回值同时兼容 ESLint 的通用 `RulesRecord` 类型。
27
35
  */
28
36
  const defineRules = (rules) => rules;
29
- /** `fastConfig()` 使用的稳定默认值;对象被冻结,避免运行时被意外修改。 */
37
+ /**
38
+ * `fastConfig()` 使用的稳定默认选项。
39
+ *
40
+ * @remarks
41
+ * 对象在运行时被冻结,不包含无固定默认值的 `globals`、`ignores` 与 `rules` 字段。
42
+ * 调用方应将其视为只读参考,不应依赖修改该对象来改变工厂行为。
43
+ */
30
44
  const defaultConfigOptions = Object.freeze({
31
45
  angular: false,
32
46
  environment: "browser",
@@ -46,10 +60,26 @@ const defaultConfigOptions = Object.freeze({
46
60
  /**
47
61
  * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。
48
62
  *
63
+ * @remarks
49
64
  * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和
50
65
  * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略
51
66
  * 通过 `@fast-china/eslint-config/configs` 独立组合。
52
67
  * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。
68
+ *
69
+ * @param options - 控制内置语言、框架、插件与项目级规则的选项。
70
+ * @param overrides - 追加到全部内置片段之后的 ESLint Flat Config,可用于按文件覆盖默认行为。
71
+ * @returns 按应用顺序展开、可直接导出给 ESLint 的 Flat Config 数组。
72
+ * @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * import fastConfig from "@fast-china/eslint-config";
77
+ *
78
+ * export default fastConfig(
79
+ * { react: true, vue: false },
80
+ * { files: ["src/index.ts"], rules: { "no-console": "error" } },
81
+ * );
82
+ * ```
53
83
  */
54
84
  const fastConfig = (options = {}, ...overrides) => {
55
85
  const angular = options.angular ?? defaultConfigOptions.angular;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * 根入口提供面向 Vue 3 浏览器管理项目的默认配置工厂。\n * 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。\n */\nimport { type Config, defineConfig } from \"eslint/config\";\n\nimport { type AngularConfigOptions, createAngularConfigs } from \"./configs/angular\";\nimport { createCommonConfigs } from \"./configs/common\";\nimport { type RuntimeEnvironment, createEnvironmentConfigs } from \"./configs/environment\";\nimport { createGitignoreConfigs, createGlobalIgnores } from \"./configs/ignores\";\nimport { createImportConfigs } from \"./configs/import\";\nimport { createJavaScriptConfigs } from \"./configs/javascript\";\nimport { createJsonConfigs } from \"./configs/json\";\nimport { createMarkdownConfigs } from \"./configs/markdown\";\nimport { createPrettierConfigs } from \"./configs/prettier\";\nimport { type ReactConfigOptions, createReactConfigs } from \"./configs/react\";\nimport { createRegexpConfigs } from \"./configs/regexp\";\nimport { createPackageJsonSortConfigs } from \"./configs/sort-package\";\nimport { createTsconfigSortConfigs } from \"./configs/sort-tsconfig\";\nimport { type TypeScriptConfigOptions, createTypeScriptConfigs } from \"./configs/typescript\";\nimport { createVueConfigs } from \"./configs/vue\";\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT, GLOB_VUE } from \"./constants\";\n\nimport type { RuleOptions } from \"./typegen\";\nimport type { Linter } from \"eslint\";\n\ntype RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<keyof Rules, keyof RuleOptions>, never>;\n\n/**\n * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。\n *\n * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。\n */\nexport const defineRules = <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>): Rules & Linter.RulesRecord => rules;\n\nexport type { RuleOptions } from \"./typegen\";\n\n/**\n * 核心工厂 `fastConfig()` 的项目级 ESLint Flat Config 选项。\n *\n * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@default` 标注的值;\n * 布尔选项传入 `false` 会让工厂完全跳过对应片段,支持对象形式的框架或 TypeScript\n * 选项传入 `true` 时采用其内部默认值,传入对象时则在启用能力的同时覆盖内部默认值。\n *\n * `rules` 会在全部内置规则和 Prettier 兼容层之后应用;`fastConfig()` 的其余位置参数\n * 又会排在 `rules` 之后。因此,常规的全项目规则放在 `rules` 中,按文件覆盖或需要最高\n * 优先级的配置应通过其余位置参数传入。\n *\n * 这些选项只负责生成 ESLint 配置,不会修改 TypeScript、Vite 或各框架的构建配置。\n *\n * @example\n * ```ts\n * export default fastConfig({\n * environment: \"browser\",\n * react: { version: \"detect\" },\n * typescript: { typeChecked: true },\n * vue: false,\n * });\n * ```\n */\nexport interface FastConfigOptions {\n\t/**\n\t * 是否启用 Angular 源码与模板检查。\n\t *\n\t * `true` 使用 Angular 默认选项;传入对象可控制内联模板与模板无障碍规则。\n\t * 启用后会检查 Angular TypeScript 源码、外部 `.html` 模板,并默认提取\n\t * `@Component()` 中的内联模板。Angular 依赖 TypeScript 解析能力,因此不能与\n\t * `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。\n\t *\n\t * 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。\n\t * @default false\n\t */\n\tangular?: boolean | AngularConfigOptions;\n\t/**\n\t * 应用代码实际运行的环境,用于声明 ESLint 可识别的运行时全局变量。\n\t *\n\t * - `\"browser\"`:提供浏览器全局变量,例如 `window`、`document`。\n\t * - `\"node\"`:提供 Node.js 全局变量,例如 `process`、`Buffer`。\n\t * - `\"universal\"`:同时提供浏览器与 Node.js 全局变量,适合 SSR 或同构代码。\n\t *\n\t * 常见 Vue、React、Angular 与 Vite 浏览器应用通常保持 `\"browser\"`。无论选择哪种\n\t * 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js\n\t * 全局变量。此选项不改变 JavaScript 编译目标或打包平台。\n\t * @default \"browser\"\n\t */\n\tenvironment?: RuntimeEnvironment;\n\t/**\n\t * 追加到应用代码运行环境中的项目级全局变量。\n\t *\n\t * 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循\n\t * ESLint `Linter.Globals`,可以声明为 `\"readonly\"`、`\"writable\"` 或 `\"off\"`。\n\t * 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。\n\t * @default undefined\n\t */\n\tglobals?: Linter.Globals;\n\t/**\n\t * 是否读取运行 ESLint 的项目根目录中的 `.gitignore` 并转换为全局忽略规则。\n\t *\n\t * 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、\n\t * 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。\n\t * @default true\n\t */\n\tgitignore?: boolean;\n\t/**\n\t * 追加到内置全局忽略集合末尾的 ESLint glob 模式。\n\t *\n\t * 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,\n\t * 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。\n\t * @default []\n\t */\n\tignores?: readonly string[];\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-import-x` 推荐规则和本库覆盖规则。\n\t *\n\t * 该片段检查常见的 ESM 导入导出问题,但共享配置不会猜测项目的路径别名或自定义\n\t * resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些\n\t * 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响\n\t * JavaScript 或 TypeScript 的基础语法检查。\n\t * @default true\n\t */\n\timports?: boolean;\n\t/**\n\t * 是否让工厂接管 JavaScript、CommonJS、ES Module 与 JSX 文件。\n\t *\n\t * 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、\n\t * 环境全局变量、import、regexp 或 React 的 JavaScript 配置范围,但不会影响\n\t * 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。\n\t * @default true\n\t */\n\tjavascript?: boolean;\n\t/**\n\t * 是否检查 JSON、JSONC 与 JSON5 文件,并为三种方言分别使用兼容的推荐规则。\n\t *\n\t * 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应\n\t * 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。\n\t * @default true\n\t */\n\tjson?: boolean;\n\t/**\n\t * 是否使用 `@eslint/markdown` 推荐配置检查 `.md` 文档的结构和 Markdown 语法。\n\t *\n\t * 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架\n\t * 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。\n\t * @default false\n\t */\n\tmarkdown?: boolean;\n\t/**\n\t * 是否加载 `eslint-config-prettier`,关闭与 Prettier 冲突的 ESLint 格式规则。\n\t *\n\t * 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装\n\t * 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地\n\t * 重新启用某条格式规则。\n\t * @default true\n\t */\n\tprettier?: boolean;\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-regexp` 推荐规则。\n\t *\n\t * 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则\n\t * 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。\n\t * @default true\n\t */\n\tregexp?: boolean;\n\t/**\n\t * 是否启用 React、JSX/TSX 与 Hooks 正确性规则。\n\t *\n\t * `true` 使用默认 React 设置;传入对象可指定 React 版本、兼容 JSX 运行时包和多态\n\t * 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言\n\t * 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的\n\t * `importSource`,但此选项不会修改 JSX 编译器或打包器设置。\n\t * @default false\n\t */\n\treact?: boolean | ReactConfigOptions;\n\t/**\n\t * 应用于全部已启用 JavaScript、TypeScript 和 Vue 文件的项目级规则记录。\n\t *\n\t * `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在\n\t * 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。\n\t * JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。\n\t * @default undefined\n\t */\n\trules?: RuleOptions;\n\t/**\n\t * 是否启用 `package.json` 顶层字段的固定顺序规则。\n\t *\n\t * 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的\n\t * `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。\n\t * 启用此项会同时加载 JSON 解析配置。\n\t * @default false\n\t */\n\tsortPackageJson?: boolean;\n\t/**\n\t * 是否按 TypeScript 配置主题顺序整理 `tsconfig.json` 与 `tsconfig.*.json`。\n\t *\n\t * 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生\n\t * 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。\n\t * @default false\n\t */\n\tsortTsconfig?: boolean;\n\t/**\n\t * 是否让工厂接管 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件。\n\t *\n\t * `true` 使用无需类型信息的 TypeScript 推荐与风格预置;传入对象可进一步启用\n\t * `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的\n\t * TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript\n\t * 脚本解析,并且不能再启用 Angular。\n\t * @default true\n\t */\n\ttypescript?: boolean | TypeScriptConfigOptions;\n\t/**\n\t * 是否让工厂接管 Vue 3 `.vue` 单文件组件。\n\t *\n\t * 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随\n\t * `typescript`:TypeScript 开启时同时支持 `<script lang=\"ts\">` 和类型感知选项,\n\t * 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。\n\t * @default true\n\t */\n\tvue?: boolean;\n}\n\n/** `fastConfig()` 使用的稳定默认值;对象被冻结,避免运行时被意外修改。 */\nexport const defaultConfigOptions = Object.freeze({\n\tangular: false,\n\tenvironment: \"browser\",\n\tgitignore: true,\n\timports: true,\n\tjavascript: true,\n\tjson: true,\n\tmarkdown: false,\n\tprettier: true,\n\treact: false,\n\tregexp: true,\n\tsortPackageJson: false,\n\tsortTsconfig: false,\n\ttypescript: true,\n\tvue: true,\n} as const satisfies Required<Omit<FastConfigOptions, \"globals\" | \"ignores\" | \"rules\">>);\n\n/**\n * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。\n *\n * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和\n * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略\n * 通过 `@fast-china/eslint-config/configs` 独立组合。\n * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。\n */\nexport const fastConfig = (options: FastConfigOptions = {}, ...overrides: Config[]): Config[] => {\n\tconst angular = options.angular ?? defaultConfigOptions.angular;\n\tconst environment = options.environment ?? defaultConfigOptions.environment;\n\tconst gitignore = options.gitignore ?? defaultConfigOptions.gitignore;\n\tconst imports = options.imports ?? defaultConfigOptions.imports;\n\tconst javascript = options.javascript ?? defaultConfigOptions.javascript;\n\tconst json = options.json ?? defaultConfigOptions.json;\n\tconst markdown = options.markdown ?? defaultConfigOptions.markdown;\n\tconst prettier = options.prettier ?? defaultConfigOptions.prettier;\n\tconst react = options.react ?? defaultConfigOptions.react;\n\tconst regexp = options.regexp ?? defaultConfigOptions.regexp;\n\tconst sortPackageJson = options.sortPackageJson ?? defaultConfigOptions.sortPackageJson;\n\tconst sortTsconfig = options.sortTsconfig ?? defaultConfigOptions.sortTsconfig;\n\tconst typescript = options.typescript ?? defaultConfigOptions.typescript;\n\tconst vue = options.vue ?? defaultConfigOptions.vue;\n\n\tconst typeScriptEnabled = typescript !== false;\n\tconst typeScriptOptions = typeof typescript === \"object\" ? typescript : {};\n\tconst angularEnabled = angular !== false;\n\tconst angularOptions = typeof angular === \"object\" ? angular : {};\n\tconst reactEnabled = react !== false;\n\tconst reactOptions = typeof react === \"object\" ? react : {};\n\n\tif (angularEnabled && !typeScriptEnabled) {\n\t\tthrow new TypeError(\"Angular support requires TypeScript. Remove `typescript: false` or disable `angular`.\");\n\t}\n\t// RuleOptions 是无字符串索引签名的精确映射;运行时形状仍完全符合 ESLint RulesRecord。\n\tconst projectRules = options.rules as Linter.RulesRecord | undefined;\n\tconst scriptFiles = [...(javascript ? GLOBS_JAVASCRIPT : []), ...(typeScriptEnabled ? GLOBS_TYPESCRIPT : [])];\n\tconst codeFiles = [...scriptFiles, ...(vue ? [GLOB_VUE] : [])];\n\tconst jsonEnabled = json || sortPackageJson || sortTsconfig;\n\n\treturn defineConfig([\n\t\t...createGlobalIgnores(options.ignores),\n\t\t...(gitignore ? createGitignoreConfigs() : []),\n\t\t...(codeFiles.length\n\t\t\t? [\n\t\t\t\t\t...createEnvironmentConfigs({\n\t\t\t\t\t\tenvironment,\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\tglobals: options.globals,\n\t\t\t\t\t\tnodeFiles: scriptFiles,\n\t\t\t\t\t}),\n\t\t\t\t\t...createCommonConfigs(codeFiles),\n\t\t\t\t]\n\t\t\t: []),\n\t\t...(javascript ? createJavaScriptConfigs() : []),\n\t\t...(imports && codeFiles.length ? createImportConfigs(codeFiles) : []),\n\t\t...(regexp && codeFiles.length ? createRegexpConfigs(codeFiles) : []),\n\t\t...(typeScriptEnabled ? createTypeScriptConfigs(typeScriptOptions) : []),\n\t\t...(jsonEnabled ? createJsonConfigs() : []),\n\t\t...(sortPackageJson ? createPackageJsonSortConfigs() : []),\n\t\t...(sortTsconfig ? createTsconfigSortConfigs() : []),\n\t\t...(vue ? createVueConfigs({ typescript: typeScriptEnabled, typescriptOptions: typeScriptOptions }) : []),\n\t\t...(reactEnabled\n\t\t\t? createReactConfigs(reactOptions, {\n\t\t\t\t\tjavascript,\n\t\t\t\t\ttypeChecked: typeScriptOptions.typeChecked ?? false,\n\t\t\t\t\ttypescript: typeScriptEnabled,\n\t\t\t\t})\n\t\t\t: []),\n\t\t...(angularEnabled ? createAngularConfigs(angularOptions) : []),\n\t\t...(markdown ? createMarkdownConfigs() : []),\n\t\t...(prettier ? createPrettierConfigs() : []),\n\t\t...(projectRules && codeFiles.length\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"@fast-china/project/rules\",\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\trules: projectRules,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: []),\n\t\t...overrides,\n\t]);\n};\n\nexport default fastConfig;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * 根入口提供面向 Vue 3 浏览器管理项目的默认配置工厂。\n *\n * 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。\n *\n * @packageDocumentation\n */\nimport { type Config, defineConfig } from \"eslint/config\";\n\nimport { type AngularConfigOptions, createAngularConfigs } from \"./configs/angular\";\nimport { createCommonConfigs } from \"./configs/common\";\nimport { type RuntimeEnvironment, createEnvironmentConfigs } from \"./configs/environment\";\nimport { createGitignoreConfigs, createGlobalIgnores } from \"./configs/ignores\";\nimport { createImportConfigs } from \"./configs/import\";\nimport { createJavaScriptConfigs } from \"./configs/javascript\";\nimport { createJsonConfigs } from \"./configs/json\";\nimport { createMarkdownConfigs } from \"./configs/markdown\";\nimport { createPrettierConfigs } from \"./configs/prettier\";\nimport { type ReactConfigOptions, createReactConfigs } from \"./configs/react\";\nimport { createRegexpConfigs } from \"./configs/regexp\";\nimport { createPackageJsonSortConfigs } from \"./configs/sort-package\";\nimport { createTsconfigSortConfigs } from \"./configs/sort-tsconfig\";\nimport { type TypeScriptConfigOptions, createTypeScriptConfigs } from \"./configs/typescript\";\nimport { createVueConfigs } from \"./configs/vue\";\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT, GLOB_VUE } from \"./constants\";\n\nimport type { RuleOptions } from \"./typegen\";\nimport type { Linter } from \"eslint\";\n\ntype RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<keyof Rules, keyof RuleOptions>, never>;\n\n/**\n * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。\n *\n * @remarks\n * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。\n *\n * @typeParam Rules - 调用方传入的规则记录类型;保留字面量键和值以提供精确推断。\n * @param rules - 需要进行规则名、严重级别和选项校验的 ESLint 规则记录。\n * @returns 原始规则记录。返回值同时兼容 ESLint 的通用 `RulesRecord` 类型。\n */\nexport const defineRules = <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>): Rules & Linter.RulesRecord => rules;\n\nexport type { RuleOptions } from \"./typegen\";\n\n/**\n * 核心工厂 `fastConfig()` 的项目级 ESLint Flat Config 选项。\n *\n * @remarks\n *\n * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@defaultValue` 标注的值;\n * 布尔选项传入 `false` 会让工厂完全跳过对应片段,支持对象形式的框架或 TypeScript\n * 选项传入 `true` 时采用其内部默认值,传入对象时则在启用能力的同时覆盖内部默认值。\n *\n * `rules` 会在全部内置规则和 Prettier 兼容层之后应用;`fastConfig()` 的其余位置参数\n * 又会排在 `rules` 之后。因此,常规的全项目规则放在 `rules` 中,按文件覆盖或需要最高\n * 优先级的配置应通过其余位置参数传入。\n *\n * 这些选项只负责生成 ESLint 配置,不会修改 TypeScript、Vite 或各框架的构建配置。\n *\n * @example\n * ```ts\n * export default fastConfig({\n * environment: \"browser\",\n * react: { version: \"detect\" },\n * typescript: { typeChecked: true },\n * vue: false,\n * });\n * ```\n */\nexport interface FastConfigOptions {\n\t/**\n\t * 是否启用 Angular 源码与模板检查。\n\t *\n\t * `true` 使用 Angular 默认选项;传入对象可控制内联模板与模板无障碍规则。\n\t * 启用后会检查 Angular TypeScript 源码、外部 `.html` 模板,并默认提取\n\t * `@Component()` 中的内联模板。Angular 依赖 TypeScript 解析能力,因此不能与\n\t * `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。\n\t *\n\t * 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。\n\t * @defaultValue `false`\n\t */\n\tangular?: boolean | AngularConfigOptions;\n\t/**\n\t * 应用代码实际运行的环境,用于声明 ESLint 可识别的运行时全局变量。\n\t *\n\t * - `\"browser\"`:提供浏览器全局变量,例如 `window`、`document`。\n\t * - `\"node\"`:提供 Node.js 全局变量,例如 `process`、`Buffer`。\n\t * - `\"universal\"`:同时提供浏览器与 Node.js 全局变量,适合 SSR 或同构代码。\n\t *\n\t * 常见 Vue、React、Angular 与 Vite 浏览器应用通常保持 `\"browser\"`。无论选择哪种\n\t * 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js\n\t * 全局变量。此选项不改变 JavaScript 编译目标或打包平台。\n\t * @defaultValue `\"browser\"`\n\t */\n\tenvironment?: RuntimeEnvironment;\n\t/**\n\t * 追加到应用代码运行环境中的项目级全局变量。\n\t *\n\t * 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循\n\t * ESLint `Linter.Globals`,可以声明为 `\"readonly\"`、`\"writable\"` 或 `\"off\"`。\n\t * 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。\n\t * @defaultValue `undefined`\n\t */\n\tglobals?: Linter.Globals;\n\t/**\n\t * 是否读取运行 ESLint 的项目根目录中的 `.gitignore` 并转换为全局忽略规则。\n\t *\n\t * 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、\n\t * 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。\n\t * @defaultValue `true`\n\t */\n\tgitignore?: boolean;\n\t/**\n\t * 追加到内置全局忽略集合末尾的 ESLint glob 模式。\n\t *\n\t * 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,\n\t * 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。\n\t * @defaultValue `[]`\n\t */\n\tignores?: readonly string[];\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-import-x` 推荐规则和本库覆盖规则。\n\t *\n\t * 该片段检查常见的 ESM 导入导出问题,但共享配置不会猜测项目的路径别名或自定义\n\t * resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些\n\t * 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响\n\t * JavaScript 或 TypeScript 的基础语法检查。\n\t * @defaultValue `true`\n\t */\n\timports?: boolean;\n\t/**\n\t * 是否让工厂接管 JavaScript、CommonJS、ES Module 与 JSX 文件。\n\t *\n\t * 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、\n\t * 环境全局变量、import、regexp 或 React 的 JavaScript 配置范围,但不会影响\n\t * 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。\n\t * @defaultValue `true`\n\t */\n\tjavascript?: boolean;\n\t/**\n\t * 是否检查 JSON、JSONC 与 JSON5 文件,并为三种方言分别使用兼容的推荐规则。\n\t *\n\t * 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应\n\t * 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。\n\t * @defaultValue `true`\n\t */\n\tjson?: boolean;\n\t/**\n\t * 是否使用 `@eslint/markdown` 推荐配置检查 `.md` 文档的结构和 Markdown 语法。\n\t *\n\t * 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架\n\t * 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。\n\t * @defaultValue `false`\n\t */\n\tmarkdown?: boolean;\n\t/**\n\t * 是否加载 `eslint-config-prettier`,关闭与 Prettier 冲突的 ESLint 格式规则。\n\t *\n\t * 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装\n\t * 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地\n\t * 重新启用某条格式规则。\n\t * @defaultValue `true`\n\t */\n\tprettier?: boolean;\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-regexp` 推荐规则。\n\t *\n\t * 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则\n\t * 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。\n\t * @defaultValue `true`\n\t */\n\tregexp?: boolean;\n\t/**\n\t * 是否启用 React、JSX/TSX 与 Hooks 正确性规则。\n\t *\n\t * `true` 使用默认 React 设置;传入对象可指定 React 版本、兼容 JSX 运行时包和多态\n\t * 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言\n\t * 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的\n\t * `importSource`,但此选项不会修改 JSX 编译器或打包器设置。\n\t * @defaultValue `false`\n\t */\n\treact?: boolean | ReactConfigOptions;\n\t/**\n\t * 应用于全部已启用 JavaScript、TypeScript 和 Vue 文件的项目级规则记录。\n\t *\n\t * `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在\n\t * 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。\n\t * JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。\n\t * @defaultValue `undefined`\n\t */\n\trules?: RuleOptions;\n\t/**\n\t * 是否启用 `package.json` 顶层字段的固定顺序规则。\n\t *\n\t * 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的\n\t * `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。\n\t * 启用此项会同时加载 JSON 解析配置。\n\t * @defaultValue `false`\n\t */\n\tsortPackageJson?: boolean;\n\t/**\n\t * 是否按 TypeScript 配置主题顺序整理 `tsconfig.json` 与 `tsconfig.*.json`。\n\t *\n\t * 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生\n\t * 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。\n\t * @defaultValue `false`\n\t */\n\tsortTsconfig?: boolean;\n\t/**\n\t * 是否让工厂接管 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件。\n\t *\n\t * `true` 使用无需类型信息的 TypeScript 推荐与风格预置;传入对象可进一步启用\n\t * `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的\n\t * TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript\n\t * 脚本解析,并且不能再启用 Angular。\n\t * @defaultValue `true`\n\t */\n\ttypescript?: boolean | TypeScriptConfigOptions;\n\t/**\n\t * 是否让工厂接管 Vue 3 `.vue` 单文件组件。\n\t *\n\t * 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随\n\t * `typescript`:TypeScript 开启时同时支持 `<script lang=\"ts\">` 和类型感知选项,\n\t * 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。\n\t * @defaultValue `true`\n\t */\n\tvue?: boolean;\n}\n\n/**\n * `fastConfig()` 使用的稳定默认选项。\n *\n * @remarks\n * 对象在运行时被冻结,不包含无固定默认值的 `globals`、`ignores` 与 `rules` 字段。\n * 调用方应将其视为只读参考,不应依赖修改该对象来改变工厂行为。\n */\nexport const defaultConfigOptions = Object.freeze({\n\tangular: false,\n\tenvironment: \"browser\",\n\tgitignore: true,\n\timports: true,\n\tjavascript: true,\n\tjson: true,\n\tmarkdown: false,\n\tprettier: true,\n\treact: false,\n\tregexp: true,\n\tsortPackageJson: false,\n\tsortTsconfig: false,\n\ttypescript: true,\n\tvue: true,\n} as const satisfies Required<Omit<FastConfigOptions, \"globals\" | \"ignores\" | \"rules\">>);\n\n/**\n * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。\n *\n * @remarks\n * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和\n * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略\n * 通过 `@fast-china/eslint-config/configs` 独立组合。\n * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。\n *\n * @param options - 控制内置语言、框架、插件与项目级规则的选项。\n * @param overrides - 追加到全部内置片段之后的 ESLint Flat Config,可用于按文件覆盖默认行为。\n * @returns 按应用顺序展开、可直接导出给 ESLint 的 Flat Config 数组。\n * @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。\n *\n * @example\n * ```ts\n * import fastConfig from \"@fast-china/eslint-config\";\n *\n * export default fastConfig(\n * { react: true, vue: false },\n * { files: [\"src/index.ts\"], rules: { \"no-console\": \"error\" } },\n * );\n * ```\n */\nexport const fastConfig = (options: FastConfigOptions = {}, ...overrides: Config[]): Config[] => {\n\tconst angular = options.angular ?? defaultConfigOptions.angular;\n\tconst environment = options.environment ?? defaultConfigOptions.environment;\n\tconst gitignore = options.gitignore ?? defaultConfigOptions.gitignore;\n\tconst imports = options.imports ?? defaultConfigOptions.imports;\n\tconst javascript = options.javascript ?? defaultConfigOptions.javascript;\n\tconst json = options.json ?? defaultConfigOptions.json;\n\tconst markdown = options.markdown ?? defaultConfigOptions.markdown;\n\tconst prettier = options.prettier ?? defaultConfigOptions.prettier;\n\tconst react = options.react ?? defaultConfigOptions.react;\n\tconst regexp = options.regexp ?? defaultConfigOptions.regexp;\n\tconst sortPackageJson = options.sortPackageJson ?? defaultConfigOptions.sortPackageJson;\n\tconst sortTsconfig = options.sortTsconfig ?? defaultConfigOptions.sortTsconfig;\n\tconst typescript = options.typescript ?? defaultConfigOptions.typescript;\n\tconst vue = options.vue ?? defaultConfigOptions.vue;\n\n\tconst typeScriptEnabled = typescript !== false;\n\tconst typeScriptOptions = typeof typescript === \"object\" ? typescript : {};\n\tconst angularEnabled = angular !== false;\n\tconst angularOptions = typeof angular === \"object\" ? angular : {};\n\tconst reactEnabled = react !== false;\n\tconst reactOptions = typeof react === \"object\" ? react : {};\n\n\tif (angularEnabled && !typeScriptEnabled) {\n\t\tthrow new TypeError(\"Angular support requires TypeScript. Remove `typescript: false` or disable `angular`.\");\n\t}\n\t// RuleOptions 是无字符串索引签名的精确映射;运行时形状仍完全符合 ESLint RulesRecord。\n\tconst projectRules = options.rules as Linter.RulesRecord | undefined;\n\tconst scriptFiles = [...(javascript ? GLOBS_JAVASCRIPT : []), ...(typeScriptEnabled ? GLOBS_TYPESCRIPT : [])];\n\tconst codeFiles = [...scriptFiles, ...(vue ? [GLOB_VUE] : [])];\n\tconst jsonEnabled = json || sortPackageJson || sortTsconfig;\n\n\treturn defineConfig([\n\t\t...createGlobalIgnores(options.ignores),\n\t\t...(gitignore ? createGitignoreConfigs() : []),\n\t\t...(codeFiles.length\n\t\t\t? [\n\t\t\t\t\t...createEnvironmentConfigs({\n\t\t\t\t\t\tenvironment,\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\tglobals: options.globals,\n\t\t\t\t\t\tnodeFiles: scriptFiles,\n\t\t\t\t\t}),\n\t\t\t\t\t...createCommonConfigs(codeFiles),\n\t\t\t\t]\n\t\t\t: []),\n\t\t...(javascript ? createJavaScriptConfigs() : []),\n\t\t...(imports && codeFiles.length ? createImportConfigs(codeFiles) : []),\n\t\t...(regexp && codeFiles.length ? createRegexpConfigs(codeFiles) : []),\n\t\t...(typeScriptEnabled ? createTypeScriptConfigs(typeScriptOptions) : []),\n\t\t...(jsonEnabled ? createJsonConfigs() : []),\n\t\t...(sortPackageJson ? createPackageJsonSortConfigs() : []),\n\t\t...(sortTsconfig ? createTsconfigSortConfigs() : []),\n\t\t...(vue ? createVueConfigs({ typescript: typeScriptEnabled, typescriptOptions: typeScriptOptions }) : []),\n\t\t...(reactEnabled\n\t\t\t? createReactConfigs(reactOptions, {\n\t\t\t\t\tjavascript,\n\t\t\t\t\ttypeChecked: typeScriptOptions.typeChecked ?? false,\n\t\t\t\t\ttypescript: typeScriptEnabled,\n\t\t\t\t})\n\t\t\t: []),\n\t\t...(angularEnabled ? createAngularConfigs(angularOptions) : []),\n\t\t...(markdown ? createMarkdownConfigs() : []),\n\t\t...(prettier ? createPrettierConfigs() : []),\n\t\t...(projectRules && codeFiles.length\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"@fast-china/project/rules\",\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\trules: projectRules,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: []),\n\t\t...overrides,\n\t]);\n};\n\nexport default fastConfig;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAa,eAAgD,UAAqE;;;;;;;;AAoMlI,MAAa,uBAAuB,OAAO,OAAO;CACjD,SAAS;CACT,aAAa;CACb,WAAW;CACX,SAAS;CACT,YAAY;CACZ,MAAM;CACN,UAAU;CACV,UAAU;CACV,OAAO;CACP,QAAQ;CACR,iBAAiB;CACjB,cAAc;CACd,YAAY;CACZ,KAAK;AACN,CAAuF;;;;;;;;;;;;;;;;;;;;;;;;;AA0BvF,MAAa,cAAc,UAA6B,CAAC,GAAG,GAAG,cAAkC;CAChG,MAAM,UAAU,QAAQ,WAAW,qBAAqB;CACxD,MAAM,cAAc,QAAQ,eAAe,qBAAqB;CAChE,MAAM,YAAY,QAAQ,aAAa,qBAAqB;CAC5D,MAAM,UAAU,QAAQ,WAAW,qBAAqB;CACxD,MAAM,aAAa,QAAQ,cAAc,qBAAqB;CAC9D,MAAM,OAAO,QAAQ,QAAQ,qBAAqB;CAClD,MAAM,WAAW,QAAQ,YAAY,qBAAqB;CAC1D,MAAM,WAAW,QAAQ,YAAY,qBAAqB;CAC1D,MAAM,QAAQ,QAAQ,SAAS,qBAAqB;CACpD,MAAM,SAAS,QAAQ,UAAU,qBAAqB;CACtD,MAAM,kBAAkB,QAAQ,mBAAmB,qBAAqB;CACxE,MAAM,eAAe,QAAQ,gBAAgB,qBAAqB;CAClE,MAAM,aAAa,QAAQ,cAAc,qBAAqB;CAC9D,MAAM,MAAM,QAAQ,OAAO,qBAAqB;CAEhD,MAAM,oBAAoB,eAAe;CACzC,MAAM,oBAAoB,OAAO,eAAe,WAAW,aAAa,CAAC;CACzE,MAAM,iBAAiB,YAAY;CACnC,MAAM,iBAAiB,OAAO,YAAY,WAAW,UAAU,CAAC;CAChE,MAAM,eAAe,UAAU;CAC/B,MAAM,eAAe,OAAO,UAAU,WAAW,QAAQ,CAAC;CAE1D,IAAI,kBAAkB,CAAC,mBACtB,MAAM,IAAI,UAAU,uFAAuF;CAG5G,MAAM,eAAe,QAAQ;CAC7B,MAAM,cAAc,CAAC,GAAI,aAAa,mBAAmB,CAAC,GAAI,GAAI,oBAAoB,mBAAmB,CAAC,CAAE;CAC5G,MAAM,YAAY,CAAC,GAAG,aAAa,GAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAE;CAC7D,MAAM,cAAc,QAAQ,mBAAmB;CAE/C,OAAO,aAAa;EACnB,GAAG,oBAAoB,QAAQ,OAAO;EACtC,GAAI,YAAY,uBAAuB,IAAI,CAAC;EAC5C,GAAI,UAAU,SACX,CACA,GAAG,yBAAyB;GAC3B;GACA,OAAO;GACP,SAAS,QAAQ;GACjB,WAAW;EACZ,CAAC,GACD,GAAG,oBAAoB,SAAS,CACjC,IACC,CAAC;EACJ,GAAI,aAAa,wBAAwB,IAAI,CAAC;EAC9C,GAAI,WAAW,UAAU,SAAS,oBAAoB,SAAS,IAAI,CAAC;EACpE,GAAI,UAAU,UAAU,SAAS,oBAAoB,SAAS,IAAI,CAAC;EACnE,GAAI,oBAAoB,wBAAwB,iBAAiB,IAAI,CAAC;EACtE,GAAI,cAAc,kBAAkB,IAAI,CAAC;EACzC,GAAI,kBAAkB,6BAA6B,IAAI,CAAC;EACxD,GAAI,eAAe,0BAA0B,IAAI,CAAC;EAClD,GAAI,MAAM,iBAAiB;GAAE,YAAY;GAAmB,mBAAmB;EAAkB,CAAC,IAAI,CAAC;EACvG,GAAI,eACD,mBAAmB,cAAc;GACjC;GACA,aAAa,kBAAkB,eAAe;GAC9C,YAAY;EACb,CAAC,IACA,CAAC;EACJ,GAAI,iBAAiB,qBAAqB,cAAc,IAAI,CAAC;EAC7D,GAAI,WAAW,sBAAsB,IAAI,CAAC;EAC1C,GAAI,WAAW,sBAAsB,IAAI,CAAC;EAC1C,GAAI,gBAAgB,UAAU,SAC3B,CACA;GACC,MAAM;GACN,OAAO;GACP,OAAO;EACR,CACD,IACC,CAAC;EACJ,GAAG;CACJ,CAAC;AACF"}
@@ -2,6 +2,7 @@
2
2
  /**
3
3
  * Angular TypeScript 推荐规则。
4
4
  *
5
+ * @remarks
5
6
  * Angular ESLint 的拆分插件不直接导出 Flat Config 预置;本记录与 angular-eslint
6
7
  * 22.x 的 `tsRecommended` 保持一致,并逐条说明启用理由。
7
8
  */
@@ -20,14 +21,26 @@ declare const angularRules: {
20
21
  "@angular-eslint/use-pipe-transform-interface": "error";
21
22
  "@angular-eslint/use-lifecycle-interface": "warn";
22
23
  };
23
- /** Angular HTML 模板推荐规则,与 angular-eslint 22.x 的 `templateRecommended` 对齐。 */
24
+ /**
25
+ * Angular HTML 模板推荐规则。
26
+ *
27
+ * @remarks
28
+ * 该记录与 angular-eslint 22.x 的 `templateRecommended` 对齐,并补充默认启用的现代
29
+ * 控制流约束。它同时应用于外部模板与 processor 提取的内联模板。
30
+ */
24
31
  declare const angularTemplateRules: {
25
32
  "@angular-eslint/template/banana-in-box": "error";
26
33
  "@angular-eslint/template/eqeqeq": "error";
27
34
  "@angular-eslint/template/no-negated-async": "error";
28
35
  "@angular-eslint/template/prefer-control-flow": "error";
29
36
  };
30
- /** Angular 模板无障碍规则;可通过 `angular.templateAccessibility` 整组关闭。 */
37
+ /**
38
+ * Angular 模板无障碍规则。
39
+ *
40
+ * @remarks
41
+ * 规则覆盖替代文本、键盘交互、焦点、表单标签与 ARIA 合法性,可通过
42
+ * `angular.templateAccessibility` 整组关闭而不影响模板基础正确性规则。
43
+ */
31
44
  declare const angularTemplateAccessibilityRules: {
32
45
  "@angular-eslint/template/alt-text": "error";
33
46
  "@angular-eslint/template/click-events-have-key-events": "error";
@@ -1 +1 @@
1
- {"version":3,"file":"angular.d.mts","names":[],"sources":["../../src/rules/angular.ts"],"mappings":";;;;;;;cAQa;;;;;;;;;;;;;;;;cA8BA;;;;;;;cAYA"}
1
+ {"version":3,"file":"angular.d.mts","names":[],"sources":["../../src/rules/angular.ts"],"mappings":";;;;;;;;cASa;;;;;;;;;;;;;;;;;;;;;;cAoCA;;;;;;;;;;;;;cAkBA"}
@@ -2,6 +2,7 @@
2
2
  /**
3
3
  * Angular TypeScript 推荐规则。
4
4
  *
5
+ * @remarks
5
6
  * Angular ESLint 的拆分插件不直接导出 Flat Config 预置;本记录与 angular-eslint
6
7
  * 22.x 的 `tsRecommended` 保持一致,并逐条说明启用理由。
7
8
  */
@@ -20,14 +21,26 @@ const angularRules = {
20
21
  "@angular-eslint/use-pipe-transform-interface": "error",
21
22
  "@angular-eslint/use-lifecycle-interface": "warn"
22
23
  };
23
- /** Angular HTML 模板推荐规则,与 angular-eslint 22.x 的 `templateRecommended` 对齐。 */
24
+ /**
25
+ * Angular HTML 模板推荐规则。
26
+ *
27
+ * @remarks
28
+ * 该记录与 angular-eslint 22.x 的 `templateRecommended` 对齐,并补充默认启用的现代
29
+ * 控制流约束。它同时应用于外部模板与 processor 提取的内联模板。
30
+ */
24
31
  const angularTemplateRules = {
25
32
  "@angular-eslint/template/banana-in-box": "error",
26
33
  "@angular-eslint/template/eqeqeq": "error",
27
34
  "@angular-eslint/template/no-negated-async": "error",
28
35
  "@angular-eslint/template/prefer-control-flow": "error"
29
36
  };
30
- /** Angular 模板无障碍规则;可通过 `angular.templateAccessibility` 整组关闭。 */
37
+ /**
38
+ * Angular 模板无障碍规则。
39
+ *
40
+ * @remarks
41
+ * 规则覆盖替代文本、键盘交互、焦点、表单标签与 ARIA 合法性,可通过
42
+ * `angular.templateAccessibility` 整组关闭而不影响模板基础正确性规则。
43
+ */
31
44
  const angularTemplateAccessibilityRules = {
32
45
  "@angular-eslint/template/alt-text": "error",
33
46
  "@angular-eslint/template/click-events-have-key-events": "error",
@@ -1 +1 @@
1
- {"version":3,"file":"angular.mjs","names":[],"sources":["../../src/rules/angular.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * Angular TypeScript 推荐规则。\n *\n * Angular ESLint 的拆分插件不直接导出 Flat Config 预置;本记录与 angular-eslint\n * 22.x 的 `tsRecommended` 保持一致,并逐条说明启用理由。\n */\nexport const angularRules = {\n\t// 生命周期方法只能出现在对应的 Angular 组件或指令上下文中,避免无效钩子。\n\t\"@angular-eslint/contextual-lifecycle\": \"error\",\n\t// 空生命周期方法没有行为且容易误导维护者,应直接移除。\n\t\"@angular-eslint/no-empty-lifecycle-method\": \"error\",\n\t// Input 别名会让模板 API 与类属性名称分离,增加搜索和重构成本。\n\t\"@angular-eslint/no-input-rename\": \"error\",\n\t// 统一使用 input()/@Input 声明输入,避免与 metadata 数组混用两套 API。\n\t\"@angular-eslint/no-inputs-metadata-property\": \"error\",\n\t// 输出名称不得覆盖原生 DOM 事件,否则模板事件含义容易混淆。\n\t\"@angular-eslint/no-output-native\": \"error\",\n\t// 输出本身已经表达事件语义,不使用 on 前缀以保持 Angular 公共 API 约定。\n\t\"@angular-eslint/no-output-on-prefix\": \"error\",\n\t// Output 别名会让模板 API 与类属性名称分离,增加搜索和重构成本。\n\t\"@angular-eslint/no-output-rename\": \"error\",\n\t// 统一使用 output()/@Output 声明输出,避免与 metadata 数组混用两套 API。\n\t\"@angular-eslint/no-outputs-metadata-property\": \"error\",\n\t// [高影响][按需启用] Angular 22 推荐 inject(),旧构造器注入代码启用框架后可能集中报错。\n\t\"@angular-eslint/prefer-inject\": \"error\",\n\t// [高影响][按需启用] OnPush 改变变更检测边界,修复时必须验证状态更新与视图刷新。\n\t\"@angular-eslint/prefer-on-push-component-change-detection\": \"error\",\n\t// [高影响][按需启用] 独立组件是现代 Angular 默认模型,旧 NgModule 项目需规划后再迁移。\n\t\"@angular-eslint/prefer-standalone\": \"error\",\n\t// Pipe 类实现接口后可由 TypeScript 检查 transform 签名,避免运行时才发现不一致。\n\t\"@angular-eslint/use-pipe-transform-interface\": \"error\",\n\t// 生命周期接口让方法拼写和签名可由 TypeScript 验证;warn 便于渐进补齐旧代码。\n\t\"@angular-eslint/use-lifecycle-interface\": \"warn\",\n} satisfies RuleOptions;\n\n/** Angular HTML 模板推荐规则,与 angular-eslint 22.x 的 `templateRecommended` 对齐。 */\nexport const angularTemplateRules = {\n\t// 双向绑定必须使用 [(...)] 顺序,反写的“香蕉盒”通常是模板笔误。\n\t\"@angular-eslint/template/banana-in-box\": \"error\",\n\t// 模板比较使用严格等号,避免 Angular 表达式中的隐式类型转换。\n\t\"@angular-eslint/template/eqeqeq\": \"error\",\n\t// 对 async pipe 结果直接取反会让初始 null 状态产生反直觉分支。\n\t\"@angular-eslint/template/no-negated-async\": \"error\",\n\t// [高影响][按需启用] 统一采用现代 @if/@for 控制流,旧模板启用后需要规划迁移。\n\t\"@angular-eslint/template/prefer-control-flow\": \"error\",\n} satisfies RuleOptions;\n\n/** Angular 模板无障碍规则;可通过 `angular.templateAccessibility` 整组关闭。 */\nexport const angularTemplateAccessibilityRules = {\n\t// 图片和图像型元素需要替代文本,确保非视觉用户能获得等价信息。\n\t\"@angular-eslint/template/alt-text\": \"error\",\n\t// click 交互需要键盘等价入口,避免仅鼠标用户可操作。\n\t\"@angular-eslint/template/click-events-have-key-events\": \"error\",\n\t// 需要可访问名称的元素不得为空,避免读屏软件播报无意义控件。\n\t\"@angular-eslint/template/elements-content\": \"error\",\n\t// 具有交互语义的元素必须可聚焦,确保键盘导航能够到达。\n\t\"@angular-eslint/template/interactive-supports-focus\": \"error\",\n\t// 表单 label 必须关联控件,扩大可点击区域并为辅助技术提供名称。\n\t\"@angular-eslint/template/label-has-associated-control\": \"error\",\n\t// mouseover/mouseout 行为需要对应键盘焦点事件,保持输入方式等价。\n\t\"@angular-eslint/template/mouse-events-have-key-events\": \"error\",\n\t// autofocus 会突然移动焦点并干扰读屏流程,默认禁止。\n\t\"@angular-eslint/template/no-autofocus\": \"error\",\n\t// 禁止 marquee、blink 等干扰性元素,避免可读性和可访问性问题。\n\t\"@angular-eslint/template/no-distracting-elements\": \"error\",\n\t// ARIA role 必须提供该角色要求的属性,避免声明不完整的语义。\n\t\"@angular-eslint/template/role-has-required-aria\": \"error\",\n\t// 表头 scope 只能使用合法值,使表格关系可被辅助技术正确解析。\n\t\"@angular-eslint/template/table-scope\": \"error\",\n\t// ARIA 属性名和值必须有效,避免浏览器静默忽略错误语义。\n\t\"@angular-eslint/template/valid-aria\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;AAQA,MAAa,eAAe;CAE3B,wCAAwC;CAExC,6CAA6C;CAE7C,mCAAmC;CAEnC,+CAA+C;CAE/C,oCAAoC;CAEpC,uCAAuC;CAEvC,oCAAoC;CAEpC,gDAAgD;CAEhD,iCAAiC;CAEjC,6DAA6D;CAE7D,qCAAqC;CAErC,gDAAgD;CAEhD,2CAA2C;AAC5C;;AAGA,MAAa,uBAAuB;CAEnC,0CAA0C;CAE1C,mCAAmC;CAEnC,6CAA6C;CAE7C,gDAAgD;AACjD;;AAGA,MAAa,oCAAoC;CAEhD,qCAAqC;CAErC,yDAAyD;CAEzD,6CAA6C;CAE7C,uDAAuD;CAEvD,yDAAyD;CAEzD,yDAAyD;CAEzD,yCAAyC;CAEzC,oDAAoD;CAEpD,mDAAmD;CAEnD,wCAAwC;CAExC,uCAAuC;AACxC"}
1
+ {"version":3,"file":"angular.mjs","names":[],"sources":["../../src/rules/angular.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * Angular TypeScript 推荐规则。\n *\n * @remarks\n * Angular ESLint 的拆分插件不直接导出 Flat Config 预置;本记录与 angular-eslint\n * 22.x 的 `tsRecommended` 保持一致,并逐条说明启用理由。\n */\nexport const angularRules = {\n\t// 生命周期方法只能出现在对应的 Angular 组件或指令上下文中,避免无效钩子。\n\t\"@angular-eslint/contextual-lifecycle\": \"error\",\n\t// 空生命周期方法没有行为且容易误导维护者,应直接移除。\n\t\"@angular-eslint/no-empty-lifecycle-method\": \"error\",\n\t// Input 别名会让模板 API 与类属性名称分离,增加搜索和重构成本。\n\t\"@angular-eslint/no-input-rename\": \"error\",\n\t// 统一使用 input()/@Input 声明输入,避免与 metadata 数组混用两套 API。\n\t\"@angular-eslint/no-inputs-metadata-property\": \"error\",\n\t// 输出名称不得覆盖原生 DOM 事件,否则模板事件含义容易混淆。\n\t\"@angular-eslint/no-output-native\": \"error\",\n\t// 输出本身已经表达事件语义,不使用 on 前缀以保持 Angular 公共 API 约定。\n\t\"@angular-eslint/no-output-on-prefix\": \"error\",\n\t// Output 别名会让模板 API 与类属性名称分离,增加搜索和重构成本。\n\t\"@angular-eslint/no-output-rename\": \"error\",\n\t// 统一使用 output()/@Output 声明输出,避免与 metadata 数组混用两套 API。\n\t\"@angular-eslint/no-outputs-metadata-property\": \"error\",\n\t// [高影响][按需启用] Angular 22 推荐 inject(),旧构造器注入代码启用框架后可能集中报错。\n\t\"@angular-eslint/prefer-inject\": \"error\",\n\t// [高影响][按需启用] OnPush 改变变更检测边界,修复时必须验证状态更新与视图刷新。\n\t\"@angular-eslint/prefer-on-push-component-change-detection\": \"error\",\n\t// [高影响][按需启用] 独立组件是现代 Angular 默认模型,旧 NgModule 项目需规划后再迁移。\n\t\"@angular-eslint/prefer-standalone\": \"error\",\n\t// Pipe 类实现接口后可由 TypeScript 检查 transform 签名,避免运行时才发现不一致。\n\t\"@angular-eslint/use-pipe-transform-interface\": \"error\",\n\t// 生命周期接口让方法拼写和签名可由 TypeScript 验证;warn 便于渐进补齐旧代码。\n\t\"@angular-eslint/use-lifecycle-interface\": \"warn\",\n} satisfies RuleOptions;\n\n/**\n * Angular HTML 模板推荐规则。\n *\n * @remarks\n * 该记录与 angular-eslint 22.x 的 `templateRecommended` 对齐,并补充默认启用的现代\n * 控制流约束。它同时应用于外部模板与 processor 提取的内联模板。\n */\nexport const angularTemplateRules = {\n\t// 双向绑定必须使用 [(...)] 顺序,反写的“香蕉盒”通常是模板笔误。\n\t\"@angular-eslint/template/banana-in-box\": \"error\",\n\t// 模板比较使用严格等号,避免 Angular 表达式中的隐式类型转换。\n\t\"@angular-eslint/template/eqeqeq\": \"error\",\n\t// 对 async pipe 结果直接取反会让初始 null 状态产生反直觉分支。\n\t\"@angular-eslint/template/no-negated-async\": \"error\",\n\t// [高影响][按需启用] 统一采用现代 @if/@for 控制流,旧模板启用后需要规划迁移。\n\t\"@angular-eslint/template/prefer-control-flow\": \"error\",\n} satisfies RuleOptions;\n\n/**\n * Angular 模板无障碍规则。\n *\n * @remarks\n * 规则覆盖替代文本、键盘交互、焦点、表单标签与 ARIA 合法性,可通过\n * `angular.templateAccessibility` 整组关闭而不影响模板基础正确性规则。\n */\nexport const angularTemplateAccessibilityRules = {\n\t// 图片和图像型元素需要替代文本,确保非视觉用户能获得等价信息。\n\t\"@angular-eslint/template/alt-text\": \"error\",\n\t// click 交互需要键盘等价入口,避免仅鼠标用户可操作。\n\t\"@angular-eslint/template/click-events-have-key-events\": \"error\",\n\t// 需要可访问名称的元素不得为空,避免读屏软件播报无意义控件。\n\t\"@angular-eslint/template/elements-content\": \"error\",\n\t// 具有交互语义的元素必须可聚焦,确保键盘导航能够到达。\n\t\"@angular-eslint/template/interactive-supports-focus\": \"error\",\n\t// 表单 label 必须关联控件,扩大可点击区域并为辅助技术提供名称。\n\t\"@angular-eslint/template/label-has-associated-control\": \"error\",\n\t// mouseover/mouseout 行为需要对应键盘焦点事件,保持输入方式等价。\n\t\"@angular-eslint/template/mouse-events-have-key-events\": \"error\",\n\t// autofocus 会突然移动焦点并干扰读屏流程,默认禁止。\n\t\"@angular-eslint/template/no-autofocus\": \"error\",\n\t// 禁止 marquee、blink 等干扰性元素,避免可读性和可访问性问题。\n\t\"@angular-eslint/template/no-distracting-elements\": \"error\",\n\t// ARIA role 必须提供该角色要求的属性,避免声明不完整的语义。\n\t\"@angular-eslint/template/role-has-required-aria\": \"error\",\n\t// 表头 scope 只能使用合法值,使表格关系可被辅助技术正确解析。\n\t\"@angular-eslint/template/table-scope\": \"error\",\n\t// ARIA 属性名和值必须有效,避免浏览器静默忽略错误语义。\n\t\"@angular-eslint/template/valid-aria\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,eAAe;CAE3B,wCAAwC;CAExC,6CAA6C;CAE7C,mCAAmC;CAEnC,+CAA+C;CAE/C,oCAAoC;CAEpC,uCAAuC;CAEvC,oCAAoC;CAEpC,gDAAgD;CAEhD,iCAAiC;CAEjC,6DAA6D;CAE7D,qCAAqC;CAErC,gDAAgD;CAEhD,2CAA2C;AAC5C;;;;;;;;AASA,MAAa,uBAAuB;CAEnC,0CAA0C;CAE1C,mCAAmC;CAEnC,6CAA6C;CAE7C,gDAAgD;AACjD;;;;;;;;AASA,MAAa,oCAAoC;CAEhD,qCAAqC;CAErC,yDAAyD;CAEzD,6CAA6C;CAE7C,uDAAuD;CAEvD,yDAAyD;CAEzD,yDAAyD;CAEzD,yCAAyC;CAEzC,oDAAoD;CAEpD,mDAAmD;CAEnD,wCAAwC;CAExC,uCAAuC;AACxC"}
@@ -2,6 +2,7 @@
2
2
  /**
3
3
  * 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。
4
4
  *
5
+ * @remarks
5
6
  * 维护约定:每条本地覆写都要说明启用原因;可能造成大面积改动、采用成本或
6
7
  * 行为变化的规则使用 `[高影响]` 标记,并同步维护 `docs/rules-risk.zh.md`。
7
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.mts","names":[],"sources":["../../src/rules/common.ts"],"mappings":";;;;;;;cAQa"}
1
+ {"version":3,"file":"common.d.mts","names":[],"sources":["../../src/rules/common.ts"],"mappings":";;;;;;;;cASa"}
@@ -2,6 +2,7 @@
2
2
  /**
3
3
  * 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。
4
4
  *
5
+ * @remarks
5
6
  * 维护约定:每条本地覆写都要说明启用原因;可能造成大面积改动、采用成本或
6
7
  * 行为变化的规则使用 `[高影响]` 标记,并同步维护 `docs/rules-risk.zh.md`。
7
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"common.mjs","names":[],"sources":["../../src/rules/common.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。\n *\n * 维护约定:每条本地覆写都要说明启用原因;可能造成大面积改动、采用成本或\n * 行为变化的规则使用 `[高影响]` 标记,并同步维护 `docs/rules-risk.zh.md`。\n */\nexport const commonRules = {\n\t// 要求数组回调在所有可到达分支返回值,避免 map/filter 等调用静默产生 undefined。\n\t\"array-callback-return\": \"error\",\n\t// 浏览器弹窗通常不适合生产代码;使用 warn 允许原型调试,同时确保发布前能够被发现。\n\t\"no-alert\": \"warn\",\n\t// switch 的 case 不创建词法作用域;要求用花括号包裹声明,避免跨 case 冲突。\n\t\"no-case-declarations\": \"error\",\n\t// 禁止反斜杠续行字符串,优先使用可读性更好的模板字符串。\n\t\"no-multi-str\": \"error\",\n\t// with 会让标识符解析不可预测,并且在严格模式和 ESM 中不可用。\n\t\"no-with\": \"error\",\n\t// 允许用 `void promise` 明确忽略 Promise,但禁止在普通表达式中滥用 void。\n\t\"no-void\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowAsStatement: true,\n\t\t},\n\t],\n\t// 要求严格相等;保留 `value == null` 同时判断 null/undefined 的常用写法。\n\teqeqeq: [\"error\", \"always\", { null: \"ignore\" }],\n\t// 幂运算统一使用 **,减少 Math.pow 嵌套并保持现代语法风格。\n\t\"prefer-exponentiation-operator\": \"error\",\n\t// 使用 Object.hasOwn,避免对象覆盖或缺少 hasOwnProperty 时产生异常。\n\t\"prefer-object-has-own\": \"error\",\n\n\t// [可自动修复] 声明间顺序交给 import-x;这里只排序同一 import 的成员。\n\t\"sort-imports\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tignoreCase: false,\n\t\t\tignoreDeclarationSort: true,\n\t\t\tignoreMemberSort: false,\n\t\t\tmemberSyntaxSortOrder: [\"none\", \"all\", \"multiple\", \"single\"],\n\t\t\tallowSeparatedGroups: false,\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;AAQA,MAAa,cAAc;CAE1B,yBAAyB;CAEzB,YAAY;CAEZ,wBAAwB;CAExB,gBAAgB;CAEhB,WAAW;CAEX,WAAW,CACV,SACA,EACC,kBAAkB,KACnB,CACD;CAEA,QAAQ;EAAC;EAAS;EAAU,EAAE,MAAM,SAAS;CAAC;CAE9C,kCAAkC;CAElC,yBAAyB;CAGzB,gBAAgB,CACf,QACA;EACC,YAAY;EACZ,uBAAuB;EACvB,kBAAkB;EAClB,uBAAuB;GAAC;GAAQ;GAAO;GAAY;EAAQ;EAC3D,sBAAsB;CACvB,CACD;AACD"}
1
+ {"version":3,"file":"common.mjs","names":[],"sources":["../../src/rules/common.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。\n *\n * @remarks\n * 维护约定:每条本地覆写都要说明启用原因;可能造成大面积改动、采用成本或\n * 行为变化的规则使用 `[高影响]` 标记,并同步维护 `docs/rules-risk.zh.md`。\n */\nexport const commonRules = {\n\t// 要求数组回调在所有可到达分支返回值,避免 map/filter 等调用静默产生 undefined。\n\t\"array-callback-return\": \"error\",\n\t// 浏览器弹窗通常不适合生产代码;使用 warn 允许原型调试,同时确保发布前能够被发现。\n\t\"no-alert\": \"warn\",\n\t// switch 的 case 不创建词法作用域;要求用花括号包裹声明,避免跨 case 冲突。\n\t\"no-case-declarations\": \"error\",\n\t// 禁止反斜杠续行字符串,优先使用可读性更好的模板字符串。\n\t\"no-multi-str\": \"error\",\n\t// with 会让标识符解析不可预测,并且在严格模式和 ESM 中不可用。\n\t\"no-with\": \"error\",\n\t// 允许用 `void promise` 明确忽略 Promise,但禁止在普通表达式中滥用 void。\n\t\"no-void\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowAsStatement: true,\n\t\t},\n\t],\n\t// 要求严格相等;保留 `value == null` 同时判断 null/undefined 的常用写法。\n\teqeqeq: [\"error\", \"always\", { null: \"ignore\" }],\n\t// 幂运算统一使用 **,减少 Math.pow 嵌套并保持现代语法风格。\n\t\"prefer-exponentiation-operator\": \"error\",\n\t// 使用 Object.hasOwn,避免对象覆盖或缺少 hasOwnProperty 时产生异常。\n\t\"prefer-object-has-own\": \"error\",\n\n\t// [可自动修复] 声明间顺序交给 import-x;这里只排序同一 import 的成员。\n\t\"sort-imports\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tignoreCase: false,\n\t\t\tignoreDeclarationSort: true,\n\t\t\tignoreMemberSort: false,\n\t\t\tmemberSyntaxSortOrder: [\"none\", \"all\", \"multiple\", \"single\"],\n\t\t\tallowSeparatedGroups: false,\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,cAAc;CAE1B,yBAAyB;CAEzB,YAAY;CAEZ,wBAAwB;CAExB,gBAAgB;CAEhB,WAAW;CAEX,WAAW,CACV,SACA,EACC,kBAAkB,KACnB,CACD;CAEA,QAAQ;EAAC;EAAS;EAAU,EAAE,MAAM,SAAS;CAAC;CAE9C,kCAAkC;CAElC,yBAAyB;CAGzB,gBAAgB,CACf,QACA;EACC,YAAY;EACZ,uBAAuB;EACvB,kBAAkB;EAClB,uBAAuB;GAAC;GAAQ;GAAO;GAAY;EAAQ;EAC3D,sBAAsB;CACvB,CACD;AACD"}
@@ -1,5 +1,11 @@
1
1
  //#region src/rules/import.d.ts
2
- /** 默认启用的模块导入正确性与排序规则。 */
2
+ /**
3
+ * 默认启用的模块导入正确性与排序规则。
4
+ *
5
+ * @remarks
6
+ * 该记录补充 import-x 推荐预置,统一导入位置、重复导入及分组顺序。依赖项目 resolver
7
+ * 的静态导出分析默认关闭,避免共享配置误判路径别名或自定义模块解析方式。
8
+ */
3
9
  declare const importRules: {
4
10
  "import-x/first": "error";
5
11
  "import-x/no-duplicates": "error";
@@ -1 +1 @@
1
- {"version":3,"file":"import.d.mts","names":[],"sources":["../../src/rules/import.ts"],"mappings":";;cAGa"}
1
+ {"version":3,"file":"import.d.mts","names":[],"sources":["../../src/rules/import.ts"],"mappings":";;;;;;;;cASa"}
@@ -1,5 +1,11 @@
1
1
  //#region src/rules/import.ts
2
- /** 默认启用的模块导入正确性与排序规则。 */
2
+ /**
3
+ * 默认启用的模块导入正确性与排序规则。
4
+ *
5
+ * @remarks
6
+ * 该记录补充 import-x 推荐预置,统一导入位置、重复导入及分组顺序。依赖项目 resolver
7
+ * 的静态导出分析默认关闭,避免共享配置误判路径别名或自定义模块解析方式。
8
+ */
3
9
  const importRules = {
4
10
  "import-x/first": "error",
5
11
  "import-x/no-duplicates": "error",
@@ -1 +1 @@
1
- {"version":3,"file":"import.mjs","names":[],"sources":["../../src/rules/import.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/** 默认启用的模块导入正确性与排序规则。 */\nexport const importRules = {\n\t// import 必须位于其他语句之前,避免模块依赖散落在执行逻辑中。\n\t\"import-x/first\": \"error\",\n\t// 合并同一模块的重复 import,避免绑定分散或副作用被误读。\n\t\"import-x/no-duplicates\": \"error\",\n\t// [高影响][可自动修复] 按来源分组并排序;带副作用的裸 import 仅报告,人工移动前必须确认执行顺序。\n\t\"import-x/order\": [\n\t\t\"error\",\n\t\t{\n\t\t\tgroups: [\n\t\t\t\t// Node.js 内置模块\n\t\t\t\t\"builtin\",\n\t\t\t\t// 第三方依赖\n\t\t\t\t\"external\",\n\t\t\t\t// 项目内部别名模块\n\t\t\t\t\"internal\",\n\t\t\t\t// 父级目录模块\n\t\t\t\t\"parent\",\n\t\t\t\t// 同级目录模块\n\t\t\t\t\"sibling\",\n\t\t\t\t// 当前目录入口模块\n\t\t\t\t\"index\",\n\t\t\t\t// TypeScript import = require() 导入\n\t\t\t\t\"object\",\n\t\t\t\t// TypeScript 类型导入\n\t\t\t\t\"type\",\n\t\t\t\t// 无法识别分类的导入\n\t\t\t\t\"unknown\",\n\t\t\t],\n\t\t\t// 不同 import 分组之间必须保留一个空行\n\t\t\t\"newlines-between\": \"always\",\n\t\t\t// 同一分组内按照模块路径字母升序排列\n\t\t\talphabetize: {\n\t\t\t\torder: \"asc\",\n\t\t\t\tcaseInsensitive: true,\n\t\t\t},\n\t\t\t// 对没有赋值给变量的副作用导入进行排序检查\n\t\t\twarnOnUnassignedImports: true,\n\t\t},\n\t],\n\t// [默认关闭] Vite/TypeScript 别名由项目解析器校验,避免共享配置绑定特定 resolver。\n\t\"import-x/no-unresolved\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,namespace 导出的静态分析容易产生误报。\n\t\"import-x/namespace\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,默认导出的静态分析容易产生误报。\n\t\"import-x/default\": \"off\",\n\t// [默认关闭] 不限制同时存在默认导出与相近命名导出的模块 API 风格。\n\t\"import-x/no-named-as-default\": \"off\",\n\t// [默认关闭] 不限制通过默认导入对象访问同名属性的项目 API 风格。\n\t\"import-x/no-named-as-default-member\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,命名导出的静态分析容易产生误报。\n\t\"import-x/named\": \"off\",\n} satisfies RuleOptions;\n"],"mappings":";;AAGA,MAAa,cAAc;CAE1B,kBAAkB;CAElB,0BAA0B;CAE1B,kBAAkB,CACjB,SACA;EACC,QAAQ;GAEP;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;EACD;EAEA,oBAAoB;EAEpB,aAAa;GACZ,OAAO;GACP,iBAAiB;EAClB;EAEA,yBAAyB;CAC1B,CACD;CAEA,0BAA0B;CAE1B,sBAAsB;CAEtB,oBAAoB;CAEpB,gCAAgC;CAEhC,uCAAuC;CAEvC,kBAAkB;AACnB"}
1
+ {"version":3,"file":"import.mjs","names":[],"sources":["../../src/rules/import.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 默认启用的模块导入正确性与排序规则。\n *\n * @remarks\n * 该记录补充 import-x 推荐预置,统一导入位置、重复导入及分组顺序。依赖项目 resolver\n * 的静态导出分析默认关闭,避免共享配置误判路径别名或自定义模块解析方式。\n */\nexport const importRules = {\n\t// import 必须位于其他语句之前,避免模块依赖散落在执行逻辑中。\n\t\"import-x/first\": \"error\",\n\t// 合并同一模块的重复 import,避免绑定分散或副作用被误读。\n\t\"import-x/no-duplicates\": \"error\",\n\t// [高影响][可自动修复] 按来源分组并排序;带副作用的裸 import 仅报告,人工移动前必须确认执行顺序。\n\t\"import-x/order\": [\n\t\t\"error\",\n\t\t{\n\t\t\tgroups: [\n\t\t\t\t// Node.js 内置模块\n\t\t\t\t\"builtin\",\n\t\t\t\t// 第三方依赖\n\t\t\t\t\"external\",\n\t\t\t\t// 项目内部别名模块\n\t\t\t\t\"internal\",\n\t\t\t\t// 父级目录模块\n\t\t\t\t\"parent\",\n\t\t\t\t// 同级目录模块\n\t\t\t\t\"sibling\",\n\t\t\t\t// 当前目录入口模块\n\t\t\t\t\"index\",\n\t\t\t\t// TypeScript import = require() 导入\n\t\t\t\t\"object\",\n\t\t\t\t// TypeScript 类型导入\n\t\t\t\t\"type\",\n\t\t\t\t// 无法识别分类的导入\n\t\t\t\t\"unknown\",\n\t\t\t],\n\t\t\t// 不同 import 分组之间必须保留一个空行\n\t\t\t\"newlines-between\": \"always\",\n\t\t\t// 同一分组内按照模块路径字母升序排列\n\t\t\talphabetize: {\n\t\t\t\torder: \"asc\",\n\t\t\t\tcaseInsensitive: true,\n\t\t\t},\n\t\t\t// 对没有赋值给变量的副作用导入进行排序检查\n\t\t\twarnOnUnassignedImports: true,\n\t\t},\n\t],\n\t// [默认关闭] Vite/TypeScript 别名由项目解析器校验,避免共享配置绑定特定 resolver。\n\t\"import-x/no-unresolved\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,namespace 导出的静态分析容易产生误报。\n\t\"import-x/namespace\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,默认导出的静态分析容易产生误报。\n\t\"import-x/default\": \"off\",\n\t// [默认关闭] 不限制同时存在默认导出与相近命名导出的模块 API 风格。\n\t\"import-x/no-named-as-default\": \"off\",\n\t// [默认关闭] 不限制通过默认导入对象访问同名属性的项目 API 风格。\n\t\"import-x/no-named-as-default-member\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,命名导出的静态分析容易产生误报。\n\t\"import-x/named\": \"off\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,cAAc;CAE1B,kBAAkB;CAElB,0BAA0B;CAE1B,kBAAkB,CACjB,SACA;EACC,QAAQ;GAEP;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;EACD;EAEA,oBAAoB;EAEpB,aAAa;GACZ,OAAO;GACP,iBAAiB;EAClB;EAEA,yBAAyB;CAC1B,CACD;CAEA,0BAA0B;CAE1B,sBAAsB;CAEtB,oBAAoB;CAEpB,gCAAgC;CAEhC,uCAAuC;CAEvC,kBAAkB;AACnB"}
@@ -1,6 +1,8 @@
1
1
  //#region src/rules/javascript.d.ts
2
2
  /**
3
3
  * JavaScript 本地覆写规则。
4
+ *
5
+ * @remarks
4
6
  * 高影响规则的解释与关闭方式见 `docs/rules-risk.zh.md`。
5
7
  */
6
8
  declare const javascriptRules: {
@@ -1 +1 @@
1
- {"version":3,"file":"javascript.d.mts","names":[],"sources":["../../src/rules/javascript.ts"],"mappings":";;;;;cAMa"}
1
+ {"version":3,"file":"javascript.d.mts","names":[],"sources":["../../src/rules/javascript.ts"],"mappings":";;;;;;;cAQa"}
@@ -1,6 +1,8 @@
1
1
  //#region src/rules/javascript.ts
2
2
  /**
3
3
  * JavaScript 本地覆写规则。
4
+ *
5
+ * @remarks
4
6
  * 高影响规则的解释与关闭方式见 `docs/rules-risk.zh.md`。
5
7
  */
6
8
  const javascriptRules = {
@@ -1 +1 @@
1
- {"version":3,"file":"javascript.mjs","names":[],"sources":["../../src/rules/javascript.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * JavaScript 本地覆写规则。\n * 高影响规则的解释与关闭方式见 `docs/rules-risk.zh.md`。\n */\nexport const javascriptRules = {\n\t// 控制台调用在应用源码中需要人工确认;warn/error 仍可用于必要的诊断输出。\n\t\"no-console\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tallow: [\"warn\", \"error\"],\n\t\t},\n\t],\n\t// 防止调试断点进入发布代码并中断运行。\n\t\"no-debugger\": \"error\",\n\t// 禁止意外的恒定条件,但允许 while (true) 等有明确退出逻辑的循环。\n\t\"no-constant-condition\": [\n\t\t\"error\",\n\t\t{\n\t\t\tcheckLoops: false,\n\t\t},\n\t],\n\t// [高影响] 禁止标签语句;包含多层循环 labeled break/continue 的代码需先重构控制流。\n\t\"no-restricted-syntax\": [\"error\", \"LabeledStatement\"],\n\t// [高影响][可自动修复] 使用 let/const 替代 var;首次启用需复核循环闭包和声明提升行为。\n\t\"no-var\": \"error\",\n\t// 禁止无说明的空代码块;允许用于“忽略失败”语义的空 catch。\n\t\"no-empty\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowEmptyCatch: true,\n\t\t},\n\t],\n\t// 拒绝肉眼难以识别、可能导致解析差异的非常规空白字符。\n\t\"no-irregular-whitespace\": \"error\",\n\t// 变量和类先声明后使用;函数声明允许提升。warn 保留函数式组合和循环依赖重构空间。\n\t\"no-use-before-define\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tclasses: true,\n\t\t\tfunctions: false,\n\t\t\tvariables: true,\n\t\t},\n\t],\n\t// [可自动修复] 能保持引用不变的变量优先使用 const;读取发生在赋值前时不做不可靠判断。\n\t\"prefer-const\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tdestructuring: \"all\",\n\t\t\tignoreReadBeforeAssign: true,\n\t\t},\n\t],\n\t// [高影响][可自动修复] 优先箭头回调;批量修复后应复核 this/arguments 与函数名栈信息。\n\t\"prefer-arrow-callback\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowNamedFunctions: false,\n\t\t\tallowUnboundThis: true,\n\t\t},\n\t],\n\t// [可自动修复] 属性和值同名时使用对象简写,带引号键名不强制改写。\n\t\"object-shorthand\": [\n\t\t\"error\",\n\t\t\"always\",\n\t\t{\n\t\t\tignoreConstructors: false,\n\t\t\tavoidQuotes: true,\n\t\t},\n\t],\n\t// [高影响][可自动修复] 使用 ||=、&&=、??=;涉及 getter/Proxy 的代码应复核求值次数。\n\t\"logical-assignment-operators\": [\"error\", \"always\", { enforceForIfStatements: true }],\n\t// [可自动修复] 合并对象时优先展开语法,避免 Object.assign 的额外目标对象样板。\n\t\"prefer-object-spread\": \"error\",\n\t// 可变参数函数优先 rest 参数,避免依赖类数组 arguments;该规则只报告,不自动改写签名。\n\t\"prefer-rest-params\": \"error\",\n\t// 调用可迭代对象时优先 spread;该规则只报告,避免自动改变 apply 的 this 语义。\n\t\"prefer-spread\": \"error\",\n\t// [可自动修复] 字符串拼接优先模板字符串,便于阅读和多段插值。\n\t\"prefer-template\": \"error\",\n\t// 同一作用域禁止重复声明,避免后声明遮盖前声明。\n\t\"no-redeclare\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;AAMA,MAAa,kBAAkB;CAE9B,cAAc,CACb,QACA,EACC,OAAO,CAAC,QAAQ,OAAO,EACxB,CACD;CAEA,eAAe;CAEf,yBAAyB,CACxB,SACA,EACC,YAAY,MACb,CACD;CAEA,wBAAwB,CAAC,SAAS,kBAAkB;CAEpD,UAAU;CAEV,YAAY,CACX,SACA,EACC,iBAAiB,KAClB,CACD;CAEA,2BAA2B;CAE3B,wBAAwB,CACvB,QACA;EACC,SAAS;EACT,WAAW;EACX,WAAW;CACZ,CACD;CAEA,gBAAgB,CACf,QACA;EACC,eAAe;EACf,wBAAwB;CACzB,CACD;CAEA,yBAAyB,CACxB,SACA;EACC,qBAAqB;EACrB,kBAAkB;CACnB,CACD;CAEA,oBAAoB;EACnB;EACA;EACA;GACC,oBAAoB;GACpB,aAAa;EACd;CACD;CAEA,gCAAgC;EAAC;EAAS;EAAU,EAAE,wBAAwB,KAAK;CAAC;CAEpF,wBAAwB;CAExB,sBAAsB;CAEtB,iBAAiB;CAEjB,mBAAmB;CAEnB,gBAAgB;AACjB"}
1
+ {"version":3,"file":"javascript.mjs","names":[],"sources":["../../src/rules/javascript.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * JavaScript 本地覆写规则。\n *\n * @remarks\n * 高影响规则的解释与关闭方式见 `docs/rules-risk.zh.md`。\n */\nexport const javascriptRules = {\n\t// 控制台调用在应用源码中需要人工确认;warn/error 仍可用于必要的诊断输出。\n\t\"no-console\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tallow: [\"warn\", \"error\"],\n\t\t},\n\t],\n\t// 防止调试断点进入发布代码并中断运行。\n\t\"no-debugger\": \"error\",\n\t// 禁止意外的恒定条件,但允许 while (true) 等有明确退出逻辑的循环。\n\t\"no-constant-condition\": [\n\t\t\"error\",\n\t\t{\n\t\t\tcheckLoops: false,\n\t\t},\n\t],\n\t// [高影响] 禁止标签语句;包含多层循环 labeled break/continue 的代码需先重构控制流。\n\t\"no-restricted-syntax\": [\"error\", \"LabeledStatement\"],\n\t// [高影响][可自动修复] 使用 let/const 替代 var;首次启用需复核循环闭包和声明提升行为。\n\t\"no-var\": \"error\",\n\t// 禁止无说明的空代码块;允许用于“忽略失败”语义的空 catch。\n\t\"no-empty\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowEmptyCatch: true,\n\t\t},\n\t],\n\t// 拒绝肉眼难以识别、可能导致解析差异的非常规空白字符。\n\t\"no-irregular-whitespace\": \"error\",\n\t// 变量和类先声明后使用;函数声明允许提升。warn 保留函数式组合和循环依赖重构空间。\n\t\"no-use-before-define\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tclasses: true,\n\t\t\tfunctions: false,\n\t\t\tvariables: true,\n\t\t},\n\t],\n\t// [可自动修复] 能保持引用不变的变量优先使用 const;读取发生在赋值前时不做不可靠判断。\n\t\"prefer-const\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tdestructuring: \"all\",\n\t\t\tignoreReadBeforeAssign: true,\n\t\t},\n\t],\n\t// [高影响][可自动修复] 优先箭头回调;批量修复后应复核 this/arguments 与函数名栈信息。\n\t\"prefer-arrow-callback\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowNamedFunctions: false,\n\t\t\tallowUnboundThis: true,\n\t\t},\n\t],\n\t// [可自动修复] 属性和值同名时使用对象简写,带引号键名不强制改写。\n\t\"object-shorthand\": [\n\t\t\"error\",\n\t\t\"always\",\n\t\t{\n\t\t\tignoreConstructors: false,\n\t\t\tavoidQuotes: true,\n\t\t},\n\t],\n\t// [高影响][可自动修复] 使用 ||=、&&=、??=;涉及 getter/Proxy 的代码应复核求值次数。\n\t\"logical-assignment-operators\": [\"error\", \"always\", { enforceForIfStatements: true }],\n\t// [可自动修复] 合并对象时优先展开语法,避免 Object.assign 的额外目标对象样板。\n\t\"prefer-object-spread\": \"error\",\n\t// 可变参数函数优先 rest 参数,避免依赖类数组 arguments;该规则只报告,不自动改写签名。\n\t\"prefer-rest-params\": \"error\",\n\t// 调用可迭代对象时优先 spread;该规则只报告,避免自动改变 apply 的 this 语义。\n\t\"prefer-spread\": \"error\",\n\t// [可自动修复] 字符串拼接优先模板字符串,便于阅读和多段插值。\n\t\"prefer-template\": \"error\",\n\t// 同一作用域禁止重复声明,避免后声明遮盖前声明。\n\t\"no-redeclare\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;AAQA,MAAa,kBAAkB;CAE9B,cAAc,CACb,QACA,EACC,OAAO,CAAC,QAAQ,OAAO,EACxB,CACD;CAEA,eAAe;CAEf,yBAAyB,CACxB,SACA,EACC,YAAY,MACb,CACD;CAEA,wBAAwB,CAAC,SAAS,kBAAkB;CAEpD,UAAU;CAEV,YAAY,CACX,SACA,EACC,iBAAiB,KAClB,CACD;CAEA,2BAA2B;CAE3B,wBAAwB,CACvB,QACA;EACC,SAAS;EACT,WAAW;EACX,WAAW;CACZ,CACD;CAEA,gBAAgB,CACf,QACA;EACC,eAAe;EACf,wBAAwB;CACzB,CACD;CAEA,yBAAyB,CACxB,SACA;EACC,qBAAqB;EACrB,kBAAkB;CACnB,CACD;CAEA,oBAAoB;EACnB;EACA;EACA;GACC,oBAAoB;GACpB,aAAa;EACd;CACD;CAEA,gCAAgC;EAAC;EAAS;EAAU,EAAE,wBAAwB,KAAK;CAAC;CAEpF,wBAAwB;CAExB,sBAAsB;CAEtB,iBAAiB;CAEjB,mBAAmB;CAEnB,gBAAgB;AACjB"}