From 2a83f1d666729c72df7e02be2d8665fbf2526825 Mon Sep 17 00:00:00 2001 From: Vben Date: Sun, 22 Sep 2024 21:35:40 +0800 Subject: [PATCH] feat: add playwright e2e testing framework (#4468) * feat: add playwright e2e testing framework --- .gitpod.yml | 2 +- README.ja-JP.md | 4 + README.md | 4 + README.zh-CN.md | 4 + docs/src/en/guide/essentials/development.md | 6 +- docs/src/guide/essentials/development.md | 6 +- .../eslint-config/src/configs/node.ts | 1 + .../eslint-config/src/custom-config.ts | 8 + package.json | 16 +- packages/@core/ui-kit/shadcn-ui/package.json | 8 +- .../slider-captcha/slider-captcha-action.vue | 1 + .../src/ui/authentication/forget-password.vue | 1 + .../common-ui/src/ui/authentication/login.vue | 1 + .../src/ui/authentication/register.vue | 1 + playground/__tests__/e2e/auth-login.spec.ts | 20 + playground/__tests__/e2e/common/auth.ts | 46 ++ playground/package.json | 5 +- playground/playwright.config.ts | 108 +++++ pnpm-lock.yaml | 392 ++++++------------ pnpm-workspace.yaml | 5 +- turbo.json | 1 + vitest.config.ts | 5 +- 22 files changed, 345 insertions(+), 300 deletions(-) create mode 100644 playground/__tests__/e2e/auth-login.spec.ts create mode 100644 playground/__tests__/e2e/common/auth.ts create mode 100644 playground/playwright.config.ts diff --git a/.gitpod.yml b/.gitpod.yml index 2192d953..fb75b433 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -3,4 +3,4 @@ ports: onOpen: open-preview tasks: - init: corepack enable && pnpm install - command: pnpm run dev + command: pnpm run dev:play diff --git a/README.ja-JP.md b/README.ja-JP.md index 3565eb4d..f1f90487 100644 --- a/README.ja-JP.md +++ b/README.ja-JP.md @@ -133,6 +133,10 @@ pnpm build Paypal Me +## スター歴史 + +[![Star History Chart](https://api.star-history.com/svg?repos=vbenjs/vue-vben-admin&type=Date)](https://star-history.com/#vbenjs/vue-vben-admin&Date) + ## 貢献者 diff --git a/README.md b/README.md index 45f75501..727e8df2 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,10 @@ If you think this project is helpful to you, you can help the author buy a cup o Paypal Me +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=vbenjs/vue-vben-admin&type=Date)](https://star-history.com/#vbenjs/vue-vben-admin&Date) + ## Contributor diff --git a/README.zh-CN.md b/README.zh-CN.md index e65d5b0e..5ad579f5 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -132,6 +132,10 @@ pnpm build [CHANGELOG](https://github.com/vbenjs/vue-vben-admin/releases) +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=vbenjs/vue-vben-admin&type=Date)](https://star-history.com/#vbenjs/vue-vben-admin&Date) + ## Contributor diff --git a/docs/src/en/guide/essentials/development.md b/docs/src/en/guide/essentials/development.md index e8628b96..1e8a5e53 100644 --- a/docs/src/en/guide/essentials/development.md +++ b/docs/src/en/guide/essentials/development.md @@ -46,8 +46,6 @@ The execution command is: `pnpm run [script]` or `npm run [script]`. ```json { "scripts": { - // Install dependencies - "bootstrap": "pnpm install", // Build the project "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build", // Build the project with analysis @@ -107,9 +105,9 @@ The execution command is: `pnpm run [script]` or `npm run [script]`. // Package specification check "publint": "vsh publint", // Delete all node_modules, yarn.lock, package.lock.json, and reinstall dependencies - "reinstall": "pnpm clean --del-lock && pnpm bootstrap", + "reinstall": "pnpm clean --del-lock && pnpm install", // Run vitest unit tests - "test:unit": "vitest", + "test:unit": "vitest run --dom", // Update project dependencies "update:deps": " pnpm update --latest --recursive", // Changeset generation and versioning diff --git a/docs/src/guide/essentials/development.md b/docs/src/guide/essentials/development.md index ff731a2d..4b565d80 100644 --- a/docs/src/guide/essentials/development.md +++ b/docs/src/guide/essentials/development.md @@ -46,8 +46,6 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如 ```json { "scripts": { - // 安装依赖 - "bootstrap": "pnpm install", // 构建项目 "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build", // 构建项目并分析 @@ -107,9 +105,9 @@ npm 脚本是项目常见的配置,用于执行一些常见的任务,比如 // 包规范检查 "publint": "vsh publint", // 删除所有的node_modules、yarn.lock、package.lock.json,重新安装依赖 - "reinstall": "pnpm clean --del-lock && pnpm bootstrap", + "reinstall": "pnpm clean --del-lock && pnpm install", // 运行 vitest 单元测试 - "test:unit": "vitest", + "test:unit": "vitest run --dom", // 更新项目依赖 "update:deps": " pnpm update --latest --recursive", // changeset生成提交集 diff --git a/internal/lint-configs/eslint-config/src/configs/node.ts b/internal/lint-configs/eslint-config/src/configs/node.ts index 56426d11..fa960d85 100644 --- a/internal/lint-configs/eslint-config/src/configs/node.ts +++ b/internal/lint-configs/eslint-config/src/configs/node.ts @@ -24,6 +24,7 @@ export async function node(): Promise { 'vite', '@vue/test-utils', '@vben/tailwind-config', + '@playwright/test', ], }, ], diff --git a/internal/lint-configs/eslint-config/src/custom-config.ts b/internal/lint-configs/eslint-config/src/custom-config.ts index 4cdf8d60..d684eb23 100644 --- a/internal/lint-configs/eslint-config/src/custom-config.ts +++ b/internal/lint-configs/eslint-config/src/custom-config.ts @@ -134,6 +134,14 @@ const customConfig: Linter.Config[] = [ 'unicorn/prefer-module': 'off', }, }, + { + files: ['**/**/playwright.config.ts'], + rules: { + 'n/prefer-global/buffer': 'off', + 'n/prefer-global/process': 'off', + 'no-console': 'off', + }, + }, { files: ['internal/**/**'], rules: { diff --git a/package.json b/package.json index e0409a10..bf01c13c 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,10 @@ }, "type": "module", "scripts": { - "bootstrap": "pnpm install", "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 turbo build", "build:analyze": "turbo build:analyze", - "build:docker": "./build-local-docker-image.sh", "build:antd": "pnpm run build --filter=@vben/web-antd", + "build:docker": "./build-local-docker-image.sh", "build:docs": "pnpm run build --filter=@vben/docs", "build:ele": "pnpm run build --filter=@vben/web-ele", "build:naive": "pnpm run build --filter=@vben/web-naive", @@ -55,15 +54,16 @@ "prepare": "is-ci || husky", "preview": "turbo-run preview", "publint": "vsh publint", - "reinstall": "pnpm clean --del-lock && pnpm bootstrap", - "test:unit": "vitest", + "reinstall": "pnpm clean --del-lock && pnpm install", + "test:unit": "vitest run --dom", + "test:e2e": "turbo run test:e2e", "update:deps": "pnpm update --latest --recursive", "version": "pnpm exec changeset version && pnpm install --no-frozen-lockfile" }, "devDependencies": { "@changesets/changelog-github": "catalog:", "@changesets/cli": "catalog:", - "@types/jsdom": "catalog:", + "@playwright/test": "catalog:", "@types/node": "catalog:", "@vben/commitlint-config": "workspace:*", "@vben/eslint-config": "workspace:*", @@ -80,10 +80,11 @@ "autoprefixer": "catalog:", "cross-env": "catalog:", "cspell": "catalog:", + "happy-dom": "catalog:", "husky": "catalog:", "is-ci": "catalog:", - "jsdom": "catalog:", "lint-staged": "catalog:", + "playwright": "catalog:", "rimraf": "catalog:", "tailwindcss": "catalog:", "turbo": "catalog:", @@ -113,8 +114,7 @@ }, "neverBuiltDependencies": [ "canvas", - "node-gyp", - "playwright" + "node-gyp" ] } } diff --git a/packages/@core/ui-kit/shadcn-ui/package.json b/packages/@core/ui-kit/shadcn-ui/package.json index a08952cc..1150065e 100644 --- a/packages/@core/ui-kit/shadcn-ui/package.json +++ b/packages/@core/ui-kit/shadcn-ui/package.json @@ -1,6 +1,8 @@ { "name": "@vben-core/shadcn-ui", "version": "5.3.0", + "#main": "./dist/index.mjs", + "#module": "./dist/index.mjs", "homepage": "https://github.com/vbenjs/vue-vben-admin", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "repository": { @@ -20,16 +22,14 @@ "sideEffects": [ "**/*.css" ], - "#main": "./dist/index.mjs", "main": "./src/index.ts", - "#module": "./dist/index.mjs", "module": "./src/index.ts", "exports": { ".": { "types": "./src/index.ts", "development": "./src/index.ts", - "//default": "./dist/index.mjs", - "default": "./src/index.ts" + "default": "./src/index.ts", + "//default": "./dist/index.mjs" } }, "publishConfig": { diff --git a/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue b/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue index fc002bd8..fe0b5aaa 100644 --- a/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue +++ b/packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue @@ -51,6 +51,7 @@ defineExpose({ }" :style="style" class="bg-background dark:bg-accent absolute left-0 top-0 flex h-full cursor-move items-center justify-center px-3.5 shadow-md" + name="captcha-action" > diff --git a/packages/effects/common-ui/src/ui/authentication/forget-password.vue b/packages/effects/common-ui/src/ui/authentication/forget-password.vue index c6a7720f..e8c2cf9e 100644 --- a/packages/effects/common-ui/src/ui/authentication/forget-password.vue +++ b/packages/effects/common-ui/src/ui/authentication/forget-password.vue @@ -95,6 +95,7 @@ function goToLogin() { :class="{ 'cursor-wait': loading, }" + aria-label="submit" class="mt-2 w-full" @click="handleSubmit" > diff --git a/packages/effects/common-ui/src/ui/authentication/login.vue b/packages/effects/common-ui/src/ui/authentication/login.vue index a55b71a5..68d74522 100644 --- a/packages/effects/common-ui/src/ui/authentication/login.vue +++ b/packages/effects/common-ui/src/ui/authentication/login.vue @@ -129,6 +129,7 @@ onMounted(() => { 'cursor-wait': loading, }" :loading="loading" + aria-label="login" class="w-full" @click="handleSubmit" > diff --git a/packages/effects/common-ui/src/ui/authentication/register.vue b/packages/effects/common-ui/src/ui/authentication/register.vue index ca745bb5..e4eadd51 100644 --- a/packages/effects/common-ui/src/ui/authentication/register.vue +++ b/packages/effects/common-ui/src/ui/authentication/register.vue @@ -97,6 +97,7 @@ function goToLogin() { 'cursor-wait': loading, }" :loading="loading" + aria-label="register" class="mt-2 w-full" @click="handleSubmit" > diff --git a/playground/__tests__/e2e/auth-login.spec.ts b/playground/__tests__/e2e/auth-login.spec.ts new file mode 100644 index 00000000..bb6cd289 --- /dev/null +++ b/playground/__tests__/e2e/auth-login.spec.ts @@ -0,0 +1,20 @@ +import { expect, test } from '@playwright/test'; + +import { authLogin } from './common/auth'; + +test.beforeEach(async ({ page }) => { + await page.goto('/'); +}); + +test.describe('Auth Login Page Tests', () => { + test('check title and page elements', async ({ page }) => { + // 获取页面标题并断言标题包含 'Vben Admin' + const title = await page.title(); + expect(title).toContain('Vben Admin'); + }); + + // 测试用例: 成功登录 + test('should successfully login with valid credentials', async ({ page }) => { + await authLogin(page); + }); +}); diff --git a/playground/__tests__/e2e/common/auth.ts b/playground/__tests__/e2e/common/auth.ts new file mode 100644 index 00000000..26b526fd --- /dev/null +++ b/playground/__tests__/e2e/common/auth.ts @@ -0,0 +1,46 @@ +import type { Page } from '@playwright/test'; + +import { expect } from '@playwright/test'; + +export async function authLogin(page: Page) { + // 确保登录表单正常 + const usernameInput = await page.locator(`input[name='username']`); + await expect(usernameInput).toBeVisible(); + + const passwordInput = await page.locator(`input[name='password']`); + await expect(passwordInput).toBeVisible(); + + const sliderCaptcha = await page.locator(`div[name='captcha']`); + const sliderCaptchaAction = await page.locator(`div[name='captcha-action']`); + await expect(sliderCaptcha).toBeVisible(); + await expect(sliderCaptchaAction).toBeVisible(); + + // 拖动验证码滑块 + // 获取拖动按钮的位置 + const sliderCaptchaBox = await sliderCaptcha.boundingBox(); + if (!sliderCaptchaBox) throw new Error('滑块未找到'); + + const actionBoundingBox = await sliderCaptchaAction.boundingBox(); + if (!actionBoundingBox) throw new Error('要拖动的按钮未找到'); + + // 计算起始位置和目标位置 + const startX = actionBoundingBox.x + actionBoundingBox.width / 2; // div 中心的 x 坐标 + const startY = actionBoundingBox.y + actionBoundingBox.height / 2; // div 中心的 y 坐标 + + const targetX = startX + sliderCaptchaBox.width + actionBoundingBox.width; // 向右拖动容器的宽度 + const targetY = startY; // y 坐标保持不变 + + // 模拟鼠标拖动 + await page.mouse.move(startX, startY); // 移动到 action 的中心 + await page.mouse.down(); // 按下鼠标 + await page.mouse.move(targetX, targetY, { steps: 20 }); // 拖动到目标位置 + await page.mouse.up(); // 松开鼠标 + + // 在拖动后进行断言,检查action是否在预期位置, + const newActionBoundingBox = await sliderCaptchaAction.boundingBox(); + expect(newActionBoundingBox?.x).toBeGreaterThan(actionBoundingBox.x); + + // 到这里已经校验成功,点击进行登录 + await page.waitForTimeout(300); + await page.getByRole('button', { name: 'login' }).click(); +} diff --git a/playground/package.json b/playground/package.json index 09cf5e65..5a4aed27 100644 --- a/playground/package.json +++ b/playground/package.json @@ -20,7 +20,10 @@ "build:analyze": "pnpm vite build --mode analyze", "dev": "pnpm vite --mode development", "preview": "vite preview", - "typecheck": "vue-tsc --noEmit --skipLibCheck" + "typecheck": "vue-tsc --noEmit --skipLibCheck", + "test:e2e": "playwright test", + "test:e2e-ui": "playwright test --ui", + "test:e2e-codegen": "playwright codegen" }, "imports": { "#/*": "./src/*" diff --git a/playground/playwright.config.ts b/playground/playwright.config.ts new file mode 100644 index 00000000..ca0c9085 --- /dev/null +++ b/playground/playwright.config.ts @@ -0,0 +1,108 @@ +import type { PlaywrightTestConfig } from '@playwright/test'; + +import { devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +const config: PlaywrightTestConfig = { + expect: { + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 5000, + }, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + outputDir: 'node_modules/.e2e/test-results/', + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + }, + }, + // { + // name: 'firefox', + // use: { + // ...devices['Desktop Firefox'], + // }, + // }, + // { + // name: 'webkit', + // use: { + // ...devices['Desktop Safari'], + // }, + // }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { + // ...devices['Pixel 5'], + // }, + // }, + // { + // name: 'Mobile Safari', + // use: { + // ...devices['iPhone 12'], + // }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { + // channel: 'msedge', + // }, + // }, + // { + // name: 'Google Chrome', + // use: { + // channel: 'chrome', + // }, + // }, + ], + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: [ + ['list'], + ['html', { outputFolder: 'node_modules/.e2e/test-results' }], + ], + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + testDir: './__tests__/e2e', + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 0, + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:5555', + /* Only on CI systems run the tests headless */ + headless: !!process.env.CI, + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'retain-on-failure', + }, + + /* Run your local dev server before starting the tests */ + webServer: { + command: process.env.CI ? 'pnpm preview --port 5555' : 'pnpm dev', + port: 5555, + reuseExistingServer: !process.env.CI, + }, + + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, +}; + +export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3104b113..db41406f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,10 +38,10 @@ catalogs: version: 4.1.2 '@intlify/core-base': specifier: ^10.0.2 - version: 10.0.2 + version: 10.0.3 '@intlify/unplugin-vue-i18n': specifier: ^5.0.0 - version: 5.0.0 + version: 5.2.0 '@jspm/generator': specifier: ^2.3.1 version: 2.3.1 @@ -51,6 +51,9 @@ catalogs: '@nolebase/vitepress-plugin-git-changelog': specifier: ^2.5.0 version: 2.5.0 + '@playwright/test': + specifier: ^1.47.2 + version: 1.47.2 '@radix-icons/vue': specifier: ^1.0.0 version: 1.0.0 @@ -81,9 +84,6 @@ catalogs: '@types/html-minifier-terser': specifier: ^7.0.2 version: 7.0.2 - '@types/jsdom': - specifier: ^21.1.7 - version: 21.1.7 '@types/jsonwebtoken': specifier: ^9.0.7 version: 9.0.7 @@ -270,6 +270,9 @@ catalogs: h3: specifier: ^1.12.0 version: 1.12.0 + happy-dom: + specifier: ^15.7.4 + version: 15.7.4 html-minifier-terser: specifier: ^7.2.0 version: 7.2.0 @@ -279,9 +282,6 @@ catalogs: is-ci: specifier: ^3.0.1 version: 3.0.1 - jsdom: - specifier: ^25.0.1 - version: 25.0.1 jsonc-eslint-parser: specifier: ^2.4.0 version: 2.4.0 @@ -321,6 +321,9 @@ catalogs: pkg-types: specifier: ^1.2.0 version: 1.2.0 + playwright: + specifier: ^1.47.2 + version: 1.47.2 postcss: specifier: ^8.4.47 version: 8.4.47 @@ -335,7 +338,7 @@ catalogs: version: 16.1.0 postcss-preset-env: specifier: ^10.0.3 - version: 10.0.3 + version: 10.0.4 postcss-scss: specifier: ^4.0.9 version: 4.0.9 @@ -461,7 +464,7 @@ catalogs: version: 9.4.3 vue-i18n: specifier: ^10.0.2 - version: 10.0.2 + version: 10.0.3 vue-router: specifier: ^4.4.5 version: 4.4.5 @@ -494,9 +497,9 @@ importers: '@changesets/cli': specifier: 'catalog:' version: 2.27.8 - '@types/jsdom': + '@playwright/test': specifier: 'catalog:' - version: 21.1.7 + version: 1.47.2 '@types/node': specifier: 'catalog:' version: 22.5.5 @@ -545,18 +548,21 @@ importers: cspell: specifier: 'catalog:' version: 8.14.4 + happy-dom: + specifier: 'catalog:' + version: 15.7.4 husky: specifier: 'catalog:' version: 9.1.6 is-ci: specifier: 'catalog:' version: 3.0.1 - jsdom: - specifier: 'catalog:' - version: 25.0.1 lint-staged: specifier: 'catalog:' version: 15.2.10 + playwright: + specifier: 'catalog:' + version: 1.47.2 rimraf: specifier: 'catalog:' version: 6.0.1 @@ -577,7 +583,7 @@ importers: version: 5.4.7(@types/node@22.5.5)(less@4.2.0)(sass@1.79.3)(terser@5.33.0) vitest: specifier: 'catalog:' - version: 2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0) + version: 2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0) vue: specifier: 3.5.7 version: 3.5.7(typescript@5.6.2) @@ -923,7 +929,7 @@ importers: version: 4.1.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6)) eslint-plugin-vitest: specifier: 'catalog:' - version: 0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)) + version: 0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)) eslint-plugin-vue: specifier: 'catalog:' version: 9.28.0(eslint@9.11.0(jiti@1.21.6)) @@ -1066,7 +1072,7 @@ importers: version: 16.1.0(postcss@8.4.47) postcss-preset-env: specifier: 'catalog:' - version: 10.0.3(postcss@8.4.47) + version: 10.0.4(postcss@8.4.47) tailwindcss: specifier: 'catalog:' version: 3.4.12 @@ -1094,7 +1100,7 @@ importers: dependencies: '@intlify/unplugin-vue-i18n': specifier: 'catalog:' - version: 5.0.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2)) + version: 5.2.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2)) '@jspm/generator': specifier: 'catalog:' version: 2.3.1 @@ -1620,7 +1626,7 @@ importers: dependencies: '@intlify/core-base': specifier: 'catalog:' - version: 10.0.2 + version: 10.0.3 '@vben-core/composables': specifier: workspace:* version: link:../@core/composables @@ -1629,7 +1635,7 @@ importers: version: 3.5.7(typescript@5.6.2) vue-i18n: specifier: 'catalog:' - version: 10.0.2(vue@3.5.7(typescript@5.6.2)) + version: 10.0.3(vue@3.5.7(typescript@5.6.2)) packages/preferences: dependencies: @@ -3082,8 +3088,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-light-dark-function@2.0.2': - resolution: {integrity: sha512-QAWWDJtJ7ywzhaMe09QwhjhuwB0XN04fW1MFwoEJMcYyiQub4a57mVFV+ngQEekUhsqe/EtKVCzyOx4q3xshag==} + '@csstools/postcss-light-dark-function@2.0.3': + resolution: {integrity: sha512-8+lV5IKySJGtBXOwRVBPzwnTsVGKdsjnszsC/21DdKI+F279HcOfWgwTNpE0+NvX78bTlDD2kMqTaJ4T0VYzvA==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -3915,28 +3921,28 @@ packages: vue-i18n: optional: true - '@intlify/core-base@10.0.2': - resolution: {integrity: sha512-0Ewg801c3f5ukktJVi/BVwxPVbX2lvGflK0G6QxTatbWaMt2YA1QheDGTXS2Nz/PupSDPNOabADsTG9LCoKA1A==} + '@intlify/core-base@10.0.3': + resolution: {integrity: sha512-ysJnTGDtuXPa6R2Ii4JIvfMVvDahUUny3aY8+P4r6/0TYHkblgzIMjV6cAn60em67AB0M7OWNAdcAVfWWeN8Qg==} engines: {node: '>= 16'} '@intlify/message-compiler@10.0.0': resolution: {integrity: sha512-OcaWc63NC/9p1cMdgoNKBj4d61BH8sUW1Hfs6YijTd9656ZR4rNqXAlRnBrfS5ABq0vjQjpa8VnyvH9hK49yBw==} engines: {node: '>= 16'} - '@intlify/message-compiler@10.0.2': - resolution: {integrity: sha512-PHFnGFEKknuk+RwcafKAjS537Ln0ptSfqmvVdsHKWBytTbiKqZZFX57pmfio2ln+ZLeHuyudcqbTi1zGJUNIcA==} + '@intlify/message-compiler@10.0.3': + resolution: {integrity: sha512-KC2fG8nCzSYmXjHptEt6i/xM3k6S2szsPaHDCRgWKEYAbeHe6JFm6X4KRw3Csy112A8CxpavMi1dh3h7khwV5w==} engines: {node: '>= 16'} '@intlify/shared@10.0.0': resolution: {integrity: sha512-6ngLfI7DOTew2dcF9WMJx+NnMWghMBhIiHbGg+wRvngpzD5KZJZiJVuzMsUQE1a5YebEmtpTEfUrDp/NqVGdiw==} engines: {node: '>= 16'} - '@intlify/shared@10.0.2': - resolution: {integrity: sha512-sIF9cqB0CwUWLtDb1QDnl4PlTggE4GSnR1aA44thT9Y18rUVdWO2z4w2Ow6O60tsdNzC0WnUd6fU0VXyKQ6WBA==} + '@intlify/shared@10.0.3': + resolution: {integrity: sha512-PWxrCb6fDlnoGLnXLlWu6d7o/HdWACB9TjRnpLro+9uyfqgWA9hvqg5vekcPRyraTieV5srCbTk/ldYw9V3LHw==} engines: {node: '>= 16'} - '@intlify/unplugin-vue-i18n@5.0.0': - resolution: {integrity: sha512-bIK9DGirnD4lrcTB8aVRIfjafJuXtsRO4uisMC+AmkoQCyFgtgG5eUxzKZ7SCwLd81Y0iWbr2FdSeHJfby369w==} + '@intlify/unplugin-vue-i18n@5.2.0': + resolution: {integrity: sha512-pmRiPY2Nj9mmSrixT69aO45XxGUr5fDBy/IIw4ajLlDTJm5TSmQKA5YNdsH0uxVDCPWy5tlQrF18hkDwI7UJvg==} engines: {node: '>= 18'} peerDependencies: petite-vue-i18n: '*' @@ -3948,8 +3954,8 @@ packages: vue-i18n: optional: true - '@intlify/vue-i18n-extensions@6.2.0': - resolution: {integrity: sha512-RN6Jg80NxY/yv408zFQz/pSLh6mw7cFU/WoykzNsb24L8H0YvktOkdLtJSZcKgRiAlbK0MpK4n4nG2n8FxHiNw==} + '@intlify/vue-i18n-extensions@7.0.0': + resolution: {integrity: sha512-MtvfJnb4aklpCU5Q/dkWkBT/vGsp3qERiPIwtTq5lX4PCLHtUprAJZp8wQj5ZcwDaFCU7+yVMjYbeXpIf927cA==} engines: {node: '>= 18'} peerDependencies: '@intlify/shared': ^9.0.0 || ^10.0.0 @@ -4182,6 +4188,11 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@playwright/test@1.47.2': + resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==} + engines: {node: '>=18'} + hasBin: true + '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -4552,9 +4563,6 @@ packages: '@types/http-proxy@1.17.15': resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} - '@types/jsdom@21.1.7': - resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -4624,9 +4632,6 @@ packages: '@types/sortablejs@1.15.8': resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -4992,10 +4997,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} - agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -5787,10 +5788,6 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - cssstyle@4.1.0: - resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} - engines: {node: '>=18'} - csstype@3.0.11: resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} @@ -5810,10 +5807,6 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} - data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -5890,9 +5883,6 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -6640,6 +6630,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -6829,6 +6824,10 @@ packages: h3@1.12.0: resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==} + happy-dom@15.7.4: + resolution: {integrity: sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==} + engines: {node: '>=18.0.0'} + has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -6893,10 +6892,6 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} @@ -6931,10 +6926,6 @@ packages: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - http-shutdown@1.2.2: resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -6943,10 +6934,6 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} - engines: {node: '>= 14'} - httpxy@0.1.5: resolution: {integrity: sha512-hqLDO+rfststuyEUTWObQK6zHEEmZ/kaIP2/zclGGZn6X8h/ESTWg+WKecQ/e5k4nPswjzZD+q2VqZIbr15CoQ==} @@ -7198,9 +7185,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -7340,15 +7324,6 @@ packages: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} - jsdom@25.0.1: - resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -7976,9 +7951,6 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.12: - resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} - nypm@0.3.11: resolution: {integrity: sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==} engines: {node: ^14.16.0 || >=16.10.0} @@ -8261,6 +8233,16 @@ packages: pkg-types@1.2.0: resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} + playwright-core@1.47.2: + resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.47.2: + resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==} + engines: {node: '>=18'} + hasBin: true + please-upgrade-node@3.2.0: resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} @@ -8598,8 +8580,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-preset-env@10.0.3: - resolution: {integrity: sha512-1nrZ4IeBXEEj53IMoRKE+k/Ub6nQb3gFjaxTeyUNG5zv3JQclFDY5GKKhAi3nsa1lnPMWgzQX+/1y6wUt2+I7Q==} + postcss-preset-env@10.0.4: + resolution: {integrity: sha512-FKwHOV7NHxu7PNhAhhOSwbAQrHTcvF/yfrObNMr4iTljmPYzsM7eRr9sYhSFq2if1GahrAv1SmmhFrcNWdFIuA==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -9063,9 +9045,6 @@ packages: resolution: {integrity: sha512-G7689wvCM0szMFXUAhi3GfNGcSPlndg077cdRWoq7UegOAwfU2MJ0jD7s7jB+2ppKA75Kr/O0HwAP9+rRdBctg==} engines: {node: ^14.13.1 || >=16.0.0} - rrweb-cssom@0.7.1: - resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} - run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -9102,10 +9081,6 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - scroll-into-view-if-needed@2.2.31: resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} @@ -9562,9 +9537,6 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.6.2: resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} engines: {node: '>=12.20'} @@ -9674,13 +9646,6 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tldts-core@6.1.47: - resolution: {integrity: sha512-6SWyFMnlst1fEt7GQVAAu16EGgFK0cLouH/2Mk6Ftlwhv3Ol40L0dlpGMcnnNiiOMyD2EV/aF3S+U2nKvvLvrA==} - - tldts@6.1.47: - resolution: {integrity: sha512-R/K2tZ5MiY+mVrnSkNJkwqYT2vUv1lcT6wJvd2emGaMJ7PHUGRY4e3tUsdFCXgqxi2QgbHjL3yJgXCo40v9Hxw==} - hasBin: true - tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -9701,20 +9666,12 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tough-cookie@5.0.0: - resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} - engines: {node: '>=16'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} - engines: {node: '>=18'} - treemate@0.3.11: resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==} @@ -10202,8 +10159,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - vue-i18n@10.0.2: - resolution: {integrity: sha512-osoes79ecpqdzYYhywp/pDLlPMoyQ5MHJvjAitQLmXiaCj/ejC8YIeWIwIsDdqWcvkrVFmROYDLcGgGCVn7g0Q==} + vue-i18n@10.0.3: + resolution: {integrity: sha512-8ul2S4Hy9orKs7eOlkw/zqnVu98GttUdyIMRyjoMpv6hFPxnybgBLdep/UCmdan5kUHyxqMnr2cGHTBuPBYJaw==} engines: {node: '>= 16'} peerDependencies: vue: 3.5.7 @@ -10238,10 +10195,6 @@ packages: peerDependencies: vue: 3.5.7 - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} @@ -10266,14 +10219,14 @@ packages: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} - whatwg-url@14.0.0: - resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} - engines: {node: '>=18'} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -10390,18 +10343,6 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -10410,13 +10351,6 @@ packages: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -12126,7 +12060,7 @@ snapshots: postcss: 8.4.47 postcss-selector-parser: 6.1.2 - '@csstools/postcss-light-dark-function@2.0.2(postcss@8.4.47)': + '@csstools/postcss-light-dark-function@2.0.3(postcss@8.4.47)': dependencies: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 @@ -12683,7 +12617,7 @@ snapshots: dependencies: '@swc/helpers': 0.5.13 - '@intlify/bundle-utils@9.0.0-beta.0(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))': + '@intlify/bundle-utils@9.0.0-beta.0(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))': dependencies: '@intlify/message-compiler': 10.0.0 '@intlify/shared': 10.0.0 @@ -12695,33 +12629,33 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.2.3 optionalDependencies: - vue-i18n: 10.0.2(vue@3.5.7(typescript@5.6.2)) + vue-i18n: 10.0.3(vue@3.5.7(typescript@5.6.2)) - '@intlify/core-base@10.0.2': + '@intlify/core-base@10.0.3': dependencies: - '@intlify/message-compiler': 10.0.2 - '@intlify/shared': 10.0.2 + '@intlify/message-compiler': 10.0.3 + '@intlify/shared': 10.0.3 '@intlify/message-compiler@10.0.0': dependencies: '@intlify/shared': 10.0.0 source-map-js: 1.2.1 - '@intlify/message-compiler@10.0.2': + '@intlify/message-compiler@10.0.3': dependencies: - '@intlify/shared': 10.0.2 + '@intlify/shared': 10.0.3 source-map-js: 1.2.1 '@intlify/shared@10.0.0': {} - '@intlify/shared@10.0.2': {} + '@intlify/shared@10.0.3': {} - '@intlify/unplugin-vue-i18n@5.0.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))': + '@intlify/unplugin-vue-i18n@5.2.0(@vue/compiler-dom@3.5.8)(eslint@9.11.0(jiti@1.21.6))(rollup@4.22.4)(typescript@5.6.2)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.0(jiti@1.21.6)) - '@intlify/bundle-utils': 9.0.0-beta.0(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2))) + '@intlify/bundle-utils': 9.0.0-beta.0(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2))) '@intlify/shared': 10.0.0 - '@intlify/vue-i18n-extensions': 6.2.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2)) + '@intlify/vue-i18n-extensions': 7.0.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2)) '@rollup/pluginutils': 5.1.0(rollup@4.22.4) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) @@ -12729,14 +12663,13 @@ snapshots: fast-glob: 3.3.2 js-yaml: 4.1.0 json5: 2.2.3 - mlly: 1.7.1 pathe: 1.1.2 picocolors: 1.1.0 source-map-js: 1.2.1 unplugin: 1.14.1 vue: 3.5.7(typescript@5.6.2) optionalDependencies: - vue-i18n: 10.0.2(vue@3.5.7(typescript@5.6.2)) + vue-i18n: 10.0.3(vue@3.5.7(typescript@5.6.2)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -12745,14 +12678,14 @@ snapshots: - typescript - webpack-sources - '@intlify/vue-i18n-extensions@6.2.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))': + '@intlify/vue-i18n-extensions@7.0.0(@intlify/shared@10.0.0)(@vue/compiler-dom@3.5.8)(vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)))(vue@3.5.7(typescript@5.6.2))': dependencies: '@babel/parser': 7.25.6 optionalDependencies: '@intlify/shared': 10.0.0 '@vue/compiler-dom': 3.5.8 vue: 3.5.7(typescript@5.6.2) - vue-i18n: 10.0.2(vue@3.5.7(typescript@5.6.2)) + vue-i18n: 10.0.3(vue@3.5.7(typescript@5.6.2)) '@ioredis/commands@1.2.0': {} @@ -13111,6 +13044,10 @@ snapshots: '@pkgr/core@0.1.1': {} + '@playwright/test@1.47.2': + dependencies: + playwright: 1.47.2 + '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -13534,12 +13471,6 @@ snapshots: dependencies: '@types/node': 22.5.5 - '@types/jsdom@21.1.7': - dependencies: - '@types/node': 22.5.5 - '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 - '@types/json-schema@7.0.15': {} '@types/jsonfile@6.1.4': @@ -13608,8 +13539,6 @@ snapshots: '@types/sortablejs@1.15.8': {} - '@types/tough-cookie@4.0.5': {} - '@types/trusted-types@2.0.7': {} '@types/unist@3.0.3': {} @@ -14113,12 +14042,6 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.1: - dependencies: - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 @@ -15070,10 +14993,6 @@ snapshots: dependencies: css-tree: 2.2.1 - cssstyle@4.1.0: - dependencies: - rrweb-cssom: 0.7.1 - csstype@3.0.11: {} csstype@3.1.3: {} @@ -15084,11 +15003,6 @@ snapshots: dargs@8.1.0: {} - data-urls@5.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 @@ -15139,8 +15053,6 @@ snapshots: decamelize@1.2.0: {} - decimal.js@10.4.3: {} - deep-eql@5.0.2: {} deep-extend@0.6.0: {} @@ -15770,13 +15682,13 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2) - eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)): + eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2)(vitest@2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)): dependencies: '@typescript-eslint/utils': 7.18.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2) eslint: 9.11.0(jiti@1.21.6) optionalDependencies: '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.0(jiti@1.21.6))(typescript@5.6.2) - vitest: 2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0) + vitest: 2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0) transitivePeerDependencies: - supports-color - typescript @@ -16092,6 +16004,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -16334,6 +16249,12 @@ snapshots: transitivePeerDependencies: - uWebSockets.js + happy-dom@15.7.4: + dependencies: + entities: 4.5.0 + webidl-conversions: 7.0.0 + whatwg-mimetype: 3.0.0 + has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -16392,10 +16313,6 @@ snapshots: hosted-git-info@2.8.9: {} - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - html-minifier-terser@6.1.0: dependencies: camel-case: 4.1.2 @@ -16452,13 +16369,6 @@ snapshots: transitivePeerDependencies: - supports-color - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - http-shutdown@1.2.2: {} https-proxy-agent@5.0.1: @@ -16468,13 +16378,6 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.5: - dependencies: - agent-base: 7.1.1 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - httpxy@0.1.5: {} human-id@1.0.2: {} @@ -16670,8 +16573,6 @@ snapshots: is-plain-object@5.0.0: {} - is-potential-custom-element-name@1.0.1: {} - is-reference@1.2.1: dependencies: '@types/estree': 1.0.6 @@ -16795,34 +16696,6 @@ snapshots: jsdoc-type-pratt-parser@4.1.0: {} - jsdom@25.0.1: - dependencies: - cssstyle: 4.1.0 - data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 - parse5: 7.1.2 - rrweb-cssom: 0.7.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 5.0.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - ws: 8.18.0 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -17553,8 +17426,6 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.12: {} - nypm@0.3.11: dependencies: citty: 0.1.6 @@ -17830,6 +17701,14 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 + playwright-core@1.47.2: {} + + playwright@1.47.2: + dependencies: + playwright-core: 1.47.2 + optionalDependencies: + fsevents: 2.3.2 + please-upgrade-node@3.2.0: dependencies: semver-compare: 1.0.0 @@ -18147,7 +18026,7 @@ snapshots: postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-preset-env@10.0.3(postcss@8.4.47): + postcss-preset-env@10.0.4(postcss@8.4.47): dependencies: '@csstools/postcss-cascade-layers': 5.0.0(postcss@8.4.47) '@csstools/postcss-color-function': 4.0.2(postcss@8.4.47) @@ -18161,7 +18040,7 @@ snapshots: '@csstools/postcss-ic-unit': 4.0.0(postcss@8.4.47) '@csstools/postcss-initial': 2.0.0(postcss@8.4.47) '@csstools/postcss-is-pseudo-class': 5.0.0(postcss@8.4.47) - '@csstools/postcss-light-dark-function': 2.0.2(postcss@8.4.47) + '@csstools/postcss-light-dark-function': 2.0.3(postcss@8.4.47) '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.4.47) '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.4.47) '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.4.47) @@ -18614,8 +18493,6 @@ snapshots: rotated-array-set@3.0.0: {} - rrweb-cssom@0.7.1: {} - run-applescript@7.0.0: {} run-parallel@1.2.0: @@ -18654,10 +18531,6 @@ snapshots: sax@1.4.1: optional: true - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - scroll-into-view-if-needed@2.2.31: dependencies: compute-scroll-into-view: 1.0.20 @@ -19183,8 +19056,6 @@ snapshots: csso: 5.0.5 picocolors: 1.1.0 - symbol-tree@3.2.4: {} - synckit@0.6.2: dependencies: tslib: 2.7.0 @@ -19311,12 +19182,6 @@ snapshots: tinyspy@3.0.2: {} - tldts-core@6.1.47: {} - - tldts@6.1.47: - dependencies: - tldts-core: 6.1.47 - tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -19331,20 +19196,12 @@ snapshots: totalist@3.0.1: {} - tough-cookie@5.0.0: - dependencies: - tldts: 6.1.47 - tr46@0.0.3: {} tr46@1.0.1: dependencies: punycode: 2.3.1 - tr46@5.0.0: - dependencies: - punycode: 2.3.1 - treemate@0.3.11: {} trim-lines@3.0.1: {} @@ -19896,7 +19753,7 @@ snapshots: - typescript - universal-cookie - vitest@2.1.1(@types/node@22.5.5)(jsdom@25.0.1)(less@4.2.0)(sass@1.79.3)(terser@5.33.0): + vitest@2.1.1(@types/node@22.5.5)(happy-dom@15.7.4)(less@4.2.0)(sass@1.79.3)(terser@5.33.0): dependencies: '@vitest/expect': 2.1.1 '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.7(@types/node@22.5.5)(less@4.2.0)(sass@1.79.3)(terser@5.33.0)) @@ -19919,7 +19776,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.5.5 - jsdom: 25.0.1 + happy-dom: 15.7.4 transitivePeerDependencies: - less - lightningcss @@ -19959,10 +19816,10 @@ snapshots: transitivePeerDependencies: - supports-color - vue-i18n@10.0.2(vue@3.5.7(typescript@5.6.2)): + vue-i18n@10.0.3(vue@3.5.7(typescript@5.6.2)): dependencies: - '@intlify/core-base': 10.0.2 - '@intlify/shared': 10.0.2 + '@intlify/core-base': 10.0.3 + '@intlify/shared': 10.0.3 '@vue/devtools-api': 6.6.4 vue: 3.5.7(typescript@5.6.2) @@ -20004,10 +19861,6 @@ snapshots: vooks: 0.2.12(vue@3.5.7(typescript@5.6.2)) vue: 3.5.7(typescript@5.6.2) - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - warning@4.0.3: dependencies: loose-envify: 1.4.0 @@ -20026,12 +19879,9 @@ snapshots: dependencies: iconv-lite: 0.6.3 - whatwg-mimetype@4.0.0: {} + whatwg-mimetype@3.0.0: {} - whatwg-url@14.0.0: - dependencies: - tr46: 5.0.0 - webidl-conversions: 7.0.0 + whatwg-mimetype@4.0.0: {} whatwg-url@5.0.0: dependencies: @@ -20231,16 +20081,10 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@8.18.0: {} - xdg-basedir@5.1.0: {} xml-name-validator@4.0.0: {} - xml-name-validator@5.0.0: {} - - xmlchars@2.2.0: {} - y18n@4.0.3: {} y18n@5.0.8: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c187a537..8a02c71c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -29,6 +29,7 @@ catalog: '@jspm/generator': ^2.3.1 '@manypkg/get-packages': ^2.2.2 '@nolebase/vitepress-plugin-git-changelog': ^2.5.0 + '@playwright/test': ^1.47.2 '@radix-icons/vue': ^1.0.0 '@stylistic/stylelint-plugin': ^3.0.1 '@tailwindcss/nesting': 0.0.0-insiders.565cd3e @@ -39,7 +40,6 @@ catalog: '@types/chalk': ^2.2.0 '@types/eslint': ^9.6.1 '@types/html-minifier-terser': ^7.0.2 - '@types/jsdom': ^21.1.7 '@types/jsonwebtoken': ^9.0.7 '@types/lodash.clonedeep': ^4.5.9 '@types/node': ^22.5.5 @@ -103,10 +103,10 @@ catalog: get-port: ^7.1.0 globals: ^15.9.0 h3: ^1.12.0 + happy-dom: ^15.7.4 html-minifier-terser: ^7.2.0 husky: ^9.1.6 is-ci: ^3.0.1 - jsdom: ^25.0.1 jsonc-eslint-parser: ^2.4.0 jsonwebtoken: ^9.0.2 lint-staged: ^15.2.10 @@ -121,6 +121,7 @@ catalog: pinia: 2.2.2 pinia-plugin-persistedstate: ^4.0.2 pkg-types: ^1.2.0 + playwright: ^1.47.2 postcss: ^8.4.47 postcss-antd-fixes: ^0.2.0 postcss-html: ^1.7.0 diff --git a/turbo.json b/turbo.json index 4d1014ca..a1d57e58 100644 --- a/turbo.json +++ b/turbo.json @@ -33,6 +33,7 @@ "stub": { "cache": false }, + "test:e2e": {}, "dev": { "dependsOn": [], "outputs": [], diff --git a/vitest.config.ts b/vitest.config.ts index cada073f..a10b5fa3 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,10 +1,11 @@ import Vue from '@vitejs/plugin-vue'; import VueJsx from '@vitejs/plugin-vue-jsx'; -import { defineConfig } from 'vitest/config'; +import { configDefaults, defineConfig } from 'vitest/config'; export default defineConfig({ plugins: [Vue(), VueJsx()], test: { - environment: 'jsdom', + environment: 'happy-dom', + exclude: [...configDefaults.exclude, '**/e2e/**'], }, });