@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
@@ -7,8 +7,8 @@ import globals from "globals";
7
7
  *
8
8
  * @remarks
9
9
  * 返回两个相互独立的 Flat Config 片段:第一个为应用源码配置所选环境和项目级全局
10
- * 变量;第二个仅命中配置、脚本、测试与 CLI 等工程文件,为它们配置 Node.js 全局变量
11
- * 并允许使用 `console`。分离范围可以减少跨运行时的假阴性。
10
+ * 变量;第二个仅命中配置、脚本、测试与 CLI 等工程文件,为它们配置 Node.js 全局变量。
11
+ * Node 工具文件的规则覆写由 {@link createNodeToolingConfigs} 在语言规则之后应用。
12
12
  *
13
13
  * @param options - 运行时环境、目标文件范围与项目级全局变量。
14
14
  * @returns 依次包含应用运行时环境和 Node.js 工程文件环境的 Flat Config 数组。
@@ -27,11 +27,31 @@ const createEnvironmentConfigs = ({ environment = "browser", files = GLOBS_CODE,
27
27
  }, {
28
28
  name: "@fast-china/globals/node-tooling",
29
29
  files: nodeToolingFiles,
30
- languageOptions: { globals: globals.node },
31
- rules: { "no-console": "off" }
30
+ languageOptions: { globals: globals.node }
31
+ }]);
32
+ };
33
+ /**
34
+ * 创建 Node.js 配置、脚本、测试和 CLI 文件的末尾规则覆写。
35
+ *
36
+ * @remarks
37
+ * 该片段必须放在 JavaScript 与 TypeScript 规则之后,确保工具文件可以输出日志并使用
38
+ * CommonJS 兼容加载,而不会放宽浏览器业务源码。
39
+ *
40
+ * @param nodeFiles - 当前已启用的 JavaScript/TypeScript 文件 glob。
41
+ * @returns Node 工具文件规则覆写数组。
42
+ */
43
+ const createNodeToolingConfigs = (nodeFiles = GLOBS_JAVASCRIPT) => {
44
+ const files = GLOBS_NODE_TOOLING.flatMap((nodeGlob) => nodeFiles.map((fileGlob) => [nodeGlob, fileGlob]));
45
+ return defineConfig([{
46
+ name: "@fast-china/node-tooling",
47
+ files,
48
+ rules: {
49
+ "@typescript-eslint/no-require-imports": "off",
50
+ "no-console": "off"
51
+ }
32
52
  }]);
33
53
  };
34
54
  //#endregion
35
- export { createEnvironmentConfigs };
55
+ export { createEnvironmentConfigs, createNodeToolingConfigs };
36
56
 
37
57
  //# sourceMappingURL=environment.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment.mjs","names":[],"sources":["../../src/configs/environment.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport globals from \"globals\";\nimport { GLOBS_CODE, GLOBS_JAVASCRIPT, GLOBS_NODE_TOOLING } from \"../constants\";\nimport type { Linter } from \"eslint\";\n\n/**\n * 应用源码可声明的运行时环境。\n *\n * - `\"browser\"` 仅提供浏览器全局变量。\n * - `\"node\"` 仅提供 Node.js 全局变量。\n * - `\"universal\"` 同时提供浏览器与 Node.js 全局变量。\n */\nexport type RuntimeEnvironment = \"browser\" | \"node\" | \"universal\";\n\n/**\n * 运行时全局变量配置片段的选项。\n *\n * @remarks\n * `fastConfig()` 会根据已启用的语言和框架计算 `files`、`nodeFiles`,再调用\n * `createEnvironmentConfigs()`。该接口仍保持独立,以便环境片段的输入、默认值和文件\n * 范围在源码中具有明确契约;直接组合配置片段时可从 `./configs` 子路径使用。\n *\n * 应用代码与 Node.js 工程文件使用两个独立 Flat Config 片段,避免浏览器源码无条件获得\n * `process`、`Buffer` 等 Node.js 全局变量,也避免配置文件误报这些合法全局变量未定义。\n */\nexport interface EnvironmentConfigOptions {\n\t/**\n\t * 应用代码实际运行的环境,决定 `files` 范围内注入哪组标准全局变量。\n\t *\n\t * `\"browser\"` 只注入浏览器全局变量,`\"node\"` 只注入 Node.js 全局变量,\n\t * `\"universal\"` 同时注入两组。该值不会影响 `nodeFiles` 对应的工程文件;后者始终\n\t * 使用 Node.js 全局变量。\n\t * @defaultValue `\"browser\"`\n\t */\n\tenvironment?: RuntimeEnvironment;\n\t/**\n\t * 需要获得所选运行时全局变量的应用代码 glob 列表。\n\t *\n\t * 工厂会把当前启用的 JavaScript、TypeScript 和 Vue 文件范围传入这里。数组会复制到\n\t * 生成配置中,不会在函数内部修改调用方传入的值。\n\t * @defaultValue {@link GLOBS_CODE}\n\t */\n\tfiles?: readonly string[];\n\t/**\n\t * 当前启用且允许作为 Node.js 工程文件执行的脚本扩展名 glob 列表。\n\t *\n\t * 每一项都会与内置的配置文件、脚本目录、测试文件和 CLI 文件模式组合为 ESLint\n\t * Flat Config 的 AND 文件条件。例如顶层关闭 TypeScript 后,Node.js 工程片段也不会\n\t * 因自身模式较宽而意外接管 `.ts` 文件。\n\t * @defaultValue {@link GLOBS_JAVASCRIPT}\n\t */\n\tnodeFiles?: readonly string[];\n\t/**\n\t * 追加到应用代码环境中的项目级全局变量及其读写权限。\n\t *\n\t * 该记录在标准环境全局变量之后合并,所以同名条目可以覆盖预置权限。它应用于完整\n\t * `files` 范围;其中属于 Node.js 工程文件的子集还会由后续片段追加标准 Node.js 全局\n\t * 变量。值格式遵循 ESLint `Linter.Globals`。\n\t * @defaultValue `{}`\n\t */\n\tglobals?: Linter.Globals;\n}\n\n/**\n * 创建运行时环境相关的 ESLint 配置。\n *\n * @remarks\n * 返回两个相互独立的 Flat Config 片段:第一个为应用源码配置所选环境和项目级全局\n * 变量;第二个仅命中配置、脚本、测试与 CLI 等工程文件,为它们配置 Node.js 全局变量\n * 并允许使用 `console`。分离范围可以减少跨运行时的假阴性。\n *\n * @param options - 运行时环境、目标文件范围与项目级全局变量。\n * @returns 依次包含应用运行时环境和 Node.js 工程文件环境的 Flat Config 数组。\n */\nexport const createEnvironmentConfigs = ({\n\tenvironment = \"browser\",\n\tfiles = GLOBS_CODE,\n\tnodeFiles = GLOBS_JAVASCRIPT,\n\tglobals: projectGlobals = {},\n}: EnvironmentConfigOptions = {}) => {\n\tconst runtimeGlobals = {\n\t\t...(environment !== \"node\" ? globals.browser : {}),\n\t\t...(environment !== \"browser\" ? globals.node : {}),\n\t\t...projectGlobals,\n\t};\n\tconst nodeToolingFiles = GLOBS_NODE_TOOLING.flatMap((nodeGlob) => nodeFiles.map((fileGlob) => [nodeGlob, fileGlob]));\n\n\treturn defineConfig([\n\t\t{\n\t\t\tname: `@fast-china/globals/${environment}`,\n\t\t\tfiles: [...files],\n\t\t\tlanguageOptions: {\n\t\t\t\tglobals: runtimeGlobals,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/globals/node-tooling\",\n\t\t\tfiles: nodeToolingFiles,\n\t\t\tlanguageOptions: {\n\t\t\t\tglobals: globals.node,\n\t\t\t},\n\t\t\trules: {\n\t\t\t\t\"no-console\": \"off\",\n\t\t\t},\n\t\t},\n\t]);\n};\n"],"mappings":";;;;;;;;;;;;;;;AA0EA,MAAa,4BAA4B,EACxC,cAAc,WACd,QAAQ,YACR,YAAY,kBACZ,SAAS,iBAAiB,CAAC,MACE,CAAC,MAAM;CACpC,MAAM,iBAAiB;EACtB,GAAI,gBAAgB,SAAS,QAAQ,UAAU,CAAC;EAChD,GAAI,gBAAgB,YAAY,QAAQ,OAAO,CAAC;EAChD,GAAG;CACJ;CACA,MAAM,mBAAmB,mBAAmB,SAAS,aAAa,UAAU,KAAK,aAAa,CAAC,UAAU,QAAQ,CAAC,CAAC;CAEnH,OAAO,aAAa,CACnB;EACC,MAAM,uBAAuB;EAC7B,OAAO,CAAC,GAAG,KAAK;EAChB,iBAAiB,EAChB,SAAS,eACV;CACD,GACA;EACC,MAAM;EACN,OAAO;EACP,iBAAiB,EAChB,SAAS,QAAQ,KAClB;EACA,OAAO,EACN,cAAc,MACf;CACD,CACD,CAAC;AACF"}
1
+ {"version":3,"file":"environment.mjs","names":[],"sources":["../../src/configs/environment.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport globals from \"globals\";\nimport { GLOBS_CODE, GLOBS_JAVASCRIPT, GLOBS_NODE_TOOLING } from \"../constants\";\nimport type { Linter } from \"eslint\";\n\n/**\n * 应用源码可声明的运行时环境。\n *\n * - `\"browser\"` 仅提供浏览器全局变量。\n * - `\"node\"` 仅提供 Node.js 全局变量。\n * - `\"universal\"` 同时提供浏览器与 Node.js 全局变量。\n */\nexport type RuntimeEnvironment = \"browser\" | \"node\" | \"universal\";\n\n/**\n * 运行时全局变量配置片段的选项。\n *\n * @remarks\n * 固定项目组合会根据自身处理的语言和框架传入 `files`、`nodeFiles`。该接口仍保持独立,\n * 以便低层组合明确控制环境片段的文件范围。\n *\n * 应用代码与 Node.js 工程文件使用两个独立 Flat Config 片段,避免浏览器源码无条件获得\n * `process`、`Buffer` 等 Node.js 全局变量,也避免配置文件误报这些合法全局变量未定义。\n */\nexport interface EnvironmentConfigOptions {\n\t/**\n\t * 应用代码实际运行的环境,决定 `files` 范围内注入哪组标准全局变量。\n\t *\n\t * `\"browser\"` 只注入浏览器全局变量,`\"node\"` 只注入 Node.js 全局变量,\n\t * `\"universal\"` 同时注入两组。该值不会影响 `nodeFiles` 对应的工程文件;后者始终\n\t * 使用 Node.js 全局变量。\n\t * @defaultValue `\"browser\"`\n\t */\n\tenvironment?: RuntimeEnvironment;\n\t/**\n\t * 需要获得所选运行时全局变量的应用代码 glob 列表。\n\t *\n\t * 项目组合会把自身负责的 JavaScript、TypeScript 和框架文件范围传入这里。数组会\n\t * 复制到生成配置中,不会在函数内部修改调用方传入的值。\n\t * @defaultValue {@link GLOBS_CODE}\n\t */\n\tfiles?: readonly string[];\n\t/**\n\t * 当前启用且允许作为 Node.js 工程文件执行的脚本扩展名 glob 列表。\n\t *\n\t * 每一项都会与内置的配置文件、脚本目录、测试文件和 CLI 文件模式组合为 ESLint\n\t * Flat Config 的 AND 文件条件,避免工程文件模式意外接管组合范围之外的扩展名。\n\t * @defaultValue {@link GLOBS_JAVASCRIPT}\n\t */\n\tnodeFiles?: readonly string[];\n\t/**\n\t * 追加到应用代码环境中的项目级全局变量及其读写权限。\n\t *\n\t * 该记录在标准环境全局变量之后合并,所以同名条目可以覆盖预置权限。它应用于完整\n\t * `files` 范围;其中属于 Node.js 工程文件的子集还会由后续片段追加标准 Node.js 全局\n\t * 变量。值格式遵循 ESLint `Linter.Globals`。\n\t * @defaultValue `{}`\n\t */\n\tglobals?: Linter.Globals;\n}\n\n/**\n * 创建运行时环境相关的 ESLint 配置。\n *\n * @remarks\n * 返回两个相互独立的 Flat Config 片段:第一个为应用源码配置所选环境和项目级全局\n * 变量;第二个仅命中配置、脚本、测试与 CLI 等工程文件,为它们配置 Node.js 全局变量。\n * Node 工具文件的规则覆写由 {@link createNodeToolingConfigs} 在语言规则之后应用。\n *\n * @param options - 运行时环境、目标文件范围与项目级全局变量。\n * @returns 依次包含应用运行时环境和 Node.js 工程文件环境的 Flat Config 数组。\n */\nexport const createEnvironmentConfigs = ({\n\tenvironment = \"browser\",\n\tfiles = GLOBS_CODE,\n\tnodeFiles = GLOBS_JAVASCRIPT,\n\tglobals: projectGlobals = {},\n}: EnvironmentConfigOptions = {}): ReturnType<typeof defineConfig> => {\n\tconst runtimeGlobals = {\n\t\t...(environment !== \"node\" ? globals.browser : {}),\n\t\t...(environment !== \"browser\" ? globals.node : {}),\n\t\t...projectGlobals,\n\t};\n\tconst nodeToolingFiles = GLOBS_NODE_TOOLING.flatMap((nodeGlob) => nodeFiles.map((fileGlob) => [nodeGlob, fileGlob]));\n\n\treturn defineConfig([\n\t\t{\n\t\t\tname: `@fast-china/globals/${environment}`,\n\t\t\tfiles: [...files],\n\t\t\tlanguageOptions: {\n\t\t\t\tglobals: runtimeGlobals,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/globals/node-tooling\",\n\t\t\tfiles: nodeToolingFiles,\n\t\t\tlanguageOptions: {\n\t\t\t\tglobals: globals.node,\n\t\t\t},\n\t\t},\n\t]);\n};\n\n/**\n * 创建 Node.js 配置、脚本、测试和 CLI 文件的末尾规则覆写。\n *\n * @remarks\n * 该片段必须放在 JavaScript 与 TypeScript 规则之后,确保工具文件可以输出日志并使用\n * CommonJS 兼容加载,而不会放宽浏览器业务源码。\n *\n * @param nodeFiles - 当前已启用的 JavaScript/TypeScript 文件 glob。\n * @returns Node 工具文件规则覆写数组。\n */\nexport const createNodeToolingConfigs = (nodeFiles: readonly string[] = GLOBS_JAVASCRIPT): ReturnType<typeof defineConfig> => {\n\tconst files = GLOBS_NODE_TOOLING.flatMap((nodeGlob) => nodeFiles.map((fileGlob) => [nodeGlob, fileGlob]));\n\n\treturn defineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/node-tooling\",\n\t\t\tfiles,\n\t\t\trules: {\n\t\t\t\t// Node.js 配置和脚本可能需要加载 CommonJS 包,只在工具文件范围关闭 ESM import 限制。\n\t\t\t\t\"@typescript-eslint/no-require-imports\": \"off\",\n\t\t\t\t// 构建、测试和 CLI 脚本允许把执行进度与诊断信息输出到终端。\n\t\t\t\t\"no-console\": \"off\",\n\t\t\t},\n\t\t},\n\t]);\n};\n"],"mappings":";;;;;;;;;;;;;;;AAwEA,MAAa,4BAA4B,EACxC,cAAc,WACd,QAAQ,YACR,YAAY,kBACZ,SAAS,iBAAiB,CAAC,MACE,CAAC,MAAuC;CACrE,MAAM,iBAAiB;EACtB,GAAI,gBAAgB,SAAS,QAAQ,UAAU,CAAC;EAChD,GAAI,gBAAgB,YAAY,QAAQ,OAAO,CAAC;EAChD,GAAG;CACJ;CACA,MAAM,mBAAmB,mBAAmB,SAAS,aAAa,UAAU,KAAK,aAAa,CAAC,UAAU,QAAQ,CAAC,CAAC;CAEnH,OAAO,aAAa,CACnB;EACC,MAAM,uBAAuB;EAC7B,OAAO,CAAC,GAAG,KAAK;EAChB,iBAAiB,EAChB,SAAS,eACV;CACD,GACA;EACC,MAAM;EACN,OAAO;EACP,iBAAiB,EAChB,SAAS,QAAQ,KAClB;CACD,CACD,CAAC;AACF;;;;;;;;;;;AAYA,MAAa,4BAA4B,YAA+B,qBAAsD;CAC7H,MAAM,QAAQ,mBAAmB,SAAS,aAAa,UAAU,KAAK,aAAa,CAAC,UAAU,QAAQ,CAAC,CAAC;CAExG,OAAO,aAAa,CACnB;EACC,MAAM;EACN;EACA,OAAO;GAEN,yCAAyC;GAEzC,cAAc;EACf;CACD,CACD,CAAC;AACF"}
@@ -1,3 +1,4 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/ignores.d.ts
2
3
  /**
3
4
  * 默认忽略依赖、构建结果、缓存、生成文件和包管理器锁文件。
@@ -13,7 +14,7 @@ declare const DEFAULT_IGNORE_PATTERNS: readonly string[];
13
14
  * @param additionalPatterns - 追加到 {@link DEFAULT_IGNORE_PATTERNS} 之后的 ESLint 全局忽略模式。
14
15
  * @returns 包含单个命名全局忽略片段的 Flat Config 数组。
15
16
  */
16
- declare const createGlobalIgnores: (additionalPatterns?: readonly string[]) => import("eslint/config").ConfigObject[];
17
+ declare const createGlobalIgnores: (additionalPatterns?: readonly string[]) => ReturnType<typeof defineConfig>;
17
18
  /**
18
19
  * 创建读取项目 `.gitignore` 的全局忽略配置。
19
20
  *
@@ -23,7 +24,7 @@ declare const createGlobalIgnores: (additionalPatterns?: readonly string[]) => i
23
24
  *
24
25
  * @returns 包含 `.gitignore` 转换结果的 Flat Config 数组。
25
26
  */
26
- declare const createGitignoreConfigs: () => import("eslint/config").ConfigObject[];
27
+ declare const createGitignoreConfigs: () => ReturnType<typeof defineConfig>;
27
28
  //#endregion
28
29
  export { DEFAULT_IGNORE_PATTERNS, createGitignoreConfigs, createGlobalIgnores };
29
30
  //# sourceMappingURL=ignores.d.mts.map
@@ -10,8 +10,9 @@ import eslintConfigFlatGitignore from "eslint-config-flat-gitignore";
10
10
  * 应由项目维护的文件。
11
11
  */
12
12
  const DEFAULT_IGNORE_PATTERNS = Object.freeze([
13
- "**/node_modules/**",
13
+ "**/{.pnpm-store,node_modules}/**",
14
14
  "**/{dist,build,coverage,output,temp,tmp}/**",
15
+ "**/unpackage/**",
15
16
  "**/{.cache,.nuxt,.output,.vercel,.nitro}/**",
16
17
  "**/{.vitepress/cache,.vite-inspect}/**",
17
18
  "**/__snapshots__/**",
@@ -37,8 +38,8 @@ const createGlobalIgnores = (additionalPatterns = []) => defineConfig([globalIgn
37
38
  * @returns 包含 `.gitignore` 转换结果的 Flat Config 数组。
38
39
  */
39
40
  const createGitignoreConfigs = () => defineConfig([{
40
- name: "@fast-china/ignores/git",
41
- ...eslintConfigFlatGitignore({ strict: false })
41
+ ...eslintConfigFlatGitignore({ strict: false }),
42
+ name: "@fast-china/ignores/git"
42
43
  }]);
43
44
  //#endregion
44
45
  export { DEFAULT_IGNORE_PATTERNS, createGitignoreConfigs, createGlobalIgnores };
@@ -1 +1 @@
1
- {"version":3,"file":"ignores.mjs","names":[],"sources":["../../src/configs/ignores.ts"],"sourcesContent":["import { defineConfig, globalIgnores } from \"eslint/config\";\nimport eslintConfigFlatGitignore from \"eslint-config-flat-gitignore\";\nimport { GLOBS_LOCKFILES } from \"../constants\";\n\n/**\n * 默认忽略依赖、构建结果、缓存、生成文件和包管理器锁文件。\n *\n * @remarks\n * 不忽略 `src`、`public`、测试夹具或普通 Markdown 文档,避免共享配置静默漏检\n * 应由项目维护的文件。\n */\nexport const DEFAULT_IGNORE_PATTERNS = Object.freeze([\n\t\"**/node_modules/**\",\n\t\"**/{dist,build,coverage,output,temp,tmp}/**\",\n\t\"**/{.cache,.nuxt,.output,.vercel,.nitro}/**\",\n\t\"**/{.vitepress/cache,.vite-inspect}/**\",\n\t\"**/__snapshots__/**\",\n\t\"**/*.min.*\",\n\t\"**/auto-import?(s).d.ts\",\n\t\"**/components.d.ts\",\n\t...GLOBS_LOCKFILES,\n]);\n\n/**\n * 创建全局忽略配置,并在默认集合之后追加项目自定义模式。\n *\n * @param additionalPatterns - 追加到 {@link DEFAULT_IGNORE_PATTERNS} 之后的 ESLint 全局忽略模式。\n * @returns 包含单个命名全局忽略片段的 Flat Config 数组。\n */\nexport const createGlobalIgnores = (additionalPatterns: readonly string[] = []) =>\n\tdefineConfig([globalIgnores([...DEFAULT_IGNORE_PATTERNS, ...additionalPatterns], \"@fast-china/ignores/global\")]);\n\n/**\n * 创建读取项目 `.gitignore` 的全局忽略配置。\n *\n * @remarks\n * `.gitignore` 的查找位置由 `eslint-config-flat-gitignore` 根据 ESLint 当前工作目录确定。\n * 未找到文件时不会抛错;该片段也不会替代 {@link createGlobalIgnores} 的内置模式。\n *\n * @returns 包含 `.gitignore` 转换结果的 Flat Config 数组。\n */\nexport const createGitignoreConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/ignores/git\",\n\t\t\t...eslintConfigFlatGitignore({ strict: false }),\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,0BAA0B,OAAO,OAAO;CACpD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG;AACJ,CAAC;;;;;;;AAQD,MAAa,uBAAuB,qBAAwC,CAAC,MAC5E,aAAa,CAAC,cAAc,CAAC,GAAG,yBAAyB,GAAG,kBAAkB,GAAG,4BAA4B,CAAC,CAAC;;;;;;;;;;AAWhH,MAAa,+BACZ,aAAa,CACZ;CACC,MAAM;CACN,GAAG,0BAA0B,EAAE,QAAQ,MAAM,CAAC;AAC/C,CACD,CAAC"}
1
+ {"version":3,"file":"ignores.mjs","names":[],"sources":["../../src/configs/ignores.ts"],"sourcesContent":["import { defineConfig, globalIgnores } from \"eslint/config\";\nimport eslintConfigFlatGitignore from \"eslint-config-flat-gitignore\";\nimport { GLOBS_LOCKFILES } from \"../constants\";\n\n/**\n * 默认忽略依赖、构建结果、缓存、生成文件和包管理器锁文件。\n *\n * @remarks\n * 不忽略 `src`、`public`、测试夹具或普通 Markdown 文档,避免共享配置静默漏检\n * 应由项目维护的文件。\n */\nexport const DEFAULT_IGNORE_PATTERNS = Object.freeze([\n\t\"**/{.pnpm-store,node_modules}/**\",\n\t\"**/{dist,build,coverage,output,temp,tmp}/**\",\n\t\"**/unpackage/**\",\n\t\"**/{.cache,.nuxt,.output,.vercel,.nitro}/**\",\n\t\"**/{.vitepress/cache,.vite-inspect}/**\",\n\t\"**/__snapshots__/**\",\n\t\"**/*.min.*\",\n\t\"**/auto-import?(s).d.ts\",\n\t\"**/components.d.ts\",\n\t...GLOBS_LOCKFILES,\n]);\n\n/**\n * 创建全局忽略配置,并在默认集合之后追加项目自定义模式。\n *\n * @param additionalPatterns - 追加到 {@link DEFAULT_IGNORE_PATTERNS} 之后的 ESLint 全局忽略模式。\n * @returns 包含单个命名全局忽略片段的 Flat Config 数组。\n */\nexport const createGlobalIgnores = (additionalPatterns: readonly string[] = []): ReturnType<typeof defineConfig> =>\n\tdefineConfig([globalIgnores([...DEFAULT_IGNORE_PATTERNS, ...additionalPatterns], \"@fast-china/ignores/global\")]);\n\n/**\n * 创建读取项目 `.gitignore` 的全局忽略配置。\n *\n * @remarks\n * `.gitignore` 的查找位置由 `eslint-config-flat-gitignore` 根据 ESLint 当前工作目录确定。\n * 未找到文件时不会抛错;该片段也不会替代 {@link createGlobalIgnores} 的内置模式。\n *\n * @returns 包含 `.gitignore` 转换结果的 Flat Config 数组。\n */\nexport const createGitignoreConfigs = (): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\t...eslintConfigFlatGitignore({ strict: false }),\n\t\t\tname: \"@fast-china/ignores/git\",\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,0BAA0B,OAAO,OAAO;CACpD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG;AACJ,CAAC;;;;;;;AAQD,MAAa,uBAAuB,qBAAwC,CAAC,MAC5E,aAAa,CAAC,cAAc,CAAC,GAAG,yBAAyB,GAAG,kBAAkB,GAAG,4BAA4B,CAAC,CAAC;;;;;;;;;;AAWhH,MAAa,+BACZ,aAAa,CACZ;CACC,GAAG,0BAA0B,EAAE,QAAQ,MAAM,CAAC;CAC9C,MAAM;AACP,CACD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/import.d.ts
2
3
  /**
3
4
  * 创建模块导入规则配置。
@@ -9,7 +10,7 @@
9
10
  * @param files - 应用 import-x 推荐规则与本地覆盖规则的 ESLint glob 列表。
10
11
  * @returns 包含 import-x 插件预置和本地规则的 Flat Config 数组。
11
12
  */
12
- declare const createImportConfigs: (files?: readonly string[]) => import("eslint/config").ConfigObject[];
13
+ declare const createImportConfigs: (files?: readonly string[]) => ReturnType<typeof defineConfig>;
13
14
  //#endregion
14
15
  export { createImportConfigs };
15
16
  //# sourceMappingURL=import.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import.mjs","names":[],"sources":["../../src/configs/import.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginImportX from \"eslint-plugin-import-x\";\nimport { GLOBS_CODE } from \"../constants\";\nimport { importRules } from \"../rules\";\n\n/**\n * 创建模块导入规则配置。\n *\n * @remarks\n * 共享库不猜测项目的路径别名或解析器,因此只继承 import-x 的推荐能力,\n * 与 resolver 强耦合且容易误报的规则会在本地规则记录中显式关闭。\n *\n * @param files - 应用 import-x 推荐规则与本地覆盖规则的 ESLint glob 列表。\n * @returns 包含 import-x 插件预置和本地规则的 Flat Config 数组。\n */\nexport const createImportConfigs = (files: readonly string[] = GLOBS_CODE) =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/import\",\n\t\t\tfiles: [...files],\n\t\t\textends: [eslintPluginImportX.flatConfigs.recommended],\n\t\t\trules: importRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,uBAAuB,QAA2B,eAC9D,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,oBAAoB,YAAY,WAAW;CACrD,OAAO;AACR,CACD,CAAC"}
1
+ {"version":3,"file":"import.mjs","names":[],"sources":["../../src/configs/import.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginImportX from \"eslint-plugin-import-x\";\nimport { GLOBS_CODE } from \"../constants\";\nimport { importRules } from \"../rules\";\n\n/**\n * 创建模块导入规则配置。\n *\n * @remarks\n * 共享库不猜测项目的路径别名或解析器,因此只继承 import-x 的推荐能力,\n * 与 resolver 强耦合且容易误报的规则会在本地规则记录中显式关闭。\n *\n * @param files - 应用 import-x 推荐规则与本地覆盖规则的 ESLint glob 列表。\n * @returns 包含 import-x 插件预置和本地规则的 Flat Config 数组。\n */\nexport const createImportConfigs = (files: readonly string[] = GLOBS_CODE): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/import\",\n\t\t\tfiles: [...files],\n\t\t\textends: [eslintPluginImportX.flatConfigs.recommended],\n\t\t\trules: importRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,uBAAuB,QAA2B,eAC9D,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,oBAAoB,YAAY,WAAW;CACrD,OAAO;AACR,CACD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { AngularConfigOptions, createAngularConfigs } from "./angular.mjs";
2
2
  import { createCommonConfigs } from "./common.mjs";
3
- import { EnvironmentConfigOptions, RuntimeEnvironment, createEnvironmentConfigs } from "./environment.mjs";
3
+ import { EnvironmentConfigOptions, RuntimeEnvironment, createEnvironmentConfigs, createNodeToolingConfigs } from "./environment.mjs";
4
4
  import { DEFAULT_IGNORE_PATTERNS, createGitignoreConfigs, createGlobalIgnores } from "./ignores.mjs";
5
5
  import { createImportConfigs } from "./import.mjs";
6
6
  import { createJavaScriptConfigs } from "./javascript.mjs";
@@ -12,6 +12,7 @@ import { ReactConfigOptions, createReactConfigs } from "./react.mjs";
12
12
  import { createRegexpConfigs } from "./regexp.mjs";
13
13
  import { createPackageJsonSortConfigs } from "./sort-package.mjs";
14
14
  import { createTsconfigSortConfigs } from "./sort-tsconfig.mjs";
15
- import { TypeScriptConfigOptions, createTypeScriptConfigs, createTypeScriptParserOptions, getTypeScriptPresetConfigs } from "./typescript.mjs";
16
- import { VueConfigOptions, createVueConfigs } from "./vue.mjs";
17
- export { AngularConfigOptions, DEFAULT_IGNORE_PATTERNS, EnvironmentConfigOptions, LodashPreference, ReactConfigOptions, RuntimeEnvironment, TypeScriptConfigOptions, VueConfigOptions, createAngularConfigs, createCommonConfigs, createEnvironmentConfigs, createGitignoreConfigs, createGlobalIgnores, createImportConfigs, createJavaScriptConfigs, createJsonConfigs, createLodashConfigs, createMarkdownConfigs, createPackageJsonSortConfigs, createPrettierConfigs, createReactConfigs, createRegexpConfigs, createTsconfigSortConfigs, createTypeScriptConfigs, createTypeScriptParserOptions, createVueConfigs, getTypeScriptPresetConfigs };
15
+ import { createTypeScriptConfigs, createTypeScriptParserOptions, getTypeScriptPresetConfigs } from "./typescript.mjs";
16
+ import { createUniAppConfigs } from "./uniapp.mjs";
17
+ import { createVueConfigs } from "./vue.mjs";
18
+ export { AngularConfigOptions, DEFAULT_IGNORE_PATTERNS, EnvironmentConfigOptions, LodashPreference, ReactConfigOptions, RuntimeEnvironment, createAngularConfigs, createCommonConfigs, createEnvironmentConfigs, createGitignoreConfigs, createGlobalIgnores, createImportConfigs, createJavaScriptConfigs, createJsonConfigs, createLodashConfigs, createMarkdownConfigs, createNodeToolingConfigs, createPackageJsonSortConfigs, createPrettierConfigs, createReactConfigs, createRegexpConfigs, createTsconfigSortConfigs, createTypeScriptConfigs, createTypeScriptParserOptions, createUniAppConfigs, createVueConfigs, getTypeScriptPresetConfigs };
@@ -1,6 +1,6 @@
1
1
  import { createAngularConfigs } from "./angular.mjs";
2
2
  import { createCommonConfigs } from "./common.mjs";
3
- import { createEnvironmentConfigs } from "./environment.mjs";
3
+ import { createEnvironmentConfigs, createNodeToolingConfigs } from "./environment.mjs";
4
4
  import { DEFAULT_IGNORE_PATTERNS, createGitignoreConfigs, createGlobalIgnores } from "./ignores.mjs";
5
5
  import { createImportConfigs } from "./import.mjs";
6
6
  import { createJavaScriptConfigs } from "./javascript.mjs";
@@ -13,5 +13,6 @@ import { createRegexpConfigs } from "./regexp.mjs";
13
13
  import { createPackageJsonSortConfigs } from "./sort-package.mjs";
14
14
  import { createTsconfigSortConfigs } from "./sort-tsconfig.mjs";
15
15
  import { createTypeScriptConfigs, createTypeScriptParserOptions, getTypeScriptPresetConfigs } from "./typescript.mjs";
16
+ import { createUniAppConfigs } from "./uniapp.mjs";
16
17
  import { createVueConfigs } from "./vue.mjs";
17
- export { DEFAULT_IGNORE_PATTERNS, createAngularConfigs, createCommonConfigs, createEnvironmentConfigs, createGitignoreConfigs, createGlobalIgnores, createImportConfigs, createJavaScriptConfigs, createJsonConfigs, createLodashConfigs, createMarkdownConfigs, createPackageJsonSortConfigs, createPrettierConfigs, createReactConfigs, createRegexpConfigs, createTsconfigSortConfigs, createTypeScriptConfigs, createTypeScriptParserOptions, createVueConfigs, getTypeScriptPresetConfigs };
18
+ export { DEFAULT_IGNORE_PATTERNS, createAngularConfigs, createCommonConfigs, createEnvironmentConfigs, createGitignoreConfigs, createGlobalIgnores, createImportConfigs, createJavaScriptConfigs, createJsonConfigs, createLodashConfigs, createMarkdownConfigs, createNodeToolingConfigs, createPackageJsonSortConfigs, createPrettierConfigs, createReactConfigs, createRegexpConfigs, createTsconfigSortConfigs, createTypeScriptConfigs, createTypeScriptParserOptions, createUniAppConfigs, createVueConfigs, getTypeScriptPresetConfigs };
@@ -1,3 +1,4 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/javascript.d.ts
2
3
  /**
3
4
  * 创建 JavaScript/JSX 配置。
@@ -9,7 +10,7 @@
9
10
  * @param files - 应用 JavaScript 基础规则的 ESLint glob 列表。
10
11
  * @returns 包含 JavaScript 推荐预置、本地规则与 JSX 解析设置的 Flat Config 数组。
11
12
  */
12
- declare const createJavaScriptConfigs: (files?: readonly string[]) => import("eslint/config").ConfigObject[];
13
+ declare const createJavaScriptConfigs: (files?: readonly string[]) => ReturnType<typeof defineConfig>;
13
14
  //#endregion
14
15
  export { createJavaScriptConfigs };
15
16
  //# sourceMappingURL=javascript.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"javascript.mjs","names":[],"sources":["../../src/configs/javascript.ts"],"sourcesContent":["import eslint from \"@eslint/js\";\nimport { defineConfig } from \"eslint/config\";\nimport { GLOBS_JAVASCRIPT } from \"../constants\";\nimport { javascriptRules } from \"../rules\";\n\n/**\n * 创建 JavaScript/JSX 配置。\n *\n * @remarks\n * `@eslint/js` 提供基础正确性规则,本仓库只在其后补充有明确维护理由的规则。\n * 普通 `.jsx` 文件会显式启用 JSX 语法解析,但不会因此自动启用 React 规则。\n *\n * @param files - 应用 JavaScript 基础规则的 ESLint glob 列表。\n * @returns 包含 JavaScript 推荐预置、本地规则与 JSX 解析设置的 Flat Config 数组。\n */\nexport const createJavaScriptConfigs = (files: readonly string[] = GLOBS_JAVASCRIPT) =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/javascript\",\n\t\t\tfiles: [...files],\n\t\t\textends: [eslint.configs.recommended],\n\t\t\tlanguageOptions: {\n\t\t\t\tecmaVersion: \"latest\",\n\t\t\t\tparserOptions: {\n\t\t\t\t\tecmaFeatures: {\n\t\t\t\t\t\t// 普通 `.jsx` 文件需要显式开启 JSX 语法解析。\n\t\t\t\t\t\tjsx: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: javascriptRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,2BAA2B,QAA2B,qBAClE,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,OAAO,QAAQ,WAAW;CACpC,iBAAiB;EAChB,aAAa;EACb,eAAe,EACd,cAAc,EAEb,KAAK,KACN,EACD;CACD;CACA,OAAO;AACR,CACD,CAAC"}
1
+ {"version":3,"file":"javascript.mjs","names":[],"sources":["../../src/configs/javascript.ts"],"sourcesContent":["import eslint from \"@eslint/js\";\nimport { defineConfig } from \"eslint/config\";\nimport { GLOBS_JAVASCRIPT } from \"../constants\";\nimport { javascriptRules } from \"../rules\";\n\n/**\n * 创建 JavaScript/JSX 配置。\n *\n * @remarks\n * `@eslint/js` 提供基础正确性规则,本仓库只在其后补充有明确维护理由的规则。\n * 普通 `.jsx` 文件会显式启用 JSX 语法解析,但不会因此自动启用 React 规则。\n *\n * @param files - 应用 JavaScript 基础规则的 ESLint glob 列表。\n * @returns 包含 JavaScript 推荐预置、本地规则与 JSX 解析设置的 Flat Config 数组。\n */\nexport const createJavaScriptConfigs = (files: readonly string[] = GLOBS_JAVASCRIPT): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/javascript\",\n\t\t\tfiles: [...files],\n\t\t\textends: [eslint.configs.recommended],\n\t\t\tlanguageOptions: {\n\t\t\t\tecmaVersion: \"latest\",\n\t\t\t\tparserOptions: {\n\t\t\t\t\tecmaFeatures: {\n\t\t\t\t\t\t// 普通 `.jsx` 文件需要显式开启 JSX 语法解析。\n\t\t\t\t\t\tjsx: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: javascriptRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,2BAA2B,QAA2B,qBAClE,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,OAAO,QAAQ,WAAW;CACpC,iBAAiB;EAChB,aAAa;EACb,eAAe,EACd,cAAc,EAEb,KAAK,KACN,EACD;CACD;CACA,OAAO;AACR,CACD,CAAC"}
@@ -1,14 +1,16 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/json.d.ts
2
3
  /**
3
4
  * 创建 JSON、JSONC 与 JSON5 配置。
4
5
  *
5
6
  * @remarks
6
7
  * 三种方言使用各自的官方推荐预置,避免严格 JSON 规则错误覆盖允许注释或尾随逗号的文件。
7
- * VS Code 的 `.vscode/settings.json` 仍以 `.json` 结尾,因此额外允许其中出现注释。
8
+ * VS Code 的 `.vscode/settings.json` 与 `.vscode/extensions.json` 仍以 `.json` 结尾,
9
+ * 因此额外允许其中出现注释。
8
10
  *
9
- * @returns 按 JSON、JSONC、JSON5 与 VS Code 设置覆盖顺序排列的 Flat Config 数组。
11
+ * @returns 按 JSON、JSONC、JSON5 与 VS Code 工作区文件覆盖顺序排列的 Flat Config 数组。
10
12
  */
11
- declare const createJsonConfigs: () => import("eslint/config").ConfigObject[];
13
+ declare const createJsonConfigs: () => ReturnType<typeof defineConfig>;
12
14
  //#endregion
13
15
  export { createJsonConfigs };
14
16
  //# sourceMappingURL=json.d.mts.map
@@ -7,9 +7,10 @@ import eslintPluginJsonc from "eslint-plugin-jsonc";
7
7
  *
8
8
  * @remarks
9
9
  * 三种方言使用各自的官方推荐预置,避免严格 JSON 规则错误覆盖允许注释或尾随逗号的文件。
10
- * VS Code 的 `.vscode/settings.json` 仍以 `.json` 结尾,因此额外允许其中出现注释。
10
+ * VS Code 的 `.vscode/settings.json` 与 `.vscode/extensions.json` 仍以 `.json` 结尾,
11
+ * 因此额外允许其中出现注释。
11
12
  *
12
- * @returns 按 JSON、JSONC、JSON5 与 VS Code 设置覆盖顺序排列的 Flat Config 数组。
13
+ * @returns 按 JSON、JSONC、JSON5 与 VS Code 工作区文件覆盖顺序排列的 Flat Config 数组。
13
14
  */
14
15
  const createJsonConfigs = () => defineConfig([
15
16
  {
@@ -28,8 +29,8 @@ const createJsonConfigs = () => defineConfig([
28
29
  extends: [eslintPluginJsonc.configs["flat/recommended-with-json5"]]
29
30
  },
30
31
  {
31
- name: "@fast-china/json/vscode-settings",
32
- files: ["**/.vscode/settings.json"],
32
+ name: "@fast-china/json/vscode",
33
+ files: ["**/.vscode/extensions.json", "**/.vscode/settings.json"],
33
34
  rules: { "jsonc/no-comments": "off" }
34
35
  }
35
36
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"json.mjs","names":[],"sources":["../../src/configs/json.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginJsonc from \"eslint-plugin-jsonc\";\nimport { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from \"../constants\";\n\n/**\n * 创建 JSON、JSONC 与 JSON5 配置。\n *\n * @remarks\n * 三种方言使用各自的官方推荐预置,避免严格 JSON 规则错误覆盖允许注释或尾随逗号的文件。\n * VS Code 的 `.vscode/settings.json` 仍以 `.json` 结尾,因此额外允许其中出现注释。\n *\n * @returns 按 JSON、JSONC、JSON5 与 VS Code 设置覆盖顺序排列的 Flat Config 数组。\n */\nexport const createJsonConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/json/json\",\n\t\t\tfiles: [GLOB_JSON],\n\t\t\textends: [eslintPluginJsonc.configs[\"flat/recommended-with-json\"]],\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/json/jsonc\",\n\t\t\tfiles: [GLOB_JSONC],\n\t\t\textends: [eslintPluginJsonc.configs[\"flat/recommended-with-jsonc\"]],\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/json/json5\",\n\t\t\tfiles: [GLOB_JSON5],\n\t\t\textends: [eslintPluginJsonc.configs[\"flat/recommended-with-json5\"]],\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/json/vscode-settings\",\n\t\t\tfiles: [\"**/.vscode/settings.json\"],\n\t\t\trules: {\n\t\t\t\t// VS Code settings.json 使用带注释的 JSONC 方言。\n\t\t\t\t\"jsonc/no-comments\": \"off\",\n\t\t\t},\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAa,0BACZ,aAAa;CACZ;EACC,MAAM;EACN,OAAO,CAAC,SAAS;EACjB,SAAS,CAAC,kBAAkB,QAAQ,6BAA6B;CAClE;CACA;EACC,MAAM;EACN,OAAO,CAAC,UAAU;EAClB,SAAS,CAAC,kBAAkB,QAAQ,8BAA8B;CACnE;CACA;EACC,MAAM;EACN,OAAO,CAAC,UAAU;EAClB,SAAS,CAAC,kBAAkB,QAAQ,8BAA8B;CACnE;CACA;EACC,MAAM;EACN,OAAO,CAAC,0BAA0B;EAClC,OAAO,EAEN,qBAAqB,MACtB;CACD;AACD,CAAC"}
1
+ {"version":3,"file":"json.mjs","names":[],"sources":["../../src/configs/json.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginJsonc from \"eslint-plugin-jsonc\";\nimport { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from \"../constants\";\n\n/**\n * 创建 JSON、JSONC 与 JSON5 配置。\n *\n * @remarks\n * 三种方言使用各自的官方推荐预置,避免严格 JSON 规则错误覆盖允许注释或尾随逗号的文件。\n * VS Code 的 `.vscode/settings.json` 与 `.vscode/extensions.json` 仍以 `.json` 结尾,\n * 因此额外允许其中出现注释。\n *\n * @returns 按 JSON、JSONC、JSON5 与 VS Code 工作区文件覆盖顺序排列的 Flat Config 数组。\n */\nexport const createJsonConfigs = (): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/json/json\",\n\t\t\tfiles: [GLOB_JSON],\n\t\t\textends: [eslintPluginJsonc.configs[\"flat/recommended-with-json\"]],\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/json/jsonc\",\n\t\t\tfiles: [GLOB_JSONC],\n\t\t\textends: [eslintPluginJsonc.configs[\"flat/recommended-with-jsonc\"]],\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/json/json5\",\n\t\t\tfiles: [GLOB_JSON5],\n\t\t\textends: [eslintPluginJsonc.configs[\"flat/recommended-with-json5\"]],\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/json/vscode\",\n\t\t\tfiles: [\"**/.vscode/extensions.json\", \"**/.vscode/settings.json\"],\n\t\t\trules: {\n\t\t\t\t// VS Code 的工作区设置和扩展推荐文件使用带注释的 JSONC 方言。\n\t\t\t\t\"jsonc/no-comments\": \"off\",\n\t\t\t},\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAa,0BACZ,aAAa;CACZ;EACC,MAAM;EACN,OAAO,CAAC,SAAS;EACjB,SAAS,CAAC,kBAAkB,QAAQ,6BAA6B;CAClE;CACA;EACC,MAAM;EACN,OAAO,CAAC,UAAU;EAClB,SAAS,CAAC,kBAAkB,QAAQ,8BAA8B;CACnE;CACA;EACC,MAAM;EACN,OAAO,CAAC,UAAU;EAClB,SAAS,CAAC,kBAAkB,QAAQ,8BAA8B;CACnE;CACA;EACC,MAAM;EACN,OAAO,CAAC,8BAA8B,0BAA0B;EAChE,OAAO,EAEN,qBAAqB,MACtB;CACD;AACD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/lodash.d.ts
2
3
  /**
3
4
  * 项目允许使用的 Lodash 静态导入来源。
@@ -16,7 +17,7 @@ type LodashPreference = "lodash" | "lodash-unified";
16
17
  * @param files - 应用导入约束的 ESLint glob 列表。
17
18
  * @returns 包含对应 Lodash 导入限制规则的 Flat Config 数组。
18
19
  */
19
- declare const createLodashConfigs: (preference: LodashPreference, files?: readonly string[]) => import("eslint/config").ConfigObject[];
20
+ declare const createLodashConfigs: (preference: LodashPreference, files?: readonly string[]) => ReturnType<typeof defineConfig>;
20
21
  //#endregion
21
22
  export { LodashPreference, createLodashConfigs };
22
23
  //# sourceMappingURL=lodash.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lodash.mjs","names":[],"sources":["../../src/configs/lodash.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport { GLOBS_CODE } from \"../constants\";\nimport { preferLodashRules, preferLodashUnifiedRules } from \"../rules\";\n\n/**\n * 项目允许使用的 Lodash 静态导入来源。\n *\n * `\"lodash\"` 允许根入口及 `lodash/*` 子路径;`\"lodash-unified\"` 只允许统一入口。\n */\nexport type LodashPreference = \"lodash\" | \"lodash-unified\";\n\n/**\n * 创建 Lodash 静态导入约束。\n *\n * @remarks\n * 该配置使用 ESLint 核心规则,因此不依赖 import-x 开关或额外插件。\n * 它只检查静态 `import` 与 `export ... from`,不会安装依赖或检查动态导入。\n *\n * @param preference - 项目唯一允许使用的 Lodash 包入口。\n * @param files - 应用导入约束的 ESLint glob 列表。\n * @returns 包含对应 Lodash 导入限制规则的 Flat Config 数组。\n */\nexport const createLodashConfigs = (preference: LodashPreference, files: readonly string[] = GLOBS_CODE) =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: `@fast-china/lodash/${preference}`,\n\t\t\tfiles: [...files],\n\t\t\trules: preference === \"lodash\" ? preferLodashRules : preferLodashUnifiedRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;AAsBA,MAAa,uBAAuB,YAA8B,QAA2B,eAC5F,aAAa,CACZ;CACC,MAAM,sBAAsB;CAC5B,OAAO,CAAC,GAAG,KAAK;CAChB,OAAO,eAAe,WAAW,oBAAoB;AACtD,CACD,CAAC"}
1
+ {"version":3,"file":"lodash.mjs","names":[],"sources":["../../src/configs/lodash.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport { GLOBS_CODE } from \"../constants\";\nimport { preferLodashRules, preferLodashUnifiedRules } from \"../rules\";\n\n/**\n * 项目允许使用的 Lodash 静态导入来源。\n *\n * `\"lodash\"` 允许根入口及 `lodash/*` 子路径;`\"lodash-unified\"` 只允许统一入口。\n */\nexport type LodashPreference = \"lodash\" | \"lodash-unified\";\n\n/**\n * 创建 Lodash 静态导入约束。\n *\n * @remarks\n * 该配置使用 ESLint 核心规则,因此不依赖 import-x 开关或额外插件。\n * 它只检查静态 `import` 与 `export ... from`,不会安装依赖或检查动态导入。\n *\n * @param preference - 项目唯一允许使用的 Lodash 包入口。\n * @param files - 应用导入约束的 ESLint glob 列表。\n * @returns 包含对应 Lodash 导入限制规则的 Flat Config 数组。\n */\nexport const createLodashConfigs = (preference: LodashPreference, files: readonly string[] = GLOBS_CODE): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: `@fast-china/lodash/${preference}`,\n\t\t\tfiles: [...files],\n\t\t\trules: preference === \"lodash\" ? preferLodashRules : preferLodashUnifiedRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;AAsBA,MAAa,uBAAuB,YAA8B,QAA2B,eAC5F,aAAa,CACZ;CACC,MAAM,sBAAsB;CAC5B,OAAO,CAAC,GAAG,KAAK;CAChB,OAAO,eAAe,WAAW,oBAAoB;AACtD,CACD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/markdown.d.ts
2
3
  /**
3
4
  * 创建 Markdown 结构与语法检查配置。
@@ -7,7 +8,7 @@
7
8
  *
8
9
  * @returns 包含 `@eslint/markdown` 推荐预置的 Flat Config 数组。
9
10
  */
10
- declare const createMarkdownConfigs: () => import("eslint/config").ConfigObject[];
11
+ declare const createMarkdownConfigs: () => ReturnType<typeof defineConfig>;
11
12
  //#endregion
12
13
  export { createMarkdownConfigs };
13
14
  //# sourceMappingURL=markdown.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.mjs","names":[],"sources":["../../src/configs/markdown.ts"],"sourcesContent":["import eslintMarkdown from \"@eslint/markdown\";\nimport { defineConfig } from \"eslint/config\";\nimport { GLOB_MARKDOWN } from \"../constants\";\n\n/**\n * 创建 Markdown 结构与语法检查配置。\n *\n * @remarks\n * 该配置检查 Markdown 文档本身;代码块是否接受额外语言规则由项目覆盖配置决定。\n *\n * @returns 包含 `@eslint/markdown` 推荐预置的 Flat Config 数组。\n */\nexport const createMarkdownConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/markdown\",\n\t\t\tfiles: [GLOB_MARKDOWN],\n\t\t\textends: [eslintMarkdown.configs.recommended],\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,8BACZ,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,aAAa;CACrB,SAAS,CAAC,eAAe,QAAQ,WAAW;AAC7C,CACD,CAAC"}
1
+ {"version":3,"file":"markdown.mjs","names":[],"sources":["../../src/configs/markdown.ts"],"sourcesContent":["import eslintMarkdown from \"@eslint/markdown\";\nimport { defineConfig } from \"eslint/config\";\nimport { GLOB_MARKDOWN } from \"../constants\";\n\n/**\n * 创建 Markdown 结构与语法检查配置。\n *\n * @remarks\n * 该配置检查 Markdown 文档本身;代码块是否接受额外语言规则由项目覆盖配置决定。\n *\n * @returns 包含 `@eslint/markdown` 推荐预置的 Flat Config 数组。\n */\nexport const createMarkdownConfigs = (): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/markdown\",\n\t\t\tfiles: [GLOB_MARKDOWN],\n\t\t\textends: [eslintMarkdown.configs.recommended],\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,8BACZ,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,aAAa;CACrB,SAAS,CAAC,eAAe,QAAQ,WAAW;AAC7C,CACD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/prettier.d.ts
2
3
  /**
3
4
  * 创建 Prettier 兼容层。
@@ -8,7 +9,7 @@
8
9
  *
9
10
  * @returns 包含命名后的 `eslint-config-prettier` Flat Config 数组。
10
11
  */
11
- declare const createPrettierConfigs: () => import("eslint/config").ConfigObject[];
12
+ declare const createPrettierConfigs: () => ReturnType<typeof defineConfig>;
12
13
  //#endregion
13
14
  export { createPrettierConfigs };
14
15
  //# sourceMappingURL=prettier.d.mts.map
@@ -1,6 +1,8 @@
1
1
  import { defineConfig } from "eslint/config";
2
2
  import eslintConfigPrettierFlat from "eslint-config-prettier/flat";
3
3
  //#region src/configs/prettier.ts
4
+ const prettierRules = { ...eslintConfigPrettierFlat.rules };
5
+ delete prettierRules["vue/html-closing-bracket-newline"];
4
6
  /**
5
7
  * 创建 Prettier 兼容层。
6
8
  *
@@ -12,7 +14,8 @@ import eslintConfigPrettierFlat from "eslint-config-prettier/flat";
12
14
  */
13
15
  const createPrettierConfigs = () => defineConfig([{
14
16
  ...eslintConfigPrettierFlat,
15
- name: "@fast-china/prettier"
17
+ name: "@fast-china/prettier",
18
+ rules: prettierRules
16
19
  }]);
17
20
  //#endregion
18
21
  export { createPrettierConfigs };
@@ -1 +1 @@
1
- {"version":3,"file":"prettier.mjs","names":[],"sources":["../../src/configs/prettier.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintConfigPrettierFlat from \"eslint-config-prettier/flat\";\n\n/**\n * 创建 Prettier 兼容层。\n *\n * @remarks\n * 它只关闭与 Prettier 冲突的 ESLint 格式规则,不会在 ESLint 进程中执行 Prettier。\n * 工厂始终把它放在内置配置之后,使上游预置的格式规则能够被正确覆盖。\n *\n * @returns 包含命名后的 `eslint-config-prettier` Flat Config 数组。\n */\nexport const createPrettierConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\t...eslintConfigPrettierFlat,\n\t\t\tname: \"@fast-china/prettier\",\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,8BACZ,aAAa,CACZ;CACC,GAAG;CACH,MAAM;AACP,CACD,CAAC"}
1
+ {"version":3,"file":"prettier.mjs","names":[],"sources":["../../src/configs/prettier.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintConfigPrettierFlat from \"eslint-config-prettier/flat\";\n\n// Vue 闭合括号换行约定与 Prettier 输出一致,无需由兼容层关闭。\nconst prettierRules = { ...eslintConfigPrettierFlat.rules };\ndelete prettierRules[\"vue/html-closing-bracket-newline\"];\n\n/**\n * 创建 Prettier 兼容层。\n *\n * @remarks\n * 它只关闭与 Prettier 冲突的 ESLint 格式规则,不会在 ESLint 进程中执行 Prettier。\n * 工厂始终把它放在内置配置之后,使上游预置的格式规则能够被正确覆盖。\n *\n * @returns 包含命名后的 `eslint-config-prettier` Flat Config 数组。\n */\nexport const createPrettierConfigs = (): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\t...eslintConfigPrettierFlat,\n\t\t\tname: \"@fast-china/prettier\",\n\t\t\trules: prettierRules,\n\t\t},\n\t]);\n"],"mappings":";;;AAIA,MAAM,gBAAgB,EAAE,GAAG,yBAAyB,MAAM;AAC1D,OAAO,cAAc;;;;;;;;;;AAWrB,MAAa,8BACZ,aAAa,CACZ;CACC,GAAG;CACH,MAAM;CACN,OAAO;AACR,CACD,CAAC"}
@@ -1,12 +1,12 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/react.d.ts
2
3
  /**
3
4
  * React 与兼容 JSX 运行时的检测设置。
4
5
  *
5
6
  * @remarks
6
- * 该对象通过 `fastConfig({ react: { ... } })` 传入。传入对象会启用 React 支持,并在
7
+ * 该对象直接传给 `createReactConfigs()`,用于调整 React 运行时识别设置。配置会在
7
8
  * JavaScript/JSX 和 TypeScript/TSX 文件上加载对应的 `@eslint-react` 推荐预置、React
8
- * 官方 Hooks Flat Config 以及本库规则。实际文件范围仍受顶层 `javascript`、
9
- * `typescript` 开关控制。
9
+ * 官方 Hooks 推荐预置以及本库 DOM 安全规则。
10
10
  *
11
11
  * 这些字段只传给 ESLint 插件用于理解项目的 React 语义,不会改变 JSX 编译方式、自动
12
12
  * 导入 React、设置打包器别名或安装兼容运行时。
@@ -39,55 +39,18 @@ interface ReactConfigOptions {
39
39
  */
40
40
  version?: string;
41
41
  }
42
- /**
43
- * React 配置生成器使用的语言状态。
44
- *
45
- * @remarks
46
- * `fastConfig()` 会自动推导这些值;直接组合配置片段时由调用方显式传入。
47
- *
48
- * 用户不直接配置该接口。`fastConfig()` 会把顶层 JavaScript、TypeScript 开关以及
49
- * TypeScript 类型感知状态转换为这里的三个布尔值,确保 React 不会重新接管已经关闭的
50
- * 文件类型,并为 TypeScript 选择正确的 `@eslint-react` 推荐预置。
51
- */
52
- interface ReactLanguageOptions {
53
- /**
54
- * 是否为 `.js`、`.cjs`、`.mjs` 与 `.jsx` 文件创建 React 配置。
55
- *
56
- * 该值来自顶层 `FastConfigOptions.javascript`;为 `false` 时即使 React 已启用,
57
- * React 配置也不会声明这些文件范围。
58
- * @defaultValue `true`
59
- */
60
- javascript?: boolean;
61
- /**
62
- * 是否为 TypeScript/TSX 选择需要类型信息的 React 推荐预置。
63
- *
64
- * 该值来自 `FastConfigOptions.typescript.typeChecked`,只影响 TypeScript React 配置;
65
- * JavaScript 配置始终使用普通推荐预置。
66
- * @defaultValue `false`
67
- */
68
- typeChecked?: boolean;
69
- /**
70
- * 是否为 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件创建 React 配置。
71
- *
72
- * 该值来自顶层 `FastConfigOptions.typescript`;为 `false` 时不会生成 TypeScript React
73
- * 片段,也不会仅因为 React 已启用而重新接管 TypeScript 文件。
74
- * @defaultValue `true`
75
- */
76
- typescript?: boolean;
77
- }
78
42
  /**
79
43
  * 创建 React、JSX/TSX 与 Hooks 配置。
80
44
  *
81
45
  * @remarks
82
- * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用
83
- * React 官方 Flat Config。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中
46
+ * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用 React
47
+ * 官方 Flat Recommended。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中
84
48
  * 定义,因此规则覆盖全部已启用脚本扩展名,而不仅是 `.jsx`/`.tsx`。
85
49
  *
86
50
  * @param options - React 版本、运行时导入来源与多态组件属性设置。
87
- * @param languages - 由调用方启用的脚本语言以及 TypeScript 类型感知状态。
88
- * @returns 仅包含已启用语言的 React 与 Hooks Flat Config 数组。
51
+ * @returns React JavaScript、类型感知 TypeScript 与 Hooks Flat Config 数组。
89
52
  */
90
- declare const createReactConfigs: ({ importSource, polymorphicPropName, version }?: ReactConfigOptions, { javascript, typeChecked, typescript }?: ReactLanguageOptions) => import("eslint/config").ConfigObject[];
53
+ declare const createReactConfigs: ({ importSource, polymorphicPropName, version }?: ReactConfigOptions) => ReturnType<typeof defineConfig>;
91
54
  //#endregion
92
55
  export { ReactConfigOptions, createReactConfigs };
93
56
  //# sourceMappingURL=react.d.mts.map
@@ -8,16 +8,15 @@ import eslintPluginReactHooks from "eslint-plugin-react-hooks";
8
8
  * 创建 React、JSX/TSX 与 Hooks 配置。
9
9
  *
10
10
  * @remarks
11
- * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用
12
- * React 官方 Flat Config。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中
11
+ * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用 React
12
+ * 官方 Flat Recommended。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中
13
13
  * 定义,因此规则覆盖全部已启用脚本扩展名,而不仅是 `.jsx`/`.tsx`。
14
14
  *
15
15
  * @param options - React 版本、运行时导入来源与多态组件属性设置。
16
- * @param languages - 由调用方启用的脚本语言以及 TypeScript 类型感知状态。
17
- * @returns 仅包含已启用语言的 React 与 Hooks Flat Config 数组。
16
+ * @returns React JavaScript、类型感知 TypeScript 与 Hooks Flat Config 数组。
18
17
  */
19
- const createReactConfigs = ({ importSource = "react", polymorphicPropName = "as", version = "detect" } = {}, { javascript = true, typeChecked = false, typescript = true } = {}) => {
20
- const createConfig = (name, files, preset) => ({
18
+ const createReactConfigs = ({ importSource = "react", polymorphicPropName = "as", version = "detect" } = {}) => {
19
+ const createConfig = (name, files, preset) => defineConfig([{
21
20
  name,
22
21
  files: [...files],
23
22
  extends: [preset, eslintPluginReactHooks.configs.flat.recommended],
@@ -27,8 +26,8 @@ const createReactConfigs = ({ importSource = "react", polymorphicPropName = "as"
27
26
  version
28
27
  } },
29
28
  rules: reactRules
30
- });
31
- return defineConfig([...javascript ? [createConfig("@fast-china/react/javascript", GLOBS_JAVASCRIPT, eslintReact.configs.recommended)] : [], ...typescript ? [createConfig(typeChecked ? "@fast-china/react/typescript-type-checked" : "@fast-china/react/typescript", GLOBS_TYPESCRIPT, typeChecked ? eslintReact.configs["recommended-type-checked"] : eslintReact.configs["recommended-typescript"])] : []]);
29
+ }]);
30
+ return defineConfig([...createConfig("@fast-china/react/javascript", GLOBS_JAVASCRIPT, eslintReact.configs.recommended), ...createConfig("@fast-china/react/typescript-type-checked", GLOBS_TYPESCRIPT, eslintReact.configs["recommended-type-checked"])]);
32
31
  };
33
32
  //#endregion
34
33
  export { createReactConfigs };
@@ -1 +1 @@
1
- {"version":3,"file":"react.mjs","names":[],"sources":["../../src/configs/react.ts"],"sourcesContent":["import eslintReact from \"@eslint-react/eslint-plugin\";\nimport { defineConfig } from \"eslint/config\";\nimport eslintPluginReactHooks from \"eslint-plugin-react-hooks\";\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT } from \"../constants\";\nimport { reactRules } from \"../rules\";\nimport type { Linter } from \"eslint\";\n\n/**\n * React 与兼容 JSX 运行时的检测设置。\n *\n * @remarks\n * 该对象通过 `fastConfig({ react: { ... } })` 传入。传入对象会启用 React 支持,并在\n * JavaScript/JSX 和 TypeScript/TSX 文件上加载对应的 `@eslint-react` 推荐预置、React\n * 官方 Hooks Flat Config 以及本库规则。实际文件范围仍受顶层 `javascript`、\n * `typescript` 开关控制。\n *\n * 这些字段只传给 ESLint 插件用于理解项目的 React 语义,不会改变 JSX 编译方式、自动\n * 导入 React、设置打包器别名或安装兼容运行时。\n */\nexport interface ReactConfigOptions {\n\t/**\n\t * 提供 React API 与 JSX 运行时的包入口名称。\n\t *\n\t * 标准 React 项目保持 `\"react\"`;Preact 等兼容运行时可填写自身包名,使\n\t * `@eslint-react` 按正确的导入来源识别组件和 API。该设置不会修改 TypeScript\n\t * `jsxImportSource`、Babel、Vite 或其他构建工具配置,两侧需要由项目自行保持一致。\n\t * @defaultValue `\"react\"`\n\t */\n\timportSource?: string;\n\t/**\n\t * 项目约定用于切换多态组件底层元素或组件类型的属性名。\n\t *\n\t * 例如 `<Button as=\"a\" />` 中的 `as`。插件会据此理解多态组件最终渲染元素的语义,\n\t * 从而提高 DOM 与可访问性相关规则的判断准确度;未采用多态组件时通常无需修改。\n\t * @defaultValue `\"as\"`\n\t */\n\tpolymorphicPropName?: string;\n\t/**\n\t * 供插件选择版本相关行为的 React 版本号或自动检测标记。\n\t *\n\t * `\"detect\"` 会尝试从当前项目依赖解析已安装的 React 版本。monorepo、PnP、兼容运行时\n\t * 或依赖不可见的执行环境若无法可靠检测,可传入明确版本号,例如 `\"19.1.0\"`。\n\t * 该值只影响 lint 规则判断,不会限制或安装 React 依赖版本。\n\t * @defaultValue `\"detect\"`\n\t */\n\tversion?: string;\n}\n\n/**\n * React 配置生成器使用的语言状态。\n *\n * @remarks\n * `fastConfig()` 会自动推导这些值;直接组合配置片段时由调用方显式传入。\n *\n * 用户不直接配置该接口。`fastConfig()` 会把顶层 JavaScript、TypeScript 开关以及\n * TypeScript 类型感知状态转换为这里的三个布尔值,确保 React 不会重新接管已经关闭的\n * 文件类型,并为 TypeScript 选择正确的 `@eslint-react` 推荐预置。\n */\ninterface ReactLanguageOptions {\n\t/**\n\t * 是否为 `.js`、`.cjs`、`.mjs` 与 `.jsx` 文件创建 React 配置。\n\t *\n\t * 该值来自顶层 `FastConfigOptions.javascript`;为 `false` 时即使 React 已启用,\n\t * React 配置也不会声明这些文件范围。\n\t * @defaultValue `true`\n\t */\n\tjavascript?: boolean;\n\t/**\n\t * 是否为 TypeScript/TSX 选择需要类型信息的 React 推荐预置。\n\t *\n\t * 该值来自 `FastConfigOptions.typescript.typeChecked`,只影响 TypeScript React 配置;\n\t * JavaScript 配置始终使用普通推荐预置。\n\t * @defaultValue `false`\n\t */\n\ttypeChecked?: boolean;\n\t/**\n\t * 是否为 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件创建 React 配置。\n\t *\n\t * 该值来自顶层 `FastConfigOptions.typescript`;为 `false` 时不会生成 TypeScript React\n\t * 片段,也不会仅因为 React 已启用而重新接管 TypeScript 文件。\n\t * @defaultValue `true`\n\t */\n\ttypescript?: boolean;\n}\n\n/**\n * 创建 React、JSX/TSX 与 Hooks 配置。\n *\n * @remarks\n * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用\n * React 官方 Flat Config。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中\n * 定义,因此规则覆盖全部已启用脚本扩展名,而不仅是 `.jsx`/`.tsx`。\n *\n * @param options - React 版本、运行时导入来源与多态组件属性设置。\n * @param languages - 由调用方启用的脚本语言以及 TypeScript 类型感知状态。\n * @returns 仅包含已启用语言的 React 与 Hooks Flat Config 数组。\n */\nexport const createReactConfigs = (\n\t{ importSource = \"react\", polymorphicPropName = \"as\", version = \"detect\" }: ReactConfigOptions = {},\n\t{ javascript = true, typeChecked = false, typescript = true }: ReactLanguageOptions = {}\n) => {\n\tconst createConfig = (name: string, files: readonly string[], preset: Linter.Config) => ({\n\t\tname,\n\t\tfiles: [...files],\n\t\textends: [preset, eslintPluginReactHooks.configs.flat.recommended],\n\t\tsettings: {\n\t\t\t\"react-x\": {\n\t\t\t\timportSource,\n\t\t\t\tpolymorphicPropName,\n\t\t\t\tversion,\n\t\t\t},\n\t\t},\n\t\trules: reactRules,\n\t});\n\n\treturn defineConfig([\n\t\t...(javascript ? [createConfig(\"@fast-china/react/javascript\", GLOBS_JAVASCRIPT, eslintReact.configs.recommended)] : []),\n\t\t...(typescript\n\t\t\t? [\n\t\t\t\t\tcreateConfig(\n\t\t\t\t\t\ttypeChecked ? \"@fast-china/react/typescript-type-checked\" : \"@fast-china/react/typescript\",\n\t\t\t\t\t\tGLOBS_TYPESCRIPT,\n\t\t\t\t\t\ttypeChecked ? eslintReact.configs[\"recommended-type-checked\"] : eslintReact.configs[\"recommended-typescript\"]\n\t\t\t\t\t),\n\t\t\t\t]\n\t\t\t: []),\n\t]);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiGA,MAAa,sBACZ,EAAE,eAAe,SAAS,sBAAsB,MAAM,UAAU,aAAiC,CAAC,GAClG,EAAE,aAAa,MAAM,cAAc,OAAO,aAAa,SAA+B,CAAC,MACnF;CACJ,MAAM,gBAAgB,MAAc,OAA0B,YAA2B;EACxF;EACA,OAAO,CAAC,GAAG,KAAK;EAChB,SAAS,CAAC,QAAQ,uBAAuB,QAAQ,KAAK,WAAW;EACjE,UAAU,EACT,WAAW;GACV;GACA;GACA;EACD,EACD;EACA,OAAO;CACR;CAEA,OAAO,aAAa,CACnB,GAAI,aAAa,CAAC,aAAa,gCAAgC,kBAAkB,YAAY,QAAQ,WAAW,CAAC,IAAI,CAAC,GACtH,GAAI,aACD,CACA,aACC,cAAc,8CAA8C,gCAC5D,kBACA,cAAc,YAAY,QAAQ,8BAA8B,YAAY,QAAQ,yBACrF,CACD,IACC,CAAC,CACL,CAAC;AACF"}
1
+ {"version":3,"file":"react.mjs","names":[],"sources":["../../src/configs/react.ts"],"sourcesContent":["import eslintReact from \"@eslint-react/eslint-plugin\";\nimport { defineConfig } from \"eslint/config\";\nimport eslintPluginReactHooks from \"eslint-plugin-react-hooks\";\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT } from \"../constants\";\nimport { reactRules } from \"../rules\";\nimport type { Linter } from \"eslint\";\n\n/**\n * React 与兼容 JSX 运行时的检测设置。\n *\n * @remarks\n * 该对象直接传给 `createReactConfigs()`,用于调整 React 运行时识别设置。配置会在\n * JavaScript/JSX 和 TypeScript/TSX 文件上加载对应的 `@eslint-react` 推荐预置、React\n * 官方 Hooks 推荐预置以及本库 DOM 安全规则。\n *\n * 这些字段只传给 ESLint 插件用于理解项目的 React 语义,不会改变 JSX 编译方式、自动\n * 导入 React、设置打包器别名或安装兼容运行时。\n */\nexport interface ReactConfigOptions {\n\t/**\n\t * 提供 React API 与 JSX 运行时的包入口名称。\n\t *\n\t * 标准 React 项目保持 `\"react\"`;Preact 等兼容运行时可填写自身包名,使\n\t * `@eslint-react` 按正确的导入来源识别组件和 API。该设置不会修改 TypeScript\n\t * `jsxImportSource`、Babel、Vite 或其他构建工具配置,两侧需要由项目自行保持一致。\n\t * @defaultValue `\"react\"`\n\t */\n\timportSource?: string;\n\t/**\n\t * 项目约定用于切换多态组件底层元素或组件类型的属性名。\n\t *\n\t * 例如 `<Button as=\"a\" />` 中的 `as`。插件会据此理解多态组件最终渲染元素的语义,\n\t * 从而提高 DOM 与可访问性相关规则的判断准确度;未采用多态组件时通常无需修改。\n\t * @defaultValue `\"as\"`\n\t */\n\tpolymorphicPropName?: string;\n\t/**\n\t * 供插件选择版本相关行为的 React 版本号或自动检测标记。\n\t *\n\t * `\"detect\"` 会尝试从当前项目依赖解析已安装的 React 版本。monorepo、PnP、兼容运行时\n\t * 或依赖不可见的执行环境若无法可靠检测,可传入明确版本号,例如 `\"19.1.0\"`。\n\t * 该值只影响 lint 规则判断,不会限制或安装 React 依赖版本。\n\t * @defaultValue `\"detect\"`\n\t */\n\tversion?: string;\n}\n\n/**\n * 创建 React、JSX/TSX 与 Hooks 配置。\n *\n * @remarks\n * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用 React\n * 官方 Flat Recommended。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中\n * 定义,因此规则覆盖全部已启用脚本扩展名,而不仅是 `.jsx`/`.tsx`。\n *\n * @param options - React 版本、运行时导入来源与多态组件属性设置。\n * @returns React JavaScript、类型感知 TypeScript 与 Hooks Flat Config 数组。\n */\nexport const createReactConfigs = ({ importSource = \"react\", polymorphicPropName = \"as\", version = \"detect\" }: ReactConfigOptions = {}): ReturnType<\n\ttypeof defineConfig\n> => {\n\tconst createConfig = (name: string, files: readonly string[], preset: Linter.Config): ReturnType<typeof defineConfig> =>\n\t\tdefineConfig([\n\t\t\t{\n\t\t\t\tname,\n\t\t\t\tfiles: [...files],\n\t\t\t\textends: [preset, eslintPluginReactHooks.configs.flat.recommended],\n\t\t\t\tsettings: {\n\t\t\t\t\t\"react-x\": {\n\t\t\t\t\t\timportSource,\n\t\t\t\t\t\tpolymorphicPropName,\n\t\t\t\t\t\tversion,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trules: reactRules,\n\t\t\t},\n\t\t]);\n\n\treturn defineConfig([\n\t\t...createConfig(\"@fast-china/react/javascript\", GLOBS_JAVASCRIPT, eslintReact.configs.recommended),\n\t\t...createConfig(\"@fast-china/react/typescript-type-checked\", GLOBS_TYPESCRIPT, eslintReact.configs[\"recommended-type-checked\"]),\n\t]);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AA0DA,MAAa,sBAAsB,EAAE,eAAe,SAAS,sBAAsB,MAAM,UAAU,aAAiC,CAAC,MAEhI;CACJ,MAAM,gBAAgB,MAAc,OAA0B,WAC7D,aAAa,CACZ;EACC;EACA,OAAO,CAAC,GAAG,KAAK;EAChB,SAAS,CAAC,QAAQ,uBAAuB,QAAQ,KAAK,WAAW;EACjE,UAAU,EACT,WAAW;GACV;GACA;GACA;EACD,EACD;EACA,OAAO;CACR,CACD,CAAC;CAEF,OAAO,aAAa,CACnB,GAAG,aAAa,gCAAgC,kBAAkB,YAAY,QAAQ,WAAW,GACjG,GAAG,aAAa,6CAA6C,kBAAkB,YAAY,QAAQ,2BAA2B,CAC/H,CAAC;AACF"}
@@ -1,15 +1,15 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/regexp.d.ts
2
3
  /**
3
4
  * 创建正则表达式正确性配置。
4
5
  *
5
6
  * @remarks
6
- * 插件推荐规则会检查无效、冗余或容易产生回溯问题的正则结构;部分规则可修复,
7
- * 批量修复后仍需运行覆盖真实输入的项目测试。
7
+ * 只启用本仓库明确维护的正确性与安全规则,不继承包含大量语法偏好的完整推荐预置。
8
8
  *
9
9
  * @param files - 应用正则表达式规则的 ESLint glob 列表。
10
- * @returns 包含 `eslint-plugin-regexp` 推荐预置的 Flat Config 数组。
10
+ * @returns 包含正则插件及公共正则规则的 Flat Config 数组。
11
11
  */
12
- declare const createRegexpConfigs: (files?: readonly string[]) => import("eslint/config").ConfigObject[];
12
+ declare const createRegexpConfigs: (files?: readonly string[]) => ReturnType<typeof defineConfig>;
13
13
  //#endregion
14
14
  export { createRegexpConfigs };
15
15
  //# sourceMappingURL=regexp.d.mts.map
@@ -1,4 +1,5 @@
1
1
  import { GLOBS_CODE } from "../constants/index.mjs";
2
+ import { regexpRules } from "../rules/regexp.mjs";
2
3
  import { defineConfig } from "eslint/config";
3
4
  import eslintPluginRegexp from "eslint-plugin-regexp";
4
5
  //#region src/configs/regexp.ts
@@ -6,16 +7,16 @@ import eslintPluginRegexp from "eslint-plugin-regexp";
6
7
  * 创建正则表达式正确性配置。
7
8
  *
8
9
  * @remarks
9
- * 插件推荐规则会检查无效、冗余或容易产生回溯问题的正则结构;部分规则可修复,
10
- * 批量修复后仍需运行覆盖真实输入的项目测试。
10
+ * 只启用本仓库明确维护的正确性与安全规则,不继承包含大量语法偏好的完整推荐预置。
11
11
  *
12
12
  * @param files - 应用正则表达式规则的 ESLint glob 列表。
13
- * @returns 包含 `eslint-plugin-regexp` 推荐预置的 Flat Config 数组。
13
+ * @returns 包含正则插件及公共正则规则的 Flat Config 数组。
14
14
  */
15
15
  const createRegexpConfigs = (files = GLOBS_CODE) => defineConfig([{
16
16
  name: "@fast-china/regexp",
17
17
  files: [...files],
18
- extends: [eslintPluginRegexp.configs["flat/recommended"]]
18
+ plugins: { regexp: eslintPluginRegexp },
19
+ rules: regexpRules
19
20
  }]);
20
21
  //#endregion
21
22
  export { createRegexpConfigs };
@@ -1 +1 @@
1
- {"version":3,"file":"regexp.mjs","names":[],"sources":["../../src/configs/regexp.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginRegexp from \"eslint-plugin-regexp\";\nimport { GLOBS_CODE } from \"../constants\";\n\n/**\n * 创建正则表达式正确性配置。\n *\n * @remarks\n * 插件推荐规则会检查无效、冗余或容易产生回溯问题的正则结构;部分规则可修复,\n * 批量修复后仍需运行覆盖真实输入的项目测试。\n *\n * @param files - 应用正则表达式规则的 ESLint glob 列表。\n * @returns 包含 `eslint-plugin-regexp` 推荐预置的 Flat Config 数组。\n */\nexport const createRegexpConfigs = (files: readonly string[] = GLOBS_CODE) =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/regexp\",\n\t\t\tfiles: [...files],\n\t\t\textends: [eslintPluginRegexp.configs[\"flat/recommended\"]],\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAa,uBAAuB,QAA2B,eAC9D,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,mBAAmB,QAAQ,mBAAmB;AACzD,CACD,CAAC"}
1
+ {"version":3,"file":"regexp.mjs","names":[],"sources":["../../src/configs/regexp.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginRegexp from \"eslint-plugin-regexp\";\nimport { GLOBS_CODE } from \"../constants\";\nimport { regexpRules } from \"../rules\";\n\n/**\n * 创建正则表达式正确性配置。\n *\n * @remarks\n * 只启用本仓库明确维护的正确性与安全规则,不继承包含大量语法偏好的完整推荐预置。\n *\n * @param files - 应用正则表达式规则的 ESLint glob 列表。\n * @returns 包含正则插件及公共正则规则的 Flat Config 数组。\n */\nexport const createRegexpConfigs = (files: readonly string[] = GLOBS_CODE): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/regexp\",\n\t\t\tfiles: [...files],\n\t\t\tplugins: {\n\t\t\t\tregexp: eslintPluginRegexp,\n\t\t\t},\n\t\t\trules: regexpRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAa,uBAAuB,QAA2B,eAC9D,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,EACR,QAAQ,mBACT;CACA,OAAO;AACR,CACD,CAAC"}
@@ -1,14 +1,15 @@
1
+ import { defineConfig } from "eslint/config";
1
2
  //#region src/configs/sort-package.d.ts
2
3
  /**
3
4
  * 创建 package.json 排序配置。
4
5
  *
5
6
  * @remarks
6
- * 该能力会产生较大的可修复 diff,因此必须显式启用;规则不会进入顺序具有
7
- * 条件导出语义的 `exports` 对象内部。
7
+ * 固定项目组合默认启用该能力。首次修复可能产生较大的排序 diff;规则不会进入顺序
8
+ * 具有条件导出语义的 `exports` 对象内部。
8
9
  *
9
10
  * @returns 仅匹配 `package.json` 的字段排序 Flat Config 数组。
10
11
  */
11
- declare const createPackageJsonSortConfigs: () => import("eslint/config").ConfigObject[];
12
+ declare const createPackageJsonSortConfigs: () => ReturnType<typeof defineConfig>;
12
13
  //#endregion
13
14
  export { createPackageJsonSortConfigs };
14
15
  //# sourceMappingURL=sort-package.d.mts.map
@@ -5,8 +5,8 @@ import { defineConfig } from "eslint/config";
5
5
  * 创建 package.json 排序配置。
6
6
  *
7
7
  * @remarks
8
- * 该能力会产生较大的可修复 diff,因此必须显式启用;规则不会进入顺序具有
9
- * 条件导出语义的 `exports` 对象内部。
8
+ * 固定项目组合默认启用该能力。首次修复可能产生较大的排序 diff;规则不会进入顺序
9
+ * 具有条件导出语义的 `exports` 对象内部。
10
10
  *
11
11
  * @returns 仅匹配 `package.json` 的字段排序 Flat Config 数组。
12
12
  */