@fast-china/eslint-config 2.1.6 → 2.1.8
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 +35 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +66 -142
- package/README.zh.md +64 -142
- package/dist/configs/environment.mjs +2 -0
- package/dist/configs/environment.mjs.map +1 -1
- package/dist/configs/ignores.mjs +0 -1
- package/dist/configs/ignores.mjs.map +1 -1
- package/dist/configs/import.mjs +4 -1
- package/dist/configs/import.mjs.map +1 -1
- package/dist/configs/index.d.mts +2 -2
- package/dist/configs/index.mjs +2 -2
- package/dist/configs/javascript.mjs +3 -1
- package/dist/configs/javascript.mjs.map +1 -1
- package/dist/configs/json.mjs +3 -1
- package/dist/configs/json.mjs.map +1 -1
- package/dist/configs/markdown.d.mts +2 -1
- package/dist/configs/markdown.mjs +4 -2
- package/dist/configs/markdown.mjs.map +1 -1
- package/dist/configs/prettier.mjs +1 -1
- package/dist/configs/prettier.mjs.map +1 -1
- package/dist/configs/sort-package.d.mts +1 -1
- package/dist/configs/sort-package.mjs +1 -1
- package/dist/configs/sort-package.mjs.map +1 -1
- package/dist/configs/sort-tsconfig.d.mts +2 -2
- package/dist/configs/sort-tsconfig.mjs +2 -2
- package/dist/configs/sort-tsconfig.mjs.map +1 -1
- package/dist/configs/typescript.d.mts +11 -7
- package/dist/configs/typescript.mjs +26 -19
- package/dist/configs/typescript.mjs.map +1 -1
- package/dist/configs/uniapp.mjs +19 -13
- package/dist/configs/uniapp.mjs.map +1 -1
- package/dist/configs/vue.d.mts +18 -3
- package/dist/configs/vue.mjs +60 -9
- package/dist/configs/vue.mjs.map +1 -1
- package/dist/constants/index.d.mts +4 -0
- package/dist/constants/index.mjs +5 -1
- package/dist/constants/index.mjs.map +1 -1
- package/dist/index.d.mts +37 -58
- package/dist/index.mjs +43 -47
- package/dist/index.mjs.map +1 -1
- package/dist/rules/angular.d.mts +28 -0
- package/dist/rules/angular.mjs +28 -0
- package/dist/rules/angular.mjs.map +1 -1
- package/dist/rules/common.d.mts +19 -6
- package/dist/rules/common.mjs +19 -13
- package/dist/rules/common.mjs.map +1 -1
- package/dist/rules/import.d.mts +9 -0
- package/dist/rules/import.mjs +24 -0
- package/dist/rules/import.mjs.map +1 -1
- package/dist/rules/index.d.mts +2 -2
- package/dist/rules/index.mjs +2 -2
- package/dist/rules/javascript.d.mts +18 -0
- package/dist/rules/javascript.mjs +18 -0
- package/dist/rules/javascript.mjs.map +1 -1
- package/dist/rules/lodash.d.mts +2 -0
- package/dist/rules/lodash.mjs +6 -2
- package/dist/rules/lodash.mjs.map +1 -1
- package/dist/rules/react.d.mts +13 -0
- package/dist/rules/react.mjs +13 -0
- package/dist/rules/react.mjs.map +1 -1
- package/dist/rules/regexp.d.mts +25 -0
- package/dist/rules/regexp.mjs +25 -0
- package/dist/rules/regexp.mjs.map +1 -1
- package/dist/rules/sort-package.d.mts +3 -1
- package/dist/rules/sort-package.mjs +3 -1
- package/dist/rules/sort-package.mjs.map +1 -1
- package/dist/rules/sort-tsconfig.d.mts +3 -1
- package/dist/rules/sort-tsconfig.mjs +3 -1
- package/dist/rules/sort-tsconfig.mjs.map +1 -1
- package/dist/rules/typescript.d.mts +82 -13
- package/dist/rules/typescript.mjs +85 -16
- package/dist/rules/typescript.mjs.map +1 -1
- package/dist/rules/vue.d.mts +67 -10
- package/dist/rules/vue.mjs +43 -14
- package/dist/rules/vue.mjs.map +1 -1
- package/docs/engineering-audit.zh.md +45 -49
- package/docs/rules/angular.zh.md +721 -0
- package/docs/rules/core.zh.md +3031 -0
- package/docs/rules/index.zh.md +38 -0
- package/docs/rules/json.zh.md +784 -0
- package/docs/rules/markdown.zh.md +449 -0
- package/docs/rules/react.zh.md +2091 -0
- package/docs/rules/typescript.zh.md +2051 -0
- package/docs/rules/vue.zh.md +3016 -0
- package/docs/rules-risk.md +85 -90
- package/docs/rules-risk.zh.md +76 -81
- package/package.json +4 -2
package/dist/rules/index.d.mts
CHANGED
|
@@ -9,5 +9,5 @@ import { regexpRules } from "./regexp.mjs";
|
|
|
9
9
|
import { packageJsonSortRules } from "./sort-package.mjs";
|
|
10
10
|
import { tsconfigJsonSortRules } from "./sort-tsconfig.mjs";
|
|
11
11
|
import { typescriptRules, typescriptTypeCheckedRules } from "./typescript.mjs";
|
|
12
|
-
import { vueRules } from "./vue.mjs";
|
|
13
|
-
export { type RuleOptions, angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, regexpRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules };
|
|
12
|
+
import { vueRules, vueScriptRules, vueTemplateRules } from "./vue.mjs";
|
|
13
|
+
export { type RuleOptions, angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, regexpRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules, vueScriptRules, vueTemplateRules };
|
package/dist/rules/index.mjs
CHANGED
|
@@ -8,5 +8,5 @@ import { regexpRules } from "./regexp.mjs";
|
|
|
8
8
|
import { packageJsonSortRules } from "./sort-package.mjs";
|
|
9
9
|
import { tsconfigJsonSortRules } from "./sort-tsconfig.mjs";
|
|
10
10
|
import { typescriptRules, typescriptTypeCheckedRules } from "./typescript.mjs";
|
|
11
|
-
import { vueRules } from "./vue.mjs";
|
|
12
|
-
export { angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, regexpRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules };
|
|
11
|
+
import { vueRules, vueScriptRules, vueTemplateRules } from "./vue.mjs";
|
|
12
|
+
export { angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, regexpRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules, vueScriptRules, vueTemplateRules };
|
|
@@ -7,46 +7,64 @@
|
|
|
7
7
|
* 供 SDK、管理端和客户端共同使用。
|
|
8
8
|
*/
|
|
9
9
|
export declare const javascriptRules: {
|
|
10
|
+
/** 变量和类型使用 camelCase;对象属性允许沿用外部协议字段名。 */
|
|
10
11
|
camelcase: ["error", {
|
|
11
12
|
properties: "never";
|
|
12
13
|
}];
|
|
14
|
+
/** 控制台调用在应用源码中需要人工确认;`warn` 和 `error` 仍可用于必要的诊断输出。 */
|
|
13
15
|
"no-console": ["warn", {
|
|
14
16
|
allow: [string, string];
|
|
15
17
|
}];
|
|
18
|
+
/** 防止调试断点进入发布代码并中断运行。 */
|
|
16
19
|
"no-debugger": "error";
|
|
20
|
+
/** 禁止意外的恒定条件,但允许 `while (true)` 等有明确退出逻辑的循环。 */
|
|
17
21
|
"no-constant-condition": ["error", {
|
|
18
22
|
checkLoops: false;
|
|
19
23
|
}];
|
|
24
|
+
/** 禁止标签语句和 `with`,避免难以追踪的跳转与动态标识符解析。 */
|
|
20
25
|
"no-restricted-syntax": ["error", string, string];
|
|
26
|
+
/** 现代项目使用 `let` 或 `const` 替代 `var`,避免函数作用域和循环闭包陷阱。 */
|
|
21
27
|
"no-var": "error";
|
|
28
|
+
/** 允许明确表示忽略失败的空 `catch`,其他空代码块视为遗漏。 */
|
|
22
29
|
"no-empty": ["error", {
|
|
23
30
|
allowEmptyCatch: true;
|
|
24
31
|
}];
|
|
32
|
+
/** 禁止肉眼难以识别、可能导致解析差异的非常规空白字符。 */
|
|
25
33
|
"no-irregular-whitespace": "error";
|
|
34
|
+
/** 变量和类先声明后使用;函数声明允许使用 JavaScript 提升语义。 */
|
|
26
35
|
"no-use-before-define": ["warn", {
|
|
27
36
|
classes: true;
|
|
28
37
|
functions: false;
|
|
29
38
|
variables: true;
|
|
30
39
|
}];
|
|
40
|
+
/** 能保持引用不变的变量优先使用 `const`;读取发生在赋值前时不做不可靠判断。 */
|
|
31
41
|
"prefer-const": ["warn", {
|
|
32
42
|
destructuring: "all";
|
|
33
43
|
ignoreReadBeforeAssign: true;
|
|
34
44
|
}];
|
|
45
|
+
/** 属性和值同名时强制使用对象简写,带引号键名不强制改写。 */
|
|
35
46
|
"object-shorthand": ["error", "always", {
|
|
36
47
|
ignoreConstructors: false;
|
|
37
48
|
avoidQuotes: true;
|
|
38
49
|
}];
|
|
50
|
+
/** 不依赖动态 `this` 的回调使用箭头函数;允许确实需要调用方绑定 `this` 的普通函数。 */
|
|
39
51
|
"prefer-arrow-callback": ["error", {
|
|
40
52
|
allowNamedFunctions: false;
|
|
41
53
|
allowUnboundThis: true;
|
|
42
54
|
}];
|
|
55
|
+
/** 将可等价改写的逻辑赋值统一为 `||=`、`&&=`、`??=`,并覆盖对应的 `if` 赋值写法。 */
|
|
43
56
|
"logical-assignment-operators": ["error", "always", {
|
|
44
57
|
enforceForIfStatements: true;
|
|
45
58
|
}];
|
|
59
|
+
/** 创建新对象时用对象展开代替 `Object.assign({}, source)`,不改写会修改既有目标对象的调用。 */
|
|
46
60
|
"prefer-object-spread": "error";
|
|
61
|
+
/** 使用具名 rest 参数代替 `arguments`,使参数范围明确并获得真实数组和类型推断能力。 */
|
|
47
62
|
"prefer-rest-params": "error";
|
|
63
|
+
/** 参数数组展开调用时使用 `fn(...args)` 代替 `fn.apply(thisArg, args)`,使调用目标和参数更直观。 */
|
|
48
64
|
"prefer-spread": "error";
|
|
65
|
+
/** 字符串中包含变量时使用模板字符串,减少多段 `+` 拼接和隐式类型转换造成的歧义。 */
|
|
49
66
|
"prefer-template": "error";
|
|
67
|
+
/** 同一作用域禁止重复声明变量、函数或类,避免前一声明被覆盖;TS 文件由对应扩展规则处理。 */
|
|
50
68
|
"no-redeclare": "error";
|
|
51
69
|
};
|
|
52
70
|
//#endregion
|
|
@@ -7,27 +7,38 @@
|
|
|
7
7
|
* 供 SDK、管理端和客户端共同使用。
|
|
8
8
|
*/
|
|
9
9
|
const javascriptRules = {
|
|
10
|
+
/** 变量和类型使用 camelCase;对象属性允许沿用外部协议字段名。 */
|
|
10
11
|
camelcase: ["error", { properties: "never" }],
|
|
12
|
+
/** 控制台调用在应用源码中需要人工确认;`warn` 和 `error` 仍可用于必要的诊断输出。 */
|
|
11
13
|
"no-console": ["warn", { allow: ["warn", "error"] }],
|
|
14
|
+
/** 防止调试断点进入发布代码并中断运行。 */
|
|
12
15
|
"no-debugger": "error",
|
|
16
|
+
/** 禁止意外的恒定条件,但允许 `while (true)` 等有明确退出逻辑的循环。 */
|
|
13
17
|
"no-constant-condition": ["error", { checkLoops: false }],
|
|
18
|
+
/** 禁止标签语句和 `with`,避免难以追踪的跳转与动态标识符解析。 */
|
|
14
19
|
"no-restricted-syntax": [
|
|
15
20
|
"error",
|
|
16
21
|
"LabeledStatement",
|
|
17
22
|
"WithStatement"
|
|
18
23
|
],
|
|
24
|
+
/** 现代项目使用 `let` 或 `const` 替代 `var`,避免函数作用域和循环闭包陷阱。 */
|
|
19
25
|
"no-var": "error",
|
|
26
|
+
/** 允许明确表示忽略失败的空 `catch`,其他空代码块视为遗漏。 */
|
|
20
27
|
"no-empty": ["error", { allowEmptyCatch: true }],
|
|
28
|
+
/** 禁止肉眼难以识别、可能导致解析差异的非常规空白字符。 */
|
|
21
29
|
"no-irregular-whitespace": "error",
|
|
30
|
+
/** 变量和类先声明后使用;函数声明允许使用 JavaScript 提升语义。 */
|
|
22
31
|
"no-use-before-define": ["warn", {
|
|
23
32
|
classes: true,
|
|
24
33
|
functions: false,
|
|
25
34
|
variables: true
|
|
26
35
|
}],
|
|
36
|
+
/** 能保持引用不变的变量优先使用 `const`;读取发生在赋值前时不做不可靠判断。 */
|
|
27
37
|
"prefer-const": ["warn", {
|
|
28
38
|
destructuring: "all",
|
|
29
39
|
ignoreReadBeforeAssign: true
|
|
30
40
|
}],
|
|
41
|
+
/** 属性和值同名时强制使用对象简写,带引号键名不强制改写。 */
|
|
31
42
|
"object-shorthand": [
|
|
32
43
|
"error",
|
|
33
44
|
"always",
|
|
@@ -36,19 +47,26 @@ const javascriptRules = {
|
|
|
36
47
|
avoidQuotes: true
|
|
37
48
|
}
|
|
38
49
|
],
|
|
50
|
+
/** 不依赖动态 `this` 的回调使用箭头函数;允许确实需要调用方绑定 `this` 的普通函数。 */
|
|
39
51
|
"prefer-arrow-callback": ["error", {
|
|
40
52
|
allowNamedFunctions: false,
|
|
41
53
|
allowUnboundThis: true
|
|
42
54
|
}],
|
|
55
|
+
/** 将可等价改写的逻辑赋值统一为 `||=`、`&&=`、`??=`,并覆盖对应的 `if` 赋值写法。 */
|
|
43
56
|
"logical-assignment-operators": [
|
|
44
57
|
"error",
|
|
45
58
|
"always",
|
|
46
59
|
{ enforceForIfStatements: true }
|
|
47
60
|
],
|
|
61
|
+
/** 创建新对象时用对象展开代替 `Object.assign({}, source)`,不改写会修改既有目标对象的调用。 */
|
|
48
62
|
"prefer-object-spread": "error",
|
|
63
|
+
/** 使用具名 rest 参数代替 `arguments`,使参数范围明确并获得真实数组和类型推断能力。 */
|
|
49
64
|
"prefer-rest-params": "error",
|
|
65
|
+
/** 参数数组展开调用时使用 `fn(...args)` 代替 `fn.apply(thisArg, args)`,使调用目标和参数更直观。 */
|
|
50
66
|
"prefer-spread": "error",
|
|
67
|
+
/** 字符串中包含变量时使用模板字符串,减少多段 `+` 拼接和隐式类型转换造成的歧义。 */
|
|
51
68
|
"prefer-template": "error",
|
|
69
|
+
/** 同一作用域禁止重复声明变量、函数或类,避免前一声明被覆盖;TS 文件由对应扩展规则处理。 */
|
|
52
70
|
"no-redeclare": "error"
|
|
53
71
|
};
|
|
54
72
|
//#endregion
|
|
@@ -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 *\n * @remarks\n * `@eslint/js` 推荐预置负责基础正确性。本记录补充命名、声明顺序和现代语法约定,\n * 供 SDK、管理端和客户端共同使用。\n */\nexport const javascriptRules = {\n\t
|
|
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 * `@eslint/js` 推荐预置负责基础正确性。本记录补充命名、声明顺序和现代语法约定,\n * 供 SDK、管理端和客户端共同使用。\n */\nexport const javascriptRules = {\n\t/** 变量和类型使用 camelCase;对象属性允许沿用外部协议字段名。 */\n\tcamelcase: [\"error\", { properties: \"never\" }],\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/** 禁止标签语句和 `with`,避免难以追踪的跳转与动态标识符解析。 */\n\t\"no-restricted-syntax\": [\"error\", \"LabeledStatement\", \"WithStatement\"],\n\t/** 现代项目使用 `let` 或 `const` 替代 `var`,避免函数作用域和循环闭包陷阱。 */\n\t\"no-var\": \"error\",\n\t/** 允许明确表示忽略失败的空 `catch`,其他空代码块视为遗漏。 */\n\t\"no-empty\": [\"error\", { allowEmptyCatch: true }],\n\t/** 禁止肉眼难以识别、可能导致解析差异的非常规空白字符。 */\n\t\"no-irregular-whitespace\": \"error\",\n\t/** 变量和类先声明后使用;函数声明允许使用 JavaScript 提升语义。 */\n\t\"no-use-before-define\": [\"warn\", { classes: true, functions: false, variables: true }],\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/** 属性和值同名时强制使用对象简写,带引号键名不强制改写。 */\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/** 不依赖动态 `this` 的回调使用箭头函数;允许确实需要调用方绑定 `this` 的普通函数。 */\n\t\"prefer-arrow-callback\": [\"error\", { allowNamedFunctions: false, allowUnboundThis: true }],\n\t/** 将可等价改写的逻辑赋值统一为 `||=`、`&&=`、`??=`,并覆盖对应的 `if` 赋值写法。 */\n\t\"logical-assignment-operators\": [\"error\", \"always\", { enforceForIfStatements: true }],\n\t/** 创建新对象时用对象展开代替 `Object.assign({}, source)`,不改写会修改既有目标对象的调用。 */\n\t\"prefer-object-spread\": \"error\",\n\t/** 使用具名 rest 参数代替 `arguments`,使参数范围明确并获得真实数组和类型推断能力。 */\n\t\"prefer-rest-params\": \"error\",\n\t/** 参数数组展开调用时使用 `fn(...args)` 代替 `fn.apply(thisArg, args)`,使调用目标和参数更直观。 */\n\t\"prefer-spread\": \"error\",\n\t/** 字符串中包含变量时使用模板字符串,减少多段 `+` 拼接和隐式类型转换造成的歧义。 */\n\t\"prefer-template\": \"error\",\n\t/** 同一作用域禁止重复声明变量、函数或类,避免前一声明被覆盖;TS 文件由对应扩展规则处理。 */\n\t\"no-redeclare\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,kBAAkB;;CAE9B,WAAW,CAAC,SAAS,EAAE,YAAY,QAAQ,CAAC;;CAE5C,cAAc,CACb,QACA,EACC,OAAO,CAAC,QAAQ,OAAO,EACxB,CACD;;CAEA,eAAe;;CAEf,yBAAyB,CACxB,SACA,EACC,YAAY,MACb,CACD;;CAEA,wBAAwB;EAAC;EAAS;EAAoB;CAAe;;CAErE,UAAU;;CAEV,YAAY,CAAC,SAAS,EAAE,iBAAiB,KAAK,CAAC;;CAE/C,2BAA2B;;CAE3B,wBAAwB,CAAC,QAAQ;EAAE,SAAS;EAAM,WAAW;EAAO,WAAW;CAAK,CAAC;;CAErF,gBAAgB,CACf,QACA;EACC,eAAe;EACf,wBAAwB;CACzB,CACD;;CAEA,oBAAoB;EACnB;EACA;EACA;GACC,oBAAoB;GACpB,aAAa;EACd;CACD;;CAEA,yBAAyB,CAAC,SAAS;EAAE,qBAAqB;EAAO,kBAAkB;CAAK,CAAC;;CAEzF,gCAAgC;EAAC;EAAS;EAAU,EAAE,wBAAwB,KAAK;CAAC;;CAEpF,wBAAwB;;CAExB,sBAAsB;;CAEtB,iBAAiB;;CAEjB,mBAAmB;;CAEnB,gBAAgB;AACjB"}
|
package/dist/rules/lodash.d.mts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* `import()` 或 CommonJS `require()`。选择此策略的项目应自行安装 `lodash-unified`。
|
|
8
8
|
*/
|
|
9
9
|
export declare const preferLodashUnifiedRules: {
|
|
10
|
+
/** [高影响][按需启用] 禁止混用 `lodash` 与 `lodash-es`,避免同一项目维护多套等价依赖入口。 */
|
|
10
11
|
"no-restricted-imports": ["error", {
|
|
11
12
|
paths: {
|
|
12
13
|
name: string;
|
|
@@ -26,6 +27,7 @@ export declare const preferLodashUnifiedRules: {
|
|
|
26
27
|
* `lodash-unified` 混用,不替项目决定整包导入或按方法导入。
|
|
27
28
|
*/
|
|
28
29
|
export declare const preferLodashRules: {
|
|
30
|
+
/** [高影响][按需启用] 禁止混用 `lodash-es` 与 `lodash-unified`,保持运行时和类型来源一致。 */
|
|
29
31
|
"no-restricted-imports": ["error", {
|
|
30
32
|
paths: {
|
|
31
33
|
name: string;
|
package/dist/rules/lodash.mjs
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* 该规则只约束静态 import/export 的模块来源,不会安装依赖,也不会检查动态
|
|
7
7
|
* `import()` 或 CommonJS `require()`。选择此策略的项目应自行安装 `lodash-unified`。
|
|
8
8
|
*/
|
|
9
|
-
const preferLodashUnifiedRules = {
|
|
9
|
+
const preferLodashUnifiedRules = {
|
|
10
|
+
/** [高影响][按需启用] 禁止混用 `lodash` 与 `lodash-es`,避免同一项目维护多套等价依赖入口。 */
|
|
11
|
+
"no-restricted-imports": ["error", {
|
|
10
12
|
paths: [{
|
|
11
13
|
name: "lodash",
|
|
12
14
|
message: "Use \"lodash-unified\" consistently instead of \"lodash\"."
|
|
@@ -26,7 +28,9 @@ const preferLodashUnifiedRules = { "no-restricted-imports": ["error", {
|
|
|
26
28
|
* 根入口和 `lodash/*` 子路径都允许使用;规则只负责避免与 `lodash-es` 或
|
|
27
29
|
* `lodash-unified` 混用,不替项目决定整包导入或按方法导入。
|
|
28
30
|
*/
|
|
29
|
-
const preferLodashRules = {
|
|
31
|
+
const preferLodashRules = {
|
|
32
|
+
/** [高影响][按需启用] 禁止混用 `lodash-es` 与 `lodash-unified`,保持运行时和类型来源一致。 */
|
|
33
|
+
"no-restricted-imports": ["error", {
|
|
30
34
|
paths: [{
|
|
31
35
|
name: "lodash-es",
|
|
32
36
|
message: "Use \"lodash\" consistently instead of \"lodash-es\"."
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lodash.mjs","names":[],"sources":["../../src/rules/lodash.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 统一使用 `lodash-unified` 的可选导入策略。\n *\n * @remarks\n * 该规则只约束静态 import/export 的模块来源,不会安装依赖,也不会检查动态\n * `import()` 或 CommonJS `require()`。选择此策略的项目应自行安装 `lodash-unified`。\n */\nexport const preferLodashUnifiedRules = {\n\t
|
|
1
|
+
{"version":3,"file":"lodash.mjs","names":[],"sources":["../../src/rules/lodash.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 统一使用 `lodash-unified` 的可选导入策略。\n *\n * @remarks\n * 该规则只约束静态 import/export 的模块来源,不会安装依赖,也不会检查动态\n * `import()` 或 CommonJS `require()`。选择此策略的项目应自行安装 `lodash-unified`。\n */\nexport const preferLodashUnifiedRules = {\n\t/** [高影响][按需启用] 禁止混用 `lodash` 与 `lodash-es`,避免同一项目维护多套等价依赖入口。 */\n\t\"no-restricted-imports\": [\n\t\t\"error\",\n\t\t{\n\t\t\tpaths: [\n\t\t\t\t{\n\t\t\t\t\tname: \"lodash\",\n\t\t\t\t\tmessage: 'Use \"lodash-unified\" consistently instead of \"lodash\".',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"lodash-es\",\n\t\t\t\t\tmessage: 'Use \"lodash-unified\" consistently instead of \"lodash-es\".',\n\t\t\t\t},\n\t\t\t],\n\t\t\tpatterns: [\n\t\t\t\t{\n\t\t\t\t\tgroup: [\"lodash/*\", \"lodash-es/*\"],\n\t\t\t\t\tmessage: 'Use exports from \"lodash-unified\" instead of Lodash subpath imports.',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n} satisfies RuleOptions;\n\n/**\n * 统一使用 `lodash` 的可选导入策略。\n *\n * @remarks\n * 根入口和 `lodash/*` 子路径都允许使用;规则只负责避免与 `lodash-es` 或\n * `lodash-unified` 混用,不替项目决定整包导入或按方法导入。\n */\nexport const preferLodashRules = {\n\t/** [高影响][按需启用] 禁止混用 `lodash-es` 与 `lodash-unified`,保持运行时和类型来源一致。 */\n\t\"no-restricted-imports\": [\n\t\t\"error\",\n\t\t{\n\t\t\tpaths: [\n\t\t\t\t{\n\t\t\t\t\tname: \"lodash-es\",\n\t\t\t\t\tmessage: 'Use \"lodash\" consistently instead of \"lodash-es\".',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"lodash-unified\",\n\t\t\t\t\tmessage: 'Use \"lodash\" consistently instead of \"lodash-unified\".',\n\t\t\t\t},\n\t\t\t],\n\t\t\tpatterns: [\n\t\t\t\t{\n\t\t\t\t\tgroup: [\"lodash-es/*\", \"lodash-unified/*\"],\n\t\t\t\t\tmessage: 'Use \"lodash\" or a \"lodash/*\" subpath consistently.',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,2BAA2B;;AAEvC,yBAAyB,CACxB,SACA;CACC,OAAO,CACN;EACC,MAAM;EACN,SAAS;CACV,GACA;EACC,MAAM;EACN,SAAS;CACV,CACD;CACA,UAAU,CACT;EACC,OAAO,CAAC,YAAY,aAAa;EACjC,SAAS;CACV,CACD;AACD,CACD,EACD;;;;;;;;AASA,MAAa,oBAAoB;;AAEhC,yBAAyB,CACxB,SACA;CACC,OAAO,CACN;EACC,MAAM;EACN,SAAS;CACV,GACA;EACC,MAAM;EACN,SAAS;CACV,CACD;CACA,UAAU,CACT;EACC,OAAO,CAAC,eAAe,kBAAkB;EACzC,SAAS;CACV,CACD;AACD,CACD,EACD"}
|
package/dist/rules/react.d.mts
CHANGED
|
@@ -7,18 +7,31 @@
|
|
|
7
7
|
* Hooks Recommended 负责 Hooks 与 React Compiler 正确性;这里仅消除重复报告并补充 DOM 规则。
|
|
8
8
|
*/
|
|
9
9
|
export declare const reactRules: {
|
|
10
|
+
/** 子组件渲染错误应交给 Error Boundary,而不是用父组件 `try/catch` 捕获;由官方 `react-hooks/error-boundaries` 统一检查。 */
|
|
10
11
|
"@eslint-react/error-boundaries": "off";
|
|
12
|
+
/** `useEffect`、`useMemo` 和 `useCallback` 等 Hook 的依赖项必须完整准确;由官方 `react-hooks/exhaustive-deps` 统一检查。 */
|
|
11
13
|
"@eslint-react/exhaustive-deps": "off";
|
|
14
|
+
/** 组件和 Hook 渲染期间不得调用 `Date.now`、`Math.random` 等已知非纯函数;由官方 `react-hooks/purity` 统一检查。 */
|
|
12
15
|
"@eslint-react/purity": "off";
|
|
16
|
+
/** Hook 只能在组件或自定义 Hook 顶层调用,不能放入条件、循环或普通函数;由官方 `react-hooks/rules-of-hooks` 统一检查。 */
|
|
13
17
|
"@eslint-react/rules-of-hooks": "off";
|
|
18
|
+
/** Effect 内同步更新状态会触发额外渲染,应改为派生值或外部订阅回调;由官方 `react-hooks/set-state-in-effect` 统一检查。 */
|
|
14
19
|
"@eslint-react/set-state-in-effect": "off";
|
|
20
|
+
/** 渲染期间无条件更新状态可能造成重复或无限渲染;由官方 `react-hooks/set-state-in-render` 统一检查。 */
|
|
15
21
|
"@eslint-react/set-state-in-render": "off";
|
|
22
|
+
/** 在渲染函数内部创建组件会使其每次重建并丢失状态;由官方 `react-hooks/static-components` 统一检查。 */
|
|
16
23
|
"@eslint-react/static-components": "off";
|
|
24
|
+
/** React Compiler 无法安全转换的语法需要调整或显式隔离;由官方 `react-hooks/unsupported-syntax` 统一检查。 */
|
|
17
25
|
"@eslint-react/unsupported-syntax": "off";
|
|
26
|
+
/** `useMemo` 回调必须返回需要缓存的值,不能把它误当作副作用 Hook;由官方 `react-hooks/use-memo` 统一检查。 */
|
|
18
27
|
"@eslint-react/use-memo": "off";
|
|
28
|
+
/** `button` 缺少 `type` 时在表单内默认为 `submit`,显式声明可避免意外提交。 */
|
|
19
29
|
"@eslint-react/dom-no-missing-button-type": "error";
|
|
30
|
+
/** [安全关注] 未受限 `iframe` 权限面较大;以警告提醒评估可信来源和 `sandbox` 策略。 */
|
|
20
31
|
"@eslint-react/dom-no-missing-iframe-sandbox": "warn";
|
|
32
|
+
/** JSX 属性拼写错误会被 React 忽略或错误透传到 DOM,应在提交前阻断。 */
|
|
21
33
|
"@eslint-react/dom-no-unknown-property": "error";
|
|
34
|
+
/** [安全关注] `target="_blank"` 未隔离 `opener` 时可能允许目标页控制来源页。 */
|
|
22
35
|
"@eslint-react/dom-no-unsafe-target-blank": "error";
|
|
23
36
|
};
|
|
24
37
|
//#endregion
|
package/dist/rules/react.mjs
CHANGED
|
@@ -7,18 +7,31 @@
|
|
|
7
7
|
* Hooks Recommended 负责 Hooks 与 React Compiler 正确性;这里仅消除重复报告并补充 DOM 规则。
|
|
8
8
|
*/
|
|
9
9
|
const reactRules = {
|
|
10
|
+
/** 子组件渲染错误应交给 Error Boundary,而不是用父组件 `try/catch` 捕获;由官方 `react-hooks/error-boundaries` 统一检查。 */
|
|
10
11
|
"@eslint-react/error-boundaries": "off",
|
|
12
|
+
/** `useEffect`、`useMemo` 和 `useCallback` 等 Hook 的依赖项必须完整准确;由官方 `react-hooks/exhaustive-deps` 统一检查。 */
|
|
11
13
|
"@eslint-react/exhaustive-deps": "off",
|
|
14
|
+
/** 组件和 Hook 渲染期间不得调用 `Date.now`、`Math.random` 等已知非纯函数;由官方 `react-hooks/purity` 统一检查。 */
|
|
12
15
|
"@eslint-react/purity": "off",
|
|
16
|
+
/** Hook 只能在组件或自定义 Hook 顶层调用,不能放入条件、循环或普通函数;由官方 `react-hooks/rules-of-hooks` 统一检查。 */
|
|
13
17
|
"@eslint-react/rules-of-hooks": "off",
|
|
18
|
+
/** Effect 内同步更新状态会触发额外渲染,应改为派生值或外部订阅回调;由官方 `react-hooks/set-state-in-effect` 统一检查。 */
|
|
14
19
|
"@eslint-react/set-state-in-effect": "off",
|
|
20
|
+
/** 渲染期间无条件更新状态可能造成重复或无限渲染;由官方 `react-hooks/set-state-in-render` 统一检查。 */
|
|
15
21
|
"@eslint-react/set-state-in-render": "off",
|
|
22
|
+
/** 在渲染函数内部创建组件会使其每次重建并丢失状态;由官方 `react-hooks/static-components` 统一检查。 */
|
|
16
23
|
"@eslint-react/static-components": "off",
|
|
24
|
+
/** React Compiler 无法安全转换的语法需要调整或显式隔离;由官方 `react-hooks/unsupported-syntax` 统一检查。 */
|
|
17
25
|
"@eslint-react/unsupported-syntax": "off",
|
|
26
|
+
/** `useMemo` 回调必须返回需要缓存的值,不能把它误当作副作用 Hook;由官方 `react-hooks/use-memo` 统一检查。 */
|
|
18
27
|
"@eslint-react/use-memo": "off",
|
|
28
|
+
/** `button` 缺少 `type` 时在表单内默认为 `submit`,显式声明可避免意外提交。 */
|
|
19
29
|
"@eslint-react/dom-no-missing-button-type": "error",
|
|
30
|
+
/** [安全关注] 未受限 `iframe` 权限面较大;以警告提醒评估可信来源和 `sandbox` 策略。 */
|
|
20
31
|
"@eslint-react/dom-no-missing-iframe-sandbox": "warn",
|
|
32
|
+
/** JSX 属性拼写错误会被 React 忽略或错误透传到 DOM,应在提交前阻断。 */
|
|
21
33
|
"@eslint-react/dom-no-unknown-property": "error",
|
|
34
|
+
/** [安全关注] `target="_blank"` 未隔离 `opener` 时可能允许目标页控制来源页。 */
|
|
22
35
|
"@eslint-react/dom-no-unsafe-target-blank": "error"
|
|
23
36
|
};
|
|
24
37
|
//#endregion
|
package/dist/rules/react.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.mjs","names":[],"sources":["../../src/rules/react.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * React 本地覆写规则。\n *\n * @remarks\n * `@eslint-react/recommended*` 负责组件、JSX、DOM 与 Web API 正确性,React 官方\n * Hooks Recommended 负责 Hooks 与 React Compiler 正确性;这里仅消除重复报告并补充 DOM 规则。\n */\nexport const reactRules = {\n\t
|
|
1
|
+
{"version":3,"file":"react.mjs","names":[],"sources":["../../src/rules/react.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * React 本地覆写规则。\n *\n * @remarks\n * `@eslint-react/recommended*` 负责组件、JSX、DOM 与 Web API 正确性,React 官方\n * Hooks Recommended 负责 Hooks 与 React Compiler 正确性;这里仅消除重复报告并补充 DOM 规则。\n */\nexport const reactRules = {\n\t/** 子组件渲染错误应交给 Error Boundary,而不是用父组件 `try/catch` 捕获;由官方 `react-hooks/error-boundaries` 统一检查。 */\n\t\"@eslint-react/error-boundaries\": \"off\",\n\t/** `useEffect`、`useMemo` 和 `useCallback` 等 Hook 的依赖项必须完整准确;由官方 `react-hooks/exhaustive-deps` 统一检查。 */\n\t\"@eslint-react/exhaustive-deps\": \"off\",\n\t/** 组件和 Hook 渲染期间不得调用 `Date.now`、`Math.random` 等已知非纯函数;由官方 `react-hooks/purity` 统一检查。 */\n\t\"@eslint-react/purity\": \"off\",\n\t/** Hook 只能在组件或自定义 Hook 顶层调用,不能放入条件、循环或普通函数;由官方 `react-hooks/rules-of-hooks` 统一检查。 */\n\t\"@eslint-react/rules-of-hooks\": \"off\",\n\t/** Effect 内同步更新状态会触发额外渲染,应改为派生值或外部订阅回调;由官方 `react-hooks/set-state-in-effect` 统一检查。 */\n\t\"@eslint-react/set-state-in-effect\": \"off\",\n\t/** 渲染期间无条件更新状态可能造成重复或无限渲染;由官方 `react-hooks/set-state-in-render` 统一检查。 */\n\t\"@eslint-react/set-state-in-render\": \"off\",\n\t/** 在渲染函数内部创建组件会使其每次重建并丢失状态;由官方 `react-hooks/static-components` 统一检查。 */\n\t\"@eslint-react/static-components\": \"off\",\n\t/** React Compiler 无法安全转换的语法需要调整或显式隔离;由官方 `react-hooks/unsupported-syntax` 统一检查。 */\n\t\"@eslint-react/unsupported-syntax\": \"off\",\n\t/** `useMemo` 回调必须返回需要缓存的值,不能把它误当作副作用 Hook;由官方 `react-hooks/use-memo` 统一检查。 */\n\t\"@eslint-react/use-memo\": \"off\",\n\n\t/** `button` 缺少 `type` 时在表单内默认为 `submit`,显式声明可避免意外提交。 */\n\t\"@eslint-react/dom-no-missing-button-type\": \"error\",\n\t/** [安全关注] 未受限 `iframe` 权限面较大;以警告提醒评估可信来源和 `sandbox` 策略。 */\n\t\"@eslint-react/dom-no-missing-iframe-sandbox\": \"warn\",\n\t/** JSX 属性拼写错误会被 React 忽略或错误透传到 DOM,应在提交前阻断。 */\n\t\"@eslint-react/dom-no-unknown-property\": \"error\",\n\t/** [安全关注] `target=\"_blank\"` 未隔离 `opener` 时可能允许目标页控制来源页。 */\n\t\"@eslint-react/dom-no-unsafe-target-blank\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,aAAa;;CAEzB,kCAAkC;;CAElC,iCAAiC;;CAEjC,wBAAwB;;CAExB,gCAAgC;;CAEhC,qCAAqC;;CAErC,qCAAqC;;CAErC,mCAAmC;;CAEnC,oCAAoC;;CAEpC,0BAA0B;;CAG1B,4CAA4C;;CAE5C,+CAA+C;;CAE/C,yCAAyC;;CAEzC,4CAA4C;AAC7C"}
|
package/dist/rules/regexp.d.mts
CHANGED
|
@@ -7,30 +7,55 @@
|
|
|
7
7
|
* 纯偏好作为阻断错误。这里显式维护无效结构、潜在错误和灾难性回溯检查。
|
|
8
8
|
*/
|
|
9
9
|
export declare const regexpRules: {
|
|
10
|
+
/** 控制字符通常来自复制或编码错误,要求使用可识别的转义写法。 */
|
|
10
11
|
"no-control-regex": "error";
|
|
12
|
+
/** Unicode 组合字符可能让字符类匹配结果与视觉含义不一致。 */
|
|
11
13
|
"no-misleading-character-class": "error";
|
|
14
|
+
/** 正则中的连续普通空格容易漏看,使用量词或明确转义更清晰。 */
|
|
12
15
|
"no-regex-spaces": "error";
|
|
16
|
+
/** 相邻量词的作用范围容易被误读,保留警告供人工复核。 */
|
|
13
17
|
"regexp/confusing-quantifier": "warn";
|
|
18
|
+
/** 断言与其内部条件矛盾时表达式永远无法按预期匹配。 */
|
|
14
19
|
"regexp/no-contradiction-with-assertion": "error";
|
|
20
|
+
/** 字符类中的重复字符通常表示拼写或范围设计错误。 */
|
|
15
21
|
"regexp/no-dupe-characters-character-class": "error";
|
|
22
|
+
/** 重复或被完全覆盖的分支通常表示条件遗漏。 */
|
|
16
23
|
"regexp/no-dupe-disjunctions": "error";
|
|
24
|
+
/** 空分支可能是有意匹配空字符串,也可能是遗漏,因此只警告。 */
|
|
17
25
|
"regexp/no-empty-alternative": "warn";
|
|
26
|
+
/** 空捕获组不会捕获有效内容,通常属于表达式残留。 */
|
|
18
27
|
"regexp/no-empty-capturing-group": "error";
|
|
28
|
+
/** 空字符类永远无法匹配字符。 */
|
|
19
29
|
"regexp/no-empty-character-class": "error";
|
|
30
|
+
/** 空分组通常表示编辑遗漏。 */
|
|
20
31
|
"regexp/no-empty-group": "error";
|
|
32
|
+
/** 空前后查找不会表达有效约束。 */
|
|
21
33
|
"regexp/no-empty-lookarounds-assertion": "error";
|
|
34
|
+
/** 多余嵌套断言可能改变捕获或回溯边界,应视为结构错误。 */
|
|
22
35
|
"regexp/no-extra-lookaround-assertions": "error";
|
|
36
|
+
/** 检查 `RegExp` 构造器字符串和字面量中的无效语法及标志。 */
|
|
23
37
|
"regexp/no-invalid-regexp": "error";
|
|
38
|
+
/** 不可见字符容易造成审查遗漏和匹配异常。 */
|
|
24
39
|
"regexp/no-invisible-character": "error";
|
|
40
|
+
/** 捕获组边界具有误导性时,反向引用和替换结果可能不符合预期。 */
|
|
25
41
|
"regexp/no-misleading-capturing-group": "error";
|
|
42
|
+
/** Unicode 字符的视觉形式与代码点不一致时容易产生错误匹配。 */
|
|
26
43
|
"regexp/no-misleading-unicode-character": "error";
|
|
44
|
+
/** `replaceAll` 等全局操作缺少 `g` 标志时会在运行时失败或行为不一致。 */
|
|
27
45
|
"regexp/no-missing-g-flag": "error";
|
|
46
|
+
/** 禁止 JavaScript 不支持的非标准正则标志。 */
|
|
28
47
|
"regexp/no-non-standard-flag": "error";
|
|
48
|
+
/** 可选断言几乎总能通过,通常无法表达预期约束。 */
|
|
29
49
|
"regexp/no-optional-assertion": "error";
|
|
50
|
+
/** 阻止可被构造输入触发的超线性回溯,降低拒绝服务风险。 */
|
|
30
51
|
"regexp/no-super-linear-backtracking": "error";
|
|
52
|
+
/** 无效反向引用无法引用预期捕获内容。 */
|
|
31
53
|
"regexp/no-useless-backreference": "error";
|
|
54
|
+
/** 替换字符串引用不存在的捕获组时不会得到预期结果。 */
|
|
32
55
|
"regexp/no-useless-dollar-replacements": "error";
|
|
56
|
+
/** 零次量词会让对应模式永远不参与匹配,通常是边界笔误。 */
|
|
33
57
|
"regexp/no-zero-quantifier": "error";
|
|
58
|
+
/** 使用严格模式检查容易产生歧义或跨引擎差异的正则结构。 */
|
|
34
59
|
"regexp/strict": "error";
|
|
35
60
|
};
|
|
36
61
|
//#endregion
|
package/dist/rules/regexp.mjs
CHANGED
|
@@ -7,30 +7,55 @@
|
|
|
7
7
|
* 纯偏好作为阻断错误。这里显式维护无效结构、潜在错误和灾难性回溯检查。
|
|
8
8
|
*/
|
|
9
9
|
const regexpRules = {
|
|
10
|
+
/** 控制字符通常来自复制或编码错误,要求使用可识别的转义写法。 */
|
|
10
11
|
"no-control-regex": "error",
|
|
12
|
+
/** Unicode 组合字符可能让字符类匹配结果与视觉含义不一致。 */
|
|
11
13
|
"no-misleading-character-class": "error",
|
|
14
|
+
/** 正则中的连续普通空格容易漏看,使用量词或明确转义更清晰。 */
|
|
12
15
|
"no-regex-spaces": "error",
|
|
16
|
+
/** 相邻量词的作用范围容易被误读,保留警告供人工复核。 */
|
|
13
17
|
"regexp/confusing-quantifier": "warn",
|
|
18
|
+
/** 断言与其内部条件矛盾时表达式永远无法按预期匹配。 */
|
|
14
19
|
"regexp/no-contradiction-with-assertion": "error",
|
|
20
|
+
/** 字符类中的重复字符通常表示拼写或范围设计错误。 */
|
|
15
21
|
"regexp/no-dupe-characters-character-class": "error",
|
|
22
|
+
/** 重复或被完全覆盖的分支通常表示条件遗漏。 */
|
|
16
23
|
"regexp/no-dupe-disjunctions": "error",
|
|
24
|
+
/** 空分支可能是有意匹配空字符串,也可能是遗漏,因此只警告。 */
|
|
17
25
|
"regexp/no-empty-alternative": "warn",
|
|
26
|
+
/** 空捕获组不会捕获有效内容,通常属于表达式残留。 */
|
|
18
27
|
"regexp/no-empty-capturing-group": "error",
|
|
28
|
+
/** 空字符类永远无法匹配字符。 */
|
|
19
29
|
"regexp/no-empty-character-class": "error",
|
|
30
|
+
/** 空分组通常表示编辑遗漏。 */
|
|
20
31
|
"regexp/no-empty-group": "error",
|
|
32
|
+
/** 空前后查找不会表达有效约束。 */
|
|
21
33
|
"regexp/no-empty-lookarounds-assertion": "error",
|
|
34
|
+
/** 多余嵌套断言可能改变捕获或回溯边界,应视为结构错误。 */
|
|
22
35
|
"regexp/no-extra-lookaround-assertions": "error",
|
|
36
|
+
/** 检查 `RegExp` 构造器字符串和字面量中的无效语法及标志。 */
|
|
23
37
|
"regexp/no-invalid-regexp": "error",
|
|
38
|
+
/** 不可见字符容易造成审查遗漏和匹配异常。 */
|
|
24
39
|
"regexp/no-invisible-character": "error",
|
|
40
|
+
/** 捕获组边界具有误导性时,反向引用和替换结果可能不符合预期。 */
|
|
25
41
|
"regexp/no-misleading-capturing-group": "error",
|
|
42
|
+
/** Unicode 字符的视觉形式与代码点不一致时容易产生错误匹配。 */
|
|
26
43
|
"regexp/no-misleading-unicode-character": "error",
|
|
44
|
+
/** `replaceAll` 等全局操作缺少 `g` 标志时会在运行时失败或行为不一致。 */
|
|
27
45
|
"regexp/no-missing-g-flag": "error",
|
|
46
|
+
/** 禁止 JavaScript 不支持的非标准正则标志。 */
|
|
28
47
|
"regexp/no-non-standard-flag": "error",
|
|
48
|
+
/** 可选断言几乎总能通过,通常无法表达预期约束。 */
|
|
29
49
|
"regexp/no-optional-assertion": "error",
|
|
50
|
+
/** 阻止可被构造输入触发的超线性回溯,降低拒绝服务风险。 */
|
|
30
51
|
"regexp/no-super-linear-backtracking": "error",
|
|
52
|
+
/** 无效反向引用无法引用预期捕获内容。 */
|
|
31
53
|
"regexp/no-useless-backreference": "error",
|
|
54
|
+
/** 替换字符串引用不存在的捕获组时不会得到预期结果。 */
|
|
32
55
|
"regexp/no-useless-dollar-replacements": "error",
|
|
56
|
+
/** 零次量词会让对应模式永远不参与匹配,通常是边界笔误。 */
|
|
33
57
|
"regexp/no-zero-quantifier": "error",
|
|
58
|
+
/** 使用严格模式检查容易产生歧义或跨引擎差异的正则结构。 */
|
|
34
59
|
"regexp/strict": "error"
|
|
35
60
|
};
|
|
36
61
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regexp.mjs","names":[],"sources":["../../src/rules/regexp.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 正则表达式正确性与安全规则。\n *\n * @remarks\n * 不直接继承 regexp 插件的完整推荐预置,避免把字符类简写、量词写法和标志排序等\n * 纯偏好作为阻断错误。这里显式维护无效结构、潜在错误和灾难性回溯检查。\n */\nexport const regexpRules = {\n\t
|
|
1
|
+
{"version":3,"file":"regexp.mjs","names":[],"sources":["../../src/rules/regexp.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 正则表达式正确性与安全规则。\n *\n * @remarks\n * 不直接继承 regexp 插件的完整推荐预置,避免把字符类简写、量词写法和标志排序等\n * 纯偏好作为阻断错误。这里显式维护无效结构、潜在错误和灾难性回溯检查。\n */\nexport const regexpRules = {\n\t/** 控制字符通常来自复制或编码错误,要求使用可识别的转义写法。 */\n\t\"no-control-regex\": \"error\",\n\t/** Unicode 组合字符可能让字符类匹配结果与视觉含义不一致。 */\n\t\"no-misleading-character-class\": \"error\",\n\t/** 正则中的连续普通空格容易漏看,使用量词或明确转义更清晰。 */\n\t\"no-regex-spaces\": \"error\",\n\n\t/** 相邻量词的作用范围容易被误读,保留警告供人工复核。 */\n\t\"regexp/confusing-quantifier\": \"warn\",\n\t/** 断言与其内部条件矛盾时表达式永远无法按预期匹配。 */\n\t\"regexp/no-contradiction-with-assertion\": \"error\",\n\t/** 字符类中的重复字符通常表示拼写或范围设计错误。 */\n\t\"regexp/no-dupe-characters-character-class\": \"error\",\n\t/** 重复或被完全覆盖的分支通常表示条件遗漏。 */\n\t\"regexp/no-dupe-disjunctions\": \"error\",\n\t/** 空分支可能是有意匹配空字符串,也可能是遗漏,因此只警告。 */\n\t\"regexp/no-empty-alternative\": \"warn\",\n\t/** 空捕获组不会捕获有效内容,通常属于表达式残留。 */\n\t\"regexp/no-empty-capturing-group\": \"error\",\n\t/** 空字符类永远无法匹配字符。 */\n\t\"regexp/no-empty-character-class\": \"error\",\n\t/** 空分组通常表示编辑遗漏。 */\n\t\"regexp/no-empty-group\": \"error\",\n\t/** 空前后查找不会表达有效约束。 */\n\t\"regexp/no-empty-lookarounds-assertion\": \"error\",\n\t/** 多余嵌套断言可能改变捕获或回溯边界,应视为结构错误。 */\n\t\"regexp/no-extra-lookaround-assertions\": \"error\",\n\t/** 检查 `RegExp` 构造器字符串和字面量中的无效语法及标志。 */\n\t\"regexp/no-invalid-regexp\": \"error\",\n\t/** 不可见字符容易造成审查遗漏和匹配异常。 */\n\t\"regexp/no-invisible-character\": \"error\",\n\t/** 捕获组边界具有误导性时,反向引用和替换结果可能不符合预期。 */\n\t\"regexp/no-misleading-capturing-group\": \"error\",\n\t/** Unicode 字符的视觉形式与代码点不一致时容易产生错误匹配。 */\n\t\"regexp/no-misleading-unicode-character\": \"error\",\n\t/** `replaceAll` 等全局操作缺少 `g` 标志时会在运行时失败或行为不一致。 */\n\t\"regexp/no-missing-g-flag\": \"error\",\n\t/** 禁止 JavaScript 不支持的非标准正则标志。 */\n\t\"regexp/no-non-standard-flag\": \"error\",\n\t/** 可选断言几乎总能通过,通常无法表达预期约束。 */\n\t\"regexp/no-optional-assertion\": \"error\",\n\t/** 阻止可被构造输入触发的超线性回溯,降低拒绝服务风险。 */\n\t\"regexp/no-super-linear-backtracking\": \"error\",\n\t/** 无效反向引用无法引用预期捕获内容。 */\n\t\"regexp/no-useless-backreference\": \"error\",\n\t/** 替换字符串引用不存在的捕获组时不会得到预期结果。 */\n\t\"regexp/no-useless-dollar-replacements\": \"error\",\n\t/** 零次量词会让对应模式永远不参与匹配,通常是边界笔误。 */\n\t\"regexp/no-zero-quantifier\": \"error\",\n\t/** 使用严格模式检查容易产生歧义或跨引擎差异的正则结构。 */\n\t\"regexp/strict\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,cAAc;;CAE1B,oBAAoB;;CAEpB,iCAAiC;;CAEjC,mBAAmB;;CAGnB,+BAA+B;;CAE/B,0CAA0C;;CAE1C,6CAA6C;;CAE7C,+BAA+B;;CAE/B,+BAA+B;;CAE/B,mCAAmC;;CAEnC,mCAAmC;;CAEnC,yBAAyB;;CAEzB,yCAAyC;;CAEzC,yCAAyC;;CAEzC,4BAA4B;;CAE5B,iCAAiC;;CAEjC,wCAAwC;;CAExC,0CAA0C;;CAE1C,4BAA4B;;CAE5B,+BAA+B;;CAE/B,gCAAgC;;CAEhC,uCAAuC;;CAEvC,mCAAmC;;CAEnC,yCAAyC;;CAEzC,6BAA6B;;CAE7B,iBAAiB;AAClB"}
|
|
@@ -3,16 +3,18 @@
|
|
|
3
3
|
* package.json 属性排序规则。
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
|
-
* `[高影响][可自动修复]
|
|
6
|
+
* `[高影响][可自动修复]`:完整项目配置默认启用,首次修复可能重排大量字段。
|
|
7
7
|
* 注意:这里故意不排序 `exports` 内部键;条件导出的键顺序具有模块解析语义。
|
|
8
8
|
*/
|
|
9
9
|
export declare const packageJsonSortRules: {
|
|
10
|
+
/** [高影响][可自动修复] npm 的 `files` 清单按字母排序;数组顺序不改打包集合,但首次 diff 较大。 */
|
|
10
11
|
"jsonc/sort-array-values": ["error", {
|
|
11
12
|
order: {
|
|
12
13
|
type: "asc";
|
|
13
14
|
};
|
|
14
15
|
pathPattern: string;
|
|
15
16
|
}];
|
|
17
|
+
/** [高影响][可自动修复] 仅排序明确安全的 `package.json` 区域,不进入 `exports` 条件对象。 */
|
|
16
18
|
"jsonc/sort-keys": ["error", {
|
|
17
19
|
order: string[];
|
|
18
20
|
pathPattern: string;
|
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
* package.json 属性排序规则。
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
|
-
* `[高影响][可自动修复]
|
|
6
|
+
* `[高影响][可自动修复]`:完整项目配置默认启用,首次修复可能重排大量字段。
|
|
7
7
|
* 注意:这里故意不排序 `exports` 内部键;条件导出的键顺序具有模块解析语义。
|
|
8
8
|
*/
|
|
9
9
|
const packageJsonSortRules = {
|
|
10
|
+
/** [高影响][可自动修复] npm 的 `files` 清单按字母排序;数组顺序不改打包集合,但首次 diff 较大。 */
|
|
10
11
|
"jsonc/sort-array-values": ["error", {
|
|
11
12
|
order: { type: "asc" },
|
|
12
13
|
pathPattern: "^files$"
|
|
13
14
|
}],
|
|
15
|
+
/** [高影响][可自动修复] 仅排序明确安全的 `package.json` 区域,不进入 `exports` 条件对象。 */
|
|
14
16
|
"jsonc/sort-keys": [
|
|
15
17
|
"error",
|
|
16
18
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort-package.mjs","names":[],"sources":["../../src/rules/sort-package.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * package.json 属性排序规则。\n *\n * @remarks\n * `[高影响][可自动修复]
|
|
1
|
+
{"version":3,"file":"sort-package.mjs","names":[],"sources":["../../src/rules/sort-package.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * package.json 属性排序规则。\n *\n * @remarks\n * `[高影响][可自动修复]`:完整项目配置默认启用,首次修复可能重排大量字段。\n * 注意:这里故意不排序 `exports` 内部键;条件导出的键顺序具有模块解析语义。\n */\nexport const packageJsonSortRules = {\n\t/** [高影响][可自动修复] npm 的 `files` 清单按字母排序;数组顺序不改打包集合,但首次 diff 较大。 */\n\t\"jsonc/sort-array-values\": [\n\t\t\"error\",\n\t\t{\n\t\t\torder: { type: \"asc\" },\n\t\t\tpathPattern: \"^files$\",\n\t\t},\n\t],\n\t/** [高影响][可自动修复] 仅排序明确安全的 `package.json` 区域,不进入 `exports` 条件对象。 */\n\t\"jsonc/sort-keys\": [\n\t\t\"error\",\n\t\t// 根字段按常见阅读顺序组织,减少不同项目之间的清单噪声。\n\t\t{\n\t\t\torder: [\n\t\t\t\t\"name\",\n\t\t\t\t\"version\",\n\t\t\t\t\"private\",\n\t\t\t\t\"packageManager\",\n\t\t\t\t\"description\",\n\t\t\t\t\"type\",\n\t\t\t\t\"keywords\",\n\t\t\t\t\"license\",\n\t\t\t\t\"homepage\",\n\t\t\t\t\"bugs\",\n\t\t\t\t\"repository\",\n\t\t\t\t\"author\",\n\t\t\t\t\"contributors\",\n\t\t\t\t\"funding\",\n\t\t\t\t\"files\",\n\t\t\t\t\"main\",\n\t\t\t\t\"module\",\n\t\t\t\t\"types\",\n\t\t\t\t\"exports\",\n\t\t\t\t\"typesVersions\",\n\t\t\t\t\"sideEffects\",\n\t\t\t\t\"unpkg\",\n\t\t\t\t\"jsdelivr\",\n\t\t\t\t\"browser\",\n\t\t\t\t\"bin\",\n\t\t\t\t\"man\",\n\t\t\t\t\"directories\",\n\t\t\t\t\"publishConfig\",\n\t\t\t\t\"scripts\",\n\t\t\t\t\"peerDependencies\",\n\t\t\t\t\"peerDependenciesMeta\",\n\t\t\t\t\"optionalDependencies\",\n\t\t\t\t\"dependencies\",\n\t\t\t\t\"devDependencies\",\n\t\t\t\t\"engines\",\n\t\t\t\t\"config\",\n\t\t\t\t\"overrides\",\n\t\t\t\t\"pnpm\",\n\t\t\t\t\"husky\",\n\t\t\t\t\"lint-staged\",\n\t\t\t\t\"eslintConfig\",\n\t\t\t\t\"prettier\",\n\t\t\t],\n\t\t\tpathPattern: \"^$\",\n\t\t},\n\t\t// 各类依赖映射按包名排序,方便发现重复或异常依赖。\n\t\t{\n\t\t\torder: { type: \"asc\" },\n\t\t\tpathPattern: \"^(?:dev|peer|optional|bundled)?[Dd]ependencies(Meta)?$\",\n\t\t},\n\t\t// overrides/resolutions 只排序直接键;修改前仍应关注包管理器的模式匹配语义。\n\t\t{\n\t\t\torder: { type: \"asc\" },\n\t\t\tpathPattern: \"^(?:resolutions|overrides|pnpm.overrides)$\",\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,uBAAuB;;CAEnC,2BAA2B,CAC1B,SACA;EACC,OAAO,EAAE,MAAM,MAAM;EACrB,aAAa;CACd,CACD;;CAEA,mBAAmB;EAClB;EAEA;GACC,OAAO;IACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GACA,aAAa;EACd;EAEA;GACC,OAAO,EAAE,MAAM,MAAM;GACrB,aAAa;EACd;EAEA;GACC,OAAO,EAAE,MAAM,MAAM;GACrB,aAAa;EACd;CACD;AACD"}
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* tsconfig.json 属性排序规则。
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
|
-
* `[高影响][可自动修复]
|
|
6
|
+
* `[高影响][可自动修复]`:完整项目配置默认启用,首次修复会重排大量字段,
|
|
7
7
|
* 但只改变 JSONC 的阅读顺序,不改变 TypeScript 编译选项值。
|
|
8
8
|
*/
|
|
9
9
|
export declare const tsconfigJsonSortRules: {
|
|
10
|
+
/** `tsconfig.json` 是 JSONC,注释用于解释不直观的编译器取舍,必须保留。 */
|
|
10
11
|
"jsonc/no-comments": "off";
|
|
12
|
+
/** [高影响][可自动修复] 只调整顶层和 `compilerOptions` 的键顺序,不改写任何选项值或数组。 */
|
|
11
13
|
"jsonc/sort-keys": ["error", {
|
|
12
14
|
order: string[];
|
|
13
15
|
pathPattern: string;
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* tsconfig.json 属性排序规则。
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
|
-
* `[高影响][可自动修复]
|
|
6
|
+
* `[高影响][可自动修复]`:完整项目配置默认启用,首次修复会重排大量字段,
|
|
7
7
|
* 但只改变 JSONC 的阅读顺序,不改变 TypeScript 编译选项值。
|
|
8
8
|
*/
|
|
9
9
|
const tsconfigJsonSortRules = {
|
|
10
|
+
/** `tsconfig.json` 是 JSONC,注释用于解释不直观的编译器取舍,必须保留。 */
|
|
10
11
|
"jsonc/no-comments": "off",
|
|
12
|
+
/** [高影响][可自动修复] 只调整顶层和 `compilerOptions` 的键顺序,不改写任何选项值或数组。 */
|
|
11
13
|
"jsonc/sort-keys": [
|
|
12
14
|
"error",
|
|
13
15
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort-tsconfig.mjs","names":[],"sources":["../../src/rules/sort-tsconfig.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * tsconfig.json 属性排序规则。\n *\n * @remarks\n * `[高影响][可自动修复]
|
|
1
|
+
{"version":3,"file":"sort-tsconfig.mjs","names":[],"sources":["../../src/rules/sort-tsconfig.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * tsconfig.json 属性排序规则。\n *\n * @remarks\n * `[高影响][可自动修复]`:完整项目配置默认启用,首次修复会重排大量字段,\n * 但只改变 JSONC 的阅读顺序,不改变 TypeScript 编译选项值。\n */\nexport const tsconfigJsonSortRules = {\n\t/** `tsconfig.json` 是 JSONC,注释用于解释不直观的编译器取舍,必须保留。 */\n\t\"jsonc/no-comments\": \"off\",\n\n\t/** [高影响][可自动修复] 只调整顶层和 `compilerOptions` 的键顺序,不改写任何选项值或数组。 */\n\t\"jsonc/sort-keys\": [\n\t\t\"error\",\n\t\t// 顶层按继承、选项、项目引用和文件范围的阅读顺序排列。\n\t\t{\n\t\t\torder: [\"extends\", \"compilerOptions\", \"references\", \"files\", \"include\", \"exclude\"],\n\t\t\tpathPattern: \"^$\",\n\t\t},\n\t\t// compilerOptions 的顺序跟随 TypeScript 文档主题,便于检索和代码审查。\n\t\t{\n\t\t\torder: [\n\t\t\t\t/* Projects */\n\t\t\t\t\"incremental\",\n\t\t\t\t\"composite\",\n\t\t\t\t\"tsBuildInfoFile\",\n\t\t\t\t\"disableSourceOfProjectReferenceRedirect\",\n\t\t\t\t\"disableSolutionSearching\",\n\t\t\t\t\"disableReferencedProjectLoad\",\n\t\t\t\t/* Language and Environment */\n\t\t\t\t\"target\",\n\t\t\t\t\"jsx\",\n\t\t\t\t\"jsxFactory\",\n\t\t\t\t\"jsxFragmentFactory\",\n\t\t\t\t\"jsxImportSource\",\n\t\t\t\t\"lib\",\n\t\t\t\t\"moduleDetection\",\n\t\t\t\t\"noLib\",\n\t\t\t\t\"reactNamespace\",\n\t\t\t\t\"useDefineForClassFields\",\n\t\t\t\t\"emitDecoratorMetadata\",\n\t\t\t\t\"experimentalDecorators\",\n\t\t\t\t/* Modules */\n\t\t\t\t\"baseUrl\",\n\t\t\t\t\"rootDir\",\n\t\t\t\t\"rootDirs\",\n\t\t\t\t\"customConditions\",\n\t\t\t\t\"module\",\n\t\t\t\t\"moduleResolution\",\n\t\t\t\t\"moduleSuffixes\",\n\t\t\t\t\"noResolve\",\n\t\t\t\t\"paths\",\n\t\t\t\t\"resolveJsonModule\",\n\t\t\t\t\"resolvePackageJsonExports\",\n\t\t\t\t\"resolvePackageJsonImports\",\n\t\t\t\t\"typeRoots\",\n\t\t\t\t\"types\",\n\t\t\t\t\"allowArbitraryExtensions\",\n\t\t\t\t\"allowImportingTsExtensions\",\n\t\t\t\t\"allowUmdGlobalAccess\",\n\t\t\t\t/* JavaScript Support */\n\t\t\t\t\"allowJs\",\n\t\t\t\t\"checkJs\",\n\t\t\t\t\"maxNodeModuleJsDepth\",\n\t\t\t\t/* Type Checking */\n\t\t\t\t\"strict\",\n\t\t\t\t\"strictBindCallApply\",\n\t\t\t\t\"strictFunctionTypes\",\n\t\t\t\t\"strictNullChecks\",\n\t\t\t\t\"strictPropertyInitialization\",\n\t\t\t\t\"allowUnreachableCode\",\n\t\t\t\t\"allowUnusedLabels\",\n\t\t\t\t\"alwaysStrict\",\n\t\t\t\t\"exactOptionalPropertyTypes\",\n\t\t\t\t\"noFallthroughCasesInSwitch\",\n\t\t\t\t\"noImplicitAny\",\n\t\t\t\t\"noImplicitOverride\",\n\t\t\t\t\"noImplicitReturns\",\n\t\t\t\t\"noImplicitThis\",\n\t\t\t\t\"noPropertyAccessFromIndexSignature\",\n\t\t\t\t\"noUncheckedIndexedAccess\",\n\t\t\t\t\"noUnusedLocals\",\n\t\t\t\t\"noUnusedParameters\",\n\t\t\t\t\"useUnknownInCatchVariables\",\n\t\t\t\t/* Emit */\n\t\t\t\t\"declaration\",\n\t\t\t\t\"declarationDir\",\n\t\t\t\t\"declarationMap\",\n\t\t\t\t\"downlevelIteration\",\n\t\t\t\t\"emitBOM\",\n\t\t\t\t\"emitDeclarationOnly\",\n\t\t\t\t\"importHelpers\",\n\t\t\t\t\"importsNotUsedAsValues\",\n\t\t\t\t\"inlineSourceMap\",\n\t\t\t\t\"inlineSources\",\n\t\t\t\t\"isolatedDeclarations\",\n\t\t\t\t\"mapRoot\",\n\t\t\t\t\"newLine\",\n\t\t\t\t\"noEmit\",\n\t\t\t\t\"noEmitHelpers\",\n\t\t\t\t\"noEmitOnError\",\n\t\t\t\t\"outDir\",\n\t\t\t\t\"outFile\",\n\t\t\t\t\"preserveConstEnums\",\n\t\t\t\t\"preserveValueImports\",\n\t\t\t\t\"removeComments\",\n\t\t\t\t\"sourceMap\",\n\t\t\t\t\"sourceRoot\",\n\t\t\t\t\"stripInternal\",\n\t\t\t\t/* Interop Constraints */\n\t\t\t\t\"allowSyntheticDefaultImports\",\n\t\t\t\t\"esModuleInterop\",\n\t\t\t\t\"forceConsistentCasingInFileNames\",\n\t\t\t\t\"isolatedModules\",\n\t\t\t\t\"preserveSymlinks\",\n\t\t\t\t\"verbatimModuleSyntax\",\n\t\t\t\t/* Completeness */\n\t\t\t\t\"skipDefaultLibCheck\",\n\t\t\t\t\"skipLibCheck\",\n\t\t\t],\n\t\t\tpathPattern: \"^compilerOptions$\",\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,wBAAwB;;CAEpC,qBAAqB;;CAGrB,mBAAmB;EAClB;EAEA;GACC,OAAO;IAAC;IAAW;IAAmB;IAAc;IAAS;IAAW;GAAS;GACjF,aAAa;EACd;EAEA;GACC,OAAO;IAEN;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;GACD;GACA,aAAa;EACd;CACD;AACD"}
|