@zjutjh/eslint-config 0.9.1 → 2.0.0-beta.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/README.md +31 -13
- package/dist/index.d.mts +7 -6
- package/dist/index.mjs +35 -75
- package/package.json +36 -46
package/README.md
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
|
-
# `@zjutjh/eslint-config`
|
|
1
|
+
# `@zjutjh/eslint-config`
|
|
2
|
+
|
|
3
|
+
[](https://npmx.dev/package/@zjutjh/eslint-config)
|
|
4
|
+
[](https://npmx.dev/package/@zjutjh/eslint-config)
|
|
5
|
+
[](https://npmx.dev/package/@zjutjh/eslint-config)
|
|
2
6
|
|
|
3
7
|
zjutjh 的 ESLint 配置,适用于 JS, TS, Vue3 等项目。
|
|
4
8
|
|
|
5
9
|
## 使用方式
|
|
6
10
|
|
|
11
|
+
> [!TIP]
|
|
12
|
+
> **For Agent**:可以通过 Skill 来接入
|
|
13
|
+
>
|
|
14
|
+
> ```sh
|
|
15
|
+
> # 推荐安装到项目本地。
|
|
16
|
+
> npx skills add zjutjh/eslint-config --skill setup-zjutjh-eslint
|
|
17
|
+
> ```
|
|
18
|
+
> 安装完成后,在对话里提及接入 zjutjh eslint config 即可触发
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
**For Human**
|
|
23
|
+
|
|
7
24
|
> [!IMPORTANT]
|
|
8
|
-
> ESLint 版本需要 ^
|
|
25
|
+
> ESLint 版本需要 ^10.0.0 以上,Node 版本需要 ^20.19.0 以上
|
|
9
26
|
|
|
10
27
|
```sh
|
|
11
28
|
# 确保你已经安装了 eslint
|
|
@@ -13,7 +30,7 @@ $ pnpm add -D eslint
|
|
|
13
30
|
|
|
14
31
|
$ pnpm add -D @zjutjh/eslint-config
|
|
15
32
|
|
|
16
|
-
# 如果你想使用 ts 编写配置文件,还需要安装 typescript, jiti 来帮助 eslint
|
|
33
|
+
# 如果你想使用 ts 编写配置文件,还需要安装 typescript, jiti 来帮助 eslint 解析配置。(Node 24 版本后不需要安装 jiti)
|
|
17
34
|
$ pnpm add -D typescript jiti
|
|
18
35
|
```
|
|
19
36
|
|
|
@@ -134,22 +151,23 @@ export default zjutjh(
|
|
|
134
151
|
很多人在意代码的格式化,这里单独拿出一章讲。
|
|
135
152
|
|
|
136
153
|
内置两种格式化工具。`@stylistic/eslint-plugin` (lint 工具对格式的检查) 和传统的 formatter 工具
|
|
137
|
-
(
|
|
154
|
+
([oxfmt](https://oxc.rs/docs/guide/usage/formatter))。stylistic 默认开启,如果要使用 oxfmt,需要手动开启。
|
|
138
155
|
|
|
139
156
|
```ts
|
|
140
|
-
// 启用
|
|
157
|
+
// 启用 oxfmt
|
|
141
158
|
export default zjutjh({
|
|
142
|
-
|
|
159
|
+
oxfmt: true
|
|
143
160
|
}),
|
|
144
161
|
```
|
|
145
162
|
|
|
146
|
-
支持自定义
|
|
163
|
+
支持自定义 oxfmt 格式化选项,以及关闭对部分文件的格式化(默认对支持的文件全部开启)
|
|
147
164
|
|
|
148
165
|
```ts
|
|
149
166
|
export default zjutjh({
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// 自定义
|
|
167
|
+
oxfmt: {
|
|
168
|
+
oxfmtSelfOptions: {
|
|
169
|
+
// 自定义 oxfmt 的格式化风格配置
|
|
170
|
+
// 参考 https://oxc.rs/docs/guide/usage/formatter
|
|
153
171
|
},
|
|
154
172
|
lang: {
|
|
155
173
|
html: false // 关闭对一些文件的格式化。默认对支持的文件全部开启
|
|
@@ -158,7 +176,7 @@ export default zjutjh({
|
|
|
158
176
|
})
|
|
159
177
|
```
|
|
160
178
|
|
|
161
|
-
stylistic 只对 js(x) 和 ts(x) 进行格式化,而
|
|
179
|
+
stylistic 只对 js(x) 和 ts(x) 进行格式化,而 oxfmt 还对其他文件,如 vue,css,html,json 等的格式化。
|
|
162
180
|
如果你要**在编辑器中**自动格式化这些文件,需要配置编辑器来允许 eslint 校验这些类型的文件。
|
|
163
181
|
|
|
164
182
|
```jsonc
|
|
@@ -175,8 +193,8 @@ stylistic 只对 js(x) 和 ts(x) 进行格式化,而 prettier 还对其他文
|
|
|
175
193
|
```
|
|
176
194
|
|
|
177
195
|
> [!WARNING]
|
|
178
|
-
>
|
|
179
|
-
> eslint
|
|
196
|
+
> 我们通过 eslint 调用 oxfmt 来进行代码格式化,所以你的编辑器不需要安装额外的格式化插件,有
|
|
197
|
+
> eslint 插件就行。格式化配置声明在配置源码内部,如果启用了 prettier 插件,他读取不到内部的配置,
|
|
180
198
|
> 会按照默认的配置来格式化,这会导致代码风格不一致。
|
|
181
199
|
|
|
182
200
|
## 开发指南
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ParserOptions } from "@typescript-eslint/parser";
|
|
2
1
|
import { Linter } from "eslint";
|
|
3
|
-
import {
|
|
2
|
+
import { ParserOptions } from "@typescript-eslint/parser";
|
|
3
|
+
import { FormatOptions } from "oxfmt";
|
|
4
4
|
|
|
5
5
|
//#region src/types.d.ts
|
|
6
6
|
interface OverridesConfigs {
|
|
@@ -15,7 +15,7 @@ interface OptionsConfig extends OptionsComponentExts {
|
|
|
15
15
|
taro?: boolean;
|
|
16
16
|
jsx?: boolean;
|
|
17
17
|
react?: boolean;
|
|
18
|
-
|
|
18
|
+
oxfmt?: boolean | OptionsOxfmt;
|
|
19
19
|
ignores?: string[];
|
|
20
20
|
overrides?: OverridesConfigs;
|
|
21
21
|
}
|
|
@@ -25,9 +25,10 @@ interface OptionsComponentExts {
|
|
|
25
25
|
interface OptionsTypeScriptParserOptions {
|
|
26
26
|
parserOptions?: Partial<ParserOptions>;
|
|
27
27
|
}
|
|
28
|
-
interface
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
interface OptionsOxfmt {
|
|
29
|
+
/** 传递给 oxfmt format() API 的选项,参考 https://oxc.rs/docs/guide/usage/formatter */
|
|
30
|
+
oxfmtSelfOptions?: FormatOptions;
|
|
31
|
+
/** 对哪些文件启用 oxfmt,默认全部启用 */
|
|
31
32
|
lang?: {
|
|
32
33
|
/** js, ts, vue 文件 */es: boolean; /** css, less, scss 文件 */
|
|
33
34
|
css: boolean;
|
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { isPackageExists } from "local-pkg";
|
|
2
|
-
import
|
|
2
|
+
import importXPlugin, { flatConfigs } from "eslint-plugin-import-x";
|
|
3
3
|
import simpleImportSortPlugin from "eslint-plugin-simple-import-sort";
|
|
4
4
|
import eslintJS from "@eslint/js";
|
|
5
5
|
import globals from "globals";
|
|
6
6
|
import uniconPlugin from "eslint-plugin-unicorn";
|
|
7
7
|
import pluginStylistic from "@stylistic/eslint-plugin";
|
|
8
|
-
|
|
9
8
|
//#region src/globs.ts
|
|
10
9
|
const GLOB_VUE = "**/*.vue";
|
|
11
10
|
const GLOB_JS = "**/*.?([cm])js";
|
|
@@ -55,7 +54,6 @@ const GLOBS_EXCLUDES = [
|
|
|
55
54
|
"**/auto-import?(s).d.ts",
|
|
56
55
|
"**/components.d.ts"
|
|
57
56
|
];
|
|
58
|
-
|
|
59
57
|
//#endregion
|
|
60
58
|
//#region src/configs/ignores.ts
|
|
61
59
|
function ignores(options) {
|
|
@@ -64,7 +62,6 @@ function ignores(options) {
|
|
|
64
62
|
ignores: [...GLOBS_EXCLUDES, ...options?.userIgnores ?? []]
|
|
65
63
|
}];
|
|
66
64
|
}
|
|
67
|
-
|
|
68
65
|
//#endregion
|
|
69
66
|
//#region src/configs/imports.ts
|
|
70
67
|
function imports() {
|
|
@@ -72,18 +69,18 @@ function imports() {
|
|
|
72
69
|
name: "zjutjh/imports/setup",
|
|
73
70
|
plugins: {
|
|
74
71
|
"simple-import-sort": simpleImportSortPlugin,
|
|
75
|
-
"import":
|
|
72
|
+
"import-x": importXPlugin
|
|
76
73
|
}
|
|
77
74
|
}, {
|
|
78
75
|
name: "zjutjh/imports/rules",
|
|
79
76
|
rules: {
|
|
80
77
|
"simple-import-sort/imports": "error",
|
|
81
78
|
"simple-import-sort/exports": "error",
|
|
82
|
-
|
|
79
|
+
...flatConfigs.recommended.rules,
|
|
80
|
+
"import-x/no-unresolved": "off"
|
|
83
81
|
}
|
|
84
82
|
}];
|
|
85
83
|
}
|
|
86
|
-
|
|
87
84
|
//#endregion
|
|
88
85
|
//#region src/configs/javascript.ts
|
|
89
86
|
function javascript() {
|
|
@@ -131,7 +128,6 @@ function javascript() {
|
|
|
131
128
|
}
|
|
132
129
|
}];
|
|
133
130
|
}
|
|
134
|
-
|
|
135
131
|
//#endregion
|
|
136
132
|
//#region src/configs/jsx.ts
|
|
137
133
|
function jsx() {
|
|
@@ -141,7 +137,6 @@ function jsx() {
|
|
|
141
137
|
languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } }
|
|
142
138
|
}];
|
|
143
139
|
}
|
|
144
|
-
|
|
145
140
|
//#endregion
|
|
146
141
|
//#region src/configs/misc.ts
|
|
147
142
|
function misc() {
|
|
@@ -153,7 +148,6 @@ function misc() {
|
|
|
153
148
|
rules: { "unicorn/filename-case": ["error", { "case": "kebabCase" }] }
|
|
154
149
|
}];
|
|
155
150
|
}
|
|
156
|
-
|
|
157
151
|
//#endregion
|
|
158
152
|
//#region src/utils.ts
|
|
159
153
|
async function interopDefault(m) {
|
|
@@ -175,13 +169,12 @@ function resolveSubOptions(options, key) {
|
|
|
175
169
|
function getOverrides(options, key) {
|
|
176
170
|
return { ...options.overrides?.[key] };
|
|
177
171
|
}
|
|
178
|
-
|
|
179
172
|
//#endregion
|
|
180
|
-
//#region src/configs/
|
|
173
|
+
//#region src/configs/oxfmt.ts
|
|
181
174
|
/**
|
|
182
|
-
* @see https://
|
|
175
|
+
* @see https://oxc.rs/docs/guide/usage/formatter
|
|
183
176
|
*/
|
|
184
|
-
const
|
|
177
|
+
const oxfmtOptions = {
|
|
185
178
|
printWidth: 100,
|
|
186
179
|
tabWidth: 2,
|
|
187
180
|
useTabs: false,
|
|
@@ -193,31 +186,23 @@ const prettierOptions = {
|
|
|
193
186
|
bracketSpacing: true,
|
|
194
187
|
bracketSameLine: false,
|
|
195
188
|
arrowParens: "always",
|
|
196
|
-
requirePragma: false,
|
|
197
|
-
insertPragma: false,
|
|
198
|
-
proseWrap: "preserve",
|
|
199
189
|
htmlWhitespaceSensitivity: "css",
|
|
200
190
|
vueIndentScriptAndStyle: false,
|
|
201
191
|
endOfLine: "lf",
|
|
202
192
|
embeddedLanguageFormatting: "auto",
|
|
203
193
|
singleAttributePerLine: false
|
|
204
194
|
};
|
|
205
|
-
async function
|
|
206
|
-
await ensurePackages([
|
|
207
|
-
|
|
208
|
-
"eslint-plugin-prettier",
|
|
209
|
-
"eslint-config-prettier",
|
|
210
|
-
"prettier"
|
|
211
|
-
]);
|
|
212
|
-
const [configPrettier, pluginFormat] = await Promise.all([interopDefault(import("eslint-plugin-prettier/recommended")), interopDefault(import("eslint-plugin-format"))]);
|
|
195
|
+
async function oxfmt(options) {
|
|
196
|
+
await ensurePackages(["eslint-plugin-format", "oxfmt"]);
|
|
197
|
+
const pluginFormat = await interopDefault(import("eslint-plugin-format"));
|
|
213
198
|
const { es: enableESFormat = true, html: enableHTMLFormat = true, css: enableCSSFormat = true, json: enableJSONFormat = true } = options?.lang ?? {};
|
|
214
|
-
const
|
|
215
|
-
...
|
|
216
|
-
...options?.
|
|
199
|
+
const mergedOptions = {
|
|
200
|
+
...oxfmtOptions,
|
|
201
|
+
...options?.oxfmtSelfOptions
|
|
217
202
|
};
|
|
218
203
|
return [
|
|
219
204
|
enableESFormat ? {
|
|
220
|
-
name: "zjutjh/
|
|
205
|
+
name: "zjutjh/oxfmt/es",
|
|
221
206
|
files: [
|
|
222
207
|
GLOB_VUE,
|
|
223
208
|
GLOB_TS,
|
|
@@ -225,21 +210,11 @@ async function prettier(options) {
|
|
|
225
210
|
GLOB_TSX,
|
|
226
211
|
GLOB_JSX
|
|
227
212
|
],
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
enableESFormat ? {
|
|
231
|
-
name: "zjutjh/prettier/es",
|
|
232
|
-
files: [
|
|
233
|
-
GLOB_VUE,
|
|
234
|
-
GLOB_TS,
|
|
235
|
-
GLOB_JS,
|
|
236
|
-
GLOB_TSX,
|
|
237
|
-
GLOB_JSX
|
|
238
|
-
],
|
|
239
|
-
rules: { "prettier/prettier": ["error", mergedPrettierOptions] }
|
|
213
|
+
plugins: { format: pluginFormat },
|
|
214
|
+
rules: { "format/oxfmt": ["error", mergedOptions] }
|
|
240
215
|
} : {},
|
|
241
216
|
enableCSSFormat ? {
|
|
242
|
-
name: "zjutjh/
|
|
217
|
+
name: "zjutjh/oxfmt/css",
|
|
243
218
|
files: [
|
|
244
219
|
GLOB_CSS,
|
|
245
220
|
GLOB_LESS,
|
|
@@ -247,23 +222,17 @@ async function prettier(options) {
|
|
|
247
222
|
],
|
|
248
223
|
languageOptions: { parser: pluginFormat.parserPlain },
|
|
249
224
|
plugins: { format: pluginFormat },
|
|
250
|
-
rules: { "format/
|
|
251
|
-
parser: "css",
|
|
252
|
-
mergedPrettierOptions
|
|
253
|
-
}] }
|
|
225
|
+
rules: { "format/oxfmt": ["error", mergedOptions] }
|
|
254
226
|
} : {},
|
|
255
227
|
enableHTMLFormat ? {
|
|
256
|
-
name: "zjutjh/
|
|
228
|
+
name: "zjutjh/oxfmt/html",
|
|
257
229
|
files: [GLOB_HTML],
|
|
258
230
|
languageOptions: { parser: pluginFormat.parserPlain },
|
|
259
231
|
plugins: { format: pluginFormat },
|
|
260
|
-
rules: { "format/
|
|
261
|
-
parser: "html",
|
|
262
|
-
mergedPrettierOptions
|
|
263
|
-
}] }
|
|
232
|
+
rules: { "format/oxfmt": ["error", mergedOptions] }
|
|
264
233
|
} : {},
|
|
265
234
|
enableJSONFormat ? {
|
|
266
|
-
name: "zjutjh/
|
|
235
|
+
name: "zjutjh/oxfmt/json",
|
|
267
236
|
files: [
|
|
268
237
|
GLOB_JSON,
|
|
269
238
|
GLOB_JSON5,
|
|
@@ -271,14 +240,10 @@ async function prettier(options) {
|
|
|
271
240
|
],
|
|
272
241
|
languageOptions: { parser: pluginFormat.parserPlain },
|
|
273
242
|
plugins: { format: pluginFormat },
|
|
274
|
-
rules: { "format/
|
|
275
|
-
parser: "json",
|
|
276
|
-
mergedPrettierOptions
|
|
277
|
-
}] }
|
|
243
|
+
rules: { "format/oxfmt": ["error", mergedOptions] }
|
|
278
244
|
} : {}
|
|
279
245
|
];
|
|
280
246
|
}
|
|
281
|
-
|
|
282
247
|
//#endregion
|
|
283
248
|
//#region src/configs/react.ts
|
|
284
249
|
async function react(options) {
|
|
@@ -292,16 +257,10 @@ async function react(options) {
|
|
|
292
257
|
interopDefault(import("eslint-plugin-react-hooks")),
|
|
293
258
|
interopDefault(import("eslint-plugin-react-refresh"))
|
|
294
259
|
]);
|
|
295
|
-
const plugins = pluginReact.configs.all.plugins;
|
|
296
260
|
return [{
|
|
297
261
|
name: "zjutjh/react/setup",
|
|
298
262
|
plugins: {
|
|
299
|
-
"@eslint-react":
|
|
300
|
-
"@eslint-react/dom": plugins["@eslint-react/dom"],
|
|
301
|
-
"@eslint-react/hooks-extra": plugins["@eslint-react/hooks-extra"],
|
|
302
|
-
"@eslint-react/naming-convention": plugins["@eslint-react/naming-convention"],
|
|
303
|
-
"@eslint-react/rsc": plugins["@eslint-react/rsc"],
|
|
304
|
-
"@eslint-react/web-api": plugins["@eslint-react/web-api"],
|
|
263
|
+
"@eslint-react": pluginReact,
|
|
305
264
|
"react-hooks": pluginReactHooks,
|
|
306
265
|
"react-refresh": pluginReactRefresh
|
|
307
266
|
}
|
|
@@ -317,14 +276,12 @@ async function react(options) {
|
|
|
317
276
|
...pluginReact.configs.recommended.rules,
|
|
318
277
|
...pluginReactHooks.configs.recommended.rules,
|
|
319
278
|
"react-refresh/only-export-components": "warn",
|
|
320
|
-
"@eslint-react/no-leaked-conditional-rendering": "error",
|
|
321
279
|
"@eslint-react/no-missing-component-display-name": "error",
|
|
322
280
|
"@eslint-react/no-missing-context-display-name": "error",
|
|
323
281
|
...options.overrides
|
|
324
282
|
}
|
|
325
283
|
}];
|
|
326
284
|
}
|
|
327
|
-
|
|
328
285
|
//#endregion
|
|
329
286
|
//#region src/configs/stylistic.ts
|
|
330
287
|
function stylistic(options) {
|
|
@@ -364,7 +321,6 @@ function stylistic(options) {
|
|
|
364
321
|
}
|
|
365
322
|
}];
|
|
366
323
|
}
|
|
367
|
-
|
|
368
324
|
//#endregion
|
|
369
325
|
//#region src/configs/typescript.ts
|
|
370
326
|
async function typescript(options) {
|
|
@@ -400,6 +356,14 @@ async function typescript(options) {
|
|
|
400
356
|
files,
|
|
401
357
|
rules: {
|
|
402
358
|
...pluginTs.configs.strict.rules,
|
|
359
|
+
"@typescript-eslint/restrict-template-expressions": ["error", {
|
|
360
|
+
allowNumber: true,
|
|
361
|
+
allowBoolean: false,
|
|
362
|
+
allowAny: false,
|
|
363
|
+
allowNullish: false,
|
|
364
|
+
allowRegExp: false,
|
|
365
|
+
allowArray: false
|
|
366
|
+
}],
|
|
403
367
|
"@typescript-eslint/ban-ts-comment": ["error", { "ts-expect-error": "allow-with-description" }],
|
|
404
368
|
"@typescript-eslint/require-await": "error",
|
|
405
369
|
"@typescript-eslint/no-shadow": "error",
|
|
@@ -422,7 +386,6 @@ async function typescript(options) {
|
|
|
422
386
|
}
|
|
423
387
|
];
|
|
424
388
|
}
|
|
425
|
-
|
|
426
389
|
//#endregion
|
|
427
390
|
//#region src/configs/vue.ts
|
|
428
391
|
async function vue(options) {
|
|
@@ -469,11 +432,10 @@ async function vue(options) {
|
|
|
469
432
|
}
|
|
470
433
|
}];
|
|
471
434
|
}
|
|
472
|
-
|
|
473
435
|
//#endregion
|
|
474
436
|
//#region src/factory.ts
|
|
475
437
|
async function zjutjh(options = {}, ...userConfigs) {
|
|
476
|
-
const { componentExts = [], vue: enableVue = isPackageExists("vue"), ts: enableTs = isPackageExists("typescript"), taro: enableTaro = isPackageExists("@tarojs/taro"), jsx: enableJSX = isPackageExists("react"), react: enableReact = isPackageExists("react"), ignores: userIgnores,
|
|
438
|
+
const { componentExts = [], vue: enableVue = isPackageExists("vue"), ts: enableTs = isPackageExists("typescript"), taro: enableTaro = isPackageExists("@tarojs/taro"), jsx: enableJSX = isPackageExists("react"), react: enableReact = isPackageExists("react"), ignores: userIgnores, oxfmt: enableOxfmt = false } = options;
|
|
477
439
|
const configs = [];
|
|
478
440
|
configs.push(ignores({ userIgnores }), javascript(), imports(), stylistic({ overrides: getOverrides(options, "stylistic") }), misc());
|
|
479
441
|
if (enableVue) componentExts.push("vue");
|
|
@@ -490,14 +452,12 @@ async function zjutjh(options = {}, ...userConfigs) {
|
|
|
490
452
|
}));
|
|
491
453
|
if (enableJSX) configs.push(jsx());
|
|
492
454
|
if (enableReact) configs.push(await react({ overrides: getOverrides(options, "react") }));
|
|
493
|
-
const
|
|
494
|
-
if (
|
|
455
|
+
const oxfmtOptions = resolveSubOptions(options, "oxfmt");
|
|
456
|
+
if (enableOxfmt) configs.push(await oxfmt(oxfmtOptions));
|
|
495
457
|
return configs.flat(1).concat(userConfigs);
|
|
496
458
|
}
|
|
497
|
-
|
|
498
459
|
//#endregion
|
|
499
460
|
//#region src/index.ts
|
|
500
461
|
var src_default = zjutjh;
|
|
501
|
-
|
|
502
462
|
//#endregion
|
|
503
|
-
export { src_default as default };
|
|
463
|
+
export { src_default as default };
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zjutjh/eslint-config",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "2.0.0-beta.0",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "zjutjh",
|
|
7
|
-
"description": "
|
|
7
|
+
"description": "ESLint config used by zjutjh",
|
|
8
8
|
"files": [
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
@@ -25,20 +25,18 @@
|
|
|
25
25
|
"registry": "https://registry.npmjs.org/"
|
|
26
26
|
},
|
|
27
27
|
"simple-git-hooks": {
|
|
28
|
-
"pre-commit": "
|
|
28
|
+
"pre-commit": "pnpm lint-staged"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@eslint-react/eslint-plugin": "^2.
|
|
32
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
33
|
-
"@typescript-eslint/parser": "^8.
|
|
34
|
-
"eslint": "^10.
|
|
35
|
-
"eslint-
|
|
36
|
-
"eslint-plugin-
|
|
37
|
-
"eslint-plugin-
|
|
38
|
-
"eslint-plugin-react-hooks": "^7.0.1",
|
|
39
|
-
"eslint-plugin-react-refresh": "^0.5.0",
|
|
31
|
+
"@eslint-react/eslint-plugin": "^4.2.3",
|
|
32
|
+
"@typescript-eslint/eslint-plugin": "^8.58.2",
|
|
33
|
+
"@typescript-eslint/parser": "^8.58.2",
|
|
34
|
+
"eslint": "^10.2.1",
|
|
35
|
+
"eslint-plugin-format": "^2.0.1",
|
|
36
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
37
|
+
"eslint-plugin-react-refresh": "^0.5.2",
|
|
40
38
|
"eslint-plugin-vue": "^10.8.0",
|
|
41
|
-
"
|
|
39
|
+
"oxfmt": "^0.35.0",
|
|
42
40
|
"vue-eslint-parser": "^10.4.0"
|
|
43
41
|
},
|
|
44
42
|
"peerDependenciesMeta": {
|
|
@@ -51,15 +49,9 @@
|
|
|
51
49
|
"@typescript-eslint/parser": {
|
|
52
50
|
"optional": true
|
|
53
51
|
},
|
|
54
|
-
"eslint-config-prettier": {
|
|
55
|
-
"optional": true
|
|
56
|
-
},
|
|
57
52
|
"eslint-plugin-format": {
|
|
58
53
|
"optional": true
|
|
59
54
|
},
|
|
60
|
-
"eslint-plugin-prettier": {
|
|
61
|
-
"optional": true
|
|
62
|
-
},
|
|
63
55
|
"eslint-plugin-react-hooks": {
|
|
64
56
|
"optional": true
|
|
65
57
|
},
|
|
@@ -69,7 +61,7 @@
|
|
|
69
61
|
"eslint-plugin-vue": {
|
|
70
62
|
"optional": true
|
|
71
63
|
},
|
|
72
|
-
"
|
|
64
|
+
"oxfmt": {
|
|
73
65
|
"optional": true
|
|
74
66
|
},
|
|
75
67
|
"vue-eslint-parser": {
|
|
@@ -78,41 +70,39 @@
|
|
|
78
70
|
},
|
|
79
71
|
"dependencies": {
|
|
80
72
|
"@antfu/install-pkg": "^1.1.0",
|
|
81
|
-
"@clack/prompts": "^1.0
|
|
82
|
-
"@eslint/js": "^
|
|
83
|
-
"@stylistic/eslint-plugin": "^5.
|
|
84
|
-
"eslint-plugin-import": "^
|
|
85
|
-
"eslint-plugin-simple-import-sort": "^
|
|
86
|
-
"eslint-plugin-unicorn": "^
|
|
87
|
-
"globals": "^17.
|
|
73
|
+
"@clack/prompts": "^1.2.0",
|
|
74
|
+
"@eslint/js": "^10.0.1",
|
|
75
|
+
"@stylistic/eslint-plugin": "^5.10.0",
|
|
76
|
+
"eslint-plugin-import-x": "^4.16.2",
|
|
77
|
+
"eslint-plugin-simple-import-sort": "^13.0.0",
|
|
78
|
+
"eslint-plugin-unicorn": "^64.0.0",
|
|
79
|
+
"globals": "^17.5.0",
|
|
88
80
|
"local-pkg": "^1.1.2"
|
|
89
81
|
},
|
|
90
82
|
"devDependencies": {
|
|
91
|
-
"@eslint-react/eslint-plugin": "^2.
|
|
92
|
-
"@eslint/config-inspector": "^
|
|
93
|
-
"@eslint/core": "^1.1
|
|
94
|
-
"@types/node": "^25.
|
|
95
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
96
|
-
"@typescript-eslint/parser": "^8.
|
|
97
|
-
"bumpp": "^
|
|
98
|
-
"cspell": "^
|
|
99
|
-
"eslint": "^10.
|
|
100
|
-
"eslint-
|
|
101
|
-
"eslint-plugin-
|
|
102
|
-
"eslint-plugin-
|
|
103
|
-
"eslint-plugin-react-hooks": "^7.0.1",
|
|
104
|
-
"eslint-plugin-react-refresh": "^0.5.0",
|
|
83
|
+
"@eslint-react/eslint-plugin": "^4.2.3",
|
|
84
|
+
"@eslint/config-inspector": "^2.0.0",
|
|
85
|
+
"@eslint/core": "^1.2.1",
|
|
86
|
+
"@types/node": "^25.6.0",
|
|
87
|
+
"@typescript-eslint/eslint-plugin": "^8.58.2",
|
|
88
|
+
"@typescript-eslint/parser": "^8.58.2",
|
|
89
|
+
"bumpp": "^11.0.1",
|
|
90
|
+
"cspell": "^10.0.0",
|
|
91
|
+
"eslint": "^10.2.1",
|
|
92
|
+
"eslint-plugin-format": "^2.0.1",
|
|
93
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
94
|
+
"eslint-plugin-react-refresh": "^0.5.2",
|
|
105
95
|
"eslint-plugin-vue": "^10.8.0",
|
|
106
|
-
"
|
|
107
|
-
"
|
|
96
|
+
"lint-staged": "^16.4.0",
|
|
97
|
+
"oxfmt": "^0.35.0",
|
|
108
98
|
"simple-git-hooks": "^2.13.1",
|
|
109
|
-
"tsdown": "^0.
|
|
110
|
-
"typescript": "^
|
|
99
|
+
"tsdown": "^0.21.9",
|
|
100
|
+
"typescript": "^6.0.3",
|
|
111
101
|
"vue-eslint-parser": "^10.4.0"
|
|
112
102
|
},
|
|
113
103
|
"scripts": {
|
|
114
104
|
"build": "tsdown",
|
|
115
|
-
"lint": "eslint
|
|
105
|
+
"lint": "eslint",
|
|
116
106
|
"typecheck": "tsc --noEmit",
|
|
117
107
|
"dev": "config-inspector",
|
|
118
108
|
"release": "bumpp && pnpm publish --access public",
|