@fast-china/eslint-config 2.0.9 → 2.1.0
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.
- package/CHANGELOG.md +38 -0
- package/CONTRIBUTING.md +8 -7
- package/README.md +108 -236
- package/README.zh.md +105 -231
- package/SECURITY.md +4 -4
- package/dist/configs/angular.d.mts +6 -6
- package/dist/configs/angular.mjs +1 -1
- package/dist/configs/angular.mjs.map +1 -1
- package/dist/configs/common.d.mts +2 -1
- package/dist/configs/common.mjs.map +1 -1
- package/dist/configs/environment.d.mts +21 -11
- package/dist/configs/environment.mjs +25 -5
- package/dist/configs/environment.mjs.map +1 -1
- package/dist/configs/ignores.d.mts +3 -2
- package/dist/configs/ignores.mjs +4 -3
- package/dist/configs/ignores.mjs.map +1 -1
- package/dist/configs/import.d.mts +2 -1
- package/dist/configs/import.mjs.map +1 -1
- package/dist/configs/index.d.mts +5 -4
- package/dist/configs/index.mjs +3 -2
- package/dist/configs/javascript.d.mts +2 -1
- package/dist/configs/javascript.mjs.map +1 -1
- package/dist/configs/json.d.mts +5 -3
- package/dist/configs/json.mjs +5 -4
- package/dist/configs/json.mjs.map +1 -1
- package/dist/configs/lodash.d.mts +2 -1
- package/dist/configs/lodash.mjs.map +1 -1
- package/dist/configs/markdown.d.mts +2 -1
- package/dist/configs/markdown.mjs.map +1 -1
- package/dist/configs/prettier.d.mts +2 -1
- package/dist/configs/prettier.mjs +4 -1
- package/dist/configs/prettier.mjs.map +1 -1
- package/dist/configs/react.d.mts +7 -44
- package/dist/configs/react.mjs +7 -8
- package/dist/configs/react.mjs.map +1 -1
- package/dist/configs/regexp.d.mts +4 -4
- package/dist/configs/regexp.mjs +5 -4
- package/dist/configs/regexp.mjs.map +1 -1
- package/dist/configs/sort-package.d.mts +4 -3
- package/dist/configs/sort-package.mjs +2 -2
- package/dist/configs/sort-package.mjs.map +1 -1
- package/dist/configs/sort-tsconfig.d.mts +4 -2
- package/dist/configs/sort-tsconfig.mjs +2 -1
- package/dist/configs/sort-tsconfig.mjs.map +1 -1
- package/dist/configs/typescript.d.mts +9 -56
- package/dist/configs/typescript.mjs +20 -29
- package/dist/configs/typescript.mjs.map +1 -1
- package/dist/configs/uniapp.d.mts +17 -0
- package/dist/configs/uniapp.mjs +30 -0
- package/dist/configs/uniapp.mjs.map +1 -0
- package/dist/configs/vue.d.mts +5 -38
- package/dist/configs/vue.mjs +25 -35
- package/dist/configs/vue.mjs.map +1 -1
- package/dist/constants/index.d.mts +33 -1
- package/dist/constants/index.mjs +33 -1
- package/dist/constants/index.mjs.map +1 -1
- package/dist/index.d.mts +41 -208
- package/dist/index.mjs +58 -100
- package/dist/index.mjs.map +1 -1
- package/dist/rules/angular.d.mts +1 -1
- package/dist/rules/angular.mjs +1 -1
- package/dist/rules/angular.mjs.map +1 -1
- package/dist/rules/common.d.mts +2 -2
- package/dist/rules/common.mjs +2 -2
- package/dist/rules/common.mjs.map +1 -1
- package/dist/rules/import.mjs.map +1 -1
- package/dist/rules/index.d.mts +2 -1
- package/dist/rules/index.mjs +2 -1
- package/dist/rules/javascript.d.mts +10 -6
- package/dist/rules/javascript.mjs +12 -6
- package/dist/rules/javascript.mjs.map +1 -1
- package/dist/rules/react.d.mts +2 -3
- package/dist/rules/react.mjs +2 -3
- package/dist/rules/react.mjs.map +1 -1
- package/dist/rules/regexp.d.mts +38 -0
- package/dist/rules/regexp.mjs +39 -0
- package/dist/rules/regexp.mjs.map +1 -0
- package/dist/rules/sort-package.d.mts +1 -1
- package/dist/rules/sort-package.mjs +1 -1
- package/dist/rules/sort-package.mjs.map +1 -1
- package/dist/rules/sort-tsconfig.d.mts +1 -1
- package/dist/rules/sort-tsconfig.mjs +1 -1
- package/dist/rules/sort-tsconfig.mjs.map +1 -1
- package/dist/rules/typescript.d.mts +11 -3
- package/dist/rules/typescript.mjs +10 -4
- package/dist/rules/typescript.mjs.map +1 -1
- package/dist/rules/vue.d.mts +8 -2
- package/dist/rules/vue.mjs +8 -2
- package/dist/rules/vue.mjs.map +1 -1
- package/docs/engineering-audit.zh.md +53 -77
- package/docs/rules-risk.md +104 -101
- package/docs/rules-risk.zh.md +104 -105
- package/package.json +3 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { AngularConfigOptions } from "./configs/angular.mjs";
|
|
2
1
|
import { RuntimeEnvironment } from "./configs/environment.mjs";
|
|
3
|
-
import { ReactConfigOptions } from "./configs/react.mjs";
|
|
4
|
-
import { TypeScriptConfigOptions } from "./configs/typescript.mjs";
|
|
5
2
|
import { RuleOptions } from "./typegen.mjs";
|
|
6
3
|
import { Config } from "eslint/config";
|
|
7
4
|
import { Linter } from "eslint";
|
|
@@ -19,237 +16,73 @@ type RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<
|
|
|
19
16
|
*/
|
|
20
17
|
declare const defineRules: <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>) => Rules & Linter.RulesRecord;
|
|
21
18
|
/**
|
|
22
|
-
*
|
|
19
|
+
* 根配置工厂唯一保留的项目选项。
|
|
23
20
|
*
|
|
24
21
|
* @remarks
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* `rules` 会在全部内置规则和 Prettier 兼容层之后应用;`fastConfig()` 的其余位置参数
|
|
31
|
-
* 又会排在 `rules` 之后。因此,常规的全项目规则放在 `rules` 中,按文件覆盖或需要最高
|
|
32
|
-
* 优先级的配置应通过其余位置参数传入。
|
|
33
|
-
*
|
|
34
|
-
* 这些选项只负责生成 ESLint 配置,不会修改 TypeScript、Vite 或各框架的构建配置。
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```ts
|
|
38
|
-
* export default fastConfig({
|
|
39
|
-
* environment: "browser",
|
|
40
|
-
* react: { version: "detect" },
|
|
41
|
-
* typescript: { typeChecked: true },
|
|
42
|
-
* vue: false,
|
|
43
|
-
* });
|
|
44
|
-
* ```
|
|
22
|
+
* 根入口固定启用 `.gitignore`、JavaScript、类型感知 TypeScript、Vue 3、UniApp、Import、
|
|
23
|
+
* RegExp、JSON、清单排序和 Prettier 兼容层。项目级规则、globals 与 ignores 应通过
|
|
24
|
+
* `fastConfig()` 的后置 Flat Config 参数声明。React、Angular、Markdown 与其他可选能力
|
|
25
|
+
* 应从 `@fast-china/eslint-config/configs` 显式组合。
|
|
45
26
|
*/
|
|
46
27
|
interface FastConfigOptions {
|
|
47
28
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* `true` 使用 Angular 默认选项;传入对象可控制内联模板与模板无障碍规则。
|
|
51
|
-
* 启用后会检查 Angular TypeScript 源码、外部 `.html` 模板,并默认提取
|
|
52
|
-
* `@Component()` 中的内联模板。Angular 依赖 TypeScript 解析能力,因此不能与
|
|
53
|
-
* `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。
|
|
54
|
-
*
|
|
55
|
-
* 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。
|
|
56
|
-
* @defaultValue `false`
|
|
57
|
-
*/
|
|
58
|
-
angular?: boolean | AngularConfigOptions;
|
|
59
|
-
/**
|
|
60
|
-
* 应用代码实际运行的环境,用于声明 ESLint 可识别的运行时全局变量。
|
|
29
|
+
* 应用代码实际运行的环境。
|
|
61
30
|
*
|
|
62
|
-
* - `"browser"
|
|
63
|
-
* - `"node"`:提供 Node.js
|
|
64
|
-
* - `"universal"`:同时提供浏览器与 Node.js
|
|
31
|
+
* - `"browser"`:提供浏览器全局变量。
|
|
32
|
+
* - `"node"`:提供 Node.js 全局变量。
|
|
33
|
+
* - `"universal"`:同时提供浏览器与 Node.js 全局变量。
|
|
65
34
|
*
|
|
66
|
-
*
|
|
67
|
-
* 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js
|
|
68
|
-
* 全局变量。此选项不改变 JavaScript 编译目标或打包平台。
|
|
35
|
+
* 配置文件、脚本、测试和 CLI 文件无论选择何种环境都会单独获得 Node.js globals。
|
|
69
36
|
* @defaultValue `"browser"`
|
|
70
37
|
*/
|
|
71
38
|
environment?: RuntimeEnvironment;
|
|
72
|
-
/**
|
|
73
|
-
* 追加到应用代码运行环境中的项目级全局变量。
|
|
74
|
-
*
|
|
75
|
-
* 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循
|
|
76
|
-
* ESLint `Linter.Globals`,可以声明为 `"readonly"`、`"writable"` 或 `"off"`。
|
|
77
|
-
* 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。
|
|
78
|
-
* @defaultValue `undefined`
|
|
79
|
-
*/
|
|
80
|
-
globals?: Linter.Globals;
|
|
81
|
-
/**
|
|
82
|
-
* 是否读取运行 ESLint 的项目根目录中的 `.gitignore` 并转换为全局忽略规则。
|
|
83
|
-
*
|
|
84
|
-
* 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、
|
|
85
|
-
* 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。
|
|
86
|
-
* @defaultValue `true`
|
|
87
|
-
*/
|
|
88
|
-
gitignore?: boolean;
|
|
89
|
-
/**
|
|
90
|
-
* 追加到内置全局忽略集合末尾的 ESLint glob 模式。
|
|
91
|
-
*
|
|
92
|
-
* 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,
|
|
93
|
-
* 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。
|
|
94
|
-
* @defaultValue `[]`
|
|
95
|
-
*/
|
|
96
|
-
ignores?: readonly string[];
|
|
97
|
-
/**
|
|
98
|
-
* 是否为全部已启用代码文件加载 `eslint-plugin-import-x` 推荐规则和本库覆盖规则。
|
|
99
|
-
*
|
|
100
|
-
* 该片段检查常见的 ESM 导入导出问题,但共享配置不会猜测项目的路径别名或自定义
|
|
101
|
-
* resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些
|
|
102
|
-
* 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响
|
|
103
|
-
* JavaScript 或 TypeScript 的基础语法检查。
|
|
104
|
-
* @defaultValue `true`
|
|
105
|
-
*/
|
|
106
|
-
imports?: boolean;
|
|
107
|
-
/**
|
|
108
|
-
* 是否让工厂接管 JavaScript、CommonJS、ES Module 与 JSX 文件。
|
|
109
|
-
*
|
|
110
|
-
* 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、
|
|
111
|
-
* 环境全局变量、import、regexp 或 React 的 JavaScript 配置范围,但不会影响
|
|
112
|
-
* 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。
|
|
113
|
-
* @defaultValue `true`
|
|
114
|
-
*/
|
|
115
|
-
javascript?: boolean;
|
|
116
|
-
/**
|
|
117
|
-
* 是否检查 JSON、JSONC 与 JSON5 文件,并为三种方言分别使用兼容的推荐规则。
|
|
118
|
-
*
|
|
119
|
-
* 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应
|
|
120
|
-
* 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。
|
|
121
|
-
* @defaultValue `true`
|
|
122
|
-
*/
|
|
123
|
-
json?: boolean;
|
|
124
|
-
/**
|
|
125
|
-
* 是否使用 `@eslint/markdown` 推荐配置检查 `.md` 文档的结构和 Markdown 语法。
|
|
126
|
-
*
|
|
127
|
-
* 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架
|
|
128
|
-
* 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。
|
|
129
|
-
* @defaultValue `false`
|
|
130
|
-
*/
|
|
131
|
-
markdown?: boolean;
|
|
132
|
-
/**
|
|
133
|
-
* 是否加载 `eslint-config-prettier`,关闭与 Prettier 冲突的 ESLint 格式规则。
|
|
134
|
-
*
|
|
135
|
-
* 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装
|
|
136
|
-
* 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地
|
|
137
|
-
* 重新启用某条格式规则。
|
|
138
|
-
* @defaultValue `true`
|
|
139
|
-
*/
|
|
140
|
-
prettier?: boolean;
|
|
141
|
-
/**
|
|
142
|
-
* 是否为全部已启用代码文件加载 `eslint-plugin-regexp` 推荐规则。
|
|
143
|
-
*
|
|
144
|
-
* 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则
|
|
145
|
-
* 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。
|
|
146
|
-
* @defaultValue `true`
|
|
147
|
-
*/
|
|
148
|
-
regexp?: boolean;
|
|
149
|
-
/**
|
|
150
|
-
* 是否启用 React、JSX/TSX 与 Hooks 正确性规则。
|
|
151
|
-
*
|
|
152
|
-
* `true` 使用默认 React 设置;传入对象可指定 React 版本、兼容 JSX 运行时包和多态
|
|
153
|
-
* 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言
|
|
154
|
-
* 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的
|
|
155
|
-
* `importSource`,但此选项不会修改 JSX 编译器或打包器设置。
|
|
156
|
-
* @defaultValue `false`
|
|
157
|
-
*/
|
|
158
|
-
react?: boolean | ReactConfigOptions;
|
|
159
|
-
/**
|
|
160
|
-
* 应用于全部已启用 JavaScript、TypeScript 和 Vue 文件的项目级规则记录。
|
|
161
|
-
*
|
|
162
|
-
* `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在
|
|
163
|
-
* 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。
|
|
164
|
-
* JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。
|
|
165
|
-
* @defaultValue `undefined`
|
|
166
|
-
*/
|
|
167
|
-
rules?: RuleOptions;
|
|
168
|
-
/**
|
|
169
|
-
* 是否启用 `package.json` 顶层字段的固定顺序规则。
|
|
170
|
-
*
|
|
171
|
-
* 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的
|
|
172
|
-
* `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。
|
|
173
|
-
* 启用此项会同时加载 JSON 解析配置。
|
|
174
|
-
* @defaultValue `false`
|
|
175
|
-
*/
|
|
176
|
-
sortPackageJson?: boolean;
|
|
177
|
-
/**
|
|
178
|
-
* 是否按 TypeScript 配置主题顺序整理 `tsconfig.json` 与 `tsconfig.*.json`。
|
|
179
|
-
*
|
|
180
|
-
* 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生
|
|
181
|
-
* 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。
|
|
182
|
-
* @defaultValue `false`
|
|
183
|
-
*/
|
|
184
|
-
sortTsconfig?: boolean;
|
|
185
|
-
/**
|
|
186
|
-
* 是否让工厂接管 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件。
|
|
187
|
-
*
|
|
188
|
-
* `true` 使用无需类型信息的 TypeScript 推荐与风格预置;传入对象可进一步启用
|
|
189
|
-
* `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的
|
|
190
|
-
* TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript
|
|
191
|
-
* 脚本解析,并且不能再启用 Angular。
|
|
192
|
-
* @defaultValue `true`
|
|
193
|
-
*/
|
|
194
|
-
typescript?: boolean | TypeScriptConfigOptions;
|
|
195
|
-
/**
|
|
196
|
-
* 是否让工厂接管 Vue 3 `.vue` 单文件组件。
|
|
197
|
-
*
|
|
198
|
-
* 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随
|
|
199
|
-
* `typescript`:TypeScript 开启时同时支持 `<script lang="ts">` 和类型感知选项,
|
|
200
|
-
* 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。
|
|
201
|
-
* @defaultValue `true`
|
|
202
|
-
*/
|
|
203
|
-
vue?: boolean;
|
|
204
39
|
}
|
|
205
40
|
/**
|
|
206
|
-
*
|
|
41
|
+
* 创建不绑定前端框架的固定基础配置。
|
|
207
42
|
*
|
|
208
43
|
* @remarks
|
|
209
|
-
*
|
|
210
|
-
*
|
|
44
|
+
* 默认包含 `.gitignore`、JavaScript、类型感知 TypeScript、Import、RegExp、JSON、
|
|
45
|
+
* `package.json`/`tsconfig*.json` 排序、Prettier 兼容层和 Node.js 工程文件覆写。
|
|
46
|
+
* React、Angular、Markdown 与 Lodash 等能力由调用方从 `./configs` 子路径继续组合。
|
|
47
|
+
*
|
|
48
|
+
* @param options - 应用代码的运行环境。
|
|
49
|
+
* @returns 可作为 React、Angular、Node.js 或 SDK 项目基础的 Flat Config 数组。
|
|
211
50
|
*/
|
|
212
|
-
declare const
|
|
213
|
-
readonly angular: false;
|
|
214
|
-
readonly environment: "browser";
|
|
215
|
-
readonly gitignore: true;
|
|
216
|
-
readonly imports: true;
|
|
217
|
-
readonly javascript: true;
|
|
218
|
-
readonly json: true;
|
|
219
|
-
readonly markdown: false;
|
|
220
|
-
readonly prettier: true;
|
|
221
|
-
readonly react: false;
|
|
222
|
-
readonly regexp: true;
|
|
223
|
-
readonly sortPackageJson: false;
|
|
224
|
-
readonly sortTsconfig: false;
|
|
225
|
-
readonly typescript: true;
|
|
226
|
-
readonly vue: true;
|
|
227
|
-
}>;
|
|
51
|
+
declare const createBaseConfigs: ({ environment }?: FastConfigOptions) => Config[];
|
|
228
52
|
/**
|
|
229
|
-
*
|
|
53
|
+
* 创建固定的 Vue 3、TypeScript 与 UniApp ESLint Flat Config。
|
|
230
54
|
*
|
|
231
55
|
* @remarks
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。
|
|
56
|
+
* 除运行环境外,根入口不提供能力启停开关。TypeScript 和 Vue 始终使用
|
|
57
|
+
* `recommendedTypeChecked` 与 Project Service;被检查文件必须属于可发现的 tsconfig。
|
|
58
|
+
* 额外配置会放在全部内置片段之后,因此可以覆盖项目规则、globals、ignores 或解析器选项。
|
|
236
59
|
*
|
|
237
|
-
* @param options -
|
|
238
|
-
* @param overrides - 追加到全部内置片段之后的 ESLint Flat Config
|
|
239
|
-
* @returns
|
|
240
|
-
* @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。
|
|
60
|
+
* @param options - 应用代码的运行环境。
|
|
61
|
+
* @param overrides - 追加到全部内置片段之后的 ESLint Flat Config。
|
|
62
|
+
* @returns 可直接导出给 ESLint 的 Flat Config 数组。
|
|
241
63
|
*
|
|
242
64
|
* @example
|
|
243
65
|
* ```ts
|
|
244
|
-
* import fastConfig from "@fast-china/eslint-config";
|
|
66
|
+
* import { defineRules, fastConfig } from "@fast-china/eslint-config";
|
|
245
67
|
*
|
|
246
68
|
* export default fastConfig(
|
|
247
|
-
* {
|
|
248
|
-
* {
|
|
69
|
+
* { environment: "browser" },
|
|
70
|
+
* {
|
|
71
|
+
* files: ["src/generated/*.ts"],
|
|
72
|
+
* rules: defineRules({ "@typescript-eslint/no-unused-vars": "off" }),
|
|
73
|
+
* },
|
|
249
74
|
* );
|
|
250
75
|
* ```
|
|
251
76
|
*/
|
|
252
|
-
declare const fastConfig: (
|
|
77
|
+
declare const fastConfig: ({ environment }?: FastConfigOptions, ...overrides: Config[]) => Config[];
|
|
78
|
+
/**
|
|
79
|
+
* 可直接导出或展开的默认 ESLint Flat Config。
|
|
80
|
+
*
|
|
81
|
+
* @remarks
|
|
82
|
+
* 默认使用浏览器环境。需要切换运行环境或追加项目覆写时,请使用具名导出的
|
|
83
|
+
* {@link fastConfig} 工厂。
|
|
84
|
+
*/
|
|
85
|
+
declare const fastChina: Config[];
|
|
253
86
|
//#endregion
|
|
254
|
-
export { FastConfigOptions, type RuleOptions,
|
|
87
|
+
export { FastConfigOptions, type RuleOptions, createBaseConfigs, fastChina as default, defineRules, fastConfig };
|
|
255
88
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
import { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT,
|
|
2
|
-
import { createAngularConfigs } from "./configs/angular.mjs";
|
|
1
|
+
import { GLOBS_CODE, GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT, GLOB_NVUE } from "./constants/index.mjs";
|
|
3
2
|
import { createCommonConfigs } from "./configs/common.mjs";
|
|
4
|
-
import { createEnvironmentConfigs } from "./configs/environment.mjs";
|
|
3
|
+
import { createEnvironmentConfigs, createNodeToolingConfigs } from "./configs/environment.mjs";
|
|
5
4
|
import { createGitignoreConfigs, createGlobalIgnores } from "./configs/ignores.mjs";
|
|
6
5
|
import { createImportConfigs } from "./configs/import.mjs";
|
|
7
6
|
import { createJavaScriptConfigs } from "./configs/javascript.mjs";
|
|
8
7
|
import { createJsonConfigs } from "./configs/json.mjs";
|
|
9
|
-
import { createMarkdownConfigs } from "./configs/markdown.mjs";
|
|
10
8
|
import { createPrettierConfigs } from "./configs/prettier.mjs";
|
|
11
|
-
import { createReactConfigs } from "./configs/react.mjs";
|
|
12
9
|
import { createRegexpConfigs } from "./configs/regexp.mjs";
|
|
13
10
|
import { createPackageJsonSortConfigs } from "./configs/sort-package.mjs";
|
|
14
11
|
import { createTsconfigSortConfigs } from "./configs/sort-tsconfig.mjs";
|
|
15
12
|
import { createTypeScriptConfigs } from "./configs/typescript.mjs";
|
|
13
|
+
import { createUniAppConfigs } from "./configs/uniapp.mjs";
|
|
16
14
|
import { createVueConfigs } from "./configs/vue.mjs";
|
|
17
15
|
import { defineConfig } from "eslint/config";
|
|
18
16
|
//#region src/index.ts
|
|
19
17
|
/**
|
|
20
|
-
* 根入口提供面向 Vue 3
|
|
18
|
+
* 根入口提供面向 Vue 3、TypeScript 与 UniApp 浏览器项目的固定 ESLint 配置。
|
|
21
19
|
*
|
|
22
20
|
* 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。
|
|
23
21
|
*
|
|
@@ -34,116 +32,76 @@ import { defineConfig } from "eslint/config";
|
|
|
34
32
|
* @returns 原始规则记录。返回值同时兼容 ESLint 的通用 `RulesRecord` 类型。
|
|
35
33
|
*/
|
|
36
34
|
const defineRules = (rules) => rules;
|
|
35
|
+
const SCRIPT_FILES = [...GLOBS_JAVASCRIPT, ...GLOBS_TYPESCRIPT];
|
|
36
|
+
const VUE_PROJECT_FILES = [...GLOBS_CODE, GLOB_NVUE];
|
|
37
|
+
const createProjectConfigs = (environment, codeFiles, frameworkConfigs = []) => defineConfig([
|
|
38
|
+
...createGlobalIgnores(),
|
|
39
|
+
...createGitignoreConfigs(),
|
|
40
|
+
...createEnvironmentConfigs({
|
|
41
|
+
environment,
|
|
42
|
+
files: codeFiles,
|
|
43
|
+
nodeFiles: SCRIPT_FILES
|
|
44
|
+
}),
|
|
45
|
+
...createCommonConfigs(codeFiles),
|
|
46
|
+
...createJavaScriptConfigs(),
|
|
47
|
+
...createImportConfigs(codeFiles),
|
|
48
|
+
...createRegexpConfigs(codeFiles),
|
|
49
|
+
...createTypeScriptConfigs(),
|
|
50
|
+
...createJsonConfigs(),
|
|
51
|
+
...createPackageJsonSortConfigs(),
|
|
52
|
+
...createTsconfigSortConfigs(),
|
|
53
|
+
...frameworkConfigs,
|
|
54
|
+
...createPrettierConfigs(),
|
|
55
|
+
...createNodeToolingConfigs(SCRIPT_FILES)
|
|
56
|
+
]);
|
|
37
57
|
/**
|
|
38
|
-
*
|
|
58
|
+
* 创建不绑定前端框架的固定基础配置。
|
|
39
59
|
*
|
|
40
60
|
* @remarks
|
|
41
|
-
*
|
|
42
|
-
*
|
|
61
|
+
* 默认包含 `.gitignore`、JavaScript、类型感知 TypeScript、Import、RegExp、JSON、
|
|
62
|
+
* `package.json`/`tsconfig*.json` 排序、Prettier 兼容层和 Node.js 工程文件覆写。
|
|
63
|
+
* React、Angular、Markdown 与 Lodash 等能力由调用方从 `./configs` 子路径继续组合。
|
|
64
|
+
*
|
|
65
|
+
* @param options - 应用代码的运行环境。
|
|
66
|
+
* @returns 可作为 React、Angular、Node.js 或 SDK 项目基础的 Flat Config 数组。
|
|
43
67
|
*/
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
environment: "browser",
|
|
47
|
-
gitignore: true,
|
|
48
|
-
imports: true,
|
|
49
|
-
javascript: true,
|
|
50
|
-
json: true,
|
|
51
|
-
markdown: false,
|
|
52
|
-
prettier: true,
|
|
53
|
-
react: false,
|
|
54
|
-
regexp: true,
|
|
55
|
-
sortPackageJson: false,
|
|
56
|
-
sortTsconfig: false,
|
|
57
|
-
typescript: true,
|
|
58
|
-
vue: true
|
|
59
|
-
});
|
|
68
|
+
const createBaseConfigs = ({ environment = "browser" } = {}) => createProjectConfigs(environment, SCRIPT_FILES);
|
|
69
|
+
const createVueProjectConfigs = ({ environment = "browser" } = {}) => createProjectConfigs(environment, VUE_PROJECT_FILES, [...createVueConfigs(), ...createUniAppConfigs(VUE_PROJECT_FILES)]);
|
|
60
70
|
/**
|
|
61
|
-
*
|
|
71
|
+
* 创建固定的 Vue 3、TypeScript 与 UniApp ESLint Flat Config。
|
|
62
72
|
*
|
|
63
73
|
* @remarks
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。
|
|
74
|
+
* 除运行环境外,根入口不提供能力启停开关。TypeScript 和 Vue 始终使用
|
|
75
|
+
* `recommendedTypeChecked` 与 Project Service;被检查文件必须属于可发现的 tsconfig。
|
|
76
|
+
* 额外配置会放在全部内置片段之后,因此可以覆盖项目规则、globals、ignores 或解析器选项。
|
|
68
77
|
*
|
|
69
|
-
* @param options -
|
|
70
|
-
* @param overrides - 追加到全部内置片段之后的 ESLint Flat Config
|
|
71
|
-
* @returns
|
|
72
|
-
* @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。
|
|
78
|
+
* @param options - 应用代码的运行环境。
|
|
79
|
+
* @param overrides - 追加到全部内置片段之后的 ESLint Flat Config。
|
|
80
|
+
* @returns 可直接导出给 ESLint 的 Flat Config 数组。
|
|
73
81
|
*
|
|
74
82
|
* @example
|
|
75
83
|
* ```ts
|
|
76
|
-
* import fastConfig from "@fast-china/eslint-config";
|
|
84
|
+
* import { defineRules, fastConfig } from "@fast-china/eslint-config";
|
|
77
85
|
*
|
|
78
86
|
* export default fastConfig(
|
|
79
|
-
* {
|
|
80
|
-
* {
|
|
87
|
+
* { environment: "browser" },
|
|
88
|
+
* {
|
|
89
|
+
* files: ["src/generated/*.ts"],
|
|
90
|
+
* rules: defineRules({ "@typescript-eslint/no-unused-vars": "off" }),
|
|
91
|
+
* },
|
|
81
92
|
* );
|
|
82
93
|
* ```
|
|
83
94
|
*/
|
|
84
|
-
const fastConfig = (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const react = options.react ?? defaultConfigOptions.react;
|
|
94
|
-
const regexp = options.regexp ?? defaultConfigOptions.regexp;
|
|
95
|
-
const sortPackageJson = options.sortPackageJson ?? defaultConfigOptions.sortPackageJson;
|
|
96
|
-
const sortTsconfig = options.sortTsconfig ?? defaultConfigOptions.sortTsconfig;
|
|
97
|
-
const typescript = options.typescript ?? defaultConfigOptions.typescript;
|
|
98
|
-
const vue = options.vue ?? defaultConfigOptions.vue;
|
|
99
|
-
const typeScriptEnabled = typescript !== false;
|
|
100
|
-
const typeScriptOptions = typeof typescript === "object" ? typescript : {};
|
|
101
|
-
const angularEnabled = angular !== false;
|
|
102
|
-
const angularOptions = typeof angular === "object" ? angular : {};
|
|
103
|
-
const reactEnabled = react !== false;
|
|
104
|
-
const reactOptions = typeof react === "object" ? react : {};
|
|
105
|
-
if (angularEnabled && !typeScriptEnabled) throw new TypeError("Angular support requires TypeScript. Remove `typescript: false` or disable `angular`.");
|
|
106
|
-
const projectRules = options.rules;
|
|
107
|
-
const scriptFiles = [...javascript ? GLOBS_JAVASCRIPT : [], ...typeScriptEnabled ? GLOBS_TYPESCRIPT : []];
|
|
108
|
-
const codeFiles = [...scriptFiles, ...vue ? [GLOB_VUE] : []];
|
|
109
|
-
const jsonEnabled = json || sortPackageJson || sortTsconfig;
|
|
110
|
-
return defineConfig([
|
|
111
|
-
...createGlobalIgnores(options.ignores),
|
|
112
|
-
...gitignore ? createGitignoreConfigs() : [],
|
|
113
|
-
...codeFiles.length ? [...createEnvironmentConfigs({
|
|
114
|
-
environment,
|
|
115
|
-
files: codeFiles,
|
|
116
|
-
globals: options.globals,
|
|
117
|
-
nodeFiles: scriptFiles
|
|
118
|
-
}), ...createCommonConfigs(codeFiles)] : [],
|
|
119
|
-
...javascript ? createJavaScriptConfigs() : [],
|
|
120
|
-
...imports && codeFiles.length ? createImportConfigs(codeFiles) : [],
|
|
121
|
-
...regexp && codeFiles.length ? createRegexpConfigs(codeFiles) : [],
|
|
122
|
-
...typeScriptEnabled ? createTypeScriptConfigs(typeScriptOptions) : [],
|
|
123
|
-
...jsonEnabled ? createJsonConfigs() : [],
|
|
124
|
-
...sortPackageJson ? createPackageJsonSortConfigs() : [],
|
|
125
|
-
...sortTsconfig ? createTsconfigSortConfigs() : [],
|
|
126
|
-
...vue ? createVueConfigs({
|
|
127
|
-
typescript: typeScriptEnabled,
|
|
128
|
-
typescriptOptions: typeScriptOptions
|
|
129
|
-
}) : [],
|
|
130
|
-
...reactEnabled ? createReactConfigs(reactOptions, {
|
|
131
|
-
javascript,
|
|
132
|
-
typeChecked: typeScriptOptions.typeChecked ?? false,
|
|
133
|
-
typescript: typeScriptEnabled
|
|
134
|
-
}) : [],
|
|
135
|
-
...angularEnabled ? createAngularConfigs(angularOptions) : [],
|
|
136
|
-
...markdown ? createMarkdownConfigs() : [],
|
|
137
|
-
...prettier ? createPrettierConfigs() : [],
|
|
138
|
-
...projectRules && codeFiles.length ? [{
|
|
139
|
-
name: "@fast-china/project/rules",
|
|
140
|
-
files: codeFiles,
|
|
141
|
-
rules: projectRules
|
|
142
|
-
}] : [],
|
|
143
|
-
...overrides
|
|
144
|
-
]);
|
|
145
|
-
};
|
|
95
|
+
const fastConfig = ({ environment = "browser" } = {}, ...overrides) => defineConfig([...createVueProjectConfigs({ environment }), ...overrides]);
|
|
96
|
+
/**
|
|
97
|
+
* 可直接导出或展开的默认 ESLint Flat Config。
|
|
98
|
+
*
|
|
99
|
+
* @remarks
|
|
100
|
+
* 默认使用浏览器环境。需要切换运行环境或追加项目覆写时,请使用具名导出的
|
|
101
|
+
* {@link fastConfig} 工厂。
|
|
102
|
+
*/
|
|
103
|
+
const fastChina = fastConfig();
|
|
146
104
|
//#endregion
|
|
147
|
-
export {
|
|
105
|
+
export { createBaseConfigs, fastChina as default, defineRules, fastConfig };
|
|
148
106
|
|
|
149
107
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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\";\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\";\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * 根入口提供面向 Vue 3、TypeScript 与 UniApp 浏览器项目的固定 ESLint 配置。\n *\n * 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。\n *\n * @packageDocumentation\n */\nimport { type Config, defineConfig } from \"eslint/config\";\nimport { createCommonConfigs } from \"./configs/common\";\nimport { type RuntimeEnvironment, createEnvironmentConfigs, createNodeToolingConfigs } 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 { createPrettierConfigs } from \"./configs/prettier\";\nimport { createRegexpConfigs } from \"./configs/regexp\";\nimport { createPackageJsonSortConfigs } from \"./configs/sort-package\";\nimport { createTsconfigSortConfigs } from \"./configs/sort-tsconfig\";\nimport { createTypeScriptConfigs } from \"./configs/typescript\";\nimport { createUniAppConfigs } from \"./configs/uniapp\";\nimport { createVueConfigs } from \"./configs/vue\";\nimport { GLOBS_CODE, GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT, GLOB_NVUE } from \"./constants\";\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 * 根配置工厂唯一保留的项目选项。\n *\n * @remarks\n * 根入口固定启用 `.gitignore`、JavaScript、类型感知 TypeScript、Vue 3、UniApp、Import、\n * RegExp、JSON、清单排序和 Prettier 兼容层。项目级规则、globals 与 ignores 应通过\n * `fastConfig()` 的后置 Flat Config 参数声明。React、Angular、Markdown 与其他可选能力\n * 应从 `@fast-china/eslint-config/configs` 显式组合。\n */\nexport interface FastConfigOptions {\n\t/**\n\t * 应用代码实际运行的环境。\n\t *\n\t * - `\"browser\"`:提供浏览器全局变量。\n\t * - `\"node\"`:提供 Node.js 全局变量。\n\t * - `\"universal\"`:同时提供浏览器与 Node.js 全局变量。\n\t *\n\t * 配置文件、脚本、测试和 CLI 文件无论选择何种环境都会单独获得 Node.js globals。\n\t * @defaultValue `\"browser\"`\n\t */\n\tenvironment?: RuntimeEnvironment;\n}\n\nconst SCRIPT_FILES = [...GLOBS_JAVASCRIPT, ...GLOBS_TYPESCRIPT];\nconst VUE_PROJECT_FILES = [...GLOBS_CODE, GLOB_NVUE];\n\nconst createProjectConfigs = (environment: RuntimeEnvironment, codeFiles: readonly string[], frameworkConfigs: readonly Config[] = []): Config[] =>\n\tdefineConfig([\n\t\t...createGlobalIgnores(),\n\t\t...createGitignoreConfigs(),\n\t\t...createEnvironmentConfigs({\n\t\t\tenvironment,\n\t\t\tfiles: codeFiles,\n\t\t\tnodeFiles: SCRIPT_FILES,\n\t\t}),\n\t\t...createCommonConfigs(codeFiles),\n\t\t...createJavaScriptConfigs(),\n\t\t...createImportConfigs(codeFiles),\n\t\t...createRegexpConfigs(codeFiles),\n\t\t...createTypeScriptConfigs(),\n\t\t...createJsonConfigs(),\n\t\t...createPackageJsonSortConfigs(),\n\t\t...createTsconfigSortConfigs(),\n\t\t...frameworkConfigs,\n\t\t...createPrettierConfigs(),\n\t\t...createNodeToolingConfigs(SCRIPT_FILES),\n\t]);\n\n/**\n * 创建不绑定前端框架的固定基础配置。\n *\n * @remarks\n * 默认包含 `.gitignore`、JavaScript、类型感知 TypeScript、Import、RegExp、JSON、\n * `package.json`/`tsconfig*.json` 排序、Prettier 兼容层和 Node.js 工程文件覆写。\n * React、Angular、Markdown 与 Lodash 等能力由调用方从 `./configs` 子路径继续组合。\n *\n * @param options - 应用代码的运行环境。\n * @returns 可作为 React、Angular、Node.js 或 SDK 项目基础的 Flat Config 数组。\n */\nexport const createBaseConfigs = ({ environment = \"browser\" }: FastConfigOptions = {}): Config[] => createProjectConfigs(environment, SCRIPT_FILES);\n\nconst createVueProjectConfigs = ({ environment = \"browser\" }: FastConfigOptions = {}): Config[] =>\n\tcreateProjectConfigs(environment, VUE_PROJECT_FILES, [...createVueConfigs(), ...createUniAppConfigs(VUE_PROJECT_FILES)]);\n\n/**\n * 创建固定的 Vue 3、TypeScript 与 UniApp ESLint Flat Config。\n *\n * @remarks\n * 除运行环境外,根入口不提供能力启停开关。TypeScript 和 Vue 始终使用\n * `recommendedTypeChecked` 与 Project Service;被检查文件必须属于可发现的 tsconfig。\n * 额外配置会放在全部内置片段之后,因此可以覆盖项目规则、globals、ignores 或解析器选项。\n *\n * @param options - 应用代码的运行环境。\n * @param overrides - 追加到全部内置片段之后的 ESLint Flat Config。\n * @returns 可直接导出给 ESLint 的 Flat Config 数组。\n *\n * @example\n * ```ts\n * import { defineRules, fastConfig } from \"@fast-china/eslint-config\";\n *\n * export default fastConfig(\n * { environment: \"browser\" },\n * {\n * files: [\"src/generated/*.ts\"],\n * rules: defineRules({ \"@typescript-eslint/no-unused-vars\": \"off\" }),\n * },\n * );\n * ```\n */\nexport const fastConfig = ({ environment = \"browser\" }: FastConfigOptions = {}, ...overrides: Config[]): Config[] =>\n\tdefineConfig([...createVueProjectConfigs({ environment }), ...overrides]);\n\n/**\n * 可直接导出或展开的默认 ESLint Flat Config。\n *\n * @remarks\n * 默认使用浏览器环境。需要切换运行环境或追加项目覆写时,请使用具名导出的\n * {@link fastConfig} 工厂。\n */\nconst fastChina: Config[] = fastConfig();\n\nexport default fastChina;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,MAAa,eAAgD,UAAqE;AA2BlI,MAAM,eAAe,CAAC,GAAG,kBAAkB,GAAG,gBAAgB;AAC9D,MAAM,oBAAoB,CAAC,GAAG,YAAY,SAAS;AAEnD,MAAM,wBAAwB,aAAiC,WAA8B,mBAAsC,CAAC,MACnI,aAAa;CACZ,GAAG,oBAAoB;CACvB,GAAG,uBAAuB;CAC1B,GAAG,yBAAyB;EAC3B;EACA,OAAO;EACP,WAAW;CACZ,CAAC;CACD,GAAG,oBAAoB,SAAS;CAChC,GAAG,wBAAwB;CAC3B,GAAG,oBAAoB,SAAS;CAChC,GAAG,oBAAoB,SAAS;CAChC,GAAG,wBAAwB;CAC3B,GAAG,kBAAkB;CACrB,GAAG,6BAA6B;CAChC,GAAG,0BAA0B;CAC7B,GAAG;CACH,GAAG,sBAAsB;CACzB,GAAG,yBAAyB,YAAY;AACzC,CAAC;;;;;;;;;;;;AAaF,MAAa,qBAAqB,EAAE,cAAc,cAAiC,CAAC,MAAgB,qBAAqB,aAAa,YAAY;AAElJ,MAAM,2BAA2B,EAAE,cAAc,cAAiC,CAAC,MAClF,qBAAqB,aAAa,mBAAmB,CAAC,GAAG,iBAAiB,GAAG,GAAG,oBAAoB,iBAAiB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BxH,MAAa,cAAc,EAAE,cAAc,cAAiC,CAAC,GAAG,GAAG,cAClF,aAAa,CAAC,GAAG,wBAAwB,EAAE,YAAY,CAAC,GAAG,GAAG,SAAS,CAAC;;;;;;;;AASzE,MAAM,YAAsB,WAAW"}
|
package/dist/rules/angular.d.mts
CHANGED
|
@@ -39,7 +39,7 @@ declare const angularTemplateRules: {
|
|
|
39
39
|
*
|
|
40
40
|
* @remarks
|
|
41
41
|
* 规则覆盖替代文本、键盘交互、焦点、表单标签与 ARIA 合法性,可通过
|
|
42
|
-
* `
|
|
42
|
+
* `createAngularConfigs({ templateAccessibility: false })` 整组关闭而不影响模板基础正确性规则。
|
|
43
43
|
*/
|
|
44
44
|
declare const angularTemplateAccessibilityRules: {
|
|
45
45
|
"@angular-eslint/template/alt-text": "error";
|
package/dist/rules/angular.mjs
CHANGED
|
@@ -39,7 +39,7 @@ const angularTemplateRules = {
|
|
|
39
39
|
*
|
|
40
40
|
* @remarks
|
|
41
41
|
* 规则覆盖替代文本、键盘交互、焦点、表单标签与 ARIA 合法性,可通过
|
|
42
|
-
* `
|
|
42
|
+
* `createAngularConfigs({ templateAccessibility: false })` 整组关闭而不影响模板基础正确性规则。
|
|
43
43
|
*/
|
|
44
44
|
const angularTemplateAccessibilityRules = {
|
|
45
45
|
"@angular-eslint/template/alt-text": "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 * @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//
|
|
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 推荐使用 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 的默认模型。\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 控制流,与 Angular 推荐模板语法保持一致。\n\t\"@angular-eslint/template/prefer-control-flow\": \"error\",\n} satisfies RuleOptions;\n\n/**\n * Angular 模板无障碍规则。\n *\n * @remarks\n * 规则覆盖替代文本、键盘交互、焦点、表单标签与 ARIA 合法性,可通过\n * `createAngularConfigs({ templateAccessibility: false })` 整组关闭而不影响模板基础正确性规则。\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"}
|
package/dist/rules/common.d.mts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* 默认规则面向 SDK、OA、Admin 与客户端项目使用同一套质量标准。这里只保留
|
|
7
|
+
* 跨语言且误报较少的规则;纯格式和语法偏好交给 Prettier 或项目自行覆盖。
|
|
8
8
|
*/
|
|
9
9
|
declare const commonRules: {
|
|
10
10
|
"array-callback-return": "error";
|
package/dist/rules/common.mjs
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* 默认规则面向 SDK、OA、Admin 与客户端项目使用同一套质量标准。这里只保留
|
|
7
|
+
* 跨语言且误报较少的规则;纯格式和语法偏好交给 Prettier 或项目自行覆盖。
|
|
8
8
|
*/
|
|
9
9
|
const commonRules = {
|
|
10
10
|
"array-callback-return": "error",
|