diff --git a/eslint.config.ts b/eslint.config.ts
index 8e120c0..e8778e5 100644
--- a/eslint.config.ts
+++ b/eslint.config.ts
@@ -1,40 +1,58 @@
-import { includeIgnoreFile } from '@eslint/compat';
+/*
+ MORE:
+ https://juejin.cn/post/7403244457263628300#heading-11
+*/
+import pluginVitest from '@vitest/eslint-plugin';
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting';
-import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript';
-import pluginImport from 'eslint-plugin-import-x';
+import { configureVueProject, defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript';
+import eslintPluginImportX from 'eslint-plugin-import-x';
import oxlint from 'eslint-plugin-oxlint';
import perfectionist from 'eslint-plugin-perfectionist';
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import pluginVue from 'eslint-plugin-vue';
-import path from 'node:path';
-import { fileURLToPath } from 'node:url';
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
-
-// To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
-import { configureVueProject } from '@vue/eslint-config-typescript';
+// https://github.com/vuejs/eslint-config-typescript/#advanced-setup
configureVueProject({ scriptLangs: ['ts', 'tsx', 'js', 'jsx'] });
-// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup
+
+const _ignores = [
+ // eslint-disable-next-line unicorn/no-await-expression-member
+ (await import('@eslint/compat')).includeIgnoreFile(
+ // eslint-disable-next-line unicorn/import-style, unicorn/no-await-expression-member
+ (await import('node:path')).default.resolve(import.meta.dirname, '.gitignore'),
+ ),
+
+ // eslint-disable-next-line unicorn/no-await-expression-member
+ (await import('eslint/config')).globalIgnores([
+ '**/dist/**',
+ '**/dist-ssr/**',
+ '**/coverage/**',
+ 'auto-imports.d.ts',
+ 'components.d.ts',
+ 'typed-router.d.ts',
+ 'src/shadcn/**',
+ 'src/components/InspiraUI/**',
+ ]),
+];
export default defineConfigWithVueTs(
- includeIgnoreFile(path.resolve(__dirname, '.gitignore')),
- { ignores: ['typed-router.d.ts', 'src/shadcn/**', 'src/components/InspiraUI/**'] },
-
{
- files: ['**/*.{ts,mts,tsx,vue}'],
name: 'app/files-to-lint',
+ files: ['**/*.{ts,mts,tsx,vue}'],
},
- {
- ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],
- name: 'app/files-to-ignore',
- },
+ _ignores,
pluginVue.configs['flat/essential'],
vueTsConfigs.recommended,
+ {
+ ...pluginVitest.configs.recommended,
+ files: ['src/**/__tests__/*'],
+ },
+
+ ...oxlint.configs['flat/recommended'],
+ skipFormatting,
+
eslintPluginUnicorn.configs.recommended,
{
rules: {
@@ -46,35 +64,14 @@ export default defineConfigWithVueTs(
},
},
- // {
- // ...pluginVitest.configs.recommended,
- // files: ['src/**/__tests__/*'],
- // },
-
- // {
- // ...pluginCypress.configs.recommended,
- // files: ['cypress/e2e/**/*.{cy,spec}.{js,ts,jsx,tsx}', 'cypress/support/**/*.{js,ts,jsx,tsx}'],
- // },
- ...oxlint.configs['flat/recommended'],
- skipFormatting,
-
- [
- {
- plugins: {
- import: pluginImport,
- },
- rules: {
- // 'import/first': 'error',
- 'import/newline-after-import': 'error',
- // 'import/no-duplicates': 'error',
- // 'import/no-mutable-exports': 'error',
- // 'import/no-named-default': 'error',
- // 'import/no-self-import': 'error',
- // 'import/no-unresolved': 'off',
- // 'import/no-webpack-loader-syntax': 'error',
- },
+ eslintPluginImportX.flatConfigs.recommended,
+ {
+ rules: {
+ 'import-x/no-unresolved': 'off',
+ 'import-x/newline-after-import': 'error',
+ 'import-x/first': 'error',
},
- ],
+ },
{
rules: {
@@ -96,7 +93,6 @@ export default defineConfigWithVueTs(
},
// https://perfectionist.dev/guide/getting-started
-
[
perfectionist.configs['recommended-natural'],
{
diff --git a/package.json b/package.json
index aa9db82..693020c 100644
--- a/package.json
+++ b/package.json
@@ -104,6 +104,7 @@
"@vant/auto-import-resolver": "^1.3.0",
"@vitejs/plugin-vue": "^5.2.3",
"@vitejs/plugin-vue-jsx": "^4.1.2",
+ "@vitest/eslint-plugin": "^1.1.38",
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.5.0",
"@vue/test-utils": "^2.4.6",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f3cf681..5c713de 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -194,6 +194,9 @@ importers:
'@vitejs/plugin-vue-jsx':
specifier: ^4.1.2
version: 4.1.2(vite@6.2.4(@types/node@22.13.14)(jiti@2.4.2)(less@4.2.2)(sass-embedded@1.86.0)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.2))
+ '@vitest/eslint-plugin':
+ specifier: ^1.1.38
+ version: 1.1.38(@typescript-eslint/utils@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
'@vue/eslint-config-prettier':
specifier: ^10.2.0
version: 10.2.0(eslint@9.23.0(jiti@2.4.2))(prettier@3.5.3)
@@ -1701,6 +1704,19 @@ packages:
vite: ^6.2.4
vue: ^3.2.25
+ '@vitest/eslint-plugin@1.1.38':
+ resolution: {integrity: sha512-KcOTZyVz8RiM5HyriiDVrP1CyBGuhRxle+lBsmSs6NTJEO/8dKVAq+f5vQzHj1/Kc7bYXSDO6yBe62Zx0t5iaw==}
+ peerDependencies:
+ '@typescript-eslint/utils': ^8.24.0
+ eslint: '>= 8.57.0'
+ typescript: '>= 5.0.0'
+ vitest: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ vitest:
+ optional: true
+
'@volar/language-core@2.4.12':
resolution: {integrity: sha512-RLrFdXEaQBWfSnYGVxvR2WrO6Bub0unkdHYIdC31HzIEqATIuuhRRzYu76iGPZ6OtA4Au1SnW0ZwIqPP217YhA==}
@@ -6179,6 +6195,13 @@ snapshots:
vite: 6.2.4(@types/node@22.13.14)(jiti@2.4.2)(less@4.2.2)(sass-embedded@1.86.0)(terser@5.39.0)(yaml@2.7.1)
vue: 3.5.13(typescript@5.8.2)
+ '@vitest/eslint-plugin@1.1.38(@typescript-eslint/utils@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)':
+ dependencies:
+ '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)
+ eslint: 9.23.0(jiti@2.4.2)
+ optionalDependencies:
+ typescript: 5.8.2
+
'@volar/language-core@2.4.12':
dependencies:
'@volar/source-map': 2.4.12
diff --git a/src/components/primevue/upload-demo.vue b/src/components/primevue/upload-demo.vue
index aec9aa4..b92f7ca 100644
--- a/src/components/primevue/upload-demo.vue
+++ b/src/components/primevue/upload-demo.vue
@@ -1,6 +1,9 @@
-
-
-