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 @@ - - -