@fast-china/eslint-config 2.0.4 → 2.0.5

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 (117) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +1 -1
  3. package/README.zh.md +1 -1
  4. package/dist/configs/angular.d.mts +7 -2
  5. package/dist/configs/angular.d.mts.map +1 -1
  6. package/dist/configs/angular.mjs +4 -0
  7. package/dist/configs/angular.mjs.map +1 -1
  8. package/dist/configs/common.d.mts +4 -0
  9. package/dist/configs/common.d.mts.map +1 -1
  10. package/dist/configs/common.mjs +4 -0
  11. package/dist/configs/common.mjs.map +1 -1
  12. package/dist/configs/environment.d.mts +16 -4
  13. package/dist/configs/environment.d.mts.map +1 -1
  14. package/dist/configs/environment.mjs +4 -0
  15. package/dist/configs/environment.mjs.map +1 -1
  16. package/dist/configs/ignores.d.mts +16 -2
  17. package/dist/configs/ignores.d.mts.map +1 -1
  18. package/dist/configs/ignores.mjs +16 -2
  19. package/dist/configs/ignores.mjs.map +1 -1
  20. package/dist/configs/import.d.mts +4 -0
  21. package/dist/configs/import.d.mts.map +1 -1
  22. package/dist/configs/import.mjs +4 -0
  23. package/dist/configs/import.mjs.map +1 -1
  24. package/dist/configs/javascript.d.mts +5 -0
  25. package/dist/configs/javascript.d.mts.map +1 -1
  26. package/dist/configs/javascript.mjs +5 -0
  27. package/dist/configs/javascript.mjs.map +1 -1
  28. package/dist/configs/json.d.mts +4 -0
  29. package/dist/configs/json.d.mts.map +1 -1
  30. package/dist/configs/json.mjs +4 -0
  31. package/dist/configs/json.mjs.map +1 -1
  32. package/dist/configs/lodash.d.mts +11 -1
  33. package/dist/configs/lodash.d.mts.map +1 -1
  34. package/dist/configs/lodash.mjs +6 -0
  35. package/dist/configs/lodash.mjs.map +1 -1
  36. package/dist/configs/markdown.d.mts +3 -0
  37. package/dist/configs/markdown.d.mts.map +1 -1
  38. package/dist/configs/markdown.mjs +3 -0
  39. package/dist/configs/markdown.mjs.map +1 -1
  40. package/dist/configs/prettier.d.mts +3 -0
  41. package/dist/configs/prettier.d.mts.map +1 -1
  42. package/dist/configs/prettier.mjs +3 -0
  43. package/dist/configs/prettier.mjs.map +1 -1
  44. package/dist/configs/react.d.mts +13 -6
  45. package/dist/configs/react.d.mts.map +1 -1
  46. package/dist/configs/react.mjs +5 -0
  47. package/dist/configs/react.mjs.map +1 -1
  48. package/dist/configs/regexp.d.mts +4 -0
  49. package/dist/configs/regexp.d.mts.map +1 -1
  50. package/dist/configs/regexp.mjs +4 -0
  51. package/dist/configs/regexp.mjs.map +1 -1
  52. package/dist/configs/sort-package.d.mts +3 -0
  53. package/dist/configs/sort-package.d.mts.map +1 -1
  54. package/dist/configs/sort-package.mjs +3 -0
  55. package/dist/configs/sort-package.mjs.map +1 -1
  56. package/dist/configs/sort-tsconfig.d.mts +3 -0
  57. package/dist/configs/sort-tsconfig.d.mts.map +1 -1
  58. package/dist/configs/sort-tsconfig.mjs +3 -0
  59. package/dist/configs/sort-tsconfig.mjs.map +1 -1
  60. package/dist/configs/typescript.d.mts +19 -3
  61. package/dist/configs/typescript.d.mts.map +1 -1
  62. package/dist/configs/typescript.mjs +16 -1
  63. package/dist/configs/typescript.mjs.map +1 -1
  64. package/dist/configs/vue.d.mts +7 -2
  65. package/dist/configs/vue.d.mts.map +1 -1
  66. package/dist/configs/vue.mjs +4 -0
  67. package/dist/configs/vue.mjs.map +1 -1
  68. package/dist/constants/index.d.mts +12 -2
  69. package/dist/constants/index.d.mts.map +1 -1
  70. package/dist/constants/index.mjs +12 -2
  71. package/dist/constants/index.mjs.map +1 -1
  72. package/dist/index.d.mts +48 -19
  73. package/dist/index.d.mts.map +1 -1
  74. package/dist/index.mjs +31 -1
  75. package/dist/index.mjs.map +1 -1
  76. package/dist/rules/angular.d.mts +15 -2
  77. package/dist/rules/angular.d.mts.map +1 -1
  78. package/dist/rules/angular.mjs +15 -2
  79. package/dist/rules/angular.mjs.map +1 -1
  80. package/dist/rules/common.d.mts +1 -0
  81. package/dist/rules/common.d.mts.map +1 -1
  82. package/dist/rules/common.mjs +1 -0
  83. package/dist/rules/common.mjs.map +1 -1
  84. package/dist/rules/import.d.mts +7 -1
  85. package/dist/rules/import.d.mts.map +1 -1
  86. package/dist/rules/import.mjs +7 -1
  87. package/dist/rules/import.mjs.map +1 -1
  88. package/dist/rules/javascript.d.mts +2 -0
  89. package/dist/rules/javascript.d.mts.map +1 -1
  90. package/dist/rules/javascript.mjs +2 -0
  91. package/dist/rules/javascript.mjs.map +1 -1
  92. package/dist/rules/lodash.d.mts +2 -0
  93. package/dist/rules/lodash.d.mts.map +1 -1
  94. package/dist/rules/lodash.mjs +2 -0
  95. package/dist/rules/lodash.mjs.map +1 -1
  96. package/dist/rules/react.d.mts +1 -0
  97. package/dist/rules/react.d.mts.map +1 -1
  98. package/dist/rules/react.mjs +1 -0
  99. package/dist/rules/react.mjs.map +1 -1
  100. package/dist/rules/sort-package.d.mts +1 -0
  101. package/dist/rules/sort-package.d.mts.map +1 -1
  102. package/dist/rules/sort-package.mjs +1 -0
  103. package/dist/rules/sort-package.mjs.map +1 -1
  104. package/dist/rules/sort-tsconfig.d.mts +1 -0
  105. package/dist/rules/sort-tsconfig.d.mts.map +1 -1
  106. package/dist/rules/sort-tsconfig.mjs +1 -0
  107. package/dist/rules/sort-tsconfig.mjs.map +1 -1
  108. package/dist/rules/typescript.d.mts +2 -0
  109. package/dist/rules/typescript.d.mts.map +1 -1
  110. package/dist/rules/typescript.mjs +2 -0
  111. package/dist/rules/typescript.mjs.map +1 -1
  112. package/dist/rules/vue.d.mts +2 -0
  113. package/dist/rules/vue.d.mts.map +1 -1
  114. package/dist/rules/vue.mjs +2 -0
  115. package/dist/rules/vue.mjs.map +1 -1
  116. package/docs/engineering-audit.zh.md +5 -2
  117. package/package.json +6 -3
@@ -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 * 它只关闭与 Prettier 冲突的 ESLint 格式规则,不会在 ESLint 进程中执行 Prettier。\n * 工厂始终把它放在内置配置之后,使上游预置的格式规则能够被正确覆盖。\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":";;;;;;;;;AASA,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/**\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"}
@@ -2,6 +2,7 @@
2
2
  /**
3
3
  * React 与兼容 JSX 运行时的检测设置。
4
4
  *
5
+ * @remarks
5
6
  * 该对象通过 `fastConfig({ react: { ... } })` 传入。传入对象会启用 React 支持,并在
6
7
  * JavaScript/JSX 和 TypeScript/TSX 文件上加载对应的 `@eslint-react` 推荐预置、React
7
8
  * 官方 Hooks Flat Config 以及本库规则。实际文件范围仍受顶层 `javascript`、
@@ -17,7 +18,7 @@ interface ReactConfigOptions {
17
18
  * 标准 React 项目保持 `"react"`;Preact 等兼容运行时可填写自身包名,使
18
19
  * `@eslint-react` 按正确的导入来源识别组件和 API。该设置不会修改 TypeScript
19
20
  * `jsxImportSource`、Babel、Vite 或其他构建工具配置,两侧需要由项目自行保持一致。
20
- * @default "react"
21
+ * @defaultValue `"react"`
21
22
  */
22
23
  importSource?: string;
23
24
  /**
@@ -25,7 +26,7 @@ interface ReactConfigOptions {
25
26
  *
26
27
  * 例如 `<Button as="a" />` 中的 `as`。插件会据此理解多态组件最终渲染元素的语义,
27
28
  * 从而提高 DOM 与可访问性相关规则的判断准确度;未采用多态组件时通常无需修改。
28
- * @default "as"
29
+ * @defaultValue `"as"`
29
30
  */
30
31
  polymorphicPropName?: string;
31
32
  /**
@@ -34,13 +35,14 @@ interface ReactConfigOptions {
34
35
  * `"detect"` 会尝试从当前项目依赖解析已安装的 React 版本。monorepo、PnP、兼容运行时
35
36
  * 或依赖不可见的执行环境若无法可靠检测,可传入明确版本号,例如 `"19.1.0"`。
36
37
  * 该值只影响 lint 规则判断,不会限制或安装 React 依赖版本。
37
- * @default "detect"
38
+ * @defaultValue `"detect"`
38
39
  */
39
40
  version?: string;
40
41
  }
41
42
  /**
42
43
  * React 配置生成器使用的语言状态。
43
44
  *
45
+ * @remarks
44
46
  * `fastConfig()` 会自动推导这些值;直接组合配置片段时由调用方显式传入。
45
47
  *
46
48
  * 用户不直接配置该接口。`fastConfig()` 会把顶层 JavaScript、TypeScript 开关以及
@@ -53,7 +55,7 @@ interface ReactLanguageOptions {
53
55
  *
54
56
  * 该值来自顶层 `FastConfigOptions.javascript`;为 `false` 时即使 React 已启用,
55
57
  * React 配置也不会声明这些文件范围。
56
- * @default true
58
+ * @defaultValue `true`
57
59
  */
58
60
  javascript?: boolean;
59
61
  /**
@@ -61,7 +63,7 @@ interface ReactLanguageOptions {
61
63
  *
62
64
  * 该值来自 `FastConfigOptions.typescript.typeChecked`,只影响 TypeScript React 配置;
63
65
  * JavaScript 配置始终使用普通推荐预置。
64
- * @default false
66
+ * @defaultValue `false`
65
67
  */
66
68
  typeChecked?: boolean;
67
69
  /**
@@ -69,16 +71,21 @@ interface ReactLanguageOptions {
69
71
  *
70
72
  * 该值来自顶层 `FastConfigOptions.typescript`;为 `false` 时不会生成 TypeScript React
71
73
  * 片段,也不会仅因为 React 已启用而重新接管 TypeScript 文件。
72
- * @default true
74
+ * @defaultValue `true`
73
75
  */
74
76
  typescript?: boolean;
75
77
  }
76
78
  /**
77
79
  * 创建 React、JSX/TSX 与 Hooks 配置。
78
80
  *
81
+ * @remarks
79
82
  * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用
80
83
  * React 官方 Flat Config。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中
81
84
  * 定义,因此规则覆盖全部已启用脚本扩展名,而不仅是 `.jsx`/`.tsx`。
85
+ *
86
+ * @param options - React 版本、运行时导入来源与多态组件属性设置。
87
+ * @param languages - 由调用方启用的脚本语言以及 TypeScript 类型感知状态。
88
+ * @returns 仅包含已启用语言的 React 与 Hooks Flat Config 数组。
82
89
  */
83
90
  declare const createReactConfigs: ({ importSource, polymorphicPropName, version }?: ReactConfigOptions, { javascript, typeChecked, typescript }?: ReactLanguageOptions) => import("eslint/config").ConfigObject[];
84
91
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.mts","names":[],"sources":["../../src/configs/react.ts"],"mappings":";;;;;;;;;;;;UAoBiB;;;;;;;;;EAShB;;;;;;;;EAQA;;;;;;;;;EASA;;;;;;;;;;;UAYS;;;;;;;;EAQT;;;;;;;;EAQA;;;;;;;;EAQA;;;;;;;;;cAUY,uBACZ,cAAA,qBAAA,YAA4E,sBAC5E,YAAA,aAAA,eAA+D,iDAAyB"}
1
+ {"version":3,"file":"react.d.mts","names":[],"sources":["../../src/configs/react.ts"],"mappings":";;;;;;;;;;;;;UAqBiB;;;;;;;;;EAShB;;;;;;;;EAQA;;;;;;;;;EASA;;;;;;;;;;;;UAaS;;;;;;;;EAQT;;;;;;;;EAQA;;;;;;;;EAQA;;;;;;;;;;;;;;cAeY,uBACZ,cAAA,qBAAA,YAA4E,sBAC5E,YAAA,aAAA,eAA+D,iDAAyB"}
@@ -7,9 +7,14 @@ import eslintPluginReactHooks from "eslint-plugin-react-hooks";
7
7
  /**
8
8
  * 创建 React、JSX/TSX 与 Hooks 配置。
9
9
  *
10
+ * @remarks
10
11
  * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用
11
12
  * React 官方 Flat Config。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中
12
13
  * 定义,因此规则覆盖全部已启用脚本扩展名,而不仅是 `.jsx`/`.tsx`。
14
+ *
15
+ * @param options - React 版本、运行时导入来源与多态组件属性设置。
16
+ * @param languages - 由调用方启用的脚本语言以及 TypeScript 类型感知状态。
17
+ * @returns 仅包含已启用语言的 React 与 Hooks Flat Config 数组。
13
18
  */
14
19
  const createReactConfigs = ({ importSource = "react", polymorphicPropName = "as", version = "detect" } = {}, { javascript = true, typeChecked = false, typescript = true } = {}) => {
15
20
  const createConfig = (name, files, preset) => ({
@@ -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\";\n\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT } from \"../constants\";\nimport { reactRules } from \"../rules\";\n\nimport type { Linter } from \"eslint\";\n\n/**\n * React 与兼容 JSX 运行时的检测设置。\n *\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 * @default \"react\"\n\t */\n\timportSource?: string;\n\t/**\n\t * 项目约定用于切换多态组件底层元素或组件类型的属性名。\n\t *\n\t * 例如 `<Button as=\"a\" />` 中的 `as`。插件会据此理解多态组件最终渲染元素的语义,\n\t * 从而提高 DOM 与可访问性相关规则的判断准确度;未采用多态组件时通常无需修改。\n\t * @default \"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 * @default \"detect\"\n\t */\n\tversion?: string;\n}\n\n/**\n * React 配置生成器使用的语言状态。\n *\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 * @default 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 * @default 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 * @default true\n\t */\n\ttypescript?: boolean;\n}\n\n/**\n * 创建 React、JSX/TSX 与 Hooks 配置。\n *\n * JavaScript 和 TypeScript 分别继承对应的 @eslint-react 推荐预置;Hooks 使用\n * React 官方 Flat Config。组件、Hooks 即使不返回 JSX 也能在普通 `.js`/`.ts` 中\n * 定义,因此规则覆盖全部已启用脚本扩展名,而不仅是 `.jsx`/`.tsx`。\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":";;;;;;;;;;;;;AA4FA,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\";\n\nimport { GLOBS_JAVASCRIPT, GLOBS_TYPESCRIPT } from \"../constants\";\nimport { reactRules } from \"../rules\";\n\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":";;;;;;;;;;;;;;;;;;AAmGA,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"}
@@ -2,8 +2,12 @@
2
2
  /**
3
3
  * 创建正则表达式正确性配置。
4
4
  *
5
+ * @remarks
5
6
  * 插件推荐规则会检查无效、冗余或容易产生回溯问题的正则结构;部分规则可修复,
6
7
  * 批量修复后仍需运行覆盖真实输入的项目测试。
8
+ *
9
+ * @param files - 应用正则表达式规则的 ESLint glob 列表。
10
+ * @returns 包含 `eslint-plugin-regexp` 推荐预置的 Flat Config 数组。
7
11
  */
8
12
  declare const createRegexpConfigs: (files?: readonly string[]) => import("eslint/config").ConfigObject[];
9
13
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"regexp.d.mts","names":[],"sources":["../../src/configs/regexp.ts"],"mappings":";;;;;;;cAWa,sBAAuB,sDAAqC"}
1
+ {"version":3,"file":"regexp.d.mts","names":[],"sources":["../../src/configs/regexp.ts"],"mappings":";;;;;;;;;;;cAea,sBAAuB,sDAAqC"}
@@ -5,8 +5,12 @@ import eslintPluginRegexp from "eslint-plugin-regexp";
5
5
  /**
6
6
  * 创建正则表达式正确性配置。
7
7
  *
8
+ * @remarks
8
9
  * 插件推荐规则会检查无效、冗余或容易产生回溯问题的正则结构;部分规则可修复,
9
10
  * 批量修复后仍需运行覆盖真实输入的项目测试。
11
+ *
12
+ * @param files - 应用正则表达式规则的 ESLint glob 列表。
13
+ * @returns 包含 `eslint-plugin-regexp` 推荐预置的 Flat Config 数组。
10
14
  */
11
15
  const createRegexpConfigs = (files = GLOBS_CODE) => defineConfig([{
12
16
  name: "@fast-china/regexp",
@@ -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\";\n\nimport { GLOBS_CODE } from \"../constants\";\n\n/**\n * 创建正则表达式正确性配置。\n *\n * 插件推荐规则会检查无效、冗余或容易产生回溯问题的正则结构;部分规则可修复,\n * 批量修复后仍需运行覆盖真实输入的项目测试。\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":";;;;;;;;;;AAWA,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\";\n\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":";;;;;;;;;;;;;;AAeA,MAAa,uBAAuB,QAA2B,eAC9D,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,mBAAmB,QAAQ,mBAAmB;AACzD,CACD,CAAC"}
@@ -2,8 +2,11 @@
2
2
  /**
3
3
  * 创建 package.json 排序配置。
4
4
  *
5
+ * @remarks
5
6
  * 该能力会产生较大的可修复 diff,因此必须显式启用;规则不会进入顺序具有
6
7
  * 条件导出语义的 `exports` 对象内部。
8
+ *
9
+ * @returns 仅匹配 `package.json` 的字段排序 Flat Config 数组。
7
10
  */
8
11
  declare const createPackageJsonSortConfigs: () => import("eslint/config").ConfigObject[];
9
12
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"sort-package.d.mts","names":[],"sources":["../../src/configs/sort-package.ts"],"mappings":";;;;;;;cAUa,4DAA4B"}
1
+ {"version":3,"file":"sort-package.d.mts","names":[],"sources":["../../src/configs/sort-package.ts"],"mappings":";;;;;;;;;;cAaa,4DAA4B"}
@@ -4,8 +4,11 @@ import { defineConfig } from "eslint/config";
4
4
  /**
5
5
  * 创建 package.json 排序配置。
6
6
  *
7
+ * @remarks
7
8
  * 该能力会产生较大的可修复 diff,因此必须显式启用;规则不会进入顺序具有
8
9
  * 条件导出语义的 `exports` 对象内部。
10
+ *
11
+ * @returns 仅匹配 `package.json` 的字段排序 Flat Config 数组。
9
12
  */
10
13
  const createPackageJsonSortConfigs = () => defineConfig([{
11
14
  name: "@fast-china/sort/package-json",
@@ -1 +1 @@
1
- {"version":3,"file":"sort-package.mjs","names":[],"sources":["../../src/configs/sort-package.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\n\nimport { packageJsonSortRules } from \"../rules\";\n\n/**\n * 创建 package.json 排序配置。\n *\n * 该能力会产生较大的可修复 diff,因此必须显式启用;规则不会进入顺序具有\n * 条件导出语义的 `exports` 对象内部。\n */\nexport const createPackageJsonSortConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/sort/package-json\",\n\t\t\tfiles: [\"**/package.json\"],\n\t\t\trules: packageJsonSortRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;AAUA,MAAa,qCACZ,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,iBAAiB;CACzB,OAAO;AACR,CACD,CAAC"}
1
+ {"version":3,"file":"sort-package.mjs","names":[],"sources":["../../src/configs/sort-package.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\n\nimport { packageJsonSortRules } from \"../rules\";\n\n/**\n * 创建 package.json 排序配置。\n *\n * @remarks\n * 该能力会产生较大的可修复 diff,因此必须显式启用;规则不会进入顺序具有\n * 条件导出语义的 `exports` 对象内部。\n *\n * @returns 仅匹配 `package.json` 的字段排序 Flat Config 数组。\n */\nexport const createPackageJsonSortConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/sort/package-json\",\n\t\t\tfiles: [\"**/package.json\"],\n\t\t\trules: packageJsonSortRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,qCACZ,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,iBAAiB;CACzB,OAAO;AACR,CACD,CAAC"}
@@ -2,7 +2,10 @@
2
2
  /**
3
3
  * 创建 tsconfig.json 排序配置。
4
4
  *
5
+ * @remarks
5
6
  * 排序只改变字段阅读顺序,不改变编译选项值;由于首次修复 diff 较大,默认关闭。
7
+ *
8
+ * @returns 匹配 `tsconfig.json` 与 `tsconfig.*.json` 的字段排序 Flat Config 数组。
6
9
  */
7
10
  declare const createTsconfigSortConfigs: () => import("eslint/config").ConfigObject[];
8
11
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"sort-tsconfig.d.mts","names":[],"sources":["../../src/configs/sort-tsconfig.ts"],"mappings":";;;;;;cAUa,yDAAyB"}
1
+ {"version":3,"file":"sort-tsconfig.d.mts","names":[],"sources":["../../src/configs/sort-tsconfig.ts"],"mappings":";;;;;;;;;cAaa,yDAAyB"}
@@ -5,7 +5,10 @@ import { defineConfig } from "eslint/config";
5
5
  /**
6
6
  * 创建 tsconfig.json 排序配置。
7
7
  *
8
+ * @remarks
8
9
  * 排序只改变字段阅读顺序,不改变编译选项值;由于首次修复 diff 较大,默认关闭。
10
+ *
11
+ * @returns 匹配 `tsconfig.json` 与 `tsconfig.*.json` 的字段排序 Flat Config 数组。
9
12
  */
10
13
  const createTsconfigSortConfigs = () => defineConfig([{
11
14
  name: "@fast-china/sort/tsconfig",
@@ -1 +1 @@
1
- {"version":3,"file":"sort-tsconfig.mjs","names":[],"sources":["../../src/configs/sort-tsconfig.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\n\nimport { GLOBS_TSCONFIG } from \"../constants\";\nimport { tsconfigJsonSortRules } from \"../rules\";\n\n/**\n * 创建 tsconfig.json 排序配置。\n *\n * 排序只改变字段阅读顺序,不改变编译选项值;由于首次修复 diff 较大,默认关闭。\n */\nexport const createTsconfigSortConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/sort/tsconfig\",\n\t\t\tfiles: [...GLOBS_TSCONFIG],\n\t\t\trules: tsconfigJsonSortRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;AAUA,MAAa,kCACZ,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,cAAc;CACzB,OAAO;AACR,CACD,CAAC"}
1
+ {"version":3,"file":"sort-tsconfig.mjs","names":[],"sources":["../../src/configs/sort-tsconfig.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\n\nimport { GLOBS_TSCONFIG } from \"../constants\";\nimport { tsconfigJsonSortRules } from \"../rules\";\n\n/**\n * 创建 tsconfig.json 排序配置。\n *\n * @remarks\n * 排序只改变字段阅读顺序,不改变编译选项值;由于首次修复 diff 较大,默认关闭。\n *\n * @returns 匹配 `tsconfig.json` 与 `tsconfig.*.json` 的字段排序 Flat Config 数组。\n */\nexport const createTsconfigSortConfigs = () =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/sort/tsconfig\",\n\t\t\tfiles: [...GLOBS_TSCONFIG],\n\t\t\trules: tsconfigJsonSortRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,kCACZ,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,cAAc;CACzB,OAAO;AACR,CACD,CAAC"}
@@ -3,6 +3,7 @@ import { Linter } from "eslint";
3
3
  /**
4
4
  * TypeScript 解析器、推荐预置与类型感知检查选项。
5
5
  *
6
+ * @remarks
6
7
  * 该对象通过 `fastConfig({ typescript: { ... } })` 传入。传入对象会启用 TypeScript
7
8
  * 支持,并检查 `.ts`、`.cts`、`.mts` 与 `.tsx`。相同的类型感知状态还会传递给已启用的
8
9
  * Vue 和 React 配置,使普通 TypeScript 文件、Vue SFC 与 TSX 使用一致的检查级别。
@@ -22,7 +23,7 @@ interface TypeScriptConfigOptions {
22
23
  *
23
24
  * 开启后 Vue 与 React 的 TypeScript 规则也会选择类型感知版本。大型 monorepo 建议评估
24
25
  * lint 启动耗时和内存占用,并确保各工作区 tsconfig 边界明确。
25
- * @default false
26
+ * @defaultValue `false`
26
27
  */
27
28
  typeChecked?: boolean;
28
29
  /**
@@ -32,18 +33,28 @@ interface TypeScriptConfigOptions {
32
33
  * `eslint.config.*` 调用栈推断;复杂 monorepo、共享配置包装层或从其他目录启动 ESLint
33
34
  * 时,建议传入配置文件所在目录的绝对路径,例如 `import.meta.dirname`,避免发现错误的
34
35
  * tsconfig 或跨越预期的项目边界。
35
- * @default undefined
36
+ * @defaultValue `undefined`
36
37
  */
37
38
  tsconfigRootDir?: string;
38
39
  }
39
40
  /**
40
41
  * 返回 typescript-eslint 推荐预置。
41
42
  *
43
+ * @remarks
42
44
  * Vue SFC 需要移除上游仅匹配 `.ts` 的文件范围,否则这些关闭核心规则的配置会与
43
45
  * `.vue` 外层范围形成不可能命中的 AND 条件。
46
+ *
47
+ * @param typeChecked - 是否选择依赖完整类型信息的推荐与风格预置。
48
+ * @param removeFileScopes - 是否从每个上游预置中移除 `files` 范围。
49
+ * @returns 新的预置数组;移除范围时会复制各配置对象,不修改 typescript-eslint 的导出。
44
50
  */
45
51
  declare const getTypeScriptPresetConfigs: (typeChecked: boolean, removeFileScopes?: boolean) => Linter.Config[];
46
- /** 创建启用 Project Service 时需要的解析器选项。 */
52
+ /**
53
+ * 创建 TypeScript 解析器的 Project Service 选项。
54
+ *
55
+ * @param options - 类型感知开关及可选的 tsconfig 查找根目录。
56
+ * @returns 未启用类型感知时返回空对象;启用时返回 `projectService` 及可选的 `tsconfigRootDir`。
57
+ */
47
58
  declare const createTypeScriptParserOptions: ({ typeChecked, tsconfigRootDir }?: TypeScriptConfigOptions) => {
48
59
  tsconfigRootDir?: string | undefined;
49
60
  projectService?: boolean | undefined;
@@ -51,8 +62,13 @@ declare const createTypeScriptParserOptions: ({ typeChecked, tsconfigRootDir }?:
51
62
  /**
52
63
  * 创建 TypeScript 配置。
53
64
  *
65
+ * @remarks
54
66
  * 默认采用无需类型信息的 recommended + stylistic 预置;`typeChecked: true` 会切换为
55
67
  * 对应的类型感知预置并启动 Project Service。
68
+ *
69
+ * @param options - TypeScript 类型感知与 tsconfig 根目录选项。
70
+ * @param files - 应用 TypeScript 配置的 ESLint glob 列表。
71
+ * @returns 包含 TypeScript 预置、解析器选项与本地规则的 Flat Config 数组。
56
72
  */
57
73
  declare const createTypeScriptConfigs: (options?: TypeScriptConfigOptions, files?: readonly string[]) => import("eslint/config").ConfigObject[];
58
74
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.d.mts","names":[],"sources":["../../src/configs/typescript.ts"],"mappings":";;;;;;;;;;;;;UAmBiB;;;;;;;;;;;;;EAahB;;;;;;;;;;EAUA;;;;;;;;cASY,6BAA8B,sBAAsB,+BAA2B,OAAO;;cAetF,kCAAiC,aAAA,oBAA0C;;;;;;;;;;cAW3E,0BAA2B,UAAS,yBAA8B,sDAA2C"}
1
+ {"version":3,"file":"typescript.d.mts","names":[],"sources":["../../src/configs/typescript.ts"],"mappings":";;;;;;;;;;;;;;UAoBiB;;;;;;;;;;;;;EAahB;;;;;;;;;;EAUA;;;;;;;;;;;;;cAcY,6BAA8B,sBAAsB,+BAA2B,OAAO;;;;;;;cAoBtF,kCAAiC,aAAA,oBAA0C;;;;;;;;;;;;;;;cAgB3E,0BAA2B,UAAS,yBAA8B,sDAA2C"}
@@ -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"}