@fast-china/eslint-config 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +106 -80
- package/README.zh.md +107 -81
- package/dist/index.d.ts +110 -236
- package/dist/index.js +241 -218
- package/dist/index.js.map +1 -1
- package/dist/rules/index.d.ts +41 -36
- package/dist/rules/index.js +62 -48
- package/dist/rules/index.js.map +1 -1
- package/docs/engineering-audit.zh.md +73 -82
- package/docs/rules-risk.md +33 -44
- package/docs/rules-risk.zh.md +34 -45
- package/package.json +5 -4
package/dist/index.js
CHANGED
|
@@ -1,80 +1,43 @@
|
|
|
1
|
-
import { defineConfig } from 'eslint/config';
|
|
2
|
-
import eslintPluginJsonc from 'eslint-plugin-jsonc';
|
|
1
|
+
import { defineConfig, globalIgnores } from 'eslint/config';
|
|
3
2
|
import globals from 'globals';
|
|
4
3
|
import eslintConfigFlatGitignore from 'eslint-config-flat-gitignore';
|
|
5
4
|
import eslintPluginImportX from 'eslint-plugin-import-x';
|
|
6
5
|
import eslint from '@eslint/js';
|
|
6
|
+
import eslintPluginJsonc from 'eslint-plugin-jsonc';
|
|
7
7
|
import eslintMarkdown from '@eslint/markdown';
|
|
8
8
|
import eslintConfigPrettierFlat from 'eslint-config-prettier/flat';
|
|
9
9
|
import eslintPluginRegexp from 'eslint-plugin-regexp';
|
|
10
|
-
import
|
|
10
|
+
import tseslint from 'typescript-eslint';
|
|
11
11
|
import eslintPluginVue from 'eslint-plugin-vue';
|
|
12
12
|
import vueEslintParser from 'vue-eslint-parser';
|
|
13
13
|
|
|
14
|
-
// src/
|
|
14
|
+
// src/define-rules.ts
|
|
15
|
+
var defineRules = (rules) => rules;
|
|
15
16
|
|
|
16
17
|
// src/constants/index.ts
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var CONST_LOCKFILE = ["**/package-lock.json", "**/yarn.lock", "**/pnpm-lock.yaml", "**/bun.lock", "**/bun.lockb", "**/deno.lock"];
|
|
31
|
-
var CONST_PUBLIC = "**/public";
|
|
32
|
-
var CONST_TSCONFIG = ["**/tsconfig.json", "**/tsconfig.*.json"];
|
|
33
|
-
var GLOB_JAVASCRIPT = [CONST_JS, CONST_JSX];
|
|
34
|
-
var GLOB_TYPESCRIPT = [CONST_TS, CONST_TSX];
|
|
35
|
-
var GLOB_CODE = [...GLOB_JAVASCRIPT, ...GLOB_TYPESCRIPT, CONST_VUE];
|
|
36
|
-
var GLOB_NODE = [
|
|
37
|
-
"**/*.{config,setup}.{js,cjs,mjs,ts,cts,mts}",
|
|
38
|
-
"**/{scripts,bin}/**/*.{js,cjs,mjs,ts,cts,mts}",
|
|
39
|
-
"**/{test,tests}/**/*.{js,cjs,mjs,ts,cts,mts}",
|
|
18
|
+
var GLOBS_JAVASCRIPT = ["**/*.{js,cjs,mjs,jsx}"];
|
|
19
|
+
var GLOBS_TYPESCRIPT = ["**/*.{ts,cts,mts,tsx}"];
|
|
20
|
+
var GLOB_VUE = "**/*.vue";
|
|
21
|
+
var GLOB_JSON = "**/*.json";
|
|
22
|
+
var GLOB_JSONC = "**/*.jsonc";
|
|
23
|
+
var GLOB_JSON5 = "**/*.json5";
|
|
24
|
+
var GLOB_MARKDOWN = "**/*.md";
|
|
25
|
+
var GLOBS_CODE = [...GLOBS_JAVASCRIPT, ...GLOBS_TYPESCRIPT, GLOB_VUE];
|
|
26
|
+
var GLOBS_NODE_TOOLING = [
|
|
27
|
+
"**/*.{config,setup}.{js,cjs,mjs,jsx,ts,cts,mts,tsx}",
|
|
28
|
+
"**/{scripts,bin}/**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}",
|
|
29
|
+
"**/{test,tests}/**/*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}",
|
|
30
|
+
"**/*.{test,spec}.{js,cjs,mjs,jsx,ts,cts,mts,tsx}",
|
|
40
31
|
"**/cli.{js,cjs,mjs,ts,cts,mts}"
|
|
41
32
|
];
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
var jsonConfigs = defineConfig([
|
|
45
|
-
{
|
|
46
|
-
name: "@fast-china/json/strict",
|
|
47
|
-
files: [CONST_JSON],
|
|
48
|
-
extends: [eslintPluginJsonc.configs["flat/recommended-with-json"]]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
name: "@fast-china/json/jsonc",
|
|
52
|
-
files: [CONST_JSONC],
|
|
53
|
-
extends: [eslintPluginJsonc.configs["flat/recommended-with-jsonc"]]
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: "@fast-china/json/json5",
|
|
57
|
-
files: [CONST_JSON5],
|
|
58
|
-
extends: [eslintPluginJsonc.configs["flat/recommended-with-json5"]]
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: "@fast-china/json/settings",
|
|
62
|
-
files: ["**/.vscode/settings.json"],
|
|
63
|
-
rules: {
|
|
64
|
-
// 允许注释
|
|
65
|
-
"jsonc/no-comments": "off"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
]);
|
|
69
|
-
|
|
70
|
-
// src/define-rules.ts
|
|
71
|
-
var defineRules = (rules) => rules;
|
|
33
|
+
var GLOBS_TSCONFIG = ["**/tsconfig.json", "**/tsconfig.*.json"];
|
|
34
|
+
var GLOBS_LOCKFILES = ["**/package-lock.json", "**/yarn.lock", "**/pnpm-lock.yaml", "**/bun.lock", "**/bun.lockb", "**/deno.lock"];
|
|
72
35
|
|
|
73
36
|
// src/rules/common.ts
|
|
74
37
|
var commonRules = {
|
|
75
38
|
// 要求数组回调在所有可到达分支返回值,避免 map/filter 等调用静默产生 undefined。
|
|
76
39
|
"array-callback-return": "error",
|
|
77
|
-
//
|
|
40
|
+
// 浏览器弹窗通常不适合生产代码;使用 warn 允许原型调试,同时确保发布前能够被发现。
|
|
78
41
|
"no-alert": "warn",
|
|
79
42
|
// switch 的 case 不创建词法作用域;要求用花括号包裹声明,避免跨 case 冲突。
|
|
80
43
|
"no-case-declarations": "error",
|
|
@@ -181,9 +144,9 @@ var javascriptRules = {
|
|
|
181
144
|
checkLoops: false
|
|
182
145
|
}
|
|
183
146
|
],
|
|
184
|
-
// [高影响]
|
|
147
|
+
// [高影响] 禁止标签语句;包含多层循环 labeled break/continue 的代码需先重构控制流。
|
|
185
148
|
"no-restricted-syntax": ["error", "LabeledStatement"],
|
|
186
|
-
// [高影响][可自动修复] 使用 let/const 替代 var
|
|
149
|
+
// [高影响][可自动修复] 使用 let/const 替代 var;首次启用需复核循环闭包和声明提升行为。
|
|
187
150
|
"no-var": "error",
|
|
188
151
|
// 禁止无说明的空代码块;允许用于“忽略失败”语义的空 catch。
|
|
189
152
|
"no-empty": [
|
|
@@ -194,7 +157,7 @@ var javascriptRules = {
|
|
|
194
157
|
],
|
|
195
158
|
// 拒绝肉眼难以识别、可能导致解析差异的非常规空白字符。
|
|
196
159
|
"no-irregular-whitespace": "error",
|
|
197
|
-
//
|
|
160
|
+
// 变量和类先声明后使用;函数声明允许提升。warn 保留函数式组合和循环依赖重构空间。
|
|
198
161
|
"no-use-before-define": [
|
|
199
162
|
"warn",
|
|
200
163
|
{
|
|
@@ -211,7 +174,7 @@ var javascriptRules = {
|
|
|
211
174
|
ignoreReadBeforeAssign: true
|
|
212
175
|
}
|
|
213
176
|
],
|
|
214
|
-
// [高影响][可自动修复]
|
|
177
|
+
// [高影响][可自动修复] 优先箭头回调;批量修复后应复核 this/arguments 与函数名栈信息。
|
|
215
178
|
"prefer-arrow-callback": [
|
|
216
179
|
"error",
|
|
217
180
|
{
|
|
@@ -242,9 +205,59 @@ var javascriptRules = {
|
|
|
242
205
|
"no-redeclare": "error"
|
|
243
206
|
};
|
|
244
207
|
|
|
208
|
+
// src/rules/lodash.ts
|
|
209
|
+
var preferLodashUnifiedRules = {
|
|
210
|
+
// [高影响][按需启用] 禁止混用 lodash 与 lodash-es,避免同一项目维护多套等价依赖入口。
|
|
211
|
+
"no-restricted-imports": [
|
|
212
|
+
"error",
|
|
213
|
+
{
|
|
214
|
+
paths: [
|
|
215
|
+
{
|
|
216
|
+
name: "lodash",
|
|
217
|
+
message: 'Use "lodash-unified" consistently instead of "lodash".'
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "lodash-es",
|
|
221
|
+
message: 'Use "lodash-unified" consistently instead of "lodash-es".'
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
patterns: [
|
|
225
|
+
{
|
|
226
|
+
group: ["lodash/*", "lodash-es/*"],
|
|
227
|
+
message: 'Use exports from "lodash-unified" instead of Lodash subpath imports.'
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
]
|
|
232
|
+
};
|
|
233
|
+
var preferLodashRules = {
|
|
234
|
+
// [高影响][按需启用] 禁止混用 lodash-es 与 lodash-unified,保持运行时和类型来源一致。
|
|
235
|
+
"no-restricted-imports": [
|
|
236
|
+
"error",
|
|
237
|
+
{
|
|
238
|
+
paths: [
|
|
239
|
+
{
|
|
240
|
+
name: "lodash-es",
|
|
241
|
+
message: 'Use "lodash" consistently instead of "lodash-es".'
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
name: "lodash-unified",
|
|
245
|
+
message: 'Use "lodash" consistently instead of "lodash-unified".'
|
|
246
|
+
}
|
|
247
|
+
],
|
|
248
|
+
patterns: [
|
|
249
|
+
{
|
|
250
|
+
group: ["lodash-es/*", "lodash-unified/*"],
|
|
251
|
+
message: 'Use "lodash" or a "lodash/*" subpath consistently.'
|
|
252
|
+
}
|
|
253
|
+
]
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
};
|
|
257
|
+
|
|
245
258
|
// src/rules/sort-package.ts
|
|
246
259
|
var packageJsonSortRules = {
|
|
247
|
-
// [高影响][可自动修复] npm 的 files 清单按字母排序;数组顺序不改打包集合,但首次 diff 较大。
|
|
260
|
+
// [高影响][可自动修复][按需启用] npm 的 files 清单按字母排序;数组顺序不改打包集合,但首次 diff 较大。
|
|
248
261
|
"jsonc/sort-array-values": [
|
|
249
262
|
"error",
|
|
250
263
|
{
|
|
@@ -252,7 +265,7 @@ var packageJsonSortRules = {
|
|
|
252
265
|
pathPattern: "^files$"
|
|
253
266
|
}
|
|
254
267
|
],
|
|
255
|
-
// [高影响][可自动修复] 仅排序明确安全的 package.json 区域,不进入 exports 条件对象。
|
|
268
|
+
// [高影响][可自动修复][按需启用] 仅排序明确安全的 package.json 区域,不进入 exports 条件对象。
|
|
256
269
|
"jsonc/sort-keys": [
|
|
257
270
|
"error",
|
|
258
271
|
// 根字段按常见阅读顺序组织,减少不同项目之间的清单噪声。
|
|
@@ -320,7 +333,7 @@ var packageJsonSortRules = {
|
|
|
320
333
|
var tsconfigJsonSortRules = {
|
|
321
334
|
// tsconfig 是 JSONC,注释用于解释不直观的编译器取舍,必须保留。
|
|
322
335
|
"jsonc/no-comments": "off",
|
|
323
|
-
// [高影响][可自动修复] 只调整顶层和 compilerOptions 的键顺序,不改写任何选项值或数组。
|
|
336
|
+
// [高影响][可自动修复][按需启用] 只调整顶层和 compilerOptions 的键顺序,不改写任何选项值或数组。
|
|
324
337
|
"jsonc/sort-keys": [
|
|
325
338
|
"error",
|
|
326
339
|
// 顶层按继承、选项、项目引用和文件范围的阅读顺序排列。
|
|
@@ -452,7 +465,7 @@ var typescriptRules = {
|
|
|
452
465
|
],
|
|
453
466
|
// [默认关闭] 声明文件、全局扩展和部分 SDK 仍需要 namespace。
|
|
454
467
|
"@typescript-eslint/no-namespace": "off",
|
|
455
|
-
// any
|
|
468
|
+
// any 会绕过类型检查,但在第三方边界和渐进式类型完善中有合理用途,因此只警告。
|
|
456
469
|
"@typescript-eslint/no-explicit-any": "warn",
|
|
457
470
|
// [高影响] 默认要求 ESM import;CommonJS、动态加载或工具链互操作代码可能需要按文件关闭。
|
|
458
471
|
"@typescript-eslint/no-require-imports": "error",
|
|
@@ -466,7 +479,7 @@ var typescriptRules = {
|
|
|
466
479
|
],
|
|
467
480
|
// [可自动修复] 删除可由 TypeScript 明确推断的原始值类型标注,减少重复信息。
|
|
468
481
|
"@typescript-eslint/no-inferrable-types": "error",
|
|
469
|
-
//
|
|
482
|
+
// 非空断言可能隐藏空值缺陷;以警告提示逐步消除,避免一次性产生大量阻断错误。
|
|
470
483
|
"@typescript-eslint/no-non-null-assertion": "warn",
|
|
471
484
|
// 可选链之后再做非空断言逻辑矛盾,通常表示边界条件设计有误。
|
|
472
485
|
"@typescript-eslint/no-non-null-asserted-optional-chain": "error",
|
|
@@ -487,7 +500,7 @@ var vueRules = {
|
|
|
487
500
|
"vue/no-v-html": "warn",
|
|
488
501
|
// [默认关闭] TypeScript 类型 props 和 required 声明已能表达可选性,不强制每个可选 prop 提供默认值。
|
|
489
502
|
"vue/require-default-prop": "off",
|
|
490
|
-
// [高影响]
|
|
503
|
+
// [高影响] 组件必须声明对外事件;首次启用时会暴露未建模的公共事件 API。
|
|
491
504
|
"vue/require-explicit-emits": "error",
|
|
492
505
|
// [默认关闭] 允许 App、Layout 等约定俗成的单词组件名。
|
|
493
506
|
"vue/multi-word-component-names": "off",
|
|
@@ -514,22 +527,8 @@ var vueRules = {
|
|
|
514
527
|
]
|
|
515
528
|
};
|
|
516
529
|
|
|
517
|
-
// src/configs/
|
|
518
|
-
var
|
|
519
|
-
{
|
|
520
|
-
name: "@fast-china/sort/package",
|
|
521
|
-
files: ["**/package.json"],
|
|
522
|
-
rules: packageJsonSortRules
|
|
523
|
-
}
|
|
524
|
-
]);
|
|
525
|
-
var tsconfigJsonSortConfigs = defineConfig([
|
|
526
|
-
{
|
|
527
|
-
name: "@fast-china/sort/tsconfig",
|
|
528
|
-
files: CONST_TSCONFIG,
|
|
529
|
-
rules: tsconfigJsonSortRules
|
|
530
|
-
}
|
|
531
|
-
]);
|
|
532
|
-
var createCommonConfigs = (files = GLOB_CODE) => defineConfig([
|
|
530
|
+
// src/configs/common.ts
|
|
531
|
+
var createBaseConfigs = (files = GLOBS_CODE) => defineConfig([
|
|
533
532
|
{
|
|
534
533
|
name: "@fast-china/common",
|
|
535
534
|
files: [...files],
|
|
@@ -539,13 +538,18 @@ var createCommonConfigs = (files = GLOB_CODE) => defineConfig([
|
|
|
539
538
|
rules: commonRules
|
|
540
539
|
}
|
|
541
540
|
]);
|
|
542
|
-
var
|
|
543
|
-
|
|
541
|
+
var createEnvironmentConfigs = ({
|
|
542
|
+
environment = "browser",
|
|
543
|
+
files = GLOBS_CODE,
|
|
544
|
+
nodeFiles = GLOBS_JAVASCRIPT,
|
|
545
|
+
globals: projectGlobals = {}
|
|
546
|
+
} = {}) => {
|
|
544
547
|
const runtimeGlobals = {
|
|
545
548
|
...environment !== "node" ? globals.browser : {},
|
|
546
|
-
...environment !== "browser" ? globals.node : {}
|
|
549
|
+
...environment !== "browser" ? globals.node : {},
|
|
550
|
+
...projectGlobals
|
|
547
551
|
};
|
|
548
|
-
const nodeToolingFiles =
|
|
552
|
+
const nodeToolingFiles = GLOBS_NODE_TOOLING.flatMap((nodeGlob) => nodeFiles.map((fileGlob) => [nodeGlob, fileGlob]));
|
|
549
553
|
return defineConfig([
|
|
550
554
|
{
|
|
551
555
|
name: `@fast-china/globals/${environment}`,
|
|
@@ -566,36 +570,25 @@ var createEnvironmentConfigs = (environment = "browser", files = GLOB_CODE) => {
|
|
|
566
570
|
}
|
|
567
571
|
]);
|
|
568
572
|
};
|
|
569
|
-
var
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
{
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
"**/{coverage,output,temp}/**",
|
|
580
|
-
"**/{.nuxt,.output,.vercel,.nitro}/**",
|
|
581
|
-
"**/{.vitepress/cache,.vite-inspect}/**",
|
|
582
|
-
"**/CHANGELOG*.md",
|
|
583
|
-
"**/*.min.*",
|
|
584
|
-
"**/LICENSE*",
|
|
585
|
-
"**/__snapshots__/**",
|
|
586
|
-
"**/auto-import?(s).d.ts",
|
|
587
|
-
"**/components.d.ts"
|
|
588
|
-
]
|
|
589
|
-
}
|
|
573
|
+
var DEFAULT_IGNORE_PATTERNS = Object.freeze([
|
|
574
|
+
"**/node_modules/**",
|
|
575
|
+
"**/{dist,build,coverage,output,temp,tmp}/**",
|
|
576
|
+
"**/{.cache,.nuxt,.output,.vercel,.nitro}/**",
|
|
577
|
+
"**/{.vitepress/cache,.vite-inspect}/**",
|
|
578
|
+
"**/__snapshots__/**",
|
|
579
|
+
"**/*.min.*",
|
|
580
|
+
"**/auto-import?(s).d.ts",
|
|
581
|
+
"**/components.d.ts",
|
|
582
|
+
...GLOBS_LOCKFILES
|
|
590
583
|
]);
|
|
591
|
-
var
|
|
584
|
+
var createGlobalIgnores = (additionalPatterns = []) => globalIgnores([...DEFAULT_IGNORE_PATTERNS, ...additionalPatterns], "@fast-china/ignores/global");
|
|
585
|
+
var createGitignoreConfigs = () => defineConfig([
|
|
592
586
|
{
|
|
593
587
|
name: "@fast-china/ignores/git",
|
|
594
588
|
...eslintConfigFlatGitignore({ strict: false })
|
|
595
589
|
}
|
|
596
590
|
]);
|
|
597
|
-
var
|
|
598
|
-
var createImportConfigs = (files = GLOB_CODE) => defineConfig([
|
|
591
|
+
var createImportConfigs = (files = GLOBS_CODE) => defineConfig([
|
|
599
592
|
{
|
|
600
593
|
name: "@fast-china/import",
|
|
601
594
|
files: [...files],
|
|
@@ -603,19 +596,16 @@ var createImportConfigs = (files = GLOB_CODE) => defineConfig([
|
|
|
603
596
|
rules: importRules
|
|
604
597
|
}
|
|
605
598
|
]);
|
|
606
|
-
var
|
|
607
|
-
var javascriptConfigs = defineConfig([
|
|
599
|
+
var createJavaScriptConfigs = (files = GLOBS_JAVASCRIPT) => defineConfig([
|
|
608
600
|
{
|
|
609
601
|
name: "@fast-china/javascript",
|
|
610
|
-
files: [...
|
|
611
|
-
// 继承某些已有的规则
|
|
602
|
+
files: [...files],
|
|
612
603
|
extends: [eslint.configs.recommended],
|
|
613
604
|
languageOptions: {
|
|
614
|
-
// 允许使用最新的 ECMAScript 语法特性
|
|
615
605
|
ecmaVersion: "latest",
|
|
616
606
|
parserOptions: {
|
|
617
607
|
ecmaFeatures: {
|
|
618
|
-
//
|
|
608
|
+
// 普通 `.jsx` 文件需要显式开启 JSX 语法解析。
|
|
619
609
|
jsx: true
|
|
620
610
|
}
|
|
621
611
|
}
|
|
@@ -623,164 +613,197 @@ var javascriptConfigs = defineConfig([
|
|
|
623
613
|
rules: javascriptRules
|
|
624
614
|
}
|
|
625
615
|
]);
|
|
626
|
-
var
|
|
616
|
+
var createJsonConfigs = () => defineConfig([
|
|
617
|
+
{
|
|
618
|
+
name: "@fast-china/json/json",
|
|
619
|
+
files: [GLOB_JSON],
|
|
620
|
+
extends: [eslintPluginJsonc.configs["flat/recommended-with-json"]]
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
name: "@fast-china/json/jsonc",
|
|
624
|
+
files: [GLOB_JSONC],
|
|
625
|
+
extends: [eslintPluginJsonc.configs["flat/recommended-with-jsonc"]]
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
name: "@fast-china/json/json5",
|
|
629
|
+
files: [GLOB_JSON5],
|
|
630
|
+
extends: [eslintPluginJsonc.configs["flat/recommended-with-json5"]]
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
name: "@fast-china/json/vscode-settings",
|
|
634
|
+
files: ["**/.vscode/settings.json"],
|
|
635
|
+
rules: {
|
|
636
|
+
// VS Code 的 settings.json 使用带注释的 JSONC 方言。
|
|
637
|
+
"jsonc/no-comments": "off"
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
]);
|
|
641
|
+
var createLodashConfigs = (preference, files = GLOBS_CODE) => defineConfig([
|
|
642
|
+
{
|
|
643
|
+
name: `@fast-china/lodash/${preference}`,
|
|
644
|
+
files: [...files],
|
|
645
|
+
rules: preference === "lodash" ? preferLodashRules : preferLodashUnifiedRules
|
|
646
|
+
}
|
|
647
|
+
]);
|
|
648
|
+
var createMarkdownConfigs = () => defineConfig([
|
|
627
649
|
{
|
|
628
650
|
name: "@fast-china/markdown",
|
|
629
|
-
files: [
|
|
651
|
+
files: [GLOB_MARKDOWN],
|
|
630
652
|
extends: [eslintMarkdown.configs.recommended]
|
|
631
653
|
}
|
|
632
654
|
]);
|
|
633
|
-
var
|
|
655
|
+
var createPrettierConfigs = () => defineConfig([
|
|
634
656
|
{
|
|
635
657
|
...eslintConfigPrettierFlat,
|
|
636
658
|
name: "@fast-china/prettier"
|
|
637
659
|
}
|
|
638
660
|
]);
|
|
639
|
-
var createRegexpConfigs = (files =
|
|
661
|
+
var createRegexpConfigs = (files = GLOBS_CODE) => defineConfig([
|
|
640
662
|
{
|
|
641
663
|
name: "@fast-china/regexp",
|
|
642
664
|
files: [...files],
|
|
643
665
|
extends: [eslintPluginRegexp.configs["flat/recommended"]]
|
|
644
666
|
}
|
|
645
667
|
]);
|
|
646
|
-
var
|
|
647
|
-
var createTypeScriptCoreConfigs = ({ typeChecked = false } = {}) => defineConfig([
|
|
668
|
+
var createPackageJsonSortConfigs = () => defineConfig([
|
|
648
669
|
{
|
|
649
|
-
name:
|
|
650
|
-
files: [
|
|
651
|
-
|
|
652
|
-
...typeChecked ? tseslint2.configs.recommendedTypeChecked : tseslint2.configs.recommended,
|
|
653
|
-
...typeChecked ? tseslint2.configs.stylisticTypeChecked : tseslint2.configs.stylistic
|
|
654
|
-
],
|
|
655
|
-
languageOptions: {
|
|
656
|
-
ecmaVersion: "latest",
|
|
657
|
-
parserOptions: {
|
|
658
|
-
...typeChecked ? { projectService: true } : {}
|
|
659
|
-
}
|
|
660
|
-
},
|
|
661
|
-
rules: typescriptRules
|
|
670
|
+
name: "@fast-china/sort/package-json",
|
|
671
|
+
files: ["**/package.json"],
|
|
672
|
+
rules: packageJsonSortRules
|
|
662
673
|
}
|
|
663
674
|
]);
|
|
664
|
-
var
|
|
665
|
-
var createTypeScriptConfigs = (options = {}) => defineConfig([
|
|
666
|
-
...createTypeScriptCoreConfigs(options),
|
|
675
|
+
var createTsconfigSortConfigs = () => defineConfig([
|
|
667
676
|
{
|
|
668
|
-
name: "@fast-china/
|
|
669
|
-
files: [
|
|
670
|
-
rules:
|
|
671
|
-
"@typescript-eslint/consistent-type-imports": "off",
|
|
672
|
-
"@typescript-eslint/no-unused-vars": "off"
|
|
673
|
-
}
|
|
677
|
+
name: "@fast-china/sort/tsconfig",
|
|
678
|
+
files: [...GLOBS_TSCONFIG],
|
|
679
|
+
rules: tsconfigJsonSortRules
|
|
674
680
|
}
|
|
675
681
|
]);
|
|
676
|
-
var
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
682
|
+
var getTypeScriptPresetConfigs = (typeChecked, removeFileScopes = false) => {
|
|
683
|
+
const configs = [
|
|
684
|
+
...typeChecked ? tseslint.configs.recommendedTypeChecked : tseslint.configs.recommended,
|
|
685
|
+
...typeChecked ? tseslint.configs.stylisticTypeChecked : tseslint.configs.stylistic
|
|
686
|
+
];
|
|
687
|
+
if (!removeFileScopes) return configs;
|
|
688
|
+
return configs.map((config) => {
|
|
689
|
+
const { files: _files, ...configWithoutFiles } = config;
|
|
690
|
+
return configWithoutFiles;
|
|
691
|
+
});
|
|
681
692
|
};
|
|
682
|
-
var
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
693
|
+
var createTypeScriptParserOptions = ({ typeChecked = false, tsconfigRootDir } = {}) => ({
|
|
694
|
+
...typeChecked ? { projectService: true } : {},
|
|
695
|
+
...typeChecked && tsconfigRootDir ? { tsconfigRootDir } : {}
|
|
696
|
+
});
|
|
697
|
+
var createTypeScriptConfigs = (options = {}, files = GLOBS_TYPESCRIPT) => defineConfig([
|
|
698
|
+
{
|
|
699
|
+
name: options.typeChecked ? "@fast-china/typescript/type-checked" : "@fast-china/typescript",
|
|
700
|
+
files: [...files],
|
|
701
|
+
extends: getTypeScriptPresetConfigs(options.typeChecked ?? false),
|
|
702
|
+
languageOptions: {
|
|
703
|
+
ecmaVersion: "latest",
|
|
704
|
+
parserOptions: createTypeScriptParserOptions(options)
|
|
705
|
+
},
|
|
706
|
+
rules: typescriptRules
|
|
707
|
+
}
|
|
708
|
+
]);
|
|
709
|
+
var createVueConfigs = ({ typescript = true, typescriptOptions = {} } = {}) => {
|
|
710
|
+
const typeChecked = typescriptOptions.typeChecked ?? false;
|
|
711
|
+
const typeScriptConfigs = typescript ? getTypeScriptPresetConfigs(typeChecked, true) : [];
|
|
688
712
|
return defineConfig([
|
|
689
713
|
{
|
|
690
|
-
name:
|
|
691
|
-
files: [
|
|
692
|
-
extends: [eslint.configs.recommended, ...typeScriptConfigs, ...
|
|
714
|
+
name: typeChecked ? "@fast-china/vue/type-checked" : "@fast-china/vue",
|
|
715
|
+
files: [GLOB_VUE],
|
|
716
|
+
extends: [eslint.configs.recommended, ...typeScriptConfigs, ...eslintPluginVue.configs["flat/recommended"]],
|
|
693
717
|
languageOptions: {
|
|
694
718
|
ecmaVersion: "latest",
|
|
695
719
|
parser: vueEslintParser,
|
|
696
720
|
parserOptions: {
|
|
697
|
-
parser:
|
|
698
|
-
extraFileExtensions: [".vue"],
|
|
721
|
+
...typescript ? { parser: tseslint.parser, extraFileExtensions: [".vue"] } : {},
|
|
699
722
|
ecmaFeatures: {
|
|
700
723
|
jsx: true
|
|
701
724
|
},
|
|
702
725
|
sourceType: "module",
|
|
703
|
-
...
|
|
726
|
+
...createTypeScriptParserOptions(typescriptOptions)
|
|
704
727
|
}
|
|
705
728
|
},
|
|
706
729
|
rules: {
|
|
707
|
-
...typescriptRules,
|
|
730
|
+
...typescript ? typescriptRules : {},
|
|
708
731
|
...vueRules
|
|
709
732
|
}
|
|
710
733
|
}
|
|
711
734
|
]);
|
|
712
735
|
};
|
|
713
|
-
var vueConfigs = createVueConfigs();
|
|
714
|
-
var vue2Configs = createVueConfigs({ version: 2 });
|
|
715
|
-
var vueTypeCheckedConfigs = createVueConfigs({ typeChecked: true });
|
|
716
736
|
|
|
717
737
|
// src/factory.ts
|
|
718
|
-
var
|
|
738
|
+
var defaultConfigOptions = Object.freeze({
|
|
719
739
|
environment: "browser",
|
|
720
740
|
gitignore: true,
|
|
721
741
|
imports: true,
|
|
742
|
+
javascript: true,
|
|
722
743
|
json: true,
|
|
744
|
+
lodash: false,
|
|
723
745
|
markdown: true,
|
|
724
746
|
prettier: true,
|
|
725
747
|
regexp: true,
|
|
748
|
+
sortPackageJson: false,
|
|
749
|
+
sortTsconfig: false,
|
|
726
750
|
typescript: true,
|
|
727
|
-
vue:
|
|
751
|
+
vue: true
|
|
728
752
|
});
|
|
729
|
-
var
|
|
730
|
-
const
|
|
731
|
-
const
|
|
732
|
-
const
|
|
733
|
-
const
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
const
|
|
753
|
+
var fastConfig = (options = {}, ...overrides) => {
|
|
754
|
+
const environment = options.environment ?? defaultConfigOptions.environment;
|
|
755
|
+
const gitignore = options.gitignore ?? defaultConfigOptions.gitignore;
|
|
756
|
+
const imports = options.imports ?? defaultConfigOptions.imports;
|
|
757
|
+
const javascript = options.javascript ?? defaultConfigOptions.javascript;
|
|
758
|
+
const json = options.json ?? defaultConfigOptions.json;
|
|
759
|
+
const lodash = options.lodash ?? defaultConfigOptions.lodash;
|
|
760
|
+
const markdown = options.markdown ?? defaultConfigOptions.markdown;
|
|
761
|
+
const prettier = options.prettier ?? defaultConfigOptions.prettier;
|
|
762
|
+
const regexp = options.regexp ?? defaultConfigOptions.regexp;
|
|
763
|
+
const sortPackageJson = options.sortPackageJson ?? defaultConfigOptions.sortPackageJson;
|
|
764
|
+
const sortTsconfig = options.sortTsconfig ?? defaultConfigOptions.sortTsconfig;
|
|
765
|
+
const typescript = options.typescript ?? defaultConfigOptions.typescript;
|
|
766
|
+
const vue = options.vue ?? defaultConfigOptions.vue;
|
|
767
|
+
const typeScriptEnabled = typescript !== false;
|
|
768
|
+
const typeScriptOptions = typeof typescript === "object" ? typescript : {};
|
|
769
|
+
const projectRules = options.rules;
|
|
770
|
+
const scriptFiles = [...javascript ? GLOBS_JAVASCRIPT : [], ...typeScriptEnabled ? GLOBS_TYPESCRIPT : []];
|
|
771
|
+
const codeFiles = [...scriptFiles, ...vue ? [GLOB_VUE] : []];
|
|
772
|
+
const jsonEnabled = json || sortPackageJson || sortTsconfig;
|
|
744
773
|
return defineConfig([
|
|
745
|
-
|
|
746
|
-
...
|
|
747
|
-
...
|
|
774
|
+
createGlobalIgnores(options.ignores),
|
|
775
|
+
...gitignore ? createGitignoreConfigs() : [],
|
|
776
|
+
...codeFiles.length ? [
|
|
777
|
+
...createEnvironmentConfigs({
|
|
778
|
+
environment,
|
|
779
|
+
files: codeFiles,
|
|
780
|
+
globals: options.globals,
|
|
781
|
+
nodeFiles: scriptFiles
|
|
782
|
+
}),
|
|
783
|
+
...createBaseConfigs(codeFiles)
|
|
784
|
+
] : [],
|
|
785
|
+
...javascript ? createJavaScriptConfigs() : [],
|
|
786
|
+
...imports && codeFiles.length ? createImportConfigs(codeFiles) : [],
|
|
787
|
+
...lodash && codeFiles.length ? createLodashConfigs(lodash, codeFiles) : [],
|
|
788
|
+
...regexp && codeFiles.length ? createRegexpConfigs(codeFiles) : [],
|
|
789
|
+
...typeScriptEnabled ? createTypeScriptConfigs(typeScriptOptions) : [],
|
|
790
|
+
...jsonEnabled ? createJsonConfigs() : [],
|
|
791
|
+
...sortPackageJson ? createPackageJsonSortConfigs() : [],
|
|
792
|
+
...sortTsconfig ? createTsconfigSortConfigs() : [],
|
|
793
|
+
...vue ? createVueConfigs({ typescript: typeScriptEnabled, typescriptOptions: typeScriptOptions }) : [],
|
|
794
|
+
...markdown ? createMarkdownConfigs() : [],
|
|
795
|
+
...prettier ? createPrettierConfigs() : [],
|
|
796
|
+
...projectRules && codeFiles.length ? [
|
|
748
797
|
{
|
|
749
|
-
name: "@fast-china/
|
|
750
|
-
|
|
798
|
+
name: "@fast-china/project/rules",
|
|
799
|
+
files: codeFiles,
|
|
800
|
+
rules: projectRules
|
|
751
801
|
}
|
|
752
802
|
] : [],
|
|
753
|
-
...
|
|
754
|
-
...createCommonConfigs(codeFiles),
|
|
755
|
-
...javascriptConfigs,
|
|
756
|
-
...resolvedOptions.imports ? createImportConfigs(codeFiles) : [],
|
|
757
|
-
...resolvedOptions.regexp ? createRegexpConfigs(codeFiles) : [],
|
|
758
|
-
...typeScriptEnabled ? createTypeScriptConfigs(typeScriptOptions) : [],
|
|
759
|
-
...resolvedOptions.json ? [...jsonConfigs, ...packageJsonSortConfigs, ...tsconfigJsonSortConfigs] : [],
|
|
760
|
-
...vueEnabled ? createVueConfigs(vueOptions) : [],
|
|
761
|
-
...resolvedOptions.markdown ? markdownConfigs : [],
|
|
762
|
-
...resolvedOptions.prettier ? prettierConfigs : []
|
|
803
|
+
...overrides
|
|
763
804
|
]);
|
|
764
805
|
};
|
|
765
806
|
|
|
766
|
-
|
|
767
|
-
var PresetJavascriptConfigs = createConfig({
|
|
768
|
-
json: false,
|
|
769
|
-
markdown: false,
|
|
770
|
-
typescript: false,
|
|
771
|
-
vue: false
|
|
772
|
-
});
|
|
773
|
-
var PresetJsonConfigs = [...jsonConfigs, ...packageJsonSortConfigs, ...tsconfigJsonSortConfigs];
|
|
774
|
-
var PresetTypescriptConfigs = createConfig({
|
|
775
|
-
json: false,
|
|
776
|
-
markdown: false,
|
|
777
|
-
vue: false
|
|
778
|
-
});
|
|
779
|
-
var PresetTypeScriptConfigs = PresetTypescriptConfigs;
|
|
780
|
-
var PresetBasicConfigs = createConfig({ markdown: false, vue: false });
|
|
781
|
-
var PresetVueConfigs = createConfig();
|
|
782
|
-
var src_default = PresetVueConfigs;
|
|
783
|
-
|
|
784
|
-
export { CONST_DIST, CONST_DTS, CONST_JS, CONST_JSON, CONST_JSON5, CONST_JSONC, CONST_JSX, CONST_LOCKFILE, CONST_MD, CONST_NODE_MODULES, CONST_PUBLIC, CONST_TS, CONST_TSCONFIG, CONST_TSX, CONST_VUE, CONST_YAML, GLOB_CODE, GLOB_JAVASCRIPT, GLOB_NODE, GLOB_TYPESCRIPT, PresetBasicConfigs, PresetJavascriptConfigs, PresetJsonConfigs, PresetTypeScriptConfigs, PresetTypescriptConfigs, PresetVueConfigs, browserConfigs, commonConfigs, createCommonConfigs, createConfig, createEnvironmentConfigs, createImportConfigs, createRegexpConfigs, createTypeScriptConfigs, createTypeScriptCoreConfigs, createVueConfigs, src_default as default, defaultOptions, defineRules, gitignoreConfigs, globalIgnoresConfigs, ignoresConfigs, importConfigs, javascriptConfigs, jsonConfigs, markdownConfigs, nodeConfigs, packageJsonSortConfigs, prettierConfigs, regexpConfigs, tsconfigJsonSortConfigs, typescriptConfigs, typescriptCoreConfigs, typescriptTypeCheckedConfigs, universalConfigs, vue2Configs, vueConfigs, vueTypeCheckedConfigs };
|
|
807
|
+
export { fastConfig as default, defaultConfigOptions, defineRules, fastConfig };
|
|
785
808
|
//# sourceMappingURL=index.js.map
|
|
786
809
|
//# sourceMappingURL=index.js.map
|