diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 694b4289..cdcd73fa 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -37,18 +37,6 @@ updates: dependency-type: "production" "NPM modules updates for tests": dependency-type: "development" - - package-ecosystem: "npm" - directory: "/frontend/packages/api" - open-pull-requests-limit: 0 - ignore: - - dependency-name: "*" - schedule: - interval: "monthly" - groups: - "NPM modules updates": - dependency-type: "production" - "NPM modules updates for tests": - dependency-type: "development" - package-ecosystem: "npm" directory: "/frontend/e2e" open-pull-requests-limit: 0 diff --git a/.github/workflows/ci-frontend-api.yml b/.github/workflows/ci-frontend-api.yml deleted file mode 100644 index 93c1f8d0..00000000 --- a/.github/workflows/ci-frontend-api.yml +++ /dev/null @@ -1,131 +0,0 @@ -name: "@remark42/api" - -on: - push: - branches: - - master - paths: - - ".github/workflows/ci-frontend-api.yml" - - "frontend/packages/**" - - "!**.md" - pull_request: - paths: - - ".github/workflows/ci-frontend-api.yml" - - "frontend/packages/**" - - "!**.md" - -jobs: - type-check: - name: Type check - runs-on: ubuntu-latest - permissions: - contents: read - strategy: - matrix: - node: [ 20 ] - - steps: - - name: Checkout - uses: actions/checkout@v7 - with: - persist-credentials: false - - - name: Install pnpm - uses: pnpm/action-setup@v6.0.10 - with: - version: 10.10.0 - run_install: false - - - name: Install node - uses: actions/setup-node@v7 - with: - node-version: ${{ matrix.node }} - cache: "pnpm" - cache-dependency-path: frontend/pnpm-lock.yaml - - - name: Install dependencies - run: pnpm install --frozen-lockfile - working-directory: ./frontend - - - name: Run type check - run: pnpm type-check:api - working-directory: ./frontend - - lint: - name: Lint - runs-on: ubuntu-latest - permissions: - contents: read - strategy: - matrix: - node: [ 20 ] - - steps: - - name: Checkout - uses: actions/checkout@v7 - with: - persist-credentials: false - - - name: Install pnpm - uses: pnpm/action-setup@v6.0.10 - with: - version: 10.10.0 - run_install: false - - - name: Install node - uses: actions/setup-node@v7 - with: - node-version: ${{ matrix.node }} - cache: "pnpm" - cache-dependency-path: frontend/pnpm-lock.yaml - - - name: Install dependencies - run: pnpm install --frozen-lockfile - working-directory: ./frontend - - - name: Run linters - run: pnpm lint:api - working-directory: ./frontend/ - - test: - name: Tests & Coverage - runs-on: ubuntu-latest - permissions: - contents: read - strategy: - matrix: - node: [ 20 ] - - steps: - - name: Checkout - uses: actions/checkout@v7 - with: - persist-credentials: false - - - name: Install pnpm - uses: pnpm/action-setup@v6.0.10 - with: - version: 10.10.0 - run_install: false - - - name: Install node - uses: actions/setup-node@v7 - with: - node-version: ${{ matrix.node }} - cache: "pnpm" - cache-dependency-path: frontend/pnpm-lock.yaml - - - name: Install dependencies - run: pnpm install --frozen-lockfile - working-directory: ./frontend - - - name: Test & Coverage - run: pnpm coverage:api - working-directory: ./frontend - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v7 - with: - token: ${{ secrets.CODECOV_TOKEN }} - working-directory: ./frontend - codecov_yml_path: ./frontend/apps/remark42/codecov.yml diff --git a/frontend/CLAUDE.md b/frontend/CLAUDE.md index c44b6af8..a0a04809 100644 --- a/frontend/CLAUDE.md +++ b/frontend/CLAUDE.md @@ -2,7 +2,7 @@ Non-obvious things that bit us during the pnpm 8→10 / node 16→20 migration (PR #2091, fixing #2085). Read before bumping dependencies or the node/pnpm toolchain again. -## The node/pnpm version is pinned in ten places, not one +## The node/pnpm version is pinned in many places, not one CI staying green does **not** mean every pin is consistent — `.nvmrc` in particular is never read by CI, so it can silently drift. After changing the node or pnpm version, grep the whole repo and update every one of these, not just the ones CI exercises: @@ -10,8 +10,8 @@ CI staying green does **not** mean every pin is consistent — `.nvmrc` in parti - `frontend/Dockerfile.e2e` — `FROM mcr.microsoft.com/playwright:vX.Y.Z-noble` **and** `corepack prepare pnpm@X.Y.Z` - `site/Dockerfile`, `site/Dockerfile.dev` — `FROM node:X-alpine` (site uses yarn, not pnpm) - `frontend/.nvmrc`, `site/.nvmrc` — not read by CI at all; only matters to a human running `nvm use` locally. This is the one that drifted unnoticed: it sat at `16` through the whole node-20 migration because nothing red ever pointed at it. -- Every `package.json`'s `packageManager` field (`frontend/package.json`, `frontend/apps/remark42/package.json`, `frontend/packages/api/package.json` — `frontend/e2e/package.json` has none) and `frontend/apps/remark42/package.json`'s `engines` block -- `pnpm/action-setup@vN` blocks in `.github/workflows/ci-frontend.yml` (5), `ci-frontend-api.yml` (3), `release.yml` (2) — pin `version:` to the **exact** patch (e.g. `10.10.0`), matching `packageManager`, not just the major. A floating major here is silent in CI (it just resolves to whatever the latest patch is at run time) but breaks the "Dockerfile and CI use the same pnpm" guarantee. +- Every `package.json`'s `packageManager` field (`frontend/package.json`, `frontend/apps/remark42/package.json` — `frontend/e2e/package.json` has none) and `frontend/apps/remark42/package.json`'s `engines` block +- `pnpm/action-setup@vN` blocks in `.github/workflows/ci-frontend.yml` (5) and `release.yml` (2) — pin `version:` to the **exact** patch (e.g. `10.10.0`), matching `packageManager`, not just the major. A floating major here is silent in CI (it just resolves to whatever the latest patch is at run time) but breaks the "Dockerfile and CI use the same pnpm" guarantee. - `frontend/e2e/package.json`'s `@playwright/test`/`playwright` versions must match `frontend/Dockerfile.e2e`'s base image tag exactly, or the e2e container's bundled browser revision mismatches what the npm package expects. When bumping pnpm/node, also re-check `frontend/apps/remark42/package.json`'s `engines` field — it's separate from `packageManager` and won't update itself. @@ -26,9 +26,11 @@ A few deps needed pinning specifically because of pnpm 10's hoisting changes, no If a dependency bump mysteriously breaks types or module resolution only after a pnpm major bump, suspect the layout change before suspecting the dependency. -## msw 1→2 needed a real migration, not just a version bump +## node 20's native fetch requires absolute URLs in tests -`frontend/packages/api` test mocks (`tests/test-utils.ts`) moved from msw's `rest` API to `http`/`HttpResponse`. Also: test base URLs had to become absolute, and a jsdom base URL had to be set, because node 20's native `fetch` (unlike node 16/18's polyfilled fetch) requires an absolute URL — relative request URLs in tests started failing silently otherwise. +Unlike the polyfilled fetch in node 16 and 18, it rejects relative request URLs, and the failure is +silent: requests simply never match. Any test harness that mocks fetch needs absolute base URLs and +a jsdom base URL set. ## Held-back majors diff --git a/frontend/package.json b/frontend/package.json index 72f7cb7f..be6043f8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,11 +11,7 @@ "scripts": { "prepare": "if [ -z \"$CI\" ]; then cd .. && husky install frontend/.husky; else echo \"Skip Husky Hooks\"; fi", "lint-staged": "lint-staged", - "dev:app": "turbo run dev --filter=@remark42/app", - "test:api": "turbo run test --filter=@remark42/api", - "coverage:api": "turbo run coverage --filter=@remark42/api", - "type-check:api": "turbo run type-check --filter=@remark42/api", - "lint:api": "turbo run lint --filter=@remark42/api" + "dev:app": "turbo run dev --filter=@remark42/app" }, "packageManager": "pnpm@10.10.0", "devDependencies": { diff --git a/frontend/packages/api/.eslintignore b/frontend/packages/api/.eslintignore deleted file mode 100644 index 009af543..00000000 --- a/frontend/packages/api/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -coverage diff --git a/frontend/packages/api/.eslintrc.cjs b/frontend/packages/api/.eslintrc.cjs deleted file mode 100644 index 78bb8a15..00000000 --- a/frontend/packages/api/.eslintrc.cjs +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'plugin:@typescript-eslint/strict', - 'plugin:prettier/recommended', - ], - overrides: [], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: './tsconfig.eslint.json', - }, - plugins: ['@typescript-eslint'], -} diff --git a/frontend/packages/api/.gitignore b/frontend/packages/api/.gitignore deleted file mode 100644 index c189a76e..00000000 --- a/frontend/packages/api/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -coverage -dist -**/*.js -**/*.d.ts \ No newline at end of file diff --git a/frontend/packages/api/.lintstagedrc.cjs b/frontend/packages/api/.lintstagedrc.cjs deleted file mode 100644 index ac21e2e6..00000000 --- a/frontend/packages/api/.lintstagedrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - './**/*.ts': ['pnpm lint-staged:lint'], -} diff --git a/frontend/packages/api/.npmignore b/frontend/packages/api/.npmignore deleted file mode 100644 index a2c6d947..00000000 --- a/frontend/packages/api/.npmignore +++ /dev/null @@ -1,17 +0,0 @@ -coverage/** -dist/** -node_modules/** -src/** -test/** -.editorconfig -.eslintrc.cjs -.prettierrc -files.txt -jest.config.ts -pnpm-lock.yaml -postpublish.sh -prepublish.sh -tsconfig.common.json -tsconfig.dev.json -tsconfig.json - diff --git a/frontend/packages/api/.prettierrc b/frontend/packages/api/.prettierrc deleted file mode 100644 index a525ee8e..00000000 --- a/frontend/packages/api/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "semi": false, - "printWidth": 100, - "quoteProps": "consistent", - "singleQuote": true, - "trailingComma": "es5" -} diff --git a/frontend/packages/api/README.md b/frontend/packages/api/README.md deleted file mode 100644 index 8838a350..00000000 --- a/frontend/packages/api/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# @remark42/api - -Implementation of API methods for Remark42 - -## Development - -- If you don't have `pnpm` installed run `npm i -g pnpm@8` -- Install dependencies `pnpm i` -- Run development mode with `pnpm run dev` -- Build lib with `pnpm run build` -- Run tests with `pnpm run test` diff --git a/frontend/packages/api/clients/admin.ts b/frontend/packages/api/clients/admin.ts deleted file mode 100644 index 474ce24f..00000000 --- a/frontend/packages/api/clients/admin.ts +++ /dev/null @@ -1,134 +0,0 @@ -import type { ClientParams, User } from './index' -import { API_BASE } from '../consts' -import { createFetcher } from '../lib/fetcher' - -export type BlockTTL = 'permanently' | '43200m' | '10080m' | '1440m' -export interface BlockUserResponse { - block: boolean - site_id: string - user_id: string -} - -export function createAdminClient({ siteId, baseUrl }: ClientParams) { - const fetcher = createFetcher(siteId, `${baseUrl}${API_BASE}`) - - async function toggleUserVerification(id: string, verified: 0 | 1): Promise { - return fetcher.put(`/verify/${id}`, { verified }) - } - - async function toggleCommentPin(id: string, pinned: 0 | 1): Promise { - return fetcher.put(`/pin/${id}`, { pinned }) - } - - async function toggleCommenting(url: string, ro: 0 | 1): Promise { - return fetcher.put('/readonly', { url, ro }) - } - - async function toggleUserBlock(id: string, ttl?: BlockTTL): Promise { - const params = ttl - ? { - block: 1, - ttl: ttl === 'permanently' ? 0 : ttl, - } - : { block: 0 } - - return fetcher.put(`/user/${id}`, params) - } - - /** - * Request list of blocked users - */ - async function getBlockedUsers(): Promise { - return fetcher.get('/blocked') - } - - /** - * Block user from commenting - * @param id user ID - * @param ttl block duration - */ - async function blockUser(id: string, ttl: BlockTTL): Promise { - return toggleUserBlock(id, ttl) - } - - /** - * Unblock user from commenting - * @param id user ID - */ - async function unblockUser(id: string): Promise { - return toggleUserBlock(id) - } - - /** - * Mark user as verified - * @param id user ID - */ - async function verifyUser(id: string): Promise { - return toggleUserVerification(id, 1) - } - /** - * Mark user as unverified - * @param id user ID - */ - async function unverifyUser(id: string): Promise { - return toggleUserVerification(id, 0) - } - /** - * Approve request to remove user data - * @param token token from email - */ - async function approveRemovingRequest(token: string): Promise { - return fetcher.get('/deleteme', { token }) - } - - /** - * Mark comment as pinned - * @param id comment ID - */ - async function pinComment(id: string): Promise { - return toggleCommentPin(id, 1) - } - /** - * Mark comment as unpinned - * @param id comment ID - */ - async function unpinComment(id: string): Promise { - return toggleCommentPin(id, 0) - } - /** - * Remove comment - * @param url page URL - * @param id comment ID - */ - async function removeComment(url: string, id: string): Promise { - return fetcher.delete(`/comment/${id}`, { url }) - } - /** - * Enable commenting on a page - * @param url page URL - */ - async function enableCommenting(url: string) { - return toggleCommenting(url, 1) - } - /** - * Disable commenting on a page - * @param url page URL - */ - async function disableCommenting(url: string) { - return toggleCommenting(url, 0) - } - - return { - getBlockedUsers, - blockUser, - unblockUser, - verifyUser, - unverifyUser, - approveRemovingRequest, - pinComment, - unpinComment, - removeComment, - enableCommenting, - disableCommenting, - } -} diff --git a/frontend/packages/api/clients/auth.ts b/frontend/packages/api/clients/auth.ts deleted file mode 100644 index 75631328..00000000 --- a/frontend/packages/api/clients/auth.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { ClientParams, User } from './index' -import { createFetcher } from '../lib/fetcher' - -export function createAuthClient({ siteId, baseUrl }: ClientParams) { - const fetcher = createFetcher(siteId, `${baseUrl}/auth`) - - async function anonymous(user: string): Promise { - return fetcher.get('/anonymous/login', { user, aud: siteId }) - } - - async function email(email: string, username: string): Promise<(token: string) => Promise> { - const EMAIL_SIGNIN_ENDPOINT = '/email/login' - - await fetcher.get(EMAIL_SIGNIN_ENDPOINT, { address: email, user: username }) - - return function tokenVerification(token: string): Promise { - return fetcher.get(EMAIL_SIGNIN_ENDPOINT, { token }) - } - } - - async function telegram() { - const TELEGRAM_SIGNIN_ENDPOINT = '/telegram/login' - - const { bot, token } = await fetcher.get<{ bot: string; token: string }>( - TELEGRAM_SIGNIN_ENDPOINT - ) - - return { - bot, - token, - verify() { - return fetcher.get(TELEGRAM_SIGNIN_ENDPOINT, { token }) - }, - } - } - - async function logout(): Promise { - return fetcher.get('/logout') - } - - return { - anonymous, - email, - telegram, - logout, - } -} diff --git a/frontend/packages/api/clients/index.ts b/frontend/packages/api/clients/index.ts deleted file mode 100644 index a262d9ec..00000000 --- a/frontend/packages/api/clients/index.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { createAdminClient } from './admin' -import { createAuthClient } from './auth' -import { createPublicClient } from './public' - -export interface User { - id: string - name: string - /** url to avatar */ - picture: string - admin: boolean - block: boolean - verified: boolean - /** subscription to email notification */ - email_subscription?: boolean - /** users with Patreon auth can have paid status */ - paid_sub?: boolean -} - -export type OAuthProvider = - | 'apple' - | 'facebook' - | 'twitter' - | 'google' - | 'yandex' - | 'github' - | 'microsoft' - | 'patreon' - | 'discord' - | 'telegram' - | 'dev' -export type FormProvider = 'email' | 'anonymous' -export type Provider = OAuthProvider | FormProvider - -export interface ClientParams { - siteId: string - baseUrl: string -} - -export interface Client { - admin: ReturnType - auth: ReturnType - public: ReturnType -} - -let client: Client | undefined - -export function createClient(params: ClientParams): Client { - if (client === undefined) { - client = { - auth: createAuthClient(params), - admin: createAdminClient(params), - public: createPublicClient(params), - } - } - - return client -} diff --git a/frontend/packages/api/clients/public.ts b/frontend/packages/api/clients/public.ts deleted file mode 100644 index 66128254..00000000 --- a/frontend/packages/api/clients/public.ts +++ /dev/null @@ -1,160 +0,0 @@ -import type { ClientParams, Provider, User } from './index' -import { createFetcher } from '../lib/fetcher' -import { API_BASE } from '../consts' - -export interface Config { - version: string - auth_providers: Provider[] - edit_duration: number - admin_edit: boolean - max_comment_size: number - admins: string[] - admin_email: string - low_score: number - critical_score: number - positive_score: boolean - readonly_age: number - max_image_size: number - simple_view: boolean - anon_vote: boolean - email_notifications: boolean - telegram_notifications: boolean - emoji_enabled: boolean -} - -export interface Comment { - /** comment id */ - id: string - /** parent id */ - pid: string - /** comment text, after md processing */ - text: string - /** original comment text */ - orig?: string - user: User - locator: { - /** site id */ - site: string - /** page url */ - url: string - } - score: number - voted_ips: { Timestamp: string; Value: boolean }[] - /** - * vote delta, - * if user hasn't voted delta will be 0, - * -1/+1 for downvote/upvote - */ - vote: 0 | 1 | -1 - /** comment controversy */ - controversy?: number - /** pointer to have empty default in json response */ - edit?: { - time: string - summary: string - } - /** timestamp */ - time: string - pin?: boolean - delete?: boolean - /** page title */ - title?: string -} - -export interface CommentsTree { - comment: Comment - replies: Comment[] -} - -export interface CommentPayload { - title?: string - pid?: string - text: string -} - -export type Sort = '-active' | '+active' -export interface GetUserCommentsParams { - url: string - sort?: Sort - limit?: number - skip?: number -} -export type Vote = -1 | 1 - -export function createPublicClient({ siteId: site, baseUrl }: ClientParams) { - const fetcher = createFetcher(site, `${baseUrl}${API_BASE}`) - const authFetcher = createFetcher(site, `${baseUrl}/auth`) - - /** - * Get server config - */ - async function getConfig(): Promise { - return fetcher.get('/config') - } - - /** - * Get current authorized user. - * Probes /auth/status first (always 200, no console 401), then fetches /user only if logged in. - */ - async function getUser(): Promise { - const status = await authFetcher.get<{ status: string }>('/status').catch(() => null) - if (status?.status !== 'logged in') { - return null - } - return fetcher.get('/user').catch(() => null) - } - - /** - * Get comments - */ - async function getComments(url: string): Promise - async function getComments(params: GetUserCommentsParams): Promise - async function getComments( - params: string | GetUserCommentsParams - ): Promise { - if (typeof params === 'string') { - return fetcher.get('/comments', { url: params }) - } - - return fetcher.get('/find', { ...params, format: 'tree' }) - } - - /** - * Add new comment - */ - async function addComment(url: string, payload: CommentPayload): Promise { - const locator = { site, url } - return fetcher.post('/comment', {}, { ...payload, locator }) - } - - /** - * Update comment - */ - async function updateComment(url: string, id: string, text: string): Promise { - return fetcher.put(`/comment/${id}`, { url }, { text }) - } - - /** - * Remove comment on a page - */ - async function removeComment(url: string, id: string): Promise { - return fetcher.put(`/comment/${id}`, { url }, { delete: true }) - } - - /** - * Vote for a comment - */ - async function vote(url: string, id: string, vote: Vote): Promise<{ id: string; vote: number }> { - return fetcher.put<{ id: string; vote: number }>(`/vote/${id}`, { url, vote }) - } - - return { - getConfig, - getUser, - getComments, - addComment, - updateComment, - removeComment, - vote, - } -} diff --git a/frontend/packages/api/consts.ts b/frontend/packages/api/consts.ts deleted file mode 100644 index 7ea6b1e5..00000000 --- a/frontend/packages/api/consts.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** Base path to API */ -export const API_BASE = '/api/v1' - -/** Header name for JWT token */ -export const JWT_HEADER = 'X-JWT' - -/** Header name for XSRF token */ -export const XSRF_HEADER = 'X-XSRF-TOKEN' - -/** Cookie field with XSRF token */ -export const XSRF_COOKIE = 'XSRF-TOKEN' diff --git a/frontend/packages/api/index.ts b/frontend/packages/api/index.ts deleted file mode 100644 index fe463784..00000000 --- a/frontend/packages/api/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './clients' -export * from './clients/admin' -export * from './clients/auth' -export * from './clients/public' diff --git a/frontend/packages/api/lib/cookies.ts b/frontend/packages/api/lib/cookies.ts deleted file mode 100644 index cf846431..00000000 --- a/frontend/packages/api/lib/cookies.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function getCookie(name: string): string | undefined { - const matches = document.cookie.match( - new RegExp(`(?:^|; )${name.replace(/([.$?*|{}()[\]\\/+^])/g, '\\$1')}=([^;]*)`) - ) - - if (matches === null) { - return - } - - return decodeURIComponent(matches[1]) -} diff --git a/frontend/packages/api/lib/fetcher.ts b/frontend/packages/api/lib/fetcher.ts deleted file mode 100644 index bdaf4e77..00000000 --- a/frontend/packages/api/lib/fetcher.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { JWT_HEADER, XSRF_COOKIE, XSRF_HEADER } from '../consts' -import { getCookie } from '../lib/cookies' - -export type QueryParams = Record -export type Payload = BodyInit | Record | null -export type BodylessMethod = (url: string, query?: QueryParams) => Promise -export type BodyMethod = (url: string, query?: QueryParams, body?: Payload) => Promise -export interface Client { - get: BodylessMethod - put: BodyMethod - post: BodyMethod - delete: BodylessMethod -} - -/** JWT token received from server and will be send by each request, if it present */ -let token: string | undefined - -export const createFetcher = (site: string, baseUrl: string): Client => { - const client = { - get: (uri: string, query?: QueryParams): Promise => request('get', uri, query), - put: (uri: string, query?: QueryParams, body?: Payload): Promise => - request('put', uri, query, body), - post: (uri: string, query?: QueryParams, body?: Payload): Promise => - request('post', uri, query, body), - delete: (uri: string, query?: QueryParams, body?: Payload): Promise => - request('delete', uri, query, body), - } - - /** - * Fetcher is abstraction on top of fetch - * - * @method - a string to set http method - * @uri – uri to API endpoint - * @query - collection of query params. They will be concatenated to URL. `siteId` will be added automatically. - * @body - data for sending to the server. If you pass object it will be stringified. If you pass form data it will be sent as is. Content type headers will be added automatically. - */ - async function request( - method: string, - uri: string, - query: QueryParams = {}, - body?: Payload - ): Promise { - const searchParams = new URLSearchParams({ site, ...query }) - searchParams.sort() - const url = `${baseUrl}${uri}?${searchParams.toString()}` - const headers = new Headers() - const params: RequestInit = { method, headers } - - // Save token in memory and pass it into headers in case if storing cookies is disabled - if (token) { - headers.set(JWT_HEADER, token) - } - - // An HTTP header cannot be empty. - // Although some webservers allow this (nginx, Apache), others answer 400 Bad Request (lighttpd). - const xsrfToken = getCookie(XSRF_COOKIE) - if (typeof xsrfToken === 'string') { - headers.set(XSRF_HEADER, xsrfToken) - } - - if (typeof body === 'object' && body !== null && !(body instanceof FormData)) { - headers.set('Content-Type', 'application/json') - params.body = JSON.stringify(body) - } else { - params.body = body - } - - return fetch(url, params).then((res) => { - if ([401, 403].includes(res.status)) { - token = undefined - - return Promise.reject('Unauthorized') - } - - token = res.headers.get(JWT_HEADER) ?? token - - return res - .text() - .catch(Object) - .then((data: string) => { - if (res.status < 200 || res.status > 299) { - return Promise.reject(data) - } - try { - return JSON.parse(data) as T - } catch (e) { - return data as unknown as T - } - }) - }) - } - - return client -} diff --git a/frontend/packages/api/package.json b/frontend/packages/api/package.json deleted file mode 100644 index c5fa3da6..00000000 --- a/frontend/packages/api/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@remark42/api", - "version": "0.6.0-alpha.11", - "description": "Implementation of API methods for Remark42", - "repository": { - "type": "git", - "url": "git+https://github.com/umputun/remark42.git#master" - }, - "bugs": { - "url": "https://github.com/umputun/remark42/issues" - }, - "homepage": "https://github.com/umputun/remark42/tree/master/frontend/packages/api#readme", - "keywords": [ - "remark42", - "comments" - ], - "author": "Paul Mineev", - "license": "MIT", - "scripts": { - "dev": "tsc -w --incremental", - "build:cjs": "tsc --module CommonJS", - "build:esm": "tsc --module ESNext", - "build": "npm-run-all cleanup --parallel build:*", - "postpublish": "pnpm run cleanup", - "cleanup": "rm -rf *.js *.d.ts **/*.js **/*.d.ts *.tsbuildinfo", - "test": "vitest", - "coverage": "vitest run --coverage", - "lint": "eslint --ext .cjs,.mjs,.ts --max-warnings=0", - "type-check": "tsc --noEmit", - "lint-staged:lint": "eslint --fix --ext .cjs,.mjs,.ts" - }, - "packageManager": "pnpm@10.10.0", - "devDependencies": { - "@types/node": "^26.0.1", - "@typescript-eslint/eslint-plugin": "^8.62.1", - "@typescript-eslint/parser": "^8.62.1", - "@vitest/coverage-v8": "^4.1.9", - "eslint": "^8.57.1", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.6", - "jsdom": "^29.1.1", - "msw": "^2.14.6", - "npm-run-all": "^4.1.5", - "prettier": "^3.9.4", - "ts-node": "^10.9.2", - "tslib": "^2.8.1", - "typescript": "^5.9.3", - "vitest": "^4.1.9" - }, - "type": "module", - "files": [ - "./*.js", - "./*.d.ts", - "./clients/*.d.ts", - "./lib/*.d.ts" - ] -} diff --git a/frontend/packages/api/tests/clients/admin.test.ts b/frontend/packages/api/tests/clients/admin.test.ts deleted file mode 100644 index 3c6772c8..00000000 --- a/frontend/packages/api/tests/clients/admin.test.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { beforeEach, describe, expect } from 'vitest' -import { mockEndpoint } from '../test-utils' -import { BlockTTL, createAdminClient } from '../../clients/admin' - -interface Context { - client: ReturnType -} - -describe('Admin Client', (adminClient) => { - beforeEach((ctx) => { - ctx.client = createAdminClient({ siteId: 'mysite', baseUrl: 'http://localhost/remark42' }) - }) - - adminClient('should return list of blocked users', async ({ client }) => { - const data = [{ id: 1 }, { id: 2 }] - - mockEndpoint('/remark42/api/v1/blocked', { body: data }) - await expect(client.getBlockedUsers()).resolves.toEqual(data) - }) - - const ttlCases: [BlockTTL, string][] = [ - ['permanently', '0'], - ['1440m', '1440m'], - ['43200m', '43200m'], - ] - - ttlCases.forEach(([ttl, expected]) => { - adminClient(`should block user with ttl: ${ttl}`, async ({ client }) => { - const data = { block: true, site_id: 'remark42', user_id: '1' } - const ref = mockEndpoint('/remark42/api/v1/user/1', { method: 'put', body: data }) - - await expect(client.blockUser('1', ttl)).resolves.toEqual(data) - expect(ref.req.url.searchParams.get('ttl')).toBe(expected) - }) - }) - - adminClient('should unblock user', async ({ client }) => { - const data = { block: false, site_id: 'remark42', user_id: '1' } - const ref = mockEndpoint('/remark42/api/v1/user/1', { method: 'put', body: data }) - - await expect(client.unblockUser('1')).resolves.toEqual(data) - expect(ref.req.url.searchParams.get('block')).toBe('0') - }) - - adminClient('should mark user as verified', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/verify/1', { method: 'put' }) - - await client.verifyUser('1') - expect(ref.req.url.searchParams.get('verified')).toBe('1') - }) - - adminClient('should mark user as unverified', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/verify/1', { method: 'put' }) - - await client.unverifyUser('1') - expect(ref.req.url.searchParams.get('verified')).toBe('0') - }) - - adminClient('should approve removing request', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/deleteme') - - await client.approveRemovingRequest('token') - expect(ref.req.url.searchParams.get('token')).toBe('token') - }) - - adminClient('should pin comment', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/pin/1', { method: 'put' }) - - await client.pinComment('1') - expect(ref.req.url.searchParams.get('pinned')).toBe('1') - }) - - adminClient('should unpin comment', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/pin/1', { method: 'put' }) - - await client.unpinComment('1') - expect(ref.req.url.searchParams.get('pinned')).toBe('0') - }) - - adminClient('should remove comment', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/comment/1', { method: 'delete' }) - const url = '/post/1' - - await client.removeComment(url, '1') - expect(ref.req.url.searchParams.get('url')).toBe(url) - }) - - adminClient('should enable commenting on a page', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/readonly', { method: 'put' }) - const url = '/post/1' - - await client.enableCommenting(url) - expect(ref.req.url.searchParams.get('ro')).toBe('1') - expect(ref.req.url.searchParams.get('url')).toBe(url) - }) - - adminClient('should disable commenting on a page', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/readonly', { method: 'put' }) - const url = '/post/1' - - await client.disableCommenting('/post/1') - expect(ref.req.url.searchParams.get('ro')).toBe('0') - expect(ref.req.url.searchParams.get('url')).toBe(url) - }) -}) diff --git a/frontend/packages/api/tests/clients/auth.test.ts b/frontend/packages/api/tests/clients/auth.test.ts deleted file mode 100644 index ddea529e..00000000 --- a/frontend/packages/api/tests/clients/auth.test.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { beforeEach, describe, expect } from 'vitest' -import { mockEndpoint } from '../test-utils' -import { createAuthClient } from '../../clients/auth' - -interface Content { - client: ReturnType -} - -describe('Auth Client', (authClient) => { - beforeEach((ctx) => { - ctx.client = createAuthClient({ siteId: 'mysite', baseUrl: 'http://localhost/remark42' }) - }) - - authClient('should authorize as anonymouse', async ({ client }) => { - const data = { id: 1 } - const ref = mockEndpoint('/remark42/auth/anonymous/login', { body: data }) - - await expect(client.anonymous('username')).resolves.toEqual(data) - expect(ref.req.url.searchParams.get('aud')).toBe('mysite') - expect(ref.req.url.searchParams.get('user')).toBe('username') - }) - - authClient('should authorize with email', async ({ client }) => { - const data = { id: 1 } - const ref = mockEndpoint('/remark42/auth/email/login', { body: data }) - const tokenVerification = await client.email('username@example.com', 'username') - - expect(ref.req.url.searchParams.get('address')).toBe('username@example.com') - expect(ref.req.url.searchParams.get('user')).toBe('username') - - await expect(tokenVerification('token')).resolves.toEqual(data) - expect(ref.req.url.searchParams.get('token')).toBe('token') - }) - - authClient('should authorize with telegram', async ({ client }) => { - const data = { - bot: 'remark42bot', - token: 'token', - } - const user = { id: 1 } - - mockEndpoint('/remark42/auth/telegram/login', { body: data }) - - const telegramAuth = await client.telegram() - - expect(telegramAuth.bot).toBe(data.bot) - expect(telegramAuth.token).toBe(data.token) - - const ref = mockEndpoint('/remark42/auth/telegram/login', { body: user }) - - await expect(telegramAuth.verify()).resolves.toEqual(user) - expect(ref.req.url.searchParams.get('token')).toBe('token') - }) - - authClient('should logout', async ({ client }) => { - mockEndpoint('/remark42/auth/logout') - await expect(client.logout()).resolves.toBe('') - }) -}) diff --git a/frontend/packages/api/tests/clients/index.test.ts b/frontend/packages/api/tests/clients/index.test.ts deleted file mode 100644 index dd6d4a54..00000000 --- a/frontend/packages/api/tests/clients/index.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { describe, expect, it } from 'vitest' -import { createClient } from '../..' - -describe('Client', () => { - it('should create a client', () => { - const params = { siteId: 'mysite', baseUrl: 'http://localhost/remark42' } - const client = createClient(params) - - expect(client).toBeDefined() - expect(client.admin).toBeDefined() - expect(client.auth).toBeDefined() - expect(client.public).toBeDefined() - }) -}) diff --git a/frontend/packages/api/tests/clients/public.test.ts b/frontend/packages/api/tests/clients/public.test.ts deleted file mode 100644 index a0c54c5f..00000000 --- a/frontend/packages/api/tests/clients/public.test.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { beforeEach, describe, expect } from 'vitest' -import { mockEndpoint } from '../test-utils' -import { createPublicClient, GetUserCommentsParams, Vote } from '../../clients/public' - -interface Context { - client: ReturnType -} - -describe('Public Client', (publicClient) => { - beforeEach((ctx) => { - ctx.client = createPublicClient({ siteId: 'mysite', baseUrl: 'http://localhost/remark42' }) - }) - - publicClient('getConfig: should return config', async ({ client }) => { - const data = { x: 1, y: 2 } - - mockEndpoint('/remark42/api/v1/config', { body: data }) - await expect(client.getConfig()).resolves.toEqual(data) - }) - - publicClient('getComments: should return page comments', async ({ client }) => { - const data = { post: { id: '1' }, node: [{ id: 1 }] } - const ref = mockEndpoint('/remark42/api/v1/comments', { body: data }) - - await expect(client.getComments('/post/1')).resolves.toEqual(data) - expect(ref.req.url.searchParams.get('url')).toBe('/post/1') - }) - - const commentRequestCases: GetUserCommentsParams[] = [ - { url: '' }, - { url: '' }, - { url: '', limit: 10 }, - { url: '', skip: 10 }, - { url: '', skip: 10, limit: 0 }, - ] - - commentRequestCases.forEach((params) => { - publicClient( - `getComments: should return user comments with params: ${JSON.stringify(params)}`, - async ({ client }) => { - const data = [{ id: 1 }, { id: 2 }] - const ref = mockEndpoint('/remark42/api/v1/find', { body: data }) - - await expect(client.getComments(params)).resolves.toEqual(data) - expect(ref.req.url.searchParams.get('limit')).toBe( - params.limit === undefined ? null : `${params.limit}` - ) - expect(ref.req.url.searchParams.get('skip')).toBe( - params.skip === undefined ? null : `${params.skip}` - ) - } - ) - }) - - publicClient('addComment: should add comment', async ({ client }) => { - const data = { id: '1', text: 'test' } - const ref = mockEndpoint('/remark42/api/v1/comment', { method: 'post', body: data }) - - await expect(client.addComment('/post/my-first-post', { text: 'test' })).resolves.toEqual(data) - await expect(ref.req.json()).resolves.toEqual({ - text: data.text, - locator: { - site: 'mysite', - url: '/post/my-first-post', - }, - }) - }) - - publicClient('updateComment: should update comment', async ({ client }) => { - const data = { id: 1, body: 'test' } - const ref = mockEndpoint('/remark42/api/v1/comment/1', { method: 'put', body: data }) - - await expect(client.updateComment('/post/my-first-post', '1', 'test')).resolves.toEqual(data) - await expect(ref.req.json()).resolves.toEqual({ text: 'test' }) - expect(ref.req.url.searchParams.get('url')).toBe('/post/my-first-post') - }) - - publicClient('should remove comment', async ({ client }) => { - const ref = mockEndpoint('/remark42/api/v1/comment/1', { method: 'put' }) - - await expect(client.removeComment('/post/my-first-post', '1')).resolves.toBe('') - expect(ref.req.url.searchParams.get('url')).toBe('/post/my-first-post') - }) - - const voteRequestCases: { vote: Vote; value: string }[] = [ - { vote: 1, value: 'upvote' }, - { vote: -1, value: 'downvote' }, - ] - voteRequestCases.forEach(({ vote, value }) => { - publicClient(`vote: should ${value} for comment`, async ({ client }) => { - const data = { id: 1, vote: 2 } - const ref = mockEndpoint('/remark42/api/v1/vote/1', { method: 'put', body: data }) - - await expect(client.vote('/post/my-first-post', '1', vote)).resolves.toEqual(data) - expect(ref.req.url.searchParams.get('url')).toBe('/post/my-first-post') - expect(ref.req.url.searchParams.get('vote')).toBe(`${vote}`) - }) - }) - - publicClient('getUser: should return user when logged in', async ({ client }) => { - const user = { id: '1', username: 'user' } - mockEndpoint('/remark42/auth/status', { body: { status: 'logged in', user: 'user' } }) - mockEndpoint('/remark42/api/v1/user', { body: user }) - await expect(client.getUser()).resolves.toEqual(user) - }) - - publicClient('getUser: should return null when not logged in', async ({ client }) => { - mockEndpoint('/remark42/auth/status', { body: { status: 'not logged in' } }) - await expect(client.getUser()).resolves.toBeNull() - }) - - publicClient('getUser: should return null when status probe fails', async ({ client }) => { - mockEndpoint('/remark42/auth/status', { status: 500, body: 'boom' }) - await expect(client.getUser()).resolves.toBeNull() - }) -}) diff --git a/frontend/packages/api/tests/index.test.ts b/frontend/packages/api/tests/index.test.ts deleted file mode 100644 index 449b8eee..00000000 --- a/frontend/packages/api/tests/index.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { test, expect } from 'vitest' -import { createClient } from '..' - -test('create client', () => { - expect(() => createClient({ siteId: 'site', baseUrl: '' })).not.toThrow() -}) diff --git a/frontend/packages/api/tests/lib/fetcher.test.ts b/frontend/packages/api/tests/lib/fetcher.test.ts deleted file mode 100644 index 2001dfad..00000000 --- a/frontend/packages/api/tests/lib/fetcher.test.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { beforeEach, describe, expect } from 'vitest' -import { mockEndpoint } from '../test-utils' -import { JWT_HEADER, XSRF_COOKIE, XSRF_HEADER } from '../../consts' -import { Client, createFetcher } from '../../lib/fetcher' - -interface Context { - client: Client -} - -describe('Fetcher', (fetcher) => { - beforeEach((ctx) => { - ctx.client = createFetcher('remark42', 'http://localhost') - }) - - fetcher('get', async ({ client }) => { - const ref = mockEndpoint('/test') - - await client.get('/test') - expect(ref.req.method).toBe('GET') - }) - - fetcher('post', async ({ client }) => { - const ref = mockEndpoint('/test', { method: 'post' }) - - await client.post('/test') - expect(ref.req.method).toBe('POST') - }) - - fetcher('put', async ({ client }) => { - const ref = mockEndpoint('/test', { method: 'put' }) - - await client.put('/test') - expect(ref.req.method).toBe('PUT') - }) - - fetcher('delete', async ({ client }) => { - const ref = mockEndpoint('/test', { method: 'delete' }) - - await client.delete('/test') - expect(ref.req.method).toBe('DELETE') - }) - fetcher('should send json', async ({ client }) => { - const data = { name: 'test' } - const ref = mockEndpoint('/test', { method: 'post', body: data }) - - await expect(client.post('/test', {}, data)).resolves.toStrictEqual(data) - await expect(ref.req.json()).resolves.toStrictEqual(data) - expect(ref.req.headers.get('Content-Type')).toBe('application/json') - }) - - fetcher('should send text', async ({ client }) => { - const data = 'text' - const ref = mockEndpoint('/test', { method: 'post', body: data }) - - await expect(client.post('/test', {}, data)).resolves.toBe(data) - await expect(ref.req.text()).resolves.toBe(data) - expect(ref.req.headers.get('Content-Type')).toMatch('text/plain') - }) - - fetcher('should send query', async ({ client }) => { - const ref = mockEndpoint('/test') - - await expect(client.get('/test', { x: 1, p: 2 })).resolves.toBe('') - expect(ref.req.url.searchParams.get('x')).toBe('1') - expect(ref.req.url.searchParams.get('p')).toBe('2') - }) - - fetcher('should sort query params', async ({ client }) => { - const ref = mockEndpoint('/test') - - await expect(client.get('/test', { x: 1, p: 2 })).resolves.toBe('') - expect(ref.req.url.search).toBe('?p=2&site=remark42&x=1') - }) - - fetcher( - 'should set active token and then clean it on unauthorized response', - async ({ client }) => { - let ref = mockEndpoint('/user', { headers: { [JWT_HEADER]: 'token' } }) - - // token should be saved - await client.get('/user') - // the first call should be without token - expect(ref.req.headers.get(JWT_HEADER)).toBe(null) - // the second call should be with token - await client.get('/user') - // check if the second call was with token - expect(ref.req.headers.get(JWT_HEADER)).toBe('token') - - // unauthorized response should clean token - ref = mockEndpoint('/user', { status: 401 }) - // the third call should be with token but token should be cleaned after it - await expect(client.get('/user')).rejects.toBe('Unauthorized') - // the fourth call should be without token - await expect(client.get('/user')).rejects.toBe('Unauthorized') - // check if the fourth call was with token - expect(ref.req.headers.get(JWT_HEADER)).toBe(null) - } - ) - - fetcher('should add XSRF header if we have it in cookies', async ({ client }) => { - const ref = mockEndpoint('/user') - - Object.defineProperty(document, 'cookie', { - writable: true, - value: `${XSRF_COOKIE}=token`, - }) - - await client.get('/user') - expect(ref.req.headers.get(XSRF_HEADER)).toBe('token') - }) - - fetcher('should throw error on api response with status code 400', async ({ client }) => { - mockEndpoint('/user', { status: 400 }) - - await expect(client.get('/user')).rejects.toBe('') - }) -}) diff --git a/frontend/packages/api/tests/setup.ts b/frontend/packages/api/tests/setup.ts deleted file mode 100644 index 560fd71a..00000000 --- a/frontend/packages/api/tests/setup.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { afterAll, afterEach, beforeAll } from 'vitest' -import { server } from './test-utils' - -beforeAll(() => { - server.listen({ onUnhandledRequest: 'error' }) -}) - -afterEach(() => { - server.resetHandlers() -}) - -afterAll(() => { - server.close() -}) diff --git a/frontend/packages/api/tests/test-utils.ts b/frontend/packages/api/tests/test-utils.ts deleted file mode 100644 index 2ee76473..00000000 --- a/frontend/packages/api/tests/test-utils.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { http, HttpResponse } from 'msw' -import { setupServer } from 'msw/node' - -export const server = setupServer() - -interface CapturedRequest { - url: URL - method: string - headers: Headers - json: () => Promise - text: () => Promise -} - -interface RequestRef { - req: CapturedRequest -} - -export function mockEndpoint( - url: string, - params: { - method?: 'get' | 'put' | 'post' | 'delete' - body?: number | string | null | Record | unknown[] - status?: number - headers?: Record - } = {} -): RequestRef { - const { body, method = 'get', status = 200, headers } = params - const result = { req: {} } as RequestRef - - server.use( - http[method](url, ({ request }) => { - const captured = request.clone() - result.req = { - url: new URL(request.url), - method: request.method, - headers: request.headers, - json: () => captured.clone().json(), - text: () => captured.clone().text(), - } - - const responseHeaders = new Headers() - if (headers) { - for (const [key, value] of Object.entries(headers)) { - if (Array.isArray(value)) { - for (const v of value) responseHeaders.append(key, v) - } else { - responseHeaders.set(key, value) - } - } - } - - return body === undefined - ? new HttpResponse(null, { status, headers: responseHeaders }) - : HttpResponse.json(body, { status, headers: responseHeaders }) - }) - ) - - return result -} diff --git a/frontend/packages/api/tsconfig.eslint.json b/frontend/packages/api/tsconfig.eslint.json deleted file mode 100644 index 842b527e..00000000 --- a/frontend/packages/api/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["**/*.ts"], - "exclude": [".turbo", "node_modules"] -} diff --git a/frontend/packages/api/tsconfig.json b/frontend/packages/api/tsconfig.json deleted file mode 100644 index 677336c5..00000000 --- a/frontend/packages/api/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "es2016", - "lib": ["DOM"], - "moduleResolution": "node", - "baseUrl": "./", - "declaration": true, - "isolatedModules": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true - }, - "include": ["index.ts", "clients", "lib"], - "exclude": ["tests", "coverage"] -} diff --git a/frontend/packages/api/vitest.config.mjs b/frontend/packages/api/vitest.config.mjs deleted file mode 100644 index 029f5f28..00000000 --- a/frontend/packages/api/vitest.config.mjs +++ /dev/null @@ -1,14 +0,0 @@ -import { defineConfig } from 'vitest/config' - -export default defineConfig({ - test: { - environment: 'jsdom', - environmentOptions: { - jsdom: { - url: 'http://localhost', - }, - }, - setupFiles: ['./tests/setup.ts'], - include: ['tests/**/*.test.ts'], - }, -}) diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index a8f8f75c..c31ecda2 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -408,74 +408,11 @@ importers: specifier: ^5.9.3 version: 5.9.3 - packages/api: - devDependencies: - '@types/node': - specifier: ^26.0.1 - version: 26.0.1 - '@typescript-eslint/eslint-plugin': - specifier: ^8.62.1 - version: 8.62.1(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/parser': - specifier: ^8.62.1 - version: 8.62.1(eslint@8.57.1)(typescript@5.9.3) - '@vitest/coverage-v8': - specifier: ^4.1.9 - version: 4.1.9(vitest@4.1.9) - eslint: - specifier: ^8.57.1 - version: 8.57.1 - eslint-config-prettier: - specifier: ^10.1.8 - version: 10.1.8(eslint@8.57.1) - eslint-plugin-prettier: - specifier: ^5.5.6 - version: 5.5.6(@types/eslint@8.56.12)(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.4) - jsdom: - specifier: ^29.1.1 - version: 29.1.1 - msw: - specifier: ^2.14.6 - version: 2.14.6(@types/node@26.0.1)(typescript@5.9.3) - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 - prettier: - specifier: ^3.9.4 - version: 3.9.4 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.2.205)(@types/node@26.0.1)(typescript@5.9.3) - tslib: - specifier: ^2.8.1 - version: 2.8.1 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - vitest: - specifier: ^4.1.9 - version: 4.1.9(@types/node@26.0.1)(@vitest/coverage-v8@4.1.9)(jsdom@29.1.1)(msw@2.14.6(@types/node@26.0.1)(typescript@5.9.3))(vite@8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0)) - packages: '@adobe/css-tools@4.5.0': resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} - '@asamuzakjp/css-color@5.1.11': - resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - '@asamuzakjp/dom-selector@7.1.1': - resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - '@asamuzakjp/generational-cache@1.0.1': - resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - '@asamuzakjp/nwsapi@2.3.9': - resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -1186,54 +1123,10 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bcoe/v8-coverage@1.0.2': - resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} - engines: {node: '>=18'} - - '@bramus/specificity@2.4.2': - resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} - hasBin: true - '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@csstools/color-helpers@6.1.0': - resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==} - engines: {node: '>=20.19.0'} - - '@csstools/css-calc@3.2.1': - resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-color-parser@4.1.9': - resolution: {integrity: sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-parser-algorithms@4.0.0': - resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-syntax-patches-for-csstree@1.1.6': - resolution: {integrity: sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==} - peerDependencies: - css-tree: ^3.2.1 - peerDependenciesMeta: - css-tree: - optional: true - - '@csstools/css-tokenizer@4.0.0': - resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} - engines: {node: '>=20.19.0'} - '@csstools/postcss-cascade-layers@1.1.1': resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} engines: {node: ^12 || ^14 || >=16} @@ -1328,15 +1221,6 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@emnapi/core@1.11.1': - resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - - '@emnapi/runtime@1.11.1': - resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - - '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1355,15 +1239,6 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@exodus/bytes@1.15.1': - resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - '@noble/hashes': ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - '@noble/hashes': - optional: true - '@formatjs/cli@5.1.13': resolution: {integrity: sha512-9rFWFCHEFeIUDqgMy4szoHXK7Iz29sNhY3n+N44m9VNPxjy2uWYqBEijk8bsBYhu4OLaDhHpwVbcHVJi848dHg==} engines: {node: '>= 16.5.0'} @@ -1425,41 +1300,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@inquirer/ansi@2.0.7': - resolution: {integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - - '@inquirer/confirm@6.1.1': - resolution: {integrity: sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@11.2.1': - resolution: {integrity: sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@2.0.7': - resolution: {integrity: sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - - '@inquirer/type@4.0.7': - resolution: {integrity: sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1711,16 +1551,6 @@ packages: '@mdn/browser-compat-data@5.7.6': resolution: {integrity: sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==} - '@mswjs/interceptors@0.41.9': - resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==} - engines: {node: '>=18'} - - '@napi-rs/wasm-runtime@1.1.6': - resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -1740,21 +1570,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@open-draft/deferred-promise@2.2.0': - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - - '@open-draft/deferred-promise@3.0.0': - resolution: {integrity: sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA==} - - '@open-draft/logger@0.3.0': - resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - - '@open-draft/until@2.1.0': - resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - - '@oxc-project/types@0.137.0': - resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} - '@peculiar/asn1-cms@2.8.0': resolution: {integrity: sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==} @@ -1792,10 +1607,6 @@ packages: resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} engines: {node: '>=20.0.0'} - '@pkgr/core@0.3.6': - resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} - engines: {node: ^14.18.0 || >=16.0.0} - '@playwright/test@1.61.1': resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} engines: {node: '>=18'} @@ -1827,98 +1638,6 @@ packages: preact: 10.6.2 webpack: ^4.0.0 || ^5.0.0 - '@rolldown/binding-android-arm64@1.1.3': - resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.1.3': - resolution: {integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.1.3': - resolution: {integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.1.3': - resolution: {integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.1.3': - resolution: {integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.1.3': - resolution: {integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.1.3': - resolution: {integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-ppc64-gnu@1.1.3': - resolution: {integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - - '@rolldown/binding-linux-s390x-gnu@1.1.3': - resolution: {integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - - '@rolldown/binding-linux-x64-gnu@1.1.3': - resolution: {integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.1.3': - resolution: {integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-openharmony-arm64@1.1.3': - resolution: {integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-wasm32-wasi@1.1.3': - resolution: {integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.1.3': - resolution: {integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.1.3': - resolution: {integrity: sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -1950,9 +1669,6 @@ packages: peerDependencies: size-limit: 7.0.8 - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@swc/core-android-arm-eabi@1.2.205': resolution: {integrity: sha512-HfiuVA1JDHMSRQ8nE1DcemUgZ1PKaPwit4i7q3xin0NVbVHY1xkJyQFuLVh3VxTvGKKkF3hi8GJMVQgOXWL6kg==} engines: {node: '>=10'} @@ -2111,9 +1827,6 @@ packages: cpu: [arm64] os: [win32] - '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} - '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -2135,9 +1848,6 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - '@types/cheerio@0.22.35': resolution: {integrity: sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==} @@ -2147,9 +1857,6 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/enzyme@3.10.19': resolution: {integrity: sha512-kIfCo6/DdpgCHgmrLgPTugjzbZ46BUK8S2IP0kYo8+62LD2l1k8mSVsc+zQYNTdjDRoh2E9Spxu6F1NnEiW38Q==} @@ -2293,18 +2000,12 @@ packages: '@types/serve-static@2.2.0': resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} - '@types/set-cookie-parser@2.4.10': - resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==} - '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/statuses@2.0.6': - resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} - '@types/testing-library__jest-dom@5.14.9': resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} @@ -2337,14 +2038,6 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.62.1': - resolution: {integrity: sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.62.1 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/experimental-utils@5.62.0': resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2361,33 +2054,10 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.62.1': - resolution: {integrity: sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/project-service@8.62.1': - resolution: {integrity: sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@8.62.1': - resolution: {integrity: sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.62.1': - resolution: {integrity: sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@5.62.0': resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2398,21 +2068,10 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.62.1': - resolution: {integrity: sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@8.62.1': - resolution: {integrity: sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2422,77 +2081,22 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.62.1': - resolution: {integrity: sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@8.62.1': - resolution: {integrity: sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@8.62.1': - resolution: {integrity: sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/custom-elements@1.3.0': resolution: {integrity: sha512-f4q/s76+8nOy+fhrNHyetuoPDR01lmlZB5czfCG+OOnBw/Wf+x48DcCDPmMQY7oL8xYFL8qfenMoiS8DUkKBUw==} '@ungap/structured-clone@1.3.2': resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} - '@vitest/coverage-v8@4.1.9': - resolution: {integrity: sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==} - peerDependencies: - '@vitest/browser': 4.1.9 - vitest: 4.1.9 - peerDependenciesMeta: - '@vitest/browser': - optional: true - - '@vitest/expect@4.1.9': - resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} - - '@vitest/mocker@4.1.9': - resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@4.1.9': - resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} - - '@vitest/runner@4.1.9': - resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} - - '@vitest/snapshot@4.1.9': - resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} - - '@vitest/spy@4.1.9': - resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} - - '@vitest/utils@4.1.9': - resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2756,19 +2360,12 @@ packages: resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} engines: {node: '>=12.0.0'} - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - ast-metadata-inferer@0.8.1: resolution: {integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==} ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-v8-to-istanbul@1.0.4: - resolution: {integrity: sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -2872,10 +2469,6 @@ packages: balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.40: resolution: {integrity: sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==} engines: {node: '>=6.0.0'} @@ -2884,9 +2477,6 @@ packages: batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -2907,10 +2497,6 @@ packages: brace-expansion@1.1.18: resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} - brace-expansion@5.0.9: - resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} - engines: {node: 20 || >=22} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2982,10 +2568,6 @@ packages: caniuse-lite@1.0.30001800: resolution: {integrity: sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==} - chai@6.2.2: - resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} - engines: {node: '>=18'} - chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3049,10 +2631,6 @@ packages: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -3156,10 +2734,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookie@1.1.1: - resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} - engines: {node: '>=18'} - copy-webpack-plugin@12.0.2: resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==} engines: {node: '>= 18.12.0'} @@ -3346,10 +2920,6 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} - data-urls@7.0.0: - resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -3464,10 +3034,6 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -3595,10 +3161,6 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - entities@8.0.0: - resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} - engines: {node: '>=20.19.0'} - envinfo@7.21.0: resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==} engines: {node: '>=4'} @@ -3693,12 +3255,6 @@ packages: peerDependencies: eslint: 6.x || 7.x || 8.x - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - eslint-config-prettier@8.10.2: resolution: {integrity: sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==} hasBin: true @@ -3793,20 +3349,6 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-prettier@5.5.6: - resolution: {integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - eslint-plugin-react-hooks@4.6.2: resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} @@ -3841,10 +3383,6 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3876,9 +3414,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3906,10 +3441,6 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - expect-type@1.4.0: - resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} - engines: {node: '>=12.0.0'} - expect@28.1.3: resolution: {integrity: sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -3937,18 +3468,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-string-truncated-width@3.0.3: - resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} - - fast-string-width@3.0.2: - resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@4.1.2: resolution: {integrity: sha512-TyGmBcbDTZXcb2cj5MV89DrF42DKvb3y5DDUNh95iO+IMeAzMkVSxK1PZRrRIpc9yg8U2GhGdbofNa0LS/a4Bw==} - fast-wrap-ansi@0.2.2: - resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} - fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -3963,15 +3485,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4164,10 +3677,6 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql@16.14.2: - resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -4221,9 +3730,6 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - headers-polyfill@5.0.1: - resolution: {integrity: sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==} - hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -4245,10 +3751,6 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} - html-encoding-sniffer@6.0.0: - resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -4505,9 +4007,6 @@ packages: resolution: {integrity: sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==} engines: {node: '>=16'} - is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -4799,9 +4298,6 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - js-tokens@10.0.0: - resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4825,15 +4321,6 @@ packages: canvas: optional: true - jsdom@29.1.1: - resolution: {integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -4908,76 +4395,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} - engines: {node: '>= 12.0.0'} - lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -5064,10 +4481,6 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - lru-cache@11.5.1: - resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} - engines: {node: 20 || >=22} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -5079,12 +4492,6 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - magicast@0.5.3: - resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} - make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -5204,10 +4611,6 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} - engines: {node: 18 || 20 || >=22} - minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -5282,24 +4685,10 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.14.6: - resolution: {integrity: sha512-ALe+N10S72cyx94cMcy3Zs4HhXCj35sgeAL4c+WTvKi0zWnbd8/h0lcFqv0mb2P+aSgAdD7p9HzvA0DiUPxsyg==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: '>= 4.8.x' - peerDependenciesMeta: - typescript: - optional: true - multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true - mute-stream@3.0.0: - resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} - engines: {node: ^20.17.0 || >=22.9.0} - nanoid@3.3.18: resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -5446,10 +4835,6 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - obug@2.1.3: - resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} - engines: {node: '>=12.20.0'} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -5481,9 +4866,6 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - outvariant@1.4.3: - resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -5540,9 +4922,6 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parse5@8.0.1: - resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -5575,9 +4954,6 @@ packages: path-to-regexp@0.1.13: resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} engines: {node: '>=4'} @@ -5590,9 +4966,6 @@ packages: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -6072,11 +5445,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.9.4: - resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} - engines: {node: '>=14'} - hasBin: true - pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} @@ -6314,9 +5682,6 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - rettime@0.11.11: - resolution: {integrity: sha512-ILJRqVWBCTlg9r42fFgwVZx1gnFAcQF8mRoMkbgQfIrjEDf9nbBFDFx00oloOa+Q869FUtaYDXZvEfnecQSCoQ==} - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -6334,11 +5699,6 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rolldown@1.1.3: - resolution: {integrity: sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - rst-selector-parser@2.2.3: resolution: {integrity: sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==} @@ -6378,10 +5738,6 @@ packages: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} @@ -6426,9 +5782,6 @@ packages: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} - set-cookie-parser@3.1.1: - resolution: {integrity: sha512-vM9SUhjsUYs6UeJUmygc5Ofm5eQGe85riob5ju6XCgFGJI5PLV4nrDAQpQjd+LkFBpAkADn5BQQpZ9EUNkyLuA==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -6476,16 +5829,9 @@ packages: resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -6565,9 +5911,6 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -6576,16 +5919,10 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@4.1.0: - resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -6744,18 +6081,10 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.11.13: - resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} - engines: {node: ^14.18.0 || >=16.0.0} - table@6.9.0: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tagged-tag@1.0.0: - resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} - engines: {node: '>=20'} - tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} @@ -6785,21 +6114,6 @@ packages: thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@1.2.4: - resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} - engines: {node: '>=18'} - - tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} - engines: {node: '>=12.0.0'} - - tinyrainbow@3.1.0: - resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} - engines: {node: '>=14.0.0'} - tldts-core@7.4.5: resolution: {integrity: sha512-pGrwzZDvPwKe+7NNUqAunb6rqTfynr0VOUhCMdqbu5xlvNiszsAJygRzwvpVycdzejlbpY+SWJOn+s75Og7FEA==} @@ -6833,10 +6147,6 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} - tr46@6.0.0: - resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} - engines: {node: '>=20'} - tree-dump@1.1.0: resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} engines: {node: '>=10.0'} @@ -6847,12 +6157,6 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} - ts-api-utils@2.5.0: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-loader@9.6.2: resolution: {integrity: sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA==} engines: {node: '>=12.0.0'} @@ -6939,10 +6243,6 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} - type-fest@5.7.0: - resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} - engines: {node: '>=20'} - type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -6983,10 +6283,6 @@ packages: undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} - undici@7.29.0: - resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} - engines: {node: '>=20.18.1'} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -7015,9 +6311,6 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - until-async@3.0.2: - resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} - update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -7073,90 +6366,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@8.1.2: - resolution: {integrity: sha512-6YYPbRXTxx6bRXmOn7XdnQAy5DQNHhDgtjhDHI13oe4pY93kkcdGJWxpGwOm++/Wh0QpQhDrpIoVMrmrsI5AGQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.0 - esbuild: ^0.27.0 || ^0.28.0 - jiti: '>=1.21.0' - less: ^4.0.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: '>=2.9.0 <3.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitest@4.1.9: - resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.9 - '@vitest/browser-preview': 4.1.9 - '@vitest/browser-webdriverio': 4.1.9 - '@vitest/coverage-istanbul': 4.1.9 - '@vitest/coverage-v8': 4.1.9 - '@vitest/ui': 4.1.9 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/coverage-istanbul': - optional: true - '@vitest/coverage-v8': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -7165,10 +6374,6 @@ packages: resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} engines: {node: '>=12'} - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -7186,10 +6391,6 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - webidl-conversions@8.0.1: - resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} - engines: {node: '>=20'} - webpack-bundle-analyzer@4.10.2: resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} engines: {node: '>= 10.13.0'} @@ -7272,10 +6473,6 @@ packages: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-mimetype@5.0.0: - resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} - engines: {node: '>=20'} - whatwg-url@10.0.0: resolution: {integrity: sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==} engines: {node: '>=12'} @@ -7284,10 +6481,6 @@ packages: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} - whatwg-url@16.0.1: - resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -7316,11 +6509,6 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} @@ -7375,10 +6563,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==} @@ -7425,26 +6609,6 @@ snapshots: '@adobe/css-tools@4.5.0': {} - '@asamuzakjp/css-color@5.1.11': - dependencies: - '@asamuzakjp/generational-cache': 1.0.1 - '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@asamuzakjp/dom-selector@7.1.1': - dependencies: - '@asamuzakjp/generational-cache': 1.0.1 - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.2.1 - is-potential-custom-element-name: 1.0.1 - - '@asamuzakjp/generational-cache@1.0.1': {} - - '@asamuzakjp/nwsapi@2.3.9': {} - '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -8345,40 +7509,10 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@bcoe/v8-coverage@1.0.2': {} - - '@bramus/specificity@2.4.2': - dependencies: - css-tree: 3.2.1 - '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@csstools/color-helpers@6.1.0': {} - - '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/css-color-parser@4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/color-helpers': 6.1.0 - '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/css-syntax-patches-for-csstree@1.1.6(css-tree@3.2.1)': - optionalDependencies: - css-tree: 3.2.1 - - '@csstools/css-tokenizer@4.0.0': {} - '@csstools/postcss-cascade-layers@1.1.1(postcss@8.5.26)': dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.4) @@ -8459,22 +7593,6 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@emnapi/core@1.11.1': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.11.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.2': - dependencies: - tslib: 2.8.1 - optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 @@ -8498,8 +7616,6 @@ snapshots: '@eslint/js@8.57.1': {} - '@exodus/bytes@1.15.1': {} - '@formatjs/cli@5.1.13': {} '@formatjs/ecma402-abstract@1.11.8': @@ -8571,33 +7687,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@inquirer/ansi@2.0.7': {} - - '@inquirer/confirm@6.1.1(@types/node@26.0.1)': - dependencies: - '@inquirer/core': 11.2.1(@types/node@26.0.1) - '@inquirer/type': 4.0.7(@types/node@26.0.1) - optionalDependencies: - '@types/node': 26.0.1 - - '@inquirer/core@11.2.1(@types/node@26.0.1)': - dependencies: - '@inquirer/ansi': 2.0.7 - '@inquirer/figures': 2.0.7 - '@inquirer/type': 4.0.7(@types/node@26.0.1) - cli-width: 4.1.0 - fast-wrap-ansi: 0.2.2 - mute-stream: 3.0.0 - signal-exit: 4.1.0 - optionalDependencies: - '@types/node': 26.0.1 - - '@inquirer/figures@2.0.7': {} - - '@inquirer/type@4.0.7(@types/node@26.0.1)': - optionalDependencies: - '@types/node': 26.0.1 - '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -8971,22 +8060,6 @@ snapshots: '@mdn/browser-compat-data@5.7.6': {} - '@mswjs/interceptors@0.41.9': - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 - - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.3 - optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -9005,19 +8078,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@open-draft/deferred-promise@2.2.0': {} - - '@open-draft/deferred-promise@3.0.0': {} - - '@open-draft/logger@0.3.0': - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 - - '@open-draft/until@2.1.0': {} - - '@oxc-project/types@0.137.0': {} - '@peculiar/asn1-cms@2.8.0': dependencies: '@peculiar/asn1-schema': 2.8.0 @@ -9112,8 +8172,6 @@ snapshots: tslib: 2.8.1 tsyringe: 4.10.0 - '@pkgr/core@0.3.6': {} - '@playwright/test@1.61.1': dependencies: playwright: 1.61.1 @@ -9140,57 +8198,6 @@ snapshots: preact: 10.6.2 webpack: 5.108.3(@swc/core@1.2.205)(cssnano@5.1.15(postcss@8.5.26))(postcss@8.5.26)(webpack-cli@4.10.0) - '@rolldown/binding-android-arm64@1.1.3': - optional: true - - '@rolldown/binding-darwin-arm64@1.1.3': - optional: true - - '@rolldown/binding-darwin-x64@1.1.3': - optional: true - - '@rolldown/binding-freebsd-x64@1.1.3': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.1.3': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.1.3': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.1.3': - optional: true - - '@rolldown/binding-linux-ppc64-gnu@1.1.3': - optional: true - - '@rolldown/binding-linux-s390x-gnu@1.1.3': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.1.3': - optional: true - - '@rolldown/binding-linux-x64-musl@1.1.3': - optional: true - - '@rolldown/binding-openharmony-arm64@1.1.3': - optional: true - - '@rolldown/binding-wasm32-wasi@1.1.3': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.1.3': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.1.3': - optional: true - - '@rolldown/pluginutils@1.0.1': {} - '@rtsao/scc@1.1.0': {} '@rushstack/eslint-patch@1.16.1': {} @@ -9216,8 +8223,6 @@ snapshots: semver: 7.8.5 size-limit: 7.0.8 - '@standard-schema/spec@1.1.0': {} - '@swc/core-android-arm-eabi@1.2.205': optional: true @@ -9343,11 +8348,6 @@ snapshots: '@turbo/windows-arm64@2.10.2': optional: true - '@tybys/wasm-util@0.10.3': - dependencies: - tslib: 2.8.1 - optional: true - '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -9380,11 +8380,6 @@ snapshots: dependencies: '@types/node': 26.0.1 - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 - '@types/cheerio@0.22.35': dependencies: '@types/node': 18.19.130 @@ -9398,8 +8393,6 @@ snapshots: dependencies: '@types/node': 26.0.1 - '@types/deep-eql@4.0.2': {} - '@types/enzyme@3.10.19': dependencies: '@types/cheerio': 0.22.35 @@ -9579,18 +8572,12 @@ snapshots: '@types/http-errors': 2.0.5 '@types/node': 26.0.1 - '@types/set-cookie-parser@2.4.10': - dependencies: - '@types/node': 26.0.1 - '@types/sockjs@0.3.36': dependencies: '@types/node': 26.0.1 '@types/stack-utils@2.0.3': {} - '@types/statuses@2.0.6': {} - '@types/testing-library__jest-dom@5.14.9': dependencies: '@types/jest': 28.1.8 @@ -9630,22 +8617,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.62.1(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/type-utils': 8.62.1(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.62.1(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.62.1 - eslint: 8.57.1 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) @@ -9666,41 +8637,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.62.1(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.62.1 - debug: 4.4.3 - eslint: 8.57.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.62.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@5.9.3) - '@typescript-eslint/types': 8.62.1 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@8.62.1': - dependencies: - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/visitor-keys': 8.62.1 - - '@typescript-eslint/tsconfig-utils@8.62.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) @@ -9713,22 +8654,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.62.1(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.62.1(eslint@8.57.1)(typescript@5.9.3) - debug: 4.4.3 - eslint: 8.57.1 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@8.62.1': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': dependencies: '@typescript-eslint/types': 5.62.0 @@ -9743,21 +8670,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.62.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.62.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@5.9.3) - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/visitor-keys': 8.62.1 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.8.5 - tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) @@ -9773,87 +8685,15 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.62.1(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/types': 8.62.1 - '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) - eslint: 8.57.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.62.1': - dependencies: - '@typescript-eslint/types': 8.62.1 - eslint-visitor-keys: 5.0.1 - '@ungap/custom-elements@1.3.0': {} '@ungap/structured-clone@1.3.2': {} - '@vitest/coverage-v8@4.1.9(vitest@4.1.9)': - dependencies: - '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.9 - ast-v8-to-istanbul: 1.0.4 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.2.0 - magicast: 0.5.3 - obug: 2.1.3 - std-env: 4.1.0 - tinyrainbow: 3.1.0 - vitest: 4.1.9(@types/node@26.0.1)(@vitest/coverage-v8@4.1.9)(jsdom@29.1.1)(msw@2.14.6(@types/node@26.0.1)(typescript@5.9.3))(vite@8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0)) - - '@vitest/expect@4.1.9': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.9 - '@vitest/utils': 4.1.9 - chai: 6.2.2 - tinyrainbow: 3.1.0 - - '@vitest/mocker@4.1.9(msw@2.14.6(@types/node@26.0.1)(typescript@5.9.3))(vite@8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 4.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.14.6(@types/node@26.0.1)(typescript@5.9.3) - vite: 8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0) - - '@vitest/pretty-format@4.1.9': - dependencies: - tinyrainbow: 3.1.0 - - '@vitest/runner@4.1.9': - dependencies: - '@vitest/utils': 4.1.9 - pathe: 2.0.3 - - '@vitest/snapshot@4.1.9': - dependencies: - '@vitest/pretty-format': 4.1.9 - '@vitest/utils': 4.1.9 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.1.9': {} - - '@vitest/utils@4.1.9': - dependencies: - '@vitest/pretty-format': 4.1.9 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -10156,20 +8996,12 @@ snapshots: pvutils: 1.1.5 tslib: 2.8.1 - assertion-error@2.0.1: {} - ast-metadata-inferer@0.8.1: dependencies: '@mdn/browser-compat-data': 5.7.6 ast-types-flow@0.0.8: {} - ast-v8-to-istanbul@1.0.4: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - estree-walker: 3.0.3 - js-tokens: 10.0.0 - astral-regex@2.0.0: {} async-function@1.0.0: {} @@ -10327,16 +9159,10 @@ snapshots: balanced-match@2.0.0: {} - balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.40: {} batch@0.6.1: {} - bidi-js@1.0.3: - dependencies: - require-from-string: 2.0.2 - big.js@5.2.2: {} binary-extensions@2.3.0: {} @@ -10370,10 +9196,6 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.9: - dependencies: - balanced-match: 4.0.4 - braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -10447,8 +9269,6 @@ snapshots: caniuse-lite@1.0.30001800: {} - chai@6.2.2: {} - chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -10526,8 +9346,6 @@ snapshots: slice-ansi: 5.0.0 string-width: 5.1.2 - cli-width@4.1.0: {} - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -10614,8 +9432,6 @@ snapshots: cookie@0.7.2: {} - cookie@1.1.1: {} - copy-webpack-plugin@12.0.2(webpack@5.108.3): dependencies: fast-glob: 3.3.3 @@ -10817,13 +9633,6 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - data-urls@7.0.0: - dependencies: - whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1 - transitivePeerDependencies: - - '@noble/hashes' - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -10935,8 +9744,6 @@ snapshots: destroy@1.2.0: {} - detect-libc@2.1.2: {} - detect-newline@3.1.0: {} detect-node@2.1.0: {} @@ -11051,8 +9858,6 @@ snapshots: entities@6.0.1: {} - entities@8.0.0: {} - envinfo@7.21.0: {} enzyme-adapter-preact-pure@4.1.0(enzyme@3.11.0)(preact@10.6.2): @@ -11252,10 +10057,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-config-prettier@10.1.8(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - eslint-config-prettier@8.10.2(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -11391,16 +10192,6 @@ snapshots: optionalDependencies: eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-prettier@5.5.6(@types/eslint@8.56.12)(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.4): - dependencies: - eslint: 8.57.1 - prettier: 3.9.4 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.13 - optionalDependencies: - '@types/eslint': 8.56.12 - eslint-config-prettier: 10.1.8(eslint@8.57.1) - eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -11449,8 +10240,6 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@5.0.1: {} - eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) @@ -11514,10 +10303,6 @@ snapshots: estraverse@5.3.0: {} - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.9 - esutils@2.0.3: {} etag@1.8.1: {} @@ -11552,8 +10337,6 @@ snapshots: exit@0.1.2: {} - expect-type@1.4.0: {} - expect@28.1.3: dependencies: '@jest/expect-utils': 28.1.3 @@ -11619,18 +10402,8 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-string-truncated-width@3.0.3: {} - - fast-string-width@3.0.2: - dependencies: - fast-string-truncated-width: 3.0.3 - fast-uri@4.1.2: {} - fast-wrap-ansi@0.2.2: - dependencies: - fast-string-width: 3.0.2 - fastest-levenshtein@1.0.16: {} fastq@1.20.1: @@ -11645,10 +10418,6 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -11876,8 +10645,6 @@ snapshots: graphemer@1.4.0: {} - graphql@16.14.2: {} - gzip-size@6.0.0: dependencies: duplexer: 0.1.2 @@ -11916,11 +10683,6 @@ snapshots: he@1.2.0: {} - headers-polyfill@5.0.1: - dependencies: - '@types/set-cookie-parser': 2.4.10 - set-cookie-parser: 3.1.1 - hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -11947,12 +10709,6 @@ snapshots: dependencies: whatwg-encoding: 2.0.0 - html-encoding-sniffer@6.0.0: - dependencies: - '@exodus/bytes': 1.15.1 - transitivePeerDependencies: - - '@noble/hashes' - html-escaper@2.0.2: {} html-minifier-terser@6.1.0: @@ -12205,8 +10961,6 @@ snapshots: is-network-error@1.3.2: {} - is-node-process@1.2.0: {} - is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -12691,8 +11445,6 @@ snapshots: jiti@1.21.7: {} - js-tokens@10.0.0: {} - js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -12740,32 +11492,6 @@ snapshots: - supports-color - utf-8-validate - jsdom@29.1.1: - dependencies: - '@asamuzakjp/css-color': 5.1.11 - '@asamuzakjp/dom-selector': 7.1.1 - '@bramus/specificity': 2.4.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.6(css-tree@3.2.1) - '@exodus/bytes': 1.15.1 - css-tree: 3.2.1 - data-urls: 7.0.0 - decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.5.1 - parse5: 8.0.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 6.0.1 - undici: 7.29.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.1 - whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - '@noble/hashes' - jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -12829,55 +11555,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-android-arm64@1.32.0: - optional: true - - lightningcss-darwin-arm64@1.32.0: - optional: true - - lightningcss-darwin-x64@1.32.0: - optional: true - - lightningcss-freebsd-x64@1.32.0: - optional: true - - lightningcss-linux-arm-gnueabihf@1.32.0: - optional: true - - lightningcss-linux-arm64-gnu@1.32.0: - optional: true - - lightningcss-linux-arm64-musl@1.32.0: - optional: true - - lightningcss-linux-x64-gnu@1.32.0: - optional: true - - lightningcss-linux-x64-musl@1.32.0: - optional: true - - lightningcss-win32-arm64-msvc@1.32.0: - optional: true - - lightningcss-win32-x64-msvc@1.32.0: - optional: true - - lightningcss@1.32.0: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.32.0 - lightningcss-darwin-arm64: 1.32.0 - lightningcss-darwin-x64: 1.32.0 - lightningcss-freebsd-x64: 1.32.0 - lightningcss-linux-arm-gnueabihf: 1.32.0 - lightningcss-linux-arm64-gnu: 1.32.0 - lightningcss-linux-arm64-musl: 1.32.0 - lightningcss-linux-x64-gnu: 1.32.0 - lightningcss-linux-x64-musl: 1.32.0 - lightningcss-win32-arm64-msvc: 1.32.0 - lightningcss-win32-x64-msvc: 1.32.0 - lilconfig@2.1.0: {} lines-and-columns@1.2.4: {} @@ -12968,8 +11645,6 @@ snapshots: dependencies: tslib: 2.8.1 - lru-cache@11.5.1: {} - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -12980,16 +11655,6 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - magicast@0.5.3: - dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - source-map-js: 1.2.1 - make-dir@3.1.0: dependencies: semver: 7.8.5 @@ -13099,10 +11764,6 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.5: - dependencies: - brace-expansion: 5.0.9 - minimatch@3.1.5: dependencies: brace-expansion: 1.1.18 @@ -13139,38 +11800,11 @@ snapshots: ms@2.1.3: {} - msw@2.14.6(@types/node@26.0.1)(typescript@5.9.3): - dependencies: - '@inquirer/confirm': 6.1.1(@types/node@26.0.1) - '@mswjs/interceptors': 0.41.9 - '@open-draft/deferred-promise': 3.0.0 - '@types/statuses': 2.0.6 - cookie: 1.1.1 - graphql: 16.14.2 - headers-polyfill: 5.0.1 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - rettime: 0.11.11 - statuses: 2.0.2 - strict-event-emitter: 0.5.1 - tough-cookie: 6.0.1 - type-fest: 5.7.0 - until-async: 3.0.2 - yargs: 17.7.3 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 thunky: 1.1.0 - mute-stream@3.0.0: {} - nanoid@3.3.18: {} nanoid@5.1.16: {} @@ -13326,8 +11960,6 @@ snapshots: obuf@1.1.2: {} - obug@2.1.3: {} - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -13364,8 +11996,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - outvariant@1.4.3: {} - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -13430,10 +12060,6 @@ snapshots: dependencies: entities: 6.0.1 - parse5@8.0.1: - dependencies: - entities: 8.0.0 - parseurl@1.3.3: {} pascal-case@3.1.2: @@ -13455,8 +12081,6 @@ snapshots: path-to-regexp@0.1.13: {} - path-to-regexp@6.3.0: {} - path-type@3.0.0: dependencies: pify: 3.0.0 @@ -13465,8 +12089,6 @@ snapshots: path-type@6.0.0: {} - pathe@2.0.3: {} - performance-now@2.1.0: {} picocolors@1.1.1: {} @@ -13926,8 +12548,6 @@ snapshots: prettier@2.8.8: {} - prettier@3.9.4: {} - pretty-error@4.0.0: dependencies: lodash: 4.18.1 @@ -14194,8 +12814,6 @@ snapshots: retry@0.13.1: {} - rettime@0.11.11: {} - reusify@1.1.0: {} rfdc@1.4.1: {} @@ -14208,27 +12826,6 @@ snapshots: dependencies: glob: 7.2.3 - rolldown@1.1.3: - dependencies: - '@oxc-project/types': 0.137.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.3 - '@rolldown/binding-darwin-arm64': 1.1.3 - '@rolldown/binding-darwin-x64': 1.1.3 - '@rolldown/binding-freebsd-x64': 1.1.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.3 - '@rolldown/binding-linux-arm64-gnu': 1.1.3 - '@rolldown/binding-linux-arm64-musl': 1.1.3 - '@rolldown/binding-linux-ppc64-gnu': 1.1.3 - '@rolldown/binding-linux-s390x-gnu': 1.1.3 - '@rolldown/binding-linux-x64-gnu': 1.1.3 - '@rolldown/binding-linux-x64-musl': 1.1.3 - '@rolldown/binding-openharmony-arm64': 1.1.3 - '@rolldown/binding-wasm32-wasi': 1.1.3 - '@rolldown/binding-win32-arm64-msvc': 1.1.3 - '@rolldown/binding-win32-x64-msvc': 1.1.3 - rst-selector-parser@2.2.3: dependencies: lodash.flattendeep: 4.4.0 @@ -14271,10 +12868,6 @@ snapshots: dependencies: xmlchars: 2.2.0 - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - schema-utils@2.7.1: dependencies: '@types/json-schema': 7.0.15 @@ -14346,8 +12939,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-cookie-parser@3.1.1: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -14412,12 +13003,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - siginfo@2.0.0: {} - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} - sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.29 @@ -14517,21 +13104,15 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 - stackback@0.0.2: {} - statuses@1.5.0: {} statuses@2.0.2: {} - std-env@4.1.0: {} - stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 - strict-event-emitter@0.5.1: {} - string-argv@0.3.2: {} string-length@4.0.2: @@ -14748,10 +13329,6 @@ snapshots: symbol-tree@3.2.4: {} - synckit@0.11.13: - dependencies: - '@pkgr/core': 0.3.6 - table@6.9.0: dependencies: ajv: 8.20.0 @@ -14760,8 +13337,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tagged-tag@1.0.0: {} - tapable@2.3.3: {} terminal-link@2.1.1: @@ -14790,17 +13365,6 @@ snapshots: thunky@1.1.0: {} - tinybench@2.9.0: {} - - tinyexec@1.2.4: {} - - tinyglobby@0.2.17: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - - tinyrainbow@3.1.0: {} - tldts-core@7.4.5: {} tldts@7.4.5: @@ -14827,20 +13391,12 @@ snapshots: dependencies: punycode: 2.3.1 - tr46@6.0.0: - dependencies: - punycode: 2.3.1 - tree-dump@1.1.0(tslib@2.8.1): dependencies: tslib: 2.8.1 trim-newlines@3.0.1: {} - ts-api-utils@2.5.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - ts-loader@9.6.2(loader-utils@2.0.4)(typescript@4.9.5)(webpack@5.108.3): dependencies: chalk: 4.1.2 @@ -14946,10 +13502,6 @@ snapshots: type-fest@1.4.0: {} - type-fest@5.7.0: - dependencies: - tagged-tag: 1.0.0 - type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -15003,8 +13555,6 @@ snapshots: undici-types@8.3.0: {} - undici@7.29.0: {} - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -15022,8 +13572,6 @@ snapshots: unpipe@1.0.0: {} - until-async@3.0.2: {} - update-browserslist-db@1.2.3(browserslist@4.28.4): dependencies: browserslist: 4.28.4 @@ -15072,49 +13620,6 @@ snapshots: vary@1.1.2: {} - vite@8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.26 - rolldown: 1.1.3 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 26.0.1 - fsevents: 2.3.3 - jiti: 1.21.7 - terser: 5.48.0 - yaml: 2.9.0 - - vitest@4.1.9(@types/node@26.0.1)(@vitest/coverage-v8@4.1.9)(jsdom@29.1.1)(msw@2.14.6(@types/node@26.0.1)(typescript@5.9.3))(vite@8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0)): - dependencies: - '@vitest/expect': 4.1.9 - '@vitest/mocker': 4.1.9(msw@2.14.6(@types/node@26.0.1)(typescript@5.9.3))(vite@8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.9 - '@vitest/runner': 4.1.9 - '@vitest/snapshot': 4.1.9 - '@vitest/spy': 4.1.9 - '@vitest/utils': 4.1.9 - es-module-lexer: 2.2.0 - expect-type: 1.4.0 - magic-string: 0.30.21 - obug: 2.1.3 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.17 - tinyrainbow: 3.1.0 - vite: 8.1.2(@types/node@26.0.1)(jiti@1.21.7)(terser@5.48.0)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 26.0.1 - '@vitest/coverage-v8': 4.1.9(vitest@4.1.9) - jsdom: 29.1.1 - transitivePeerDependencies: - - msw - w3c-hr-time@1.0.2: dependencies: browser-process-hrtime: 1.0.0 @@ -15123,10 +13628,6 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -15143,8 +13644,6 @@ snapshots: webidl-conversions@7.0.0: {} - webidl-conversions@8.0.1: {} - webpack-bundle-analyzer@4.10.2: dependencies: '@discoveryjs/json-ext': 0.5.7 @@ -15296,8 +13795,6 @@ snapshots: whatwg-mimetype@3.0.0: {} - whatwg-mimetype@5.0.0: {} - whatwg-url@10.0.0: dependencies: tr46: 3.0.0 @@ -15308,14 +13805,6 @@ snapshots: tr46: 3.0.0 webidl-conversions: 7.0.0 - whatwg-url@16.0.1: - dependencies: - '@exodus/bytes': 1.15.1 - tr46: 6.0.0 - webidl-conversions: 8.0.1 - transitivePeerDependencies: - - '@noble/hashes' - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -15370,11 +13859,6 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - wildcard@2.0.1: {} word-wrap@1.2.5: {} @@ -15408,8 +13892,6 @@ snapshots: xml-name-validator@4.0.0: {} - xml-name-validator@5.0.0: {} - xmlchars@2.2.0: {} y18n@5.0.8: {} diff --git a/frontend/pnpm-workspace.yaml b/frontend/pnpm-workspace.yaml index 345b3f44..407bc179 100644 --- a/frontend/pnpm-workspace.yaml +++ b/frontend/pnpm-workspace.yaml @@ -1,4 +1,3 @@ packages: - "apps/*" - "e2e" - - "packages/*"