@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.
Files changed (93) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/CONTRIBUTING.md +8 -7
  3. package/README.md +108 -236
  4. package/README.zh.md +105 -231
  5. package/SECURITY.md +4 -4
  6. package/dist/configs/angular.d.mts +6 -6
  7. package/dist/configs/angular.mjs +1 -1
  8. package/dist/configs/angular.mjs.map +1 -1
  9. package/dist/configs/common.d.mts +2 -1
  10. package/dist/configs/common.mjs.map +1 -1
  11. package/dist/configs/environment.d.mts +21 -11
  12. package/dist/configs/environment.mjs +25 -5
  13. package/dist/configs/environment.mjs.map +1 -1
  14. package/dist/configs/ignores.d.mts +3 -2
  15. package/dist/configs/ignores.mjs +4 -3
  16. package/dist/configs/ignores.mjs.map +1 -1
  17. package/dist/configs/import.d.mts +2 -1
  18. package/dist/configs/import.mjs.map +1 -1
  19. package/dist/configs/index.d.mts +5 -4
  20. package/dist/configs/index.mjs +3 -2
  21. package/dist/configs/javascript.d.mts +2 -1
  22. package/dist/configs/javascript.mjs.map +1 -1
  23. package/dist/configs/json.d.mts +5 -3
  24. package/dist/configs/json.mjs +5 -4
  25. package/dist/configs/json.mjs.map +1 -1
  26. package/dist/configs/lodash.d.mts +2 -1
  27. package/dist/configs/lodash.mjs.map +1 -1
  28. package/dist/configs/markdown.d.mts +2 -1
  29. package/dist/configs/markdown.mjs.map +1 -1
  30. package/dist/configs/prettier.d.mts +2 -1
  31. package/dist/configs/prettier.mjs +4 -1
  32. package/dist/configs/prettier.mjs.map +1 -1
  33. package/dist/configs/react.d.mts +7 -44
  34. package/dist/configs/react.mjs +7 -8
  35. package/dist/configs/react.mjs.map +1 -1
  36. package/dist/configs/regexp.d.mts +4 -4
  37. package/dist/configs/regexp.mjs +5 -4
  38. package/dist/configs/regexp.mjs.map +1 -1
  39. package/dist/configs/sort-package.d.mts +4 -3
  40. package/dist/configs/sort-package.mjs +2 -2
  41. package/dist/configs/sort-package.mjs.map +1 -1
  42. package/dist/configs/sort-tsconfig.d.mts +4 -2
  43. package/dist/configs/sort-tsconfig.mjs +2 -1
  44. package/dist/configs/sort-tsconfig.mjs.map +1 -1
  45. package/dist/configs/typescript.d.mts +9 -56
  46. package/dist/configs/typescript.mjs +20 -29
  47. package/dist/configs/typescript.mjs.map +1 -1
  48. package/dist/configs/uniapp.d.mts +17 -0
  49. package/dist/configs/uniapp.mjs +30 -0
  50. package/dist/configs/uniapp.mjs.map +1 -0
  51. package/dist/configs/vue.d.mts +5 -38
  52. package/dist/configs/vue.mjs +25 -35
  53. package/dist/configs/vue.mjs.map +1 -1
  54. package/dist/constants/index.d.mts +33 -1
  55. package/dist/constants/index.mjs +33 -1
  56. package/dist/constants/index.mjs.map +1 -1
  57. package/dist/index.d.mts +41 -208
  58. package/dist/index.mjs +58 -100
  59. package/dist/index.mjs.map +1 -1
  60. package/dist/rules/angular.d.mts +1 -1
  61. package/dist/rules/angular.mjs +1 -1
  62. package/dist/rules/angular.mjs.map +1 -1
  63. package/dist/rules/common.d.mts +2 -2
  64. package/dist/rules/common.mjs +2 -2
  65. package/dist/rules/common.mjs.map +1 -1
  66. package/dist/rules/import.mjs.map +1 -1
  67. package/dist/rules/index.d.mts +2 -1
  68. package/dist/rules/index.mjs +2 -1
  69. package/dist/rules/javascript.d.mts +10 -6
  70. package/dist/rules/javascript.mjs +12 -6
  71. package/dist/rules/javascript.mjs.map +1 -1
  72. package/dist/rules/react.d.mts +2 -3
  73. package/dist/rules/react.mjs +2 -3
  74. package/dist/rules/react.mjs.map +1 -1
  75. package/dist/rules/regexp.d.mts +38 -0
  76. package/dist/rules/regexp.mjs +39 -0
  77. package/dist/rules/regexp.mjs.map +1 -0
  78. package/dist/rules/sort-package.d.mts +1 -1
  79. package/dist/rules/sort-package.mjs +1 -1
  80. package/dist/rules/sort-package.mjs.map +1 -1
  81. package/dist/rules/sort-tsconfig.d.mts +1 -1
  82. package/dist/rules/sort-tsconfig.mjs +1 -1
  83. package/dist/rules/sort-tsconfig.mjs.map +1 -1
  84. package/dist/rules/typescript.d.mts +11 -3
  85. package/dist/rules/typescript.mjs +10 -4
  86. package/dist/rules/typescript.mjs.map +1 -1
  87. package/dist/rules/vue.d.mts +8 -2
  88. package/dist/rules/vue.mjs +8 -2
  89. package/dist/rules/vue.mjs.map +1 -1
  90. package/docs/engineering-audit.zh.md +53 -77
  91. package/docs/rules-risk.md +104 -101
  92. package/docs/rules-risk.zh.md +104 -105
  93. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"common.mjs","names":[],"sources":["../../src/rules/common.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。\n *\n * @remarks\n * 维护约定:每条本地覆写都要说明启用原因;可能造成大面积改动、采用成本或\n * 行为变化的规则使用 `[高影响]` 标记,并同步维护 `docs/rules-risk.zh.md`。\n */\nexport const commonRules = {\n\t// 要求数组回调在所有可到达分支返回值,避免 map/filter 等调用静默产生 undefined。\n\t\"array-callback-return\": \"error\",\n\t// 浏览器弹窗通常不适合生产代码;使用 warn 允许原型调试,同时确保发布前能够被发现。\n\t\"no-alert\": \"warn\",\n\t// switch 的 case 不创建词法作用域;要求用花括号包裹声明,避免跨 case 冲突。\n\t\"no-case-declarations\": \"error\",\n\t// 禁止反斜杠续行字符串,优先使用可读性更好的模板字符串。\n\t\"no-multi-str\": \"error\",\n\t// with 会让标识符解析不可预测,并且在严格模式和 ESM 中不可用。\n\t\"no-with\": \"error\",\n\t// 允许用 `void promise` 明确忽略 Promise,但禁止在普通表达式中滥用 void。\n\t\"no-void\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowAsStatement: true,\n\t\t},\n\t],\n\t// 要求严格相等;保留 `value == null` 同时判断 null/undefined 的常用写法。\n\teqeqeq: [\"error\", \"always\", { null: \"ignore\" }],\n\t// 幂运算统一使用 **,减少 Math.pow 嵌套并保持现代语法风格。\n\t\"prefer-exponentiation-operator\": \"error\",\n\t// 使用 Object.hasOwn,避免对象覆盖或缺少 hasOwnProperty 时产生异常。\n\t\"prefer-object-has-own\": \"error\",\n\n\t// [可自动修复] 声明间顺序交给 import-x;这里只排序同一 import 的成员。\n\t\"sort-imports\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tignoreCase: false,\n\t\t\tignoreDeclarationSort: true,\n\t\t\tignoreMemberSort: false,\n\t\t\tmemberSyntaxSortOrder: [\"none\", \"all\", \"multiple\", \"single\"],\n\t\t\tallowSeparatedGroups: false,\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,cAAc;CAE1B,yBAAyB;CAEzB,YAAY;CAEZ,wBAAwB;CAExB,gBAAgB;CAEhB,WAAW;CAEX,WAAW,CACV,SACA,EACC,kBAAkB,KACnB,CACD;CAEA,QAAQ;EAAC;EAAS;EAAU,EAAE,MAAM,SAAS;CAAC;CAE9C,kCAAkC;CAElC,yBAAyB;CAGzB,gBAAgB,CACf,QACA;EACC,YAAY;EACZ,uBAAuB;EACvB,kBAAkB;EAClB,uBAAuB;GAAC;GAAQ;GAAO;GAAY;EAAQ;EAC3D,sBAAsB;CACvB,CACD;AACD"}
1
+ {"version":3,"file":"common.mjs","names":[],"sources":["../../src/rules/common.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 跨 JavaScript、TypeScript 与 Vue 脚本生效的公共规则。\n *\n * @remarks\n * 默认规则面向 SDK、OA、Admin 与客户端项目使用同一套质量标准。这里只保留\n * 跨语言且误报较少的规则;纯格式和语法偏好交给 Prettier 或项目自行覆盖。\n */\nexport const commonRules = {\n\t// 要求数组回调在所有可到达分支返回值,避免 map/filter 等调用静默产生 undefined。\n\t\"array-callback-return\": \"error\",\n\t// 浏览器弹窗通常不适合生产代码;使用 warn 允许原型调试,同时确保发布前能够被发现。\n\t\"no-alert\": \"warn\",\n\t// switch 的 case 不创建词法作用域;要求用花括号包裹声明,避免跨 case 冲突。\n\t\"no-case-declarations\": \"error\",\n\t// 禁止反斜杠续行字符串,优先使用可读性更好的模板字符串。\n\t\"no-multi-str\": \"error\",\n\t// with 会让标识符解析不可预测,并且在严格模式和 ESM 中不可用。\n\t\"no-with\": \"error\",\n\t// 允许用 `void promise` 明确忽略 Promise,但禁止在普通表达式中滥用 void。\n\t\"no-void\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowAsStatement: true,\n\t\t},\n\t],\n\t// 要求严格相等;保留 `value == null` 同时判断 null/undefined 的常用写法。\n\teqeqeq: [\"error\", \"always\", { null: \"ignore\" }],\n\t// 使用幂运算符代替 Math.pow,使数学表达式更直接。\n\t\"prefer-exponentiation-operator\": \"error\",\n\t// 使用 Object.hasOwn 代替 obj.hasOwnProperty,兼容无原型对象以及同名方法被覆盖的对象。\n\t\"prefer-object-has-own\": \"error\",\n\t// 仅排序同一 import 声明中的导入成员;声明之间的分组和顺序交给 import-x/order。\n\t// 该规则无法自动修复成员顺序,使用 warn 避免历史代码因纯排序问题被立即阻断。\n\t\"sort-imports\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tignoreCase: false,\n\t\t\tignoreDeclarationSort: true,\n\t\t\tignoreMemberSort: false,\n\t\t\tmemberSyntaxSortOrder: [\"none\", \"all\", \"multiple\", \"single\"],\n\t\t\tallowSeparatedGroups: false,\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,cAAc;CAE1B,yBAAyB;CAEzB,YAAY;CAEZ,wBAAwB;CAExB,gBAAgB;CAEhB,WAAW;CAEX,WAAW,CACV,SACA,EACC,kBAAkB,KACnB,CACD;CAEA,QAAQ;EAAC;EAAS;EAAU,EAAE,MAAM,SAAS;CAAC;CAE9C,kCAAkC;CAElC,yBAAyB;CAGzB,gBAAgB,CACf,QACA;EACC,YAAY;EACZ,uBAAuB;EACvB,kBAAkB;EAClB,uBAAuB;GAAC;GAAQ;GAAO;GAAY;EAAQ;EAC3D,sBAAsB;CACvB,CACD;AACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"import.mjs","names":[],"sources":["../../src/rules/import.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 默认启用的模块导入正确性与排序规则。\n *\n * @remarks\n * 该记录补充 import-x 推荐预置,统一导入位置、重复导入及分组顺序。依赖项目 resolver\n * 的静态导出分析默认关闭,避免共享配置误判路径别名或自定义模块解析方式。\n */\nexport const importRules = {\n\t// import 必须位于其他语句之前,避免模块依赖散落在执行逻辑中。\n\t\"import-x/first\": \"error\",\n\t// 合并同一模块的重复 import,避免绑定分散或副作用被误读。\n\t\"import-x/no-duplicates\": \"error\",\n\t// [高影响][可自动修复] 按来源分组并排序;带副作用的裸 import 仅报告,人工移动前必须确认执行顺序。\n\t\"import-x/order\": [\n\t\t\"error\",\n\t\t{\n\t\t\tgroups: [\n\t\t\t\t// Node.js 内置模块\n\t\t\t\t\"builtin\",\n\t\t\t\t// 第三方依赖\n\t\t\t\t\"external\",\n\t\t\t\t// 项目内部别名模块\n\t\t\t\t\"internal\",\n\t\t\t\t// 父级目录模块\n\t\t\t\t\"parent\",\n\t\t\t\t// 同级目录模块\n\t\t\t\t\"sibling\",\n\t\t\t\t// 当前目录入口模块\n\t\t\t\t\"index\",\n\t\t\t\t// TypeScript import = require() 导入\n\t\t\t\t\"object\",\n\t\t\t\t// TypeScript 类型导入\n\t\t\t\t\"type\",\n\t\t\t\t// 无法识别分类的导入\n\t\t\t\t\"unknown\",\n\t\t\t],\n\t\t\t// 常用平台、框架和工具依赖优先于其他第三方依赖,并按声明顺序分层排序\n\t\t\tpathGroups: [\n\t\t\t\t// uni-app 平台生态\n\t\t\t\t{ pattern: \"@dcloudio/**\", group: \"external\", position: \"before\" },\n\t\t\t\t// Vue 核心、路由、状态管理和 VueUse 生态\n\t\t\t\t{ pattern: \"{vue,@vue/**,vue-router,pinia,@pinia/**,@vueuse/**}\", group: \"external\", position: \"before\" },\n\t\t\t\t// Element Plus 生态及其子路径\n\t\t\t\t{ pattern: \"{element-plus,element-plus/**,@element-plus/**}\", group: \"external\", position: \"before\" },\n\t\t\t\t// Fast Element Plus 生态及其子路径\n\t\t\t\t{ pattern: \"{fast-element-plus,fast-element-plus/**,@fast-element-plus/**}\", group: \"external\", position: \"before\" },\n\t\t\t\t// Fast China 组织包及其子路径\n\t\t\t\t{ pattern: \"@fast-china/**\", group: \"external\", position: \"before\" },\n\t\t\t\t// Lodash、lodash-es、lodash-unified 及其子路径\n\t\t\t\t{ pattern: \"lodash{,-es,-unified}{,/**}\", group: \"external\", position: \"before\" },\n\t\t\t],\n\t\t\t// 类型导入不参与 pathGroups 匹配,始终保留在 type 分组\n\t\t\tpathGroupsExcludedImportTypes: [\"type\"],\n\t\t\t// 所有 import 分组连续排列,不保留空行\n\t\t\t\"newlines-between\": \"never\",\n\t\t\t// 同一分组内按照模块路径字母升序排列\n\t\t\talphabetize: {\n\t\t\t\torder: \"asc\",\n\t\t\t\tcaseInsensitive: true,\n\t\t\t},\n\t\t\t// 对没有赋值给变量的副作用导入进行排序检查\n\t\t\twarnOnUnassignedImports: true,\n\t\t},\n\t],\n\t// [默认关闭] Vite/TypeScript 别名由项目解析器校验,避免共享配置绑定特定 resolver。\n\t\"import-x/no-unresolved\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,namespace 导出的静态分析容易产生误报。\n\t\"import-x/namespace\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,默认导出的静态分析容易产生误报。\n\t\"import-x/default\": \"off\",\n\t// [默认关闭] 不限制同时存在默认导出与相近命名导出的模块 API 风格。\n\t\"import-x/no-named-as-default\": \"off\",\n\t// [默认关闭] 不限制通过默认导入对象访问同名属性的项目 API 风格。\n\t\"import-x/no-named-as-default-member\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,命名导出的静态分析容易产生误报。\n\t\"import-x/named\": \"off\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,cAAc;CAE1B,kBAAkB;CAElB,0BAA0B;CAE1B,kBAAkB,CACjB,SACA;EACC,QAAQ;GAEP;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;EACD;EAEA,YAAY;GAEX;IAAE,SAAS;IAAgB,OAAO;IAAY,UAAU;GAAS;GAEjE;IAAE,SAAS;IAAuD,OAAO;IAAY,UAAU;GAAS;GAExG;IAAE,SAAS;IAAmD,OAAO;IAAY,UAAU;GAAS;GAEpG;IAAE,SAAS;IAAkE,OAAO;IAAY,UAAU;GAAS;GAEnH;IAAE,SAAS;IAAkB,OAAO;IAAY,UAAU;GAAS;GAEnE;IAAE,SAAS;IAA+B,OAAO;IAAY,UAAU;GAAS;EACjF;EAEA,+BAA+B,CAAC,MAAM;EAEtC,oBAAoB;EAEpB,aAAa;GACZ,OAAO;GACP,iBAAiB;EAClB;EAEA,yBAAyB;CAC1B,CACD;CAEA,0BAA0B;CAE1B,sBAAsB;CAEtB,oBAAoB;CAEpB,gCAAgC;CAEhC,uCAAuC;CAEvC,kBAAkB;AACnB"}
1
+ {"version":3,"file":"import.mjs","names":[],"sources":["../../src/rules/import.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * 默认启用的模块导入正确性与排序规则。\n *\n * @remarks\n * 该记录补充 import-x 推荐预置,统一导入位置、重复导入及分组顺序。依赖项目 resolver\n * 的静态导出分析默认关闭,避免共享配置误判路径别名或自定义模块解析方式。\n */\nexport const importRules = {\n\t// import 必须位于其他语句之前,避免模块依赖散落在执行逻辑中。\n\t\"import-x/first\": \"error\",\n\t// 合并同一模块的重复 import,避免绑定分散或副作用被误读。\n\t\"import-x/no-duplicates\": \"error\",\n\t// 按来源分组并排序,保持所有项目一致的模块结构。\n\t\"import-x/order\": [\n\t\t\"error\",\n\t\t{\n\t\t\tgroups: [\n\t\t\t\t// Node.js 内置模块\n\t\t\t\t\"builtin\",\n\t\t\t\t// 第三方依赖\n\t\t\t\t\"external\",\n\t\t\t\t// 项目内部别名模块\n\t\t\t\t\"internal\",\n\t\t\t\t// 父级目录模块\n\t\t\t\t\"parent\",\n\t\t\t\t// 同级目录模块\n\t\t\t\t\"sibling\",\n\t\t\t\t// 当前目录入口模块\n\t\t\t\t\"index\",\n\t\t\t\t// TypeScript import = require() 导入\n\t\t\t\t\"object\",\n\t\t\t\t// TypeScript 类型导入\n\t\t\t\t\"type\",\n\t\t\t\t// 无法识别分类的导入\n\t\t\t\t\"unknown\",\n\t\t\t],\n\t\t\t// 常用平台、框架和工具依赖优先于其他第三方依赖,并按声明顺序分层排序\n\t\t\tpathGroups: [\n\t\t\t\t// uni-app 平台生态\n\t\t\t\t{ pattern: \"@dcloudio/**\", group: \"external\", position: \"before\" },\n\t\t\t\t// Vue 核心、路由、状态管理和 VueUse 生态\n\t\t\t\t{ pattern: \"{vue,@vue/**,vue-router,pinia,@pinia/**,@vueuse/**}\", group: \"external\", position: \"before\" },\n\t\t\t\t// Element Plus 生态及其子路径\n\t\t\t\t{ pattern: \"{element-plus,element-plus/**,@element-plus/**}\", group: \"external\", position: \"before\" },\n\t\t\t\t// Fast Element Plus 生态及其子路径\n\t\t\t\t{ pattern: \"{fast-element-plus,fast-element-plus/**,@fast-element-plus/**}\", group: \"external\", position: \"before\" },\n\t\t\t\t// Fast China 组织包及其子路径\n\t\t\t\t{ pattern: \"@fast-china/**\", group: \"external\", position: \"before\" },\n\t\t\t\t// Lodash、lodash-es、lodash-unified 及其子路径\n\t\t\t\t{ pattern: \"lodash{,-es,-unified}{,/**}\", group: \"external\", position: \"before\" },\n\t\t\t],\n\t\t\t// 类型导入不参与 pathGroups 匹配,始终保留在 type 分组\n\t\t\tpathGroupsExcludedImportTypes: [\"type\"],\n\t\t\t// 所有 import 分组连续排列,不保留空行\n\t\t\t\"newlines-between\": \"never\",\n\t\t\t// 同一分组内按照模块路径字母升序排列\n\t\t\talphabetize: {\n\t\t\t\torder: \"asc\",\n\t\t\t\tcaseInsensitive: true,\n\t\t\t},\n\t\t\t// 副作用导入同样参与检查;修复前必须确认样式、polyfill 和注册器执行顺序\n\t\t\twarnOnUnassignedImports: true,\n\t\t},\n\t],\n\t// [默认关闭] Vite/TypeScript 别名由项目解析器校验,避免共享配置绑定特定 resolver。\n\t\"import-x/no-unresolved\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,namespace 导出的静态分析容易产生误报。\n\t\"import-x/namespace\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,默认导出的静态分析容易产生误报。\n\t\"import-x/default\": \"off\",\n\t// [默认关闭] 不限制同时存在默认导出与相近命名导出的模块 API 风格。\n\t\"import-x/no-named-as-default\": \"off\",\n\t// [默认关闭] 不限制通过默认导入对象访问同名属性的项目 API 风格。\n\t\"import-x/no-named-as-default-member\": \"off\",\n\t// [默认关闭] 未配置 resolver 时,命名导出的静态分析容易产生误报。\n\t\"import-x/named\": \"off\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,cAAc;CAE1B,kBAAkB;CAElB,0BAA0B;CAE1B,kBAAkB,CACjB,SACA;EACC,QAAQ;GAEP;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;GAEA;EACD;EAEA,YAAY;GAEX;IAAE,SAAS;IAAgB,OAAO;IAAY,UAAU;GAAS;GAEjE;IAAE,SAAS;IAAuD,OAAO;IAAY,UAAU;GAAS;GAExG;IAAE,SAAS;IAAmD,OAAO;IAAY,UAAU;GAAS;GAEpG;IAAE,SAAS;IAAkE,OAAO;IAAY,UAAU;GAAS;GAEnH;IAAE,SAAS;IAAkB,OAAO;IAAY,UAAU;GAAS;GAEnE;IAAE,SAAS;IAA+B,OAAO;IAAY,UAAU;GAAS;EACjF;EAEA,+BAA+B,CAAC,MAAM;EAEtC,oBAAoB;EAEpB,aAAa;GACZ,OAAO;GACP,iBAAiB;EAClB;EAEA,yBAAyB;CAC1B,CACD;CAEA,0BAA0B;CAE1B,sBAAsB;CAEtB,oBAAoB;CAEpB,gCAAgC;CAEhC,uCAAuC;CAEvC,kBAAkB;AACnB"}
@@ -5,8 +5,9 @@ import { importRules } from "./import.mjs";
5
5
  import { javascriptRules } from "./javascript.mjs";
6
6
  import { preferLodashRules, preferLodashUnifiedRules } from "./lodash.mjs";
7
7
  import { reactRules } from "./react.mjs";
8
+ import { regexpRules } from "./regexp.mjs";
8
9
  import { packageJsonSortRules } from "./sort-package.mjs";
9
10
  import { tsconfigJsonSortRules } from "./sort-tsconfig.mjs";
10
11
  import { typescriptRules, typescriptTypeCheckedRules } from "./typescript.mjs";
11
12
  import { vueRules } from "./vue.mjs";
12
- export { type RuleOptions, angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules };
13
+ export { type RuleOptions, angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, regexpRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules };
@@ -4,8 +4,9 @@ import { importRules } from "./import.mjs";
4
4
  import { javascriptRules } from "./javascript.mjs";
5
5
  import { preferLodashRules, preferLodashUnifiedRules } from "./lodash.mjs";
6
6
  import { reactRules } from "./react.mjs";
7
+ import { regexpRules } from "./regexp.mjs";
7
8
  import { packageJsonSortRules } from "./sort-package.mjs";
8
9
  import { tsconfigJsonSortRules } from "./sort-tsconfig.mjs";
9
10
  import { typescriptRules, typescriptTypeCheckedRules } from "./typescript.mjs";
10
11
  import { vueRules } from "./vue.mjs";
11
- export { angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules };
12
+ export { angularRules, angularTemplateAccessibilityRules, angularTemplateRules, commonRules, importRules, javascriptRules, packageJsonSortRules, preferLodashRules, preferLodashUnifiedRules, reactRules, regexpRules, tsconfigJsonSortRules, typescriptRules, typescriptTypeCheckedRules, vueRules };
@@ -3,9 +3,13 @@
3
3
  * JavaScript 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * 高影响规则的解释与关闭方式见 `docs/rules-risk.zh.md`。
6
+ * `@eslint/js` 推荐预置负责基础正确性。本记录补充命名、声明顺序和现代语法约定,
7
+ * 供 SDK、管理端和客户端共同使用。
7
8
  */
8
9
  declare const javascriptRules: {
10
+ camelcase: ["error", {
11
+ properties: "never";
12
+ }];
9
13
  "no-console": ["warn", {
10
14
  allow: [string, string];
11
15
  }];
@@ -13,7 +17,7 @@ declare const javascriptRules: {
13
17
  "no-constant-condition": ["error", {
14
18
  checkLoops: false;
15
19
  }];
16
- "no-restricted-syntax": ["error", string];
20
+ "no-restricted-syntax": ["error", string, string];
17
21
  "no-var": "error";
18
22
  "no-empty": ["error", {
19
23
  allowEmptyCatch: true;
@@ -28,14 +32,14 @@ declare const javascriptRules: {
28
32
  destructuring: "all";
29
33
  ignoreReadBeforeAssign: true;
30
34
  }];
31
- "prefer-arrow-callback": ["error", {
32
- allowNamedFunctions: false;
33
- allowUnboundThis: true;
34
- }];
35
35
  "object-shorthand": ["error", "always", {
36
36
  ignoreConstructors: false;
37
37
  avoidQuotes: true;
38
38
  }];
39
+ "prefer-arrow-callback": ["error", {
40
+ allowNamedFunctions: false;
41
+ allowUnboundThis: true;
42
+ }];
39
43
  "logical-assignment-operators": ["error", "always", {
40
44
  enforceForIfStatements: true;
41
45
  }];
@@ -3,13 +3,19 @@
3
3
  * JavaScript 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * 高影响规则的解释与关闭方式见 `docs/rules-risk.zh.md`。
6
+ * `@eslint/js` 推荐预置负责基础正确性。本记录补充命名、声明顺序和现代语法约定,
7
+ * 供 SDK、管理端和客户端共同使用。
7
8
  */
8
9
  const javascriptRules = {
10
+ camelcase: ["error", { properties: "never" }],
9
11
  "no-console": ["warn", { allow: ["warn", "error"] }],
10
12
  "no-debugger": "error",
11
13
  "no-constant-condition": ["error", { checkLoops: false }],
12
- "no-restricted-syntax": ["error", "LabeledStatement"],
14
+ "no-restricted-syntax": [
15
+ "error",
16
+ "LabeledStatement",
17
+ "WithStatement"
18
+ ],
13
19
  "no-var": "error",
14
20
  "no-empty": ["error", { allowEmptyCatch: true }],
15
21
  "no-irregular-whitespace": "error",
@@ -22,10 +28,6 @@ const javascriptRules = {
22
28
  destructuring: "all",
23
29
  ignoreReadBeforeAssign: true
24
30
  }],
25
- "prefer-arrow-callback": ["error", {
26
- allowNamedFunctions: false,
27
- allowUnboundThis: true
28
- }],
29
31
  "object-shorthand": [
30
32
  "error",
31
33
  "always",
@@ -34,6 +36,10 @@ const javascriptRules = {
34
36
  avoidQuotes: true
35
37
  }
36
38
  ],
39
+ "prefer-arrow-callback": ["error", {
40
+ allowNamedFunctions: false,
41
+ allowUnboundThis: true
42
+ }],
37
43
  "logical-assignment-operators": [
38
44
  "error",
39
45
  "always",
@@ -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 * 高影响规则的解释与关闭方式见 `docs/rules-risk.zh.md`。\n */\nexport const javascriptRules = {\n\t// 控制台调用在应用源码中需要人工确认;warn/error 仍可用于必要的诊断输出。\n\t\"no-console\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tallow: [\"warn\", \"error\"],\n\t\t},\n\t],\n\t// 防止调试断点进入发布代码并中断运行。\n\t\"no-debugger\": \"error\",\n\t// 禁止意外的恒定条件,但允许 while (true) 等有明确退出逻辑的循环。\n\t\"no-constant-condition\": [\n\t\t\"error\",\n\t\t{\n\t\t\tcheckLoops: false,\n\t\t},\n\t],\n\t// [高影响] 禁止标签语句;包含多层循环 labeled break/continue 的代码需先重构控制流。\n\t\"no-restricted-syntax\": [\"error\", \"LabeledStatement\"],\n\t// [高影响][可自动修复] 使用 let/const 替代 var;首次启用需复核循环闭包和声明提升行为。\n\t\"no-var\": \"error\",\n\t// 禁止无说明的空代码块;允许用于“忽略失败”语义的空 catch。\n\t\"no-empty\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowEmptyCatch: true,\n\t\t},\n\t],\n\t// 拒绝肉眼难以识别、可能导致解析差异的非常规空白字符。\n\t\"no-irregular-whitespace\": \"error\",\n\t// 变量和类先声明后使用;函数声明允许提升。warn 保留函数式组合和循环依赖重构空间。\n\t\"no-use-before-define\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tclasses: true,\n\t\t\tfunctions: false,\n\t\t\tvariables: true,\n\t\t},\n\t],\n\t// [可自动修复] 能保持引用不变的变量优先使用 const;读取发生在赋值前时不做不可靠判断。\n\t\"prefer-const\": [\n\t\t\"warn\",\n\t\t{\n\t\t\tdestructuring: \"all\",\n\t\t\tignoreReadBeforeAssign: true,\n\t\t},\n\t],\n\t// [高影响][可自动修复] 优先箭头回调;批量修复后应复核 this/arguments 与函数名栈信息。\n\t\"prefer-arrow-callback\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowNamedFunctions: false,\n\t\t\tallowUnboundThis: true,\n\t\t},\n\t],\n\t// [可自动修复] 属性和值同名时使用对象简写,带引号键名不强制改写。\n\t\"object-shorthand\": [\n\t\t\"error\",\n\t\t\"always\",\n\t\t{\n\t\t\tignoreConstructors: false,\n\t\t\tavoidQuotes: true,\n\t\t},\n\t],\n\t// [高影响][可自动修复] 使用 ||=、&&=、??=;涉及 getter/Proxy 的代码应复核求值次数。\n\t\"logical-assignment-operators\": [\"error\", \"always\", { enforceForIfStatements: true }],\n\t// [可自动修复] 合并对象时优先展开语法,避免 Object.assign 的额外目标对象样板。\n\t\"prefer-object-spread\": \"error\",\n\t// 可变参数函数优先 rest 参数,避免依赖类数组 arguments;该规则只报告,不自动改写签名。\n\t\"prefer-rest-params\": \"error\",\n\t// 调用可迭代对象时优先 spread;该规则只报告,避免自动改变 apply 的 this 语义。\n\t\"prefer-spread\": \"error\",\n\t// [可自动修复] 字符串拼接优先模板字符串,便于阅读和多段插值。\n\t\"prefer-template\": \"error\",\n\t// 同一作用域禁止重复声明,避免后声明遮盖前声明。\n\t\"no-redeclare\": \"error\",\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;AAQA,MAAa,kBAAkB;CAE9B,cAAc,CACb,QACA,EACC,OAAO,CAAC,QAAQ,OAAO,EACxB,CACD;CAEA,eAAe;CAEf,yBAAyB,CACxB,SACA,EACC,YAAY,MACb,CACD;CAEA,wBAAwB,CAAC,SAAS,kBAAkB;CAEpD,UAAU;CAEV,YAAY,CACX,SACA,EACC,iBAAiB,KAClB,CACD;CAEA,2BAA2B;CAE3B,wBAAwB,CACvB,QACA;EACC,SAAS;EACT,WAAW;EACX,WAAW;CACZ,CACD;CAEA,gBAAgB,CACf,QACA;EACC,eAAe;EACf,wBAAwB;CACzB,CACD;CAEA,yBAAyB,CACxB,SACA;EACC,qBAAqB;EACrB,kBAAkB;CACnB,CACD;CAEA,oBAAoB;EACnB;EACA;EACA;GACC,oBAAoB;GACpB,aAAa;EACd;CACD;CAEA,gCAAgC;EAAC;EAAS;EAAU,EAAE,wBAAwB,KAAK;CAAC;CAEpF,wBAAwB;CAExB,sBAAsB;CAEtB,iBAAiB;CAEjB,mBAAmB;CAEnB,gBAAgB;AACjB"}
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"}
@@ -3,9 +3,8 @@
3
3
  * React 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * `@eslint-react/recommended*` 负责组件、JSX、DOM 与 Web API 正确性,
7
- * `react-hooks/recommended` 负责 React 官方 Hooks 与 Compiler 诊断。这里关闭两套
8
- * 预置间的重复诊断,并补充少量明确的 DOM 安全约束。
6
+ * `@eslint-react/recommended*` 负责组件、JSX、DOM 与 Web API 正确性,React 官方
7
+ * Hooks Recommended 负责 Hooks 与 React Compiler 正确性;这里仅消除重复报告并补充 DOM 规则。
9
8
  */
10
9
  declare const reactRules: {
11
10
  "@eslint-react/error-boundaries": "off";
@@ -3,9 +3,8 @@
3
3
  * React 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * `@eslint-react/recommended*` 负责组件、JSX、DOM 与 Web API 正确性,
7
- * `react-hooks/recommended` 负责 React 官方 Hooks 与 Compiler 诊断。这里关闭两套
8
- * 预置间的重复诊断,并补充少量明确的 DOM 安全约束。
6
+ * `@eslint-react/recommended*` 负责组件、JSX、DOM 与 Web API 正确性,React 官方
7
+ * Hooks Recommended 负责 Hooks 与 React Compiler 正确性;这里仅消除重复报告并补充 DOM 规则。
9
8
  */
10
9
  const reactRules = {
11
10
  "@eslint-react/error-boundaries": "off",
@@ -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 正确性,\n * `react-hooks/recommended` 负责 React 官方 Hooks 与 Compiler 诊断。这里关闭两套\n * 预置间的重复诊断,并补充少量明确的 DOM 安全约束。\n */\nexport const reactRules = {\n\t// React 官方 Hooks 插件提供更完整的 Error Boundary/Compiler 诊断,避免同一问题重复报告。\n\t\"@eslint-react/error-boundaries\": \"off\",\n\t// 依赖数组由 React 官方 exhaustive-deps 规则统一检查,避免重复警告。\n\t\"@eslint-react/exhaustive-deps\": \"off\",\n\t// 纯函数约束交给 React 官方 Compiler 规则维护,确保与 React 版本同步。\n\t\"@eslint-react/purity\": \"off\",\n\t// Hooks 调用顺序由 React 官方规则作为唯一来源,避免编辑器显示两个相同错误。\n\t\"@eslint-react/rules-of-hooks\": \"off\",\n\t// Effect 内同步更新状态由 React 官方 Compiler 规则判断,避免两套实现严重级别不一致。\n\t\"@eslint-react/set-state-in-effect\": \"off\",\n\t// 渲染期间更新状态由 React 官方 Compiler 规则判断,避免重复错误。\n\t\"@eslint-react/set-state-in-render\": \"off\",\n\t// 组件引用稳定性由 React 官方 Compiler 规则统一检查。\n\t\"@eslint-react/static-components\": \"off\",\n\t// Compiler 不支持的语法由 React 官方规则统一报告。\n\t\"@eslint-react/unsupported-syntax\": \"off\",\n\t// memoization 建议由 React 官方 Compiler 规则统一报告。\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 权限面较大;以 warn 提醒评估可信来源和 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":";;;;;;;;;AAUA,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"}
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 权限面较大;以 warn 提醒评估可信来源和 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"}
@@ -0,0 +1,38 @@
1
+ //#region src/rules/regexp.d.ts
2
+ /**
3
+ * 正则表达式正确性与安全规则。
4
+ *
5
+ * @remarks
6
+ * 不直接继承 regexp 插件的完整推荐预置,避免把字符类简写、量词写法和标志排序等
7
+ * 纯偏好作为阻断错误。这里显式维护无效结构、潜在错误和灾难性回溯检查。
8
+ */
9
+ declare const regexpRules: {
10
+ "no-control-regex": "error";
11
+ "no-misleading-character-class": "error";
12
+ "no-regex-spaces": "error";
13
+ "regexp/confusing-quantifier": "warn";
14
+ "regexp/no-contradiction-with-assertion": "error";
15
+ "regexp/no-dupe-characters-character-class": "error";
16
+ "regexp/no-dupe-disjunctions": "error";
17
+ "regexp/no-empty-alternative": "warn";
18
+ "regexp/no-empty-capturing-group": "error";
19
+ "regexp/no-empty-character-class": "error";
20
+ "regexp/no-empty-group": "error";
21
+ "regexp/no-empty-lookarounds-assertion": "error";
22
+ "regexp/no-extra-lookaround-assertions": "error";
23
+ "regexp/no-invalid-regexp": "error";
24
+ "regexp/no-invisible-character": "error";
25
+ "regexp/no-misleading-capturing-group": "error";
26
+ "regexp/no-misleading-unicode-character": "error";
27
+ "regexp/no-missing-g-flag": "error";
28
+ "regexp/no-non-standard-flag": "error";
29
+ "regexp/no-optional-assertion": "error";
30
+ "regexp/no-super-linear-backtracking": "error";
31
+ "regexp/no-useless-backreference": "error";
32
+ "regexp/no-useless-dollar-replacements": "error";
33
+ "regexp/no-zero-quantifier": "error";
34
+ "regexp/strict": "error";
35
+ };
36
+ //#endregion
37
+ export { regexpRules };
38
+ //# sourceMappingURL=regexp.d.mts.map
@@ -0,0 +1,39 @@
1
+ //#region src/rules/regexp.ts
2
+ /**
3
+ * 正则表达式正确性与安全规则。
4
+ *
5
+ * @remarks
6
+ * 不直接继承 regexp 插件的完整推荐预置,避免把字符类简写、量词写法和标志排序等
7
+ * 纯偏好作为阻断错误。这里显式维护无效结构、潜在错误和灾难性回溯检查。
8
+ */
9
+ const regexpRules = {
10
+ "no-control-regex": "error",
11
+ "no-misleading-character-class": "error",
12
+ "no-regex-spaces": "error",
13
+ "regexp/confusing-quantifier": "warn",
14
+ "regexp/no-contradiction-with-assertion": "error",
15
+ "regexp/no-dupe-characters-character-class": "error",
16
+ "regexp/no-dupe-disjunctions": "error",
17
+ "regexp/no-empty-alternative": "warn",
18
+ "regexp/no-empty-capturing-group": "error",
19
+ "regexp/no-empty-character-class": "error",
20
+ "regexp/no-empty-group": "error",
21
+ "regexp/no-empty-lookarounds-assertion": "error",
22
+ "regexp/no-extra-lookaround-assertions": "error",
23
+ "regexp/no-invalid-regexp": "error",
24
+ "regexp/no-invisible-character": "error",
25
+ "regexp/no-misleading-capturing-group": "error",
26
+ "regexp/no-misleading-unicode-character": "error",
27
+ "regexp/no-missing-g-flag": "error",
28
+ "regexp/no-non-standard-flag": "error",
29
+ "regexp/no-optional-assertion": "error",
30
+ "regexp/no-super-linear-backtracking": "error",
31
+ "regexp/no-useless-backreference": "error",
32
+ "regexp/no-useless-dollar-replacements": "error",
33
+ "regexp/no-zero-quantifier": "error",
34
+ "regexp/strict": "error"
35
+ };
36
+ //#endregion
37
+ export { regexpRules };
38
+
39
+ //# sourceMappingURL=regexp.mjs.map
@@ -0,0 +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// 控制字符通常来自复制或编码错误,要求使用可识别的转义写法。\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,7 +3,7 @@
3
3
  * package.json 属性排序规则。
4
4
  *
5
5
  * @remarks
6
- * `[高影响][可自动修复]`:仅在 `sortPackageJson: true` 时启用,首次修复可能重排大量字段。
6
+ * `[高影响][可自动修复]`:固定项目组合默认启用,首次修复可能重排大量字段。
7
7
  * 注意:这里故意不排序 `exports` 内部键;条件导出的键顺序具有模块解析语义。
8
8
  */
9
9
  declare const packageJsonSortRules: {
@@ -3,7 +3,7 @@
3
3
  * package.json 属性排序规则。
4
4
  *
5
5
  * @remarks
6
- * `[高影响][可自动修复]`:仅在 `sortPackageJson: true` 时启用,首次修复可能重排大量字段。
6
+ * `[高影响][可自动修复]`:固定项目组合默认启用,首次修复可能重排大量字段。
7
7
  * 注意:这里故意不排序 `exports` 内部键;条件导出的键顺序具有模块解析语义。
8
8
  */
9
9
  const packageJsonSortRules = {
@@ -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 * `[高影响][可自动修复]`:仅在 `sortPackageJson: true` 时启用,首次修复可能重排大量字段。\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"}
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,7 +3,7 @@
3
3
  * tsconfig.json 属性排序规则。
4
4
  *
5
5
  * @remarks
6
- * `[高影响][可自动修复]`:仅在 `sortTsconfig: true` 时启用,首次修复会重排大量字段,
6
+ * `[高影响][可自动修复]`:固定项目组合默认启用,首次修复会重排大量字段,
7
7
  * 但只改变 JSONC 的阅读顺序,不改变 TypeScript 编译选项值。
8
8
  */
9
9
  declare const tsconfigJsonSortRules: {
@@ -3,7 +3,7 @@
3
3
  * tsconfig.json 属性排序规则。
4
4
  *
5
5
  * @remarks
6
- * `[高影响][可自动修复]`:仅在 `sortTsconfig: true` 时启用,首次修复会重排大量字段,
6
+ * `[高影响][可自动修复]`:固定项目组合默认启用,首次修复会重排大量字段,
7
7
  * 但只改变 JSONC 的阅读顺序,不改变 TypeScript 编译选项值。
8
8
  */
9
9
  const tsconfigJsonSortRules = {
@@ -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 * `[高影响][可自动修复]`:仅在 `sortTsconfig: true` 时启用,首次修复会重排大量字段,\n * 但只改变 JSONC 的阅读顺序,不改变 TypeScript 编译选项值。\n */\nexport const tsconfigJsonSortRules = {\n\t// tsconfig 是 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"}
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 是 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"}
@@ -3,9 +3,13 @@
3
3
  * TypeScript 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * 这里补充 typescript-eslint 预置;高影响规则需同步维护风险文档。
6
+ * 公共模块边界要求显式类型,业务内部函数保留 TypeScript 返回类型推断;默认的
7
+ * recommendedTypeChecked 预置负责补充类型语义检查。
7
8
  */
8
9
  declare const typescriptRules: {
10
+ "@typescript-eslint/explicit-module-boundary-types": ["error", {
11
+ allowArgumentsExplicitlyTypedAsAny: false;
12
+ }];
9
13
  "@typescript-eslint/no-redeclare": "error";
10
14
  "@typescript-eslint/no-unused-vars": ["error", {
11
15
  args: "after-used";
@@ -18,12 +22,15 @@ declare const typescriptRules: {
18
22
  "@typescript-eslint/no-namespace": "off";
19
23
  "@typescript-eslint/no-explicit-any": "warn";
20
24
  "@typescript-eslint/no-require-imports": "error";
25
+ "@typescript-eslint/no-empty-function": ["error", {
26
+ allow: ("constructors" | "overrideMethods")[];
27
+ }];
21
28
  "@typescript-eslint/no-unused-expressions": ["error", {
22
29
  allowShortCircuit: true;
23
30
  allowTernary: true;
24
31
  }];
25
32
  "@typescript-eslint/no-inferrable-types": "error";
26
- "@typescript-eslint/no-non-null-assertion": "warn";
33
+ "@typescript-eslint/no-non-null-assertion": "error";
27
34
  "@typescript-eslint/no-non-null-asserted-optional-chain": "error";
28
35
  "@typescript-eslint/consistent-type-imports": ["error", {
29
36
  disallowTypeAnnotations: false;
@@ -31,8 +38,9 @@ declare const typescriptRules: {
31
38
  prefer: "type-imports";
32
39
  }];
33
40
  };
34
- /** 仅在启用 Project Service 后应用的 TypeScript 类型感知规则覆写。 */
41
+ /** 仅在 Project Service 提供完整类型信息后应用的 TypeScript 类型感知规则覆写。 */
35
42
  declare const typescriptTypeCheckedRules: {
43
+ "@typescript-eslint/return-await": "error";
36
44
  "@typescript-eslint/prefer-promise-reject-errors": ["error", {
37
45
  allowThrowingUnknown: true;
38
46
  }];
@@ -3,9 +3,11 @@
3
3
  * TypeScript 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * 这里补充 typescript-eslint 预置;高影响规则需同步维护风险文档。
6
+ * 公共模块边界要求显式类型,业务内部函数保留 TypeScript 返回类型推断;默认的
7
+ * recommendedTypeChecked 预置负责补充类型语义检查。
7
8
  */
8
9
  const typescriptRules = {
10
+ "@typescript-eslint/explicit-module-boundary-types": ["error", { allowArgumentsExplicitlyTypedAsAny: false }],
9
11
  "@typescript-eslint/no-redeclare": "error",
10
12
  "@typescript-eslint/no-unused-vars": ["error", {
11
13
  args: "after-used",
@@ -18,12 +20,13 @@ const typescriptRules = {
18
20
  "@typescript-eslint/no-namespace": "off",
19
21
  "@typescript-eslint/no-explicit-any": "warn",
20
22
  "@typescript-eslint/no-require-imports": "error",
23
+ "@typescript-eslint/no-empty-function": ["error", { allow: ["constructors", "overrideMethods"] }],
21
24
  "@typescript-eslint/no-unused-expressions": ["error", {
22
25
  allowShortCircuit: true,
23
26
  allowTernary: true
24
27
  }],
25
28
  "@typescript-eslint/no-inferrable-types": "error",
26
- "@typescript-eslint/no-non-null-assertion": "warn",
29
+ "@typescript-eslint/no-non-null-assertion": "error",
27
30
  "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
28
31
  "@typescript-eslint/consistent-type-imports": ["error", {
29
32
  disallowTypeAnnotations: false,
@@ -31,8 +34,11 @@ const typescriptRules = {
31
34
  prefer: "type-imports"
32
35
  }]
33
36
  };
34
- /** 仅在启用 Project Service 后应用的 TypeScript 类型感知规则覆写。 */
35
- const typescriptTypeCheckedRules = { "@typescript-eslint/prefer-promise-reject-errors": ["error", { allowThrowingUnknown: true }] };
37
+ /** 仅在 Project Service 提供完整类型信息后应用的 TypeScript 类型感知规则覆写。 */
38
+ const typescriptTypeCheckedRules = {
39
+ "@typescript-eslint/return-await": "error",
40
+ "@typescript-eslint/prefer-promise-reject-errors": ["error", { allowThrowingUnknown: true }]
41
+ };
36
42
  //#endregion
37
43
  export { typescriptRules, typescriptTypeCheckedRules };
38
44
 
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.mjs","names":[],"sources":["../../src/rules/typescript.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * TypeScript 本地覆写规则。\n *\n * @remarks\n * 这里补充 typescript-eslint 预置;高影响规则需同步维护风险文档。\n */\nexport const typescriptRules = {\n\t// 使用 TypeScript 版本避免核心规则误判声明合并、类型和值的同名声明。\n\t\"@typescript-eslint/no-redeclare\": \"error\",\n\t// [高影响][可自动修复] 未使用符号视为错误;以下划线开头可显式表示参数或变量被有意忽略。\n\t\"@typescript-eslint/no-unused-vars\": [\n\t\t\"error\",\n\t\t{\n\t\t\targs: \"after-used\",\n\t\t\targsIgnorePattern: \"^_\",\n\t\t\tcaughtErrors: \"all\",\n\t\t\tcaughtErrorsIgnorePattern: \"^_\",\n\t\t\tignoreRestSiblings: true,\n\t\t\tvarsIgnorePattern: \"^_\",\n\t\t},\n\t],\n\t// [默认关闭] 声明文件、全局扩展和部分 SDK 仍需要 namespace。\n\t\"@typescript-eslint/no-namespace\": \"off\",\n\t// any 会绕过类型检查,但在第三方边界和渐进式类型完善中有合理用途,因此只警告。\n\t\"@typescript-eslint/no-explicit-any\": \"warn\",\n\t// [高影响] 默认要求 ESM import;CommonJS、动态加载或工具链互操作代码可能需要按文件关闭。\n\t\"@typescript-eslint/no-require-imports\": \"error\",\n\t// 使用 TS 版本识别类型断言等语法;允许常见的短路和三元表达式调用模式。\n\t\"@typescript-eslint/no-unused-expressions\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowShortCircuit: true,\n\t\t\tallowTernary: true,\n\t\t},\n\t],\n\t// [可自动修复] 删除可由 TypeScript 明确推断的原始值类型标注,减少重复信息。\n\t\"@typescript-eslint/no-inferrable-types\": \"error\",\n\t// 非空断言可能隐藏空值缺陷;以警告提示逐步消除,避免一次性产生大量阻断错误。\n\t\"@typescript-eslint/no-non-null-assertion\": \"warn\",\n\t// 可选链之后再做非空断言逻辑矛盾,通常表示边界条件设计有误。\n\t\"@typescript-eslint/no-non-null-asserted-optional-chain\": \"error\",\n\t// [高影响][可自动修复] 类型依赖改用内联 type import;需复核仅靠 import 触发的模块副作用。\n\t\"@typescript-eslint/consistent-type-imports\": [\n\t\t\"error\",\n\t\t{\n\t\t\tdisallowTypeAnnotations: false,\n\t\t\tfixStyle: \"inline-type-imports\",\n\t\t\tprefer: \"type-imports\",\n\t\t},\n\t],\n} satisfies RuleOptions;\n\n/** 仅在启用 Project Service 后应用的 TypeScript 类型感知规则覆写。 */\nexport const typescriptTypeCheckedRules = {\n\t// 允许透明转发外部 Promise 的未知拒绝原因;静态可知的 string、number 等仍会被报告。\n\t\"@typescript-eslint/prefer-promise-reject-errors\": [\"error\", { allowThrowingUnknown: true }],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;AAQA,MAAa,kBAAkB;CAE9B,mCAAmC;CAEnC,qCAAqC,CACpC,SACA;EACC,MAAM;EACN,mBAAmB;EACnB,cAAc;EACd,2BAA2B;EAC3B,oBAAoB;EACpB,mBAAmB;CACpB,CACD;CAEA,mCAAmC;CAEnC,sCAAsC;CAEtC,yCAAyC;CAEzC,4CAA4C,CAC3C,SACA;EACC,mBAAmB;EACnB,cAAc;CACf,CACD;CAEA,0CAA0C;CAE1C,4CAA4C;CAE5C,0DAA0D;CAE1D,8CAA8C,CAC7C,SACA;EACC,yBAAyB;EACzB,UAAU;EACV,QAAQ;CACT,CACD;AACD;;AAGA,MAAa,6BAA6B,EAEzC,mDAAmD,CAAC,SAAS,EAAE,sBAAsB,KAAK,CAAC,EAC5F"}
1
+ {"version":3,"file":"typescript.mjs","names":[],"sources":["../../src/rules/typescript.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * TypeScript 本地覆写规则。\n *\n * @remarks\n * 公共模块边界要求显式类型,业务内部函数保留 TypeScript 返回类型推断;默认的\n * recommendedTypeChecked 预置负责补充类型语义检查。\n */\nexport const typescriptRules = {\n\t// 导出函数和类的公共方法必须显式声明参数与返回类型,使公共 API 不依赖实现细节推断;参数不允许显式 any。\n\t\"@typescript-eslint/explicit-module-boundary-types\": [\"error\", { allowArgumentsExplicitlyTypedAsAny: false }],\n\t// 使用 TypeScript 版本避免核心规则误判声明合并、类型和值的同名声明。\n\t\"@typescript-eslint/no-redeclare\": \"error\",\n\t// 未使用符号视为错误;以下划线开头可显式表示参数、异常或变量被有意忽略。\n\t\"@typescript-eslint/no-unused-vars\": [\n\t\t\"error\",\n\t\t{\n\t\t\targs: \"after-used\",\n\t\t\targsIgnorePattern: \"^_\",\n\t\t\tcaughtErrors: \"all\",\n\t\t\tcaughtErrorsIgnorePattern: \"^_\",\n\t\t\tignoreRestSiblings: true,\n\t\t\tvarsIgnorePattern: \"^_\",\n\t\t},\n\t],\n\t// [默认关闭] 声明文件、全局扩展和部分 SDK 仍需要 namespace。\n\t\"@typescript-eslint/no-namespace\": \"off\",\n\t// any 会绕过类型检查,但第三方边界和渐进迁移仍可能需要,因此只警告。\n\t\"@typescript-eslint/no-explicit-any\": \"warn\",\n\t// TypeScript 源码统一使用 ESM import;Node 工具文件由末尾覆写单独放开。\n\t\"@typescript-eslint/no-require-imports\": \"error\",\n\t// 禁止普通空函数,避免遗漏实现;仅允许无函数体逻辑的构造器和有意留空的重写方法。\n\t\"@typescript-eslint/no-empty-function\": [\"error\", { allow: [\"constructors\", \"overrideMethods\"] }],\n\t// 使用 TS 版本识别类型断言等语法;允许常见的短路和三元表达式调用模式。\n\t\"@typescript-eslint/no-unused-expressions\": [\n\t\t\"error\",\n\t\t{\n\t\t\tallowShortCircuit: true,\n\t\t\tallowTernary: true,\n\t\t},\n\t],\n\t// 删除可由 TypeScript 明确推断的原始值类型标注。\n\t\"@typescript-eslint/no-inferrable-types\": \"error\",\n\t// 禁止非空断言,要求显式处理空值边界。\n\t\"@typescript-eslint/no-non-null-assertion\": \"error\",\n\t// 可选链之后再做非空断言逻辑矛盾,通常表示边界条件设计有误。\n\t\"@typescript-eslint/no-non-null-asserted-optional-chain\": \"error\",\n\t// 纯类型依赖必须标记为 type import,并在混合导入中修复为 `import { type Foo, value }`,避免生成无用运行时导入。\n\t\"@typescript-eslint/consistent-type-imports\": [\n\t\t\"error\",\n\t\t{\n\t\t\tdisallowTypeAnnotations: false,\n\t\t\tfixStyle: \"inline-type-imports\",\n\t\t\tprefer: \"type-imports\",\n\t\t},\n\t],\n} satisfies RuleOptions;\n\n/** 仅在 Project Service 提供完整类型信息后应用的 TypeScript 类型感知规则覆写。 */\nexport const typescriptTypeCheckedRules = {\n\t// 默认 in-try-catch 模式:try/catch/finally 内要求 return await,让本地错误处理捕获 Promise 拒绝;其他位置避免多余 await。\n\t\"@typescript-eslint/return-await\": \"error\",\n\t// 允许透明转发外部 Promise 的未知拒绝原因;静态可知的 string、number 等仍会被报告。\n\t\"@typescript-eslint/prefer-promise-reject-errors\": [\"error\", { allowThrowingUnknown: true }],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,kBAAkB;CAE9B,qDAAqD,CAAC,SAAS,EAAE,oCAAoC,MAAM,CAAC;CAE5G,mCAAmC;CAEnC,qCAAqC,CACpC,SACA;EACC,MAAM;EACN,mBAAmB;EACnB,cAAc;EACd,2BAA2B;EAC3B,oBAAoB;EACpB,mBAAmB;CACpB,CACD;CAEA,mCAAmC;CAEnC,sCAAsC;CAEtC,yCAAyC;CAEzC,wCAAwC,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,iBAAiB,EAAE,CAAC;CAEhG,4CAA4C,CAC3C,SACA;EACC,mBAAmB;EACnB,cAAc;CACf,CACD;CAEA,0CAA0C;CAE1C,4CAA4C;CAE5C,0DAA0D;CAE1D,8CAA8C,CAC7C,SACA;EACC,yBAAyB;EACzB,UAAU;EACV,QAAQ;CACT,CACD;AACD;;AAGA,MAAa,6BAA6B;CAEzC,mCAAmC;CAEnC,mDAAmD,CAAC,SAAS,EAAE,sBAAsB,KAAK,CAAC;AAC5F"}
@@ -3,20 +3,26 @@
3
3
  * Vue SFC 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * 上游 `flat/recommended` 已覆盖基础正确性,这里只记录项目取舍与附加约束。
6
+ * 上游 `flat/recommended` 负责 Vue 3 正确性与模板约定;本记录补充事件、属性命名和
7
+ * 闭合标签规则。Vue Web、Admin 与 UniApp 使用同一套严重级别。
7
8
  */
8
9
  declare const vueRules: {
9
10
  "vue/no-v-html": "warn";
10
11
  "vue/require-default-prop": "off";
11
12
  "vue/require-explicit-emits": "error";
12
13
  "vue/multi-word-component-names": "off";
13
- "vue/prefer-import-from-vue": "warn";
14
+ "vue/prefer-import-from-vue": "off";
15
+ "vue/attribute-hyphenation": ["error", "always"];
14
16
  "vue/no-dupe-keys": "error";
15
17
  "vue/no-mutating-props": "error";
16
18
  "vue/no-reserved-component-names": "error";
17
19
  "vue/no-v-text-v-html-on-component": "error";
18
20
  "vue/custom-event-name-casing": ["error", "camelCase"];
19
21
  "vue/one-component-per-file": "off";
22
+ "vue/html-closing-bracket-newline": ["error", {
23
+ multiline: "always";
24
+ singleline: "never";
25
+ }];
20
26
  "vue/attributes-order": ["error", {
21
27
  order: ("DEFINITION" | "LIST_RENDERING" | "CONDITIONALS" | "RENDER_MODIFIERS" | "GLOBAL" | "UNIQUE" | "OTHER_ATTR" | "EVENTS" | "CONTENT")[];
22
28
  }];
@@ -3,20 +3,26 @@
3
3
  * Vue SFC 本地覆写规则。
4
4
  *
5
5
  * @remarks
6
- * 上游 `flat/recommended` 已覆盖基础正确性,这里只记录项目取舍与附加约束。
6
+ * 上游 `flat/recommended` 负责 Vue 3 正确性与模板约定;本记录补充事件、属性命名和
7
+ * 闭合标签规则。Vue Web、Admin 与 UniApp 使用同一套严重级别。
7
8
  */
8
9
  const vueRules = {
9
10
  "vue/no-v-html": "warn",
10
11
  "vue/require-default-prop": "off",
11
12
  "vue/require-explicit-emits": "error",
12
13
  "vue/multi-word-component-names": "off",
13
- "vue/prefer-import-from-vue": "warn",
14
+ "vue/prefer-import-from-vue": "off",
15
+ "vue/attribute-hyphenation": ["error", "always"],
14
16
  "vue/no-dupe-keys": "error",
15
17
  "vue/no-mutating-props": "error",
16
18
  "vue/no-reserved-component-names": "error",
17
19
  "vue/no-v-text-v-html-on-component": "error",
18
20
  "vue/custom-event-name-casing": ["error", "camelCase"],
19
21
  "vue/one-component-per-file": "off",
22
+ "vue/html-closing-bracket-newline": ["error", {
23
+ multiline: "always",
24
+ singleline: "never"
25
+ }],
20
26
  "vue/attributes-order": ["error", { order: [
21
27
  "DEFINITION",
22
28
  "LIST_RENDERING",
@@ -1 +1 @@
1
- {"version":3,"file":"vue.mjs","names":[],"sources":["../../src/rules/vue.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * Vue SFC 本地覆写规则。\n *\n * @remarks\n * 上游 `flat/recommended` 已覆盖基础正确性,这里只记录项目取舍与附加约束。\n */\nexport const vueRules = {\n\t// [安全关注] v-html 可能引入 XSS;保留 warn 以兼容经过净化的富文本场景。\n\t\"vue/no-v-html\": \"warn\",\n\t// [默认关闭] TypeScript 类型 props 和 required 声明已能表达可选性,不强制每个可选 prop 提供默认值。\n\t\"vue/require-default-prop\": \"off\",\n\t// [高影响] 组件必须声明对外事件;首次启用时会暴露未建模的公共事件 API。\n\t\"vue/require-explicit-emits\": \"error\",\n\t// [默认关闭] 允许 App、Layout 等约定俗成的单词组件名。\n\t\"vue/multi-word-component-names\": \"off\",\n\t// 优先从 vue 入口导入由 Vue 重新导出的 API,避免依赖内部包边界。\n\t\"vue/prefer-import-from-vue\": \"warn\",\n\n\t// 防止 props、data、computed、methods 等组件命名空间出现冲突。\n\t\"vue/no-dupe-keys\": \"error\",\n\t// [高影响] 禁止组件直接修改 props,要求通过事件或本地状态维持单向数据流。\n\t\"vue/no-mutating-props\": \"error\",\n\t// 避免自定义组件名与 Vue 内置组件冲突。\n\t\"vue/no-reserved-component-names\": \"error\",\n\t// [安全关注] 禁止在组件节点上使用 v-text/v-html,避免覆盖组件内容和模糊数据边界。\n\t\"vue/no-v-text-v-html-on-component\": \"error\",\n\t// 统一模板与脚本中的自定义事件名称为 camelCase。\n\t\"vue/custom-event-name-casing\": [\"error\", \"camelCase\"],\n\t// [默认关闭] 允许在一个 SFC 中声明仅供当前文件使用的小型辅助组件。\n\t\"vue/one-component-per-file\": \"off\",\n\t// [高影响][可自动修复] 统一模板属性分组;首次启用可能产生大量仅排序的模板差异。\n\t\"vue/attributes-order\": [\n\t\t\"error\",\n\t\t{\n\t\t\torder: [\"DEFINITION\", \"LIST_RENDERING\", \"CONDITIONALS\", \"RENDER_MODIFIERS\", \"GLOBAL\", \"UNIQUE\", \"OTHER_ATTR\", \"EVENTS\", \"CONTENT\"],\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;AAQA,MAAa,WAAW;CAEvB,iBAAiB;CAEjB,4BAA4B;CAE5B,8BAA8B;CAE9B,kCAAkC;CAElC,8BAA8B;CAG9B,oBAAoB;CAEpB,yBAAyB;CAEzB,mCAAmC;CAEnC,qCAAqC;CAErC,gCAAgC,CAAC,SAAS,WAAW;CAErD,8BAA8B;CAE9B,wBAAwB,CACvB,SACA,EACC,OAAO;EAAC;EAAc;EAAkB;EAAgB;EAAoB;EAAU;EAAU;EAAc;EAAU;CAAS,EAClI,CACD;AACD"}
1
+ {"version":3,"file":"vue.mjs","names":[],"sources":["../../src/rules/vue.ts"],"sourcesContent":["import type { RuleOptions } from \"../typegen\";\n\n/**\n * Vue SFC 本地覆写规则。\n *\n * @remarks\n * 上游 `flat/recommended` 负责 Vue 3 正确性与模板约定;本记录补充事件、属性命名和\n * 闭合标签规则。Vue Web、Admin 与 UniApp 使用同一套严重级别。\n */\nexport const vueRules = {\n\t// v-html 可能引入 XSS;保留警告以兼容经过净化的富文本场景。\n\t\"vue/no-v-html\": \"warn\",\n\t// [默认关闭] TypeScript 类型 props 和 required 声明已能表达可选性,不强制每个可选 prop 提供默认值。\n\t\"vue/require-default-prop\": \"off\",\n\t// 组件对外事件必须通过 emits 显式声明,使事件 API 可检查,并避免事件名拼写错误被静默透传。\n\t\"vue/require-explicit-emits\": \"error\",\n\t// [默认关闭] 允许 App、Layout 等约定俗成的单词组件名。\n\t\"vue/multi-word-component-names\": \"off\",\n\t// 允许直接使用 Vue 子包入口,兼容编译器与运行时等明确子模块导入。\n\t\"vue/prefer-import-from-vue\": \"off\",\n\t// 自定义组件的模板属性统一使用 kebab-case;脚本中的 Props 声明仍使用 camelCase。\n\t\"vue/attribute-hyphenation\": [\"error\", \"always\"],\n\n\t// props、data、computed、methods 等选项中禁止同名键,避免成员互相遮蔽或解析到错误来源。\n\t\"vue/no-dupe-keys\": \"error\",\n\t// Props 属于父组件传入的只读数据,子组件应通过 emit 或本地状态更新,不能直接修改。\n\t\"vue/no-mutating-props\": \"error\",\n\t// 组件名不能占用 Vue 内置组件或平台保留名称,避免模板解析与运行时组件发生冲突。\n\t\"vue/no-reserved-component-names\": \"error\",\n\t// 禁止在组件节点使用 v-text/v-html,避免覆盖组件内容并模糊数据边界。\n\t\"vue/no-v-text-v-html-on-component\": \"error\",\n\t// emit、emits 和事件处理引用中的自定义事件名称统一使用 camelCase,原生 DOM 事件不受影响。\n\t\"vue/custom-event-name-casing\": [\"error\", \"camelCase\"],\n\t// [默认关闭] 允许在一个 SFC 中声明仅供当前文件使用的小型辅助组件。\n\t\"vue/one-component-per-file\": \"off\",\n\t// 多行标签的闭合括号独占一行,单行标签保持同行。\n\t\"vue/html-closing-bracket-newline\": [\"error\", { multiline: \"always\", singleline: \"never\" }],\n\t// 模板属性按定义、循环、条件、修饰、普通属性、事件和内容等语义分组并保持稳定顺序。\n\t\"vue/attributes-order\": [\n\t\t\"error\",\n\t\t{\n\t\t\torder: [\"DEFINITION\", \"LIST_RENDERING\", \"CONDITIONALS\", \"RENDER_MODIFIERS\", \"GLOBAL\", \"UNIQUE\", \"OTHER_ATTR\", \"EVENTS\", \"CONTENT\"],\n\t\t},\n\t],\n} satisfies RuleOptions;\n"],"mappings":";;;;;;;;AASA,MAAa,WAAW;CAEvB,iBAAiB;CAEjB,4BAA4B;CAE5B,8BAA8B;CAE9B,kCAAkC;CAElC,8BAA8B;CAE9B,6BAA6B,CAAC,SAAS,QAAQ;CAG/C,oBAAoB;CAEpB,yBAAyB;CAEzB,mCAAmC;CAEnC,qCAAqC;CAErC,gCAAgC,CAAC,SAAS,WAAW;CAErD,8BAA8B;CAE9B,oCAAoC,CAAC,SAAS;EAAE,WAAW;EAAU,YAAY;CAAQ,CAAC;CAE1F,wBAAwB,CACvB,SACA,EACC,OAAO;EAAC;EAAc;EAAkB;EAAgB;EAAoB;EAAU;EAAU;EAAc;EAAU;CAAS,EAClI,CACD;AACD"}