@fast-china/eslint-config 2.0.4 → 2.0.6

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 (119) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/CONTRIBUTING.md +62 -0
  3. package/README.md +19 -6
  4. package/README.zh.md +19 -6
  5. package/SECURITY.md +133 -0
  6. package/dist/configs/angular.d.mts +7 -2
  7. package/dist/configs/angular.d.mts.map +1 -1
  8. package/dist/configs/angular.mjs +4 -0
  9. package/dist/configs/angular.mjs.map +1 -1
  10. package/dist/configs/common.d.mts +4 -0
  11. package/dist/configs/common.d.mts.map +1 -1
  12. package/dist/configs/common.mjs +4 -0
  13. package/dist/configs/common.mjs.map +1 -1
  14. package/dist/configs/environment.d.mts +16 -4
  15. package/dist/configs/environment.d.mts.map +1 -1
  16. package/dist/configs/environment.mjs +4 -0
  17. package/dist/configs/environment.mjs.map +1 -1
  18. package/dist/configs/ignores.d.mts +16 -2
  19. package/dist/configs/ignores.d.mts.map +1 -1
  20. package/dist/configs/ignores.mjs +16 -2
  21. package/dist/configs/ignores.mjs.map +1 -1
  22. package/dist/configs/import.d.mts +4 -0
  23. package/dist/configs/import.d.mts.map +1 -1
  24. package/dist/configs/import.mjs +4 -0
  25. package/dist/configs/import.mjs.map +1 -1
  26. package/dist/configs/javascript.d.mts +5 -0
  27. package/dist/configs/javascript.d.mts.map +1 -1
  28. package/dist/configs/javascript.mjs +5 -0
  29. package/dist/configs/javascript.mjs.map +1 -1
  30. package/dist/configs/json.d.mts +4 -0
  31. package/dist/configs/json.d.mts.map +1 -1
  32. package/dist/configs/json.mjs +4 -0
  33. package/dist/configs/json.mjs.map +1 -1
  34. package/dist/configs/lodash.d.mts +11 -1
  35. package/dist/configs/lodash.d.mts.map +1 -1
  36. package/dist/configs/lodash.mjs +6 -0
  37. package/dist/configs/lodash.mjs.map +1 -1
  38. package/dist/configs/markdown.d.mts +3 -0
  39. package/dist/configs/markdown.d.mts.map +1 -1
  40. package/dist/configs/markdown.mjs +3 -0
  41. package/dist/configs/markdown.mjs.map +1 -1
  42. package/dist/configs/prettier.d.mts +3 -0
  43. package/dist/configs/prettier.d.mts.map +1 -1
  44. package/dist/configs/prettier.mjs +3 -0
  45. package/dist/configs/prettier.mjs.map +1 -1
  46. package/dist/configs/react.d.mts +13 -6
  47. package/dist/configs/react.d.mts.map +1 -1
  48. package/dist/configs/react.mjs +5 -0
  49. package/dist/configs/react.mjs.map +1 -1
  50. package/dist/configs/regexp.d.mts +4 -0
  51. package/dist/configs/regexp.d.mts.map +1 -1
  52. package/dist/configs/regexp.mjs +4 -0
  53. package/dist/configs/regexp.mjs.map +1 -1
  54. package/dist/configs/sort-package.d.mts +3 -0
  55. package/dist/configs/sort-package.d.mts.map +1 -1
  56. package/dist/configs/sort-package.mjs +3 -0
  57. package/dist/configs/sort-package.mjs.map +1 -1
  58. package/dist/configs/sort-tsconfig.d.mts +3 -0
  59. package/dist/configs/sort-tsconfig.d.mts.map +1 -1
  60. package/dist/configs/sort-tsconfig.mjs +3 -0
  61. package/dist/configs/sort-tsconfig.mjs.map +1 -1
  62. package/dist/configs/typescript.d.mts +19 -3
  63. package/dist/configs/typescript.d.mts.map +1 -1
  64. package/dist/configs/typescript.mjs +16 -1
  65. package/dist/configs/typescript.mjs.map +1 -1
  66. package/dist/configs/vue.d.mts +7 -2
  67. package/dist/configs/vue.d.mts.map +1 -1
  68. package/dist/configs/vue.mjs +4 -0
  69. package/dist/configs/vue.mjs.map +1 -1
  70. package/dist/constants/index.d.mts +12 -2
  71. package/dist/constants/index.d.mts.map +1 -1
  72. package/dist/constants/index.mjs +12 -2
  73. package/dist/constants/index.mjs.map +1 -1
  74. package/dist/index.d.mts +48 -19
  75. package/dist/index.d.mts.map +1 -1
  76. package/dist/index.mjs +31 -1
  77. package/dist/index.mjs.map +1 -1
  78. package/dist/rules/angular.d.mts +15 -2
  79. package/dist/rules/angular.d.mts.map +1 -1
  80. package/dist/rules/angular.mjs +15 -2
  81. package/dist/rules/angular.mjs.map +1 -1
  82. package/dist/rules/common.d.mts +1 -0
  83. package/dist/rules/common.d.mts.map +1 -1
  84. package/dist/rules/common.mjs +1 -0
  85. package/dist/rules/common.mjs.map +1 -1
  86. package/dist/rules/import.d.mts +7 -1
  87. package/dist/rules/import.d.mts.map +1 -1
  88. package/dist/rules/import.mjs +7 -1
  89. package/dist/rules/import.mjs.map +1 -1
  90. package/dist/rules/javascript.d.mts +2 -0
  91. package/dist/rules/javascript.d.mts.map +1 -1
  92. package/dist/rules/javascript.mjs +2 -0
  93. package/dist/rules/javascript.mjs.map +1 -1
  94. package/dist/rules/lodash.d.mts +2 -0
  95. package/dist/rules/lodash.d.mts.map +1 -1
  96. package/dist/rules/lodash.mjs +2 -0
  97. package/dist/rules/lodash.mjs.map +1 -1
  98. package/dist/rules/react.d.mts +1 -0
  99. package/dist/rules/react.d.mts.map +1 -1
  100. package/dist/rules/react.mjs +1 -0
  101. package/dist/rules/react.mjs.map +1 -1
  102. package/dist/rules/sort-package.d.mts +1 -0
  103. package/dist/rules/sort-package.d.mts.map +1 -1
  104. package/dist/rules/sort-package.mjs +1 -0
  105. package/dist/rules/sort-package.mjs.map +1 -1
  106. package/dist/rules/sort-tsconfig.d.mts +1 -0
  107. package/dist/rules/sort-tsconfig.d.mts.map +1 -1
  108. package/dist/rules/sort-tsconfig.mjs +1 -0
  109. package/dist/rules/sort-tsconfig.mjs.map +1 -1
  110. package/dist/rules/typescript.d.mts +2 -0
  111. package/dist/rules/typescript.d.mts.map +1 -1
  112. package/dist/rules/typescript.mjs +2 -0
  113. package/dist/rules/typescript.mjs.map +1 -1
  114. package/dist/rules/vue.d.mts +2 -0
  115. package/dist/rules/vue.d.mts.map +1 -1
  116. package/dist/rules/vue.mjs +2 -0
  117. package/dist/rules/vue.mjs.map +1 -1
  118. package/docs/engineering-audit.zh.md +4 -2
  119. package/package.json +7 -3
@@ -6,8 +6,13 @@ import tseslint from "typescript-eslint";
6
6
  /**
7
7
  * 返回 typescript-eslint 推荐预置。
8
8
  *
9
+ * @remarks
9
10
  * Vue SFC 需要移除上游仅匹配 `.ts` 的文件范围,否则这些关闭核心规则的配置会与
10
11
  * `.vue` 外层范围形成不可能命中的 AND 条件。
12
+ *
13
+ * @param typeChecked - 是否选择依赖完整类型信息的推荐与风格预置。
14
+ * @param removeFileScopes - 是否从每个上游预置中移除 `files` 范围。
15
+ * @returns 新的预置数组;移除范围时会复制各配置对象,不修改 typescript-eslint 的导出。
11
16
  */
12
17
  const getTypeScriptPresetConfigs = (typeChecked, removeFileScopes = false) => {
13
18
  const configs = [...typeChecked ? tseslint.configs.recommendedTypeChecked : tseslint.configs.recommended, ...typeChecked ? tseslint.configs.stylisticTypeChecked : tseslint.configs.stylistic];
@@ -17,7 +22,12 @@ const getTypeScriptPresetConfigs = (typeChecked, removeFileScopes = false) => {
17
22
  return configWithoutFiles;
18
23
  });
19
24
  };
20
- /** 创建启用 Project Service 时需要的解析器选项。 */
25
+ /**
26
+ * 创建 TypeScript 解析器的 Project Service 选项。
27
+ *
28
+ * @param options - 类型感知开关及可选的 tsconfig 查找根目录。
29
+ * @returns 未启用类型感知时返回空对象;启用时返回 `projectService` 及可选的 `tsconfigRootDir`。
30
+ */
21
31
  const createTypeScriptParserOptions = ({ typeChecked = false, tsconfigRootDir } = {}) => ({
22
32
  ...typeChecked ? { projectService: true } : {},
23
33
  ...typeChecked && tsconfigRootDir ? { tsconfigRootDir } : {}
@@ -25,8 +35,13 @@ const createTypeScriptParserOptions = ({ typeChecked = false, tsconfigRootDir }
25
35
  /**
26
36
  * 创建 TypeScript 配置。
27
37
  *
38
+ * @remarks
28
39
  * 默认采用无需类型信息的 recommended + stylistic 预置;`typeChecked: true` 会切换为
29
40
  * 对应的类型感知预置并启动 Project Service。
41
+ *
42
+ * @param options - TypeScript 类型感知与 tsconfig 根目录选项。
43
+ * @param files - 应用 TypeScript 配置的 ESLint glob 列表。
44
+ * @returns 包含 TypeScript 预置、解析器选项与本地规则的 Flat Config 数组。
30
45
  */
31
46
  const createTypeScriptConfigs = (options = {}, files = GLOBS_TYPESCRIPT) => defineConfig([{
32
47
  name: options.typeChecked ? "@fast-china/typescript/type-checked" : "@fast-china/typescript",
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.mjs","names":[],"sources":["../../src/configs/typescript.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport tseslint from \"typescript-eslint\";\n\nimport { GLOBS_TYPESCRIPT } from \"../constants\";\nimport { typescriptRules } from \"../rules\";\n\nimport type { Linter } from \"eslint\";\n\n/**\n * TypeScript 解析器、推荐预置与类型感知检查选项。\n *\n * 该对象通过 `fastConfig({ typescript: { ... } })` 传入。传入对象会启用 TypeScript\n * 支持,并检查 `.ts`、`.cts`、`.mts` 与 `.tsx`。相同的类型感知状态还会传递给已启用的\n * Vue 和 React 配置,使普通 TypeScript 文件、Vue SFC 与 TSX 使用一致的检查级别。\n *\n * 默认模式不读取类型信息,启动快且不要求文件属于某个 tsconfig;类型感知模式会启动\n * typescript-eslint Project Service,能够执行更强的语义规则,但要求项目配置和执行目录\n * 正确,并会增加首次检查时间与内存占用。\n */\nexport interface TypeScriptConfigOptions {\n\t/**\n\t * 是否启用依赖完整 TypeScript 类型信息的规则。\n\t *\n\t * `false` 使用 typescript-eslint 的 `recommended` 与 `stylistic` 预置,不创建 TypeScript\n\t * Program。`true` 切换到 `recommendedTypeChecked` 与 `stylisticTypeChecked`,并启用\n\t * `parserOptions.projectService`。被检查文件通常需要包含在可发现的 tsconfig 中,否则\n\t * Project Service 会报告文件不属于项目。\n\t *\n\t * 开启后 Vue 与 React 的 TypeScript 规则也会选择类型感知版本。大型 monorepo 建议评估\n\t * lint 启动耗时和内存占用,并确保各工作区 tsconfig 边界明确。\n\t * @default false\n\t */\n\ttypeChecked?: boolean;\n\t/**\n\t * typescript-eslint 查找 tsconfig 与创建 Project Service 时使用的根目录。\n\t *\n\t * 仅在 `typeChecked: true` 时写入解析器选项。普通单仓库通常可让 typescript-eslint 从\n\t * `eslint.config.*` 调用栈推断;复杂 monorepo、共享配置包装层或从其他目录启动 ESLint\n\t * 时,建议传入配置文件所在目录的绝对路径,例如 `import.meta.dirname`,避免发现错误的\n\t * tsconfig 或跨越预期的项目边界。\n\t * @default undefined\n\t */\n\ttsconfigRootDir?: string;\n}\n\n/**\n * 返回 typescript-eslint 推荐预置。\n *\n * Vue SFC 需要移除上游仅匹配 `.ts` 的文件范围,否则这些关闭核心规则的配置会与\n * `.vue` 外层范围形成不可能命中的 AND 条件。\n */\nexport const getTypeScriptPresetConfigs = (typeChecked: boolean, removeFileScopes = false): Linter.Config[] => {\n\tconst configs = [\n\t\t...(typeChecked ? tseslint.configs.recommendedTypeChecked : tseslint.configs.recommended),\n\t\t...(typeChecked ? tseslint.configs.stylisticTypeChecked : tseslint.configs.stylistic),\n\t] as Linter.Config[];\n\n\tif (!removeFileScopes) return configs;\n\n\treturn configs.map((config) => {\n\t\tconst { files: _files, ...configWithoutFiles } = config;\n\t\treturn configWithoutFiles;\n\t});\n};\n\n/** 创建启用 Project Service 时需要的解析器选项。 */\nexport const createTypeScriptParserOptions = ({ typeChecked = false, tsconfigRootDir }: TypeScriptConfigOptions = {}) => ({\n\t...(typeChecked ? { projectService: true } : {}),\n\t...(typeChecked && tsconfigRootDir ? { tsconfigRootDir } : {}),\n});\n\n/**\n * 创建 TypeScript 配置。\n *\n * 默认采用无需类型信息的 recommended + stylistic 预置;`typeChecked: true` 会切换为\n * 对应的类型感知预置并启动 Project Service。\n */\nexport const createTypeScriptConfigs = (options: TypeScriptConfigOptions = {}, files: readonly string[] = GLOBS_TYPESCRIPT) =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: options.typeChecked ? \"@fast-china/typescript/type-checked\" : \"@fast-china/typescript\",\n\t\t\tfiles: [...files],\n\t\t\textends: getTypeScriptPresetConfigs(options.typeChecked ?? false),\n\t\t\tlanguageOptions: {\n\t\t\t\tecmaVersion: \"latest\",\n\t\t\t\tparserOptions: createTypeScriptParserOptions(options),\n\t\t\t},\n\t\t\trules: typescriptRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;AAmDA,MAAa,8BAA8B,aAAsB,mBAAmB,UAA2B;CAC9G,MAAM,UAAU,CACf,GAAI,cAAc,SAAS,QAAQ,yBAAyB,SAAS,QAAQ,aAC7E,GAAI,cAAc,SAAS,QAAQ,uBAAuB,SAAS,QAAQ,SAC5E;CAEA,IAAI,CAAC,kBAAkB,OAAO;CAE9B,OAAO,QAAQ,KAAK,WAAW;EAC9B,MAAM,EAAE,OAAO,QAAQ,GAAG,uBAAuB;EACjD,OAAO;CACR,CAAC;AACF;;AAGA,MAAa,iCAAiC,EAAE,cAAc,OAAO,oBAA6C,CAAC,OAAO;CACzH,GAAI,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C,GAAI,eAAe,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAC7D;;;;;;;AAQA,MAAa,2BAA2B,UAAmC,CAAC,GAAG,QAA2B,qBACzG,aAAa,CACZ;CACC,MAAM,QAAQ,cAAc,wCAAwC;CACpE,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,2BAA2B,QAAQ,eAAe,KAAK;CAChE,iBAAiB;EAChB,aAAa;EACb,eAAe,8BAA8B,OAAO;CACrD;CACA,OAAO;AACR,CACD,CAAC"}
1
+ {"version":3,"file":"typescript.mjs","names":[],"sources":["../../src/configs/typescript.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport tseslint from \"typescript-eslint\";\n\nimport { GLOBS_TYPESCRIPT } from \"../constants\";\nimport { typescriptRules } from \"../rules\";\n\nimport type { Linter } from \"eslint\";\n\n/**\n * TypeScript 解析器、推荐预置与类型感知检查选项。\n *\n * @remarks\n * 该对象通过 `fastConfig({ typescript: { ... } })` 传入。传入对象会启用 TypeScript\n * 支持,并检查 `.ts`、`.cts`、`.mts` 与 `.tsx`。相同的类型感知状态还会传递给已启用的\n * Vue 和 React 配置,使普通 TypeScript 文件、Vue SFC 与 TSX 使用一致的检查级别。\n *\n * 默认模式不读取类型信息,启动快且不要求文件属于某个 tsconfig;类型感知模式会启动\n * typescript-eslint Project Service,能够执行更强的语义规则,但要求项目配置和执行目录\n * 正确,并会增加首次检查时间与内存占用。\n */\nexport interface TypeScriptConfigOptions {\n\t/**\n\t * 是否启用依赖完整 TypeScript 类型信息的规则。\n\t *\n\t * `false` 使用 typescript-eslint 的 `recommended` 与 `stylistic` 预置,不创建 TypeScript\n\t * Program。`true` 切换到 `recommendedTypeChecked` 与 `stylisticTypeChecked`,并启用\n\t * `parserOptions.projectService`。被检查文件通常需要包含在可发现的 tsconfig 中,否则\n\t * Project Service 会报告文件不属于项目。\n\t *\n\t * 开启后 Vue 与 React 的 TypeScript 规则也会选择类型感知版本。大型 monorepo 建议评估\n\t * lint 启动耗时和内存占用,并确保各工作区 tsconfig 边界明确。\n\t * @defaultValue `false`\n\t */\n\ttypeChecked?: boolean;\n\t/**\n\t * typescript-eslint 查找 tsconfig 与创建 Project Service 时使用的根目录。\n\t *\n\t * 仅在 `typeChecked: true` 时写入解析器选项。普通单仓库通常可让 typescript-eslint 从\n\t * `eslint.config.*` 调用栈推断;复杂 monorepo、共享配置包装层或从其他目录启动 ESLint\n\t * 时,建议传入配置文件所在目录的绝对路径,例如 `import.meta.dirname`,避免发现错误的\n\t * tsconfig 或跨越预期的项目边界。\n\t * @defaultValue `undefined`\n\t */\n\ttsconfigRootDir?: string;\n}\n\n/**\n * 返回 typescript-eslint 推荐预置。\n *\n * @remarks\n * Vue SFC 需要移除上游仅匹配 `.ts` 的文件范围,否则这些关闭核心规则的配置会与\n * `.vue` 外层范围形成不可能命中的 AND 条件。\n *\n * @param typeChecked - 是否选择依赖完整类型信息的推荐与风格预置。\n * @param removeFileScopes - 是否从每个上游预置中移除 `files` 范围。\n * @returns 新的预置数组;移除范围时会复制各配置对象,不修改 typescript-eslint 的导出。\n */\nexport const getTypeScriptPresetConfigs = (typeChecked: boolean, removeFileScopes = false): Linter.Config[] => {\n\tconst configs = [\n\t\t...(typeChecked ? tseslint.configs.recommendedTypeChecked : tseslint.configs.recommended),\n\t\t...(typeChecked ? tseslint.configs.stylisticTypeChecked : tseslint.configs.stylistic),\n\t] as Linter.Config[];\n\n\tif (!removeFileScopes) return configs;\n\n\treturn configs.map((config) => {\n\t\tconst { files: _files, ...configWithoutFiles } = config;\n\t\treturn configWithoutFiles;\n\t});\n};\n\n/**\n * 创建 TypeScript 解析器的 Project Service 选项。\n *\n * @param options - 类型感知开关及可选的 tsconfig 查找根目录。\n * @returns 未启用类型感知时返回空对象;启用时返回 `projectService` 及可选的 `tsconfigRootDir`。\n */\nexport const createTypeScriptParserOptions = ({ typeChecked = false, tsconfigRootDir }: TypeScriptConfigOptions = {}) => ({\n\t...(typeChecked ? { projectService: true } : {}),\n\t...(typeChecked && tsconfigRootDir ? { tsconfigRootDir } : {}),\n});\n\n/**\n * 创建 TypeScript 配置。\n *\n * @remarks\n * 默认采用无需类型信息的 recommended + stylistic 预置;`typeChecked: true` 会切换为\n * 对应的类型感知预置并启动 Project Service。\n *\n * @param options - TypeScript 类型感知与 tsconfig 根目录选项。\n * @param files - 应用 TypeScript 配置的 ESLint glob 列表。\n * @returns 包含 TypeScript 预置、解析器选项与本地规则的 Flat Config 数组。\n */\nexport const createTypeScriptConfigs = (options: TypeScriptConfigOptions = {}, files: readonly string[] = GLOBS_TYPESCRIPT) =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: options.typeChecked ? \"@fast-china/typescript/type-checked\" : \"@fast-china/typescript\",\n\t\t\tfiles: [...files],\n\t\t\textends: getTypeScriptPresetConfigs(options.typeChecked ?? false),\n\t\t\tlanguageOptions: {\n\t\t\t\tecmaVersion: \"latest\",\n\t\t\t\tparserOptions: createTypeScriptParserOptions(options),\n\t\t\t},\n\t\t\trules: typescriptRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;;AAyDA,MAAa,8BAA8B,aAAsB,mBAAmB,UAA2B;CAC9G,MAAM,UAAU,CACf,GAAI,cAAc,SAAS,QAAQ,yBAAyB,SAAS,QAAQ,aAC7E,GAAI,cAAc,SAAS,QAAQ,uBAAuB,SAAS,QAAQ,SAC5E;CAEA,IAAI,CAAC,kBAAkB,OAAO;CAE9B,OAAO,QAAQ,KAAK,WAAW;EAC9B,MAAM,EAAE,OAAO,QAAQ,GAAG,uBAAuB;EACjD,OAAO;CACR,CAAC;AACF;;;;;;;AAQA,MAAa,iCAAiC,EAAE,cAAc,OAAO,oBAA6C,CAAC,OAAO;CACzH,GAAI,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C,GAAI,eAAe,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAC7D;;;;;;;;;;;;AAaA,MAAa,2BAA2B,UAAmC,CAAC,GAAG,QAA2B,qBACzG,aAAa,CACZ;CACC,MAAM,QAAQ,cAAc,wCAAwC;CACpE,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,2BAA2B,QAAQ,eAAe,KAAK;CAChE,iBAAiB;EAChB,aAAa;EACb,eAAe,8BAA8B,OAAO;CACrD;CACA,OAAO;AACR,CACD,CAAC"}
@@ -3,6 +3,7 @@ import { TypeScriptConfigOptions } from "./typescript.mjs";
3
3
  /**
4
4
  * Vue 3 单文件组件生成器使用的脚本语言与类型感知选项。
5
5
  *
6
+ * @remarks
6
7
  * `fastConfig()` 会根据顶层选项推导这些值;直接组合配置片段时可从 `./configs`
7
8
  * 子路径使用该接口。
8
9
  * 用户通过顶层 `vue` 决定是否接管 `.vue` 文件,通过顶层 `typescript` 决定 SFC 脚本
@@ -18,7 +19,7 @@ interface VueConfigOptions {
18
19
  * `true` 同时加载 TypeScript 推荐规则和本库 TypeScript 规则,并允许
19
20
  * `<script lang="ts">`;`false` 不注册 TypeScript 脚本解析器,只按 JavaScript 处理
20
21
  * SFC 脚本。该值由顶层 `FastConfigOptions.typescript` 是否关闭推导。
21
- * @default true
22
+ * @defaultValue `true`
22
23
  */
23
24
  typescript?: boolean;
24
25
  /**
@@ -27,15 +28,19 @@ interface VueConfigOptions {
27
28
  * `typeChecked: true` 会让 Vue SFC 使用类型感知的 typescript-eslint 预置并启动 Project
28
29
  * Service;`tsconfigRootDir` 会原样传给解析器。工厂只会在顶层 TypeScript 能力启用时
29
30
  * 传入有效设置,避免 Vue 单独形成与普通 `.ts` 文件不一致的类型检查模式。
30
- * @default {}
31
+ * @defaultValue `{}`
31
32
  */
32
33
  typescriptOptions?: TypeScriptConfigOptions;
33
34
  }
34
35
  /**
35
36
  * 创建 Vue 3 单文件组件配置。
36
37
  *
38
+ * @remarks
37
39
  * 本包只处理 Vue 3。启用 TypeScript 时,Vue 模板解析器通过 `parserOptions.parser`
38
40
  * 委托给 typescript-eslint;这是 Vue 官方推荐的自定义脚本解析器接入方式。
41
+ *
42
+ * @param options - SFC 脚本语言以及共享的 TypeScript 类型感知选项。
43
+ * @returns 包含 Vue 模板、脚本解析器、推荐预置与本地规则的 Flat Config 数组。
39
44
  */
40
45
  declare const createVueConfigs: ({ typescript, typescriptOptions }?: VueConfigOptions) => import("eslint/config").ConfigObject[];
41
46
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"vue.d.mts","names":[],"sources":["../../src/configs/vue.ts"],"mappings":";;;;;;;;;;;;;UAsBiB;;;;;;;;;EAShB;;;;;;;;;EASA,oBAAoB;;;;;;;;cASR,qBAAoB,YAAA,sBAA+C,6CAAqB"}
1
+ {"version":3,"file":"vue.d.mts","names":[],"sources":["../../src/configs/vue.ts"],"mappings":";;;;;;;;;;;;;;UAuBiB;;;;;;;;;EAShB;;;;;;;;;EASA,oBAAoB;;;;;;;;;;;;cAaR,qBAAoB,YAAA,sBAA+C,6CAAqB"}
@@ -11,8 +11,12 @@ import vueEslintParser from "vue-eslint-parser";
11
11
  /**
12
12
  * 创建 Vue 3 单文件组件配置。
13
13
  *
14
+ * @remarks
14
15
  * 本包只处理 Vue 3。启用 TypeScript 时,Vue 模板解析器通过 `parserOptions.parser`
15
16
  * 委托给 typescript-eslint;这是 Vue 官方推荐的自定义脚本解析器接入方式。
17
+ *
18
+ * @param options - SFC 脚本语言以及共享的 TypeScript 类型感知选项。
19
+ * @returns 包含 Vue 模板、脚本解析器、推荐预置与本地规则的 Flat Config 数组。
16
20
  */
17
21
  const createVueConfigs = ({ typescript = true, typescriptOptions = {} } = {}) => {
18
22
  const typeChecked = typescriptOptions.typeChecked ?? false;
@@ -1 +1 @@
1
- {"version":3,"file":"vue.mjs","names":[],"sources":["../../src/configs/vue.ts"],"sourcesContent":["import eslint from \"@eslint/js\";\nimport { defineConfig } from \"eslint/config\";\nimport eslintPluginVue from \"eslint-plugin-vue\";\nimport tseslint from \"typescript-eslint\";\nimport vueEslintParser from \"vue-eslint-parser\";\n\nimport { GLOB_VUE } from \"../constants\";\nimport { typescriptRules, vueRules } from \"../rules\";\n\nimport { type TypeScriptConfigOptions, createTypeScriptParserOptions, getTypeScriptPresetConfigs } from \"./typescript\";\n\n/**\n * Vue 3 单文件组件生成器使用的脚本语言与类型感知选项。\n *\n * `fastConfig()` 会根据顶层选项推导这些值;直接组合配置片段时可从 `./configs`\n * 子路径使用该接口。\n * 用户通过顶层 `vue` 决定是否接管 `.vue` 文件,通过顶层 `typescript` 决定 SFC 脚本\n * 是否启用 TypeScript 解析和类型感知能力;工厂会把两者转换为此对象。\n *\n * Vue 模板始终由 `vue-eslint-parser` 解析。启用 TypeScript 时,它再把 `<script>` 内容\n * 委托给 typescript-eslint parser,并复用普通 TypeScript 文件的推荐预置与解析器选项。\n */\nexport interface VueConfigOptions {\n\t/**\n\t * 是否使用 typescript-eslint parser 解析 SFC 的 `<script>` 与 `<script setup>` 内容。\n\t *\n\t * `true` 同时加载 TypeScript 推荐规则和本库 TypeScript 规则,并允许\n\t * `<script lang=\"ts\">`;`false` 不注册 TypeScript 脚本解析器,只按 JavaScript 处理\n\t * SFC 脚本。该值由顶层 `FastConfigOptions.typescript` 是否关闭推导。\n\t * @default true\n\t */\n\ttypescript?: boolean;\n\t/**\n\t * 与普通 TypeScript 文件共享的类型感知和 tsconfig 根目录选项。\n\t *\n\t * `typeChecked: true` 会让 Vue SFC 使用类型感知的 typescript-eslint 预置并启动 Project\n\t * Service;`tsconfigRootDir` 会原样传给解析器。工厂只会在顶层 TypeScript 能力启用时\n\t * 传入有效设置,避免 Vue 单独形成与普通 `.ts` 文件不一致的类型检查模式。\n\t * @default {}\n\t */\n\ttypescriptOptions?: TypeScriptConfigOptions;\n}\n\n/**\n * 创建 Vue 3 单文件组件配置。\n *\n * 本包只处理 Vue 3。启用 TypeScript 时,Vue 模板解析器通过 `parserOptions.parser`\n * 委托给 typescript-eslint;这是 Vue 官方推荐的自定义脚本解析器接入方式。\n */\nexport const createVueConfigs = ({ typescript = true, typescriptOptions = {} }: VueConfigOptions = {}) => {\n\tconst typeChecked = typescriptOptions.typeChecked ?? false;\n\tconst typeScriptConfigs = typescript ? getTypeScriptPresetConfigs(typeChecked, true) : [];\n\n\treturn defineConfig([\n\t\t{\n\t\t\tname: typeChecked ? \"@fast-china/vue/type-checked\" : \"@fast-china/vue\",\n\t\t\tfiles: [GLOB_VUE],\n\t\t\textends: [eslint.configs.recommended, ...typeScriptConfigs, ...eslintPluginVue.configs[\"flat/recommended\"]],\n\t\t\tlanguageOptions: {\n\t\t\t\tecmaVersion: \"latest\",\n\t\t\t\tparser: vueEslintParser,\n\t\t\t\tparserOptions: {\n\t\t\t\t\t...(typescript ? { parser: tseslint.parser, extraFileExtensions: [\".vue\"] } : {}),\n\t\t\t\t\tecmaFeatures: {\n\t\t\t\t\t\tjsx: true,\n\t\t\t\t\t},\n\t\t\t\t\tsourceType: \"module\",\n\t\t\t\t\t...createTypeScriptParserOptions(typescriptOptions),\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: {\n\t\t\t\t...(typescript ? typescriptRules : {}),\n\t\t\t\t...vueRules,\n\t\t\t},\n\t\t},\n\t]);\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAiDA,MAAa,oBAAoB,EAAE,aAAa,MAAM,oBAAoB,CAAC,MAAwB,CAAC,MAAM;CACzG,MAAM,cAAc,kBAAkB,eAAe;CACrD,MAAM,oBAAoB,aAAa,2BAA2B,aAAa,IAAI,IAAI,CAAC;CAExF,OAAO,aAAa,CACnB;EACC,MAAM,cAAc,iCAAiC;EACrD,OAAO,CAAC,QAAQ;EAChB,SAAS;GAAC,OAAO,QAAQ;GAAa,GAAG;GAAmB,GAAG,gBAAgB,QAAQ;EAAmB;EAC1G,iBAAiB;GAChB,aAAa;GACb,QAAQ;GACR,eAAe;IACd,GAAI,aAAa;KAAE,QAAQ,SAAS;KAAQ,qBAAqB,CAAC,MAAM;IAAE,IAAI,CAAC;IAC/E,cAAc,EACb,KAAK,KACN;IACA,YAAY;IACZ,GAAG,8BAA8B,iBAAiB;GACnD;EACD;EACA,OAAO;GACN,GAAI,aAAa,kBAAkB,CAAC;GACpC,GAAG;EACJ;CACD,CACD,CAAC;AACF"}
1
+ {"version":3,"file":"vue.mjs","names":[],"sources":["../../src/configs/vue.ts"],"sourcesContent":["import eslint from \"@eslint/js\";\nimport { defineConfig } from \"eslint/config\";\nimport eslintPluginVue from \"eslint-plugin-vue\";\nimport tseslint from \"typescript-eslint\";\nimport vueEslintParser from \"vue-eslint-parser\";\n\nimport { GLOB_VUE } from \"../constants\";\nimport { typescriptRules, vueRules } from \"../rules\";\n\nimport { type TypeScriptConfigOptions, createTypeScriptParserOptions, getTypeScriptPresetConfigs } from \"./typescript\";\n\n/**\n * Vue 3 单文件组件生成器使用的脚本语言与类型感知选项。\n *\n * @remarks\n * `fastConfig()` 会根据顶层选项推导这些值;直接组合配置片段时可从 `./configs`\n * 子路径使用该接口。\n * 用户通过顶层 `vue` 决定是否接管 `.vue` 文件,通过顶层 `typescript` 决定 SFC 脚本\n * 是否启用 TypeScript 解析和类型感知能力;工厂会把两者转换为此对象。\n *\n * Vue 模板始终由 `vue-eslint-parser` 解析。启用 TypeScript 时,它再把 `<script>` 内容\n * 委托给 typescript-eslint parser,并复用普通 TypeScript 文件的推荐预置与解析器选项。\n */\nexport interface VueConfigOptions {\n\t/**\n\t * 是否使用 typescript-eslint parser 解析 SFC 的 `<script>` 与 `<script setup>` 内容。\n\t *\n\t * `true` 同时加载 TypeScript 推荐规则和本库 TypeScript 规则,并允许\n\t * `<script lang=\"ts\">`;`false` 不注册 TypeScript 脚本解析器,只按 JavaScript 处理\n\t * SFC 脚本。该值由顶层 `FastConfigOptions.typescript` 是否关闭推导。\n\t * @defaultValue `true`\n\t */\n\ttypescript?: boolean;\n\t/**\n\t * 与普通 TypeScript 文件共享的类型感知和 tsconfig 根目录选项。\n\t *\n\t * `typeChecked: true` 会让 Vue SFC 使用类型感知的 typescript-eslint 预置并启动 Project\n\t * Service;`tsconfigRootDir` 会原样传给解析器。工厂只会在顶层 TypeScript 能力启用时\n\t * 传入有效设置,避免 Vue 单独形成与普通 `.ts` 文件不一致的类型检查模式。\n\t * @defaultValue `{}`\n\t */\n\ttypescriptOptions?: TypeScriptConfigOptions;\n}\n\n/**\n * 创建 Vue 3 单文件组件配置。\n *\n * @remarks\n * 本包只处理 Vue 3。启用 TypeScript 时,Vue 模板解析器通过 `parserOptions.parser`\n * 委托给 typescript-eslint;这是 Vue 官方推荐的自定义脚本解析器接入方式。\n *\n * @param options - SFC 脚本语言以及共享的 TypeScript 类型感知选项。\n * @returns 包含 Vue 模板、脚本解析器、推荐预置与本地规则的 Flat Config 数组。\n */\nexport const createVueConfigs = ({ typescript = true, typescriptOptions = {} }: VueConfigOptions = {}) => {\n\tconst typeChecked = typescriptOptions.typeChecked ?? false;\n\tconst typeScriptConfigs = typescript ? getTypeScriptPresetConfigs(typeChecked, true) : [];\n\n\treturn defineConfig([\n\t\t{\n\t\t\tname: typeChecked ? \"@fast-china/vue/type-checked\" : \"@fast-china/vue\",\n\t\t\tfiles: [GLOB_VUE],\n\t\t\textends: [eslint.configs.recommended, ...typeScriptConfigs, ...eslintPluginVue.configs[\"flat/recommended\"]],\n\t\t\tlanguageOptions: {\n\t\t\t\tecmaVersion: \"latest\",\n\t\t\t\tparser: vueEslintParser,\n\t\t\t\tparserOptions: {\n\t\t\t\t\t...(typescript ? { parser: tseslint.parser, extraFileExtensions: [\".vue\"] } : {}),\n\t\t\t\t\tecmaFeatures: {\n\t\t\t\t\t\tjsx: true,\n\t\t\t\t\t},\n\t\t\t\t\tsourceType: \"module\",\n\t\t\t\t\t...createTypeScriptParserOptions(typescriptOptions),\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: {\n\t\t\t\t...(typescript ? typescriptRules : {}),\n\t\t\t\t...vueRules,\n\t\t\t},\n\t\t},\n\t]);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsDA,MAAa,oBAAoB,EAAE,aAAa,MAAM,oBAAoB,CAAC,MAAwB,CAAC,MAAM;CACzG,MAAM,cAAc,kBAAkB,eAAe;CACrD,MAAM,oBAAoB,aAAa,2BAA2B,aAAa,IAAI,IAAI,CAAC;CAExF,OAAO,aAAa,CACnB;EACC,MAAM,cAAc,iCAAiC;EACrD,OAAO,CAAC,QAAQ;EAChB,SAAS;GAAC,OAAO,QAAQ;GAAa,GAAG;GAAmB,GAAG,gBAAgB,QAAQ;EAAmB;EAC1G,iBAAiB;GAChB,aAAa;GACb,QAAQ;GACR,eAAe;IACd,GAAI,aAAa;KAAE,QAAQ,SAAS;KAAQ,qBAAqB,CAAC,MAAM;IAAE,IAAI,CAAC;IAC/E,cAAc,EACb,KAAK,KACN;IACA,YAAY;IACZ,GAAG,8BAA8B,iBAAiB;GACnD;EACD;EACA,OAAO;GACN,GAAI,aAAa,kBAAkB,CAAC;GACpC,GAAG;EACJ;CACD,CACD,CAAC;AACF"}
@@ -1,5 +1,13 @@
1
1
  //#region src/constants/index.d.ts
2
- /** `@fast-china/eslint-config/constants` 公开的文件匹配常量。 */
2
+ /**
3
+ * `@fast-china/eslint-config/constants` 公开的文件匹配常量。
4
+ *
5
+ * @remarks
6
+ * 所有模式均使用 ESLint Flat Config 的 glob 语义,可直接用于配置的 `files` 或
7
+ * `ignores` 字段。数组常量使用只读元组类型,调用方组合时应复制而非原地修改。
8
+ *
9
+ * @packageDocumentation
10
+ */
3
11
  /** JavaScript 与 JSX 文件;扩展名列表与 Node.js ESM/CJS 约定保持一致。 */
4
12
  declare const GLOBS_JAVASCRIPT: readonly ["**/*.{js,cjs,mjs,jsx}"];
5
13
  /** TypeScript 与 TSX 文件;包含 TypeScript 的 ESM/CJS 专用扩展名。 */
@@ -10,9 +18,11 @@ declare const GLOB_VUE = "**/*.vue";
10
18
  declare const GLOB_ANGULAR_TYPESCRIPT = "**/*.ts";
11
19
  /** Angular 外部模板;内联模板由 Angular 处理器提取后复用同一模板配置。 */
12
20
  declare const GLOB_ANGULAR_TEMPLATE = "**/*.html";
13
- /** ESLint JSON language 支持的三种 JSON 方言。 */
21
+ /** 严格 JSON 文件。 */
14
22
  declare const GLOB_JSON = "**/*.json";
23
+ /** 允许注释与尾随逗号的 JSONC 文件。 */
15
24
  declare const GLOB_JSONC = "**/*.jsonc";
25
+ /** 使用 JSON5 语法的配置文件。 */
16
26
  declare const GLOB_JSON5 = "**/*.json5";
17
27
  /** Markdown 文档。 */
18
28
  declare const GLOB_MARKDOWN = "**/*.md";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/constants/index.ts"],"mappings":";;;cAGa;;cAGA;;cAGA;;cAGA;;cAGA;;cAGA;cACA;cACA;;cAGA;;cAGA;;;;;;;cAQA;;cASA;;cAGA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/constants/index.ts"],"mappings":";;;;;;;;;;;cAWa;;cAGA;;cAGA;;cAGA;;cAGA;;cAGA;;cAEA;;cAEA;;cAGA;;cAGA;;;;;;;cAQA;;cASA;;cAGA"}
@@ -1,5 +1,13 @@
1
1
  //#region src/constants/index.ts
2
- /** `@fast-china/eslint-config/constants` 公开的文件匹配常量。 */
2
+ /**
3
+ * `@fast-china/eslint-config/constants` 公开的文件匹配常量。
4
+ *
5
+ * @remarks
6
+ * 所有模式均使用 ESLint Flat Config 的 glob 语义,可直接用于配置的 `files` 或
7
+ * `ignores` 字段。数组常量使用只读元组类型,调用方组合时应复制而非原地修改。
8
+ *
9
+ * @packageDocumentation
10
+ */
3
11
  /** JavaScript 与 JSX 文件;扩展名列表与 Node.js ESM/CJS 约定保持一致。 */
4
12
  const GLOBS_JAVASCRIPT = ["**/*.{js,cjs,mjs,jsx}"];
5
13
  /** TypeScript 与 TSX 文件;包含 TypeScript 的 ESM/CJS 专用扩展名。 */
@@ -10,9 +18,11 @@ const GLOB_VUE = "**/*.vue";
10
18
  const GLOB_ANGULAR_TYPESCRIPT = "**/*.ts";
11
19
  /** Angular 外部模板;内联模板由 Angular 处理器提取后复用同一模板配置。 */
12
20
  const GLOB_ANGULAR_TEMPLATE = "**/*.html";
13
- /** ESLint JSON language 支持的三种 JSON 方言。 */
21
+ /** 严格 JSON 文件。 */
14
22
  const GLOB_JSON = "**/*.json";
23
+ /** 允许注释与尾随逗号的 JSONC 文件。 */
15
24
  const GLOB_JSONC = "**/*.jsonc";
25
+ /** 使用 JSON5 语法的配置文件。 */
16
26
  const GLOB_JSON5 = "**/*.json5";
17
27
  /** Markdown 文档。 */
18
28
  const GLOB_MARKDOWN = "**/*.md";
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/constants/index.ts"],"sourcesContent":["/** `@fast-china/eslint-config/constants` 公开的文件匹配常量。 */\n\n/** JavaScript 与 JSX 文件;扩展名列表与 Node.js ESM/CJS 约定保持一致。 */\nexport const GLOBS_JAVASCRIPT = [\"**/*.{js,cjs,mjs,jsx}\"] as const;\n\n/** TypeScript 与 TSX 文件;包含 TypeScript 的 ESM/CJS 专用扩展名。 */\nexport const GLOBS_TYPESCRIPT = [\"**/*.{ts,cts,mts,tsx}\"] as const;\n\n/** Vue 3 单文件组件。 */\nexport const GLOB_VUE = \"**/*.vue\";\n\n/** Angular 组件、指令、服务等框架源码;Angular CLI 项目以 `.ts` 为标准源码扩展名。 */\nexport const GLOB_ANGULAR_TYPESCRIPT = \"**/*.ts\";\n\n/** Angular 外部模板;内联模板由 Angular 处理器提取后复用同一模板配置。 */\nexport const GLOB_ANGULAR_TEMPLATE = \"**/*.html\";\n\n/** ESLint JSON language 支持的三种 JSON 方言。 */\nexport const GLOB_JSON = \"**/*.json\";\nexport const GLOB_JSONC = \"**/*.jsonc\";\nexport const GLOB_JSON5 = \"**/*.json5\";\n\n/** Markdown 文档。 */\nexport const GLOB_MARKDOWN = \"**/*.md\";\n\n/** 默认由 JavaScript、TypeScript 和 Vue 规则处理的全部代码文件。 */\nexport const GLOBS_CODE = [...GLOBS_JAVASCRIPT, ...GLOBS_TYPESCRIPT, GLOB_VUE] as const;\n\n/**\n * 应额外获得 Node.js 全局变量的工程文件。\n *\n * 这些模式还会与当前已启用的 JavaScript/TypeScript 文件模式做 AND 匹配,\n * 因而关闭 TypeScript 后不会意外让 ESLint 接管 `.ts` 文件。\n */\nexport const GLOBS_NODE_TOOLING = [\n\t\"**/*.{config,setup}.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/{scripts,bin}/**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/{test,tests}/**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/*.{test,spec}.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/cli.{js,cjs,mjs,ts,cts,mts}\",\n] as const;\n\n/** TypeScript 配置文件;它们使用 JSONC 语法并允许注释。 */\nexport const GLOBS_TSCONFIG = [\"**/tsconfig.json\", \"**/tsconfig.*.json\"] as const;\n\n/** 不应交给 JSON/Markdown 解析器处理的包管理器锁文件。 */\nexport const GLOBS_LOCKFILES = [\"**/package-lock.json\", \"**/yarn.lock\", \"**/pnpm-lock.yaml\", \"**/bun.lock\", \"**/bun.lockb\", \"**/deno.lock\"] as const;\n"],"mappings":";;;AAGA,MAAa,mBAAmB,CAAC,uBAAuB;;AAGxD,MAAa,mBAAmB,CAAC,uBAAuB;;AAGxD,MAAa,WAAW;;AAGxB,MAAa,0BAA0B;;AAGvC,MAAa,wBAAwB;;AAGrC,MAAa,YAAY;AACzB,MAAa,aAAa;AAC1B,MAAa,aAAa;;AAG1B,MAAa,gBAAgB;;AAG7B,MAAa,aAAa;CAAC,GAAG;CAAkB,GAAG;CAAkB;AAAQ;;;;;;;AAQ7E,MAAa,qBAAqB;CACjC;CACA;CACA;CACA;CACA;AACD;;AAGA,MAAa,iBAAiB,CAAC,oBAAoB,oBAAoB;;AAGvE,MAAa,kBAAkB;CAAC;CAAwB;CAAgB;CAAqB;CAAe;CAAgB;AAAc"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/constants/index.ts"],"sourcesContent":["/**\n * `@fast-china/eslint-config/constants` 公开的文件匹配常量。\n *\n * @remarks\n * 所有模式均使用 ESLint Flat Config 的 glob 语义,可直接用于配置的 `files` 或\n * `ignores` 字段。数组常量使用只读元组类型,调用方组合时应复制而非原地修改。\n *\n * @packageDocumentation\n */\n\n/** JavaScript 与 JSX 文件;扩展名列表与 Node.js ESM/CJS 约定保持一致。 */\nexport const GLOBS_JAVASCRIPT = [\"**/*.{js,cjs,mjs,jsx}\"] as const;\n\n/** TypeScript 与 TSX 文件;包含 TypeScript 的 ESM/CJS 专用扩展名。 */\nexport const GLOBS_TYPESCRIPT = [\"**/*.{ts,cts,mts,tsx}\"] as const;\n\n/** Vue 3 单文件组件。 */\nexport const GLOB_VUE = \"**/*.vue\";\n\n/** Angular 组件、指令、服务等框架源码;Angular CLI 项目以 `.ts` 为标准源码扩展名。 */\nexport const GLOB_ANGULAR_TYPESCRIPT = \"**/*.ts\";\n\n/** Angular 外部模板;内联模板由 Angular 处理器提取后复用同一模板配置。 */\nexport const GLOB_ANGULAR_TEMPLATE = \"**/*.html\";\n\n/** 严格 JSON 文件。 */\nexport const GLOB_JSON = \"**/*.json\";\n/** 允许注释与尾随逗号的 JSONC 文件。 */\nexport const GLOB_JSONC = \"**/*.jsonc\";\n/** 使用 JSON5 语法的配置文件。 */\nexport const GLOB_JSON5 = \"**/*.json5\";\n\n/** Markdown 文档。 */\nexport const GLOB_MARKDOWN = \"**/*.md\";\n\n/** 默认由 JavaScript、TypeScript 和 Vue 规则处理的全部代码文件。 */\nexport const GLOBS_CODE = [...GLOBS_JAVASCRIPT, ...GLOBS_TYPESCRIPT, GLOB_VUE] as const;\n\n/**\n * 应额外获得 Node.js 全局变量的工程文件。\n *\n * 这些模式还会与当前已启用的 JavaScript/TypeScript 文件模式做 AND 匹配,\n * 因而关闭 TypeScript 后不会意外让 ESLint 接管 `.ts` 文件。\n */\nexport const GLOBS_NODE_TOOLING = [\n\t\"**/*.{config,setup}.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/{scripts,bin}/**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/{test,tests}/**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/*.{test,spec}.{js,cjs,mjs,jsx,ts,cts,mts,tsx}\",\n\t\"**/cli.{js,cjs,mjs,ts,cts,mts}\",\n] as const;\n\n/** TypeScript 配置文件;它们使用 JSONC 语法并允许注释。 */\nexport const GLOBS_TSCONFIG = [\"**/tsconfig.json\", \"**/tsconfig.*.json\"] as const;\n\n/** 不应交给 JSON/Markdown 解析器处理的包管理器锁文件。 */\nexport const GLOBS_LOCKFILES = [\"**/package-lock.json\", \"**/yarn.lock\", \"**/pnpm-lock.yaml\", \"**/bun.lock\", \"**/bun.lockb\", \"**/deno.lock\"] as const;\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,mBAAmB,CAAC,uBAAuB;;AAGxD,MAAa,mBAAmB,CAAC,uBAAuB;;AAGxD,MAAa,WAAW;;AAGxB,MAAa,0BAA0B;;AAGvC,MAAa,wBAAwB;;AAGrC,MAAa,YAAY;;AAEzB,MAAa,aAAa;;AAE1B,MAAa,aAAa;;AAG1B,MAAa,gBAAgB;;AAG7B,MAAa,aAAa;CAAC,GAAG;CAAkB,GAAG;CAAkB;AAAQ;;;;;;;AAQ7E,MAAa,qBAAqB;CACjC;CACA;CACA;CACA;CACA;AACD;;AAGA,MAAa,iBAAiB,CAAC,oBAAoB,oBAAoB;;AAGvE,MAAa,kBAAkB;CAAC;CAAwB;CAAgB;CAAqB;CAAe;CAAgB;AAAc"}
package/dist/index.d.mts CHANGED
@@ -10,13 +10,20 @@ type RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<
10
10
  /**
11
11
  * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。
12
12
  *
13
+ * @remarks
13
14
  * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。
15
+ *
16
+ * @typeParam Rules - 调用方传入的规则记录类型;保留字面量键和值以提供精确推断。
17
+ * @param rules - 需要进行规则名、严重级别和选项校验的 ESLint 规则记录。
18
+ * @returns 原始规则记录。返回值同时兼容 ESLint 的通用 `RulesRecord` 类型。
14
19
  */
15
20
  declare const defineRules: <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>) => Rules & Linter.RulesRecord;
16
21
  /**
17
22
  * 核心工厂 `fastConfig()` 的项目级 ESLint Flat Config 选项。
18
23
  *
19
- * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@default` 标注的值;
24
+ * @remarks
25
+ *
26
+ * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@defaultValue` 标注的值;
20
27
  * 布尔选项传入 `false` 会让工厂完全跳过对应片段,支持对象形式的框架或 TypeScript
21
28
  * 选项传入 `true` 时采用其内部默认值,传入对象时则在启用能力的同时覆盖内部默认值。
22
29
  *
@@ -46,7 +53,7 @@ interface FastConfigOptions {
46
53
  * `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。
47
54
  *
48
55
  * 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。
49
- * @default false
56
+ * @defaultValue `false`
50
57
  */
51
58
  angular?: boolean | AngularConfigOptions;
52
59
  /**
@@ -59,7 +66,7 @@ interface FastConfigOptions {
59
66
  * 常见 Vue、React、Angular 与 Vite 浏览器应用通常保持 `"browser"`。无论选择哪种
60
67
  * 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js
61
68
  * 全局变量。此选项不改变 JavaScript 编译目标或打包平台。
62
- * @default "browser"
69
+ * @defaultValue `"browser"`
63
70
  */
64
71
  environment?: RuntimeEnvironment;
65
72
  /**
@@ -68,7 +75,7 @@ interface FastConfigOptions {
68
75
  * 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循
69
76
  * ESLint `Linter.Globals`,可以声明为 `"readonly"`、`"writable"` 或 `"off"`。
70
77
  * 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。
71
- * @default undefined
78
+ * @defaultValue `undefined`
72
79
  */
73
80
  globals?: Linter.Globals;
74
81
  /**
@@ -76,7 +83,7 @@ interface FastConfigOptions {
76
83
  *
77
84
  * 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、
78
85
  * 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。
79
- * @default true
86
+ * @defaultValue `true`
80
87
  */
81
88
  gitignore?: boolean;
82
89
  /**
@@ -84,7 +91,7 @@ interface FastConfigOptions {
84
91
  *
85
92
  * 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,
86
93
  * 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。
87
- * @default []
94
+ * @defaultValue `[]`
88
95
  */
89
96
  ignores?: readonly string[];
90
97
  /**
@@ -94,7 +101,7 @@ interface FastConfigOptions {
94
101
  * resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些
95
102
  * 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响
96
103
  * JavaScript 或 TypeScript 的基础语法检查。
97
- * @default true
104
+ * @defaultValue `true`
98
105
  */
99
106
  imports?: boolean;
100
107
  /**
@@ -103,7 +110,7 @@ interface FastConfigOptions {
103
110
  * 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、
104
111
  * 环境全局变量、import、regexp 或 React 的 JavaScript 配置范围,但不会影响
105
112
  * 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。
106
- * @default true
113
+ * @defaultValue `true`
107
114
  */
108
115
  javascript?: boolean;
109
116
  /**
@@ -111,7 +118,7 @@ interface FastConfigOptions {
111
118
  *
112
119
  * 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应
113
120
  * 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。
114
- * @default true
121
+ * @defaultValue `true`
115
122
  */
116
123
  json?: boolean;
117
124
  /**
@@ -119,7 +126,7 @@ interface FastConfigOptions {
119
126
  *
120
127
  * 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架
121
128
  * 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。
122
- * @default false
129
+ * @defaultValue `false`
123
130
  */
124
131
  markdown?: boolean;
125
132
  /**
@@ -128,7 +135,7 @@ interface FastConfigOptions {
128
135
  * 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装
129
136
  * 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地
130
137
  * 重新启用某条格式规则。
131
- * @default true
138
+ * @defaultValue `true`
132
139
  */
133
140
  prettier?: boolean;
134
141
  /**
@@ -136,7 +143,7 @@ interface FastConfigOptions {
136
143
  *
137
144
  * 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则
138
145
  * 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。
139
- * @default true
146
+ * @defaultValue `true`
140
147
  */
141
148
  regexp?: boolean;
142
149
  /**
@@ -146,7 +153,7 @@ interface FastConfigOptions {
146
153
  * 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言
147
154
  * 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的
148
155
  * `importSource`,但此选项不会修改 JSX 编译器或打包器设置。
149
- * @default false
156
+ * @defaultValue `false`
150
157
  */
151
158
  react?: boolean | ReactConfigOptions;
152
159
  /**
@@ -155,7 +162,7 @@ interface FastConfigOptions {
155
162
  * `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在
156
163
  * 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。
157
164
  * JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。
158
- * @default undefined
165
+ * @defaultValue `undefined`
159
166
  */
160
167
  rules?: RuleOptions;
161
168
  /**
@@ -164,7 +171,7 @@ interface FastConfigOptions {
164
171
  * 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的
165
172
  * `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。
166
173
  * 启用此项会同时加载 JSON 解析配置。
167
- * @default false
174
+ * @defaultValue `false`
168
175
  */
169
176
  sortPackageJson?: boolean;
170
177
  /**
@@ -172,7 +179,7 @@ interface FastConfigOptions {
172
179
  *
173
180
  * 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生
174
181
  * 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。
175
- * @default false
182
+ * @defaultValue `false`
176
183
  */
177
184
  sortTsconfig?: boolean;
178
185
  /**
@@ -182,7 +189,7 @@ interface FastConfigOptions {
182
189
  * `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的
183
190
  * TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript
184
191
  * 脚本解析,并且不能再启用 Angular。
185
- * @default true
192
+ * @defaultValue `true`
186
193
  */
187
194
  typescript?: boolean | TypeScriptConfigOptions;
188
195
  /**
@@ -191,11 +198,17 @@ interface FastConfigOptions {
191
198
  * 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随
192
199
  * `typescript`:TypeScript 开启时同时支持 `<script lang="ts">` 和类型感知选项,
193
200
  * 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。
194
- * @default true
201
+ * @defaultValue `true`
195
202
  */
196
203
  vue?: boolean;
197
204
  }
198
- /** `fastConfig()` 使用的稳定默认值;对象被冻结,避免运行时被意外修改。 */
205
+ /**
206
+ * `fastConfig()` 使用的稳定默认选项。
207
+ *
208
+ * @remarks
209
+ * 对象在运行时被冻结,不包含无固定默认值的 `globals`、`ignores` 与 `rules` 字段。
210
+ * 调用方应将其视为只读参考,不应依赖修改该对象来改变工厂行为。
211
+ */
199
212
  declare const defaultConfigOptions: Readonly<{
200
213
  readonly angular: false;
201
214
  readonly environment: "browser";
@@ -215,10 +228,26 @@ declare const defaultConfigOptions: Readonly<{
215
228
  /**
216
229
  * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。
217
230
  *
231
+ * @remarks
218
232
  * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和
219
233
  * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略
220
234
  * 通过 `@fast-china/eslint-config/configs` 独立组合。
221
235
  * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。
236
+ *
237
+ * @param options - 控制内置语言、框架、插件与项目级规则的选项。
238
+ * @param overrides - 追加到全部内置片段之后的 ESLint Flat Config,可用于按文件覆盖默认行为。
239
+ * @returns 按应用顺序展开、可直接导出给 ESLint 的 Flat Config 数组。
240
+ * @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。
241
+ *
242
+ * @example
243
+ * ```ts
244
+ * import fastConfig from "@fast-china/eslint-config";
245
+ *
246
+ * export default fastConfig(
247
+ * { react: true, vue: false },
248
+ * { files: ["src/index.ts"], rules: { "no-console": "error" } },
249
+ * );
250
+ * ```
222
251
  */
223
252
  declare const fastConfig: (options?: FastConfigOptions, ...overrides: Config[]) => Config[];
224
253
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;KA0BK,uBAAuB,cAAc,eAAe,QAAQ,OAAO,cAAc,aAAa;;;;;;cAOtF,oBAAqB,cAAc,aAAa,OAAO,uBAAuB,WAAS,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;UA2BlG;;;;;;;;;;;;EAYhB,oBAAoB;;;;;;;;;;;;;EAapB,cAAc;;;;;;;;;EASd,UAAU,OAAO;;;;;;;;EAQjB;;;;;;;;EAQA;;;;;;;;;;EAUA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;EAQA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;;;EAUA,kBAAkB;;;;;;;;;EASlB,QAAQ;;;;;;;;;EASR;;;;;;;;EAQA;;;;;;;;;;EAUA,uBAAuB;;;;;;;;;EASvB;;;cAIY,sBAAoB;;;;;;;;;;;;;;;;;;;;;;;;cAyBpB,aAAc,UAAS,sBAA2B,WAAW,aAAW"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;KA6BK,uBAAuB,cAAc,eAAe,QAAQ,OAAO,cAAc,aAAa;;;;;;;;;;;cAYtF,oBAAqB,cAAc,aAAa,OAAO,uBAAuB,WAAS,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;UA6BlG;;;;;;;;;;;;EAYhB,oBAAoB;;;;;;;;;;;;;EAapB,cAAc;;;;;;;;;EASd,UAAU,OAAO;;;;;;;;EAQjB;;;;;;;;EAQA;;;;;;;;;;EAUA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;EAQA;;;;;;;;;EASA;;;;;;;;EAQA;;;;;;;;;;EAUA,kBAAkB;;;;;;;;;EASlB,QAAQ;;;;;;;;;EASR;;;;;;;;EAQA;;;;;;;;;;EAUA,uBAAuB;;;;;;;;;EASvB;;;;;;;;;cAUY,sBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyCpB,aAAc,UAAS,sBAA2B,WAAW,aAAW"}
package/dist/index.mjs CHANGED
@@ -18,15 +18,29 @@ import { defineConfig } from "eslint/config";
18
18
  //#region src/index.ts
19
19
  /**
20
20
  * 根入口提供面向 Vue 3 浏览器管理项目的默认配置工厂。
21
+ *
21
22
  * 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。
23
+ *
24
+ * @packageDocumentation
22
25
  */
23
26
  /**
24
27
  * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。
25
28
  *
29
+ * @remarks
26
30
  * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。
31
+ *
32
+ * @typeParam Rules - 调用方传入的规则记录类型;保留字面量键和值以提供精确推断。
33
+ * @param rules - 需要进行规则名、严重级别和选项校验的 ESLint 规则记录。
34
+ * @returns 原始规则记录。返回值同时兼容 ESLint 的通用 `RulesRecord` 类型。
27
35
  */
28
36
  const defineRules = (rules) => rules;
29
- /** `fastConfig()` 使用的稳定默认值;对象被冻结,避免运行时被意外修改。 */
37
+ /**
38
+ * `fastConfig()` 使用的稳定默认选项。
39
+ *
40
+ * @remarks
41
+ * 对象在运行时被冻结,不包含无固定默认值的 `globals`、`ignores` 与 `rules` 字段。
42
+ * 调用方应将其视为只读参考,不应依赖修改该对象来改变工厂行为。
43
+ */
30
44
  const defaultConfigOptions = Object.freeze({
31
45
  angular: false,
32
46
  environment: "browser",
@@ -46,10 +60,26 @@ const defaultConfigOptions = Object.freeze({
46
60
  /**
47
61
  * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。
48
62
  *
63
+ * @remarks
49
64
  * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和
50
65
  * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略
51
66
  * 通过 `@fast-china/eslint-config/configs` 独立组合。
52
67
  * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。
68
+ *
69
+ * @param options - 控制内置语言、框架、插件与项目级规则的选项。
70
+ * @param overrides - 追加到全部内置片段之后的 ESLint Flat Config,可用于按文件覆盖默认行为。
71
+ * @returns 按应用顺序展开、可直接导出给 ESLint 的 Flat Config 数组。
72
+ * @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * import fastConfig from "@fast-china/eslint-config";
77
+ *
78
+ * export default fastConfig(
79
+ * { react: true, vue: false },
80
+ * { files: ["src/index.ts"], rules: { "no-console": "error" } },
81
+ * );
82
+ * ```
53
83
  */
54
84
  const fastConfig = (options = {}, ...overrides) => {
55
85
  const angular = options.angular ?? defaultConfigOptions.angular;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * 根入口提供面向 Vue 3 浏览器管理项目的默认配置工厂。\n * 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。\n */\nimport { type Config, defineConfig } from \"eslint/config\";\n\nimport { type AngularConfigOptions, createAngularConfigs } from \"./configs/angular\";\nimport { createCommonConfigs } from \"./configs/common\";\nimport { type RuntimeEnvironment, createEnvironmentConfigs } from \"./configs/environment\";\nimport { createGitignoreConfigs, createGlobalIgnores } from \"./configs/ignores\";\nimport { createImportConfigs } from \"./configs/import\";\nimport { createJavaScriptConfigs } from \"./configs/javascript\";\nimport { createJsonConfigs } from \"./configs/json\";\nimport { createMarkdownConfigs } from \"./configs/markdown\";\nimport { createPrettierConfigs } from \"./configs/prettier\";\nimport { type ReactConfigOptions, createReactConfigs } from \"./configs/react\";\nimport { createRegexpConfigs } from \"./configs/regexp\";\nimport { createPackageJsonSortConfigs } from \"./configs/sort-package\";\nimport { createTsconfigSortConfigs } from \"./configs/sort-tsconfig\";\nimport { type TypeScriptConfigOptions, createTypeScriptConfigs } from \"./configs/typescript\";\nimport { createVueConfigs } from \"./configs/vue\";\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT, GLOB_VUE } from \"./constants\";\n\nimport type { RuleOptions } from \"./typegen\";\nimport type { Linter } from \"eslint\";\n\ntype RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<keyof Rules, keyof RuleOptions>, never>;\n\n/**\n * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。\n *\n * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。\n */\nexport const defineRules = <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>): Rules & Linter.RulesRecord => rules;\n\nexport type { RuleOptions } from \"./typegen\";\n\n/**\n * 核心工厂 `fastConfig()` 的项目级 ESLint Flat Config 选项。\n *\n * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@default` 标注的值;\n * 布尔选项传入 `false` 会让工厂完全跳过对应片段,支持对象形式的框架或 TypeScript\n * 选项传入 `true` 时采用其内部默认值,传入对象时则在启用能力的同时覆盖内部默认值。\n *\n * `rules` 会在全部内置规则和 Prettier 兼容层之后应用;`fastConfig()` 的其余位置参数\n * 又会排在 `rules` 之后。因此,常规的全项目规则放在 `rules` 中,按文件覆盖或需要最高\n * 优先级的配置应通过其余位置参数传入。\n *\n * 这些选项只负责生成 ESLint 配置,不会修改 TypeScript、Vite 或各框架的构建配置。\n *\n * @example\n * ```ts\n * export default fastConfig({\n * environment: \"browser\",\n * react: { version: \"detect\" },\n * typescript: { typeChecked: true },\n * vue: false,\n * });\n * ```\n */\nexport interface FastConfigOptions {\n\t/**\n\t * 是否启用 Angular 源码与模板检查。\n\t *\n\t * `true` 使用 Angular 默认选项;传入对象可控制内联模板与模板无障碍规则。\n\t * 启用后会检查 Angular TypeScript 源码、外部 `.html` 模板,并默认提取\n\t * `@Component()` 中的内联模板。Angular 依赖 TypeScript 解析能力,因此不能与\n\t * `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。\n\t *\n\t * 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。\n\t * @default false\n\t */\n\tangular?: boolean | AngularConfigOptions;\n\t/**\n\t * 应用代码实际运行的环境,用于声明 ESLint 可识别的运行时全局变量。\n\t *\n\t * - `\"browser\"`:提供浏览器全局变量,例如 `window`、`document`。\n\t * - `\"node\"`:提供 Node.js 全局变量,例如 `process`、`Buffer`。\n\t * - `\"universal\"`:同时提供浏览器与 Node.js 全局变量,适合 SSR 或同构代码。\n\t *\n\t * 常见 Vue、React、Angular 与 Vite 浏览器应用通常保持 `\"browser\"`。无论选择哪种\n\t * 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js\n\t * 全局变量。此选项不改变 JavaScript 编译目标或打包平台。\n\t * @default \"browser\"\n\t */\n\tenvironment?: RuntimeEnvironment;\n\t/**\n\t * 追加到应用代码运行环境中的项目级全局变量。\n\t *\n\t * 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循\n\t * ESLint `Linter.Globals`,可以声明为 `\"readonly\"`、`\"writable\"` 或 `\"off\"`。\n\t * 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。\n\t * @default undefined\n\t */\n\tglobals?: Linter.Globals;\n\t/**\n\t * 是否读取运行 ESLint 的项目根目录中的 `.gitignore` 并转换为全局忽略规则。\n\t *\n\t * 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、\n\t * 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。\n\t * @default true\n\t */\n\tgitignore?: boolean;\n\t/**\n\t * 追加到内置全局忽略集合末尾的 ESLint glob 模式。\n\t *\n\t * 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,\n\t * 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。\n\t * @default []\n\t */\n\tignores?: readonly string[];\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-import-x` 推荐规则和本库覆盖规则。\n\t *\n\t * 该片段检查常见的 ESM 导入导出问题,但共享配置不会猜测项目的路径别名或自定义\n\t * resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些\n\t * 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响\n\t * JavaScript 或 TypeScript 的基础语法检查。\n\t * @default true\n\t */\n\timports?: boolean;\n\t/**\n\t * 是否让工厂接管 JavaScript、CommonJS、ES Module 与 JSX 文件。\n\t *\n\t * 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、\n\t * 环境全局变量、import、regexp 或 React 的 JavaScript 配置范围,但不会影响\n\t * 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。\n\t * @default true\n\t */\n\tjavascript?: boolean;\n\t/**\n\t * 是否检查 JSON、JSONC 与 JSON5 文件,并为三种方言分别使用兼容的推荐规则。\n\t *\n\t * 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应\n\t * 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。\n\t * @default true\n\t */\n\tjson?: boolean;\n\t/**\n\t * 是否使用 `@eslint/markdown` 推荐配置检查 `.md` 文档的结构和 Markdown 语法。\n\t *\n\t * 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架\n\t * 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。\n\t * @default false\n\t */\n\tmarkdown?: boolean;\n\t/**\n\t * 是否加载 `eslint-config-prettier`,关闭与 Prettier 冲突的 ESLint 格式规则。\n\t *\n\t * 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装\n\t * 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地\n\t * 重新启用某条格式规则。\n\t * @default true\n\t */\n\tprettier?: boolean;\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-regexp` 推荐规则。\n\t *\n\t * 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则\n\t * 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。\n\t * @default true\n\t */\n\tregexp?: boolean;\n\t/**\n\t * 是否启用 React、JSX/TSX 与 Hooks 正确性规则。\n\t *\n\t * `true` 使用默认 React 设置;传入对象可指定 React 版本、兼容 JSX 运行时包和多态\n\t * 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言\n\t * 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的\n\t * `importSource`,但此选项不会修改 JSX 编译器或打包器设置。\n\t * @default false\n\t */\n\treact?: boolean | ReactConfigOptions;\n\t/**\n\t * 应用于全部已启用 JavaScript、TypeScript 和 Vue 文件的项目级规则记录。\n\t *\n\t * `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在\n\t * 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。\n\t * JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。\n\t * @default undefined\n\t */\n\trules?: RuleOptions;\n\t/**\n\t * 是否启用 `package.json` 顶层字段的固定顺序规则。\n\t *\n\t * 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的\n\t * `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。\n\t * 启用此项会同时加载 JSON 解析配置。\n\t * @default false\n\t */\n\tsortPackageJson?: boolean;\n\t/**\n\t * 是否按 TypeScript 配置主题顺序整理 `tsconfig.json` 与 `tsconfig.*.json`。\n\t *\n\t * 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生\n\t * 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。\n\t * @default false\n\t */\n\tsortTsconfig?: boolean;\n\t/**\n\t * 是否让工厂接管 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件。\n\t *\n\t * `true` 使用无需类型信息的 TypeScript 推荐与风格预置;传入对象可进一步启用\n\t * `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的\n\t * TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript\n\t * 脚本解析,并且不能再启用 Angular。\n\t * @default true\n\t */\n\ttypescript?: boolean | TypeScriptConfigOptions;\n\t/**\n\t * 是否让工厂接管 Vue 3 `.vue` 单文件组件。\n\t *\n\t * 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随\n\t * `typescript`:TypeScript 开启时同时支持 `<script lang=\"ts\">` 和类型感知选项,\n\t * 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。\n\t * @default true\n\t */\n\tvue?: boolean;\n}\n\n/** `fastConfig()` 使用的稳定默认值;对象被冻结,避免运行时被意外修改。 */\nexport const defaultConfigOptions = Object.freeze({\n\tangular: false,\n\tenvironment: \"browser\",\n\tgitignore: true,\n\timports: true,\n\tjavascript: true,\n\tjson: true,\n\tmarkdown: false,\n\tprettier: true,\n\treact: false,\n\tregexp: true,\n\tsortPackageJson: false,\n\tsortTsconfig: false,\n\ttypescript: true,\n\tvue: true,\n} as const satisfies Required<Omit<FastConfigOptions, \"globals\" | \"ignores\" | \"rules\">>);\n\n/**\n * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。\n *\n * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和\n * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略\n * 通过 `@fast-china/eslint-config/configs` 独立组合。\n * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。\n */\nexport const fastConfig = (options: FastConfigOptions = {}, ...overrides: Config[]): Config[] => {\n\tconst angular = options.angular ?? defaultConfigOptions.angular;\n\tconst environment = options.environment ?? defaultConfigOptions.environment;\n\tconst gitignore = options.gitignore ?? defaultConfigOptions.gitignore;\n\tconst imports = options.imports ?? defaultConfigOptions.imports;\n\tconst javascript = options.javascript ?? defaultConfigOptions.javascript;\n\tconst json = options.json ?? defaultConfigOptions.json;\n\tconst markdown = options.markdown ?? defaultConfigOptions.markdown;\n\tconst prettier = options.prettier ?? defaultConfigOptions.prettier;\n\tconst react = options.react ?? defaultConfigOptions.react;\n\tconst regexp = options.regexp ?? defaultConfigOptions.regexp;\n\tconst sortPackageJson = options.sortPackageJson ?? defaultConfigOptions.sortPackageJson;\n\tconst sortTsconfig = options.sortTsconfig ?? defaultConfigOptions.sortTsconfig;\n\tconst typescript = options.typescript ?? defaultConfigOptions.typescript;\n\tconst vue = options.vue ?? defaultConfigOptions.vue;\n\n\tconst typeScriptEnabled = typescript !== false;\n\tconst typeScriptOptions = typeof typescript === \"object\" ? typescript : {};\n\tconst angularEnabled = angular !== false;\n\tconst angularOptions = typeof angular === \"object\" ? angular : {};\n\tconst reactEnabled = react !== false;\n\tconst reactOptions = typeof react === \"object\" ? react : {};\n\n\tif (angularEnabled && !typeScriptEnabled) {\n\t\tthrow new TypeError(\"Angular support requires TypeScript. Remove `typescript: false` or disable `angular`.\");\n\t}\n\t// RuleOptions 是无字符串索引签名的精确映射;运行时形状仍完全符合 ESLint RulesRecord。\n\tconst projectRules = options.rules as Linter.RulesRecord | undefined;\n\tconst scriptFiles = [...(javascript ? GLOBS_JAVASCRIPT : []), ...(typeScriptEnabled ? GLOBS_TYPESCRIPT : [])];\n\tconst codeFiles = [...scriptFiles, ...(vue ? [GLOB_VUE] : [])];\n\tconst jsonEnabled = json || sortPackageJson || sortTsconfig;\n\n\treturn defineConfig([\n\t\t...createGlobalIgnores(options.ignores),\n\t\t...(gitignore ? createGitignoreConfigs() : []),\n\t\t...(codeFiles.length\n\t\t\t? [\n\t\t\t\t\t...createEnvironmentConfigs({\n\t\t\t\t\t\tenvironment,\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\tglobals: options.globals,\n\t\t\t\t\t\tnodeFiles: scriptFiles,\n\t\t\t\t\t}),\n\t\t\t\t\t...createCommonConfigs(codeFiles),\n\t\t\t\t]\n\t\t\t: []),\n\t\t...(javascript ? createJavaScriptConfigs() : []),\n\t\t...(imports && codeFiles.length ? createImportConfigs(codeFiles) : []),\n\t\t...(regexp && codeFiles.length ? createRegexpConfigs(codeFiles) : []),\n\t\t...(typeScriptEnabled ? createTypeScriptConfigs(typeScriptOptions) : []),\n\t\t...(jsonEnabled ? createJsonConfigs() : []),\n\t\t...(sortPackageJson ? createPackageJsonSortConfigs() : []),\n\t\t...(sortTsconfig ? createTsconfigSortConfigs() : []),\n\t\t...(vue ? createVueConfigs({ typescript: typeScriptEnabled, typescriptOptions: typeScriptOptions }) : []),\n\t\t...(reactEnabled\n\t\t\t? createReactConfigs(reactOptions, {\n\t\t\t\t\tjavascript,\n\t\t\t\t\ttypeChecked: typeScriptOptions.typeChecked ?? false,\n\t\t\t\t\ttypescript: typeScriptEnabled,\n\t\t\t\t})\n\t\t\t: []),\n\t\t...(angularEnabled ? createAngularConfigs(angularOptions) : []),\n\t\t...(markdown ? createMarkdownConfigs() : []),\n\t\t...(prettier ? createPrettierConfigs() : []),\n\t\t...(projectRules && codeFiles.length\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"@fast-china/project/rules\",\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\trules: projectRules,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: []),\n\t\t...overrides,\n\t]);\n};\n\nexport default fastConfig;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * 根入口提供面向 Vue 3 浏览器管理项目的默认配置工厂。\n *\n * 配置片段、glob 常量与原始规则分别由 `./configs`、`./constants` 与 `./rules` 子路径提供。\n *\n * @packageDocumentation\n */\nimport { type Config, defineConfig } from \"eslint/config\";\n\nimport { type AngularConfigOptions, createAngularConfigs } from \"./configs/angular\";\nimport { createCommonConfigs } from \"./configs/common\";\nimport { type RuntimeEnvironment, createEnvironmentConfigs } from \"./configs/environment\";\nimport { createGitignoreConfigs, createGlobalIgnores } from \"./configs/ignores\";\nimport { createImportConfigs } from \"./configs/import\";\nimport { createJavaScriptConfigs } from \"./configs/javascript\";\nimport { createJsonConfigs } from \"./configs/json\";\nimport { createMarkdownConfigs } from \"./configs/markdown\";\nimport { createPrettierConfigs } from \"./configs/prettier\";\nimport { type ReactConfigOptions, createReactConfigs } from \"./configs/react\";\nimport { createRegexpConfigs } from \"./configs/regexp\";\nimport { createPackageJsonSortConfigs } from \"./configs/sort-package\";\nimport { createTsconfigSortConfigs } from \"./configs/sort-tsconfig\";\nimport { type TypeScriptConfigOptions, createTypeScriptConfigs } from \"./configs/typescript\";\nimport { createVueConfigs } from \"./configs/vue\";\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT, GLOB_VUE } from \"./constants\";\n\nimport type { RuleOptions } from \"./typegen\";\nimport type { Linter } from \"eslint\";\n\ntype RejectUnknownRuleNames<Rules extends RuleOptions> = Rules & Record<Exclude<keyof Rules, keyof RuleOptions>, never>;\n\n/**\n * 为项目规则提供精确的规则名、严重级别和规则选项自动补全。\n *\n * @remarks\n * 该函数不会修改传入对象;它只在 TypeScript 编译阶段拒绝未知规则和无效选项。\n *\n * @typeParam Rules - 调用方传入的规则记录类型;保留字面量键和值以提供精确推断。\n * @param rules - 需要进行规则名、严重级别和选项校验的 ESLint 规则记录。\n * @returns 原始规则记录。返回值同时兼容 ESLint 的通用 `RulesRecord` 类型。\n */\nexport const defineRules = <const Rules extends RuleOptions>(rules: RejectUnknownRuleNames<Rules>): Rules & Linter.RulesRecord => rules;\n\nexport type { RuleOptions } from \"./typegen\";\n\n/**\n * 核心工厂 `fastConfig()` 的项目级 ESLint Flat Config 选项。\n *\n * @remarks\n *\n * 每个字段只控制一个相对独立的配置片段。未传入字段时使用下方 `@defaultValue` 标注的值;\n * 布尔选项传入 `false` 会让工厂完全跳过对应片段,支持对象形式的框架或 TypeScript\n * 选项传入 `true` 时采用其内部默认值,传入对象时则在启用能力的同时覆盖内部默认值。\n *\n * `rules` 会在全部内置规则和 Prettier 兼容层之后应用;`fastConfig()` 的其余位置参数\n * 又会排在 `rules` 之后。因此,常规的全项目规则放在 `rules` 中,按文件覆盖或需要最高\n * 优先级的配置应通过其余位置参数传入。\n *\n * 这些选项只负责生成 ESLint 配置,不会修改 TypeScript、Vite 或各框架的构建配置。\n *\n * @example\n * ```ts\n * export default fastConfig({\n * environment: \"browser\",\n * react: { version: \"detect\" },\n * typescript: { typeChecked: true },\n * vue: false,\n * });\n * ```\n */\nexport interface FastConfigOptions {\n\t/**\n\t * 是否启用 Angular 源码与模板检查。\n\t *\n\t * `true` 使用 Angular 默认选项;传入对象可控制内联模板与模板无障碍规则。\n\t * 启用后会检查 Angular TypeScript 源码、外部 `.html` 模板,并默认提取\n\t * `@Component()` 中的内联模板。Angular 依赖 TypeScript 解析能力,因此不能与\n\t * `typescript: false` 同时使用,否则 `fastConfig()` 会直接抛出配置错误。\n\t *\n\t * 此选项只配置 ESLint,不会创建或修改 Angular CLI、编译器或项目文件。\n\t * @defaultValue `false`\n\t */\n\tangular?: boolean | AngularConfigOptions;\n\t/**\n\t * 应用代码实际运行的环境,用于声明 ESLint 可识别的运行时全局变量。\n\t *\n\t * - `\"browser\"`:提供浏览器全局变量,例如 `window`、`document`。\n\t * - `\"node\"`:提供 Node.js 全局变量,例如 `process`、`Buffer`。\n\t * - `\"universal\"`:同时提供浏览器与 Node.js 全局变量,适合 SSR 或同构代码。\n\t *\n\t * 常见 Vue、React、Angular 与 Vite 浏览器应用通常保持 `\"browser\"`。无论选择哪种\n\t * 环境,配置文件、脚本目录和测试文件等 Node.js 工程文件都会单独获得 Node.js\n\t * 全局变量。此选项不改变 JavaScript 编译目标或打包平台。\n\t * @defaultValue `\"browser\"`\n\t */\n\tenvironment?: RuntimeEnvironment;\n\t/**\n\t * 追加到应用代码运行环境中的项目级全局变量。\n\t *\n\t * 适用于测试运行器、UniApp、浏览器扩展或其他宿主平台注入的 API。值的格式遵循\n\t * ESLint `Linter.Globals`,可以声明为 `\"readonly\"`、`\"writable\"` 或 `\"off\"`。\n\t * 自定义值在环境预置之后合并,因此同名项目配置可以覆盖预置的读写权限。\n\t * @defaultValue `undefined`\n\t */\n\tglobals?: Linter.Globals;\n\t/**\n\t * 是否读取运行 ESLint 的项目根目录中的 `.gitignore` 并转换为全局忽略规则。\n\t *\n\t * 关闭此项只会停止读取 `.gitignore`,不会移除本库内置的依赖目录、构建产物、\n\t * 缓存、生成文件和锁文件忽略模式;如需补充忽略项,请使用 `ignores`。\n\t * @defaultValue `true`\n\t */\n\tgitignore?: boolean;\n\t/**\n\t * 追加到内置全局忽略集合末尾的 ESLint glob 模式。\n\t *\n\t * 这些模式不会替换内置忽略项。模式按 ESLint Flat Config 的全局忽略语义解析,\n\t * 适合排除项目特有的生成目录、工具输出或不应参与检查的资源。\n\t * @defaultValue `[]`\n\t */\n\tignores?: readonly string[];\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-import-x` 推荐规则和本库覆盖规则。\n\t *\n\t * 该片段检查常见的 ESM 导入导出问题,但共享配置不会猜测项目的路径别名或自定义\n\t * resolver,因此默认关闭了强依赖模块解析且容易误报的规则。如果项目重新启用这些\n\t * 规则,应在传给 `fastConfig()` 的覆盖配置中同时补充 resolver。关闭本选项不会影响\n\t * JavaScript 或 TypeScript 的基础语法检查。\n\t * @defaultValue `true`\n\t */\n\timports?: boolean;\n\t/**\n\t * 是否让工厂接管 JavaScript、CommonJS、ES Module 与 JSX 文件。\n\t *\n\t * 启用时匹配 `.js`、`.cjs`、`.mjs` 与 `.jsx`;关闭后这些文件不会进入基础规则、\n\t * 环境全局变量、import、regexp 或 React 的 JavaScript 配置范围,但不会影响\n\t * 已启用的 TypeScript、Vue、JSON 或 Markdown 文件。\n\t * @defaultValue `true`\n\t */\n\tjavascript?: boolean;\n\t/**\n\t * 是否检查 JSON、JSONC 与 JSON5 文件,并为三种方言分别使用兼容的推荐规则。\n\t *\n\t * 此选项不负责字段排序。`sortPackageJson` 或 `sortTsconfig` 任一启用时,为了让对应\n\t * 排序规则能够解析文件,JSON 配置仍会被加载,即使这里显式传入 `false`。\n\t * @defaultValue `true`\n\t */\n\tjson?: boolean;\n\t/**\n\t * 是否使用 `@eslint/markdown` 推荐配置检查 `.md` 文档的结构和 Markdown 语法。\n\t *\n\t * 该配置关注 Markdown 文档本身,不会自动把项目的 JavaScript、TypeScript 或框架\n\t * 规则应用到围栏代码块;如需检查代码块,应通过项目覆盖配置明确指定。\n\t * @defaultValue `false`\n\t */\n\tmarkdown?: boolean;\n\t/**\n\t * 是否加载 `eslint-config-prettier`,关闭与 Prettier 冲突的 ESLint 格式规则。\n\t *\n\t * 该片段不会运行 Prettier,也不会检查文件是否符合 Prettier 输出;项目仍需自行安装\n\t * 并执行 Prettier。它位于内置规则之后、项目 `rules` 之前,因此项目仍可有意识地\n\t * 重新启用某条格式规则。\n\t * @defaultValue `true`\n\t */\n\tprettier?: boolean;\n\t/**\n\t * 是否为全部已启用代码文件加载 `eslint-plugin-regexp` 推荐规则。\n\t *\n\t * 规则用于发现无效、冗余、难以理解或可能产生性能问题的正则表达式;其中部分规则\n\t * 支持自动修复,执行 `eslint --fix` 后仍应运行项目测试验证真实匹配行为。\n\t * @defaultValue `true`\n\t */\n\tregexp?: boolean;\n\t/**\n\t * 是否启用 React、JSX/TSX 与 Hooks 正确性规则。\n\t *\n\t * `true` 使用默认 React 设置;传入对象可指定 React 版本、兼容 JSX 运行时包和多态\n\t * 组件属性名。规则范围由 `javascript` 与 `typescript` 共同决定:关闭其中一种语言\n\t * 后,React 不会继续接管该语言的文件。兼容 Preact 等运行时时,应同时配置相应的\n\t * `importSource`,但此选项不会修改 JSX 编译器或打包器设置。\n\t * @defaultValue `false`\n\t */\n\treact?: boolean | ReactConfigOptions;\n\t/**\n\t * 应用于全部已启用 JavaScript、TypeScript 和 Vue 文件的项目级规则记录。\n\t *\n\t * `RuleOptions` 为已安装插件提供精确规则名、严重级别和选项自动补全。该记录排在\n\t * 内置规则及 Prettier 兼容层之后,可以覆盖它们;但其余位置参数中的配置优先级更高。\n\t * JSON、Markdown、Angular HTML 模板或其他特殊文件范围应使用其余位置参数单独配置。\n\t * @defaultValue `undefined`\n\t */\n\trules?: RuleOptions;\n\t/**\n\t * 是否启用 `package.json` 顶层字段的固定顺序规则。\n\t *\n\t * 规则只在执行 `eslint --fix` 时重排字段,并刻意不进入顺序具有运行时语义的\n\t * `exports` 条件对象。首次启用通常会产生较大的纯排序差异,建议单独提交并复核。\n\t * 启用此项会同时加载 JSON 解析配置。\n\t * @defaultValue `false`\n\t */\n\tsortPackageJson?: boolean;\n\t/**\n\t * 是否按 TypeScript 配置主题顺序整理 `tsconfig.json` 与 `tsconfig.*.json`。\n\t *\n\t * 规则不会改变编译选项值,只在执行 `eslint --fix` 时调整字段顺序。首次启用可能产生\n\t * 较大差异,建议单独提交并确认继承关系仍清晰。启用此项会同时加载 JSON 解析配置。\n\t * @defaultValue `false`\n\t */\n\tsortTsconfig?: boolean;\n\t/**\n\t * 是否让工厂接管 `.ts`、`.cts`、`.mts` 与 `.tsx` 文件。\n\t *\n\t * `true` 使用无需类型信息的 TypeScript 推荐与风格预置;传入对象可进一步启用\n\t * `typeChecked` 和指定 `tsconfigRootDir`。类型感知设置还会同步给 Vue 与 React 的\n\t * TypeScript 配置。传入 `false` 会移除 TypeScript 文件范围,使 Vue 退回 JavaScript\n\t * 脚本解析,并且不能再启用 Angular。\n\t * @defaultValue `true`\n\t */\n\ttypescript?: boolean | TypeScriptConfigOptions;\n\t/**\n\t * 是否让工厂接管 Vue 3 `.vue` 单文件组件。\n\t *\n\t * 启用后加载 Vue 3 推荐规则、模板解析器以及本库的 Vue 规则。脚本语言跟随\n\t * `typescript`:TypeScript 开启时同时支持 `<script lang=\"ts\">` 和类型感知选项,\n\t * 关闭时仅按 JavaScript 解析脚本。此库不提供 Vue 2 兼容预置。\n\t * @defaultValue `true`\n\t */\n\tvue?: boolean;\n}\n\n/**\n * `fastConfig()` 使用的稳定默认选项。\n *\n * @remarks\n * 对象在运行时被冻结,不包含无固定默认值的 `globals`、`ignores` 与 `rules` 字段。\n * 调用方应将其视为只读参考,不应依赖修改该对象来改变工厂行为。\n */\nexport const defaultConfigOptions = Object.freeze({\n\tangular: false,\n\tenvironment: \"browser\",\n\tgitignore: true,\n\timports: true,\n\tjavascript: true,\n\tjson: true,\n\tmarkdown: false,\n\tprettier: true,\n\treact: false,\n\tregexp: true,\n\tsortPackageJson: false,\n\tsortTsconfig: false,\n\ttypescript: true,\n\tvue: true,\n} as const satisfies Required<Omit<FastConfigOptions, \"globals\" | \"ignores\" | \"rules\">>);\n\n/**\n * 创建面向 Vue 3、Vite、TypeScript 与浏览器后台管理项目的 ESLint Flat Config。\n *\n * @remarks\n * 默认启用浏览器环境、JavaScript、TypeScript、Vue 3、import、RegExp、JSON 和\n * Prettier 兼容层。React、Angular、Markdown 与清单排序按需启用;Lodash 导入策略\n * 通过 `@fast-china/eslint-config/configs` 独立组合。\n * 额外配置参数会放在内置配置之后,因此项目可以按文件范围覆盖任何默认规则。\n *\n * @param options - 控制内置语言、框架、插件与项目级规则的选项。\n * @param overrides - 追加到全部内置片段之后的 ESLint Flat Config,可用于按文件覆盖默认行为。\n * @returns 按应用顺序展开、可直接导出给 ESLint 的 Flat Config 数组。\n * @throws {@link TypeError} 当启用 Angular 的同时显式关闭 TypeScript 时抛出。\n *\n * @example\n * ```ts\n * import fastConfig from \"@fast-china/eslint-config\";\n *\n * export default fastConfig(\n * { react: true, vue: false },\n * { files: [\"src/index.ts\"], rules: { \"no-console\": \"error\" } },\n * );\n * ```\n */\nexport const fastConfig = (options: FastConfigOptions = {}, ...overrides: Config[]): Config[] => {\n\tconst angular = options.angular ?? defaultConfigOptions.angular;\n\tconst environment = options.environment ?? defaultConfigOptions.environment;\n\tconst gitignore = options.gitignore ?? defaultConfigOptions.gitignore;\n\tconst imports = options.imports ?? defaultConfigOptions.imports;\n\tconst javascript = options.javascript ?? defaultConfigOptions.javascript;\n\tconst json = options.json ?? defaultConfigOptions.json;\n\tconst markdown = options.markdown ?? defaultConfigOptions.markdown;\n\tconst prettier = options.prettier ?? defaultConfigOptions.prettier;\n\tconst react = options.react ?? defaultConfigOptions.react;\n\tconst regexp = options.regexp ?? defaultConfigOptions.regexp;\n\tconst sortPackageJson = options.sortPackageJson ?? defaultConfigOptions.sortPackageJson;\n\tconst sortTsconfig = options.sortTsconfig ?? defaultConfigOptions.sortTsconfig;\n\tconst typescript = options.typescript ?? defaultConfigOptions.typescript;\n\tconst vue = options.vue ?? defaultConfigOptions.vue;\n\n\tconst typeScriptEnabled = typescript !== false;\n\tconst typeScriptOptions = typeof typescript === \"object\" ? typescript : {};\n\tconst angularEnabled = angular !== false;\n\tconst angularOptions = typeof angular === \"object\" ? angular : {};\n\tconst reactEnabled = react !== false;\n\tconst reactOptions = typeof react === \"object\" ? react : {};\n\n\tif (angularEnabled && !typeScriptEnabled) {\n\t\tthrow new TypeError(\"Angular support requires TypeScript. Remove `typescript: false` or disable `angular`.\");\n\t}\n\t// RuleOptions 是无字符串索引签名的精确映射;运行时形状仍完全符合 ESLint RulesRecord。\n\tconst projectRules = options.rules as Linter.RulesRecord | undefined;\n\tconst scriptFiles = [...(javascript ? GLOBS_JAVASCRIPT : []), ...(typeScriptEnabled ? GLOBS_TYPESCRIPT : [])];\n\tconst codeFiles = [...scriptFiles, ...(vue ? [GLOB_VUE] : [])];\n\tconst jsonEnabled = json || sortPackageJson || sortTsconfig;\n\n\treturn defineConfig([\n\t\t...createGlobalIgnores(options.ignores),\n\t\t...(gitignore ? createGitignoreConfigs() : []),\n\t\t...(codeFiles.length\n\t\t\t? [\n\t\t\t\t\t...createEnvironmentConfigs({\n\t\t\t\t\t\tenvironment,\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\tglobals: options.globals,\n\t\t\t\t\t\tnodeFiles: scriptFiles,\n\t\t\t\t\t}),\n\t\t\t\t\t...createCommonConfigs(codeFiles),\n\t\t\t\t]\n\t\t\t: []),\n\t\t...(javascript ? createJavaScriptConfigs() : []),\n\t\t...(imports && codeFiles.length ? createImportConfigs(codeFiles) : []),\n\t\t...(regexp && codeFiles.length ? createRegexpConfigs(codeFiles) : []),\n\t\t...(typeScriptEnabled ? createTypeScriptConfigs(typeScriptOptions) : []),\n\t\t...(jsonEnabled ? createJsonConfigs() : []),\n\t\t...(sortPackageJson ? createPackageJsonSortConfigs() : []),\n\t\t...(sortTsconfig ? createTsconfigSortConfigs() : []),\n\t\t...(vue ? createVueConfigs({ typescript: typeScriptEnabled, typescriptOptions: typeScriptOptions }) : []),\n\t\t...(reactEnabled\n\t\t\t? createReactConfigs(reactOptions, {\n\t\t\t\t\tjavascript,\n\t\t\t\t\ttypeChecked: typeScriptOptions.typeChecked ?? false,\n\t\t\t\t\ttypescript: typeScriptEnabled,\n\t\t\t\t})\n\t\t\t: []),\n\t\t...(angularEnabled ? createAngularConfigs(angularOptions) : []),\n\t\t...(markdown ? createMarkdownConfigs() : []),\n\t\t...(prettier ? createPrettierConfigs() : []),\n\t\t...(projectRules && codeFiles.length\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"@fast-china/project/rules\",\n\t\t\t\t\t\tfiles: codeFiles,\n\t\t\t\t\t\trules: projectRules,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: []),\n\t\t...overrides,\n\t]);\n};\n\nexport default fastConfig;\n"],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  /**
3
3
  * Angular TypeScript 推荐规则。
4
4
  *
5
+ * @remarks
5
6
  * Angular ESLint 的拆分插件不直接导出 Flat Config 预置;本记录与 angular-eslint
6
7
  * 22.x 的 `tsRecommended` 保持一致,并逐条说明启用理由。
7
8
  */
@@ -20,14 +21,26 @@ declare const angularRules: {
20
21
  "@angular-eslint/use-pipe-transform-interface": "error";
21
22
  "@angular-eslint/use-lifecycle-interface": "warn";
22
23
  };
23
- /** Angular HTML 模板推荐规则,与 angular-eslint 22.x 的 `templateRecommended` 对齐。 */
24
+ /**
25
+ * Angular HTML 模板推荐规则。
26
+ *
27
+ * @remarks
28
+ * 该记录与 angular-eslint 22.x 的 `templateRecommended` 对齐,并补充默认启用的现代
29
+ * 控制流约束。它同时应用于外部模板与 processor 提取的内联模板。
30
+ */
24
31
  declare const angularTemplateRules: {
25
32
  "@angular-eslint/template/banana-in-box": "error";
26
33
  "@angular-eslint/template/eqeqeq": "error";
27
34
  "@angular-eslint/template/no-negated-async": "error";
28
35
  "@angular-eslint/template/prefer-control-flow": "error";
29
36
  };
30
- /** Angular 模板无障碍规则;可通过 `angular.templateAccessibility` 整组关闭。 */
37
+ /**
38
+ * Angular 模板无障碍规则。
39
+ *
40
+ * @remarks
41
+ * 规则覆盖替代文本、键盘交互、焦点、表单标签与 ARIA 合法性,可通过
42
+ * `angular.templateAccessibility` 整组关闭而不影响模板基础正确性规则。
43
+ */
31
44
  declare const angularTemplateAccessibilityRules: {
32
45
  "@angular-eslint/template/alt-text": "error";
33
46
  "@angular-eslint/template/click-events-have-key-events": "error";