update for vitest 4

This commit is contained in:
Gauthier Roebroeck 2025-11-12 15:28:26 +08:00
parent 126e64b85a
commit e3d33db154
6 changed files with 362 additions and 84 deletions

View file

@ -4,9 +4,7 @@
// noinspection JSUnusedGlobalSymbols
// Auto generated by vite-plugin-dir2json
declare module "*i18n?dir2json&ext=.json&1" {
const json: {
"en": string;
};
const json: {};
export default json;
}

View file

@ -39,7 +39,7 @@
"@types/node": "^24.10.1",
"@unocss/preset-icons": "^66.5.6",
"@vitejs/plugin-vue": "^6.0.1",
"@vitest/browser": "^4.0.8",
"@vitest/browser-playwright": "^4.0.8",
"@vitest/coverage-v8": "^4.0.8",
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.6.0",
@ -3816,6 +3816,77 @@
"vitest": "4.0.8"
}
},
"node_modules/@vitest/browser-playwright": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.0.8.tgz",
"integrity": "sha512-MUi0msIAPXcA2YAuVMcssrSYP/yylxLt347xyTC6+ODl0c4XQFs0d2AN3Pc3iTa0pxIGmogflUV6eogXpPbJeA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/browser": "4.0.8",
"@vitest/mocker": "4.0.8",
"tinyrainbow": "^3.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"playwright": "*",
"vitest": "4.0.8"
},
"peerDependenciesMeta": {
"playwright": {
"optional": false
}
}
},
"node_modules/@vitest/browser-playwright/node_modules/@vitest/mocker": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.8.tgz",
"integrity": "sha512-9FRM3MZCedXH3+pIh+ME5Up2NBBHDq0wqwhOKkN4VnvCiKbVxddqH9mSGPZeawjd12pCOGnl+lo/ZGHt0/dQSg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/spy": "4.0.8",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.21"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"msw": "^2.4.9",
"vite": "^6.0.0 || ^7.0.0-0"
},
"peerDependenciesMeta": {
"msw": {
"optional": true
},
"vite": {
"optional": true
}
}
},
"node_modules/@vitest/browser-playwright/node_modules/@vitest/spy": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.8.tgz",
"integrity": "sha512-nvGVqUunyCgZH7kmo+Ord4WgZ7lN0sOULYXUOYuHr55dvg9YvMz3izfB189Pgp28w0vWFbEEfNc/c3VTrqrXeA==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/browser-playwright/node_modules/tinyrainbow": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz",
"integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@vitest/browser/node_modules/@vitest/mocker": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.8.tgz",

View file

@ -59,7 +59,7 @@
"@types/node": "^24.10.1",
"@unocss/preset-icons": "^66.5.6",
"@vitejs/plugin-vue": "^6.0.1",
"@vitest/browser": "^4.0.8",
"@vitest/browser-playwright": "^4.0.8",
"@vitest/coverage-v8": "^4.0.8",
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.6.0",

View file

@ -1,8 +1,11 @@
/* eslint-disable */
// @ts-nocheck
// biome-ignore lint: disable
// oxlint-disable
// ------
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
// biome-ignore lint: disable
export {}
/* prettier-ignore */

View file

@ -1,10 +1,15 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection ES6UnusedImports
// Generated by unplugin-vue-router. ‼️ DO NOT MODIFY THIS FILE ‼️
// It's recommended to commit this file.
// Make sure to add this file to your tsconfig.json file as an "includes" or "files" entry.
declare module 'vue-router/auto-resolver' {
export type ParamParserCustom = never
}
declare module 'vue-router/auto-routes' {
import type {
RouteRecordInfo,
@ -18,36 +23,186 @@ declare module 'vue-router/auto-routes' {
* Route name map generated by unplugin-vue-router
*/
export interface RouteNamedMap {
'/': RouteRecordInfo<'/', '/', Record<never, never>, Record<never, never>>,
'/[...path]': RouteRecordInfo<'/[...path]', '/:path(.*)', { path: ParamValue<true> }, { path: ParamValue<false> }>,
'/account/activity': RouteRecordInfo<'/account/activity', '/account/activity', Record<never, never>, Record<never, never>>,
'/account/api-keys': RouteRecordInfo<'/account/api-keys', '/account/api-keys', Record<never, never>, Record<never, never>>,
'/account/details': RouteRecordInfo<'/account/details', '/account/details', Record<never, never>, Record<never, never>>,
'/account/ui': RouteRecordInfo<'/account/ui', '/account/ui', Record<never, never>, Record<never, never>>,
'/claim': RouteRecordInfo<'/claim', '/claim', Record<never, never>, Record<never, never>>,
'/error': RouteRecordInfo<'/error', '/error', Record<never, never>, Record<never, never>>,
'/history': RouteRecordInfo<'/history', '/history', Record<never, never>, Record<never, never>>,
'/import/books': RouteRecordInfo<'/import/books', '/import/books', Record<never, never>, Record<never, never>>,
'/import/readlist': RouteRecordInfo<'/import/readlist', '/import/readlist', Record<never, never>, Record<never, never>>,
'/login': RouteRecordInfo<'/login', '/login', Record<never, never>, Record<never, never>>,
'/media/analysis': RouteRecordInfo<'/media/analysis', '/media/analysis', Record<never, never>, Record<never, never>>,
'/media/duplicate-files': RouteRecordInfo<'/media/duplicate-files', '/media/duplicate-files', Record<never, never>, Record<never, never>>,
'/media/duplicate-pages/known': RouteRecordInfo<'/media/duplicate-pages/known', '/media/duplicate-pages/known', Record<never, never>, Record<never, never>>,
'/media/duplicate-pages/unknown': RouteRecordInfo<'/media/duplicate-pages/unknown', '/media/duplicate-pages/unknown', Record<never, never>, Record<never, never>>,
'/media/missing-posters': RouteRecordInfo<'/media/missing-posters', '/media/missing-posters', Record<never, never>, Record<never, never>>,
'/server/activity': RouteRecordInfo<'/server/activity', '/server/activity', Record<never, never>, Record<never, never>>,
'/server/announcements': RouteRecordInfo<'/server/announcements', '/server/announcements', Record<never, never>, Record<never, never>>,
'/server/metrics': RouteRecordInfo<'/server/metrics', '/server/metrics', Record<never, never>, Record<never, never>>,
'/server/settings': RouteRecordInfo<'/server/settings', '/server/settings', Record<never, never>, Record<never, never>>,
'/server/ui': RouteRecordInfo<'/server/ui', '/server/ui', Record<never, never>, Record<never, never>>,
'/server/updates': RouteRecordInfo<'/server/updates', '/server/updates', Record<never, never>, Record<never, never>>,
'/server/users': RouteRecordInfo<'/server/users', '/server/users', Record<never, never>, Record<never, never>>,
'/startup': RouteRecordInfo<'/startup', '/startup', Record<never, never>, Record<never, never>>,
'/': RouteRecordInfo<
'/',
'/',
Record<never, never>,
Record<never, never>,
| never
>,
'/[...path]': RouteRecordInfo<
'/[...path]',
'/:path(.*)',
{ path: ParamValue<true> },
{ path: ParamValue<false> },
| never
>,
'/account/activity': RouteRecordInfo<
'/account/activity',
'/account/activity',
Record<never, never>,
Record<never, never>,
| never
>,
'/account/api-keys': RouteRecordInfo<
'/account/api-keys',
'/account/api-keys',
Record<never, never>,
Record<never, never>,
| never
>,
'/account/details': RouteRecordInfo<
'/account/details',
'/account/details',
Record<never, never>,
Record<never, never>,
| never
>,
'/account/ui': RouteRecordInfo<
'/account/ui',
'/account/ui',
Record<never, never>,
Record<never, never>,
| never
>,
'/claim': RouteRecordInfo<
'/claim',
'/claim',
Record<never, never>,
Record<never, never>,
| never
>,
'/error': RouteRecordInfo<
'/error',
'/error',
Record<never, never>,
Record<never, never>,
| never
>,
'/history': RouteRecordInfo<
'/history',
'/history',
Record<never, never>,
Record<never, never>,
| never
>,
'/import/books': RouteRecordInfo<
'/import/books',
'/import/books',
Record<never, never>,
Record<never, never>,
| never
>,
'/import/readlist': RouteRecordInfo<
'/import/readlist',
'/import/readlist',
Record<never, never>,
Record<never, never>,
| never
>,
'/login': RouteRecordInfo<
'/login',
'/login',
Record<never, never>,
Record<never, never>,
| never
>,
'/media/analysis': RouteRecordInfo<
'/media/analysis',
'/media/analysis',
Record<never, never>,
Record<never, never>,
| never
>,
'/media/duplicate-files': RouteRecordInfo<
'/media/duplicate-files',
'/media/duplicate-files',
Record<never, never>,
Record<never, never>,
| never
>,
'/media/duplicate-pages/known': RouteRecordInfo<
'/media/duplicate-pages/known',
'/media/duplicate-pages/known',
Record<never, never>,
Record<never, never>,
| never
>,
'/media/duplicate-pages/unknown': RouteRecordInfo<
'/media/duplicate-pages/unknown',
'/media/duplicate-pages/unknown',
Record<never, never>,
Record<never, never>,
| never
>,
'/media/missing-posters': RouteRecordInfo<
'/media/missing-posters',
'/media/missing-posters',
Record<never, never>,
Record<never, never>,
| never
>,
'/server/activity': RouteRecordInfo<
'/server/activity',
'/server/activity',
Record<never, never>,
Record<never, never>,
| never
>,
'/server/announcements': RouteRecordInfo<
'/server/announcements',
'/server/announcements',
Record<never, never>,
Record<never, never>,
| never
>,
'/server/metrics': RouteRecordInfo<
'/server/metrics',
'/server/metrics',
Record<never, never>,
Record<never, never>,
| never
>,
'/server/settings': RouteRecordInfo<
'/server/settings',
'/server/settings',
Record<never, never>,
Record<never, never>,
| never
>,
'/server/ui': RouteRecordInfo<
'/server/ui',
'/server/ui',
Record<never, never>,
Record<never, never>,
| never
>,
'/server/updates': RouteRecordInfo<
'/server/updates',
'/server/updates',
Record<never, never>,
Record<never, never>,
| never
>,
'/server/users': RouteRecordInfo<
'/server/users',
'/server/users',
Record<never, never>,
Record<never, never>,
| never
>,
'/startup': RouteRecordInfo<
'/startup',
'/startup',
Record<never, never>,
Record<never, never>,
| never
>,
}
/**
* Route file to route info map by unplugin-vue-router.
* Used by the volar plugin to automatically type useRoute()
* Used by the \`sfc-typed-router\` Volar plugin to automatically type \`useRoute()\`.
*
* Each key is a file path relative to the project root with 2 properties:
* - routes: union of route names of the possible routes when in this page (passed to useRoute<...>())
@ -57,110 +212,160 @@ declare module 'vue-router/auto-routes' {
*/
export interface _RouteFileInfoMap {
'src/pages/index.vue': {
routes: '/'
views: never
routes:
| '/'
views:
| never
}
'src/pages/[...path].vue': {
routes: '/[...path]'
views: never
routes:
| '/[...path]'
views:
| never
}
'src/pages/account/activity.vue': {
routes: '/account/activity'
views: never
routes:
| '/account/activity'
views:
| never
}
'src/pages/account/api-keys.vue': {
routes: '/account/api-keys'
views: never
routes:
| '/account/api-keys'
views:
| never
}
'src/pages/account/details.vue': {
routes: '/account/details'
views: never
routes:
| '/account/details'
views:
| never
}
'src/pages/account/ui.vue': {
routes: '/account/ui'
views: never
routes:
| '/account/ui'
views:
| never
}
'src/pages/claim.vue': {
routes: '/claim'
views: never
routes:
| '/claim'
views:
| never
}
'src/pages/error.vue': {
routes: '/error'
views: never
routes:
| '/error'
views:
| never
}
'src/pages/history.vue': {
routes: '/history'
views: never
routes:
| '/history'
views:
| never
}
'src/pages/import/books.vue': {
routes: '/import/books'
views: never
routes:
| '/import/books'
views:
| never
}
'src/pages/import/readlist.vue': {
routes: '/import/readlist'
views: never
routes:
| '/import/readlist'
views:
| never
}
'src/pages/login.vue': {
routes: '/login'
views: never
routes:
| '/login'
views:
| never
}
'src/pages/media/analysis.vue': {
routes: '/media/analysis'
views: never
routes:
| '/media/analysis'
views:
| never
}
'src/pages/media/duplicate-files.vue': {
routes: '/media/duplicate-files'
views: never
routes:
| '/media/duplicate-files'
views:
| never
}
'src/pages/media/duplicate-pages/known.vue': {
routes: '/media/duplicate-pages/known'
views: never
routes:
| '/media/duplicate-pages/known'
views:
| never
}
'src/pages/media/duplicate-pages/unknown.vue': {
routes: '/media/duplicate-pages/unknown'
views: never
routes:
| '/media/duplicate-pages/unknown'
views:
| never
}
'src/pages/media/missing-posters.vue': {
routes: '/media/missing-posters'
views: never
routes:
| '/media/missing-posters'
views:
| never
}
'src/pages/server/activity.vue': {
routes: '/server/activity'
views: never
routes:
| '/server/activity'
views:
| never
}
'src/pages/server/announcements.vue': {
routes: '/server/announcements'
views: never
routes:
| '/server/announcements'
views:
| never
}
'src/pages/server/metrics.vue': {
routes: '/server/metrics'
views: never
routes:
| '/server/metrics'
views:
| never
}
'src/pages/server/settings.vue': {
routes: '/server/settings'
views: never
routes:
| '/server/settings'
views:
| never
}
'src/pages/server/ui.vue': {
routes: '/server/ui'
views: never
routes:
| '/server/ui'
views:
| never
}
'src/pages/server/updates.vue': {
routes: '/server/updates'
views: never
routes:
| '/server/updates'
views:
| never
}
'src/pages/server/users.vue': {
routes: '/server/users'
views: never
routes:
| '/server/users'
views:
| never
}
'src/pages/startup.vue': {
routes: '/startup'
views: never
routes:
| '/startup'
views:
| never
}
}
/**
* Get a union of possible route names in a certain route component file.
* Used by the volar plugin to automatically type useRoute()
* Used by the \`sfc-typed-router\` Volar plugin to automatically type \`useRoute()\`.
*
* @internal
*/

View file

@ -17,6 +17,7 @@ import { defineConfig } from 'vite'
import { fileURLToPath, URL } from 'node:url'
import { storybookTest } from '@storybook/addon-vitest/vitest-plugin'
import * as path from 'path'
import { playwright } from '@vitest/browser-playwright'
const dirname =
typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url))
@ -119,7 +120,7 @@ export default defineConfig(({ mode }) => ({
browser: {
enabled: true,
headless: true,
provider: 'playwright',
provider: playwright(),
instances: [{ browser: 'chromium' }],
},
setupFiles: ['.storybook/vitest.setup.ts'],