@fast-china/eslint-config 2.1.8 → 2.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 2.1.9 - 2026-09-14
10
+
11
+ ### Changed
12
+
13
+ - Disabled `@typescript-eslint/switch-exhaustiveness-check` for Vue single-file components while retaining the error-level check for regular TypeScript and TSX files.
14
+
9
15
  ## 2.1.8 - 2026-09-12
10
16
 
11
17
  ### Added
package/README.md CHANGED
@@ -36,8 +36,17 @@ pnpm add -D eslint typescript @fast-china/eslint-config
36
36
 
37
37
  ```js
38
38
  import { vueConfig } from "@fast-china/eslint-config";
39
+ import { defineConfig } from "eslint/config";
39
40
 
40
- export default vueConfig;
41
+ export default defineConfig([
42
+ ...vueConfig,
43
+ {
44
+ name: "project/custom",
45
+ rules: {
46
+ "no-console": "warn",
47
+ },
48
+ },
49
+ ]);
41
50
  ```
42
51
 
43
52
  This entry covers JavaScript, type-aware TypeScript, Vue SFCs, and standalone `.jsx`/`.tsx` components used by Vue projects. Vue JSX/TSX keeps checks for explicit emits, duplicate keys, readonly props, reactivity loss, and reserved component names without inheriting template-only kebab-case, attribute-order, or `v-text`/`v-html` rules. The entry also includes JSON, Import, RegExp, `.gitignore`, and Prettier compatibility without loading UniApp capabilities.
@@ -46,8 +55,18 @@ This entry covers JavaScript, type-aware TypeScript, Vue SFCs, and standalone `.
46
55
 
47
56
  ```js
48
57
  import { uniAppConfig } from "@fast-china/eslint-config";
58
+ import { defineConfig } from "eslint/config";
49
59
 
50
- export default uniAppConfig;
60
+ export default defineConfig([
61
+ ...uniAppConfig,
62
+ {
63
+ name: "project/custom",
64
+ ignores: ["src/generated/**"],
65
+ rules: {
66
+ "no-console": "warn",
67
+ },
68
+ },
69
+ ]);
51
70
  ```
52
71
 
53
72
  The UniApp entry adds `.nvue`, `uni`, `uniCloud`, page APIs, conditional-platform globals, the `unpackage` ignore, and comment handling for `pages.json` and `manifest.json`.
@@ -60,10 +79,12 @@ The root entry provides explicit named configurations and factories. Use a facto
60
79
 
61
80
  ```js
62
81
  import { createVueProjectConfigs, defineRules } from "@fast-china/eslint-config";
82
+ import { defineConfig } from "eslint/config";
63
83
 
64
- export default createVueProjectConfigs(
65
- { environment: "universal" },
84
+ export default defineConfig([
85
+ ...createVueProjectConfigs({ environment: "universal" }),
66
86
  {
87
+ name: "project/custom",
67
88
  ignores: ["public/vendor/**"],
68
89
  languageOptions: {
69
90
  globals: {
@@ -73,8 +94,8 @@ export default createVueProjectConfigs(
73
94
  rules: defineRules({
74
95
  "no-console": "warn",
75
96
  }),
76
- }
77
- );
97
+ },
98
+ ]);
78
99
  ```
79
100
 
80
101
  Available factories:
@@ -122,7 +143,14 @@ import { createBaseConfigs } from "@fast-china/eslint-config";
122
143
  import { createReactConfigs } from "@fast-china/eslint-config/configs";
123
144
  import { defineConfig } from "eslint/config";
124
145
 
125
- export default defineConfig([...createBaseConfigs(), ...createReactConfigs()]);
146
+ export default defineConfig([
147
+ ...createBaseConfigs(),
148
+ ...createReactConfigs(),
149
+ {
150
+ name: "project/custom",
151
+ rules: { "no-console": "warn" },
152
+ },
153
+ ]);
126
154
  ```
127
155
 
128
156
  Angular composes `createAngularConfigs()` in the same way. The base configuration loads neither Vue nor UniApp.
@@ -136,7 +164,14 @@ import { createBaseConfigs } from "@fast-china/eslint-config";
136
164
  import { createMarkdownConfigs } from "@fast-china/eslint-config/configs";
137
165
  import { defineConfig } from "eslint/config";
138
166
 
139
- export default defineConfig([...createBaseConfigs({ environment: "node" }), ...createMarkdownConfigs()]);
167
+ export default defineConfig([
168
+ ...createBaseConfigs({ environment: "node" }),
169
+ ...createMarkdownConfigs(),
170
+ {
171
+ name: "project/custom",
172
+ rules: { "no-console": "warn" },
173
+ },
174
+ ]);
140
175
  ```
141
176
 
142
177
  `createBaseConfigs()`, `vueConfig`, and `uniAppConfig` all enable `package.json` and `tsconfig*.json` sorting by default. Package sorting does not enter conditional `exports` objects whose order has runtime meaning.
package/README.zh.md CHANGED
@@ -36,8 +36,17 @@ pnpm add -D eslint typescript @fast-china/eslint-config
36
36
 
37
37
  ```js
38
38
  import { vueConfig } from "@fast-china/eslint-config";
39
+ import { defineConfig } from "eslint/config";
39
40
 
40
- export default vueConfig;
41
+ export default defineConfig([
42
+ ...vueConfig,
43
+ {
44
+ name: "project/custom",
45
+ rules: {
46
+ "no-console": "warn",
47
+ },
48
+ },
49
+ ]);
41
50
  ```
42
51
 
43
52
  该入口处理 JavaScript、类型感知 TypeScript、Vue SFC,以及 Vue 项目常用的独立 `.jsx`/`.tsx` 组件文件;Vue JSX/TSX 继续检查显式 emits、重复键、只读 props、响应性丢失和保留组件名,但不会套用模板专属的 kebab-case、模板属性排序或 `v-text`/`v-html` 规则。配置同时包含 JSON、Import、RegExp、`.gitignore` 和 Prettier 兼容规则,但不包含任何 UniApp 能力。
@@ -46,8 +55,18 @@ export default vueConfig;
46
55
 
47
56
  ```js
48
57
  import { uniAppConfig } from "@fast-china/eslint-config";
58
+ import { defineConfig } from "eslint/config";
49
59
 
50
- export default uniAppConfig;
60
+ export default defineConfig([
61
+ ...uniAppConfig,
62
+ {
63
+ name: "project/custom",
64
+ ignores: ["src/generated/**"],
65
+ rules: {
66
+ "no-console": "warn",
67
+ },
68
+ },
69
+ ]);
51
70
  ```
52
71
 
53
72
  UniApp 入口在 Vue 完整能力之外增加 `.nvue`、`uni`、`uniCloud`、页面 API、条件编译平台 globals、`unpackage` 忽略,以及 `pages.json`、`manifest.json` 注释适配。
@@ -60,10 +79,12 @@ ESLint 不执行 `#ifdef`/`#endif`,因此只能识别平台对象,不能验
60
79
 
61
80
  ```js
62
81
  import { createVueProjectConfigs, defineRules } from "@fast-china/eslint-config";
82
+ import { defineConfig } from "eslint/config";
63
83
 
64
- export default createVueProjectConfigs(
65
- { environment: "universal" },
84
+ export default defineConfig([
85
+ ...createVueProjectConfigs({ environment: "universal" }),
66
86
  {
87
+ name: "project/custom",
67
88
  ignores: ["public/vendor/**"],
68
89
  languageOptions: {
69
90
  globals: {
@@ -73,8 +94,8 @@ export default createVueProjectConfigs(
73
94
  rules: defineRules({
74
95
  "no-console": "warn",
75
96
  }),
76
- }
77
- );
97
+ },
98
+ ]);
78
99
  ```
79
100
 
80
101
  可用工厂:
@@ -122,7 +143,14 @@ import { createBaseConfigs } from "@fast-china/eslint-config";
122
143
  import { createReactConfigs } from "@fast-china/eslint-config/configs";
123
144
  import { defineConfig } from "eslint/config";
124
145
 
125
- export default defineConfig([...createBaseConfigs(), ...createReactConfigs()]);
146
+ export default defineConfig([
147
+ ...createBaseConfigs(),
148
+ ...createReactConfigs(),
149
+ {
150
+ name: "project/custom",
151
+ rules: { "no-console": "warn" },
152
+ },
153
+ ]);
126
154
  ```
127
155
 
128
156
  Angular 同理组合 `createAngularConfigs()`。基础配置不会加载 Vue 或 UniApp。
@@ -136,7 +164,14 @@ import { createBaseConfigs } from "@fast-china/eslint-config";
136
164
  import { createMarkdownConfigs } from "@fast-china/eslint-config/configs";
137
165
  import { defineConfig } from "eslint/config";
138
166
 
139
- export default defineConfig([...createBaseConfigs({ environment: "node" }), ...createMarkdownConfigs()]);
167
+ export default defineConfig([
168
+ ...createBaseConfigs({ environment: "node" }),
169
+ ...createMarkdownConfigs(),
170
+ {
171
+ name: "project/custom",
172
+ rules: { "no-console": "warn" },
173
+ },
174
+ ]);
140
175
  ```
141
176
 
142
177
  `createBaseConfigs()`、`vueConfig` 和 `uniAppConfig` 都默认启用 `package.json` 与 `tsconfig*.json` 排序。`package.json` 排序不会进入顺序具有运行时语义的条件 `exports` 对象。
@@ -39,6 +39,8 @@ const createVueConfigs = (files = [GLOB_VUE], extraFileExtensions = [".vue"]) =>
39
39
  ...javascriptRules,
40
40
  ...typescriptRules,
41
41
  ...typescriptTypeCheckedRules,
42
+ /** Vue SFC 允许按模板与运行时兜底处理未穷尽的联合类型或枚举。 */
43
+ "@typescript-eslint/switch-exhaustiveness-check": "off",
42
44
  /** SFC 以模板上下文和快速迭代为主,不强制补写函数返回类型。 */
43
45
  "@typescript-eslint/explicit-function-return-type": "off",
44
46
  /** SFC 的导出宏由 Vue 编译器建立契约,不强制补写普通模块边界类型。 */
@@ -1 +1 @@
1
- {"version":3,"file":"vue.mjs","names":[],"sources":["../../src/configs/vue.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginVue from \"eslint-plugin-vue\";\nimport tseslint from \"typescript-eslint\";\nimport vueEslintParser from \"vue-eslint-parser\";\nimport { GLOB_JSX, GLOB_TSX, GLOB_VUE } from \"../constants\";\nimport { javascriptRules, typescriptRules, typescriptTypeCheckedRules, vueRules, vueScriptRules } from \"../rules\";\nimport { createTypeScriptParserOptions, getTypeScriptPresetConfigs } from \"./typescript\";\n\n/**\n * 创建 Vue 3 单文件组件配置。\n *\n * @remarks\n * Vue 模板解析器通过 `parserOptions.parser` 委托给 typescript-eslint,统一使用类型感知检查。\n * UniApp 项目可传入 `.nvue` 文件范围及对应扩展名;普通 Vue 项目默认只处理 `.vue`。\n *\n * @param files - 应用 Vue 解析器与规则的单文件组件 glob。\n * @param extraFileExtensions - 与同一项目组合中的 TypeScript 配置保持一致的额外扩展名。\n * @returns 包含 Vue 模板、脚本解析器、推荐预置与本地规则的 Flat Config 数组。\n */\nexport const createVueConfigs = (\n\tfiles: readonly string[] = [GLOB_VUE],\n\textraFileExtensions: readonly string[] = [\".vue\"]\n): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/vue/type-checked\",\n\t\t\tfiles: [...files],\n\t\t\textends: [...getTypeScriptPresetConfigs(), ...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\tparser: tseslint.parser,\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(extraFileExtensions),\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: {\n\t\t\t\t/** Vue SFC 显式接管 TypeScript 预置中的核心规则替换,再由本地策略做最终覆写。 */\n\t\t\t\t...(tseslint.configs.recommendedTypeChecked[1]?.rules ?? {}),\n\t\t\t\t...javascriptRules,\n\t\t\t\t...typescriptRules,\n\t\t\t\t...typescriptTypeCheckedRules,\n\t\t\t\t/** SFC 以模板上下文和快速迭代为主,不强制补写函数返回类型。 */\n\t\t\t\t\"@typescript-eslint/explicit-function-return-type\": \"off\",\n\t\t\t\t/** SFC 的导出宏由 Vue 编译器建立契约,不强制补写普通模块边界类型。 */\n\t\t\t\t\"@typescript-eslint/explicit-module-boundary-types\": \"off\",\n\t\t\t\t/** Vue 模板事件由框架接管异步结果,允许 Promise 返回的事件处理函数;其他 Promise 误用继续检查。 */\n\t\t\t\t\"@typescript-eslint/no-misused-promises\": [\"error\", { checksVoidReturn: { attributes: false } }],\n\t\t\t\t/** `defineEmits` 校验器和框架回调的形参可只声明契约;普通未使用变量和导入仍然报错。 */\n\t\t\t\t\"@typescript-eslint/no-unused-vars\": [\"error\", { args: \"none\", caughtErrors: \"none\", ignoreRestSiblings: true }],\n\t\t\t\t...vueRules,\n\t\t\t},\n\t\t},\n\t]);\n\n/**\n * 创建 Vue JSX 与 TSX 组件脚本语义配置。\n *\n * @remarks\n * `vue-eslint-parser` 会为独立 JSX/TSX 建立 eslint-plugin-vue 所需的组件脚本访问器;\n * TSX 继续委托给 typescript-eslint 并复用项目的 Project Service。这里只加载适用于\n * `defineComponent()`、Options API 与 `setup()` 的脚本规则,不把 kebab-case、模板属性\n * 排序或 `v-text`/`v-html` 等模板节点规则套到 JSX 属性上。\n *\n * @param extraFileExtensions - 与同一项目组合中的 TypeScript 和 SFC 配置保持一致的额外扩展名。\n * @returns 分别处理独立 `.jsx` 与 `.tsx` Vue 组件的 Flat Config 数组。\n */\nexport const createVueJsxConfigs = (extraFileExtensions: readonly string[] = [\".vue\"]): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/vue/jsx\",\n\t\t\tfiles: [GLOB_JSX],\n\t\t\tplugins: {\n\t\t\t\tvue: eslintPluginVue,\n\t\t\t},\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\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},\n\t\t\t},\n\t\t\trules: vueScriptRules,\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/vue/tsx-type-checked\",\n\t\t\tfiles: [GLOB_TSX],\n\t\t\tplugins: {\n\t\t\t\tvue: eslintPluginVue,\n\t\t\t},\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\tparser: tseslint.parser,\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(extraFileExtensions),\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: vueScriptRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBA,MAAa,oBACZ,QAA2B,CAAC,QAAQ,GACpC,sBAAyC,CAAC,MAAM,MAEhD,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,GAAG,2BAA2B,GAAG,GAAG,gBAAgB,QAAQ,mBAAmB;CACzF,iBAAiB;EAChB,aAAa;EACb,QAAQ;EACR,eAAe;GACd,QAAQ,SAAS;GACjB,cAAc,EACb,KAAK,KACN;GACA,YAAY;GACZ,GAAG,8BAA8B,mBAAmB;EACrD;CACD;CACA,OAAO;;EAEN,GAAI,SAAS,QAAQ,uBAAuB,EAAE,EAAE,SAAS,CAAC;EAC1D,GAAG;EACH,GAAG;EACH,GAAG;;EAEH,oDAAoD;;EAEpD,qDAAqD;;EAErD,0CAA0C,CAAC,SAAS,EAAE,kBAAkB,EAAE,YAAY,MAAM,EAAE,CAAC;;EAE/F,qCAAqC,CAAC,SAAS;GAAE,MAAM;GAAQ,cAAc;GAAQ,oBAAoB;EAAK,CAAC;EAC/G,GAAG;CACJ;AACD,CACD,CAAC;;;;;;;;;;;;;AAcF,MAAa,uBAAuB,sBAAyC,CAAC,MAAM,MACnF,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,QAAQ;CAChB,SAAS,EACR,KAAK,gBACN;CACA,iBAAiB;EAChB,aAAa;EACb,QAAQ;EACR,eAAe;GACd,cAAc,EACb,KAAK,KACN;GACA,YAAY;EACb;CACD;CACA,OAAO;AACR,GACA;CACC,MAAM;CACN,OAAO,CAAC,QAAQ;CAChB,SAAS,EACR,KAAK,gBACN;CACA,iBAAiB;EAChB,aAAa;EACb,QAAQ;EACR,eAAe;GACd,QAAQ,SAAS;GACjB,cAAc,EACb,KAAK,KACN;GACA,YAAY;GACZ,GAAG,8BAA8B,mBAAmB;EACrD;CACD;CACA,OAAO;AACR,CACD,CAAC"}
1
+ {"version":3,"file":"vue.mjs","names":[],"sources":["../../src/configs/vue.ts"],"sourcesContent":["import { defineConfig } from \"eslint/config\";\nimport eslintPluginVue from \"eslint-plugin-vue\";\nimport tseslint from \"typescript-eslint\";\nimport vueEslintParser from \"vue-eslint-parser\";\nimport { GLOB_JSX, GLOB_TSX, GLOB_VUE } from \"../constants\";\nimport { javascriptRules, typescriptRules, typescriptTypeCheckedRules, vueRules, vueScriptRules } from \"../rules\";\nimport { createTypeScriptParserOptions, getTypeScriptPresetConfigs } from \"./typescript\";\n\n/**\n * 创建 Vue 3 单文件组件配置。\n *\n * @remarks\n * Vue 模板解析器通过 `parserOptions.parser` 委托给 typescript-eslint,统一使用类型感知检查。\n * UniApp 项目可传入 `.nvue` 文件范围及对应扩展名;普通 Vue 项目默认只处理 `.vue`。\n *\n * @param files - 应用 Vue 解析器与规则的单文件组件 glob。\n * @param extraFileExtensions - 与同一项目组合中的 TypeScript 配置保持一致的额外扩展名。\n * @returns 包含 Vue 模板、脚本解析器、推荐预置与本地规则的 Flat Config 数组。\n */\nexport const createVueConfigs = (\n\tfiles: readonly string[] = [GLOB_VUE],\n\textraFileExtensions: readonly string[] = [\".vue\"]\n): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/vue/type-checked\",\n\t\t\tfiles: [...files],\n\t\t\textends: [...getTypeScriptPresetConfigs(), ...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\tparser: tseslint.parser,\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(extraFileExtensions),\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: {\n\t\t\t\t/** Vue SFC 显式接管 TypeScript 预置中的核心规则替换,再由本地策略做最终覆写。 */\n\t\t\t\t...(tseslint.configs.recommendedTypeChecked[1]?.rules ?? {}),\n\t\t\t\t...javascriptRules,\n\t\t\t\t...typescriptRules,\n\t\t\t\t...typescriptTypeCheckedRules,\n\t\t\t\t/** Vue SFC 允许按模板与运行时兜底处理未穷尽的联合类型或枚举。 */\n\t\t\t\t\"@typescript-eslint/switch-exhaustiveness-check\": \"off\",\n\t\t\t\t/** SFC 以模板上下文和快速迭代为主,不强制补写函数返回类型。 */\n\t\t\t\t\"@typescript-eslint/explicit-function-return-type\": \"off\",\n\t\t\t\t/** SFC 的导出宏由 Vue 编译器建立契约,不强制补写普通模块边界类型。 */\n\t\t\t\t\"@typescript-eslint/explicit-module-boundary-types\": \"off\",\n\t\t\t\t/** Vue 模板事件由框架接管异步结果,允许 Promise 返回的事件处理函数;其他 Promise 误用继续检查。 */\n\t\t\t\t\"@typescript-eslint/no-misused-promises\": [\"error\", { checksVoidReturn: { attributes: false } }],\n\t\t\t\t/** `defineEmits` 校验器和框架回调的形参可只声明契约;普通未使用变量和导入仍然报错。 */\n\t\t\t\t\"@typescript-eslint/no-unused-vars\": [\"error\", { args: \"none\", caughtErrors: \"none\", ignoreRestSiblings: true }],\n\t\t\t\t...vueRules,\n\t\t\t},\n\t\t},\n\t]);\n\n/**\n * 创建 Vue JSX 与 TSX 组件脚本语义配置。\n *\n * @remarks\n * `vue-eslint-parser` 会为独立 JSX/TSX 建立 eslint-plugin-vue 所需的组件脚本访问器;\n * TSX 继续委托给 typescript-eslint 并复用项目的 Project Service。这里只加载适用于\n * `defineComponent()`、Options API 与 `setup()` 的脚本规则,不把 kebab-case、模板属性\n * 排序或 `v-text`/`v-html` 等模板节点规则套到 JSX 属性上。\n *\n * @param extraFileExtensions - 与同一项目组合中的 TypeScript 和 SFC 配置保持一致的额外扩展名。\n * @returns 分别处理独立 `.jsx` 与 `.tsx` Vue 组件的 Flat Config 数组。\n */\nexport const createVueJsxConfigs = (extraFileExtensions: readonly string[] = [\".vue\"]): ReturnType<typeof defineConfig> =>\n\tdefineConfig([\n\t\t{\n\t\t\tname: \"@fast-china/vue/jsx\",\n\t\t\tfiles: [GLOB_JSX],\n\t\t\tplugins: {\n\t\t\t\tvue: eslintPluginVue,\n\t\t\t},\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\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},\n\t\t\t},\n\t\t\trules: vueScriptRules,\n\t\t},\n\t\t{\n\t\t\tname: \"@fast-china/vue/tsx-type-checked\",\n\t\t\tfiles: [GLOB_TSX],\n\t\t\tplugins: {\n\t\t\t\tvue: eslintPluginVue,\n\t\t\t},\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\tparser: tseslint.parser,\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(extraFileExtensions),\n\t\t\t\t},\n\t\t\t},\n\t\t\trules: vueScriptRules,\n\t\t},\n\t]);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBA,MAAa,oBACZ,QAA2B,CAAC,QAAQ,GACpC,sBAAyC,CAAC,MAAM,MAEhD,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,GAAG,KAAK;CAChB,SAAS,CAAC,GAAG,2BAA2B,GAAG,GAAG,gBAAgB,QAAQ,mBAAmB;CACzF,iBAAiB;EAChB,aAAa;EACb,QAAQ;EACR,eAAe;GACd,QAAQ,SAAS;GACjB,cAAc,EACb,KAAK,KACN;GACA,YAAY;GACZ,GAAG,8BAA8B,mBAAmB;EACrD;CACD;CACA,OAAO;;EAEN,GAAI,SAAS,QAAQ,uBAAuB,EAAE,EAAE,SAAS,CAAC;EAC1D,GAAG;EACH,GAAG;EACH,GAAG;;EAEH,kDAAkD;;EAElD,oDAAoD;;EAEpD,qDAAqD;;EAErD,0CAA0C,CAAC,SAAS,EAAE,kBAAkB,EAAE,YAAY,MAAM,EAAE,CAAC;;EAE/F,qCAAqC,CAAC,SAAS;GAAE,MAAM;GAAQ,cAAc;GAAQ,oBAAoB;EAAK,CAAC;EAC/G,GAAG;CACJ;AACD,CACD,CAAC;;;;;;;;;;;;;AAcF,MAAa,uBAAuB,sBAAyC,CAAC,MAAM,MACnF,aAAa,CACZ;CACC,MAAM;CACN,OAAO,CAAC,QAAQ;CAChB,SAAS,EACR,KAAK,gBACN;CACA,iBAAiB;EAChB,aAAa;EACb,QAAQ;EACR,eAAe;GACd,cAAc,EACb,KAAK,KACN;GACA,YAAY;EACb;CACD;CACA,OAAO;AACR,GACA;CACC,MAAM;CACN,OAAO,CAAC,QAAQ;CAChB,SAAS,EACR,KAAK,gBACN;CACA,iBAAiB;EAChB,aAAa;EACb,QAAQ;EACR,eAAe;GACd,QAAQ,SAAS;GACjB,cAAc,EACb,KAAK,KACN;GACA,YAAY;GACZ,GAAG,8BAA8B,mBAAmB;EACrD;CACD;CACA,OAAO;AACR,CACD,CAAC"}
@@ -1,8 +1,8 @@
1
1
  # 工程质量审查报告
2
2
 
3
- 审查日期:2026-09-12
3
+ 审查日期:2026-09-14
4
4
 
5
- 审查对象:`@fast-china/eslint-config` 2.1.7 工作区
5
+ 审查对象:`@fast-china/eslint-config` 2.1.9 工作区
6
6
 
7
7
  ## 结论
8
8
 
@@ -1134,9 +1134,10 @@ const callback: () => void = () => { log(); };
1134
1134
 
1135
1135
  ### `@typescript-eslint/switch-exhaustiveness-check`
1136
1136
 
1137
- 联合类型和枚举新增成员时,`switch` 必须覆盖全部分支或显式提供 `default`。
1137
+ Vue SFC 允许按模板与运行时兜底处理未穷尽的联合类型或枚举。
1138
1138
 
1139
- - 生效级别与范围:error: TypeScript 基础、框架无关 TSX、Vue SFC、Vue TSX、UniApp NVue、UniApp TSX、React TSX、Angular TypeScript
1139
+ - 生效级别与范围:error: TypeScript 基础、框架无关 TSX、Vue TSX、UniApp TSX、React TSX、Angular TypeScript
1140
+ - 关闭范围:Vue SFC、UniApp NVue
1140
1141
  - 自动修复:不支持或上游未声明
1141
1142
  - 规则来源:[官方文档](https://typescript-eslint.io/rules/switch-exhaustiveness-check)
1142
1143
  - 常见报告:`Add branches for missing cases.`;`The switch statement is exhaustive, so the default case is unnecessary.`;`Switch is not exhaustive. Cases not matched: {{missingBranches}}`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fast-china/eslint-config",
3
- "version": "2.1.8",
3
+ "version": "2.1.9",
4
4
  "description": "Practical, typed ESLint Flat Config for Vue 3, UniApp, React, Angular, Vite, TypeScript, JavaScript, and Node.js.",
5
5
  "type": "module",
6
6
  "keywords": [