diff --git a/.gitignore b/.gitignore
index 48a3293..8aaa1f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,3 +31,4 @@ node_modules
# Nix
result
.data/
+app/coverage/*
diff --git a/app/components/AppFooter.vue b/app/components/AppFooter.vue
index 7e97e3d..87e125f 100644
--- a/app/components/AppFooter.vue
+++ b/app/components/AppFooter.vue
@@ -4,7 +4,7 @@
Copyright © {{ new Date().getFullYear() }}
{{ $t('footer.versions.frontend') }}: {{ version }}
-
{{ $t('footer.versions.backend') }}: {{ meta?.version }}
+
{{ $t('footer.versions.backend') }}: {{ backendVersion }}
@@ -30,7 +30,10 @@ import { version } from '../../package.json';
const { isMobile } = useDevice();
const orientation = computed(() => (isMobile ? 'vertical' : 'horizontal'));
const { getMeta } = useBackend();
-const meta = await getMeta();
+const { data, error, loading } = getMeta();
+const backendVersion = computed(() =>
+ loading.value ? 'backend.loading' : data?.value?.version || $t('backend.failed'),
+);
const items = computed(() => [
{
label: $t('footer.links.source'),
diff --git a/app/composables/useApi.test.ts b/app/composables/useApi.test.ts
new file mode 100644
index 0000000..6a91be3
--- /dev/null
+++ b/app/composables/useApi.test.ts
@@ -0,0 +1,361 @@
+import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
+import { nextTick } from 'vue';
+import type { FetchError } from 'ofetch';
+import type { ApiError } from '~/types/api/error';
+import { useApi } from './useApi';
+
+// Mock dependencies
+vi.mock('#app', () => ({
+ useRuntimeConfig: vi.fn(() => ({
+ public: {
+ apiBase: 'http://localhost:3100/api',
+ },
+ })),
+}));
+
+// Mock $fetch globally
+global.$fetch = vi.fn();
+
+describe('useApi', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ afterEach(() => {
+ vi.restoreAllMocks();
+ });
+
+ describe('GET requests', () => {
+ it('should make a GET request and populate data on success', async () => {
+ const mockData = { id: 1, name: 'Test' };
+ vi.mocked($fetch).mockResolvedValueOnce(mockData);
+
+ const api = useApi();
+ const result = api.get('/test');
+
+ // Should start loading
+ await nextTick();
+ expect(result.loading.value).toBe(false); // Immediate execution completes quickly
+
+ // Wait for the async operation
+ await vi.waitFor(() => expect(result.data.value).toStrictEqual(mockData));
+
+ expect($fetch).toHaveBeenCalledWith('/test', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'GET',
+ body: undefined,
+ });
+ expect(result.data.value).toEqual(mockData);
+ expect(result.error.value).toBeNull();
+ expect(result.loading.value).toBe(false);
+ });
+
+ it('should handle GET request with custom options', async () => {
+ const mockData = { result: 'success' };
+ vi.mocked($fetch).mockResolvedValueOnce(mockData);
+
+ const api = useApi();
+ const result = api.get('/test', { headers: { 'X-Custom': 'header' } });
+
+ await vi.waitFor(() => expect(result.data.value).toStrictEqual(mockData));
+
+ expect($fetch).toHaveBeenCalledWith('/test', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'GET',
+ headers: { 'X-Custom': 'header' },
+ body: undefined,
+ });
+ });
+
+ it('should not execute immediately when immediate is false', async () => {
+ const api = useApi();
+ const result = api.get('/test', {}, false);
+
+ expect($fetch).not.toHaveBeenCalled();
+ expect(result.data.value).toBeNull();
+ expect(result.loading.value).toBe(false);
+ });
+
+ it('should execute when run() is called manually', async () => {
+ const mockData = { manual: true };
+ vi.mocked($fetch).mockResolvedValueOnce(mockData);
+
+ const api = useApi();
+ const result = api.get('/test', {}, false);
+
+ expect($fetch).not.toHaveBeenCalled();
+
+ await result.run();
+
+ expect($fetch).toHaveBeenCalledWith('/test', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'GET',
+ body: undefined,
+ });
+ expect(result.data.value).toEqual(mockData);
+ });
+ });
+
+ describe('DELETE requests', () => {
+ it('should make a DELETE request', async () => {
+ const mockData = { deleted: true };
+ vi.mocked($fetch).mockResolvedValueOnce(mockData);
+
+ const api = useApi();
+ const result = api.del('/test/1');
+
+ await vi.waitFor(() => expect(result.data.value).toStrictEqual(mockData));
+
+ expect($fetch).toHaveBeenCalledWith('/test/1', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'DELETE',
+ body: undefined,
+ });
+ expect(result.data.value).toEqual(mockData);
+ });
+ });
+
+ describe('POST requests', () => {
+ it('should make a POST request with body', async () => {
+ const mockResponse = { id: 1, created: true };
+ const requestBody = { name: 'New Item' };
+ vi.mocked($fetch).mockResolvedValueOnce(mockResponse);
+
+ const api = useApi();
+ const result = api.post(
+ '/test',
+ {},
+ true,
+ requestBody,
+ );
+
+ await vi.waitFor(() => expect(result.data.value).toStrictEqual(mockResponse));
+
+ expect($fetch).toHaveBeenCalledWith('/test', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'POST',
+ body: requestBody,
+ });
+ expect(result.data.value).toEqual(mockResponse);
+ });
+
+ it('should allow run() to be called with a different body', async () => {
+ const mockResponse = { success: true };
+ vi.mocked($fetch).mockResolvedValueOnce(mockResponse);
+
+ const api = useApi();
+ const result = api.post('/test', {}, false);
+
+ const body = { data: 'runtime-data' };
+ await result.run(body);
+
+ expect($fetch).toHaveBeenCalledWith('/test', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'POST',
+ body,
+ });
+ expect(result.data.value).toEqual(mockResponse);
+ });
+ });
+
+ describe('PUT requests', () => {
+ it('should make a PUT request with body', async () => {
+ const mockResponse = { updated: true };
+ const requestBody = { name: 'Updated Item' };
+ vi.mocked($fetch).mockResolvedValueOnce(mockResponse);
+
+ const api = useApi();
+ const result = api.put(
+ '/test/1',
+ {},
+ true,
+ requestBody,
+ );
+
+ await vi.waitFor(() => expect(result.data.value).toStrictEqual(mockResponse));
+
+ expect($fetch).toHaveBeenCalledWith('/test/1', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'PUT',
+ body: requestBody,
+ });
+ });
+ });
+
+ describe('PATCH requests', () => {
+ it('should make a PATCH request with body', async () => {
+ const mockResponse = { patched: true };
+ const requestBody = { field: 'value' };
+ vi.mocked($fetch).mockResolvedValueOnce(mockResponse);
+
+ const api = useApi();
+ const result = api.patch(
+ '/test/1',
+ {},
+ true,
+ requestBody,
+ );
+
+ await vi.waitFor(() => expect(result.data.value).toStrictEqual(mockResponse));
+
+ expect($fetch).toHaveBeenCalledWith('/test/1', {
+ baseURL: 'http://localhost:3100/api',
+ method: 'PATCH',
+ body: requestBody,
+ });
+ });
+ });
+
+ describe('Error handling', () => {
+ it('should handle fetch errors with ApiError response', async () => {
+ const apiError: ApiError = {
+ message: 'backend.errors.not_found',
+ success: false,
+ };
+
+ const fetchError: Partial = {
+ message: 'Fetch Error',
+ response: {
+ _data: apiError,
+ } as any,
+ };
+
+ vi.mocked($fetch).mockRejectedValueOnce(fetchError);
+
+ const api = useApi();
+ const result = api.get('/test');
+
+ await vi.waitFor(() => expect(result.error.value).not.toBeNull());
+
+ expect(result.data.value).toBeNull();
+ expect(result.error.value).toEqual(apiError);
+ expect(result.loading.value).toBe(false);
+ });
+
+ it('should handle fetch errors without ApiError response', async () => {
+ const fetchError: Partial = {
+ message: 'Network Error',
+ response: undefined,
+ };
+
+ vi.mocked($fetch).mockRejectedValueOnce(fetchError);
+
+ const api = useApi();
+ const result = api.get('/test');
+
+ await vi.waitFor(() => expect(result.error.value).not.toBeNull());
+
+ expect(result.error.value).toEqual({
+ message: 'Network Error',
+ success: false,
+ });
+ });
+
+ it('should use default error message when fetch error has no message', async () => {
+ const fetchError: Partial = {
+ message: '',
+ };
+
+ vi.mocked($fetch).mockRejectedValueOnce(fetchError);
+
+ const api = useApi();
+ const result = api.get('/test');
+
+ await vi.waitFor(() => expect(result.error.value).not.toBeNull());
+
+ expect(result.error.value).toEqual({
+ message: 'backend.errors.unknown',
+ success: false,
+ });
+ });
+
+ it('should clear previous errors on new request', async () => {
+ const fetchError: Partial = {
+ message: 'First Error',
+ };
+ const mockData = { success: true };
+
+ // First request fails
+ vi.mocked($fetch).mockRejectedValueOnce(fetchError);
+
+ const api = useApi();
+ const result = api.get('/test', {}, false);
+
+ await result.run();
+ await vi.waitFor(() => expect(result.error.value).not.toBeNull());
+ expect(result.error.value?.message).toBe('First Error');
+
+ // Second request succeeds
+ vi.mocked($fetch).mockResolvedValueOnce(mockData);
+ await result.run();
+
+ await vi.waitFor(() => expect(result.data.value).toStrictEqual(mockData));
+ expect(result.error.value).toBeNull();
+ });
+ });
+
+ describe('Loading state', () => {
+ it('should set loading to true during request', async () => {
+ let resolvePromise: (value: any) => void;
+ const promise = new Promise((resolve) => {
+ resolvePromise = resolve;
+ });
+
+ vi.mocked($fetch).mockReturnValueOnce(promise as any);
+
+ const api = useApi();
+ const result = api.get('/test', {}, false);
+
+ expect(result.loading.value).toBe(false);
+
+ const runPromise = result.run();
+
+ // Should be loading
+ await nextTick();
+ expect(result.loading.value).toBe(true);
+
+ // Resolve the request
+ resolvePromise!({ done: true });
+ await runPromise;
+
+ expect(result.loading.value).toBe(false);
+ });
+
+ it('should set loading to false after error', async () => {
+ let rejectPromise: (error: any) => void;
+ const promise = new Promise((_, reject) => {
+ rejectPromise = reject;
+ });
+
+ vi.mocked($fetch).mockReturnValueOnce(promise as any);
+
+ const api = useApi();
+ const result = api.get('/test', {}, false);
+
+ const runPromise = result.run();
+
+ await nextTick();
+ expect(result.loading.value).toBe(true);
+
+ rejectPromise!({ message: 'Error' });
+ await runPromise;
+
+ expect(result.loading.value).toBe(false);
+ });
+ });
+
+ describe('Return type structure', () => {
+ it('should return QueryResult with correct structure', async () => {
+ vi.mocked($fetch).mockResolvedValueOnce({ test: 'data' });
+
+ const api = useApi();
+ const result = api.get('/test', {}, false);
+
+ expect(result).toHaveProperty('data');
+ expect(result).toHaveProperty('error');
+ expect(result).toHaveProperty('loading');
+ expect(result).toHaveProperty('run');
+ expect(typeof result.run).toBe('function');
+ });
+ });
+});
diff --git a/app/composables/useApi.ts b/app/composables/useApi.ts
index 9064c8d..66cc90f 100644
--- a/app/composables/useApi.ts
+++ b/app/composables/useApi.ts
@@ -1,32 +1,67 @@
-import type { FetchOptions } from 'ofetch';
+import type { FetchError, FetchOptions } from 'ofetch';
+import type { ApiError } from '~/types/api/error';
+import type { HttpMethod } from '~/types/http-method';
+import { QueryResult } from '~/types/query-result';
-export const useApi = () => {
- const config = useRuntimeConfig();
- const apiFetch = $fetch.create({
- baseURL: config.public.apiBase,
- });
+export interface UseApi {
+ get: (path: string, opts?: FetchOptions, immediate?: boolean) => UseApiResponse;
+ del: (path: string, opts?: FetchOptions, immediate?: boolean) => UseApiResponse;
+ post: (path: string, opts?: FetchOptions, immediate?: boolean, body?: B) => UseApiResponse;
+ put: (path: string, opts?: FetchOptions, immediate?: boolean, body?: B) => UseApiResponse;
+ patch: (path: string, opts?: FetchOptions, immediate?: boolean, body?: B) => UseApiResponse;
+}
- const get = (url: string, options?: FetchOptions) => apiFetch(url, { method: 'GET', ...options });
+const createRequest = (
+ method: HttpMethod,
+ url: string,
+ opts?: FetchOptions,
+ immediate: boolean = true,
+ body?: PayloadT,
+): QueryResult => {
+ const response = new QueryResult();
+ const { apiBase } = useRuntimeConfig().public;
- const post = >(
- url: string,
- body?: PayloadT,
- options?: FetchOptions,
- ) => apiFetch(url, { method: 'POST', body, ...options });
+ const run = async (requestBody?: PayloadT): Promise => {
+ response.loading.value = true;
+ response.error.value = null;
- const put = >(
- url: string,
- body?: PayloadT,
- options?: FetchOptions,
- ) => apiFetch(url, { method: 'PUT', body, ...options });
+ try {
+ const res = await $fetch(url, {
+ baseURL: apiBase,
+ ...opts,
+ method,
+ body: requestBody ?? undefined,
+ });
+ response.data.value = res;
+ } catch (e) {
+ const fetchError = e as FetchError;
+ const errBody = fetchError?.response?._data as ApiError | undefined;
+ response.error.value = errBody ?? {
+ message: fetchError.message || 'backend.errors.unknown',
+ success: false,
+ };
+ } finally {
+ response.loading.value = false;
+ }
+ };
+ response.run = run;
- const patch = >(
- url: string,
- body?: PayloadT,
- options?: FetchOptions,
- ) => apiFetch(url, { method: 'PATCH', body, ...options });
+ if (immediate) run(body);
- const del = (url: string, options?: FetchOptions) => apiFetch(url, { method: 'DELETE', ...options });
+ return response;
+};
+
+export const useApi = (): UseApi => {
+ const get = (path: string, opts?: FetchOptions, immediate: boolean = true) =>
+ createRequest('GET', path, opts, immediate);
+ const del = (path: string, opts?: FetchOptions, immediate: boolean = true) =>
+ createRequest('DELETE', path, opts, immediate);
+ const post = (path: string, opts?: FetchOptions, immediate: boolean = true, body?: B) =>
+ createRequest('POST', path, opts, immediate, body);
+ const put = (path: string, opts?: FetchOptions, immediate: boolean = true, body?: B) =>
+ createRequest('PUT', path, opts, immediate, body);
+ const patch = (path: string, opts?: FetchOptions, immediate: boolean = true, body?: B) =>
+ createRequest('PATCH', path, opts, immediate, body);
return { get, post, put, patch, del };
};
diff --git a/app/composables/useBackend.ts b/app/composables/useBackend.ts
index 4ff1f63..a8934ce 100644
--- a/app/composables/useBackend.ts
+++ b/app/composables/useBackend.ts
@@ -1,8 +1,12 @@
+import type { ContactRequest, ContactResponse } from '~/types/api/contact';
+import type { MetaResponse } from '~/types/api/meta';
+
export const useBackend = () => {
const api = useApi();
- const getMeta = () => api.get('/meta');
- const postContact = (contact: ContactRequest) => api.post('/contact', contact);
+ const getMeta = (): UseApiResponse => api.get('/meta');
+ const postContact = (): UseApiResponse =>
+ api.post('/contact', false);
return { getMeta, postContact };
};
diff --git a/app/types/http-method.ts b/app/types/http-method.ts
new file mode 100644
index 0000000..a9cf518
--- /dev/null
+++ b/app/types/http-method.ts
@@ -0,0 +1,19 @@
+export type HttpMethod =
+ | 'delete'
+ | 'get'
+ | 'GET'
+ | 'HEAD'
+ | 'PATCH'
+ | 'POST'
+ | 'PUT'
+ | 'DELETE'
+ | 'CONNECT'
+ | 'OPTIONS'
+ | 'TRACE'
+ | 'head'
+ | 'patch'
+ | 'post'
+ | 'put'
+ | 'connect'
+ | 'options'
+ | 'trace';
diff --git a/app/types/query-result.ts b/app/types/query-result.ts
new file mode 100644
index 0000000..a9f9d95
--- /dev/null
+++ b/app/types/query-result.ts
@@ -0,0 +1,12 @@
+import type { ApiError } from './api/error';
+
+export class QueryResult {
+ /** Reactive data - `null` until the request succeeds */
+ data: Ref = ref(null);
+ /** Reactive error - `null` until an error occurs */
+ error: Ref = ref(null);
+ /** Whether the request is currently in flight */
+ loading: Ref = ref(false);
+ /** Runs the query - Will be filled by the request helper */
+ run!: (requestBody?: PayloadT) => Promise;
+}
diff --git a/package.json b/package.json
index 149c8d5..85943ce 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,9 @@
"cleanup": "nuxt cleanup",
"lint": "eslint .",
"format": "prettier --write app/ i18n/ content/",
- "format-check": "prettier --check app/ i18n/ content/"
+ "format-check": "prettier --check app/ i18n/ content/",
+ "test": "vitest",
+ "test:local": "vitest -c vitest.config.local.ts"
},
"dependencies": {
"@nuxt/content": "3.8.0",
@@ -21,7 +23,6 @@
"@nuxt/icon": "2.1.0",
"@nuxt/image": "1.11.0",
"@nuxt/scripts": "^0.12.2",
- "@nuxt/test-utils": "3.20.1",
"@nuxt/ui": "4.1.0",
"@nuxtjs/color-mode": "3.5.2",
"@nuxtjs/device": "3.2.4",
@@ -42,13 +43,20 @@
"@iconify-json/material-symbols-light": "^1.2.44",
"@iconify-json/mdi": "^1.2.3",
"@iconify-json/simple-icons": "^1.2.58",
+ "@nuxt/test-utils": "3.20.1",
"@nuxtjs/i18n": "^10.2.0",
"@tailwindcss/postcss": "^4.1.17",
+ "@vitest/coverage-v8": "^4.0.11",
+ "@vitest/ui": "^4.0.11",
+ "@vue/test-utils": "^2.4.6",
"autoprefixer": "^10.4.22",
+ "happy-dom": "^20.0.10",
"less": "^4.4.2",
+ "playwright-core": "^1.56.1",
"postcss": "^8.5.6",
"tailwindcss": "^4.1.17",
"typescript": "^5.9.3",
+ "vitest": "^4.0.10",
"zod": "^4.1.12"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1f68bce..83b551d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,25 +13,22 @@ importers:
version: 3.8.0(better-sqlite3@12.4.1)(magicast@0.5.1)(valibot@1.1.0(typescript@5.9.3))
'@nuxt/eslint':
specifier: 1.10.0
- version: 1.10.0(@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ version: 1.10.0(@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxt/fonts':
specifier: 0.12.1
- version: 0.12.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ version: 0.12.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxt/icon':
specifier: 2.1.0
- version: 2.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
+ version: 2.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
'@nuxt/image':
specifier: 1.11.0
version: 1.11.0(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)
'@nuxt/scripts':
specifier: ^0.12.2
version: 0.12.2(@googlemaps/markerclusterer@2.6.2)(@unhead/vue@2.0.19(vue@3.5.24(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3))
- '@nuxt/test-utils':
- specifier: 3.20.1
- version: 3.20.1(magicast@0.5.1)(typescript@5.9.3)
'@nuxt/ui':
specifier: 4.1.0
- version: 4.1.0(@babel/parser@7.28.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.2)(magicast@0.5.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-router@4.6.3(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))(zod@4.1.12)
+ version: 4.1.0(@babel/parser@7.28.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.2)(magicast@0.5.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-router@4.6.3(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))(zod@4.1.12)
'@nuxtjs/color-mode':
specifier: 3.5.2
version: 3.5.2(magicast@0.5.1)
@@ -40,7 +37,7 @@ importers:
version: 3.2.4
'@nuxtjs/tailwindcss':
specifier: 7.0.0-beta.0
- version: 7.0.0-beta.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ version: 7.0.0-beta.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxtjs/turnstile':
specifier: 1.1.1
version: 1.1.1(@nuxt/scripts@0.12.2(@googlemaps/markerclusterer@2.6.2)(@unhead/vue@2.0.19(vue@3.5.24(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)))(magicast@0.5.1)
@@ -58,10 +55,10 @@ importers:
version: 3.30.0
nuxt:
specifier: ^4.2.0
- version: 4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1)
+ version: 4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1)
vite:
specifier: ^7.1.12
- version: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ version: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
vue:
specifier: ^3.5.22
version: 3.5.24(typescript@5.9.3)
@@ -84,18 +81,36 @@ importers:
'@iconify-json/simple-icons':
specifier: ^1.2.58
version: 1.2.58
+ '@nuxt/test-utils':
+ specifier: 3.20.1
+ version: 3.20.1(@vitest/ui@4.0.11)(@vue/test-utils@2.4.6)(happy-dom@20.0.10)(magicast@0.5.1)(playwright-core@1.56.1)(typescript@5.9.3)(vitest@4.0.10)
'@nuxtjs/i18n':
specifier: ^10.2.0
version: 10.2.0(@vue/compiler-dom@3.5.24)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(rollup@4.53.2)(vue@3.5.24(typescript@5.9.3))
'@tailwindcss/postcss':
specifier: ^4.1.17
version: 4.1.17
+ '@vitest/coverage-v8':
+ specifier: ^4.0.11
+ version: 4.0.11(vitest@4.0.10)
+ '@vitest/ui':
+ specifier: ^4.0.11
+ version: 4.0.11(vitest@4.0.10)
+ '@vue/test-utils':
+ specifier: ^2.4.6
+ version: 2.4.6
autoprefixer:
specifier: ^10.4.22
version: 10.4.22(postcss@8.5.6)
+ happy-dom:
+ specifier: ^20.0.10
+ version: 20.0.10
less:
specifier: ^4.4.2
version: 4.4.2
+ playwright-core:
+ specifier: ^1.56.1
+ version: 1.56.1
postcss:
specifier: ^8.5.6
version: 8.5.6
@@ -105,6 +120,9 @@ importers:
typescript:
specifier: ^5.9.3
version: 5.9.3
+ vitest:
+ specifier: ^4.0.10
+ version: 4.0.10(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.11)(happy-dom@20.0.10)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
zod:
specifier: ^4.1.12
version: 4.1.12
@@ -276,6 +294,10 @@ packages:
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
+ '@bcoe/v8-coverage@1.0.2':
+ resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
+ engines: {node: '>=18'}
+
'@capsizecss/metrics@3.6.2':
resolution: {integrity: sha512-5uL1EIhAlfg0dvWsR1DGfqIsyiPBUsD/qlra15B82Ik28BcH7ScYEHLA4F34fZA0KamlpYcappvt2n1pTuDUfw==}
@@ -987,6 +1009,9 @@ packages:
peerDependencies:
'@nuxt/scripts': ^0.11.0 || ^0.12.0
+ '@one-ini/wasm@0.1.1':
+ resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+
'@opentelemetry/api@1.9.0':
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
@@ -1923,12 +1948,18 @@ packages:
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
'@types/cloudflare-turnstile@0.2.2':
resolution: {integrity: sha512-3Yf7b1Glci+V2bFWwWBbZkRgTuegp7RDgNTOG4U0UNPB9RV4AWvwqg2/qqLff8G+SwKFNXoXvTkqaRBZrAFdKA==}
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@@ -1950,6 +1981,9 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+ '@types/node@20.19.25':
+ resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
+
'@types/parse-path@7.1.0':
resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==}
deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed.
@@ -1972,6 +2006,9 @@ packages:
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
+ '@types/whatwg-mimetype@3.0.2':
+ resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
+
'@typescript-eslint/eslint-plugin@8.46.4':
resolution: {integrity: sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -2157,6 +2194,55 @@ packages:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
+ '@vitest/coverage-v8@4.0.11':
+ resolution: {integrity: sha512-PmskkogKjVQAccD2rHS5Y8jDGPqewxASZHz4ME2aZdFaRXXzA2DZvCVeUK0Mr30N11yb9hLA8JV0c6ddZvJkxw==}
+ peerDependencies:
+ '@vitest/browser': 4.0.11
+ vitest: 4.0.11
+ peerDependenciesMeta:
+ '@vitest/browser':
+ optional: true
+
+ '@vitest/expect@4.0.10':
+ resolution: {integrity: sha512-3QkTX/lK39FBNwARCQRSQr0TP9+ywSdxSX+LgbJ2M1WmveXP72anTbnp2yl5fH+dU6SUmBzNMrDHs80G8G2DZg==}
+
+ '@vitest/mocker@4.0.10':
+ resolution: {integrity: sha512-e2OfdexYkjkg8Hh3L9NVEfbwGXq5IZbDovkf30qW2tOh7Rh9sVtmSr2ztEXOFbymNxS4qjzLXUQIvATvN4B+lg==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.0.10':
+ resolution: {integrity: sha512-99EQbpa/zuDnvVjthwz5bH9o8iPefoQZ63WV8+bsRJZNw3qQSvSltfut8yu1Jc9mqOYi7pEbsKxYTi/rjaq6PA==}
+
+ '@vitest/pretty-format@4.0.11':
+ resolution: {integrity: sha512-mlCLBJ9LyhmLv9ep7UYArYhJN9tgoPyHcRvPSN48irK0KN+WGcGwutMuzIf7GSHgloBRknqfBmcnjyiuhOx3xg==}
+
+ '@vitest/runner@4.0.10':
+ resolution: {integrity: sha512-EXU2iSkKvNwtlL8L8doCpkyclw0mc/t4t9SeOnfOFPyqLmQwuceMPA4zJBa6jw0MKsZYbw7kAn+gl7HxrlB8UQ==}
+
+ '@vitest/snapshot@4.0.10':
+ resolution: {integrity: sha512-2N4X2ZZl7kZw0qeGdQ41H0KND96L3qX1RgwuCfy6oUsF2ISGD/HpSbmms+CkIOsQmg2kulwfhJ4CI0asnZlvkg==}
+
+ '@vitest/spy@4.0.10':
+ resolution: {integrity: sha512-AsY6sVS8OLb96GV5RoG8B6I35GAbNrC49AO+jNRF9YVGb/g9t+hzNm1H6kD0NDp8tt7VJLs6hb7YMkDXqu03iw==}
+
+ '@vitest/ui@4.0.11':
+ resolution: {integrity: sha512-azqjj2WN8DxQNtDbjlSqDdK6dw7TjJYNkdF8qGPdTB8MSdva3Vbe2ExRzwfm4sK+Dk5VsJrB80ReWluzQuxmPg==}
+ peerDependencies:
+ vitest: 4.0.11
+
+ '@vitest/utils@4.0.10':
+ resolution: {integrity: sha512-kOuqWnEwZNtQxMKg3WmPK1vmhZu9WcoX69iwWjVz+jvKTsF1emzsv3eoPcDr6ykA3qP2bsCQE7CwqfNtAVzsmg==}
+
+ '@vitest/utils@4.0.11':
+ resolution: {integrity: sha512-FbPYrcdW3nRSnStV3Cy+2hYuELvKdoBd30/I0CMpLYwpOZTElSRAGgzUBvKMcnoem7XWPG/TsuytK1pHmG/Omw==}
+
'@volar/language-core@2.4.23':
resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
@@ -2242,6 +2328,9 @@ packages:
'@vue/shared@3.5.24':
resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==}
+ '@vue/test-utils@2.4.6':
+ resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
+
'@vueuse/core@10.11.1':
resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
@@ -2318,6 +2407,10 @@ packages:
'@webcontainer/env@1.1.1':
resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==}
+ abbrev@2.0.0:
+ resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
abbrev@3.0.1:
resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -2400,10 +2493,17 @@ packages:
resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
engines: {node: '>=10'}
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
ast-kit@2.2.0:
resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==}
engines: {node: '>=20.19.0'}
+ ast-v8-to-istanbul@0.3.8:
+ resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==}
+
ast-walker-scope@0.8.3:
resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==}
engines: {node: '>=20.19.0'}
@@ -2569,6 +2669,10 @@ packages:
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+ chai@6.2.1:
+ resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==}
+ engines: {node: '>=18'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -2653,6 +2757,10 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
@@ -2687,6 +2795,9 @@ packages:
confbox@0.2.2:
resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+ config-chain@1.1.13:
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -2946,6 +3057,11 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ editorconfig@1.0.4:
+ resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
+ engines: {node: '>=14'}
+ hasBin: true
+
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -3248,6 +3364,10 @@ packages:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'}
+ expect-type@1.2.2:
+ resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
+ engines: {node: '>=12.0.0'}
+
exsolve@1.0.8:
resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
@@ -3293,6 +3413,9 @@ packages:
picomatch:
optional: true
+ fflate@0.8.2:
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
@@ -3470,6 +3593,10 @@ packages:
h3@1.15.4:
resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==}
+ happy-dom@20.0.10:
+ resolution: {integrity: sha512-6umCCHcjQrhP5oXhrHQQvLB0bwb1UzHAHdsXy+FjtKoYjUhmNZsQL8NivwM1vDvNEChJabVrUYxUnp/ZdYmy2g==}
+ engines: {node: '>=20.0.0'}
+
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -3541,6 +3668,9 @@ packages:
html-entities@2.6.0:
resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
@@ -3745,6 +3875,22 @@ packages:
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
engines: {node: '>=16'}
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-lib-source-maps@5.0.6:
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.2.0:
+ resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
+ engines: {node: '>=8'}
+
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
@@ -3752,6 +3898,15 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+ js-beautify@1.15.4:
+ resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ js-cookie@3.0.5:
+ resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
+ engines: {node: '>=14'}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -3990,6 +4145,10 @@ packages:
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
engines: {node: '>=6'}
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
@@ -4178,6 +4337,10 @@ packages:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
+ minimatch@9.0.1:
+ resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -4310,6 +4473,11 @@ packages:
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+ nopt@7.2.1:
+ resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ hasBin: true
+
nopt@8.1.0:
resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -4551,6 +4719,11 @@ packages:
pkg-types@2.3.0:
resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+ playwright-core@1.56.1:
+ resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
@@ -4767,6 +4940,9 @@ packages:
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
+ proto-list@1.2.4:
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+
protocols@2.0.2:
resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==}
@@ -5030,6 +5206,9 @@ packages:
shiki@3.15.0:
resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==}
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
@@ -5116,6 +5295,9 @@ packages:
resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
engines: {node: '>=12.0.0'}
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
standard-as-callback@2.1.0:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
@@ -5279,6 +5461,12 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
tinyexec@1.0.2:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
@@ -5287,6 +5475,10 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ tinyrainbow@3.0.3:
+ resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
+ engines: {node: '>=14.0.0'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -5359,6 +5551,9 @@ packages:
unctx@2.4.1:
resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
unenv@2.0.0-rc.24:
resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
@@ -5691,6 +5886,40 @@ packages:
vitest-environment-nuxt@1.0.1:
resolution: {integrity: sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow==}
+ vitest@4.0.10:
+ resolution: {integrity: sha512-2Fqty3MM9CDwOVet/jaQalYlbcjATZwPYGcqpiYQqgQ/dLC7GuHdISKgTYIVF/kaishKxLzleKWWfbSDklyIKg==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/debug': ^4.1.12
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/browser-playwright': 4.0.10
+ '@vitest/browser-preview': 4.0.10
+ '@vitest/browser-webdriverio': 4.0.10
+ '@vitest/ui': 4.0.10
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/debug':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
vscode-uri@3.1.0:
resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
@@ -5702,6 +5931,9 @@ packages:
peerDependencies:
typescript: '*'
+ vue-component-type-helpers@2.2.12:
+ resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==}
+
vue-component-type-helpers@3.1.3:
resolution: {integrity: sha512-V1dOD8XYfstOKCnXbWyEJIrhTBMwSyNjv271L1Jlx9ExpNlCSuqOs3OdWrGJ0V544zXufKbcYabi/o+gK8lyfQ==}
@@ -5759,6 +5991,10 @@ packages:
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+ whatwg-mimetype@3.0.0:
+ resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
+ engines: {node: '>=12'}
+
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
@@ -5776,6 +6012,11 @@ packages:
engines: {node: ^18.17.0 || >=20.5.0}
hasBin: true
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
@@ -6108,6 +6349,8 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
+ '@bcoe/v8-coverage@1.0.2': {}
+
'@capsizecss/metrics@3.6.2': {}
'@capsizecss/unpack@2.4.0':
@@ -6695,19 +6938,19 @@ snapshots:
'@nuxt/devalue@2.0.2': {}
- '@nuxt/devtools-kit@2.7.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ '@nuxt/devtools-kit@2.7.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
'@nuxt/kit': 3.20.1(magicast@0.5.1)
execa: 8.0.1
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
transitivePeerDependencies:
- magicast
- '@nuxt/devtools-kit@3.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ '@nuxt/devtools-kit@3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
'@nuxt/kit': 4.2.1(magicast@0.5.1)
execa: 8.0.1
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
transitivePeerDependencies:
- magicast
@@ -6722,12 +6965,12 @@ snapshots:
prompts: 2.4.2
semver: 7.7.3
- '@nuxt/devtools@3.1.0(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
+ '@nuxt/devtools@3.1.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
dependencies:
- '@nuxt/devtools-kit': 3.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@nuxt/devtools-kit': 3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxt/devtools-wizard': 3.1.0
'@nuxt/kit': 4.2.1(magicast@0.5.1)
- '@vue/devtools-core': 8.0.3(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
+ '@vue/devtools-core': 8.0.3(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
'@vue/devtools-kit': 8.0.3
birpc: 2.8.0
consola: 3.4.2
@@ -6752,9 +6995,9 @@ snapshots:
sirv: 3.0.2
structured-clone-es: 1.0.0
tinyglobby: 0.2.15
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
- vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
- vite-plugin-vue-tracer: 1.1.3(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ vite-plugin-vue-tracer: 1.1.3(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
which: 5.0.0
ws: 8.18.3
transitivePeerDependencies:
@@ -6803,10 +7046,10 @@ snapshots:
- supports-color
- typescript
- '@nuxt/eslint@1.10.0(@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ '@nuxt/eslint@1.10.0(@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
'@eslint/config-inspector': 1.3.0(eslint@9.39.1(jiti@2.6.1))
- '@nuxt/devtools-kit': 3.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@nuxt/devtools-kit': 3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxt/eslint-config': 1.10.0(@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
'@nuxt/eslint-plugin': 1.10.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
'@nuxt/kit': 4.2.1(magicast@0.5.1)
@@ -6831,9 +7074,9 @@ snapshots:
- utf-8-validate
- vite
- '@nuxt/fonts@0.11.4(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ '@nuxt/fonts@0.11.4(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
- '@nuxt/devtools-kit': 2.7.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@nuxt/devtools-kit': 2.7.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxt/kit': 3.20.1(magicast@0.5.1)
consola: 3.4.2
css-tree: 3.1.0
@@ -6877,16 +7120,16 @@ snapshots:
- uploadthing
- vite
- '@nuxt/fonts@0.12.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ '@nuxt/fonts@0.12.1(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
- '@nuxt/devtools-kit': 3.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@nuxt/devtools-kit': 3.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxt/kit': 4.2.1(magicast@0.5.1)
consola: 3.4.2
css-tree: 3.1.0
defu: 6.1.4
esbuild: 0.25.12
fontaine: 0.7.0
- fontless: 0.1.0(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ fontless: 0.1.0(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
h3: 1.15.4
jiti: 2.6.1
magic-regexp: 0.10.0
@@ -6923,13 +7166,13 @@ snapshots:
- uploadthing
- vite
- '@nuxt/icon@2.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
+ '@nuxt/icon@2.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@iconify/collections': 1.0.618
'@iconify/types': 2.0.0
'@iconify/utils': 3.0.2
'@iconify/vue': 5.0.0(vue@3.5.24(typescript@5.9.3))
- '@nuxt/devtools-kit': 2.7.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@nuxt/devtools-kit': 2.7.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@nuxt/kit': 4.2.1(magicast@0.5.1)
consola: 3.4.2
local-pkg: 1.1.2
@@ -7035,7 +7278,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/nitro-server@4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(typescript@5.9.3)':
+ '@nuxt/nitro-server@4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(typescript@5.9.3)':
dependencies:
'@nuxt/devalue': 2.0.2
'@nuxt/kit': 4.2.1(magicast@0.5.1)
@@ -7053,7 +7296,7 @@ snapshots:
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.12.9(better-sqlite3@12.4.1)
- nuxt: 4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1)
+ nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1)
pathe: 2.0.3
pkg-types: 2.3.0
radix3: 1.1.2
@@ -7168,7 +7411,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/test-utils@3.20.1(magicast@0.5.1)(typescript@5.9.3)':
+ '@nuxt/test-utils@3.20.1(@vitest/ui@4.0.11)(@vue/test-utils@2.4.6)(happy-dom@20.0.10)(magicast@0.5.1)(playwright-core@1.56.1)(typescript@5.9.3)(vitest@4.0.10)':
dependencies:
'@nuxt/kit': 4.2.1(magicast@0.5.1)
c12: 3.3.2(magicast@0.5.1)
@@ -7192,26 +7435,32 @@ snapshots:
tinyexec: 1.0.2
ufo: 1.6.1
unplugin: 2.3.10
- vitest-environment-nuxt: 1.0.1(magicast@0.5.1)(typescript@5.9.3)
+ vitest-environment-nuxt: 1.0.1(@vitest/ui@4.0.11)(@vue/test-utils@2.4.6)(happy-dom@20.0.10)(magicast@0.5.1)(playwright-core@1.56.1)(typescript@5.9.3)(vitest@4.0.10)
vue: 3.5.24(typescript@5.9.3)
+ optionalDependencies:
+ '@vitest/ui': 4.0.11(vitest@4.0.10)
+ '@vue/test-utils': 2.4.6
+ happy-dom: 20.0.10
+ playwright-core: 1.56.1
+ vitest: 4.0.10(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.11)(happy-dom@20.0.10)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
transitivePeerDependencies:
- magicast
- typescript
- '@nuxt/ui@4.1.0(@babel/parser@7.28.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.2)(magicast@0.5.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-router@4.6.3(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))(zod@4.1.12)':
+ '@nuxt/ui@4.1.0(@babel/parser@7.28.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.4.1))(embla-carousel@8.6.0)(ioredis@5.8.2)(magicast@0.5.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-router@4.6.3(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))(zod@4.1.12)':
dependencies:
'@ai-sdk/vue': 2.0.93(vue@3.5.24(typescript@5.9.3))(zod@4.1.12)
'@iconify/vue': 5.0.0(vue@3.5.24(typescript@5.9.3))
'@internationalized/date': 3.10.0
'@internationalized/number': 3.6.5
- '@nuxt/fonts': 0.11.4(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
- '@nuxt/icon': 2.1.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
+ '@nuxt/fonts': 0.11.4(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@nuxt/icon': 2.1.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
'@nuxt/kit': 4.2.1(magicast@0.5.1)
'@nuxt/schema': 4.2.1
'@nuxtjs/color-mode': 3.5.2(magicast@0.5.1)
'@standard-schema/spec': 1.0.0
'@tailwindcss/postcss': 4.1.17
- '@tailwindcss/vite': 4.1.17(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@tailwindcss/vite': 4.1.17(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
'@tanstack/vue-table': 8.21.3(vue@3.5.24(typescript@5.9.3))
'@tanstack/vue-virtual': 3.13.12(vue@3.5.24(typescript@5.9.3))
'@unhead/vue': 2.0.19(vue@3.5.24(typescript@5.9.3))
@@ -7293,12 +7542,12 @@ snapshots:
- vite
- vue
- '@nuxt/vite-builder@4.2.1(eslint@9.39.1(jiti@2.6.1))(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.3(typescript@5.9.3))(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)':
+ '@nuxt/vite-builder@4.2.1(@types/node@20.19.25)(eslint@9.39.1(jiti@2.6.1))(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.3(typescript@5.9.3))(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)':
dependencies:
'@nuxt/kit': 4.2.1(magicast@0.5.1)
'@rollup/plugin-replace': 6.0.3(rollup@4.53.2)
- '@vitejs/plugin-vue': 6.0.1(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
- '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
+ '@vitejs/plugin-vue': 6.0.1(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
+ '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
autoprefixer: 10.4.22(postcss@8.5.6)
consola: 3.4.2
cssnano: 7.1.2(postcss@8.5.6)
@@ -7313,7 +7562,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.0
mocked-exports: 0.1.1
- nuxt: 4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1)
+ nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1)
pathe: 2.0.3
pkg-types: 2.3.0
postcss: 8.5.6
@@ -7322,9 +7571,9 @@ snapshots:
std-env: 3.10.0
ufo: 1.6.1
unenv: 2.0.0-rc.24
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
- vite-node: 5.1.0(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
- vite-plugin-checker: 0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite-node: 5.1.0(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite-plugin-checker: 0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))
vue: 3.5.24(typescript@5.9.3)
vue-bundle-renderer: 2.2.0
transitivePeerDependencies:
@@ -7472,11 +7721,11 @@ snapshots:
- magicast
- supports-color
- '@nuxtjs/tailwindcss@7.0.0-beta.0(magicast@0.5.1)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ '@nuxtjs/tailwindcss@7.0.0-beta.0(magicast@0.5.1)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
'@nuxt/kit': 3.20.1(magicast@0.5.1)
'@tailwindcss/postcss': 4.1.17
- '@tailwindcss/vite': 4.1.17(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@tailwindcss/vite': 4.1.17(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
pathe: 2.0.3
tailwindcss: 4.1.17
transitivePeerDependencies:
@@ -7493,6 +7742,8 @@ snapshots:
transitivePeerDependencies:
- magicast
+ '@one-ini/wasm@0.1.1': {}
+
'@opentelemetry/api@1.9.0': {}
'@oxc-minify/binding-android-arm64@0.96.0':
@@ -8094,12 +8345,12 @@ snapshots:
postcss: 8.5.6
tailwindcss: 4.1.17
- '@tailwindcss/vite@4.1.17(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ '@tailwindcss/vite@4.1.17(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
'@tailwindcss/node': 4.1.17
'@tailwindcss/oxide': 4.1.17
tailwindcss: 4.1.17
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
'@tanstack/table-core@8.21.3': {}
@@ -8123,12 +8374,19 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
'@types/cloudflare-turnstile@0.2.2': {}
'@types/debug@4.1.12':
dependencies:
'@types/ms': 2.1.0
+ '@types/deep-eql@4.0.2': {}
+
'@types/estree@1.0.8': {}
'@types/geojson@7946.0.16': {}
@@ -8147,6 +8405,10 @@ snapshots:
'@types/ms@2.1.0': {}
+ '@types/node@20.19.25':
+ dependencies:
+ undici-types: 6.21.0
+
'@types/parse-path@7.1.0':
dependencies:
parse-path: 7.1.0
@@ -8165,6 +8427,8 @@ snapshots:
'@types/web-bluetooth@0.0.21': {}
+ '@types/whatwg-mimetype@3.0.2': {}
+
'@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -8346,24 +8610,100 @@ snapshots:
'@vercel/oidc@3.0.3': {}
- '@vitejs/plugin-vue-jsx@5.1.1(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
+ '@vitejs/plugin-vue-jsx@5.1.1(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5)
'@rolldown/pluginutils': 1.0.0-beta.50
'@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5)
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
vue: 3.5.24(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@6.0.1(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.1(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.29
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
vue: 3.5.24(typescript@5.9.3)
+ '@vitest/coverage-v8@4.0.11(vitest@4.0.10)':
+ dependencies:
+ '@bcoe/v8-coverage': 1.0.2
+ '@vitest/utils': 4.0.11
+ ast-v8-to-istanbul: 0.3.8
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.2.0
+ magicast: 0.5.1
+ std-env: 3.10.0
+ tinyrainbow: 3.0.3
+ vitest: 4.0.10(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.11)(happy-dom@20.0.10)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitest/expect@4.0.10':
+ dependencies:
+ '@standard-schema/spec': 1.0.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.0.10
+ '@vitest/utils': 4.0.10
+ chai: 6.2.1
+ tinyrainbow: 3.0.3
+
+ '@vitest/mocker@4.0.10(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))':
+ dependencies:
+ '@vitest/spy': 4.0.10
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+
+ '@vitest/pretty-format@4.0.10':
+ dependencies:
+ tinyrainbow: 3.0.3
+
+ '@vitest/pretty-format@4.0.11':
+ dependencies:
+ tinyrainbow: 3.0.3
+
+ '@vitest/runner@4.0.10':
+ dependencies:
+ '@vitest/utils': 4.0.10
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.0.10':
+ dependencies:
+ '@vitest/pretty-format': 4.0.10
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@4.0.10': {}
+
+ '@vitest/ui@4.0.11(vitest@4.0.10)':
+ dependencies:
+ '@vitest/utils': 4.0.11
+ fflate: 0.8.2
+ flatted: 3.3.3
+ pathe: 2.0.3
+ sirv: 3.0.2
+ tinyglobby: 0.2.15
+ tinyrainbow: 3.0.3
+ vitest: 4.0.10(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.11)(happy-dom@20.0.10)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+
+ '@vitest/utils@4.0.10':
+ dependencies:
+ '@vitest/pretty-format': 4.0.10
+ tinyrainbow: 3.0.3
+
+ '@vitest/utils@4.0.11':
+ dependencies:
+ '@vitest/pretty-format': 4.0.11
+ tinyrainbow: 3.0.3
+
'@volar/language-core@2.4.23':
dependencies:
'@volar/source-map': 2.4.23
@@ -8447,14 +8787,14 @@ snapshots:
'@vue/devtools-api@6.6.4': {}
- '@vue/devtools-core@8.0.3(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
+ '@vue/devtools-core@8.0.3(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@vue/devtools-kit': 8.0.3
'@vue/devtools-shared': 8.0.3
mitt: 3.0.1
nanoid: 5.1.6
pathe: 2.0.3
- vite-hot-client: 2.1.0(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ vite-hot-client: 2.1.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
vue: 3.5.24(typescript@5.9.3)
transitivePeerDependencies:
- vite
@@ -8509,6 +8849,11 @@ snapshots:
'@vue/shared@3.5.24': {}
+ '@vue/test-utils@2.4.6':
+ dependencies:
+ js-beautify: 1.15.4
+ vue-component-type-helpers: 2.2.12
+
'@vueuse/core@10.11.1(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@types/web-bluetooth': 0.0.20
@@ -8569,6 +8914,8 @@ snapshots:
'@webcontainer/env@1.1.1': {}
+ abbrev@2.0.0: {}
+
abbrev@3.0.1: {}
abort-controller@3.0.0:
@@ -8652,11 +8999,19 @@ snapshots:
dependencies:
tslib: 2.8.1
+ assertion-error@2.0.1: {}
+
ast-kit@2.2.0:
dependencies:
'@babel/parser': 7.28.5
pathe: 2.0.3
+ ast-v8-to-istanbul@0.3.8:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ estree-walker: 3.0.3
+ js-tokens: 9.0.1
+
ast-walker-scope@0.8.3:
dependencies:
'@babel/parser': 7.28.5
@@ -8826,6 +9181,8 @@ snapshots:
ccount@2.0.1: {}
+ chai@6.2.1: {}
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -8901,6 +9258,8 @@ snapshots:
comma-separated-tokens@2.0.3: {}
+ commander@10.0.1: {}
+
commander@11.1.0: {}
commander@2.20.3: {}
@@ -8928,6 +9287,11 @@ snapshots:
confbox@0.2.2: {}
+ config-chain@1.1.13:
+ dependencies:
+ ini: 1.3.8
+ proto-list: 1.2.4
+
consola@3.4.2: {}
convert-source-map@2.0.0: {}
@@ -9157,6 +9521,13 @@ snapshots:
eastasianwidth@0.2.0: {}
+ editorconfig@1.0.4:
+ dependencies:
+ '@one-ini/wasm': 0.1.1
+ commander: 10.0.1
+ minimatch: 9.0.1
+ semver: 7.7.3
+
ee-first@1.1.1: {}
electron-to-chromium@1.5.252: {}
@@ -9526,6 +9897,8 @@ snapshots:
expand-template@2.0.3: {}
+ expect-type@1.2.2: {}
+
exsolve@1.0.8: {}
extend@3.0.2: {}
@@ -9560,6 +9933,8 @@ snapshots:
optionalDependencies:
picomatch: 4.0.3
+ fflate@0.8.2: {}
+
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
@@ -9632,7 +10007,7 @@ snapshots:
unicode-properties: 1.4.1
unicode-trie: 2.0.0
- fontless@0.1.0(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
+ fontless@0.1.0(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
dependencies:
consola: 3.4.2
css-tree: 3.1.0
@@ -9648,7 +10023,7 @@ snapshots:
unifont: 0.6.0
unstorage: 1.17.2(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)
optionalDependencies:
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -9784,6 +10159,12 @@ snapshots:
ufo: 1.6.1
uncrypto: 0.1.3
+ happy-dom@20.0.10:
+ dependencies:
+ '@types/node': 20.19.25
+ '@types/whatwg-mimetype': 3.0.2
+ whatwg-mimetype: 3.0.0
+
has-flag@4.0.0: {}
hasown@2.0.2:
@@ -9938,6 +10319,8 @@ snapshots:
html-entities@2.6.0: {}
+ html-escaper@2.0.2: {}
+
html-void-elements@3.0.0: {}
html-whitespace-sensitive-tag-names@3.0.1: {}
@@ -10152,6 +10535,27 @@ snapshots:
isexe@3.1.1: {}
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-lib-source-maps@5.0.6:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-reports@3.2.0:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+
jackspeak@3.4.3:
dependencies:
'@isaacs/cliui': 8.0.2
@@ -10160,6 +10564,16 @@ snapshots:
jiti@2.6.1: {}
+ js-beautify@1.15.4:
+ dependencies:
+ config-chain: 1.1.13
+ editorconfig: 1.0.4
+ glob: 10.4.5
+ js-cookie: 3.0.5
+ nopt: 7.2.1
+
+ js-cookie@3.0.5: {}
+
js-tokens@4.0.0: {}
js-tokens@9.0.1: {}
@@ -10396,6 +10810,10 @@ snapshots:
semver: 5.7.2
optional: true
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.7.3
+
markdown-table@3.0.4: {}
mdast-util-find-and-replace@3.0.2:
@@ -10750,6 +11168,10 @@ snapshots:
dependencies:
brace-expansion: 2.0.2
+ minimatch@9.0.1:
+ dependencies:
+ brace-expansion: 2.0.2
+
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.2
@@ -10951,6 +11373,10 @@ snapshots:
node-releases@2.0.27: {}
+ nopt@7.2.1:
+ dependencies:
+ abbrev: 2.0.0
+
nopt@8.1.0:
dependencies:
abbrev: 3.0.1
@@ -10990,16 +11416,16 @@ snapshots:
nuxt-define@1.0.0: {}
- nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1):
+ nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1):
dependencies:
'@dxup/nuxt': 0.2.2(magicast@0.5.1)
'@nuxt/cli': 3.30.0(magicast@0.5.1)
- '@nuxt/devtools': 3.1.0(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
+ '@nuxt/devtools': 3.1.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))
'@nuxt/kit': 4.2.1(magicast@0.5.1)
- '@nuxt/nitro-server': 4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(typescript@5.9.3)
+ '@nuxt/nitro-server': 4.2.1(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(typescript@5.9.3)
'@nuxt/schema': 4.2.1
'@nuxt/telemetry': 2.6.6(magicast@0.5.1)
- '@nuxt/vite-builder': 4.2.1(eslint@9.39.1(jiti@2.6.1))(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.3(typescript@5.9.3))(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)
+ '@nuxt/vite-builder': 4.2.1(@types/node@20.19.25)(eslint@9.39.1(jiti@2.6.1))(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@20.19.25)(@vue/compiler-sfc@3.5.24)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(less@4.4.2)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3))(yaml@2.8.1))(optionator@0.9.4)(rollup@4.53.2)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.3(typescript@5.9.3))(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)
'@unhead/vue': 2.0.19(vue@3.5.24(typescript@5.9.3))
'@vue/shared': 3.5.24
c12: 3.3.2(magicast@0.5.1)
@@ -11051,6 +11477,7 @@ snapshots:
vue-router: 4.6.3(vue@3.5.24(typescript@5.9.3))
optionalDependencies:
'@parcel/watcher': 2.5.1
+ '@types/node': 20.19.25
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -11385,6 +11812,8 @@ snapshots:
exsolve: 1.0.8
pathe: 2.0.3
+ playwright-core@1.56.1: {}
+
pluralize@8.0.0: {}
postcss-calc@10.1.1(postcss@8.5.6):
@@ -11588,6 +12017,8 @@ snapshots:
property-information@7.1.0: {}
+ proto-list@1.2.4: {}
+
protocols@2.0.2: {}
prr@1.0.1:
@@ -11974,6 +12405,8 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
+ siginfo@2.0.0: {}
+
signal-exit@4.1.0: {}
simple-concat@1.0.1: {}
@@ -12061,6 +12494,8 @@ snapshots:
stable-hash-x@0.2.0: {}
+ stackback@0.0.2: {}
+
standard-as-callback@2.1.0: {}
statuses@2.0.1: {}
@@ -12250,6 +12685,10 @@ snapshots:
tiny-invariant@1.3.3: {}
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.2: {}
+
tinyexec@1.0.2: {}
tinyglobby@0.2.15:
@@ -12257,6 +12696,8 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
+ tinyrainbow@3.0.3: {}
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -12315,6 +12756,8 @@ snapshots:
magic-string: 0.30.21
unplugin: 2.3.10
+ undici-types@6.21.0: {}
+
unenv@2.0.0-rc.24:
dependencies:
pathe: 2.0.3
@@ -12592,23 +13035,23 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-dev-rpc@1.1.0(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
+ vite-dev-rpc@1.1.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
dependencies:
birpc: 2.8.0
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
- vite-hot-client: 2.1.0(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite-hot-client: 2.1.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
- vite-hot-client@2.1.0(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
+ vite-hot-client@2.1.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
dependencies:
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
- vite-node@5.1.0(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1):
+ vite-node@5.1.0(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -12623,7 +13066,7 @@ snapshots:
- tsx
- yaml
- vite-plugin-checker@0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3)):
+ vite-plugin-checker@0.11.0(eslint@9.39.1(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue-tsc@3.1.3(typescript@5.9.3)):
dependencies:
'@babel/code-frame': 7.27.1
chokidar: 4.0.3
@@ -12632,7 +13075,7 @@ snapshots:
picomatch: 4.0.3
tiny-invariant: 1.3.3
tinyglobby: 0.2.15
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
vscode-uri: 3.1.0
optionalDependencies:
eslint: 9.39.1(jiti@2.6.1)
@@ -12640,7 +13083,7 @@ snapshots:
typescript: 5.9.3
vue-tsc: 3.1.3(typescript@5.9.3)
- vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
+ vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.1(magicast@0.5.1))(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)):
dependencies:
ansis: 4.2.0
debug: 4.4.3
@@ -12650,24 +13093,24 @@ snapshots:
perfect-debounce: 2.0.0
sirv: 3.0.2
unplugin-utils: 0.3.1
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
- vite-dev-rpc: 1.1.0(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite-dev-rpc: 1.1.0(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
optionalDependencies:
'@nuxt/kit': 4.2.1(magicast@0.5.1)
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-tracer@1.1.3(vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)):
+ vite-plugin-vue-tracer@1.1.3(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.8
magic-string: 0.30.21
pathe: 2.0.3
source-map-js: 1.2.1
- vite: 7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
vue: 3.5.24(typescript@5.9.3)
- vite@7.2.2(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1):
+ vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
@@ -12676,6 +13119,7 @@ snapshots:
rollup: 4.53.2
tinyglobby: 0.2.15
optionalDependencies:
+ '@types/node': 20.19.25
fsevents: 2.3.3
jiti: 2.6.1
less: 4.4.2
@@ -12683,9 +13127,9 @@ snapshots:
terser: 5.44.1
yaml: 2.8.1
- vitest-environment-nuxt@1.0.1(magicast@0.5.1)(typescript@5.9.3):
+ vitest-environment-nuxt@1.0.1(@vitest/ui@4.0.11)(@vue/test-utils@2.4.6)(happy-dom@20.0.10)(magicast@0.5.1)(playwright-core@1.56.1)(typescript@5.9.3)(vitest@4.0.10):
dependencies:
- '@nuxt/test-utils': 3.20.1(magicast@0.5.1)(typescript@5.9.3)
+ '@nuxt/test-utils': 3.20.1(@vitest/ui@4.0.11)(@vue/test-utils@2.4.6)(happy-dom@20.0.10)(magicast@0.5.1)(playwright-core@1.56.1)(typescript@5.9.3)(vitest@4.0.10)
transitivePeerDependencies:
- '@cucumber/cucumber'
- '@jest/globals'
@@ -12700,6 +13144,47 @@ snapshots:
- typescript
- vitest
+ vitest@4.0.10(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.11)(happy-dom@20.0.10)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1):
+ dependencies:
+ '@vitest/expect': 4.0.10
+ '@vitest/mocker': 4.0.10(vite@7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1))
+ '@vitest/pretty-format': 4.0.10
+ '@vitest/runner': 4.0.10
+ '@vitest/snapshot': 4.0.10
+ '@vitest/spy': 4.0.10
+ '@vitest/utils': 4.0.10
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
+ expect-type: 1.2.2
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.15
+ tinyrainbow: 3.0.3
+ vite: 7.2.2(@types/node@20.19.25)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.1)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/debug': 4.1.12
+ '@types/node': 20.19.25
+ '@vitest/ui': 4.0.11(vitest@4.0.10)
+ happy-dom: 20.0.10
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
vscode-uri@3.1.0: {}
vue-bundle-renderer@2.2.0:
@@ -12714,6 +13199,8 @@ snapshots:
typescript: 5.9.3
vue-component-type-helpers: 3.1.3
+ vue-component-type-helpers@2.2.12: {}
+
vue-component-type-helpers@3.1.3: {}
vue-demi@0.14.10(vue@3.5.24(typescript@5.9.3)):
@@ -12769,6 +13256,8 @@ snapshots:
webpack-virtual-modules@0.6.2: {}
+ whatwg-mimetype@3.0.0: {}
+
whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3
@@ -12784,6 +13273,11 @@ snapshots:
dependencies:
isexe: 3.1.1
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
word-wrap@1.2.5: {}
wrap-ansi@7.0.0:
diff --git a/vitest.config.local.ts b/vitest.config.local.ts
new file mode 100644
index 0000000..b216554
--- /dev/null
+++ b/vitest.config.local.ts
@@ -0,0 +1,19 @@
+import {defineVitestConfig} from '@nuxt/test-utils/config';
+
+export default defineVitestConfig({
+ test: {
+ environment: 'nuxt',
+ exclude: [
+ '**/.direnv/**',
+ '**/.devenv/**',
+ '**/node_modules/**'
+ ],
+ coverage: {
+ provider: 'v8',
+ enabled: true,
+ reporter: ['html']
+ },
+ watch: true,
+ ui: true
+ }
+})
diff --git a/vitest.config.ts b/vitest.config.ts
new file mode 100644
index 0000000..d11cc3b
--- /dev/null
+++ b/vitest.config.ts
@@ -0,0 +1,18 @@
+import {defineVitestConfig} from '@nuxt/test-utils/config';
+
+export default defineVitestConfig({
+ test: {
+ environment: 'nuxt',
+ exclude: [
+ '**/.direnv/**',
+ '**/.devenv/**',
+ '**/node_modules/**'
+ ],
+ coverage: {
+ provider: 'v8',
+ enabled: true,
+ reporter: ['lcovonly']
+ },
+ watch: false
+ }
+})