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