diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..c0baf4787 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +# copy this file and rename it to .env +# then fill in the appropriate values + +# Some tests in the project depend on Redis or Upstash Redis +# You can create a free redis instance at upstash and copy the connection details here +REDIS_URL= +UPSTASH_REDIS_REST_URL= +UPSTASH_REDIS_REST_TOKEN= \ No newline at end of file diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6d5fac87e..51fb225f1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,6 +27,16 @@ jobs: test: runs-on: ubuntu-latest + services: + redis: + image: redis:7-alpine + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 6379:6379 steps: - uses: actions/checkout@v4 @@ -40,6 +50,10 @@ jobs: - run: pnpm i - run: pnpm run test:coverage + env: + REDIS_URL: redis://localhost:6379 + UPSTASH_REDIS_REST_URL: ${{ secrets.UPSTASH_REDIS_REST_URL }} + UPSTASH_REDIS_REST_TOKEN: ${{ secrets.UPSTASH_REDIS_REST_TOKEN }} - uses: codecov/codecov-action@v5 with: diff --git a/apps/content/.vitepress/config.ts b/apps/content/.vitepress/config.ts index 67ec76e12..54751f131 100644 --- a/apps/content/.vitepress/config.ts +++ b/apps/content/.vitepress/config.ts @@ -161,6 +161,7 @@ export default withMermaid(defineConfig({ { text: 'Cookie', link: '/docs/helpers/cookie' }, { text: 'Encryption', link: '/docs/helpers/encryption' }, { text: 'Form Data', link: '/docs/helpers/form-data' }, + { text: 'Publisher', link: '/docs/helpers/publisher' }, { text: 'Signing', link: '/docs/helpers/signing' }, ], }, diff --git a/apps/content/docs/event-iterator.md b/apps/content/docs/event-iterator.md index 7acd3169f..3a01e4687 100644 --- a/apps/content/docs/event-iterator.md +++ b/apps/content/docs/event-iterator.md @@ -106,9 +106,36 @@ const example = os }) ``` +## Publisher Helper + +You can combine the event iterator with the [Publisher Helper](/docs/helpers/publisher) to build real-time features like chat, notifications, or live updates with resume support. + +```ts +const publisher = new MemoryPublisher<{ + 'something-updated': { + id: string + } +}>() + +const live = os + .handler(async function* ({ input, signal }) { + const iterator = publisher.subscribe('something-updated', { signal }) + for await (const payload of iterator) { + // Handle payload here or yield directly to client + yield payload + } + }) + +const publish = os + .input(z.object({ id: z.string() })) + .handler(async ({ input }) => { + await publisher.publish('something-updated', { id: input.id }) + }) +``` + ## Event Publisher -oRPC includes a built-in `EventPublisher` for real-time features like chat, notifications, or live updates. It supports broadcasting and subscribing to named events. +Unlike the [Publisher Helper](/docs/helpers/publisher), the `EventPublisher` is more lightweight with synchronous publishing and no resume support. ::: code-group diff --git a/apps/content/docs/helpers/publisher.md b/apps/content/docs/helpers/publisher.md new file mode 100644 index 000000000..6be17edac --- /dev/null +++ b/apps/content/docs/helpers/publisher.md @@ -0,0 +1,223 @@ +--- +title: Publisher +description: Listen and publish events with resuming support in oRPC +--- + +# Publisher + +The Publisher is a helper that enables you to listen to and publish events to subscribers. Combined with the [Event Iterator](/docs/client/event-iterator), it allows you to build streaming responses, real-time updates, and server-sent events with minimal requirements. + +## Installation + +::: code-group + +```sh [npm] +npm install @orpc/experimental-publisher@latest +``` + +```sh [yarn] +yarn add @orpc/experimental-publisher@latest +``` + +```sh [pnpm] +pnpm add @orpc/experimental-publisher@latest +``` + +```sh [bun] +bun add @orpc/experimental-publisher@latest +``` + +```sh [deno] +deno add npm:@orpc/experimental-publisher@latest +``` + +::: + +## Basic Usage + +```ts twoslash +import { MemoryPublisher } from '@orpc/experimental-publisher/memory' +import { os } from '@orpc/server' +import * as z from 'zod' +// ---cut--- +const publisher = new MemoryPublisher<{ + 'something-updated': { + id: string + } +}>() + +const live = os + .handler(async function* ({ input, signal }) { + const iterator = publisher.subscribe('something-updated', { signal }) + for await (const payload of iterator) { + // Handle payload here or yield directly to client + yield payload + } + }) + +const publish = os + .input(z.object({ id: z.string() })) + .handler(async ({ input }) => { + await publisher.publish('something-updated', { id: input.id }) + }) +``` + +::: tip +The publisher supports both static and dynamic event names. + +```ts +const publisher = new MemoryPublisher>() +``` + +::: + +## Resume Feature + +The resume feature uses `lastEventId` to determine where to resume from after a disconnection. + +::: warning +By default, most adapters have this feature disabled. +::: + +### Server Implementation + +When subscribing, you must forward the `lastEventId` to the publisher to enable resuming: + +```ts +const live = os + .handler(async function* ({ input, signal, lastEventId }) { + const iterator = publisher.subscribe('something-updated', { signal, lastEventId }) + for await (const payload of iterator) { + yield payload + } + }) +``` + +::: warning Event ID Management +The publisher automatically manages event ids when resume is enabled. This means: + +- Event ids you provide when publishing will be ignored +- When subscribing, you must forward the event id when yielding custom payloads + +```ts +import { getEventMeta, withEventMeta } from '@orpc/server' + +const live = os + .handler(async function* ({ input, signal, lastEventId }) { + const iterator = publisher.subscribe('something-updated', { signal, lastEventId }) + for await (const payload of iterator) { + // Preserve event id when yielding custom data + yield withEventMeta({ custom: 'value' }, { ...getEventMeta(payload) }) + } + }) + +const publish = os + .input(z.object({ id: z.string() })) + .handler(async ({ input }) => { + // The event id 'this-will-be-ignored' will be replaced by the publisher + await publisher.publish('something-updated', withEventMeta({ id: input.id }, { id: 'this-will-be-ignored' })) + }) +``` + +::: + +### Client Implementation + +On the client, you can use the [Client Retry Plugin](/docs/plugins/client-retry), which automatically controls and passes `lastEventId` to the server when reconnecting. Alternatively, you can manage `lastEventId` manually: + +```ts +import { getEventMeta } from '@orpc/client' + +let lastEventId: string | undefined + +while (true) { + try { + const iterator = await client.live('input', { lastEventId }) + + for await (const payload of iterator) { + lastEventId = getEventMeta(payload)?.id // Update lastEventId + + console.log(payload) + } + } + catch { + await new Promise(resolve => setTimeout(resolve, 1000)) // Wait 1 second before retrying + } +} +``` + +## Available Adapters + +| Name | Resume Support | Description | +| ----------------------- | -------------- | ---------------------------------------------------------------- | +| `MemoryPublisher` | ✅ | A simple in-memory publisher | +| `IORedisPublisher` | ✅ | Adapter for [ioredis](https://github.com/redis/ioredis) | +| `UpstashRedisPublisher` | ✅ | Adapter for [Upstash Redis](https://github.com/upstash/redis-js) | + +::: info +If you'd like to add a new publisher adapter, please open an issue. +::: + +### Memory Publisher + +```ts +import { MemoryPublisher } from '@orpc/experimental-publisher/memory' + +const publisher = new MemoryPublisher<{ + 'something-updated': { + id: string + } +}>({ + resumeRetentionSeconds: 60 * 2, // Retain events for 2 minutes to support resume +}) +``` + +::: info +Resume support is disabled by default in `MemoryPublisher`. Enable it by setting `resumeRetentionSeconds` to an appropriate value. +::: + +### IORedis Publisher + +```ts +import { Redis } from 'ioredis' +import { IORedisPublisher } from '@orpc/experimental-publisher/ioredis' + +const publisher = new IORedisPublisher<{ + 'something-updated': { + id: string + } +}>({ + commander: new Redis(), // For executing short-lived commands + subscriber: new Redis(), // For subscribing to events + resumeRetentionSeconds: 60 * 2, // Retain events for 2 minutes to support resume + prefix: 'orpc:publisher:', // avoid conflict with other keys +}) +``` + +This adapter requires two Redis instances: one for executing short-lived commands and another for subscribing to events. + +::: info +Resume support is disabled by default in `IORedisPublisher`. Enable it by setting `resumeRetentionSeconds` to an appropriate value. +::: + +### Upstash Redis Publisher + +```ts +import { Redis } from '@upstash/redis' +import { UpstashRedisPublisher } from '@orpc/experimental-publisher/upstash-redis' + +const redis = Redis.fromEnv() + +const publisher = new UpstashRedisPublisher<{ + 'something-updated': { + id: string + } +}>(redis, { + resumeRetentionSeconds: 60 * 2, // Retain events for 2 minutes to support resume + prefix: 'orpc:publisher:', // avoid conflict with other keys +}) +``` + +::: info +Resume support is disabled by default in `UpstashRedisPublisher`. Enable it by setting `resumeRetentionSeconds` to an appropriate value. +::: diff --git a/apps/content/package.json b/apps/content/package.json index f432b7616..0dda78f54 100644 --- a/apps/content/package.json +++ b/apps/content/package.json @@ -16,6 +16,7 @@ "@orpc/arktype": "workspace:*", "@orpc/client": "workspace:*", "@orpc/contract": "workspace:*", + "@orpc/experimental-publisher": "workspace:*", "@orpc/experimental-react-swr": "workspace:*", "@orpc/openapi": "workspace:*", "@orpc/openapi-client": "workspace:*", diff --git a/package.json b/package.json index 526caa1fa..62f537a0e 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "esbuild" ], "overrides": { + "@wxt-dev/storage": "1.2.0", "typescript": "~5.8.3" } }, diff --git a/packages/arktype/package.json b/packages/arktype/package.json index 980f4595e..42df79f9c 100644 --- a/packages/arktype/package.json +++ b/packages/arktype/package.json @@ -40,5 +40,8 @@ }, "dependencies": { "@orpc/openapi": "workspace:*" + }, + "devDependencies": { + "zod": "^4.1.11" } } diff --git a/packages/publisher/.gitignore b/packages/publisher/.gitignore new file mode 100644 index 000000000..f3620b55e --- /dev/null +++ b/packages/publisher/.gitignore @@ -0,0 +1,26 @@ +# Hidden folders and files +.* +!.gitignore +!.*.example + +# Common generated folders +logs/ +node_modules/ +out/ +dist/ +dist-ssr/ +build/ +coverage/ +temp/ + +# Common generated files +*.log +*.log.* +*.tsbuildinfo +*.vitest-temp.json +vite.config.ts.timestamp-* +vitest.config.ts.timestamp-* + +# Common manual ignore files +*.local +*.pem \ No newline at end of file diff --git a/packages/publisher/README.md b/packages/publisher/README.md new file mode 100644 index 000000000..54af19622 --- /dev/null +++ b/packages/publisher/README.md @@ -0,0 +1,81 @@ +
+ oRPC logo +
+ +

+ +
+ + codecov + + + weekly downloads + + + MIT License + + + Discord + + + Ask DeepWiki + +
+ +

Typesafe APIs Made Simple 🪄

+ +**oRPC is a powerful combination of RPC and OpenAPI**, makes it easy to build APIs that are end-to-end type-safe and adhere to OpenAPI standards + +--- + +## Highlights + +- **🔗 End-to-End Type Safety**: Ensure type-safe inputs, outputs, and errors from client to server. +- **📘 First-Class OpenAPI**: Built-in support that fully adheres to the OpenAPI standard. +- **📝 Contract-First Development**: Optionally define your API contract before implementation. +- **🔍 First-Class OpenTelemetry**: Seamlessly integrate with OpenTelemetry for observability. +- **⚙️ Framework Integrations**: Seamlessly integrate with TanStack Query (React, Vue, Solid, Svelte, Angular), SWR, Pinia Colada, and more. +- **🚀 Server Actions**: Fully compatible with React Server Actions on Next.js, TanStack Start, and other platforms. +- **🔠 Standard Schema Support**: Works out of the box with Zod, Valibot, ArkType, and other schema validators. +- **🗃️ Native Types**: Supports native types like Date, File, Blob, BigInt, URL, and more. +- **⏱️ Lazy Router**: Enhance cold start times with our lazy routing feature. +- **📡 SSE & Streaming**: Enjoy full type-safe support for SSE and streaming. +- **🌍 Multi-Runtime Support**: Fast and lightweight on Cloudflare, Deno, Bun, Node.js, and beyond. +- **🔌 Extendability**: Easily extend functionality with plugins, middleware, and interceptors. + +## Documentation + +You can find the full documentation [here](https://orpc.unnoq.com). + +## Packages + +- [@orpc/contract](https://www.npmjs.com/package/@orpc/contract): Build your API contract. +- [@orpc/server](https://www.npmjs.com/package/@orpc/server): Build your API or implement API contract. +- [@orpc/client](https://www.npmjs.com/package/@orpc/client): Consume your API on the client with type-safety. +- [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi): Generate OpenAPI specs and handle OpenAPI requests. +- [@orpc/otel](https://www.npmjs.com/package/@orpc/otel): [OpenTelemetry](https://opentelemetry.io/) integration for observability. +- [@orpc/nest](https://www.npmjs.com/package/@orpc/nest): Deeply integrate oRPC with [NestJS](https://nestjs.com/). +- [@orpc/react](https://www.npmjs.com/package/@orpc/react): Utilities for integrating oRPC with React and React Server Actions. +- [@orpc/tanstack-query](https://www.npmjs.com/package/@orpc/tanstack-query): [TanStack Query](https://tanstack.com/query/latest) integration. +- [@orpc/experimental-react-swr](https://www.npmjs.com/package/@orpc/experimental-react-swr): [SWR](https://swr.vercel.app/) integration. +- [@orpc/vue-colada](https://www.npmjs.com/package/@orpc/vue-colada): Integration with [Pinia Colada](https://pinia-colada.esm.dev/). +- [@orpc/hey-api](https://www.npmjs.com/package/@orpc/hey-api): [Hey API](https://heyapi.dev/) integration. +- [@orpc/zod](https://www.npmjs.com/package/@orpc/zod): More schemas that [Zod](https://zod.dev/) doesn't support yet. +- [@orpc/valibot](https://www.npmjs.com/package/@orpc/valibot): OpenAPI spec generation from [Valibot](https://valibot.dev/). +- [@orpc/arktype](https://www.npmjs.com/package/@orpc/arktype): OpenAPI spec generation from [ArkType](https://arktype.io/). + +## `@orpc/experimental-publisher` + +Event Publisher with multiple adapter support, resume support, and more. + +## Sponsors + +

+ + + +

+ +## License + +Distributed under the MIT License. See [LICENSE](https://github.com/unnoq/orpc/blob/main/LICENSE) for more information. diff --git a/packages/publisher/package.json b/packages/publisher/package.json new file mode 100644 index 000000000..5f00b78d5 --- /dev/null +++ b/packages/publisher/package.json @@ -0,0 +1,75 @@ +{ + "name": "@orpc/experimental-publisher", + "type": "module", + "version": "0.0.1", + "license": "MIT", + "homepage": "https://orpc.unnoq.com", + "repository": { + "type": "git", + "url": "git+https://github.com/unnoq/orpc.git", + "directory": "packages/publisher" + }, + "keywords": [ + "unnoq", + "orpc" + ], + "publishConfig": { + "exports": { + ".": { + "types": "./dist/index.d.mts", + "import": "./dist/index.mjs", + "default": "./dist/index.mjs" + }, + "./memory": { + "types": "./dist/adapters/memory.d.mts", + "import": "./dist/adapters/memory.mjs", + "default": "./dist/adapters/memory.mjs" + }, + "./ioredis": { + "types": "./dist/adapters/ioredis.d.mts", + "import": "./dist/adapters/ioredis.mjs", + "default": "./dist/adapters/ioredis.mjs" + }, + "./upstash-redis": { + "types": "./dist/adapters/upstash-redis.d.mts", + "import": "./dist/adapters/upstash-redis.mjs", + "default": "./dist/adapters/upstash-redis.mjs" + } + } + }, + "exports": { + ".": "./src/index.ts", + "./memory": "./src/adapters/memory.ts", + "./ioredis": "./src/adapters/ioredis.ts", + "./upstash-redis": "./src/adapters/upstash-redis.ts" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "unbuild", + "build:watch": "pnpm run build --watch", + "type:check": "tsc -b" + }, + "peerDependencies": { + "@upstash/redis": ">=1.35.6", + "ioredis": ">=5.8.1" + }, + "peerDependenciesMeta": { + "@upstash/redis": { + "optional": true + }, + "ioredis": { + "optional": true + } + }, + "dependencies": { + "@orpc/client": "workspace:*", + "@orpc/shared": "workspace:*", + "@orpc/standard-server": "workspace:*" + }, + "devDependencies": { + "@upstash/redis": "^1.35.6", + "ioredis": "^5.8.1" + } +} diff --git a/packages/publisher/src/adapters/ioredis.test.ts b/packages/publisher/src/adapters/ioredis.test.ts new file mode 100644 index 000000000..371c62bd0 --- /dev/null +++ b/packages/publisher/src/adapters/ioredis.test.ts @@ -0,0 +1,678 @@ +import type { IORedisPublisherOptions } from './ioredis' +import { getEventMeta, withEventMeta } from '@orpc/standard-server' +import { Redis } from 'ioredis' +import { IORedisPublisher } from './ioredis' + +const REDIS_URL = process.env.REDIS_URL + +/** + * These tests depend on a real Redis server — make sure to set the `REDIS_URL` env. + * When writing new tests, always use unique keys to avoid conflicts with other test cases. + */ +describe.concurrent('ioredis publisher', { skip: !REDIS_URL, timeout: 20000 }, () => { + let commander: Redis + let listener: Redis + const createdPublishers: IORedisPublisher[] = [] + + function createTestingPublisher(options: Partial = {}) { + const publisher = new IORedisPublisher({ + commander, + listener, + prefix: crypto.randomUUID(), // isolated from other tests + ...options, + }) + + publisher.xtrimExactness = '=' // for easier testing + + createdPublishers.push(publisher) + + return publisher + } + + beforeAll(() => { + commander = new Redis(REDIS_URL!) + listener = new Redis(REDIS_URL!) + }) + + afterAll(async () => { + await commander.quit() + await listener.quit() + + expect(commander.listenerCount('message')).toEqual(0) + expect(commander.listenerCount('error')).toEqual(0) + expect(listener.listenerCount('message')).toEqual(0) + expect(listener.listenerCount('error')).toEqual(0) + for (const publisher of createdPublishers) { + expect(publisher.size).toEqual(0) // ensure cleanup correctly + } + }) + + it('without resume: can pub/sub but not resume', async () => { + const publisher = createTestingPublisher() // resume is disabled by default + + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener1) + const unsub2 = await publisher.subscribe('event2', listener2) + + const payload1 = { order: 1 } + const payload2 = { order: 2 } + + await publisher.publish('event1', payload1) + await publisher.publish('event3', payload2) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1.mock.calls[0]![0]).toEqual(payload1) + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + + await publisher.publish('event1', payload2) + await publisher.publish('event2', payload2) + + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(1) + }) + expect(listener2.mock.calls[0]![0]).toEqual(payload2) + expect(listener1).toHaveBeenCalledTimes(1) + + await unsub2() + + const unsub11 = await publisher.subscribe('event1', listener1, { lastEventId: '0' }) + + // Wait a bit to ensure no resume happens + await new Promise(resolve => setTimeout(resolve, 1000)) + + expect(listener1).toHaveBeenCalledTimes(1) // resume not happens + await unsub11() + }) + + describe('with resume', () => { + it('basic pub/sub', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + const payload1 = { order: 1 } + await publisher.publish('event1', payload1) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining(payload1)) + + await unsub1() + }) + + it('can pub/sub and resume', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener1) + const unsub2 = await publisher.subscribe('event2', listener2) + + const payload1 = { order: 1 } + const payload2 = { order: 2 } + + await publisher.publish('event1', payload1) + await publisher.publish('event3', payload2) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining(payload1)) + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + + await publisher.publish('event1', payload2) + await publisher.publish('event2', payload2) + + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(1) + }) + expect(listener2).toHaveBeenCalledWith(expect.objectContaining(payload2)) + expect(listener1).toHaveBeenCalledTimes(1) + + await unsub2() + + const listener3 = vi.fn() + const unsub3 = await publisher.subscribe('event1', listener3, { lastEventId: '0' }) + + await vi.waitFor(() => { + expect(listener3).toHaveBeenCalledTimes(2) + }) + expect(listener3).toHaveBeenNthCalledWith(1, expect.objectContaining(payload1)) + expect(listener3).toHaveBeenNthCalledWith(2, expect.objectContaining(payload2)) + + await unsub3() + expect(publisher.size).toEqual(0) // all listeners unsubscribed + }) + + it('control event.id', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + const payload1 = { order: 1 } + const payload2 = withEventMeta({ order: 2 }, { id: 'some-id', comments: ['hello'] }) + + await publisher.publish('event1', payload1) + await publisher.publish('event1', payload2) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(2) + }) + expect(listener1).toHaveBeenNthCalledWith(1, expect.toSatisfy((p) => { + expect(p).not.toBe(payload1) + expect(p).toEqual(payload1) + const meta = getEventMeta(p) + expect(meta?.id).toBeDefined() + expect(typeof meta?.id).toBe('string') + return true + })) + expect(listener1).toHaveBeenNthCalledWith(2, expect.toSatisfy((p) => { + expect(p).not.toBe(payload2) + expect(p).toEqual(payload2) + const meta = getEventMeta(p) + expect(meta?.id).toBeDefined() + expect(typeof meta?.id).toBe('string') + expect(meta?.comments).toEqual(['hello']) + return true + })) + + const firstEventId = getEventMeta(listener1.mock.calls[0]![0])?.id + + const listener2 = vi.fn() + const unsub2 = await publisher.subscribe('event1', listener2, { lastEventId: firstEventId }) + + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(1) // resume + }) + expect(listener2).toHaveBeenNthCalledWith(1, expect.toSatisfy((p) => { + expect(p).not.toBe(payload2) + expect(p).toEqual(payload2) + const meta = getEventMeta(p) + expect(meta?.id).toEqual(getEventMeta(listener1.mock.calls[1]![0])?.id) + expect(meta?.comments).toEqual(['hello']) + return true + })) + + await unsub1() + await unsub2() + expect(publisher.size).toEqual(0) // ensure no memory leak + }) + + it('resume event.id > lastEventId and in order', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event', listener1) + + // Publish 10 events + for (let i = 1; i <= 10; i++) { + await publisher.publish('event', { order: i }) + } + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(10) + }) + + // Get the ID of the 5th event + const fifthEventId = getEventMeta(listener1.mock.calls[4]![0])?.id + + if (!fifthEventId) { + throw new Error('No event ID found') + } + + await unsub1() + + // Now subscribe with lastEventId set to the 5th event + // Should receive events 6-10 + const listener2 = vi.fn() + const unsub2 = await publisher.subscribe('event', listener2, { lastEventId: fifthEventId }) + + // Wait for resume to complete + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(5) + }) + expect(listener2).toHaveBeenNthCalledWith(1, expect.objectContaining({ order: 6 })) + expect(listener2).toHaveBeenNthCalledWith(2, expect.objectContaining({ order: 7 })) + expect(listener2).toHaveBeenNthCalledWith(5, expect.objectContaining({ order: 10 })) + + // Verify order + for (let i = 0; i < listener2.mock.calls.length - 1; i++) { + const current = listener2.mock.calls[i]![0].order + const next = listener2.mock.calls[i + 1]![0].order + expect(next).toBeGreaterThan(current) + } + + await unsub2() + }) + + it('handles errors during resume gracefully', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const onError1 = vi.fn() + + // Subscribe with an invalid lastEventId to trigger error in xread + const unsub1 = await publisher.subscribe('event1', listener1, { lastEventId: 'invalid-id-format', onError: onError1 }) + + // Publish an event + await publisher.publish('event1', { order: 1 }) + + await vi.waitFor(() => { + expect(onError1).toHaveBeenCalledTimes(1) + // Should have received the new event even though resume failed + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining({ order: 1 })) + + await unsub1() + }) + + it('handles race condition where events published during resume', { repeats: 5 }, async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + await publisher.publish('event1', { order: 1 }) + await new Promise(resolve => setTimeout(resolve, 150)) // wait a bit + await publisher.publish('event1', { order: 2 }) + + publisher.publish('event1', { order: 3 }) + publisher.publish('event1', { order: 4 }) + const listener1 = vi.fn() + const unsub = await publisher.subscribe('event1', listener1, { lastEventId: '0' }) + + await publisher.publish('event1', { order: 5 }) + await publisher.publish('event1', { order: 6 }) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(6) // no duplicates + }) + expect(listener1).toHaveBeenNthCalledWith(1, expect.objectContaining({ order: 1 })) + expect(listener1).toHaveBeenNthCalledWith(2, expect.objectContaining({ order: 2 })) + expect(listener1).toHaveBeenNthCalledWith(3, expect.objectContaining({ order: 3 })) + expect(listener1).toHaveBeenNthCalledWith(4, expect.objectContaining({ order: 4 })) + expect(listener1).toHaveBeenNthCalledWith(5, expect.objectContaining({ order: 5 })) + expect(listener1).toHaveBeenNthCalledWith(6, expect.objectContaining({ order: 6 })) + + await unsub() + }) + + describe('cleanup retention', () => { + it('handles cleanup of expired events on publish', async () => { + const prefix = `cleanup:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 1, + prefix, + }) + + const key1 = `${prefix}event1` + + // Publish events to event1 + await Promise.all([ + publisher.publish('event1', { order: 1 }), + publisher.publish('event1', { order: 2 }), + publisher.publish('event1', { order: 3 }), + ]) + + const beforeCleanup = await commander.xread('STREAMS', key1, '0') + expect(beforeCleanup![0]![1].length).toBe(3) + + // Wait for retention to expire + await new Promise(resolve => setTimeout(resolve, 1100)) + + // Trigger cleanup by publishing a new event to event1 + await publisher.publish('event1', { order: 4 }) + + const afterCleanup = await commander.xread('STREAMS', key1, '0') + expect(afterCleanup![0]![1].length).toBe(1) // old events should be trimmed + }) + + it('verifies Redis auto-expires keys after retention period * 2', async () => { + const prefix = `expire:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 1, + prefix, + }) + + const key = `${prefix}event1` + + // Publish an event + await publisher.publish('event1', { order: 1 }) + + // Verify key exists + const ttl1 = await commander.ttl(key) + expect(ttl1).toBeGreaterThan(0) + expect(ttl1).toBeLessThanOrEqual(2) // (2 * retentionSeconds) + + // Wait for key to expire (2 * retentionSeconds = 2 seconds) + await new Promise(resolve => setTimeout(resolve, 2500)) + + // Verify key has been auto-expired by Redis + const exists = await commander.exists(key) + expect(exists).toBe(0) + }) + }) + }) + + it('handles multiple subscribers on same event with race condition', { repeats: 3 }, async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const listener2 = vi.fn() + const listener3 = vi.fn() + + const [unsub1, unsub2] = await Promise.all([ // race condition + publisher.subscribe('event1', listener1), + publisher.subscribe('event1', listener2), + ]) + const unsub3 = await publisher.subscribe('event1', listener3) + + const payload = { order: 1 } + await publisher.publish('event1', payload) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledTimes(1) + expect(listener3).toHaveBeenCalledTimes(1) + }) + + expect(listener1).toHaveBeenCalledWith({ order: 1 }) + expect(listener2).toHaveBeenCalledWith({ order: 1 }) + expect(listener3).toHaveBeenCalledWith({ order: 1 }) + + await unsub1() + + await publisher.publish('event1', { order: 2 }) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledTimes(2) + expect(listener3).toHaveBeenCalledTimes(2) + }) + + expect(listener2).toHaveBeenNthCalledWith(2, { order: 2 }) + expect(listener3).toHaveBeenNthCalledWith(2, { order: 2 }) + + await unsub2() + await unsub3() + }) + + it('handles prefix correctly', async () => { + const prefix = `custom:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + prefix, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + // verify channel use prefix (NUMSUB is not reliable) + // await vi.waitFor(async () => { + // const numSub = await commander.pubsub('NUMSUB', `${prefix}event1`) + // expect(numSub[1]).toBe(1) + // }) + + const payload = { order: 1 } + await publisher.publish('event1', payload) + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining(payload)) + + // Verify the key uses prefix + const keys = await commander.keys(`${prefix}*`) + expect(keys.some(k => k.includes(`${prefix}event1`))).toBe(true) + + await unsub1() + }) + + it('handles serialization with complex objects and custom serializers', async () => { + class Person { + constructor( + public name: string, + public date: Date, + ) { } + } + + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + customJsonSerializers: [ + { + condition: data => data instanceof Person, + type: 20, + serialize: person => ({ name: person.name, date: person.date }), + deserialize: data => new Person(data.name, data.date), + }, + ], + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + const payload = { + order: 1, + nested: { + value: 'test', + array: [1, 2, 3], + }, + date: new Date('2024-01-01'), + person: new Person('John Doe', new Date('2023-01-01')), + } + + await publisher.publish('event1', payload) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + const received = listener1.mock.calls[0]![0] + expect(received.order).toBe(1) + expect(received.nested.value).toBe('test') + expect(received.nested.array).toEqual([1, 2, 3]) + expect(received.date).toEqual(new Date('2024-01-01')) + expect(received.person).toEqual(new Person('John Doe', new Date('2023-01-01'))) + + await unsub1() + }) + + it('subscribe should throw & on connection error', async () => { + const invalidListener = new Redis('redis://invalid', { + maxRetriesPerRequest: 0, + }) + + const publisher = createTestingPublisher({ listener: invalidListener }) + + const listener1 = vi.fn() + const onError1 = vi.fn() + const listener2 = vi.fn() + const onError2 = vi.fn() + + await Promise.all([ // race condition + expect(publisher.subscribe('event1', listener1, { onError: onError1 })).rejects.toThrow(), + expect(publisher.subscribe('event1', listener1, { onError: onError1 })).rejects.toThrow(), + expect(publisher.subscribe('event2', listener2, { onError: onError2 })).rejects.toThrow(), + ]) + + expect(listener1).toHaveBeenCalledTimes(0) + expect(listener2).toHaveBeenCalledTimes(0) + expect(onError1).toHaveBeenCalledTimes(0) // error happen before register listener + expect(onError2).toHaveBeenCalledTimes(0) // error happen before register listener + }) + + it('onError should trigger on connection error', async ({ onTestFinished }) => { + const listener = new Redis(REDIS_URL!, { + maxRetriesPerRequest: 0, + }) + onTestFinished(async () => { + await listener.quit() + }) + + const publisher = createTestingPublisher({ listener }) + + const listener1 = vi.fn() + const onError1 = vi.fn() + const listener2 = vi.fn() + const onError2 = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener1, { onError: onError1 }) + const unsub11 = await publisher.subscribe('event1', listener1, { onError: onError1 }) + const unsub2 = await publisher.subscribe('event2', listener2, { onError: onError2 }) + + ;(listener as any).connector.stream.destroy(new Error('Simulated network failure')) + + await vi.waitFor(() => { + expect(onError1).toHaveBeenCalledTimes(2) + expect(onError2).toHaveBeenCalledTimes(1) + }) + + await unsub1() + await unsub11() + await unsub2() + }) + + describe('edge cases', () => { + it('handles transaction errors during publish', async () => { + // Create a mock commander that will fail on multi + const mockCommander = { + ...commander, + multi: () => ({ + xadd: () => ({ xtrim: () => ({ expire: () => ({ exec: async () => [[new Error('Transaction failed')]] }) }) }), + }), + publish: commander.publish.bind(commander), + } as any + + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + commander: mockCommander, + }) + + // This should throw the transaction error + await expect(publisher.publish('event1', { order: 1 })).rejects.toThrow('Transaction failed') + }) + + it('only subscribe to redis-listener when needed', async ({ onTestFinished }) => { + // use dedicated listener + const listener = new Redis(REDIS_URL!) + onTestFinished(async () => { + await listener.quit() + }) + + const publisher = createTestingPublisher({ listener }) + + expect(listener.listenerCount('message')).toBe(0) + expect(listener.listenerCount('error')).toBe(0) + + const listener1 = vi.fn() + const onError1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1, { onError: onError1 }) + + expect(listener.listenerCount('message')).toBe(1) + expect(listener.listenerCount('error')).toBe(1) + + const onError2 = vi.fn() + const unsub2 = await publisher.subscribe('event1', listener1, { onError: onError2 }) + + expect(listener.listenerCount('message')).toBe(1) // reuse listener + expect(listener.listenerCount('error')).toBe(1) // reuse onError + + await unsub1() + expect(listener.listenerCount('message')).toBe(1) + expect(listener.listenerCount('error')).toBe(1) + + await unsub2() + expect(listener.listenerCount('message')).toBe(0) + expect(listener.listenerCount('error')).toBe(0) + + expect(publisher.size).toBe(0) + }) + + it('gracefully handles invalid subscription message', async () => { + const prefix = `invalid:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + prefix, + }) + + const listener1 = vi.fn() + const onError1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1, { onError: onError1 }) + + // use two onError to ensure redis-onError handle correctly to populate to all onError + const listener2 = vi.fn() + const onError2 = vi.fn() + const unsub2 = await publisher.subscribe('event1', listener2, { onError: onError2 }) + + await commander.publish(`${prefix}event1`, 'invalid message') + + await vi.waitFor(() => { + expect(onError1).toHaveBeenCalledTimes(1) + expect(onError2).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledTimes(0) + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + await unsub2() + }) + + it('support reuse same listener and unsub multiple times', async () => { + const prefix = `invalid:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ prefix }) + + const listener = vi.fn() + const onError = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener, { onError }) + const unsub2 = await publisher.subscribe('event1', listener, { onError }) + + await Promise.all([ + publisher.publish('event1', { order: 1 }), + commander.publish(`${prefix}event1`, 'invalid message'), + ]) + + await vi.waitFor(() => { + expect(listener).toHaveBeenCalledTimes(2) + expect(onError).toHaveBeenCalledTimes(2) + }) + + await unsub1() + await unsub1() + await unsub1() + + await Promise.all([ + publisher.publish('event1', { order: 2 }), + commander.publish(`${prefix}event1`, 'invalid message'), + ]) + + await vi.waitFor(() => { + expect(listener).toHaveBeenCalledTimes(3) + expect(onError).toHaveBeenCalledTimes(3) + }) + + await unsub2() + }) + }) +}) diff --git a/packages/publisher/src/adapters/ioredis.ts b/packages/publisher/src/adapters/ioredis.ts new file mode 100644 index 000000000..7406b727c --- /dev/null +++ b/packages/publisher/src/adapters/ioredis.ts @@ -0,0 +1,327 @@ +import type { StandardRPCJsonSerializedMetaItem, StandardRPCJsonSerializerOptions } from '@orpc/client/standard' +import type { ThrowableError } from '@orpc/shared' +import type Redis from 'ioredis' +import type { PublisherOptions, PublisherSubscribeListenerOptions } from '../publisher' +import { StandardRPCJsonSerializer } from '@orpc/client/standard' +import { fallback, once, stringifyJSON } from '@orpc/shared' +import { getEventMeta, withEventMeta } from '@orpc/standard-server' +import { Publisher } from '../publisher' + +type SerializedPayload = { json: object, meta: StandardRPCJsonSerializedMetaItem[], eventMeta: ReturnType } + +export interface IORedisPublisherOptions extends PublisherOptions, StandardRPCJsonSerializerOptions { + /** + * Redis commander instance (used for execute short-lived commands) + */ + commander: Redis + + /** + * redis listener instance (used for listening to events) + * + * @remark + * - `lazyConnect: true` option is supported + */ + listener: Redis + + /** + * How long (in seconds) to retain events for replay. + * + * @remark + * This allows new subscribers to "catch up" on missed events using `lastEventId`. + * Note that event cleanup is deferred for performance reasons — meaning some + * expired events may still be available for a short period of time, and listeners + * might still receive them. + * + * @default NaN (disabled) + */ + resumeRetentionSeconds?: number + + /** + * The prefix to use for Redis keys. + * + * @default orpc:publisher: + */ + prefix?: string +} + +export class IORedisPublisher> extends Publisher { + protected readonly commander: Redis + protected readonly listener: Redis + + protected readonly prefix: string + protected readonly serializer: StandardRPCJsonSerializer + protected readonly retentionSeconds: number + protected readonly subscriptionPromiseMap = new Map>() + protected readonly listenersMap = new Map void>>() + protected readonly onErrorsMap = new Map void>>() + protected redisListenerAndOnError: undefined | { + listener: (channel: string, message: string) => void + onError: (error: ThrowableError) => void + } + + protected get isResumeEnabled(): boolean { + return Number.isFinite(this.retentionSeconds) && this.retentionSeconds > 0 + } + + /** + * The exactness of the `XTRIM` command. + * + * @internal + */ + xtrimExactness: '~' | '=' = '~' + + /** + * Useful for measuring memory usage. + * + * @internal + * + */ + get size(): number { + /* v8 ignore next 8 */ + let size = this.redisListenerAndOnError ? 1 : 0 + for (const listeners of this.listenersMap) { + size += listeners[1].length || 1 // empty array should never happen so we treat it as a single event + } + for (const onErrors of this.onErrorsMap) { + size += onErrors[1].length || 1 // empty array should never happen so we treat it as a single event + } + return size + } + + constructor( + { commander, listener, resumeRetentionSeconds, prefix, ...options }: IORedisPublisherOptions, + ) { + super(options) + + this.commander = commander + this.listener = listener + this.prefix = fallback(prefix, 'orpc:publisher:') // use fallback to improve test-coverage + this.retentionSeconds = resumeRetentionSeconds ?? Number.NaN + this.serializer = new StandardRPCJsonSerializer(options) + } + + protected lastCleanupTimeMap: Map = new Map() + override async publish(event: K, payload: T[K]): Promise { + const key = this.prefixKey(event) + + const serialized = this.serializePayload(payload) + + let id: string | undefined + if (this.isResumeEnabled) { + const now = Date.now() + + // cleanup for more efficiency memory + for (const [mapKey, lastCleanupTime] of this.lastCleanupTimeMap) { + if (lastCleanupTime + this.retentionSeconds * 1000 < now) { + this.lastCleanupTimeMap.delete(mapKey) + } + } + + if (!this.lastCleanupTimeMap.has(key)) { + this.lastCleanupTimeMap.set(key, now) + + const result = await this.commander.multi() + .xadd(key, '*', 'data', stringifyJSON(serialized)) + .xtrim(key, 'MINID', this.xtrimExactness as '~', `${now - this.retentionSeconds * 1000}-0`) + .expire(key, this.retentionSeconds * 2) // double to avoid expires new events + .exec() + + if (result) { + for (const [error] of result) { + if (error) { + throw error + } + } + } + + id = (result![0]![1] as string) + } + else { + const result = await this.commander.xadd(key, '*', 'data', stringifyJSON(serialized)) + id = result! + } + } + + await this.commander.publish(key, stringifyJSON({ ...serialized, id })) + } + + protected override async subscribeListener( + event: K, + originalListener: (payload: T[K]) => void, + { lastEventId, onError }: PublisherSubscribeListenerOptions = {}, + ): Promise<() => Promise> { + const key = this.prefixKey(event) + + let pendingPayloads: T[K][] | undefined = [] + const resumePayloadIds = new Set() + + const listener = (payload: T[K]) => { + if (pendingPayloads) { + pendingPayloads.push(payload) + return + } + + const payloadId = getEventMeta(payload)?.id + if ( + payloadId !== undefined // if resume is enabled payloadId will be defined + && resumePayloadIds.has(payloadId) // duplicate happen + ) { + return + } + + originalListener(payload) + } + + if (!this.redisListenerAndOnError) { + const redisOnError = (error: ThrowableError) => { + for (const [_, onErrors] of this.onErrorsMap) { + for (const onError of onErrors) { + onError(error) + } + } + } + + const redisListener = (channel: string, message: string) => { + try { + const listeners = this.listenersMap.get(channel) + + if (listeners) { + const { id, ...rest } = JSON.parse(message) + const payload = this.deserializePayload(id, rest) + + for (const listener of listeners) { + listener(payload) + } + } + } + catch (error) { + // error can happen when message is invalid + const onErrors = this.onErrorsMap.get(channel) + if (onErrors) { + for (const onError of onErrors) { + onError(error as ThrowableError) + } + } + } + } + + this.redisListenerAndOnError = { listener: redisListener, onError: redisOnError } + this.listener.on('message', redisListener) + this.listener.on('error', redisOnError) + } + + const subscriptionPromise = this.subscriptionPromiseMap.get(key) + if (subscriptionPromise) { + // Avoid race conditions when multiple listeners subscribe to the same channel at once. + // Await only if subscriptionPromise exists, and ensure no other `await` occurs between its set and await. + await subscriptionPromise + } + let listeners = this.listenersMap.get(key) + if (!listeners) { + try { + const promise = this.listener.subscribe(key) + this.subscriptionPromiseMap.set(key, promise) + await promise + this.listenersMap.set(key, listeners = []) // only set after subscribe successfully + } + finally { + this.subscriptionPromiseMap.delete(key) + + if (this.listenersMap.size === 0) { // error happen + no listener + this.listener.off('message', this.redisListenerAndOnError.listener) + this.listener.off('error', this.redisListenerAndOnError.onError) + this.redisListenerAndOnError = undefined + } + } + } + listeners.push(listener) + + if (onError) { // add onError after subscribe success + let onErrors = this.onErrorsMap.get(key) + if (!onErrors) { + this.onErrorsMap.set(key, onErrors = []) + } + onErrors.push(onError) + } + + void (async () => { + try { + if (this.isResumeEnabled && typeof lastEventId === 'string') { + const results = await this.commander.xread('STREAMS', key, lastEventId) + + if (results && results[0]) { + const [_, items] = results[0] + + for (const [id, fields] of items) { + const serialized = fields[1]! // field value is at index 1 (index 0 is field name 'data') + const payload = this.deserializePayload(id, JSON.parse(serialized)) + resumePayloadIds.add(id) + originalListener(payload) + } + } + } + } + catch (error) { + // error happen when message is invalid + onError?.(error as ThrowableError) + } + finally { + const pending = pendingPayloads + pendingPayloads = undefined + + for (const payload of pending) { + listener(payload) // listener instead of originalListener for deduplication + } + } + })() + + const cleanupListeners = once(() => { + listeners.splice(listeners.indexOf(listener), 1) + + if (onError) { + const onErrors = this.onErrorsMap.get(key) + if (onErrors) { + const index = onErrors.indexOf(onError) + if (index !== -1) { + onErrors.splice(index, 1) + } + } + } + }) + + return async () => { + cleanupListeners() + + if (listeners.length === 0) { // onErrors always has lower length than listeners + this.listenersMap.delete(key) + this.onErrorsMap.delete(key) + + if (this.redisListenerAndOnError && this.listenersMap.size === 0) { + this.listener.off('message', this.redisListenerAndOnError.listener) + this.listener.off('error', this.redisListenerAndOnError.onError) + this.redisListenerAndOnError = undefined + } + + // should execute all logic before async to avoid race condition problem + await this.listener.unsubscribe(key) + } + } + } + + protected prefixKey(key: string): string { + return `${this.prefix}${key}` + } + + protected serializePayload(payload: object): SerializedPayload { + const eventMeta = getEventMeta(payload) + const [json, meta] = this.serializer.serialize(payload) + return { json: json as object, meta, eventMeta } + } + + protected deserializePayload(id: string | undefined, { json, meta, eventMeta }: SerializedPayload): any { + return withEventMeta( + this.serializer.deserialize(json, meta) as object, + id === undefined ? { ...eventMeta } : { ...eventMeta, id }, + ) + } +} diff --git a/packages/publisher/src/adapters/memory.test.ts b/packages/publisher/src/adapters/memory.test.ts new file mode 100644 index 000000000..5e05573c0 --- /dev/null +++ b/packages/publisher/src/adapters/memory.test.ts @@ -0,0 +1,205 @@ +import { getEventMeta, withEventMeta } from '@orpc/standard-server' +import { MemoryPublisher } from './memory' + +describe('memoryPublisher', () => { + it('without resume: can pub/sub but not resume', async () => { + const publisher = new MemoryPublisher() // resume is disabled by default + + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener1) + const unsub2 = await publisher.subscribe('event2', listener2) + + const payload1 = { order: 1 } + const payload2 = { order: 2 } + + publisher.publish('event1', payload1) + publisher.publish('event3', payload2) + + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener1.mock.calls[0]![0]).toBe(payload1) // ensure without proxy + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + + publisher.publish('event1', payload2) + publisher.publish('event2', payload2) + + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledTimes(1) + expect(listener2.mock.calls[0]![0]).toBe(payload2) // ensure without proxy + + await unsub2() + + const unsub11 = await publisher.subscribe('event1', listener1, { lastEventId: '0' }) + expect(listener1).toHaveBeenCalledTimes(1) // resume not happens + await unsub11() + + expect(publisher.size).toEqual(0) // ensure no memory leak + }) + + describe('with resume', () => { + beforeEach(() => { + vi.useFakeTimers() + }) + + afterEach(() => { + vi.useRealTimers() + }) + + it('can pub/sub and resume', async () => { + const publisher = new MemoryPublisher({ resumeRetentionSeconds: 1 }) + + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener1) + const unsub2 = await publisher.subscribe('event2', listener2) + + const payload1 = { order: 1 } + const payload2 = { order: 2 } + + publisher.publish('event1', payload1) + publisher.publish('event3', payload2) + + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener1).toHaveBeenCalledWith(payload1) + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + + publisher.publish('event1', payload2) + publisher.publish('event2', payload2) + + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledWith(payload2) + + await unsub2() + + const listener3 = vi.fn() + const unsub3 = await publisher.subscribe('event1', listener3, { lastEventId: '0' }) + expect(listener3).toHaveBeenCalledTimes(2) // resume happens + expect(listener3).toHaveBeenNthCalledWith(1, payload1) + expect(listener3).toHaveBeenNthCalledWith(2, payload2) + + await unsub3() + expect(publisher.size).toEqual(4) // 4 events are stored + }) + + it('control event.id', async () => { + const publisher = new MemoryPublisher({ resumeRetentionSeconds: 1 }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + const payload1 = { order: 1 } + const payload2 = withEventMeta({ order: 2 }, { id: 'some-id', comments: ['hello'] }) + + publisher.publish('event1', payload1) + publisher.publish('event1', payload2) + + expect(listener1).toHaveBeenCalledTimes(2) + expect(listener1).toHaveBeenNthCalledWith(1, expect.toSatisfy((p) => { + expect(p).not.toBe(payload1) + expect(p).toEqual(payload1) + expect(getEventMeta(p)).toEqual({ id: '1' }) + return true + })) + expect(listener1).toHaveBeenNthCalledWith(2, expect.toSatisfy((p) => { + expect(p).not.toBe(payload2) + expect(p).toEqual(payload2) + expect(getEventMeta(p)).toEqual({ id: '2', comments: ['hello'] }) // id is overridden + return true + })) + + const listener2 = vi.fn() + const unsub2 = await publisher.subscribe('event1', listener2, { lastEventId: '0' }) + expect(listener2).toHaveBeenCalledTimes(2) + expect(listener2).toHaveBeenNthCalledWith(1, expect.toSatisfy((p) => { + expect(p).not.toBe(payload1) + expect(p).toEqual(payload1) + expect(getEventMeta(p)).toEqual({ id: '1' }) + return true + })) + expect(listener2).toHaveBeenNthCalledWith(2, expect.toSatisfy((p) => { + expect(p).not.toBe(payload2) + expect(p).toEqual(payload2) + expect(getEventMeta(p)).toEqual({ id: '2', comments: ['hello'] }) // id is overridden + return true + })) + + await unsub1() + await unsub2() + expect(publisher.size).toEqual(2) // 2 events are stored + }) + + it('resume event.id > lastEventId and in order', async () => { + const publisher = new MemoryPublisher({ resumeRetentionSeconds: 1 }) + + for (let i = 1; i <= 1000; i++) { + publisher.publish('event', { order: i }) + } + + for (let i = 0; i < 10; i++) { + const lastEventId = Math.floor(Math.random() * 990) + const listener1 = vi.fn() + const unsub = await publisher.subscribe('event', listener1, { lastEventId: lastEventId.toString(36) }) + expect(listener1).toHaveBeenCalledTimes(1000 - lastEventId) + expect(listener1).toHaveBeenNthCalledWith(1, { order: lastEventId + 1 }) + expect(listener1).toHaveBeenNthCalledWith(2, { order: lastEventId + 2 }) + expect(listener1).toHaveBeenNthCalledWith(10, { order: lastEventId + 10 }) + await unsub() + } + }) + + it('remove expired events on publish', async () => { + const publisher = new MemoryPublisher({ resumeRetentionSeconds: 1 }) + + publisher.publish('event1', { order: 1 }) + publisher.publish('event2', { order: 2 }) + publisher.publish('event3', { order: 3 }) + publisher.publish('event1', { order: 4 }) + expect(publisher.size).toEqual(4) // 4 events are stored + + vi.advanceTimersByTime(500) // not expired yet + publisher.publish('event1', { order: 5 }) + expect(publisher.size).toEqual(5) // 5 events are stored + + vi.advanceTimersByTime(500) // expired + publisher.publish('event2', { order: 6 }) + expect(publisher.size).toEqual(2) // 2 events are stored + + vi.advanceTimersByTime(1000) // expired + publisher.publish('event10', { order: 7 }) + expect(publisher.size).toEqual(1) // 1 event is stored + }) + + it('support reuse same listener and unsub multiple times', async () => { + const publisher = new MemoryPublisher({ resumeRetentionSeconds: 1 }) + + const listener = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener) + const unsub2 = await publisher.subscribe('event1', listener) + + await publisher.publish('event1', { order: 1 }) + + await vi.waitFor(() => { + expect(listener).toHaveBeenCalledTimes(2) + }) + + await unsub1() + await unsub1() + await unsub1() + + await publisher.publish('event1', { order: 2 }) + + await vi.waitFor(() => { + expect(listener).toHaveBeenCalledTimes(3) + }) + + await unsub2() + }) + }) +}) diff --git a/packages/publisher/src/adapters/memory.ts b/packages/publisher/src/adapters/memory.ts new file mode 100644 index 000000000..8a0ab7763 --- /dev/null +++ b/packages/publisher/src/adapters/memory.ts @@ -0,0 +1,117 @@ +import type { PublisherOptions, PublisherSubscribeListenerOptions } from '../publisher' +import { compareSequentialIds, EventPublisher, SequentialIdGenerator } from '@orpc/shared' +import { getEventMeta, withEventMeta } from '@orpc/standard-server' +import { Publisher } from '../publisher' + +export interface MemoryPublisherOptions extends PublisherOptions { + /** + * How long (in seconds) to retain events for replay. + * + * @remark + * This allows new subscribers to "catch up" on missed events using `lastEventId`. + * Note that event cleanup is deferred for performance reasons — meaning some + * expired events may still be available for a short period of time, and listeners + * might still receive them. + * + * @default NaN (disabled) + */ + resumeRetentionSeconds?: number +} + +export class MemoryPublisher> extends Publisher { + private readonly eventPublisher = new EventPublisher() + private readonly idGenerator = new SequentialIdGenerator() + private readonly retentionSeconds: number + private readonly eventsMap: Map> = new Map() + + /** + * Useful for measuring memory usage. + * + * @internal + * + */ + get size(): number { + let size = this.eventPublisher.size + for (const events of this.eventsMap) { + /* v8 ignore next 1 */ + size += events[1].length || 1 // empty array should never happen so we treat it as a single event + } + + return size + } + + protected get isResumeEnabled(): boolean { + return Number.isFinite(this.retentionSeconds) && this.retentionSeconds > 0 + } + + constructor({ resumeRetentionSeconds, ...options }: MemoryPublisherOptions = {}) { + super(options) + + this.retentionSeconds = resumeRetentionSeconds ?? Number.NaN + } + + async publish(event: K, payload: T[K]): Promise { + this.cleanup() + + if (this.isResumeEnabled) { + const now = Date.now() + const expiresAt = now + this.retentionSeconds * 1000 + + let events = this.eventsMap.get(event) + if (!events) { + this.eventsMap.set(event, events = []) + } + + payload = withEventMeta(payload, { ...getEventMeta(payload), id: this.idGenerator.generate() }) + events.push({ expiresAt, payload }) + } + + this.eventPublisher.publish(event, payload) + } + + protected async subscribeListener(event: K, listener: (payload: T[K]) => void, options?: PublisherSubscribeListenerOptions): Promise<() => Promise> { + if (this.isResumeEnabled && typeof options?.lastEventId === 'string') { + const events = this.eventsMap.get(event) + if (events) { + for (const { payload } of events) { + const id = getEventMeta(payload)?.id + if (typeof id === 'string' && compareSequentialIds(id, options.lastEventId) > 0) { + listener(payload as T[K]) + } + } + } + } + + const syncUnsub = this.eventPublisher.subscribe(event, listener) + + return async () => { + syncUnsub() + } + } + + protected lastCleanupTime: number | null = null + protected cleanup(): void { + if (!this.isResumeEnabled) { + return + } + + const now = Date.now() + + if (this.lastCleanupTime !== null && this.lastCleanupTime + this.retentionSeconds * 1000 > now) { + return + } + + this.lastCleanupTime = now + + for (const [event, events] of this.eventsMap) { + const validEvents = events.filter(event => event.expiresAt > now) + + if (validEvents.length > 0) { + this.eventsMap.set(event, validEvents) + } + else { + this.eventsMap.delete(event) + } + } + } +} diff --git a/packages/publisher/src/adapters/upstash-redis.test.ts b/packages/publisher/src/adapters/upstash-redis.test.ts new file mode 100644 index 000000000..9e8965092 --- /dev/null +++ b/packages/publisher/src/adapters/upstash-redis.test.ts @@ -0,0 +1,606 @@ +import type { UpstashRedisPublisherOptions } from './upstash-redis' +import { getEventMeta, withEventMeta } from '@orpc/standard-server' +import { Redis } from '@upstash/redis' +import { UpstashRedisPublisher } from './upstash-redis' + +const UPSTASH_REDIS_REST_URL = process.env.UPSTASH_REDIS_REST_URL +const UPSTASH_REDIS_REST_TOKEN = process.env.UPSTASH_REDIS_REST_TOKEN + +/** + * These tests depend on a real Upstash redis server — make sure to set the `UPSTASH_REDIS_REST_URL`, `UPSTASH_REDIS_REST_TOKEN` envs. + * When writing new tests, always use unique keys to avoid conflicts with other test cases. + */ +describe.concurrent('upstash redis publisher', { skip: !UPSTASH_REDIS_REST_URL || !UPSTASH_REDIS_REST_TOKEN, timeout: 20000 }, () => { + let redis: Redis + const createdPublishers: UpstashRedisPublisher[] = [] + + function createTestingPublisher(options: UpstashRedisPublisherOptions = {}, useRedis = redis) { + const publisher = new UpstashRedisPublisher(useRedis, { + prefix: crypto.randomUUID(), // isolated from other tests + ...options, + }) + + publisher.xtrimExactness = '=' // for easier testing + + createdPublishers.push(publisher) + + return publisher + } + + beforeAll(() => { + redis = new Redis({ + url: UPSTASH_REDIS_REST_URL, + token: UPSTASH_REDIS_REST_TOKEN, + }) + }) + + afterAll(async () => { + for (const publisher of createdPublishers) { + expect(publisher.size).toEqual(0) // ensure cleanup correctly + } + }) + + it('without resume: can pub/sub but not resume', async () => { + const publisher = createTestingPublisher() // resume is disabled by default + + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener1) + const unsub2 = await publisher.subscribe('event2', listener2) + + const payload1 = { order: 1 } + const payload2 = { order: 2 } + + await publisher.publish('event1', payload1) + await publisher.publish('event3', payload2) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1.mock.calls[0]![0]).toEqual(payload1) + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + + await publisher.publish('event1', payload2) + await publisher.publish('event2', payload2) + + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(1) + }) + expect(listener2.mock.calls[0]![0]).toEqual(payload2) + expect(listener1).toHaveBeenCalledTimes(1) + + await unsub2() + + const unsub11 = await publisher.subscribe('event1', listener1, { lastEventId: '0' }) + + // Wait a bit to ensure no resume happens + await new Promise(resolve => setTimeout(resolve, 1000)) + + expect(listener1).toHaveBeenCalledTimes(1) // resume not happens + await unsub11() + }) + + describe('with resume', () => { + it('basic pub/sub', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + const payload1 = { order: 1 } + await publisher.publish('event1', payload1) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining(payload1)) + + await unsub1() + }) + + it('can pub/sub and resume', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener1) + const unsub2 = await publisher.subscribe('event2', listener2) + + const payload1 = { order: 1 } + const payload2 = { order: 2 } + + await publisher.publish('event1', payload1) + await publisher.publish('event3', payload2) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining(payload1)) + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + + await publisher.publish('event1', payload2) + await publisher.publish('event2', payload2) + + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledWith(expect.objectContaining(payload2)) + + await unsub2() + + const listener3 = vi.fn() + const unsub3 = await publisher.subscribe('event1', listener3, { lastEventId: '0' }) + + await vi.waitFor(() => { + expect(listener3).toHaveBeenCalledTimes(2) // resume happens + }) + expect(listener3).toHaveBeenNthCalledWith(1, expect.objectContaining(payload1)) + expect(listener3).toHaveBeenNthCalledWith(2, expect.objectContaining(payload2)) + + await unsub3() + }) + + it('control event.id', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + const payload1 = { order: 1 } + const payload2 = withEventMeta({ order: 2 }, { id: 'some-id', comments: ['hello'] }) + + await publisher.publish('event1', payload1) + await publisher.publish('event1', payload2) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(2) + }) + expect(listener1).toHaveBeenNthCalledWith(1, expect.toSatisfy((p) => { + expect(p).not.toBe(payload1) + expect(p).toEqual(payload1) + const meta = getEventMeta(p) + expect(meta?.id).toBeDefined() + expect(typeof meta?.id).toBe('string') + return true + })) + expect(listener1).toHaveBeenNthCalledWith(2, expect.toSatisfy((p) => { + expect(p).not.toBe(payload2) + expect(p).toEqual(payload2) + const meta = getEventMeta(p) + expect(meta?.id).toBeDefined() + expect(typeof meta?.id).toBe('string') + expect(meta?.comments).toEqual(['hello']) + return true + })) + + const firstEventId = getEventMeta(listener1.mock.calls[0]![0])?.id + + const listener2 = vi.fn() + const unsub2 = await publisher.subscribe('event1', listener2, { lastEventId: firstEventId }) + + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(1) // only second event + }) + expect(listener2).toHaveBeenNthCalledWith(1, expect.toSatisfy((p) => { + expect(p).not.toBe(payload2) + expect(p).toEqual(payload2) + const meta = getEventMeta(p) + expect(meta?.id).toEqual(getEventMeta(listener1.mock.calls[1]![0])?.id) + expect(meta?.comments).toEqual(['hello']) + return true + })) + + await unsub1() + await unsub2() + }) + + it('resume event.id > lastEventId and in order', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 60, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event', listener1) + + for (let i = 1; i <= 10; i++) { + await publisher.publish('event', { order: i }) + } + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(10) + }) + + const fifthEventId = getEventMeta(listener1.mock.calls[4]![0])?.id + + if (!fifthEventId) { + throw new Error('No event ID found') + } + + await unsub1() + + const listener2 = vi.fn() + const unsub2 = await publisher.subscribe('event', listener2, { lastEventId: fifthEventId }) + + await vi.waitFor(() => { + expect(listener2).toHaveBeenCalledTimes(5) + }) + expect(listener2).toHaveBeenNthCalledWith(1, expect.objectContaining({ order: 6 })) + expect(listener2).toHaveBeenNthCalledWith(2, expect.objectContaining({ order: 7 })) + expect(listener2).toHaveBeenNthCalledWith(5, expect.objectContaining({ order: 10 })) + + // Verify order + for (let i = 0; i < listener2.mock.calls.length - 1; i++) { + const current = listener2.mock.calls[i]![0].order + const next = listener2.mock.calls[i + 1]![0].order + expect(next).toBeGreaterThan(current) + } + + await unsub2() + }) + + it('handles errors during resume gracefully', async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const onError = vi.fn() + + // Subscribe with an invalid lastEventId to trigger error in xread + const unsub1 = await publisher.subscribe('event1', listener1, { lastEventId: 'invalid-id-format', onError }) + + // Publish an event + await publisher.publish('event1', { order: 1 }) + + await vi.waitFor(() => { + expect(onError).toHaveBeenCalledTimes(1) + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining({ order: 1 })) + + await unsub1() + }) + + it('handles race condition where events published during resume', { repeats: 5 }, async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + await publisher.publish('event1', { order: 1 }) + await new Promise(resolve => setTimeout(resolve, 150)) // wait a bit + await publisher.publish('event1', { order: 2 }) + + publisher.publish('event1', { order: 3 }) + publisher.publish('event1', { order: 4 }) + const listener1 = vi.fn() + const unsub = await publisher.subscribe('event1', listener1, { lastEventId: '0' }) + + await publisher.publish('event1', { order: 5 }) + await publisher.publish('event1', { order: 6 }) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(6) // no duplicates + }) + expect(listener1).toHaveBeenNthCalledWith(1, expect.objectContaining({ order: 1 })) + expect(listener1).toHaveBeenNthCalledWith(2, expect.objectContaining({ order: 2 })) + expect(listener1).toHaveBeenNthCalledWith(3, expect.objectContaining({ order: 3 })) + expect(listener1).toHaveBeenNthCalledWith(4, expect.objectContaining({ order: 4 })) + expect(listener1).toHaveBeenNthCalledWith(5, expect.objectContaining({ order: 5 })) + expect(listener1).toHaveBeenNthCalledWith(6, expect.objectContaining({ order: 6 })) + + await unsub() + }) + + describe('cleanup retention', () => { + it('handles cleanup of expired events on publish', async () => { + const prefix = `cleanup:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 1, + prefix, + }) + + const key1 = `${prefix}event1` + + // Publish events to event1 + await Promise.all([ + publisher.publish('event1', { order: 1 }), + publisher.publish('event1', { order: 2 }), + publisher.publish('event1', { order: 3 }), + ]) + + const beforeCleanup = await redis.xread(key1, '0') as any + expect(beforeCleanup[0][1].length).toBe(3) // 3 events for event1 + + // Wait for retention to expire + await new Promise(resolve => setTimeout(resolve, 1100)) + + // Trigger cleanup by publishing a new event to event1 + await publisher.publish('event1', { order: 4 }) + + const afterCleanup = await redis.xread(key1, '0') as any + expect(afterCleanup[0][1].length).toBe(1) // old events should be trimmed + }) + + it('verifies Redis auto-expires keys after retention period * 2', async () => { + const prefix = `expire:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 1, + prefix, + }) + + const key = `${prefix}event1` + + // Publish an event + await publisher.publish('event1', { order: 1 }) + + // Verify key exists + const ttl1 = await redis.ttl(key) + expect(ttl1).toBeGreaterThan(0) + expect(ttl1).toBeLessThanOrEqual(2) // (2 * retentionSeconds) + + // Wait for key to expire (2 * retentionSeconds = 2 seconds) + await new Promise(resolve => setTimeout(resolve, 2500)) + + // Verify key has been auto-expired by Redis + const exists = await redis.exists(key) + expect(exists).toBe(0) + }) + }) + }) + + it('handles multiple subscribers on same event with race condition', { repeats: 3 }, async () => { + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + }) + + const listener1 = vi.fn() + const listener2 = vi.fn() + const listener3 = vi.fn() + + const [unsub1, unsub2] = await Promise.all([ // race condition + publisher.subscribe('event1', listener1), + publisher.subscribe('event1', listener2), + ]) + const unsub3 = await publisher.subscribe('event1', listener3) + + await publisher.publish('event1', { order: 1 }) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledTimes(1) + expect(listener3).toHaveBeenCalledTimes(1) + }) + + expect(listener1).toHaveBeenCalledWith({ order: 1 }) + expect(listener2).toHaveBeenCalledWith({ order: 1 }) + expect(listener3).toHaveBeenCalledWith({ order: 1 }) + + await unsub1() + + await publisher.publish('event1', { order: 2 }) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + expect(listener2).toHaveBeenCalledTimes(2) + expect(listener3).toHaveBeenCalledTimes(2) + }) + + expect(listener2).toHaveBeenNthCalledWith(2, { order: 2 }) + expect(listener3).toHaveBeenNthCalledWith(2, { order: 2 }) + + await unsub2() + await unsub3() + }) + + it('handles prefix correctly', async () => { + const prefix = `custom:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + prefix, + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + // verify channel use prefix (NUMSUB is not reliable) + // await vi.waitFor(async () => { + // const numSub: any = await redis.exec(['PUBSUB', 'NUMSUB', `${prefix}event1`]) + // expect(numSub[1]).toBe(1) + // }) + + const payload = { order: 1 } + await publisher.publish('event1', payload) + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledWith(expect.objectContaining(payload)) + + // veryfy key use prefix + const keys = await redis.keys(`${prefix}*`) + expect(keys.some(k => k.includes(`${prefix}event1`))).toBe(true) + + await unsub1() + }) + + it('handles serialization with complex objects and custom serializers', async () => { + class Person { + constructor( + public name: string, + public date: Date, + ) { } + } + + const publisher = createTestingPublisher({ + resumeRetentionSeconds: 10, + customJsonSerializers: [ + { + condition: data => data instanceof Person, + type: 20, + serialize: person => ({ name: person.name, date: person.date }), + deserialize: data => new Person(data.name, data.date), + }, + ], + }) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + + const payload = { + order: 1, + nested: { + value: 'test', + array: [1, 2, 3], + }, + date: new Date('2024-01-01'), + person: new Person('John Doe', new Date('2023-01-01')), + } + + await publisher.publish('event1', payload) + + await vi.waitFor(() => { + expect(listener1).toHaveBeenCalledTimes(1) + }) + const received = listener1.mock.calls[0]![0] + expect(received.order).toBe(1) + expect(received.nested.value).toBe('test') + expect(received.nested.array).toEqual([1, 2, 3]) + expect(received.date).toEqual(new Date('2024-01-01')) + expect(received.person).toEqual(new Person('John Doe', new Date('2023-01-01'))) + + await unsub1() + }) + + it('subscribe should throw & on connection error', async () => { + const invalidRedis = new Redis({ + url: 'http://invalid:6379', + token: 'invalid', + }) + + const publisher = createTestingPublisher({}, invalidRedis) + + const listener1 = vi.fn() + const onError1 = vi.fn() + const listener2 = vi.fn() + const onError2 = vi.fn() + + await Promise.all([ // race condition + expect(publisher.subscribe('event1', listener1, { onError: onError1 })).rejects.toThrow(), + expect(publisher.subscribe('event1', listener1, { onError: onError1 })).rejects.toThrow(), + expect(publisher.subscribe('event2', listener2, { onError: onError2 })).rejects.toThrow(), + ]) + expect(listener1).toHaveBeenCalledTimes(0) + expect(listener2).toHaveBeenCalledTimes(0) + expect(onError1).toHaveBeenCalledTimes(0) // error happen before register listener + expect(onError2).toHaveBeenCalledTimes(0) // error happen before register listener + }) + + describe('edge cases', () => { + it('only subscribe to redis-listener when needed', async () => { + // use dedicated redis instance + const redis = new Redis({ url: UPSTASH_REDIS_REST_URL, token: UPSTASH_REDIS_REST_TOKEN }) + + const originalSubscribe = redis.subscribe.bind(redis) + const unsubscribeSpys: any[] = [] + const subscribeSpy = vi.spyOn(redis, 'subscribe') + subscribeSpy.mockImplementation((...args) => { + const subscription = originalSubscribe(...args) + unsubscribeSpys.push(vi.spyOn(subscription, 'unsubscribe')) + return subscription + }) + const publisher = createTestingPublisher({}, redis) + + const listener1 = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1) + const unsub2 = await publisher.subscribe('event1', listener1) + + expect(subscribeSpy).toHaveBeenCalledTimes(1) + expect(unsubscribeSpys[0]).toBeCalledTimes(0) + + await unsub1() + expect(unsubscribeSpys[0]).toBeCalledTimes(0) + + await unsub2() + expect(unsubscribeSpys[0]).toBeCalledTimes(1) // unsubscribed in redis + + expect(unsubscribeSpys.length).toBe(1) // ensure only subscribe once + }) + + it('gracefully handles invalid subscription message', async () => { + const prefix = `invalid:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ + prefix, + }) + + const listener1 = vi.fn() + const onError = vi.fn() + const unsub1 = await publisher.subscribe('event1', listener1, { onError }) + + // use two onError to ensure redis-onError handle correctly to populate to all onError + const listener2 = vi.fn() + const onError2 = vi.fn() + const unsub2 = await publisher.subscribe('event1', listener2, { onError: onError2 }) + + await redis.publish(`${prefix}event1`, 'invalid message') + + await vi.waitFor(() => { + expect(onError).toHaveBeenCalledTimes(1) + expect(onError2).toHaveBeenCalledTimes(1) + }) + expect(listener1).toHaveBeenCalledTimes(0) + expect(listener2).toHaveBeenCalledTimes(0) + + await unsub1() + await unsub2() + }) + + it('support reuse same listener and unsub multiple times', async () => { + const prefix = `invalid:${crypto.randomUUID()}:` + const publisher = createTestingPublisher({ prefix }) + + const listener = vi.fn() + const onError = vi.fn() + + const unsub1 = await publisher.subscribe('event1', listener, { onError }) + const unsub2 = await publisher.subscribe('event1', listener, { onError }) + + await Promise.all([ + publisher.publish('event1', { order: 1 }), + redis.publish(`${prefix}event1`, 'invalid message'), + ]) + + await vi.waitFor(() => { + expect(listener).toHaveBeenCalledTimes(2) + expect(onError).toHaveBeenCalledTimes(2) + }) + + await unsub1() + await unsub1() + await unsub1() + + await Promise.all([ + publisher.publish('event1', { order: 2 }), + redis.publish(`${prefix}event1`, 'invalid message'), + ]) + + await vi.waitFor(() => { + expect(listener).toHaveBeenCalledTimes(3) + expect(onError).toHaveBeenCalledTimes(3) + }) + + await unsub2() + }) + }) +}) diff --git a/packages/publisher/src/adapters/upstash-redis.ts b/packages/publisher/src/adapters/upstash-redis.ts new file mode 100644 index 000000000..0512fbf27 --- /dev/null +++ b/packages/publisher/src/adapters/upstash-redis.ts @@ -0,0 +1,301 @@ +import type { StandardRPCJsonSerializedMetaItem, StandardRPCJsonSerializerOptions } from '@orpc/client/standard' +import type { ThrowableError } from '@orpc/shared' +import type { Redis } from '@upstash/redis' +import type { PublisherOptions, PublisherSubscribeListenerOptions } from '../publisher' +import { StandardRPCJsonSerializer } from '@orpc/client/standard' +import { fallback, once } from '@orpc/shared' +import { getEventMeta, withEventMeta } from '@orpc/standard-server' +import { Publisher } from '../publisher' + +type SerializedPayload = { json: object, meta: StandardRPCJsonSerializedMetaItem[], eventMeta: ReturnType } + +export interface UpstashRedisPublisherOptions extends PublisherOptions, StandardRPCJsonSerializerOptions { + /** + * How long (in seconds) to retain events for replay. + * + * @remark + * This allows new subscribers to "catch up" on missed events using `lastEventId`. + * Note that event cleanup is deferred for performance reasons — meaning some + * expired events may still be available for a short period of time, and listeners + * might still receive them. + * + * @default NaN (disabled) + */ + resumeRetentionSeconds?: number + + /** + * The prefix to use for Redis keys. + * + * @default orpc:publisher: + */ + prefix?: string +} + +export class UpstashRedisPublisher> extends Publisher { + protected readonly prefix: string + protected readonly serializer: StandardRPCJsonSerializer + protected readonly retentionSeconds: number + protected readonly listenersMap = new Map void>>() + protected readonly onErrorsMap = new Map void>>() + protected readonly subscriptionPromiseMap = new Map>() + protected readonly subscriptionsMap = new Map() // Upstash subscription objects + + protected get isResumeEnabled(): boolean { + return Number.isFinite(this.retentionSeconds) && this.retentionSeconds > 0 + } + + /** + * The exactness of the `XTRIM` command. + * + * @internal + */ + xtrimExactness: '~' | '=' = '~' + + /** + * Useful for measuring memory usage. + * + * @internal + * + */ + get size(): number { + /* v8 ignore next 8 */ + let size = 0 + for (const listeners of this.listenersMap) { + size += listeners[1].length || 1 // empty array should never happen so we treat it as a single event + } + for (const onErrors of this.onErrorsMap) { + size += onErrors[1].length || 1 // empty array should never happen so we treat it as a single event + } + return size + } + + constructor( + protected readonly redis: Redis, + { resumeRetentionSeconds, prefix, ...options }: UpstashRedisPublisherOptions = {}, + ) { + super(options) + + this.prefix = fallback(prefix, 'orpc:publisher:') // use fallback to improve test-coverage + this.retentionSeconds = resumeRetentionSeconds ?? Number.NaN + this.serializer = new StandardRPCJsonSerializer(options) + } + + protected lastCleanupTimeMap: Map = new Map() + override async publish(event: K, payload: T[K]): Promise { + const key = this.prefixKey(event) + + const serialized = this.serializePayload(payload) + + let id: string | undefined + if (this.isResumeEnabled) { + const now = Date.now() + + // cleanup for more efficiency memory + for (const [mapKey, lastCleanupTime] of this.lastCleanupTimeMap) { + if (lastCleanupTime + this.retentionSeconds * 1000 < now) { + this.lastCleanupTimeMap.delete(mapKey) + } + } + + if (!this.lastCleanupTimeMap.has(key)) { + this.lastCleanupTimeMap.set(key, now) + + const results = await this.redis.multi() + .xadd(key, '*', { data: serialized }) + .xtrim(key, { strategy: 'MINID', exactness: this.xtrimExactness, threshold: `${now - this.retentionSeconds * 1000}-0` }) + .expire(key, this.retentionSeconds * 2) + .exec() + + id = results[0] + } + else { + const result = await this.redis.xadd(key, '*', { data: serialized }) + id = result + } + } + + await this.redis.publish(key, { ...serialized, id }) + } + + protected override async subscribeListener( + event: K, + originalListener: (payload: T[K]) => void, + { lastEventId, onError }: PublisherSubscribeListenerOptions = {}, + ): Promise<() => Promise> { + const key = this.prefixKey(event) + + let pendingPayloads: T[K][] | undefined = [] + const resumePayloadIds = new Set() + + const listener = (payload: T[K]) => { + if (pendingPayloads) { + pendingPayloads.push(payload) + return + } + + const payloadId = getEventMeta(payload)?.id + if ( + payloadId !== undefined // if resume is enabled payloadId will be defined + && resumePayloadIds.has(payloadId) // duplicate happen + ) { + return + } + + originalListener(payload) + } + + const subscriptionPromise = this.subscriptionPromiseMap.get(key) + if (subscriptionPromise) { + // Avoid race conditions when multiple listeners subscribe to the same channel at once. + // Await only if subscriptionPromise exists, and ensure no other `await` occurs between its set and await. + await subscriptionPromise + } + let subscription = this.subscriptionsMap.get(key) as ReturnType | undefined + if (!subscription) { + const dispatchErrorForKey = (error: ThrowableError) => { + const onErrors = this.onErrorsMap.get(key) + if (onErrors) { + for (const onError of onErrors) { + onError(error) + } + } + } + + subscription = this.redis.subscribe(key) + subscription.on('message', (event) => { + try { + const listeners = this.listenersMap.get(event.channel) + + if (listeners) { + const { id, ...rest } = event.message as any + const payload = this.deserializePayload(id, rest) + + for (const listener of listeners) { + listener(payload) + } + } + } + catch (error) { + // there error can happen when event.message is invalid + dispatchErrorForKey(error as ThrowableError) + } + }) + + let resolvePromise: () => void + let rejectPromise: (error: Error) => void + const promise = new Promise((resolve, reject) => { + resolvePromise = resolve + rejectPromise = reject + }) + + subscription.on('error', (error) => { + rejectPromise(error) + dispatchErrorForKey(error) + }) + + subscription.on('subscribe', () => { + resolvePromise() + }) + + try { + this.subscriptionPromiseMap.set(key, promise) + await promise + this.subscriptionsMap.set(key, subscription) // set after subscription is ready + } + finally { + this.subscriptionPromiseMap.delete(key) + } + } + + let listeners = this.listenersMap.get(key) + if (!listeners) { + this.listenersMap.set(key, listeners = []) + } + listeners.push(listener) + + if (onError) { + let onErrors = this.onErrorsMap.get(key) + if (!onErrors) { + this.onErrorsMap.set(key, onErrors = []) + } + onErrors.push(onError) + } + + void (async () => { + try { + if (this.isResumeEnabled && typeof lastEventId === 'string') { + const results = await this.redis.xread(key, lastEventId) + + if (results && results[0]) { + const [_, items] = results[0] as any + + for (const [id, fields] of items) { + const serialized = fields[1]! // field value is at index 1 (index 0 is field name 'data') + const payload = this.deserializePayload(id, serialized) + resumePayloadIds.add(id) + originalListener(payload) + } + } + } + } + catch (error) { + // error can happen when result from xread is invalid + onError?.(error as ThrowableError) + } + finally { + const pending = pendingPayloads + pendingPayloads = undefined + + for (const payload of pending) { + listener(payload) // listener instead of originalListener for deduplication + } + } + })() + + const cleanupListeners = once(() => { + listeners.splice(listeners.indexOf(listener), 1) + + if (onError) { + const onErrors = this.onErrorsMap.get(key) + if (onErrors) { + onErrors.splice(onErrors.indexOf(onError), 1) + } + } + }) + + return async () => { + cleanupListeners() + + if (listeners.length === 0) { // onErrors always has lower length than listeners + this.listenersMap.delete(key) + this.onErrorsMap.delete(key) + + const subscription = this.subscriptionsMap.get(key) + + if (subscription) { + this.subscriptionsMap.delete(key) + + // should execute all logic before async to avoid race condition problem + await subscription.unsubscribe() + } + } + } + } + + protected prefixKey(key: string): string { + return `${this.prefix}${key}` + } + + protected serializePayload(payload: object): SerializedPayload { + const eventMeta = getEventMeta(payload) + const [json, meta] = this.serializer.serialize(payload) + return { json: json as object, meta, eventMeta } + } + + protected deserializePayload(id: string | undefined, { json, meta, eventMeta }: SerializedPayload): any { + return withEventMeta( + this.serializer.deserialize(json, meta) as object, + id === undefined ? { ...eventMeta } : { ...eventMeta, id }, + ) + } +} diff --git a/packages/publisher/src/index.test.ts b/packages/publisher/src/index.test.ts new file mode 100644 index 000000000..8297b9d7e --- /dev/null +++ b/packages/publisher/src/index.test.ts @@ -0,0 +1,3 @@ +it('exports Publisher', async () => { + expect(Object.keys(await import('./index'))).toContain('Publisher') +}) diff --git a/packages/publisher/src/index.ts b/packages/publisher/src/index.ts new file mode 100644 index 000000000..912da4aac --- /dev/null +++ b/packages/publisher/src/index.ts @@ -0,0 +1 @@ +export * from './publisher' diff --git a/packages/publisher/src/publisher.test-d.ts b/packages/publisher/src/publisher.test-d.ts new file mode 100644 index 000000000..7ea6b43f2 --- /dev/null +++ b/packages/publisher/src/publisher.test-d.ts @@ -0,0 +1,75 @@ +import type { Publisher } from './publisher' + +describe('publisher', () => { + it('key-value types', async () => { + const pub = {} as Publisher<{ + 'event-1': { + id: string + } + 'event-2': { + name: string + } + }> + + pub.publish('event-1', { id: '1' }) + pub.publish('event-2', { name: '1' }) + // @ts-expect-error - wrong event + pub.publish('event-3', { name: '1' }) + // @ts-expect-error - wrong payload + pub.publish('event-2', { name: 123 }) + + pub.subscribe('event-1', (payload) => { + expectTypeOf(payload).toEqualTypeOf<{ + id: string + }>() + }) + + pub.subscribe('event-2', (payload) => { + expectTypeOf(payload).toEqualTypeOf<{ + name: string + }>() + }) + + // @ts-expect-error - wrong event + pub.subscribe('event-3', (payload) => {}) + + for await (const payload of pub.subscribe('event-1')) { + expectTypeOf(payload).toEqualTypeOf<{ + id: string + }>() + } + + for await (const payload of pub.subscribe('event-2')) { + expectTypeOf(payload).toEqualTypeOf<{ + name: string + }>() + } + + // @ts-expect-error - wrong event + for await (const payload of pub.subscribe('event-3')) { + // empty + } + }) + + it('record types', async () => { + const pub = {} as Publisher> + + pub.publish('event-1', { id: '1' }) + pub.publish('event-2', { id: '1' }) + pub.publish('event-100', { id: '1' }) + // @ts-expect-error - invalid payload + pub.publish('event-100', { id: 123 }) + + pub.subscribe('event-933', (payload) => { + expectTypeOf(payload).toEqualTypeOf<{ + id: string + }>() + }) + + for await (const payload of pub.subscribe('event-3439')) { + expectTypeOf(payload).toEqualTypeOf<{ + id: string + }>() + } + }) +}) diff --git a/packages/publisher/src/publisher.test.ts b/packages/publisher/src/publisher.test.ts new file mode 100644 index 000000000..d0ffb0b13 --- /dev/null +++ b/packages/publisher/src/publisher.test.ts @@ -0,0 +1,337 @@ +import type { PublisherSubscribeListenerOptions } from './publisher' +import { Publisher } from './publisher' + +// Concrete implementation for testing +class TestPublisher> extends Publisher { + optionsMap = new Map() + listenersMap = new Map void>>() + + async publish(event: K, payload: T[K]): Promise { + const eventListeners = this.listenersMap.get(event) + if (eventListeners) { + eventListeners.forEach(listener => listener(payload)) + } + } + + protected async subscribeListener( + event: K, + listener: (payload: T[K]) => void, + options?: PublisherSubscribeListenerOptions, + ): Promise<() => Promise> { + if (!this.optionsMap.has(event)) { + this.optionsMap.set(event, []) + } + this.optionsMap.get(event)!.push(options) + + if (!this.listenersMap.has(event)) { + this.listenersMap.set(event, new Set()) + } + this.listenersMap.get(event)!.add(listener) + + return async () => { + this.listenersMap.get(event)?.delete(listener) + } + } +} + +type TestEvents = { + message: { text: string } + count: { value: number } + user: { id: string, name: string } +} + +describe('publisher', () => { + let publisher: TestPublisher + + beforeEach(() => { + publisher = new TestPublisher() + }) + + afterEach(() => { + let size = 0 + for (const listeners of publisher.listenersMap.values()) { + size += listeners.size + } + expect(size).toBe(0) // ensure all listeners are unsubscribed correctly + }) + + describe('subscribe with callback', () => { + it('should subscribe and receive events', async () => { + const listener = vi.fn() + const unsub = await publisher.subscribe('message', listener) + + await publisher.publish('message', { text: 'hello' }) + + expect(listener).toHaveBeenCalledWith({ text: 'hello' }) + expect(listener).toHaveBeenCalledTimes(1) + + await unsub() + }) + + it('should handle multiple subscribers', async () => { + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = await publisher.subscribe('message', listener1) + const unsub2 = await publisher.subscribe('message', listener2) + + await publisher.publish('message', { text: 'hello' }) + + expect(listener1).toHaveBeenCalledWith({ text: 'hello' }) + expect(listener2).toHaveBeenCalledWith({ text: 'hello' }) + + await unsub1() + await unsub2() + }) + + it('should unsubscribe correctly', async () => { + const listener = vi.fn() + const unsubscribe = await publisher.subscribe('message', listener) + + await publisher.publish('message', { text: 'first' }) + await unsubscribe() + await publisher.publish('message', { text: 'second' }) + + expect(listener).toHaveBeenCalledTimes(1) + expect(listener).toHaveBeenCalledWith({ text: 'first' }) + }) + + it('should forward options to subscribeListener', async () => { + const listener = vi.fn() + const options = { lastEventId: '123' } + const unsubscribe = await publisher.subscribe('message', listener, options) + expect(publisher.optionsMap.get('message')![0]).toBe(options) + + await unsubscribe() + }) + }) + + describe('subscribe with async iterator', () => { + it('should iterate over events', async () => { + const events: string[] = [] + const iterator = publisher.subscribe('message') + + setTimeout(() => { + publisher.publish('message', { text: 'first' }) + publisher.publish('message', { text: 'second' }) + publisher.publish('message', { text: 'third' }) + setTimeout(() => iterator.return(), 50) + }, 10) + + for await (const payload of iterator) { + events.push(payload.text) + } + + expect(events).toEqual(['first', 'second', 'third']) + }) + + it('should buffer events when consumer is slow', async () => { + const iterator = publisher.subscribe('message', { maxBufferedEvents: 3 }) + + // Publish events before consuming + await publisher.publish('message', { text: 'first' }) + await publisher.publish('message', { text: 'second' }) + await publisher.publish('message', { text: 'third' }) + + const result1 = await iterator.next() + const result2 = await iterator.next() + const result3 = await iterator.next() + + expect(result1.value?.text).toBe('first') + expect(result2.value?.text).toBe('second') + expect(result3.value?.text).toBe('third') + + await iterator.return() + }) + + it('should drop oldest events when buffer exceeds maxBufferedEvents', async () => { + const iterator = publisher.subscribe('message', { maxBufferedEvents: 2 }) + + // Publish 4 events, buffer can only hold 2 + await publisher.publish('message', { text: 'first' }) + await publisher.publish('message', { text: 'second' }) + await publisher.publish('message', { text: 'third' }) + await publisher.publish('message', { text: 'fourth' }) + + const result1 = await iterator.next() + const result2 = await iterator.next() + + // First two should be dropped, we get third and fourth + expect(result1.value?.text).toBe('third') + expect(result2.value?.text).toBe('fourth') + + await iterator.return() + }) + + it('should handle maxBufferedEvents of 0', async () => { + const iterator = publisher.subscribe('message', { maxBufferedEvents: 0 }) + + // Publish event before consuming - should be dropped + await publisher.publish('message', { text: 'dropped' }) + + // Start consuming + const nextPromise = iterator.next() + await new Promise(resolve => setTimeout(resolve, 1)) + + // Publish while waiting + await publisher.publish('message', { text: 'received' }) + + const result = await nextPromise + expect(result.value?.text).toBe('received') + + await iterator.return() + }) + + it('should handle maxBufferedEvents of 1', async () => { + const iterator = publisher.subscribe('message', { maxBufferedEvents: 1 }) + + await publisher.publish('message', { text: 'first' }) + await publisher.publish('message', { text: 'second' }) + + const result = await iterator.next() + // Only the latest event is kept + expect(result.value?.text).toBe('second') + + await iterator.return() + }) + + it('should abort with signal', async () => { + const controller = new AbortController() + const iterator = publisher.subscribe('message', { signal: controller.signal }) + + const nextPromise = iterator.next() + controller.abort(new Error('Aborted')) + + await expect(nextPromise).rejects.toThrow('Aborted') + }) + + it('should throw if signal is already aborted', () => { + const controller = new AbortController() + controller.abort(new Error('Already aborted')) + + expect(() => { + publisher.subscribe('message', { signal: controller.signal }) + }).toThrow('Already aborted') + }) + + it('should cleanup on abort', async () => { + const controller = new AbortController() + const iterator = publisher.subscribe('message', { signal: controller.signal }) + + const nextPromise = iterator.next() + controller.abort() + await expect(nextPromise).rejects.toThrow('This operation was aborted') + + // Publishing after abort should not affect the iterator + await publisher.publish('message', { text: 'after abort' }) + + const result = await iterator.next() + expect(result.done).toBe(true) + }) + + it('should cleanup on return', async () => { + const iterator = publisher.subscribe('message') + + await publisher.publish('message', { text: 'first' }) + await iterator.next() + + const returnResult = await iterator.return() + expect(returnResult.done).toBe(true) + + // Further iterations should be done + const result = await iterator.next() + expect(result.done).toBe(true) + }) + + it('should handle concurrent consumers', async () => { + const iterator1 = publisher.subscribe('message') + const iterator2 = publisher.subscribe('message') + + await publisher.publish('message', { text: 'concurrent' }) + + const [result1, result2] = await Promise.all([ + iterator1.next(), + iterator2.next(), + ]) + + expect(result1.value?.text).toBe('concurrent') + expect(result2.value?.text).toBe('concurrent') + + await iterator1.return() + await iterator2.return() + }) + + it('should use instance maxBufferedEvents by default', async () => { + const pub = new TestPublisher({ maxBufferedEvents: 1 }) + const iterator = pub.subscribe('message') + + await pub.publish('message', { text: 'first' }) + await pub.publish('message', { text: 'second' }) + + const result = await iterator.next() + expect(result.value?.text).toBe('second') + + await iterator.return() + }) + + it('should override instance maxBufferedEvents with options', async () => { + const pub = new TestPublisher({ maxBufferedEvents: 1 }) + const iterator = pub.subscribe('message', { maxBufferedEvents: 3 }) + + await pub.publish('message', { text: 'first' }) + await pub.publish('message', { text: 'second' }) + + const result1 = await iterator.next() + const result2 = await iterator.next() + + expect(result1.value?.text).toBe('first') + expect(result2.value?.text).toBe('second') + + await iterator.return() + }) + + it('should handle rapid publishing and consuming', async () => { + const iterator = publisher.subscribe('count') + const received: number[] = [] + + const publishPromise = (async () => { + for (let i = 0; i < 100; i++) { + await publisher.publish('count', { value: i }) + } + })() + + for (let i = 0; i < 100; i++) { + const result = await iterator.next() + if (!result.done) { + received.push(result.value.value) + } + } + + await publishPromise + await iterator.return() + + expect(received).toHaveLength(100) + }) + + it('should forward lastEventId to subscribeListener', async () => { + const unsub = publisher.subscribe('message', { lastEventId: '__test__' }) + expect(publisher.optionsMap.get('message')?.[0]?.lastEventId).toBe('__test__') + await unsub.return() + }) + + describe('should stop onError trigger', async () => { + it('error happen before pull', async () => { + const iterator = publisher.subscribe('message') + publisher.optionsMap.get('message')?.[0]?.onError?.(new Error('Test error')) + await expect(iterator.next()).rejects.toThrow('Test error') + }) + + it('error happen after pull', async () => { + const iterator = publisher.subscribe('message', { signal: AbortSignal.timeout(100) }) + const promise = expect(iterator.next()).rejects.toThrow('Test error') + publisher.optionsMap.get('message')?.[0]?.onError?.(new Error('Test error')) + await promise + }) + }) + }) +}) diff --git a/packages/publisher/src/publisher.ts b/packages/publisher/src/publisher.ts new file mode 100644 index 000000000..af9a920a7 --- /dev/null +++ b/packages/publisher/src/publisher.ts @@ -0,0 +1,183 @@ +import type { ThrowableError } from '@orpc/shared' +import { AsyncIteratorClass } from '@orpc/shared' + +export interface PublisherOptions { + /** + * Maximum number of events to buffer for async iterator subscribers. + * + * If the buffer exceeds this limit, the oldest event is dropped. + * This prevents unbounded memory growth if consumers process events slowly. + * + * Set to: + * - `0`: Disable buffering. Events must be consumed before the next one arrives. + * - `1`: Only keep the latest event. Useful for real-time updates where only the most recent value matters. + * - `Infinity`: Keep all events. Ensures no data loss, but may lead to high memory usage. + * + * @default 100 + */ + maxBufferedEvents?: number +} + +export interface PublisherSubscribeListenerOptions { + /** + * Resume from a specific event ID + */ + lastEventId?: string | undefined + + /** + * Triggered when an error occur + */ + onError?: (error: ThrowableError) => void +} + +export interface PublisherSubscribeIteratorOptions + extends Pick, Pick { + /** + * Abort signal, automatically unsubscribes on abort + */ + signal?: AbortSignal | undefined | null +} + +export abstract class Publisher> { + private readonly maxBufferedEvents: Exclude + + constructor( + options: PublisherOptions = {}, + ) { + this.maxBufferedEvents = options.maxBufferedEvents ?? 100 + } + + /** + * Publish an event to subscribers + */ + abstract publish(event: K, payload: T[K]): Promise + + /** + * Subscribes to a specific event using a callback function. + * Returns an unsubscribe function to remove the listener. + * + * @remarks + * This method should be protected to avoid conflicts with `subscribe` method + */ + protected abstract subscribeListener( + event: K, + listener: (payload: T[K]) => void, + options?: PublisherSubscribeListenerOptions + ): Promise<() => Promise> + + /** + * Subscribes to a specific event using a callback function. + * Returns an unsubscribe function to remove the listener. + * + * @example + * ```ts + * const unsubscribe = publisher.subscribe('event', (payload) => { + * console.log(payload) + * }, { + * lastEventId, + * onError: (error) => { + * // handle error (consider unsubscribe if error can't be recovered) + * } + * }) + * + * // Later + * unsubscribe() + * ``` + */ + subscribe(event: K, listener: (payload: T[K]) => void, options?: PublisherSubscribeListenerOptions): Promise<() => Promise> + /** + * Subscribes to a specific event using an async iterator. + * Useful for `for await...of` loops with optional buffering and abort support. + * + * @example + * ```ts + * for await (const payload of publisher.subscribe('event', { signal, lastEventId })) { + * console.log(payload) + * } + * ``` + */ + subscribe(event: K, options?: PublisherSubscribeIteratorOptions): AsyncIteratorClass + subscribe( + event: K, + listenerOrOptions?: ((payload: T[K]) => void) | PublisherSubscribeIteratorOptions, + listenerOptions?: PublisherSubscribeListenerOptions, + ): Promise<() => Promise> | AsyncIteratorClass { + if (typeof listenerOrOptions === 'function') { + return this.subscribeListener(event, listenerOrOptions, listenerOptions) + } + + const signal = listenerOrOptions?.signal + const maxBufferedEvents = listenerOrOptions?.maxBufferedEvents ?? this.maxBufferedEvents + + signal?.throwIfAborted() + + const bufferedEvents: T[K][] = [] + const pullResolvers: [(result: IteratorResult) => void, (error: Error) => void][] = [] + let subscriptionError: { error: ThrowableError } | undefined + + const unsubscribePromise = this.subscribe(event, (payload) => { + const resolver = pullResolvers.shift() + + if (resolver) { + resolver[0]({ done: false, value: payload }) + } + else { + bufferedEvents.push(payload) + + if (bufferedEvents.length > maxBufferedEvents) { + bufferedEvents.shift() + } + } + }, { + lastEventId: listenerOrOptions?.lastEventId, + onError: (error) => { + subscriptionError = { error } + pullResolvers.forEach(resolver => resolver[1](error)) + signal?.removeEventListener('abort', abortListener) + pullResolvers.length = 0 + bufferedEvents.length = 0 + unsubscribePromise.then(unsubscribe => unsubscribe()).catch(() => { + // TODO: log error + }) + }, + }) + + function abortListener(event: any) { + pullResolvers.forEach(resolver => resolver[1](event.target.reason)) + pullResolvers.length = 0 + bufferedEvents.length = 0 + unsubscribePromise.then(unsubscribe => unsubscribe()).catch(() => { + // TODO: log error + }) + } + + signal?.addEventListener('abort', abortListener, { once: true }) + + return new AsyncIteratorClass(async () => { + if (subscriptionError) { + throw subscriptionError.error + } + + if (signal?.aborted) { + throw signal.reason + } + + await unsubscribePromise // make sure subscription is ready + + if (bufferedEvents.length > 0) { + return { done: false, value: bufferedEvents.shift()! } + } + + return new Promise((resolve, reject) => { + pullResolvers.push([resolve, reject]) + }) + }, async () => { + pullResolvers.forEach(resolver => resolver[0]({ done: true, value: undefined })) + signal?.removeEventListener('abort', abortListener) + pullResolvers.length = 0 + bufferedEvents.length = 0 + + await unsubscribePromise.then(unsubscribe => unsubscribe()) + }) + } +} diff --git a/packages/publisher/tsconfig.json b/packages/publisher/tsconfig.json new file mode 100644 index 000000000..15db1f79b --- /dev/null +++ b/packages/publisher/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.lib.json", + "references": [ + { "path": "../shared" }, + { "path": "../standard-server" } + ], + "include": ["src"], + "exclude": [ + "**/*.bench.*", + "**/*.test.*", + "**/*.test-d.ts", + "**/__tests__/**", + "**/__mocks__/**", + "**/__snapshots__/**" + ] +} diff --git a/packages/server/package.json b/packages/server/package.json index 2b80fa868..bf8981ba8 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -141,6 +141,7 @@ "crossws": "^0.4.1", "next": "^15.5.6", "supertest": "^7.1.4", - "ws": "^8.18.3" + "ws": "^8.18.3", + "zod": "^4.1.11" } } diff --git a/packages/shared/src/event-publisher.test.ts b/packages/shared/src/event-publisher.test.ts index e74ab583c..b77966818 100644 --- a/packages/shared/src/event-publisher.test.ts +++ b/packages/shared/src/event-publisher.test.ts @@ -265,5 +265,39 @@ describe('eventPublisher', () => { await promise }) + + it('support reuse lister for multiple time', async () => { + const listener = vi.fn() + + const unsub1 = pub.subscribe('event', listener) + const unsub2 = pub.subscribe('event', listener) + + pub.publish('event', 'payload1') + expect(listener).toHaveBeenCalledTimes(2) + + unsub1() + pub.publish('event', 'payload2') + expect(listener).toHaveBeenCalledTimes(3) + + unsub2() + }) + + it('safely unsub multiple times', async () => { + const listener1 = vi.fn() + const listener2 = vi.fn() + + const unsub1 = pub.subscribe('event', listener1) + const unsub2 = pub.subscribe('event', listener2) + + unsub1() + unsub1() + unsub1() + + pub.publish('event', 'payload1') + expect(listener1).toHaveBeenCalledTimes(0) + expect(listener2).toHaveBeenCalledTimes(1) + + unsub2() + }) }) }) diff --git a/packages/shared/src/event-publisher.ts b/packages/shared/src/event-publisher.ts index 7fa6f9bae..b5d84fecc 100644 --- a/packages/shared/src/event-publisher.ts +++ b/packages/shared/src/event-publisher.ts @@ -1,3 +1,4 @@ +import { once } from './function' import { AsyncIteratorClass } from './iterator' export interface EventPublisherOptions { @@ -25,7 +26,7 @@ export interface EventPublisherSubscribeIteratorOptions extends EventPublisherOp } export class EventPublisher> { - #listenersMap = new Map void>>() + #listenersMap = new Map void>>() #maxBufferedEvents: number constructor(options: EventPublisherOptions = {}) { @@ -86,18 +87,17 @@ export class EventPublisher> { let listeners = this.#listenersMap.get(event) if (!listeners) { - this.#listenersMap.set(event, listeners = new Set()) + this.#listenersMap.set(event, listeners = []) } + listeners.push(listenerOrOptions) - listeners.add(listenerOrOptions) + return once(() => { + listeners.splice(listeners.indexOf(listenerOrOptions), 1) - return () => { - listeners.delete(listenerOrOptions) - - if (listeners.size === 0) { + if (listeners.length === 0) { this.#listenersMap.delete(event) } - } + }) } const signal = listenerOrOptions?.signal diff --git a/packages/shared/src/id.test.ts b/packages/shared/src/id.test.ts index f96b78c19..6dc5b06f9 100644 --- a/packages/shared/src/id.test.ts +++ b/packages/shared/src/id.test.ts @@ -1,16 +1,16 @@ -import { SequentialIdGenerator } from './id' +import { compareSequentialIds, SequentialIdGenerator } from './id' describe('sequentialIdGenerator', () => { it('unique and increase', () => { const idGenerator = new SequentialIdGenerator() - expect(idGenerator.generate()).toBe('0') expect(idGenerator.generate()).toBe('1') expect(idGenerator.generate()).toBe('2') expect(idGenerator.generate()).toBe('3') + expect(idGenerator.generate()).toBe('4') - for (let i = 4; i < 1000; i++) { - expect(idGenerator.generate()).toBe(i.toString(32)) + for (let i = 5; i < 1000; i++) { + expect(idGenerator.generate()).toBe(i.toString(36)) } }) @@ -28,3 +28,47 @@ describe('sequentialIdGenerator', () => { expect(generatedIds.size).toBe(size) }) }) + +describe('compareSequentialIds', () => { + it('should return 0 when ids are equal', () => { + expect(compareSequentialIds('a', 'a')).toBe(0) + expect(compareSequentialIds('10', '10')).toBe(0) + }) + + it('should return negative when a < b (same length)', () => { + expect(compareSequentialIds('a', 'b')).toBeLessThan(0) + expect(compareSequentialIds('09', '0a')).toBeLessThan(0) + }) + + it('should return positive when a > b (same length)', () => { + expect(compareSequentialIds('b', 'a')).toBeGreaterThan(0) + expect(compareSequentialIds('0b', '0a')).toBeGreaterThan(0) + }) + + it('should return negative when a is shorter (length difference)', () => { + expect(compareSequentialIds('z', '10')).toBeLessThan(0) + expect(compareSequentialIds('zz', '100')).toBeLessThan(0) + }) + + it('should return positive when a is longer (length difference)', () => { + expect(compareSequentialIds('10', 'z')).toBeGreaterThan(0) + expect(compareSequentialIds('100', 'zz')).toBeGreaterThan(0) + }) + + it('random check', { repeats: 1000 }, () => { + const bigInt1 = BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)) + const bigInt2 = BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)) + + const result = compareSequentialIds(bigInt1.toString(36), bigInt2.toString(36)) + + if (bigInt1 > bigInt2) { + expect(result).toBeGreaterThan(0) + } + else if (bigInt1 < bigInt2) { + expect(result).toBeLessThan(0) + } + else { + expect(result).toBe(0) + } + }) +}) diff --git a/packages/shared/src/id.ts b/packages/shared/src/id.ts index d2d4ad64d..c778c350f 100644 --- a/packages/shared/src/id.ts +++ b/packages/shared/src/id.ts @@ -1,9 +1,24 @@ export class SequentialIdGenerator { - private index = BigInt(0) + private index = BigInt(1) generate(): string { - const id = this.index.toString(32) + const id = this.index.toString(36) this.index++ return id } } + +/** + * Compares two sequential IDs. + * Returns: + * - negative if `a` < `b` + * - positive if `a` > `b` + * - 0 if equal + */ +export function compareSequentialIds(a: string, b: string): number { + if (a.length !== b.length) { + return a.length - b.length + } + + return a < b ? -1 : a > b ? 1 : 0 +} diff --git a/packages/standard-server-peer/src/client.test.ts b/packages/standard-server-peer/src/client.test.ts index 389aa04b8..d5c91b8b2 100644 --- a/packages/standard-server-peer/src/client.test.ts +++ b/packages/standard-server-peer/src/client.test.ts @@ -20,7 +20,7 @@ describe('clientPeer', () => { url: new URL('https://example.com'), method: 'POST', headers: { - 'x-request': '1', + 'x-request': '2', }, body: { hello: 'world' }, signal: undefined, @@ -29,7 +29,7 @@ describe('clientPeer', () => { const baseResponse = { status: 200, headers: { - 'x-response': '1', + 'x-response': '2', }, body: { hello: 'world_2' }, } @@ -38,9 +38,9 @@ describe('clientPeer', () => { expect(peer.request(baseRequest)).resolves.toEqual(baseResponse) await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(1)) - expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['0', MessageType.REQUEST, baseRequest]) + expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['1', MessageType.REQUEST, baseRequest]) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) }) it('multiple simple request/response', async () => { @@ -48,11 +48,11 @@ describe('clientPeer', () => { expect(peer.request({ ...baseRequest, body: '__SECOND__' })).resolves.toEqual({ ...baseResponse, body: '__SECOND__' }) await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(2)) - expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['0', MessageType.REQUEST, baseRequest]) - expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['1', MessageType.REQUEST, { ...baseRequest, body: '__SECOND__' }]) + expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['1', MessageType.REQUEST, baseRequest]) + expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['2', MessageType.REQUEST, { ...baseRequest, body: '__SECOND__' }]) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) - peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, { ...baseResponse, body: '__SECOND__' })) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) + peer.message(await encodeResponseMessage('2', MessageType.RESPONSE, { ...baseResponse, body: '__SECOND__' })) }) describe('request', () => { @@ -69,7 +69,7 @@ describe('clientPeer', () => { await expect(peer.request(request)).rejects.toThrow('This operation was aborted') expect(send).toHaveBeenCalledTimes(0) - await peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + await peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) }) it('signal', async () => { @@ -90,10 +90,10 @@ describe('clientPeer', () => { controller.abort() await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(2)) - expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['0', MessageType.REQUEST, baseRequest]) - expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['0', MessageType.ABORT_SIGNAL, undefined]) + expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['1', MessageType.REQUEST, baseRequest]) + expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['1', MessageType.ABORT_SIGNAL, undefined]) - await peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + await peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) }) it('signal 2', async () => { @@ -112,13 +112,13 @@ describe('clientPeer', () => { expect(peer.request(request)).rejects.toThrow('This operation was aborted') await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(1)) - expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['0', MessageType.REQUEST, baseRequest]) + expect(await decodeRequestMessage(send.mock.calls[0]![0])).toEqual(['1', MessageType.REQUEST, baseRequest]) controller.abort() await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(2)) - expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['0', MessageType.ABORT_SIGNAL, undefined]) + expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['1', MessageType.ABORT_SIGNAL, undefined]) - await peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + await peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) }) it('signal - remove abort listener before signal is garbage collected', async () => { @@ -150,12 +150,12 @@ describe('clientPeer', () => { await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(4)) expect(await decodeRequestMessage(send.mock.calls[0]![0])) - .toEqual(['0', MessageType.REQUEST, { ...request, body: undefined, headers: { ...request.headers, 'content-type': 'text/event-stream' } }]) - expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['0', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' }]) - expect(await decodeRequestMessage(send.mock.calls[2]![0])).toEqual(['0', MessageType.EVENT_ITERATOR, { event: 'message', data: { hello2: true }, meta: { id: 'id-1' } }]) - expect(await decodeRequestMessage(send.mock.calls[3]![0])).toEqual(['0', MessageType.EVENT_ITERATOR, { event: 'done' }]) + .toEqual(['1', MessageType.REQUEST, { ...request, body: undefined, headers: { ...request.headers, 'content-type': 'text/event-stream' } }]) + expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['1', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' }]) + expect(await decodeRequestMessage(send.mock.calls[2]![0])).toEqual(['1', MessageType.EVENT_ITERATOR, { event: 'message', data: { hello2: true }, meta: { id: 'id-1' } }]) + expect(await decodeRequestMessage(send.mock.calls[3]![0])).toEqual(['1', MessageType.EVENT_ITERATOR, { event: 'done' }]) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) }) it('iterator and server abort while sending', async () => { @@ -185,14 +185,14 @@ describe('clientPeer', () => { expect(yieldFn).toHaveBeenCalledTimes(1) expect(isFinallyCalled).toBe(false) - await peer.message(await encodeResponseMessage('0', MessageType.ABORT_SIGNAL, undefined)) + await peer.message(await encodeResponseMessage('1', MessageType.ABORT_SIGNAL, undefined)) await new Promise(resolve => setTimeout(resolve, 20)) expect(send).toHaveBeenCalledTimes(2) expect(yieldFn).toHaveBeenCalledTimes(2) expect(isFinallyCalled).toBe(true) - await peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + await peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) await new Promise(resolve => setTimeout(resolve, 20)) expect(send).toHaveBeenCalledTimes(2) @@ -220,14 +220,14 @@ describe('clientPeer', () => { await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(3)) expect(await decodeRequestMessage(send.mock.calls[0]![0])) - .toEqual(['0', MessageType.REQUEST, { ...request, body: undefined, headers: { ...request.headers, 'content-type': 'text/event-stream' } }]) - expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['0', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' }]) + .toEqual(['1', MessageType.REQUEST, { ...request, body: undefined, headers: { ...request.headers, 'content-type': 'text/event-stream' } }]) + expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['1', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' }]) /** * Should send an error event even when the error is not an instance of ErrorEvent. */ - expect(await decodeRequestMessage(send.mock.calls[2]![0])).toEqual(['0', MessageType.EVENT_ITERATOR, { event: 'error' }]) + expect(await decodeRequestMessage(send.mock.calls[2]![0])).toEqual(['1', MessageType.EVENT_ITERATOR, { event: 'error' }]) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) await promise @@ -244,7 +244,7 @@ describe('clientPeer', () => { await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(1)) expect(await decodeRequestMessage(send.mock.calls[0]![0])) - .toEqual(['0', MessageType.REQUEST, { + .toEqual(['1', MessageType.REQUEST, { ...request, headers: { ...request.headers, @@ -253,7 +253,7 @@ describe('clientPeer', () => { }, }]) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) }) it('form data', async () => { @@ -270,7 +270,7 @@ describe('clientPeer', () => { await vi.waitFor(() => expect(send).toHaveBeenCalledTimes(1)) expect(await decodeRequestMessage(send.mock.calls[0]![0])) - .toEqual(['0', MessageType.REQUEST, { + .toEqual(['1', MessageType.REQUEST, { ...request, headers: { ...request.headers, @@ -278,7 +278,7 @@ describe('clientPeer', () => { }, }]) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) }) it('throw if can not send', async () => { @@ -332,7 +332,7 @@ describe('clientPeer', () => { await new Promise(resolve => setTimeout(resolve, 0)) expect(send).toHaveBeenCalledTimes(2) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) await promise await new Promise(resolve => setTimeout(resolve, 100)) expect(send).toHaveBeenCalledTimes(2) @@ -354,10 +354,10 @@ describe('clientPeer', () => { await new Promise(resolve => setTimeout(resolve, 0)) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, response)) - peer.message(await encodeResponseMessage('0', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' })) - peer.message(await encodeResponseMessage('0', MessageType.EVENT_ITERATOR, { event: 'message', data: { hello2: true }, meta: { id: 'id-1' } })) - peer.message(await encodeResponseMessage('0', MessageType.EVENT_ITERATOR, { event: 'done', data: 'hello3' })) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, response)) + peer.message(await encodeResponseMessage('1', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' })) + peer.message(await encodeResponseMessage('1', MessageType.EVENT_ITERATOR, { event: 'message', data: { hello2: true }, meta: { id: 'id-1' } })) + peer.message(await encodeResponseMessage('1', MessageType.EVENT_ITERATOR, { event: 'done', data: 'hello3' })) const result = await responsePromise @@ -406,8 +406,8 @@ describe('clientPeer', () => { await new Promise(resolve => setTimeout(resolve, 0)) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, response)) - peer.message(await encodeResponseMessage('0', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' })) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, response)) + peer.message(await encodeResponseMessage('1', MessageType.EVENT_ITERATOR, { event: 'message', data: 'hello' })) const result = await responsePromise @@ -437,7 +437,7 @@ describe('clientPeer', () => { expect(await iterator.next()).toEqual({ done: true, value: undefined }) expect(send).toHaveBeenCalledTimes(2) - expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['0', MessageType.ABORT_SIGNAL, undefined]) + expect(await decodeRequestMessage(send.mock.calls[1]![0])).toEqual(['1', MessageType.ABORT_SIGNAL, undefined]) }) it('iterator and server success response while sending', async () => { @@ -467,7 +467,7 @@ describe('clientPeer', () => { expect(yieldFn).toHaveBeenCalledTimes(1) expect(isFinallyCalled).toBe(false) - await peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, baseResponse)) + await peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, baseResponse)) await new Promise(resolve => setTimeout(resolve, 20)) expect(send).toHaveBeenCalledTimes(2) @@ -503,7 +503,7 @@ describe('clientPeer', () => { const [response] = await Promise.all([ peer.request(request), new Promise(resolve => setTimeout(resolve, 0)) - .then(async () => peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, { ...baseResponse, body: (async function* () { })() }))), + .then(async () => peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, { ...baseResponse, body: (async function* () { })() }))), ]) const iterator = response.body as AsyncGenerator @@ -518,7 +518,7 @@ describe('clientPeer', () => { expect(yieldFn).toHaveBeenCalledTimes(2) expect(isFinallyCalled).toBe(false) - await peer.message(await encodeResponseMessage('0', MessageType.EVENT_ITERATOR, { event: 'done', data: 'hello' })) + await peer.message(await encodeResponseMessage('1', MessageType.EVENT_ITERATOR, { event: 'done', data: 'hello' })) await iterator.next() await new Promise(resolve => setTimeout(resolve, 10)) @@ -548,7 +548,7 @@ describe('clientPeer', () => { }, }) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, response)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, response)) }) it('form data', async () => { @@ -569,15 +569,15 @@ describe('clientPeer', () => { }, }) - peer.message(await encodeResponseMessage('0', MessageType.RESPONSE, response)) + peer.message(await encodeResponseMessage('1', MessageType.RESPONSE, response)) }) }) it('close all', async () => { const promise = Promise.all([ - expect(peer.request(baseRequest)).rejects.toThrow('[AsyncIdQueue] Queue[0] was closed or aborted while waiting for pulling.'), expect(peer.request(baseRequest)).rejects.toThrow('[AsyncIdQueue] Queue[1] was closed or aborted while waiting for pulling.'), expect(peer.request(baseRequest)).rejects.toThrow('[AsyncIdQueue] Queue[2] was closed or aborted while waiting for pulling.'), + expect(peer.request(baseRequest)).rejects.toThrow('[AsyncIdQueue] Queue[3] was closed or aborted while waiting for pulling.'), ]) await new Promise(resolve => setTimeout(resolve, 1)) diff --git a/packages/valibot/package.json b/packages/valibot/package.json index 74d8d37b6..eb7f76fce 100644 --- a/packages/valibot/package.json +++ b/packages/valibot/package.json @@ -43,6 +43,7 @@ "@valibot/to-json-schema": "^1.3.0" }, "devDependencies": { - "valibot": "^1.1.0" + "valibot": "^1.1.0", + "zod": "^4.1.11" } } diff --git a/playgrounds/tanstack-start/src/routeTree.gen.ts b/playgrounds/tanstack-start/src/routeTree.gen.ts index 635dc45f9..98e1a7dbd 100644 --- a/playgrounds/tanstack-start/src/routeTree.gen.ts +++ b/playgrounds/tanstack-start/src/routeTree.gen.ts @@ -98,6 +98,7 @@ import type { getRouter } from './router.tsx' import type { createStart } from '@tanstack/react-start' declare module '@tanstack/react-start' { interface Register { + ssr: true router: Awaited> } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 879287fdb..afc292652 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: + '@wxt-dev/storage': 1.2.0 typescript: ~5.8.3 importers: @@ -19,7 +20,7 @@ importers: version: 0.8.10(@solidjs/router@0.15.3(solid-js@1.9.9))(solid-js@1.9.9) '@sveltejs/vite-plugin-svelte': specifier: ^6.2.1 - version: 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -28,7 +29,7 @@ importers: version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@testing-library/svelte': specifier: ^5.2.7 - version: 5.2.8(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) + version: 5.2.8(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -37,7 +38,7 @@ importers: version: 7.6.13 '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 '@vitest/coverage-v8': specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4) @@ -70,13 +71,13 @@ importers: version: 27.0.0(postcss@8.5.6) knip: specifier: ^5.66.0 - version: 5.66.0(@types/node@22.17.0)(typescript@5.8.3) + version: 5.66.0(@types/node@22.18.11)(typescript@5.8.3) lint-staged: specifier: ^16.2.4 version: 16.2.4 msw: specifier: ^2.11.5 - version: 2.11.5(@types/node@22.17.0)(typescript@5.8.3) + version: 2.11.5(@types/node@22.18.11)(typescript@5.8.3) pkg-pr-new: specifier: ^0.0.60 version: 0.0.60 @@ -94,10 +95,10 @@ importers: version: 3.6.1(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)) vite-plugin-solid: specifier: ^2.11.9 - version: 2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) apps/content: devDependencies: @@ -125,6 +126,9 @@ importers: '@orpc/contract': specifier: workspace:* version: link:../../packages/contract + '@orpc/experimental-publisher': + specifier: workspace:* + version: link:../../packages/publisher '@orpc/experimental-react-swr': specifier: workspace:* version: link:../../packages/react-swr @@ -184,7 +188,7 @@ importers: version: 5.90.5(vue@3.5.22(typescript@5.8.3)) '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 ai: specifier: 5.0.76 version: 5.0.76(zod@4.1.12) @@ -208,19 +212,19 @@ importers: version: 5.40.2 vitepress: specifier: 1.6.4 - version: 1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3) + version: 1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3) vitepress-plugin-group-icons: specifier: ^1.6.4 - version: 1.6.4(markdown-it@14.1.0)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.6.4(markdown-it@14.1.0)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitepress-plugin-llms: specifier: ^1.8.0 version: 1.8.0 vitepress-plugin-mermaid: specifier: ^2.0.17 - version: 2.0.17(mermaid@11.12.0)(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)) + version: 2.0.17(mermaid@11.12.0)(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)) vitepress-plugin-shiki-twoslash: specifier: ^0.0.6 - version: 0.0.6(typescript@5.8.3)(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)) + version: 0.0.6(typescript@5.8.3)(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)) vue: specifier: ^3.5.22 version: 3.5.22(typescript@5.8.3) @@ -232,7 +236,7 @@ importers: dependencies: '@ark/schema': specifier: '*' - version: 0.46.0 + version: 0.50.0 '@orpc/contract': specifier: workspace:* version: link:../contract @@ -241,7 +245,11 @@ importers: version: link:../openapi arktype: specifier: '*' - version: 2.1.20 + version: 2.1.23 + devDependencies: + zod: + specifier: ^4.1.11 + version: 4.1.12 packages/client: dependencies: @@ -316,7 +324,7 @@ importers: version: link:../standard-server-peer '@types/node': specifier: ^22.15.30 - version: 22.18.6 + version: 22.18.11 packages/hey-api: dependencies: @@ -329,7 +337,7 @@ importers: devDependencies: '@hey-api/openapi-ts': specifier: ^0.80.8 - version: 0.80.8(magicast@0.3.5)(typescript@5.8.3) + version: 0.80.18(magicast@0.3.5)(typescript@5.8.3) packages/interop: devDependencies: @@ -409,7 +417,7 @@ importers: version: 11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-express@11.1.6) '@ts-rest/core': specifier: ^3.52.1 - version: 3.52.1(@types/node@24.8.1)(zod@4.1.12) + version: 3.52.1(@types/node@22.18.11)(zod@4.1.12) '@types/express': specifier: ^5.0.3 version: 5.0.3 @@ -492,6 +500,25 @@ importers: specifier: ^0.206.0 version: 0.206.0(@opentelemetry/api@1.9.0) + packages/publisher: + dependencies: + '@orpc/client': + specifier: workspace:* + version: link:../client + '@orpc/shared': + specifier: workspace:* + version: link:../shared + '@orpc/standard-server': + specifier: workspace:* + version: link:../standard-server + devDependencies: + '@upstash/redis': + specifier: ^1.35.6 + version: 1.35.6 + ioredis: + specifier: ^5.8.1 + version: 5.8.1 + packages/react: dependencies: '@orpc/client': @@ -603,6 +630,9 @@ importers: ws: specifier: ^8.18.3 version: 8.18.3 + zod: + specifier: ^4.1.11 + version: 4.1.12 packages/shared: dependencies: @@ -674,7 +704,7 @@ importers: version: 8.10.156 '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 packages/standard-server-fetch: dependencies: @@ -687,7 +717,7 @@ importers: devDependencies: '@hono/node-server': specifier: ^1.19.5 - version: 1.19.5(hono@4.8.12) + version: 1.19.5(hono@4.10.1) packages/standard-server-node: dependencies: @@ -703,7 +733,7 @@ importers: devDependencies: '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 '@types/supertest': specifier: ^6.0.3 version: 6.0.3 @@ -756,7 +786,7 @@ importers: version: 20.3.6(rxjs@7.8.2) '@tanstack/angular-query-experimental': specifier: ^5.90.5 - version: 5.90.5(@angular/common@20.1.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@20.3.6(rxjs@7.8.2)) + version: 5.90.5(@angular/common@20.3.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@20.3.6(rxjs@7.8.2)) '@tanstack/query-core': specifier: ^5.90.5 version: 5.90.5 @@ -819,6 +849,9 @@ importers: valibot: specifier: ^1.1.0 version: 1.1.0(typescript@5.8.3) + zod: + specifier: ^4.1.11 + version: 4.1.12 packages/vue-colada: dependencies: @@ -893,7 +926,7 @@ importers: version: 0.9.4(prettier@3.6.2)(typescript@5.8.3) '@astrojs/react': specifier: ^4.4.0 - version: 4.4.0(@types/node@24.8.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 4.4.0(@types/node@22.18.11)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@orpc/client': specifier: next version: link:../../packages/client @@ -926,7 +959,7 @@ importers: version: 19.2.2(@types/react@19.2.2) astro: specifier: ^5.14.5 - version: 5.14.5(@netlify/blobs@9.1.2)(@types/node@24.8.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(yaml@2.8.1) + version: 5.14.5(@types/node@22.18.11)(@upstash/redis@1.35.6)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(yaml@2.8.1) react: specifier: ^19.2.0 version: 19.2.0 @@ -971,7 +1004,7 @@ importers: version: 19.2.2(@types/react@19.2.2) '@wxt-dev/module-react': specifier: ^1.1.5 - version: 1.1.5(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(wxt@0.20.11(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.1.5(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(wxt@0.20.11(@types/node@22.18.11)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) react: specifier: ^19.2.0 version: 19.2.0 @@ -983,7 +1016,7 @@ importers: version: 5.8.3 wxt: specifier: ^0.20.11 - version: 0.20.11(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 0.20.11(@types/node@22.18.11)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) zod: specifier: ^4.1.12 version: 4.1.12 @@ -1055,7 +1088,7 @@ importers: devDependencies: '@cloudflare/vite-plugin': specifier: ^1.13.13 - version: 1.13.13(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251008.0)(wrangler@4.43.0(@cloudflare/workers-types@4.20251011.0)) + version: 1.13.13(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251008.0)(wrangler@4.43.0(@cloudflare/workers-types@4.20251011.0)) '@orpc/client': specifier: next version: link:../../packages/client @@ -1079,7 +1112,7 @@ importers: version: link:../../packages/zod '@scalar/api-reference-react': specifier: ^0.8.1 - version: 0.8.1(change-case@5.4.4)(jwt-decode@4.0.0)(react@19.2.0)(tailwindcss@4.1.11)(typescript@5.8.3) + version: 0.8.1(change-case@5.4.4)(react@19.2.0)(tailwindcss@4.1.14)(typescript@5.8.3) '@tanstack/react-query': specifier: ^5.90.5 version: 5.90.5(react@19.2.0) @@ -1091,7 +1124,7 @@ importers: version: 19.2.2(@types/react@19.2.2) '@vitejs/plugin-react': specifier: ^5.0.4 - version: 5.0.4(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.0.4(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) react: specifier: ^19.2.0 version: 19.2.0 @@ -1103,7 +1136,7 @@ importers: version: 5.8.3 vite: specifier: ^7.1.10 - version: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) wrangler: specifier: ^4.43.0 version: 4.43.0(@cloudflare/workers-types@4.20251011.0) @@ -1139,7 +1172,7 @@ importers: version: 5.90.5(react@19.2.0) '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 tsx: specifier: ^4.20.6 version: 4.20.6 @@ -1157,7 +1190,7 @@ importers: version: 3.0.2(electron@38.3.0) '@electron-toolkit/tsconfig': specifier: ^2.0.0 - version: 2.0.0(@types/node@22.17.0) + version: 2.0.0(@types/node@22.18.11) '@electron-toolkit/utils': specifier: ^4.0.0 version: 4.0.0(electron@38.3.0) @@ -1178,7 +1211,7 @@ importers: version: 5.90.5(react@19.2.0) '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -1187,7 +1220,7 @@ importers: version: 19.2.2(@types/react@19.2.2) '@vitejs/plugin-react': specifier: ^5.0.4 - version: 5.0.4(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.0.4(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) electron: specifier: ^38.3.0 version: 38.3.0 @@ -1196,7 +1229,7 @@ importers: version: 26.0.12(electron-builder-squirrel-windows@26.0.12) electron-vite: specifier: ^4.0.1 - version: 4.0.1(@swc/core@1.13.20(@swc/helpers@0.5.17))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.0.1(@swc/core@1.13.20(@swc/helpers@0.5.17))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) react: specifier: ^19.2.0 version: 19.2.0 @@ -1208,7 +1241,7 @@ importers: version: 5.8.3 vite: specifier: ^7.1.10 - version: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) zod: specifier: ^4.1.12 version: 4.1.12 @@ -1217,7 +1250,7 @@ importers: devDependencies: '@nestjs/cli': specifier: ^11.0.10 - version: 11.0.10(@swc/cli@0.7.8(@swc/core@1.13.20(@swc/helpers@0.5.17))(chokidar@4.0.3))(@swc/core@1.13.20(@swc/helpers@0.5.17))(@types/node@22.17.0) + version: 11.0.10(@swc/cli@0.7.8(@swc/core@1.13.20(@swc/helpers@0.5.17))(chokidar@4.0.3))(@swc/core@1.13.20(@swc/helpers@0.5.17))(@types/node@22.18.11) '@nestjs/common': specifier: ^11.1.6 version: 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -1265,7 +1298,7 @@ importers: version: 5.0.3 '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 globals: specifier: ^16.4.0 version: 16.4.0 @@ -1283,7 +1316,7 @@ importers: version: 9.5.4(typescript@5.8.3)(webpack@5.100.2(@swc/core@1.13.20(@swc/helpers@0.5.17))) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.13.20(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.20(@swc/helpers@0.5.17))(@swc/wasm@1.13.20)(@types/node@22.18.11)(typescript@5.8.3) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -1325,7 +1358,7 @@ importers: version: 5.90.5(react@19.2.0) '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -1376,7 +1409,7 @@ importers: version: 5.90.5(vue@3.5.22(typescript@5.8.3)) nuxt: specifier: ^4.1.3 - version: 4.1.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.8.1)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(xml2js@0.6.2)(yaml@2.8.1) + version: 4.1.3(@parcel/watcher@2.5.1)(@types/node@22.18.11)(@upstash/redis@1.35.6)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(xml2js@0.6.2)(yaml@2.8.1) vue: specifier: latest version: 3.5.22(typescript@5.8.3) @@ -1412,7 +1445,7 @@ importers: version: 0.15.3(solid-js@1.9.9) '@solidjs/start': specifier: ^1.2.0 - version: 1.2.0(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.2.0(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/solid-query': specifier: ^5.90.6 version: 5.90.6(solid-js@1.9.9) @@ -1421,10 +1454,10 @@ importers: version: 1.9.9 vinxi: specifier: ^0.5.8 - version: 0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) + version: 0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) vite-plugin-top-level-await: specifier: ^1.6.0 - version: 1.6.0(@swc/helpers@0.5.17)(rollup@4.52.4)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.6.0(@swc/helpers@0.5.17)(rollup@4.52.4)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) zod: specifier: ^4.1.12 version: 4.1.12 @@ -1451,13 +1484,13 @@ importers: version: link:../../packages/zod '@sveltejs/adapter-auto': specifier: ^6.1.1 - version: 6.1.1(@sveltejs/kit@2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) + version: 6.1.1(@sveltejs/kit@2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))) '@sveltejs/kit': specifier: ^2.47.1 - version: 2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@sveltejs/vite-plugin-svelte': specifier: ^6.2.1 - version: 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/svelte-query': specifier: ^6.0.3 version: 6.0.3(svelte@5.40.2) @@ -1472,7 +1505,7 @@ importers: version: 5.8.3 vite: specifier: ^7.1.10 - version: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) zod: specifier: ^4.1.12 version: 4.1.12 @@ -1511,16 +1544,16 @@ importers: version: 1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-router-devtools': specifier: ^1.133.3 - version: 1.133.3(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.3)(@types/node@22.17.0)(csstype@3.1.3)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + version: 1.133.3(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.3)(@types/node@22.18.11)(csstype@3.1.3)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/react-router-ssr-query': specifier: ^1.133.3 version: 1.133.3(@tanstack/query-core@5.90.5)(@tanstack/react-query@5.90.5(react@19.2.0))(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-start': specifier: ^1.133.5 - version: 1.133.5(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2) + version: 1.133.6(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2) '@types/node': specifier: ^22.15.30 - version: 22.17.0 + version: 22.18.11 '@types/react': specifier: ^19.2.2 version: 19.2.2 @@ -1529,7 +1562,7 @@ importers: version: 19.2.2(@types/react@19.2.2) '@vitejs/plugin-react': specifier: ^5.0.4 - version: 5.0.4(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.0.4(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) react: specifier: ^19.2.0 version: 19.2.0 @@ -1538,10 +1571,10 @@ importers: version: 19.2.0(react@19.2.0) vite: specifier: ^7.1.10 - version: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(typescript@5.8.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) zod: specifier: ^4.1.12 version: 4.1.12 @@ -1611,8 +1644,8 @@ packages: rollup: optional: true - '@algolia/abtesting@1.1.0': - resolution: {integrity: sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==} + '@algolia/abtesting@1.6.1': + resolution: {integrity: sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ==} engines: {node: '>= 14.0.0'} '@algolia/autocomplete-core@1.17.7': @@ -1635,56 +1668,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.35.0': - resolution: {integrity: sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ==} + '@algolia/client-abtesting@5.40.1': + resolution: {integrity: sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.35.0': - resolution: {integrity: sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw==} + '@algolia/client-analytics@5.40.1': + resolution: {integrity: sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.35.0': - resolution: {integrity: sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w==} + '@algolia/client-common@5.40.1': + resolution: {integrity: sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.35.0': - resolution: {integrity: sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA==} + '@algolia/client-insights@5.40.1': + resolution: {integrity: sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.35.0': - resolution: {integrity: sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA==} + '@algolia/client-personalization@5.40.1': + resolution: {integrity: sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.35.0': - resolution: {integrity: sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w==} + '@algolia/client-query-suggestions@5.40.1': + resolution: {integrity: sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.35.0': - resolution: {integrity: sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg==} + '@algolia/client-search@5.40.1': + resolution: {integrity: sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.35.0': - resolution: {integrity: sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA==} + '@algolia/ingestion@1.40.1': + resolution: {integrity: sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.35.0': - resolution: {integrity: sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw==} + '@algolia/monitoring@1.40.1': + resolution: {integrity: sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.35.0': - resolution: {integrity: sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ==} + '@algolia/recommend@5.40.1': + resolution: {integrity: sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.35.0': - resolution: {integrity: sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw==} + '@algolia/requester-browser-xhr@5.40.1': + resolution: {integrity: sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.35.0': - resolution: {integrity: sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ==} + '@algolia/requester-fetch@5.40.1': + resolution: {integrity: sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.35.0': - resolution: {integrity: sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ==} + '@algolia/requester-node-http@5.40.1': + resolution: {integrity: sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==} engines: {node: '>= 14.0.0'} '@ampproject/remapping@2.3.0': @@ -1722,11 +1755,11 @@ packages: resolution: {integrity: sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular/common@20.1.6': - resolution: {integrity: sha512-VwV6u5y5NQg5u+Z5A50MCJNpxseny9Rv+csZe9zckH0ylqy9tLowbG6L7jrts36Ze2lwqRag0b+wB0TgrvaT0w==} + '@angular/common@20.3.6': + resolution: {integrity: sha512-+gHMuFe0wz4f+vfGZ2q+fSQSYaY7KlN7QdDrFqLnA7H2sythzhXvRbXEtp4DkPjihh9gupXg2MeLh1ROy5AfSw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/core': 20.1.6 + '@angular/core': 20.3.6 rxjs: ^6.5.3 || ^7.4.0 '@angular/core@20.3.6': @@ -1812,23 +1845,17 @@ packages: '@ark/regex@0.0.0': resolution: {integrity: sha512-p4vsWnd/LRGOdGQglbwOguIVhPmCAf5UzquvnDoxqhhPWTP84wWgi1INea8MgJ4SnI2gp37f13oA4Waz9vwNYg==} - '@ark/schema@0.46.0': - resolution: {integrity: sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ==} - '@ark/schema@0.50.0': resolution: {integrity: sha512-hfmP82GltBZDadIOeR3argKNlYYyB2wyzHp0eeAqAOFBQguglMV/S7Ip2q007bRtKxIMLDqFY6tfPie1dtssaQ==} - '@ark/util@0.46.0': - resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==} - '@ark/util@0.50.0': resolution: {integrity: sha512-tIkgIMVRpkfXRQIEf0G2CJryZVtHVrqcWHMDa5QKo0OEEBu0tHkRSIMm4Ln8cd8Bn9TPZtvc/kE2Gma8RESPSg==} '@asamuzakjp/css-color@4.0.5': resolution: {integrity: sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==} - '@asamuzakjp/dom-selector@6.5.7': - resolution: {integrity: sha512-cvdTPsi2qC1c22UppvuVmx/PDwuc6+QQkwt9OnwQD6Uotbh//tb2XDF0OoK2V0F4b8d02LIwNp3BieaDMAhIhA==} + '@asamuzakjp/dom-selector@6.7.0': + resolution: {integrity: sha512-GrYRsKf8oVnPHsA+4dOAnPybrhT3cQ0xykXxjj2DaOni5xOlV1T8/Nqo+iNUO7wh9bs3jViIFsxJKFzDTU/ulQ==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -1845,8 +1872,8 @@ packages: '@astrojs/internal-helpers@0.7.4': resolution: {integrity: sha512-lDA9MqE8WGi7T/t2BMi+EAXhs4Vcvr94Gqx3q15cFEz8oFZMO4/SFBqYr/UcmNlvW+35alowkVj+w9VhLvs5Cw==} - '@astrojs/language-server@2.15.4': - resolution: {integrity: sha512-JivzASqTPR2bao9BWsSc/woPHH7OGSGc9aMxXL4U6egVTqBycB3ZHdBJPuOCVtcGLrzdWTosAqVPz1BVoxE0+A==} + '@astrojs/language-server@2.15.5': + resolution: {integrity: sha512-GizawjrIytYEOv8c/VUDrzGYo5t584w6S0fUAmVK2u11BtAZcbtXWNjGtwFWYLyR27J9pZe4Ipe/qP8mXUfCWQ==} hasBin: true peerDependencies: prettier: ^3.0.0 @@ -1892,18 +1919,10 @@ packages: resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.0': - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} - engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} @@ -1938,12 +1957,6 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.28.3': resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} @@ -1980,19 +1993,10 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.2': - resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.4': resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} @@ -2050,26 +2054,18 @@ packages: resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} '@babel/traverse@7.28.4': resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.0': - resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} @@ -2078,6 +2074,9 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@borewit/text-codec@0.1.1': + resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} + '@braintree/sanitize-url@6.0.4': resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} @@ -2204,10 +2203,6 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -2246,19 +2241,12 @@ packages: resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@deno/shim-deno-test@0.5.0': resolution: {integrity: sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==} '@deno/shim-deno@0.19.2': resolution: {integrity: sha512-q3VTHl44ad8T2Tw2SpeAvghdGOjlnLPDNO2cpOxwMrBE/PVas6geWpbpIgrM+czOCH0yejp0yi8OaTuB+NU40Q==} - '@dependents/detective-less@5.0.1': - resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} - engines: {node: '>=18'} - '@develar/schema-utils@2.6.5': resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} engines: {node: '>= 8.9.0'} @@ -2376,8 +2364,9 @@ packages: '@emmetio/css-abbreviation@2.1.8': resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} - '@emmetio/css-parser@0.4.0': - resolution: {integrity: sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==} + '@emmetio/css-parser@https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660': + resolution: {tarball: https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660} + version: 0.4.0 '@emmetio/html-matcher@1.3.0': resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} @@ -2414,12 +2403,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.10': - resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.11': resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} @@ -2432,36 +2415,12 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.25.9': - resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.10': - resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.11': resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} engines: {node: '>=18'} @@ -2474,36 +2433,12 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.9': - resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.10': - resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.11': resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} engines: {node: '>=18'} @@ -2516,36 +2451,12 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.9': - resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.10': - resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.11': resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} engines: {node: '>=18'} @@ -2558,36 +2469,12 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.25.9': - resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.10': - resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.11': resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} engines: {node: '>=18'} @@ -2600,36 +2487,12 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.25.9': - resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.10': - resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.11': resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} engines: {node: '>=18'} @@ -2642,36 +2505,12 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.9': - resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.10': - resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.11': resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} engines: {node: '>=18'} @@ -2684,36 +2523,12 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.25.9': - resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.10': - resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} engines: {node: '>=18'} @@ -2726,36 +2541,12 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.9': - resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.10': - resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.11': resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} engines: {node: '>=18'} @@ -2768,36 +2559,12 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.25.9': - resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.10': - resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.11': resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} engines: {node: '>=18'} @@ -2810,36 +2577,12 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.25.9': - resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.10': - resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.11': resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} engines: {node: '>=18'} @@ -2852,36 +2595,12 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.25.9': - resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.10': - resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.11': resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} engines: {node: '>=18'} @@ -2894,36 +2613,12 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.25.9': - resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.10': - resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.11': resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} engines: {node: '>=18'} @@ -2936,38 +2631,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} - engines: {node: '>=18'} - cpu: [mips64el] + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.25.9': - resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.10': - resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2978,36 +2649,12 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.9': - resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.10': - resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.11': resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} engines: {node: '>=18'} @@ -3020,36 +2667,12 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.9': - resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.10': - resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.11': resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} engines: {node: '>=18'} @@ -3062,36 +2685,12 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.25.9': - resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.10': - resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.11': resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} engines: {node: '>=18'} @@ -3104,30 +2703,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.25.9': - resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.10': - resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.11': resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} engines: {node: '>=18'} @@ -3140,36 +2715,12 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.25.9': - resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.10': - resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} engines: {node: '>=18'} @@ -3182,30 +2733,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.9': - resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.10': - resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.11': resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} engines: {node: '>=18'} @@ -3218,36 +2745,12 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.25.9': - resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.10': - resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} engines: {node: '>=18'} @@ -3260,60 +2763,18 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.9': - resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.10': - resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/openharmony-arm64@0.25.11': resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.25.9': - resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.10': - resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.11': resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} engines: {node: '>=18'} @@ -3326,36 +2787,12 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.25.9': - resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.10': - resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.11': resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} engines: {node: '>=18'} @@ -3368,36 +2805,12 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.25.9': - resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.10': - resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.11': resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} engines: {node: '>=18'} @@ -3410,36 +2823,12 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.25.9': - resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.10': - resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.11': resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} engines: {node: '>=18'} @@ -3452,24 +2841,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.25.9': - resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@eslint-community/eslint-plugin-eslint-comments@4.5.0': resolution: {integrity: sha512-MAhuTKlr4y/CE3WYX26raZjy+I/kS2PLKSzvfmDCGrBLTFHOYwqROZdr4XwPgXwX3K9rjzMr4pSmUWGnzsUyMg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3535,16 +2906,13 @@ packages: resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/ajv-compiler@4.0.2': - resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==} + '@fastify/ajv-compiler@4.0.4': + resolution: {integrity: sha512-VfPkOSmob5YqH4ZUYW4ESVV5dDNbmtNEKJADFm43Hn/T48RxTZjUIBouadRDb4M/qr8g5bAxxu40/MGxvCPDrw==} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@fastify/busboy@3.2.0': - resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} - '@fastify/cors@11.1.0': resolution: {integrity: sha512-sUw8ed8wP2SouWZTIbA7V2OQtMNpLj2W6qJOYhNdcmINTu6gsxVYXjQiM9mdi8UUDlcoDDJ/W2syPo1WB2QjYA==} @@ -3557,8 +2925,8 @@ packages: '@fastify/formbody@8.0.2': resolution: {integrity: sha512-84v5J2KrkXzjgBpYnaNRPqwgMsmY7ZDjuj0YVuMR3NXCJRCgKEZy/taSP1wUYGn0onfxJpLyRGDLa+NMaDJtnA==} - '@fastify/forwarded@3.0.0': - resolution: {integrity: sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA==} + '@fastify/forwarded@3.0.1': + resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==} '@fastify/merge-json-schemas@0.2.1': resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} @@ -3566,8 +2934,8 @@ packages: '@fastify/middie@9.0.3': resolution: {integrity: sha512-7OYovKXp9UKYeVMcjcFLMcSpoMkmcZmfnG+eAvtdiatN35W7c+r9y1dRfpA+pfFVNuHGGqI3W+vDTmjvcfLcMA==} - '@fastify/proxy-addr@5.0.0': - resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==} + '@fastify/proxy-addr@5.1.0': + resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==} '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} @@ -3612,8 +2980,8 @@ packages: resolution: {integrity: sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w==} engines: {node: '>= 16'} - '@hey-api/openapi-ts@0.80.8': - resolution: {integrity: sha512-mCTHtZRoQiSGywwdA9IeeiB5r0LmyZEe560HpziOUmyEbzL6V4jQ4iiHf0DHWa+Jx8MvTyWbNZR0xKRCLvJUHw==} + '@hey-api/openapi-ts@0.80.18': + resolution: {integrity: sha512-YCcRdw+OmD/WgBk5ZNaSblEb94PfqBKp4gDvfEYtEdRVS76etdgVOD0CPz72Tus+6zeSzGDVlWE8GOfcib0C6g==} engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0} hasBin: true peerDependencies: @@ -3662,8 +3030,8 @@ packages: '@iconify-json/logos@1.2.9': resolution: {integrity: sha512-G6VCdFnwZcrT6Eveq3m43oJfLw/CX8plwFcE+2jgv3fiGB64pTmnU7Yd1MNZ/eA+/Re2iEDhuCfSNOWTHwwK8w==} - '@iconify-json/simple-icons@1.2.47': - resolution: {integrity: sha512-wa/2O7G4sBmwSEWWLh5C+HeY00lVOoWYRKJOYQtk7lAbQrHUReD1ijiGOyTynV1YavxtNueL1CBA1UZmYJfOrQ==} + '@iconify-json/simple-icons@1.2.54': + resolution: {integrity: sha512-OQQYl8yC5j3QklZOYnK31QYe5h47IhyCoxSLd53f0e0nA4dgi8VOZS30SgSAbsecQ+S0xlGJMjXIHTIqZ+ML3w==} '@iconify-json/vscode-icons@1.2.32': resolution: {integrity: sha512-UzZmL6hF02YGu/qEbpskEVnstlNJG+c+0PNzNYTIBf/dXylWHLUVufhOXqAzuGRjkUZ2q7rPpOEwLUPkhkFHUA==} @@ -3909,8 +3277,8 @@ packages: resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} engines: {node: '>=18'} - '@inquirer/checkbox@4.2.0': - resolution: {integrity: sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA==} + '@inquirer/checkbox@4.3.0': + resolution: {integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3936,8 +3304,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@4.2.15': - resolution: {integrity: sha512-wst31XT8DnGOSS4nNJDIklGKnf+8shuauVrWzgKegWUe28zfCftcWZ2vktGdzJgcylWSS2SrDnYUb6alZcwnCQ==} + '@inquirer/editor@4.2.21': + resolution: {integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3945,8 +3313,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@4.0.17': - resolution: {integrity: sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw==} + '@inquirer/expand@4.0.21': + resolution: {integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3954,16 +3322,21 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.13': - resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true '@inquirer/figures@1.0.14': resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} engines: {node: '>=18'} - '@inquirer/input@4.2.1': - resolution: {integrity: sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow==} + '@inquirer/input@4.2.5': + resolution: {integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3971,8 +3344,8 @@ packages: '@types/node': optional: true - '@inquirer/number@3.0.17': - resolution: {integrity: sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg==} + '@inquirer/number@3.0.21': + resolution: {integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3980,8 +3353,8 @@ packages: '@types/node': optional: true - '@inquirer/password@4.0.17': - resolution: {integrity: sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA==} + '@inquirer/password@4.0.21': + resolution: {integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -4007,8 +3380,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@4.1.5': - resolution: {integrity: sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA==} + '@inquirer/rawlist@4.1.9': + resolution: {integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -4016,8 +3389,8 @@ packages: '@types/node': optional: true - '@inquirer/search@3.1.0': - resolution: {integrity: sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q==} + '@inquirer/search@3.2.0': + resolution: {integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -4025,8 +3398,8 @@ packages: '@types/node': optional: true - '@inquirer/select@4.3.1': - resolution: {integrity: sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA==} + '@inquirer/select@4.4.0': + resolution: {integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -4049,9 +3422,6 @@ packages: '@internationalized/number@3.6.5': resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} - '@ioredis/commands@1.3.0': - resolution: {integrity: sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==} - '@ioredis/commands@1.4.0': resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==} @@ -4075,9 +3445,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -4088,18 +3455,12 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.10': - resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} - '@jridgewell/source-map@0.3.11': resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} @@ -4172,116 +3533,119 @@ packages: '@mermaid-js/mermaid-mindmap@9.3.0': resolution: {integrity: sha512-IhtYSVBBRYviH1Ehu8gk69pMDF8DSRqXBRDMWrEfHoaMruHeaP2DXA3PBnuwsMaCdPQhlUUcy/7DBLAEIXvCAw==} - '@mermaid-js/parser@0.6.2': - resolution: {integrity: sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ==} + '@mermaid-js/parser@0.6.3': + resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==} '@mswjs/interceptors@0.39.8': resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} engines: {node: '>=18'} - '@napi-rs/nice-android-arm-eabi@1.0.4': - resolution: {integrity: sha512-OZFMYUkih4g6HCKTjqJHhMUlgvPiDuSLZPbPBWHLjKmFTv74COzRlq/gwHtmEVaR39mJQ6ZyttDl2HNMUbLVoA==} + '@napi-rs/nice-android-arm-eabi@1.1.1': + resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} engines: {node: '>= 10'} cpu: [arm] os: [android] - '@napi-rs/nice-android-arm64@1.0.4': - resolution: {integrity: sha512-k8u7cjeA64vQWXZcRrPbmwjH8K09CBnNaPnI9L1D5N6iMPL3XYQzLcN6WwQonfcqCDv5OCY3IqX89goPTV4KMw==} + '@napi-rs/nice-android-arm64@1.1.1': + resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@napi-rs/nice-darwin-arm64@1.0.4': - resolution: {integrity: sha512-GsLdQvUcuVzoyzmtjsThnpaVEizAqH5yPHgnsBmq3JdVoVZHELFo7PuJEdfOH1DOHi2mPwB9sCJEstAYf3XCJA==} + '@napi-rs/nice-darwin-arm64@1.1.1': + resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@napi-rs/nice-darwin-x64@1.0.4': - resolution: {integrity: sha512-1y3gyT3e5zUY5SxRl3QDtJiWVsbkmhtUHIYwdWWIQ3Ia+byd/IHIEpqAxOGW1nhhnIKfTCuxBadHQb+yZASVoA==} + '@napi-rs/nice-darwin-x64@1.1.1': + resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@napi-rs/nice-freebsd-x64@1.0.4': - resolution: {integrity: sha512-06oXzESPRdXUuzS8n2hGwhM2HACnDfl3bfUaSqLGImM8TA33pzDXgGL0e3If8CcFWT98aHows5Lk7xnqYNGFeA==} + '@napi-rs/nice-freebsd-x64@1.1.1': + resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@napi-rs/nice-linux-arm-gnueabihf@1.0.4': - resolution: {integrity: sha512-CgklZ6g8WL4+EgVVkxkEvvsi2DSLf9QIloxWO0fvQyQBp6VguUSX3eHLeRpqwW8cRm2Hv/Q1+PduNk7VK37VZw==} + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@napi-rs/nice-linux-arm64-gnu@1.0.4': - resolution: {integrity: sha512-wdAJ7lgjhAlsANUCv0zi6msRwq+D4KDgU+GCCHssSxWmAERZa2KZXO0H2xdmoJ/0i03i6YfK/sWaZgUAyuW2oQ==} + '@napi-rs/nice-linux-arm64-gnu@1.1.1': + resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/nice-linux-arm64-musl@1.0.4': - resolution: {integrity: sha512-4b1KYG+sriufhFrpUS9uNOEYYJqSfcbnwGx6uGX7JjrH8tELG90cOpCawz5THNIwlS3DhLgnCOcn0+4p6z26QA==} + '@napi-rs/nice-linux-arm64-musl@1.1.1': + resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@napi-rs/nice-linux-ppc64-gnu@1.0.4': - resolution: {integrity: sha512-iaf3vMRgr23oe1PUaKpxaH3DS0IMN0+N9iEiWVwYPm/U15vZFYdqVegGfN2PzrZLUl5lc8ZxbmEKDfuqslhAMA==} + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] - '@napi-rs/nice-linux-riscv64-gnu@1.0.4': - resolution: {integrity: sha512-UXoREY6Yw6rHrGuTwQgBxpfjK34t6mTjibE9/cXbefL9AuUCJ9gEgwNKZiONuR5QGswChqo9cnthjdKkYyAdDg==} + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - '@napi-rs/nice-linux-s390x-gnu@1.0.4': - resolution: {integrity: sha512-eFbgYCRPmsqbYPAlLYU5hYTNbogmIDUvknilehHsFhCH1+0/kN87lP+XaLT0Yeq4V/rpwChSd9vlz4muzFArtw==} + '@napi-rs/nice-linux-s390x-gnu@1.1.1': + resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] - '@napi-rs/nice-linux-x64-gnu@1.0.4': - resolution: {integrity: sha512-4T3E6uTCwWT6IPnwuPcWVz3oHxvEp/qbrCxZhsgzwTUBEwu78EGNXGdHfKJQt3soth89MLqZJw+Zzvnhrsg1mQ==} + '@napi-rs/nice-linux-x64-gnu@1.1.1': + resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/nice-linux-x64-musl@1.0.4': - resolution: {integrity: sha512-NtbBkAeyBPLvCBkWtwkKXkNSn677eaT0cX3tygq+2qVv71TmHgX4gkX6o9BXjlPzdgPGwrUudavCYPT9tzkEqQ==} + '@napi-rs/nice-linux-x64-musl@1.1.1': + resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@napi-rs/nice-win32-arm64-msvc@1.0.4': - resolution: {integrity: sha512-vubOe3i+YtSJGEk/++73y+TIxbuVHi+W8ZzrRm2eETCjCRwNlgbfToQZ85dSA+4iBB/NJRGNp+O4hfdbbttZWA==} + '@napi-rs/nice-openharmony-arm64@1.1.1': + resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [openharmony] + + '@napi-rs/nice-win32-arm64-msvc@1.1.1': + resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@napi-rs/nice-win32-ia32-msvc@1.0.4': - resolution: {integrity: sha512-BMOVrUDZeg1RNRKVlh4eyLv5djAAVLiSddfpuuQ47EFjBcklg0NUeKMFKNrKQR4UnSn4HAiACLD7YK7koskwmg==} + '@napi-rs/nice-win32-ia32-msvc@1.1.1': + resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@napi-rs/nice-win32-x64-msvc@1.0.4': - resolution: {integrity: sha512-kCNk6HcRZquhw/whwh4rHsdPyOSCQCgnVDVik+Y9cuSVTDy3frpiCJTScJqPPS872h4JgZKkr/+CwcwttNEo9Q==} + '@napi-rs/nice-win32-x64-msvc@1.1.1': + resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@napi-rs/nice@1.0.4': - resolution: {integrity: sha512-Sqih1YARrmMoHlXGgI9JrrgkzxcaaEso0AH+Y7j8NHonUs+xe4iDsgC3IBIDNdzEewbNpccNN6hip+b5vmyRLw==} + '@napi-rs/nice@1.1.1': + resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.0.6': - resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} - '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} @@ -4366,42 +3730,6 @@ packages: '@nestjs/platform-express': optional: true - '@netlify/binary-info@1.0.0': - resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} - - '@netlify/blobs@9.1.2': - resolution: {integrity: sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw==} - engines: {node: ^14.16.0 || >=16.0.0} - - '@netlify/dev-utils@2.2.0': - resolution: {integrity: sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==} - engines: {node: ^14.16.0 || >=16.0.0} - - '@netlify/functions@3.1.10': - resolution: {integrity: sha512-sI93kcJ2cUoMgDRPnrEm0lZhuiDVDqM6ngS/UbHTApIH3+eg3yZM5p/0SDFQQq9Bad0/srFmgBmTdXushzY5kg==} - engines: {node: '>=14.0.0'} - - '@netlify/open-api@2.37.0': - resolution: {integrity: sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==} - engines: {node: '>=14.8.0'} - - '@netlify/runtime-utils@1.3.1': - resolution: {integrity: sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==} - engines: {node: '>=16.0.0'} - - '@netlify/serverless-functions-api@1.41.2': - resolution: {integrity: sha512-pfCkH50JV06SGMNsNPjn8t17hOcId4fA881HeYQgMBOrewjsw4csaYgHEnCxCEu24Y5x75E2ULbFpqm9CvRCqw==} - engines: {node: '>=18.0.0'} - - '@netlify/serverless-functions-api@2.1.3': - resolution: {integrity: sha512-bNlN/hpND8xFQzpjyKxm6vJayD+bPBlOvs4lWihE7WULrphuH1UuFsoVE5386bNNGH8Rs1IH01AFsl7ALQgOlQ==} - engines: {node: '>=18.0.0'} - - '@netlify/zip-it-and-ship-it@12.2.1': - resolution: {integrity: sha512-zAr+8Tg80y/sUbhdUkZsq4Uy1IMzkSB6H/sKRMrDQ2NJx4uPgf5X5jMdg9g2FljNcxzpfJwc1Gg4OXQrjD0Z4A==} - engines: {node: '>=18.14.0'} - hasBin: true - '@next/env@15.5.6': resolution: {integrity: sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==} @@ -4478,8 +3806,8 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This functionality has been moved to @npmcli/fs - '@nuxt/cli@3.29.2': - resolution: {integrity: sha512-emUswscW990anBIQLxb1tPviB6S12nssEK73fHm+79D1Ndqa3lc7M/APqp6zShNKXvf7e8Q0UWX4SceImuApJA==} + '@nuxt/cli@3.29.3': + resolution: {integrity: sha512-48GYmH4SyzR5pqd02UXVzBfrvEGaurPKMjSWxlHgqnpI5buwOYCvH+OqvHOmvnLrDP2bxR9hbDod/UIphOjMhg==} engines: {node: ^16.10.0 || >=18.0.0} hasBin: true @@ -5791,17 +5119,14 @@ packages: '@rolldown/pluginutils@1.0.0-beta.29': resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} - '@rolldown/pluginutils@1.0.0-beta.35': - resolution: {integrity: sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==} - '@rolldown/pluginutils@1.0.0-beta.38': resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} - '@rolldown/pluginutils@1.0.0-beta.42': - resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==} + '@rolldown/pluginutils@1.0.0-beta.43': + resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -5812,8 +5137,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@28.0.6': - resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==} + '@rollup/plugin-commonjs@28.0.8': + resolution: {integrity: sha512-o1Ug9PxYsF61R7/NXO/GgMZZproLd/WH2XA53Tp9ppf6bU1lMlTtC/gUM6zM3mesi2E0rypk+PNtVrELREyWEQ==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -5839,8 +5164,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@16.0.1': - resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} + '@rollup/plugin-node-resolve@16.0.3': + resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -5848,20 +5173,11 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@16.0.2': - resolution: {integrity: sha512-tCtHJ2BlhSoK4cCs25NMXfV7EALKr0jyasmqVCq3y9cBrKdmJhtsy1iTz36Xhk/O+pDJbzawxF4K6ZblqCnITQ==} + '@rollup/plugin-replace@6.0.2': + resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-replace@6.0.2': - resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true @@ -5884,15 +5200,6 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -5902,321 +5209,111 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.46.2': - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm-eabi@4.52.0': - resolution: {integrity: sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.52.4': resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.2': - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-android-arm64@4.52.0': - resolution: {integrity: sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.52.4': resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.2': - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-arm64@4.52.0': - resolution: {integrity: sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.52.4': resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.2': - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.52.0': - resolution: {integrity: sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.52.4': resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.2': - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-arm64@4.52.0': - resolution: {integrity: sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.52.4': resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.2': - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.52.0': - resolution: {integrity: sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.4': resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-gnueabihf@4.52.0': - resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.2': - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.52.0': - resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.4': resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.2': - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.52.0': - resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.4': resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.2': - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.52.0': - resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.4': resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.0': - resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} - cpu: [loong64] - os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.4': resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.46.2': - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.52.0': - resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.4': resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.2': - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.52.0': - resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.4': resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.2': - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.52.0': - resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.4': resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.2': - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.52.0': - resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.4': resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.2': - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.52.0': - resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.4': resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.2': - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.52.0': - resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.4': resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.0': - resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} - cpu: [arm64] - os: [openharmony] - '@rollup/rollup-openharmony-arm64@4.52.4': resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.46.2': - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-arm64-msvc@4.52.0': - resolution: {integrity: sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.52.4': resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.2': - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.52.0': - resolution: {integrity: sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.4': resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.0': - resolution: {integrity: sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.4': resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.2': - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.52.0': - resolution: {integrity: sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.4': resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} cpu: [x64] @@ -6436,10 +5533,6 @@ packages: resolution: {integrity: sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==} engines: {node: '>=18'} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -6606,8 +5699,8 @@ packages: '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - '@swc/wasm@1.13.3': - resolution: {integrity: sha512-ZhQfKxqFvrifksN8znSzes/oyfr8Q4mpKP0T8tYS/AaUzm/7v5OK22VlcTHR1gXHEtp16dlR8w+vYTFDCaUmnw==} + '@swc/wasm@1.13.20': + resolution: {integrity: sha512-NJzN+QrbdwXeVTfTYiHkqv13zleOCQA52NXBOrwKvjxWJQecRqakjUhUP2z8lqs7eWVthko4Cilqs+VeBrwo3Q==} '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} @@ -6692,15 +5785,15 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-server@1.133.5': - resolution: {integrity: sha512-GKKcJqgH0WR/C0eCHsI7ryEZd8oB4l7vBPT64wulqxzekDzmS1+Oi+Ym5Dws/G0uYR2nr89Io2B1RzH3H5dDuA==} + '@tanstack/react-start-server@1.133.6': + resolution: {integrity: sha512-NFs6su+9Lw88Te2O5KpbTf+KVDuf9moinpsAQIEOktMCVYY56CFQFE52YFsRTDKExZOtDOzdtqlDSZZLGHngfQ==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start@1.133.5': - resolution: {integrity: sha512-5YACYtoh1S6YhSSfi1X30b5xYZ0BVx1lYMPn40hTZovIDiKYHhvA2GsXfLociHXT9F44gpRLz6vsxm5gG3dprQ==} + '@tanstack/react-start@1.133.6': + resolution: {integrity: sha512-LDX7qLRiqTDdGm5MfrAO7aZvC41JCd+NPA+dP7hWppfkCedTUG5RykbzYPmEgGXEmN4oVXr28tebLAjdGPOBOg==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -6782,14 +5875,14 @@ packages: resolution: {integrity: sha512-zwsJMlZF5moYfejDQUyCd7Jy6KI1ZWFcQuPy+S/5sMtUph2XxWg172mbnr4fUJ1JfeuKUDa+pFg8feQWWZrfcg==} engines: {node: '>=22.12.0'} - '@tanstack/start-plugin-core@1.133.5': - resolution: {integrity: sha512-7cAYMOT941vABA/GQqf3id5doQeoNU2jXIYX3vAhWHZCfD8BuCJBhU6ZncgMTccRqR+YrSUUu9qF4HKB6pX8UA==} + '@tanstack/start-plugin-core@1.133.6': + resolution: {integrity: sha512-ViYsCaHsPAa4od+8sBJyD9z4ftun69SAFXn9yHIrye8j7r71kytAgpwtCdNhiT6cQNlAo8V9NNawI7WyIH0Zag==} engines: {node: '>=22.12.0'} peerDependencies: vite: '>=7.0.0' - '@tanstack/start-server-core@1.133.5': - resolution: {integrity: sha512-8Q8zMxPIcC0qy1HMENVqiKXoS2KorF6pQ9TlKXwdn7MjhKcffRRX3xJiEvRI/62recGhrMDI8C/kNeRCd2tsnA==} + '@tanstack/start-server-core@1.133.6': + resolution: {integrity: sha512-RV3OQSSONSpSw+xhusQUfS91RyPViMNGGeE/oyISvxeTvOX+t1KQLu2a7/7QnGdMNm3iIBhhpcV1ddRUgZSAuQ==} engines: {node: '>=22.12.0'} '@tanstack/start-storage-context@1.133.3': @@ -7071,8 +6164,8 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/express-serve-static-core@5.0.7': - resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} + '@types/express-serve-static-core@5.1.0': + resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==} '@types/express@5.0.3': resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} @@ -7146,24 +6239,9 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - '@types/node@22.17.0': - resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} - '@types/node@22.18.11': resolution: {integrity: sha512-Gd33J2XIrXurb+eT2ktze3rJAfAp9ZNjlBdh4SVgyrKEOADwCbdUDaK7QgJno8Ue4kcajscsKqu6n8OBG3hhCQ==} - '@types/node@22.18.6': - resolution: {integrity: sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==} - - '@types/node@24.7.1': - resolution: {integrity: sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q==} - - '@types/node@24.8.1': - resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/oracledb@6.5.2': resolution: {integrity: sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==} @@ -7203,8 +6281,11 @@ packages: '@types/send@0.17.5': resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} - '@types/serve-static@1.15.8': - resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + '@types/send@1.2.0': + resolution: {integrity: sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==} + + '@types/serve-static@1.15.9': + resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==} '@types/shimmer@1.2.0': resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} @@ -7221,9 +6302,6 @@ packages: '@types/tedious@4.0.14': resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -7343,18 +6421,16 @@ packages: peerDependencies: vue: '>=3.5.18' + '@upstash/redis@1.35.6': + resolution: {integrity: sha512-aSEIGJgJ7XUfTYvhQcQbq835re7e/BXjs8Janq6Pvr6LlmTZnyqwT97RziZLO/8AVUL037RLXqqiQC6kCt+5pA==} + '@valibot/to-json-schema@1.3.0': resolution: {integrity: sha512-82Vv6x7sOYhv5YmTRgSppSqj1nn2pMCk5BqCMGWYp0V/fq+qirrbGncqZAtZ09/lrO40ne/7z8ejwE728aVreg==} peerDependencies: valibot: ^1.1.0 - '@vercel/nft@0.29.4': - resolution: {integrity: sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==} - engines: {node: '>=18'} - hasBin: true - - '@vercel/nft@0.30.2': - resolution: {integrity: sha512-pquXF3XZFg/T3TBor08rUhIGgOhdSilbn7WQLVP/aVSSO+25Rs4H/m3nxNDQ2x3znX7Z3yYjryN8xaLwypcwQg==} + '@vercel/nft@0.30.3': + resolution: {integrity: sha512-UEq+eF0ocEf9WQCV1gktxKhha36KDs7jln5qii6UpPf5clMqDc0p3E7d9l2Smx0i9Pm1qpq4S4lLfNl97bbv6w==} engines: {node: '>=18'} hasBin: true @@ -7382,12 +6458,6 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitejs/plugin-react@5.0.3': - resolution: {integrity: sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitejs/plugin-react@5.0.4': resolution: {integrity: sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -7470,31 +6540,25 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@volar/kit@2.4.22': - resolution: {integrity: sha512-o2LhNb2PLCUJ6v2XSqN7m+pJt+SE0QW1U2E52jnS8yZ03ohcGOOuFJdH1VlZgCBk0RlwO4xp0OaDoTtyTvMTrw==} + '@volar/kit@2.4.23': + resolution: {integrity: sha512-YuUIzo9zwC2IkN7FStIcVl1YS9w5vkSFEZfPvnu0IbIMaR9WHhc9ZxvlT+91vrcSoRY469H2jwbrGqpG7m1KaQ==} peerDependencies: typescript: ~5.8.3 - '@volar/language-core@2.4.22': - resolution: {integrity: sha512-gp4M7Di5KgNyIyO903wTClYBavRt6UyFNpc5LWfyZr1lBsTUY+QrVZfmbNF2aCyfklBOVk9YC4p+zkwoyT7ECg==} - '@volar/language-core@2.4.23': resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} - '@volar/language-server@2.4.22': - resolution: {integrity: sha512-THIGWcQsEJKZU7SjVKPcy4MIamX4qpusKErj33ru7fi2WcD+FmFjYY/F2LIk/C15xEcb34JT1uZBlbO2dfzYSQ==} + '@volar/language-server@2.4.23': + resolution: {integrity: sha512-k0iO+tybMGMMyrNdWOxgFkP0XJTdbH0w+WZlM54RzJU3WZSjHEupwL30klpM7ep4FO6qyQa03h+VcGHD4Q8gEg==} - '@volar/language-service@2.4.22': - resolution: {integrity: sha512-8TmvOf/6uqaJMBVQIP9kgVpRzMrqLI3nCmWuSIPAldlmwjZTOiN17GA4AL4sTFJUg61xCSyMQWbProNFQ88yew==} - - '@volar/source-map@2.4.22': - resolution: {integrity: sha512-L2nVr/1vei0xKRgO2tYVXtJYd09HTRjaZi418e85Q+QdbbqA8h7bBjfNyPPSsjnrOO4l4kaAo78c8SQUAdHvgA==} + '@volar/language-service@2.4.23': + resolution: {integrity: sha512-h5mU9DZ/6u3LCB9xomJtorNG6awBNnk9VuCioGsp6UtFiM8amvS5FcsaC3dabdL9zO0z+Gq9vIEMb/5u9K6jGQ==} '@volar/source-map@2.4.23': resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} - '@volar/typescript@2.4.22': - resolution: {integrity: sha512-6ZczlJW1/GWTrNnkmZxJp4qyBt/SGVlcTuCWpI5zLrdPdCZsj66Aff9ZsfFaT3TyjG8zVYgBMYPuCm/eRkpcpQ==} + '@volar/typescript@2.4.23': + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} '@vscode/emmet-helper@2.11.0': resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} @@ -7539,17 +6603,14 @@ packages: '@vue/compiler-ssr@3.5.22': resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} - '@vue/compiler-vue2@2.7.16': - resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} '@vue/devtools-api@7.7.7': resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} - '@vue/devtools-api@8.0.2': - resolution: {integrity: sha512-RdwsaYoSTumwZ7XOt5yIPP1/T4O0bTs+c5XaEjmUB6f9x+FvDSL9AekxW1vuhK1lmA9TfewpXVt2r5LIax3LHw==} + '@vue/devtools-api@8.0.3': + resolution: {integrity: sha512-YxZE7xNvvfq5XmjJh1ml+CzVNrRjuZYCuT5Xjj0u9RlXU7za/MRuZDUXcKfp0j7IvYkDut49vlKqbiQ1xhXP2w==} '@vue/devtools-core@7.7.7': resolution: {integrity: sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==} @@ -7559,22 +6620,14 @@ packages: '@vue/devtools-kit@7.7.7': resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} - '@vue/devtools-kit@8.0.2': - resolution: {integrity: sha512-yjZKdEmhJzQqbOh4KFBfTOQjDPMrjjBNCnHBvnTGJX+YLAqoUtY2J+cg7BE+EA8KUv8LprECq04ts75wCoIGWA==} + '@vue/devtools-kit@8.0.3': + resolution: {integrity: sha512-UF4YUOVGdfzXLCv5pMg2DxocB8dvXz278fpgEE+nJ/DRALQGAva7sj9ton0VWZ9hmXw+SV8yKMrxP2MpMhq9Wg==} '@vue/devtools-shared@7.7.7': resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} - '@vue/devtools-shared@8.0.2': - resolution: {integrity: sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw==} - - '@vue/language-core@3.0.7': - resolution: {integrity: sha512-0sqqyqJ0Gn33JH3TdIsZLCZZ8Gr4kwlg8iYOnOrDDkJKSjFurlQY/bEFQx5zs7SX2C/bjMkmPYq/NiyY1fTOkw==} - peerDependencies: - typescript: ~5.8.3 - peerDependenciesMeta: - typescript: - optional: true + '@vue/devtools-shared@8.0.3': + resolution: {integrity: sha512-s/QNll7TlpbADFZrPVsaUNPCOF8NvQgtgmmB7Tip6pLf/HcOvBTly0lfLQ0Eylu9FQ4OqBhFpLyBgwykiSf8zw==} '@vue/language-core@3.1.1': resolution: {integrity: sha512-qjMY3Q+hUCjdH+jLrQapqgpsJ0rd/2mAY02lZoHG3VFJZZZKLjAlV+Oo9QmWIT4jh8+Rx8RUGUi++d7T9Wb6Mw==} @@ -7598,9 +6651,6 @@ packages: peerDependencies: vue: 3.5.22 - '@vue/shared@3.5.18': - resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} - '@vue/shared@3.5.22': resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} @@ -7775,26 +6825,6 @@ packages: '@webext-core/match-patterns@1.0.3': resolution: {integrity: sha512-NY39ACqCxdKBmHgw361M9pfJma8e4AZo20w9AY+5ZjIj1W2dvXC8J31G5fjfOGbulW9w4WKpT8fPooi0mLkn9A==} - '@whatwg-node/disposablestack@0.0.6': - resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/fetch@0.10.10': - resolution: {integrity: sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/node-fetch@0.7.25': - resolution: {integrity: sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/promise-helpers@1.3.2': - resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} - engines: {node: '>=16.0.0'} - - '@whatwg-node/server@0.9.71': - resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==} - engines: {node: '>=18.0.0'} - '@wxt-dev/browser@0.1.4': resolution: {integrity: sha512-9x03I15i79XU8qYwjv4le0K2HdMl/Yga2wUBSoUbcrCnamv8P3nvuYxREQ9C5QY/qPAfeEVdAtaTrS3KWak71g==} @@ -7846,8 +6876,8 @@ packages: resolution: {integrity: sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==} engines: {node: ^14.14.0 || >=16.0.0} - '@xmldom/xmldom@0.8.10': - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + '@xmldom/xmldom@0.8.11': + resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} engines: {node: '>=10.0.0'} '@xtuc/ieee754@1.2.0': @@ -7987,15 +7017,12 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - algoliasearch@5.35.0: - resolution: {integrity: sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==} + algoliasearch@5.40.1: + resolution: {integrity: sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==} engines: {node: '>= 14.0.0'} - alien-signals@2.0.7: - resolution: {integrity: sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==} - - alien-signals@3.0.0: - resolution: {integrity: sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==} + alien-signals@3.0.1: + resolution: {integrity: sha512-ec02Wv5iOg7yG979PH9ykv5KN/KHznOxMlKy/Jr8lnBo3T94d4MUGo7FVdM8B2fM0e94twzEcWCyWzfIyeV19g==} ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -8004,10 +7031,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-escapes@7.1.1: resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} engines: {node: '>=18'} @@ -8098,9 +7121,6 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - arktype@2.1.20: - resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} - arktype@2.1.23: resolution: {integrity: sha512-tyxNWX6xJVMb2EPJJ3OjgQS1G/vIeQRrZuY4DeBNQmh8n7geS+czgbauQWB6Pr+RXiOO8ChEey44XdmxsqGmfQ==} @@ -8133,16 +7153,12 @@ packages: resolution: {integrity: sha512-TH+b3Lv6pUjy/Nu0m6A2JULtdzLpmqF9x1Dhj00ZoEiML8qvVA9j1flkzTKNYgdEhWrjDwtWNpyyCUbfQe514g==} engines: {node: '>=20.19.0'} - ast-module-types@6.0.1: - resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} - engines: {node: '>=18'} - ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.4: - resolution: {integrity: sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==} + ast-v8-to-istanbul@0.3.7: + resolution: {integrity: sha512-kr1Hy6YRZBkGQSb6puP+D6FQ59Cx4m0siYhAxygMCAgadiWQ6oxAxQXHOMvJx67SJ63jRoVIIg5eXzUbbct1ww==} ast-walker-scope@0.8.3: resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} @@ -8233,8 +7249,13 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.7.0: - resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} + bare-events@2.8.0: + resolution: {integrity: sha512-AOhh6Bg5QmFIXdViHbMc2tLDsBIRxdkIaIddPslJF9Z5De3APBScuqGP2uThXnIpqFrgoxMNC6km7uXNIMLHXA==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} @@ -8274,9 +7295,6 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - birpc@2.5.0: - resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} - birpc@2.6.1: resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} @@ -8320,11 +7338,6 @@ packages: brotli@1.3.3: resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.26.3: resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -8353,10 +7366,6 @@ packages: builder-util@26.0.11: resolution: {integrity: sha512-xNjXfsldUEe153h1DraD0XvDOpqGR0L5eKFkdReB7eFW5HqysDZFfly4rckda6y9dF39N3pkPlOblcfHKGw+uA==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - builtin-modules@5.0.0: resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} engines: {node: '>=18.20'} @@ -8399,16 +7408,8 @@ packages: magicast: optional: true - c12@3.2.0: - resolution: {integrity: sha512-ixkEtbYafL56E6HiFuonMm1ZjoKtIo7TH68/uiEq4DAwv9NcUX2nJ95F8TrbMeNjqIkZpruo3ojXQJ+MGG5gcQ==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - - c12@3.3.0: - resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==} + c12@3.3.1: + resolution: {integrity: sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==} peerDependencies: magicast: ^0.3.5 peerDependenciesMeta: @@ -8450,9 +7451,6 @@ packages: call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - callsite@1.0.0: - resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -8470,8 +7468,8 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.2.1: - resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} chalk@4.1.2: @@ -8503,8 +7501,8 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} @@ -8560,10 +7558,6 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} - engines: {node: '>=8'} - ci-info@4.3.1: resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} @@ -8667,16 +7661,10 @@ packages: codemirror@6.0.2: resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -8687,9 +7675,6 @@ packages: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} @@ -8700,9 +7685,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -8718,10 +7700,6 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - commander@13.0.0: resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==} engines: {node: '>=18'} @@ -8772,9 +7750,6 @@ packages: common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -8878,10 +7853,6 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} - copy-file@11.0.0: - resolution: {integrity: sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==} - engines: {node: '>=18'} - core-js-compat@3.46.0: resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} @@ -8928,10 +7899,6 @@ packages: crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} - cron-parser@4.9.0: - resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} - engines: {node: '>=12.0.0'} - croner@9.1.0: resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==} engines: {node: '>=18.0'} @@ -8954,12 +7921,6 @@ packages: srvx: optional: true - css-declaration-sorter@7.2.0: - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 - css-declaration-sorter@7.3.0: resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==} engines: {node: ^14 || ^16 || >=18} @@ -8989,12 +7950,6 @@ packages: engines: {node: '>=4'} hasBin: true - cssnano-preset-default@7.0.8: - resolution: {integrity: sha512-d+3R2qwrUV3g4LEMOjnndognKirBZISylDZAF/TPeCWVjEwlXS2e4eN4ICkoobRe7pD3H6lltinKVyS1AJhdjQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.32 - cssnano-preset-default@7.0.9: resolution: {integrity: sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} @@ -9007,12 +7962,6 @@ packages: peerDependencies: postcss: ^8.4.32 - cssnano@7.1.0: - resolution: {integrity: sha512-Pu3rlKkd0ZtlCUzBrKL1Z4YmhKppjC1H9jo7u1o4qaKqyhvixFgu5qLyNIAOjSTg9DjVPtUqdROq2EfpVMEe+w==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.32 - cssnano@7.1.1: resolution: {integrity: sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} @@ -9197,10 +8146,6 @@ packages: dagre-d3-es@7.0.11: resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - data-urls@6.0.0: resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} engines: {node: '>=20'} @@ -9211,29 +8156,6 @@ packages: dayjs@1.11.18: resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} - db0@0.3.2: - resolution: {integrity: sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==} - peerDependencies: - '@electric-sql/pglite': '*' - '@libsql/client': '*' - better-sqlite3: '*' - drizzle-orm: '*' - mysql2: '*' - sqlite3: '*' - peerDependenciesMeta: - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - better-sqlite3: - optional: true - drizzle-orm: - optional: true - mysql2: - optional: true - sqlite3: - optional: true - db0@0.3.4: resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==} peerDependencies: @@ -9257,9 +8179,6 @@ packages: sqlite3: optional: true - de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -9280,15 +8199,6 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -9298,9 +8208,6 @@ packages: supports-color: optional: true - decache@4.6.2: - resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} - decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -9402,10 +8309,6 @@ packages: engines: {node: '>=0.10'} hasBin: true - detect-libc@2.1.0: - resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} - engines: {node: '>=8'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -9413,56 +8316,10 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - detective-amd@6.0.1: - resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} - engines: {node: '>=18'} - hasBin: true - - detective-cjs@6.0.1: - resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==} - engines: {node: '>=18'} - - detective-es6@5.0.1: - resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} - engines: {node: '>=18'} - - detective-postcss@7.0.1: - resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} - engines: {node: ^14.0.0 || >=16.0.0} - peerDependencies: - postcss: ^8.4.47 - - detective-sass@6.0.1: - resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} - engines: {node: '>=18'} - - detective-scss@5.0.1: - resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} - engines: {node: '>=18'} - - detective-stylus@5.0.1: - resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} - engines: {node: '>=18'} - - detective-typescript@14.0.0: - resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} - engines: {node: '>=18'} - peerDependencies: - typescript: ~5.8.3 - - detective-vue2@2.2.0: - resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} - engines: {node: '>=18'} - peerDependencies: - typescript: ~5.8.3 - deterministic-object-hash@2.0.2: resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} engines: {node: '>=18'} - devalue@5.3.2: - resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==} - devalue@5.4.1: resolution: {integrity: sha512-YtoaOfsqjbZQKGIMRYDWKjUmSB4VJ/RElB+bXZawQAQYAo4xu08GKTMVlsZDTF6R2MbAgjcAQRPI5eIyRAT2OQ==} @@ -9522,8 +8379,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.2.7: - resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} + dompurify@3.3.0: + resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} @@ -9548,10 +8405,6 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.2.2: - resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==} - engines: {node: '>=12'} - dotenv@17.2.3: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} @@ -9594,9 +8447,6 @@ packages: electron-publish@26.0.11: resolution: {integrity: sha512-a8QRH0rAPIWH9WyyS5LbNvW9Ark6qe63/LqDB7vu2JXYpi0Gma5Q60Dh4tmTqhOBQt0xsrzD8qE7C+D7j+B24A==} - electron-to-chromium@1.5.198: - resolution: {integrity: sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==} - electron-to-chromium@1.5.237: resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} @@ -9639,9 +8489,6 @@ packages: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -9675,10 +8522,6 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -9725,11 +8568,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.10: - resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.11: resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} @@ -9740,21 +8578,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.25.9: - resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} - engines: {node: '>=18'} - hasBin: true - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -9778,11 +8601,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - eslint-compat-utils@0.5.1: resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} engines: {node: '>=12'} @@ -10096,10 +8914,6 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -10128,8 +8942,8 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-json-stringify@6.0.1: - resolution: {integrity: sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==} + fast-json-stringify@6.1.1: + resolution: {integrity: sha512-DbgptncYEXZqDUOEl4krff4mUiVrTZZVI7BBrQR/T3BqMj/eM1flTC1Uk2uUoLcWCxjT95xKulV/Lc6hhOZsBQ==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -10150,8 +8964,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastify-plugin@5.0.1: - resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} + fastify-plugin@5.1.0: + resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} fastify@5.4.0: resolution: {integrity: sha512-I4dVlUe+WNQAhKSyv15w+dwUh2EPiEl4X2lGYMmNSgF83WzTMAPKGdWEv5tPsCQOb+SOZwz8Vlta2vF+OeDgRw==} @@ -10180,17 +8994,10 @@ packages: picomatch: optional: true - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - fenceparser@1.1.1: resolution: {integrity: sha512-VdkTsK7GWLT0VWMK5S5WTAPn61wJ98WPFwJiRHumhg4ESNUO/tnkU8bzzzc62o6Uk1SVhuZFLnakmDA4SGV7wA==} engines: {node: '>=12'} - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - fetchdts@0.1.7: resolution: {integrity: sha512-YoZjBdafyLIop9lSxXVI33oLD5kN31q4Td+CasofLLYeLXRFeOsuOw0Uo+XNRi9PZlbfdlN2GmRtm4tCEQ9/KA==} @@ -10239,10 +9046,6 @@ packages: resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} engines: {node: '>=14.16'} - filter-obj@6.1.0: - resolution: {integrity: sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==} - engines: {node: '>=18'} - finalhandler@2.1.0: resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} engines: {node: '>= 0.8'} @@ -10259,10 +9062,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - find-versions@5.1.0: resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} engines: {node: '>=12'} @@ -10295,9 +9094,6 @@ packages: '@nuxt/kit': optional: true - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - focus-trap@7.6.5: resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==} @@ -10348,10 +9144,6 @@ packages: resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==} engines: {node: '>= 18'} - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - formidable@3.5.4: resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} engines: {node: '>=14.0.0'} @@ -10435,10 +9227,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-amd-module-type@6.0.1: - resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} - engines: {node: '>=18'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -10482,9 +9270,6 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - get-tsconfig@4.12.0: resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} @@ -10561,10 +9346,6 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - globby@15.0.0: resolution: {integrity: sha512-oB4vkQGqlMl682wL1IlWd02tXCbquGWM4voPEI85QmNKCaw8zGTm1f1rubFgkg3Eli2PtKlFgrnmUqasbQWlkw==} engines: {node: '>=20'} @@ -10572,11 +9353,6 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gonzales-pe@4.3.0: - resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} - engines: {node: '>=0.6.0'} - hasBin: true - goober@2.1.18: resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} peerDependencies: @@ -10718,10 +9494,6 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} @@ -10738,8 +9510,8 @@ packages: highlightjs-vue@1.0.0: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - hono@4.8.12: - resolution: {integrity: sha512-MQSKk1Mg7b74k8l+A025LfysnLtXDKkE4pLaSsYRQC5iy85lgZnuyeQ1Wynair9mmECzoLu+FtJtqNZSoogBDQ==} + hono@4.10.1: + resolution: {integrity: sha512-rpGNOfacO4WEPClfkEt1yfl8cbu10uB1lNpiI33AKoiAHwOS8lV748JiLx4b5ozO/u4qLjIvfpFsPXdY5Qjkmg==} engines: {node: '>=16.9.0'} hookable@5.5.3: @@ -10749,10 +9521,6 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} - html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -10840,14 +9608,14 @@ packages: engines: {node: ^8.11.2 || >=10} os: [darwin] - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -10869,9 +9637,6 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-in-the-middle@1.14.4: - resolution: {integrity: sha512-eWjxh735SJLFJJDs5X82JQ2405OdJeAHDBnaoFCfdr5GVc7AWc9xU7KbrF+3Xd5F2ccP1aQFKtY+65X6EfKZ7A==} - import-in-the-middle@1.15.0: resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} @@ -10893,10 +9658,6 @@ packages: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} - index-to-position@1.1.0: - resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} - engines: {node: '>=18'} - infer-owner@1.0.4: resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} @@ -10928,10 +9689,6 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - ioredis@5.7.0: - resolution: {integrity: sha512-NUcA93i1lukyXU+riqEyPtSEkyFq8tX90uL659J+qpCZ3rEdViB/APC58oAhIh3+bJln2hzdlZbBZsGNrlsR8g==} - engines: {node: '>=12.22.0'} - ioredis@5.8.1: resolution: {integrity: sha512-Qho8TgIamqEPdgiMadJwzRMW3TudIg6vpg4YONokGDudy4eqRIJtDbVX72pfLBcWxvbn3qm/40TyGUObdW4tLQ==} engines: {node: '>=12.22.0'} @@ -10969,10 +9726,6 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - is-builtin-module@5.0.0: resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} engines: {node: '>=18.20'} @@ -11070,10 +9823,6 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -11133,13 +9882,6 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} - is-url-superb@4.0.0: - resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} - engines: {node: '>=10'} - - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - is-wayland@0.1.0: resolution: {integrity: sha512-QkbMsWkIfkrzOPxenwye0h56iAXirZYHG9eHVPb22fO9y+wPbaX/CHacOWBa/I++4ohTcByimhM1/nyCsH8KNA==} engines: {node: '>=20'} @@ -11201,8 +9943,8 @@ packages: resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} engines: {node: '>=10'} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} iterare@1.2.1: @@ -11229,10 +9971,6 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} - hasBin: true - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -11307,8 +10045,8 @@ packages: resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - json-schema-ref-resolver@2.0.1: - resolution: {integrity: sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==} + json-schema-ref-resolver@3.0.0: + resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==} json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -11350,9 +10088,6 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -11363,22 +10098,14 @@ packages: jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - junk@4.0.1: - resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} - engines: {node: '>=12.20'} - just-clone@6.2.0: resolution: {integrity: sha512-1IynUYEc/HAwxhi3WDpIpxJbZpMCvvrrmZVqvj9EhpvbH8lls7HhdhiByjL7DkAaWlLIzpC0Xc/VPvy/UxLNjA==} just-curry-it@5.3.0: resolution: {integrity: sha512-silMIRiFjUWlfaDhkgSzpuAyQ6EX/o09Eu8ZBfmFwQMbax7+LQzeIU2CBrICT6Ne4l86ITCGvUCBpCubWYy0Yw==} - jwt-decode@4.0.0: - resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} - engines: {node: '>=18'} - - katex@0.16.22: - resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + katex@0.16.25: + resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==} hasBin: true keyv@4.5.4: @@ -11417,18 +10144,10 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - - ky@1.10.0: - resolution: {integrity: sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==} + ky@1.12.0: + resolution: {integrity: sha512-YRLmSUHCwOJRBMArtqMRLOmO7fewn3yOoui6aB8ERkRVXupa0UiaQaKbIXteMt4jUElhbdqTMsLFHs8APxxUoQ==} engines: {node: '>=18'} - lambda-local@2.2.0: - resolution: {integrity: sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==} - engines: {node: '>=8'} - hasBin: true - langium@3.3.1: resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} engines: {node: '>=16.0.0'} @@ -11514,8 +10233,8 @@ packages: resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==} engines: {node: '>=13.2.0'} - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} local-pkg@1.1.2: @@ -11529,19 +10248,12 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -11582,18 +10294,14 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loupe@3.2.0: - resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} @@ -11624,10 +10332,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - luxon@3.7.1: - resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==} - engines: {node: '>=12'} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -11682,8 +10386,8 @@ packages: resolution: {integrity: sha512-MqIQVVkz+uGEHi3TsHx/czcxxCbRIL7sv5K5DnYw/tI+apY54IbPefV/cmgxp6LoJSEx/TqcHdLs/298afG5QQ==} engines: {node: '>=6'} - marked@16.3.0: - resolution: {integrity: sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w==} + marked@16.4.1: + resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==} engines: {node: '>= 20'} hasBin: true @@ -11769,10 +10473,6 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} - merge-options@3.0.4: - resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} - engines: {node: '>=10'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -11787,9 +10487,6 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micro-api-client@3.3.0: - resolution: {integrity: sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==} - microdiff@1.5.0: resolution: {integrity: sha512-Drq+/THMvDdzRYrK0oxJmOKiC24ayUV8ahrt8l3oRK51PWt6gdtrIGrlIH3pT/lFh1z93FbAcidtsHcWbnRz8Q==} @@ -11919,11 +10616,6 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - mime@4.0.7: - resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} - engines: {node: '>=16'} - hasBin: true - mime@4.1.0: resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} engines: {node: '>=16'} @@ -12016,8 +10708,8 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minisearch@7.1.2: - resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} + minisearch@7.2.0: + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -12042,15 +10734,15 @@ packages: engines: {node: '>=10'} hasBin: true - mkdist@2.3.0: - resolution: {integrity: sha512-thkRk+pHdudjdZT3FJpPZ2+pncI6mGlH/B+KBVddlZj4MrFGW41sRIv1wZawZUHU8v7cttGaj+5nx8P+dG664A==} + mkdist@2.4.1: + resolution: {integrity: sha512-Ezk0gi04GJBkqMfsksICU5Rjoemc4biIekwgrONWVPor2EO/N9nBgN6MZXAf7Yw4mDDhrNyKbdETaHNevfumKg==} hasBin: true peerDependencies: - sass: ^1.85.0 + sass: ^1.92.1 typescript: ~5.8.3 - vue: ^3.5.13 + vue: ^3.5.21 vue-sfc-transformer: ^0.1.1 - vue-tsc: ^1.8.27 || ^2.0.21 + vue-tsc: ^1.8.27 || ^2.0.21 || ^3.0.0 peerDependenciesMeta: sass: optional: true @@ -12063,20 +10755,12 @@ packages: vue-tsc: optional: true - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} mocked-exports@0.1.1: resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==} - module-definition@6.0.1: - resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} - engines: {node: '>=18'} - hasBin: true - module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -12173,10 +10857,6 @@ packages: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} - netlify@13.3.5: - resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==} - engines: {node: ^14.16.0 || >=16.0.0} - next@15.5.6: resolution: {integrity: sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} @@ -12198,16 +10878,6 @@ packages: sass: optional: true - nitropack@2.12.4: - resolution: {integrity: sha512-MPmPRJWTeH03f/NmpN4q3iI3Woik4uaaWIoX34W3gMJiW06Vm1te/lPzuu5EXpXOK7Q2m3FymGMPXcExqih96Q==} - engines: {node: ^16.11.0 || >=17.0.0} - hasBin: true - peerDependencies: - xml2js: ^0.6.2 - peerDependenciesMeta: - xml2js: - optional: true - nitropack@2.12.7: resolution: {integrity: sha512-HWyzMBj2d8b14J6Cfnxv97ztnuHIgXNcrGiWCruLfb2ZfKsp6OCbZYJm5T9sv/ZKl8LedhatrMKG66HWJux9Rg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -12221,8 +10891,8 @@ packages: nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - node-abi@3.77.0: - resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==} + node-abi@3.78.0: + resolution: {integrity: sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==} engines: {node: '>=10'} node-abort-controller@3.1.1: @@ -12237,11 +10907,6 @@ packages: node-api-version@0.2.1: resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - deprecated: Use your platform's native DOMException instead - node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} @@ -12257,10 +10922,6 @@ packages: encoding: optional: true - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -12269,25 +10930,15 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-mock-http@1.0.2: - resolution: {integrity: sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==} - node-mock-http@1.0.3: resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} node-notifier@10.0.1: resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-releases@2.0.25: resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} - node-source-walk@7.0.1: - resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} - engines: {node: '>=18'} - non-layered-tidy-tree-layout@2.0.2: resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} @@ -12306,14 +10957,6 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} - engines: {node: ^16.14.0 || >=18.0.0} - - normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -12411,9 +11054,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -12485,10 +11125,6 @@ packages: resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} engines: {node: '>= 0.4.0'} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} @@ -12520,18 +11156,10 @@ packages: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} - p-event@6.0.1: - resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} - engines: {node: '>=16.17'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-limit@6.2.0: resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} engines: {node: '>=18'} @@ -12540,18 +11168,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - p-queue@8.1.1: resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} engines: {node: '>=18'} @@ -12560,10 +11180,6 @@ packages: resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} - p-wait-for@5.0.2: - resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} - engines: {node: '>=12'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -12571,9 +11187,6 @@ packages: resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} engines: {node: '>=18'} - package-manager-detector@1.4.0: - resolution: {integrity: sha512-rRZ+pR1Usc+ND9M2NkmCvE/LYJS+8ORVV9X0KuNSY/gFsp7RBHJM/ADh9LYq4Vvfq6QkKrW6/weuh8SMEtN5gw==} - package-manager-detector@1.4.1: resolution: {integrity: sha512-dSMiVLBEA4XaNJ0PRb4N5cV/SEP4BWrWZKBmfF+OUm2pQTiZ6DDkKeWaltwu3JRhLoy59ayIkJ00cx9K9CaYTg==} @@ -12605,10 +11218,6 @@ packages: resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} - parse-json@8.3.0: - resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} - engines: {node: '>=18'} - parse-latin@7.0.0: resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} @@ -12665,10 +11274,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -12779,8 +11384,8 @@ packages: pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.11.0: - resolution: {integrity: sha512-+YIodBB9sxcWeR8PrXC2K3gEDyfkUuVEITOcbqrfcj+z5QW4ioIcqZfYFbrLTYLsmAwunbS7nfU/dpBB6PZc1g==} + pino@9.13.1: + resolution: {integrity: sha512-Szuj+ViDTjKPQYiKumGmEn3frdl+ZPSdosHyt9SnUevFosOkMY2b7ipxlEctNKPmMD/VibeBI+ZcZCJK+4DPuw==} hasBin: true pino@9.7.0: @@ -12797,9 +11402,6 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -12832,12 +11434,6 @@ packages: peerDependencies: postcss: ^8.4.32 - postcss-convert-values@7.0.6: - resolution: {integrity: sha512-MD/eb39Mr60hvgrqpXsgbiqluawYg/8K4nKsqRsuDX9f+xN1j6awZCUv/5tLH8ak3vYp/EMXwdcnXvfZYiejCQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.32 - postcss-convert-values@7.0.7: resolution: {integrity: sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} @@ -13005,12 +11601,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss-values-parser@6.0.2: - resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} - engines: {node: '>=10'} - peerDependencies: - postcss: ^8.2.9 - postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -13040,19 +11630,14 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - preact@10.27.0: - resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==} + preact@10.27.2: + resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} hasBin: true - precinct@12.2.0: - resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} - engines: {node: '>=18'} - hasBin: true - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -13075,10 +11660,6 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} - pretty-bytes@7.0.1: - resolution: {integrity: sha512-285/jRCYIbMGDciDdrw0KPNC4LKEEwz/bwErcYNxSJOi4CpGUuLpb9gQpg3XJP0XYj9ldSRluXxih4lX2YN8Xw==} - engines: {node: '>=20'} - pretty-bytes@7.1.0: resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} engines: {node: '>=20'} @@ -13091,8 +11672,8 @@ packages: resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} engines: {node: '>=14.16'} - pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} prismjs@1.30.0: @@ -13205,13 +11786,10 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - quick-lru@7.2.0: - resolution: {integrity: sha512-fG4L8TlD1CacJiGMGPxM1/K8l/GaKL2eFQZ6DWAjxZYxSf07DkumbC/Mhh+u/NHvxkfQVL25By0pxBS8QE9ZrQ==} + quick-lru@7.3.0: + resolution: {integrity: sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==} engines: {node: '>=18'} - quote-unquote@1.0.0: - resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} - radash@12.1.1: resolution: {integrity: sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==} engines: {node: '>=14.18.0'} @@ -13231,9 +11809,9 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} + raw-body@3.0.1: + resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + engines: {node: '>= 0.10'} rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} @@ -13262,14 +11840,6 @@ packages: resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} hasBin: true - read-package-up@11.0.0: - resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} - engines: {node: '>=18'} - - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -13408,9 +11978,6 @@ packages: remove-accents@0.5.0: resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==} - remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - request-light@0.5.8: resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} @@ -13433,9 +12000,6 @@ packages: resolution: {integrity: sha512-9s0pnM5tH8G4dSI3pms2GboYOs25LwOGnRMxN/Hx3TYT1K0rh6OjaWf4dI0DAQnMyaEXWoGVnSTPQasqwzTTAA==} engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} - require-package-name@2.0.1: - resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} - requireindex@1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} @@ -13466,10 +12030,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} @@ -13539,28 +12099,15 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup-plugin-dts@6.2.1: - resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==} + rollup-plugin-dts@6.2.3: + resolution: {integrity: sha512-UgnEsfciXSPpASuOelix7m4DrmyQgiaWBnvI0TM4GxuDh5FkqW8E5hu57bCxXB90VvR1WNfLV80yEDN18UogSA==} engines: {node: '>=16'} peerDependencies: rollup: ^3.29.4 || ^4 typescript: ~5.8.3 - rollup-plugin-visualizer@6.0.3: - resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - rolldown: 1.x || ^1.0.0-beta - rollup: 2.x || 3.x || 4.x - peerDependenciesMeta: - rolldown: - optional: true - rollup: - optional: true - - rollup-plugin-visualizer@6.0.4: - resolution: {integrity: sha512-q8Q7J/6YofkmaGW1sH/fPRAz37x/+pd7VBuaUU7lwvOS/YikuiiEU9jeb9PH8XHiq50XFrUsBbOxeAMYQ7KZkg==} + rollup-plugin-visualizer@6.0.5: + resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -13572,16 +12119,6 @@ packages: rollup: optional: true - rollup@4.46.2: - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.52.0: - resolution: {integrity: sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.52.4: resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -13600,8 +12137,8 @@ packages: rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} run-parallel@1.2.0: @@ -13653,8 +12190,8 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.3.2: - resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} scslre@0.3.0: @@ -13671,8 +12208,8 @@ packages: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} - secure-json-parse@4.0.0: - resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==} + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} seek-bzip@2.0.0: resolution: {integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==} @@ -13722,12 +12259,6 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - seroval-plugins@1.3.2: - resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - seroval-plugins@1.3.3: resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} engines: {node: '>=10'} @@ -13891,10 +12422,6 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - sirv@3.0.1: - resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} - engines: {node: '>=18'} - sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -13922,6 +12449,9 @@ packages: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} + slow-redact@0.3.2: + resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} + smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -13991,15 +12521,9 @@ packages: spawn-sync@1.0.15: resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} @@ -14036,9 +12560,6 @@ packages: resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -14060,8 +12581,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} @@ -14173,9 +12694,6 @@ packages: resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} engines: {node: '>=14.16'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} @@ -14189,8 +12707,8 @@ packages: stubborn-fs@1.2.5: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} - style-mod@4.1.2: - resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + style-mod@4.1.3: + resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} @@ -14297,15 +12815,11 @@ packages: tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - tailwindcss@4.1.11: - resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} - - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} - engines: {node: '>=6'} + tailwindcss@4.1.14: + resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==} - tapable@2.2.3: - resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} tar-fs@2.1.4: @@ -14355,11 +12869,6 @@ packages: uglify-js: optional: true - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} - engines: {node: '>=10'} - hasBin: true - terser@5.44.0: resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} @@ -14372,9 +12881,6 @@ packages: text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -14413,10 +12919,6 @@ packages: tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -14429,8 +12931,8 @@ packages: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} tldts-core@7.0.17: @@ -14443,10 +12945,6 @@ packages: tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - tmp@0.2.5: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} @@ -14463,20 +12961,17 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@6.0.4: - resolution: {integrity: sha512-MD9MjpVNhVyH4fyd5rKphjvt/1qj+PtQUz65aFqAZA6XniWAuSFRjLk3e2VALEFlh9OwBpXUN7rfeqSnT/Fmkw==} + token-types@6.1.1: + resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} engines: {node: '>=14.16'} - tokenx@1.1.0: - resolution: {integrity: sha512-KCjtiC2niPwTSuz4ktM82Ki5bjqBwYpssiHDsGr5BpejN/B3ksacRvrsdoxljdMIh2nCX78alnDkeemBmYUmTA==} + tokenx@1.2.0: + resolution: {integrity: sha512-x4bRrL23b22H+EqW2pbhIkkt3ouj27ZGmAS1QoIqpocEO4m0sAl2H1M4L1UzKqleikY4U9lz/TbEw4jeG8tm2A==} toml-eslint-parser@0.10.0: resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -14499,10 +12994,6 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} @@ -14610,10 +13101,6 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} @@ -14677,8 +13164,8 @@ packages: resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} engines: {node: '>=8'} - uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} ultrahtml@1.6.0: @@ -14708,15 +13195,12 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.14.0: - resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} - undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} - undici@6.21.3: - resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + undici@6.22.0: + resolution: {integrity: sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==} engines: {node: '>=18.17'} undici@7.14.0: @@ -14745,10 +13229,6 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -14759,12 +13239,8 @@ packages: unifont@0.6.0: resolution: {integrity: sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==} - unimport@5.3.0: - resolution: {integrity: sha512-cty7t1DESgm0OPfCy9oyn5u9B5t0tMW6tH6bXTjAGIO3SkJsbg/DXYHjrPrUKqultqbAAoltAfYsuu/FEDocjg==} - engines: {node: '>=18.12.0'} - - unimport@5.4.1: - resolution: {integrity: sha512-wMZ2JKUCleCK2zfRHeWcbrUHKXOC3SVBYkyn/wTGzh0THX6sT4hSjuKXxKANN4/WMbT6ZPM4JzcDcnhD2x9Bpg==} + unimport@5.5.0: + resolution: {integrity: sha512-/JpWMG9s1nBSlXJAQ8EREFTFy3oy6USFd8T6AoBaw1q2GGcF4R9yp3ofg32UODZlYEO5VD0EWE1RpI9XDWyPYg==} engines: {node: '>=18.12.0'} unique-filename@2.0.1: @@ -14781,9 +13257,6 @@ packages: unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -14808,9 +13281,6 @@ packages: unist-util-visit-parents@3.1.1: resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} @@ -14831,10 +13301,6 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unixify@1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.0'} - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -14843,10 +13309,6 @@ packages: resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==} engines: {node: '>=18.12.0'} - unplugin-utils@0.3.0: - resolution: {integrity: sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg==} - engines: {node: '>=20.19.0'} - unplugin-utils@0.3.1: resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} engines: {node: '>=20.19.0'} @@ -14860,16 +13322,12 @@ packages: vue-router: optional: true - unplugin@1.16.1: - resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} - engines: {node: '>=14.0.0'} - unplugin@2.3.10: resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} engines: {node: '>=18.12.0'} - unstorage@1.16.1: - resolution: {integrity: sha512-gdpZ3guLDhz+zWIlYP1UwQ259tG5T5vYRzDaHMkQ1bBY1SQPutvZnrRjTFaWUUpseErJIgAZS51h6NOcZVZiqQ==} + unstorage@1.17.1: + resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -14883,6 +13341,7 @@ packages: '@planetscale/database': ^1.19.0 '@upstash/redis': ^1.34.3 '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 '@vercel/kv': ^1.0.1 aws4fetch: ^1.0.20 db0: '>=0.2.1' @@ -14914,6 +13373,8 @@ packages: optional: true '@vercel/blob': optional: true + '@vercel/functions': + optional: true '@vercel/kv': optional: true aws4fetch: @@ -14927,88 +13388,23 @@ packages: uploadthing: optional: true - unstorage@1.17.1: - resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} - peerDependencies: - '@azure/app-configuration': ^1.8.0 - '@azure/cosmos': ^4.2.0 - '@azure/data-tables': ^13.3.0 - '@azure/identity': ^4.6.0 - '@azure/keyvault-secrets': ^4.9.0 - '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 || ^7.0.0 - '@deno/kv': '>=0.9.0' - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 - '@planetscale/database': ^1.19.0 - '@upstash/redis': ^1.34.3 - '@vercel/blob': '>=0.27.1' - '@vercel/functions': ^2.2.12 || ^3.0.0 - '@vercel/kv': ^1.0.1 - aws4fetch: ^1.0.20 - db0: '>=0.2.1' - idb-keyval: ^6.2.1 - ioredis: ^5.4.2 - uploadthing: ^7.4.4 - peerDependenciesMeta: - '@azure/app-configuration': - optional: true - '@azure/cosmos': - optional: true - '@azure/data-tables': - optional: true - '@azure/identity': - optional: true - '@azure/keyvault-secrets': - optional: true - '@azure/storage-blob': - optional: true - '@capacitor/preferences': - optional: true - '@deno/kv': - optional: true - '@netlify/blobs': - optional: true - '@planetscale/database': - optional: true - '@upstash/redis': - optional: true - '@vercel/blob': - optional: true - '@vercel/functions': - optional: true - '@vercel/kv': - optional: true - aws4fetch: - optional: true - db0: - optional: true - idb-keyval: - optional: true - ioredis: - optional: true - uploadthing: - optional: true - - until-async@3.0.2: - resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} - - untun@0.1.3: - resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} - hasBin: true - - untyped@2.0.0: - resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} - hasBin: true - - unwasm@0.3.11: - resolution: {integrity: sha512-Vhp5gb1tusSQw5of/g3Q697srYgMXvwMgXMjcG4ZNga02fDX9coxJ9fAb0Ci38hM2Hv/U1FXRPGgjP2BYqhNoQ==} - - unwasm@0.3.9: - resolution: {integrity: sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true + until-async@3.0.2: + resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} + + untun@0.1.3: + resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} + hasBin: true + + untyped@2.0.0: + resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} + hasBin: true + + unwasm@0.3.11: + resolution: {integrity: sha512-Vhp5gb1tusSQw5of/g3Q697srYgMXvwMgXMjcG4ZNga02fDX9coxJ9fAb0Ci38hM2Hv/U1FXRPGgjP2BYqhNoQ==} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -15026,17 +13422,6 @@ packages: resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - urlpattern-polyfill@10.1.0: - resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} - - urlpattern-polyfill@8.0.2: - resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} - - use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: @@ -15078,9 +13463,6 @@ packages: validate-html-nesting@1.2.3: resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@5.0.1: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -15197,8 +13579,8 @@ packages: vite: optional: true - vite@5.4.19: - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + vite@5.4.20: + resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -15228,46 +13610,6 @@ packages: terser: optional: true - vite@6.3.6: - resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@6.4.0: resolution: {integrity: sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -15348,46 +13690,6 @@ packages: yaml: optional: true - vite@7.1.7: - resolution: {integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.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.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vitefu@1.1.1: resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} peerDependencies: @@ -15456,32 +13758,32 @@ packages: jsdom: optional: true - volar-service-css@0.0.62: - resolution: {integrity: sha512-JwNyKsH3F8PuzZYuqPf+2e+4CTU8YoyUHEHVnoXNlrLe7wy9U3biomZ56llN69Ris7TTy/+DEX41yVxQpM4qvg==} + volar-service-css@0.0.65: + resolution: {integrity: sha512-oaImNguZF/8NfQh5jJZ2lJYBtF3aFS5H2w+6GmH7ykESAgBJ1UC7DrhmH5smBGGF7OOzzc9AzrrnriafoFJBdA==} peerDependencies: '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-emmet@0.0.62: - resolution: {integrity: sha512-U4dxWDBWz7Pi4plpbXf4J4Z/ss6kBO3TYrACxWNsE29abu75QzVS0paxDDhI6bhqpbDFXlpsDhZ9aXVFpnfGRQ==} + volar-service-emmet@0.0.65: + resolution: {integrity: sha512-YkAPlkJnjyAAUZGtG7STgy3ENFy7C0n3dl6MffUYkcovosfUUNgpUOmsj4t1qw1c7t5KMvLfAZHsEC3Ig5Qs3w==} peerDependencies: '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-html@0.0.62: - resolution: {integrity: sha512-Zw01aJsZRh4GTGUjveyfEzEqpULQUdQH79KNEiKVYHZyuGtdBRYCHlrus1sueSNMxwwkuF5WnOHfvBzafs8yyQ==} + volar-service-html@0.0.65: + resolution: {integrity: sha512-AxXckCTbCr5j5z81d3bNiRRL32xCaBSa8lmYhq0QfzBPVPaRv06YYaxp22XizM061f96iizM7ZkSHCu1RuSwRA==} peerDependencies: '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-prettier@0.0.62: - resolution: {integrity: sha512-h2yk1RqRTE+vkYZaI9KYuwpDfOQRrTEMvoHol0yW4GFKc75wWQRrb5n/5abDrzMPrkQbSip8JH2AXbvrRtYh4w==} + volar-service-prettier@0.0.65: + resolution: {integrity: sha512-cJH+5MtYp5q+zL8d6rd9RwQpwXFJuBaRHMuUyG+kasEkeWMbJKVVFYzUzNtbM8HMGMq5yYy+UGn/Zuh3CvSjaA==} peerDependencies: '@volar/language-service': ~2.4.0 prettier: ^2.2 || ^3.0 @@ -15491,35 +13793,35 @@ packages: prettier: optional: true - volar-service-typescript-twoslash-queries@0.0.62: - resolution: {integrity: sha512-KxFt4zydyJYYI0kFAcWPTh4u0Ha36TASPZkAnNY784GtgajerUqM80nX/W1d0wVhmcOFfAxkVsf/Ed+tiYU7ng==} + volar-service-typescript-twoslash-queries@0.0.65: + resolution: {integrity: sha512-aghyUm2Rc4QNjKG1nvEjT2Kdzuvccs5H1TD0fIaM5i7X5d/vnm3QLP6wzIGGffa3sjD5b6YmLZR2XaFfNEusog==} peerDependencies: '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-typescript@0.0.62: - resolution: {integrity: sha512-p7MPi71q7KOsH0eAbZwPBiKPp9B2+qrdHAd6VY5oTo9BUXatsOAdakTm9Yf0DUj6uWBAaOT01BSeVOPwucMV1g==} + volar-service-typescript@0.0.65: + resolution: {integrity: sha512-zPJuLIMs7lkQCvL+Rza8+3/EIoXEIkX8+DL7bNNfPgnbalbvRDhqWLVMJ6Zk3pINjLJafDqyhSbw8srfkUv97w==} peerDependencies: '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-yaml@0.0.62: - resolution: {integrity: sha512-k7gvv7sk3wa+nGll3MaSKyjwQsJjIGCHFjVkl3wjaSP2nouKyn9aokGmqjrl39mi88Oy49giog2GkZH526wjig==} + volar-service-yaml@0.0.65: + resolution: {integrity: sha512-1C67p6M+Y11IVDOHfmbnF4AJiqmH5xaWsJhvM9eO4kazvHzVhk3+kzCtKcNoXIa77uPNmEbbox5CRysage8MNA==} peerDependencies: '@volar/language-service': ~2.4.0 peerDependenciesMeta: '@volar/language-service': optional: true - vscode-css-languageservice@6.3.7: - resolution: {integrity: sha512-5TmXHKllPzfkPhW4UE9sODV3E0bIOJPOk+EERKllf2SmAczjfTmYeq5txco+N3jpF8KIZ6loj/JptpHBQuVQRA==} + vscode-css-languageservice@6.3.8: + resolution: {integrity: sha512-dBk/9ullEjIMbfSYAohGpDOisOVU1x2MQHOeU12ohGJQI7+r0PCimBwaa/pWpxl/vH4f7ibrBfxIZY3anGmHKQ==} - vscode-html-languageservice@5.5.1: - resolution: {integrity: sha512-/ZdEtsZ3OiFSyL00kmmu7crFV9KwWR+MgpzjsxO60DQH7sIfHZM892C/E4iDd11EKocr+NYuvOA4Y7uc3QzLEA==} + vscode-html-languageservice@5.6.0: + resolution: {integrity: sha512-FIVz83oGw2tBkOr8gQPeiREInnineCKGCz3ZD1Pi6opOuX3nSRkc4y4zLLWsuop+6ttYX//XZCI6SLzGhRzLmA==} vscode-json-languageservice@4.1.8: resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} @@ -15646,10 +13948,6 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -15737,14 +14035,6 @@ packages: winreg@0.0.12: resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==} - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.17.0: - resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} - engines: {node: '>= 12.0.0'} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -15786,10 +14076,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@6.0.0: - resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} - engines: {node: ^18.17.0 || >=20.5.0} - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -15935,18 +14221,10 @@ packages: resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} engines: {node: '>=18.19'} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - yoctocolors-cjs@2.1.3: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} - yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} - engines: {node: '>=18'} - yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} @@ -15960,10 +14238,6 @@ packages: youch@4.1.0-beta.11: resolution: {integrity: sha512-sQi6PERyO/mT8w564ojOVeAlYTtVQmC2GaktQAf+IdI75/GKIggosBuvyVXvEV+FATAT6RbLdIjFoiIId4ozoQ==} - youch@4.1.0-beta.8: - resolution: {integrity: sha512-rY2A2lSF7zC+l7HH9Mq+83D1dLlsPnEvy8jTouzaptDZM6geqZ3aJe/b7ULCwRURPtWV3vbDjA2DDMdoBol0HQ==} - engines: {node: '>=18'} - zhead@2.2.4: resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==} @@ -16080,122 +14354,122 @@ snapshots: optionalDependencies: rollup: 4.52.4 - '@algolia/abtesting@1.1.0': + '@algolia/abtesting@1.6.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.3)': + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)': + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) - '@algolia/client-search': 5.35.0 - algoliasearch: 5.35.0 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1) + '@algolia/client-search': 5.40.1 + algoliasearch: 5.40.1 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)': + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1)': dependencies: - '@algolia/client-search': 5.35.0 - algoliasearch: 5.35.0 + '@algolia/client-search': 5.40.1 + algoliasearch: 5.40.1 - '@algolia/client-abtesting@5.35.0': + '@algolia/client-abtesting@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/client-analytics@5.35.0': + '@algolia/client-analytics@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/client-common@5.35.0': {} + '@algolia/client-common@5.40.1': {} - '@algolia/client-insights@5.35.0': + '@algolia/client-insights@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/client-personalization@5.35.0': + '@algolia/client-personalization@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/client-query-suggestions@5.35.0': + '@algolia/client-query-suggestions@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/client-search@5.35.0': + '@algolia/client-search@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/ingestion@1.35.0': + '@algolia/ingestion@1.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/monitoring@1.35.0': + '@algolia/monitoring@1.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/recommend@5.35.0': + '@algolia/recommend@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 + '@algolia/client-common': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 - '@algolia/requester-browser-xhr@5.35.0': + '@algolia/requester-browser-xhr@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 + '@algolia/client-common': 5.40.1 - '@algolia/requester-fetch@5.35.0': + '@algolia/requester-fetch@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 + '@algolia/client-common': 5.40.1 - '@algolia/requester-node-http@5.35.0': + '@algolia/requester-node-http@5.40.1': dependencies: - '@algolia/client-common': 5.35.0 + '@algolia/client-common': 5.40.1 '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@angular-devkit/core@19.2.15(chokidar@4.0.3)': dependencies: @@ -16219,11 +14493,11 @@ snapshots: optionalDependencies: chokidar: 4.0.3 - '@angular-devkit/schematics-cli@19.2.15(@types/node@22.17.0)(chokidar@4.0.3)': + '@angular-devkit/schematics-cli@19.2.15(@types/node@22.18.11)(chokidar@4.0.3)': dependencies: '@angular-devkit/core': 19.2.15(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) - '@inquirer/prompts': 7.3.2(@types/node@22.17.0) + '@inquirer/prompts': 7.3.2(@types/node@22.18.11) ansi-colors: 4.1.3 symbol-observable: 4.0.0 yargs-parser: 21.1.1 @@ -16251,7 +14525,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/common@20.1.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2)': + '@angular/common@20.3.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2)': dependencies: '@angular/core': 20.3.6(rxjs@7.8.2) rxjs: 7.8.2 @@ -16331,16 +14605,10 @@ snapshots: dependencies: '@ark/util': 0.50.0 - '@ark/schema@0.46.0': - dependencies: - '@ark/util': 0.46.0 - '@ark/schema@0.50.0': dependencies: '@ark/util': 0.50.0 - '@ark/util@0.46.0': {} - '@ark/util@0.50.0': {} '@asamuzakjp/css-color@4.0.5': @@ -16351,7 +14619,7 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 11.2.2 - '@asamuzakjp/dom-selector@6.5.7': + '@asamuzakjp/dom-selector@6.7.0': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 @@ -16363,7 +14631,7 @@ snapshots: '@astrojs/check@0.9.4(prettier@3.6.2)(typescript@5.8.3)': dependencies: - '@astrojs/language-server': 2.15.4(prettier@3.6.2)(typescript@5.8.3) + '@astrojs/language-server': 2.15.5(prettier@3.6.2)(typescript@5.8.3) chokidar: 4.0.3 kleur: 4.1.5 typescript: 5.8.3 @@ -16376,25 +14644,25 @@ snapshots: '@astrojs/internal-helpers@0.7.4': {} - '@astrojs/language-server@2.15.4(prettier@3.6.2)(typescript@5.8.3)': + '@astrojs/language-server@2.15.5(prettier@3.6.2)(typescript@5.8.3)': dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/yaml2ts': 0.2.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@volar/kit': 2.4.22(typescript@5.8.3) - '@volar/language-core': 2.4.22 - '@volar/language-server': 2.4.22 - '@volar/language-service': 2.4.22 + '@volar/kit': 2.4.23(typescript@5.8.3) + '@volar/language-core': 2.4.23 + '@volar/language-server': 2.4.23 + '@volar/language-service': 2.4.23 fast-glob: 3.3.3 muggle-string: 0.4.1 - volar-service-css: 0.0.62(@volar/language-service@2.4.22) - volar-service-emmet: 0.0.62(@volar/language-service@2.4.22) - volar-service-html: 0.0.62(@volar/language-service@2.4.22) - volar-service-prettier: 0.0.62(@volar/language-service@2.4.22)(prettier@3.6.2) - volar-service-typescript: 0.0.62(@volar/language-service@2.4.22) - volar-service-typescript-twoslash-queries: 0.0.62(@volar/language-service@2.4.22) - volar-service-yaml: 0.0.62(@volar/language-service@2.4.22) - vscode-html-languageservice: 5.5.1 + volar-service-css: 0.0.65(@volar/language-service@2.4.23) + volar-service-emmet: 0.0.65(@volar/language-service@2.4.23) + volar-service-html: 0.0.65(@volar/language-service@2.4.23) + volar-service-prettier: 0.0.65(@volar/language-service@2.4.23)(prettier@3.6.2) + volar-service-typescript: 0.0.65(@volar/language-service@2.4.23) + volar-service-typescript-twoslash-queries: 0.0.65(@volar/language-service@2.4.23) + volar-service-yaml: 0.0.65(@volar/language-service@2.4.23) + vscode-html-languageservice: 5.6.0 vscode-uri: 3.1.0 optionalDependencies: prettier: 3.6.2 @@ -16431,15 +14699,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.4.0(@types/node@24.8.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)': + '@astrojs/react@4.4.0(@types/node@22.18.11)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@vitejs/plugin-react': 4.7.0(vite@6.3.6(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitejs/plugin-react': 4.7.0(vite@6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) ultrahtml: 1.6.0 - vite: 6.3.6(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -16484,26 +14752,6 @@ snapshots: '@babel/compat-data@7.28.4': {} - '@babel/core@7.28.0': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.28.2 - '@babel/parser': 7.28.0 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.28.4': dependencies: '@babel/code-frame': 7.27.1 @@ -16524,14 +14772,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.0': - dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - '@babel/generator@7.28.3': dependencies: '@babel/parser': 7.28.4 @@ -16585,15 +14825,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -16631,39 +14862,20 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.2': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 '@babel/types': 7.28.4 - '@babel/parser@7.28.0': - dependencies: - '@babel/types': 7.28.4 - '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -16716,24 +14928,14 @@ snapshots: '@babel/runtime@7.28.2': {} + '@babel/runtime@7.28.4': {} + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.28.4 '@babel/types': 7.28.4 - '@babel/traverse@7.28.0': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 @@ -16746,16 +14948,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - - '@babel/types@7.28.2': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -16763,6 +14955,8 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@borewit/text-codec@0.1.1': {} + '@braintree/sanitize-url@6.0.4': optional: true @@ -16810,7 +15004,7 @@ snapshots: optionalDependencies: workerd: 1.20251008.0 - '@cloudflare/vite-plugin@1.13.13(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251008.0)(wrangler@4.43.0(@cloudflare/workers-types@4.20251011.0))': + '@cloudflare/vite-plugin@1.13.13(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(workerd@1.20251008.0)(wrangler@4.43.0(@cloudflare/workers-types@4.20251011.0))': dependencies: '@cloudflare/unenv-preset': 2.7.7(unenv@2.0.0-rc.21)(workerd@1.20251008.0) '@remix-run/node-fetch-server': 0.8.1 @@ -16819,7 +15013,7 @@ snapshots: picocolors: 1.1.1 tinyglobby: 0.2.15 unenv: 2.0.0-rc.21 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) wrangler: 4.43.0(@cloudflare/workers-types@4.20251011.0) ws: 8.18.0 transitivePeerDependencies: @@ -16919,7 +15113,7 @@ snapshots: '@lezer/common': 1.3.0 '@lezer/highlight': 1.2.2 '@lezer/lr': 1.4.2 - style-mod: 4.1.2 + style-mod: 4.1.3 '@codemirror/lint@6.9.0': dependencies: @@ -16941,14 +15135,12 @@ snapshots: dependencies: '@codemirror/state': 6.5.2 crelt: 1.0.6 - style-mod: 4.1.2 + style-mod: 4.1.3 w3c-keyname: 2.2.8 '@colors/colors@1.5.0': optional: true - '@colors/colors@1.6.0': {} - '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -16977,12 +15169,6 @@ snapshots: '@csstools/css-tokenizer@3.0.4': {} - '@dabh/diagnostics@2.0.3': - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - '@deno/shim-deno-test@0.5.0': {} '@deno/shim-deno@0.19.2': @@ -16990,11 +15176,6 @@ snapshots: '@deno/shim-deno-test': 0.5.0 which: 4.0.0 - '@dependents/detective-less@5.0.1': - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - '@develar/schema-utils@2.6.5': dependencies: ajv: 6.12.6 @@ -17018,10 +15199,10 @@ snapshots: '@docsearch/css@3.8.2': {} - '@docsearch/js@3.8.2(@algolia/client-search@5.35.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)': + '@docsearch/js@3.8.2(@algolia/client-search@5.40.1)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)': dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.35.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3) - preact: 10.27.0 + '@docsearch/react': 3.8.2(@algolia/client-search@5.40.1)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3) + preact: 10.27.2 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -17029,12 +15210,12 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.8.2(@algolia/client-search@5.35.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)': + '@docsearch/react@3.8.2(@algolia/client-search@5.40.1)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.35.0)(algoliasearch@5.35.0) + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.40.1)(algoliasearch@5.40.1) '@docsearch/css': 3.8.2 - algoliasearch: 5.35.0 + algoliasearch: 5.40.1 optionalDependencies: '@types/react': 19.2.2 react: 19.2.0 @@ -17053,9 +15234,9 @@ snapshots: dependencies: electron: 38.3.0 - '@electron-toolkit/tsconfig@2.0.0(@types/node@22.17.0)': + '@electron-toolkit/tsconfig@2.0.0(@types/node@22.18.11)': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 '@electron-toolkit/utils@4.0.0(electron@38.3.0)': dependencies: @@ -17137,7 +15318,7 @@ snapshots: detect-libc: 2.1.2 fs-extra: 10.1.0 got: 11.8.6 - node-abi: 3.77.0 + node-abi: 3.78.0 node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 @@ -17179,7 +15360,7 @@ snapshots: dependencies: '@emmetio/scanner': 1.0.4 - '@emmetio/css-parser@0.4.0': + '@emmetio/css-parser@https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660': dependencies: '@emmetio/stream-reader': 2.2.0 '@emmetio/stream-reader-utils': 0.1.0 @@ -17229,534 +15410,225 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.25.10': - optional: true - '@esbuild/aix-ppc64@0.25.11': optional: true '@esbuild/aix-ppc64@0.25.4': optional: true - '@esbuild/aix-ppc64@0.25.5': - optional: true - - '@esbuild/aix-ppc64@0.25.8': - optional: true - - '@esbuild/aix-ppc64@0.25.9': - optional: true - '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.25.10': - optional: true - '@esbuild/android-arm64@0.25.11': optional: true '@esbuild/android-arm64@0.25.4': optional: true - '@esbuild/android-arm64@0.25.5': - optional: true - - '@esbuild/android-arm64@0.25.8': - optional: true - - '@esbuild/android-arm64@0.25.9': - optional: true - '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.25.10': - optional: true - '@esbuild/android-arm@0.25.11': optional: true '@esbuild/android-arm@0.25.4': optional: true - '@esbuild/android-arm@0.25.5': - optional: true - - '@esbuild/android-arm@0.25.8': - optional: true - - '@esbuild/android-arm@0.25.9': - optional: true - '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.25.10': - optional: true - '@esbuild/android-x64@0.25.11': optional: true '@esbuild/android-x64@0.25.4': optional: true - '@esbuild/android-x64@0.25.5': - optional: true - - '@esbuild/android-x64@0.25.8': - optional: true - - '@esbuild/android-x64@0.25.9': - optional: true - '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.25.10': - optional: true - '@esbuild/darwin-arm64@0.25.11': optional: true '@esbuild/darwin-arm64@0.25.4': optional: true - '@esbuild/darwin-arm64@0.25.5': - optional: true - - '@esbuild/darwin-arm64@0.25.8': - optional: true - - '@esbuild/darwin-arm64@0.25.9': - optional: true - '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.25.10': - optional: true - '@esbuild/darwin-x64@0.25.11': optional: true '@esbuild/darwin-x64@0.25.4': optional: true - '@esbuild/darwin-x64@0.25.5': - optional: true - - '@esbuild/darwin-x64@0.25.8': - optional: true - - '@esbuild/darwin-x64@0.25.9': - optional: true - '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.25.10': - optional: true - '@esbuild/freebsd-arm64@0.25.11': optional: true '@esbuild/freebsd-arm64@0.25.4': optional: true - '@esbuild/freebsd-arm64@0.25.5': - optional: true - - '@esbuild/freebsd-arm64@0.25.8': - optional: true - - '@esbuild/freebsd-arm64@0.25.9': - optional: true - '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.25.10': - optional: true - '@esbuild/freebsd-x64@0.25.11': optional: true '@esbuild/freebsd-x64@0.25.4': optional: true - '@esbuild/freebsd-x64@0.25.5': - optional: true - - '@esbuild/freebsd-x64@0.25.8': - optional: true - - '@esbuild/freebsd-x64@0.25.9': - optional: true - '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.25.10': - optional: true - '@esbuild/linux-arm64@0.25.11': optional: true '@esbuild/linux-arm64@0.25.4': optional: true - '@esbuild/linux-arm64@0.25.5': - optional: true - - '@esbuild/linux-arm64@0.25.8': - optional: true - - '@esbuild/linux-arm64@0.25.9': - optional: true - '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.25.10': - optional: true - '@esbuild/linux-arm@0.25.11': optional: true '@esbuild/linux-arm@0.25.4': optional: true - '@esbuild/linux-arm@0.25.5': - optional: true - - '@esbuild/linux-arm@0.25.8': - optional: true - - '@esbuild/linux-arm@0.25.9': - optional: true - '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.25.10': - optional: true - '@esbuild/linux-ia32@0.25.11': optional: true '@esbuild/linux-ia32@0.25.4': optional: true - '@esbuild/linux-ia32@0.25.5': - optional: true - - '@esbuild/linux-ia32@0.25.8': - optional: true - - '@esbuild/linux-ia32@0.25.9': - optional: true - '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.25.10': - optional: true - '@esbuild/linux-loong64@0.25.11': optional: true '@esbuild/linux-loong64@0.25.4': optional: true - '@esbuild/linux-loong64@0.25.5': - optional: true - - '@esbuild/linux-loong64@0.25.8': - optional: true - - '@esbuild/linux-loong64@0.25.9': - optional: true - '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.25.10': - optional: true - '@esbuild/linux-mips64el@0.25.11': optional: true '@esbuild/linux-mips64el@0.25.4': optional: true - '@esbuild/linux-mips64el@0.25.5': - optional: true - - '@esbuild/linux-mips64el@0.25.8': - optional: true - - '@esbuild/linux-mips64el@0.25.9': - optional: true - '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.25.10': - optional: true - '@esbuild/linux-ppc64@0.25.11': optional: true '@esbuild/linux-ppc64@0.25.4': optional: true - '@esbuild/linux-ppc64@0.25.5': - optional: true - - '@esbuild/linux-ppc64@0.25.8': - optional: true - - '@esbuild/linux-ppc64@0.25.9': - optional: true - '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.25.10': - optional: true - '@esbuild/linux-riscv64@0.25.11': optional: true '@esbuild/linux-riscv64@0.25.4': optional: true - '@esbuild/linux-riscv64@0.25.5': - optional: true - - '@esbuild/linux-riscv64@0.25.8': - optional: true - - '@esbuild/linux-riscv64@0.25.9': - optional: true - '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.25.10': - optional: true - '@esbuild/linux-s390x@0.25.11': optional: true '@esbuild/linux-s390x@0.25.4': optional: true - '@esbuild/linux-s390x@0.25.5': - optional: true - - '@esbuild/linux-s390x@0.25.8': - optional: true - - '@esbuild/linux-s390x@0.25.9': - optional: true - '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.25.10': - optional: true - '@esbuild/linux-x64@0.25.11': optional: true '@esbuild/linux-x64@0.25.4': optional: true - '@esbuild/linux-x64@0.25.5': - optional: true - - '@esbuild/linux-x64@0.25.8': - optional: true - - '@esbuild/linux-x64@0.25.9': - optional: true - - '@esbuild/netbsd-arm64@0.25.10': - optional: true - '@esbuild/netbsd-arm64@0.25.11': optional: true '@esbuild/netbsd-arm64@0.25.4': optional: true - '@esbuild/netbsd-arm64@0.25.5': - optional: true - - '@esbuild/netbsd-arm64@0.25.8': - optional: true - - '@esbuild/netbsd-arm64@0.25.9': - optional: true - '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.25.10': - optional: true - '@esbuild/netbsd-x64@0.25.11': optional: true '@esbuild/netbsd-x64@0.25.4': optional: true - '@esbuild/netbsd-x64@0.25.5': - optional: true - - '@esbuild/netbsd-x64@0.25.8': - optional: true - - '@esbuild/netbsd-x64@0.25.9': - optional: true - - '@esbuild/openbsd-arm64@0.25.10': - optional: true - '@esbuild/openbsd-arm64@0.25.11': optional: true '@esbuild/openbsd-arm64@0.25.4': optional: true - '@esbuild/openbsd-arm64@0.25.5': - optional: true - - '@esbuild/openbsd-arm64@0.25.8': - optional: true - - '@esbuild/openbsd-arm64@0.25.9': - optional: true - '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.25.10': - optional: true - '@esbuild/openbsd-x64@0.25.11': optional: true '@esbuild/openbsd-x64@0.25.4': optional: true - '@esbuild/openbsd-x64@0.25.5': - optional: true - - '@esbuild/openbsd-x64@0.25.8': - optional: true - - '@esbuild/openbsd-x64@0.25.9': - optional: true - - '@esbuild/openharmony-arm64@0.25.10': - optional: true - '@esbuild/openharmony-arm64@0.25.11': optional: true - '@esbuild/openharmony-arm64@0.25.8': - optional: true - - '@esbuild/openharmony-arm64@0.25.9': - optional: true - '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.25.10': - optional: true - '@esbuild/sunos-x64@0.25.11': optional: true '@esbuild/sunos-x64@0.25.4': optional: true - '@esbuild/sunos-x64@0.25.5': - optional: true - - '@esbuild/sunos-x64@0.25.8': - optional: true - - '@esbuild/sunos-x64@0.25.9': - optional: true - '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.25.10': - optional: true - '@esbuild/win32-arm64@0.25.11': optional: true '@esbuild/win32-arm64@0.25.4': optional: true - '@esbuild/win32-arm64@0.25.5': - optional: true - - '@esbuild/win32-arm64@0.25.8': - optional: true - - '@esbuild/win32-arm64@0.25.9': - optional: true - '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.25.10': - optional: true - '@esbuild/win32-ia32@0.25.11': optional: true '@esbuild/win32-ia32@0.25.4': optional: true - '@esbuild/win32-ia32@0.25.5': - optional: true - - '@esbuild/win32-ia32@0.25.8': - optional: true - - '@esbuild/win32-ia32@0.25.9': - optional: true - '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.25.10': - optional: true - '@esbuild/win32-x64@0.25.11': optional: true '@esbuild/win32-x64@0.25.4': optional: true - '@esbuild/win32-x64@0.25.5': - optional: true - - '@esbuild/win32-x64@0.25.8': - optional: true - - '@esbuild/win32-x64@0.25.9': - optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.37.0(jiti@2.6.1))': dependencies: escape-string-regexp: 4.0.0 @@ -17838,7 +15710,7 @@ snapshots: '@eslint/core': 0.16.0 levn: 0.4.1 - '@fastify/ajv-compiler@4.0.2': + '@fastify/ajv-compiler@4.0.4': dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -17846,25 +15718,23 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@fastify/busboy@3.2.0': {} - '@fastify/cors@11.1.0': dependencies: - fastify-plugin: 5.0.1 + fastify-plugin: 5.1.0 toad-cache: 3.7.0 '@fastify/error@4.2.0': {} '@fastify/fast-json-stringify-compiler@5.0.3': dependencies: - fast-json-stringify: 6.0.1 + fast-json-stringify: 6.1.1 '@fastify/formbody@8.0.2': dependencies: fast-querystring: 1.1.2 - fastify-plugin: 5.0.1 + fastify-plugin: 5.1.0 - '@fastify/forwarded@3.0.0': {} + '@fastify/forwarded@3.0.1': {} '@fastify/merge-json-schemas@0.2.1': dependencies: @@ -17873,13 +15743,13 @@ snapshots: '@fastify/middie@9.0.3': dependencies: '@fastify/error': 4.2.0 - fastify-plugin: 5.0.1 + fastify-plugin: 5.1.0 path-to-regexp: 8.2.0 reusify: 1.1.0 - '@fastify/proxy-addr@5.0.0': + '@fastify/proxy-addr@5.1.0': dependencies: - '@fastify/forwarded': 3.0.0 + '@fastify/forwarded': 3.0.1 ipaddr.js: 2.2.0 '@floating-ui/core@1.7.3': @@ -17920,9 +15790,9 @@ snapshots: protobufjs: 7.5.4 yargs: 17.7.2 - '@headlessui/tailwindcss@0.2.2(tailwindcss@4.1.11)': + '@headlessui/tailwindcss@0.2.2(tailwindcss@4.1.14)': dependencies: - tailwindcss: 4.1.11 + tailwindcss: 4.1.14 '@headlessui/vue@1.7.23(vue@3.5.22(typescript@5.8.3))': dependencies: @@ -17936,7 +15806,7 @@ snapshots: js-yaml: 4.1.0 lodash: 4.17.21 - '@hey-api/openapi-ts@0.80.8(magicast@0.3.5)(typescript@5.8.3)': + '@hey-api/openapi-ts@0.80.18(magicast@0.3.5)(typescript@5.8.3)': dependencies: '@hey-api/json-schema-ref-parser': 1.0.6 ansi-colors: 4.1.3 @@ -17944,15 +15814,16 @@ snapshots: color-support: 1.1.3 commander: 13.0.0 handlebars: 4.7.8 + js-yaml: 4.1.0 open: 10.1.2 semver: 7.7.2 typescript: 5.8.3 transitivePeerDependencies: - magicast - '@hono/node-server@1.19.5(hono@4.8.12)': + '@hono/node-server@1.19.5(hono@4.10.1)': dependencies: - hono: 4.8.12 + hono: 4.10.1 '@humanfs/core@0.19.1': {} @@ -17993,7 +15864,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/simple-icons@1.2.47': + '@iconify-json/simple-icons@1.2.54': dependencies: '@iconify/types': 2.0.0 @@ -18182,138 +16053,143 @@ snapshots: '@inquirer/ansi@1.0.1': {} - '@inquirer/checkbox@4.2.0(@types/node@22.17.0)': + '@inquirer/checkbox@4.3.0(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.9(@types/node@22.17.0) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.11) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/confirm@5.1.19(@types/node@22.17.0)': + '@inquirer/confirm@5.1.19(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/type': 3.0.9(@types/node@22.17.0) + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/core@10.3.0(@types/node@22.17.0)': + '@inquirer/core@10.3.0(@types/node@22.18.11)': dependencies: '@inquirer/ansi': 1.0.1 '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.17.0) + '@inquirer/type': 3.0.9(@types/node@22.18.11) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/editor@4.2.15(@types/node@22.17.0)': + '@inquirer/editor@4.2.21(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/type': 3.0.9(@types/node@22.17.0) - external-editor: 3.1.0 + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/external-editor': 1.0.2(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/expand@4.0.17(@types/node@22.17.0)': + '@inquirer/expand@4.0.21(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/type': 3.0.9(@types/node@22.17.0) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/figures@1.0.13': {} + '@inquirer/external-editor@1.0.2(@types/node@22.18.11)': + dependencies: + chardet: 2.1.0 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 22.18.11 '@inquirer/figures@1.0.14': {} - '@inquirer/input@4.2.1(@types/node@22.17.0)': + '@inquirer/input@4.2.5(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/type': 3.0.9(@types/node@22.17.0) + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/number@3.0.17(@types/node@22.17.0)': + '@inquirer/number@3.0.21(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/type': 3.0.9(@types/node@22.17.0) + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/password@4.0.17(@types/node@22.17.0)': + '@inquirer/password@4.0.21(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/type': 3.0.9(@types/node@22.17.0) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.17.0 - - '@inquirer/prompts@7.3.2(@types/node@22.17.0)': - dependencies: - '@inquirer/checkbox': 4.2.0(@types/node@22.17.0) - '@inquirer/confirm': 5.1.19(@types/node@22.17.0) - '@inquirer/editor': 4.2.15(@types/node@22.17.0) - '@inquirer/expand': 4.0.17(@types/node@22.17.0) - '@inquirer/input': 4.2.1(@types/node@22.17.0) - '@inquirer/number': 3.0.17(@types/node@22.17.0) - '@inquirer/password': 4.0.17(@types/node@22.17.0) - '@inquirer/rawlist': 4.1.5(@types/node@22.17.0) - '@inquirer/search': 3.1.0(@types/node@22.17.0) - '@inquirer/select': 4.3.1(@types/node@22.17.0) + '@types/node': 22.18.11 + + '@inquirer/prompts@7.3.2(@types/node@22.18.11)': + dependencies: + '@inquirer/checkbox': 4.3.0(@types/node@22.18.11) + '@inquirer/confirm': 5.1.19(@types/node@22.18.11) + '@inquirer/editor': 4.2.21(@types/node@22.18.11) + '@inquirer/expand': 4.0.21(@types/node@22.18.11) + '@inquirer/input': 4.2.5(@types/node@22.18.11) + '@inquirer/number': 3.0.21(@types/node@22.18.11) + '@inquirer/password': 4.0.21(@types/node@22.18.11) + '@inquirer/rawlist': 4.1.9(@types/node@22.18.11) + '@inquirer/search': 3.2.0(@types/node@22.18.11) + '@inquirer/select': 4.4.0(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.17.0 - - '@inquirer/prompts@7.8.0(@types/node@22.17.0)': - dependencies: - '@inquirer/checkbox': 4.2.0(@types/node@22.17.0) - '@inquirer/confirm': 5.1.19(@types/node@22.17.0) - '@inquirer/editor': 4.2.15(@types/node@22.17.0) - '@inquirer/expand': 4.0.17(@types/node@22.17.0) - '@inquirer/input': 4.2.1(@types/node@22.17.0) - '@inquirer/number': 3.0.17(@types/node@22.17.0) - '@inquirer/password': 4.0.17(@types/node@22.17.0) - '@inquirer/rawlist': 4.1.5(@types/node@22.17.0) - '@inquirer/search': 3.1.0(@types/node@22.17.0) - '@inquirer/select': 4.3.1(@types/node@22.17.0) + '@types/node': 22.18.11 + + '@inquirer/prompts@7.8.0(@types/node@22.18.11)': + dependencies: + '@inquirer/checkbox': 4.3.0(@types/node@22.18.11) + '@inquirer/confirm': 5.1.19(@types/node@22.18.11) + '@inquirer/editor': 4.2.21(@types/node@22.18.11) + '@inquirer/expand': 4.0.21(@types/node@22.18.11) + '@inquirer/input': 4.2.5(@types/node@22.18.11) + '@inquirer/number': 3.0.21(@types/node@22.18.11) + '@inquirer/password': 4.0.21(@types/node@22.18.11) + '@inquirer/rawlist': 4.1.9(@types/node@22.18.11) + '@inquirer/search': 3.2.0(@types/node@22.18.11) + '@inquirer/select': 4.4.0(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/rawlist@4.1.5(@types/node@22.17.0)': + '@inquirer/rawlist@4.1.9(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/type': 3.0.9(@types/node@22.17.0) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/search@3.1.0(@types/node@22.17.0)': + '@inquirer/search@3.2.0(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.9(@types/node@22.17.0) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.11) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/select@4.3.1(@types/node@22.17.0)': + '@inquirer/select@4.4.0(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.17.0) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.9(@types/node@22.17.0) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.11) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 - '@inquirer/type@3.0.9(@types/node@22.17.0)': + '@inquirer/type@3.0.9(@types/node@22.18.11)': optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 '@internationalized/date@3.10.0': dependencies: @@ -18323,8 +16199,6 @@ snapshots: dependencies: '@swc/helpers': 0.5.17 - '@ioredis/commands@1.3.0': {} - '@ioredis/commands@1.4.0': {} '@isaacs/balanced-match@4.0.1': {} @@ -18348,28 +16222,18 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.12': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/source-map@0.3.10': + '@jridgewell/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/source-map@0.3.11': dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -18377,11 +16241,6 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.29': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -18498,7 +16357,7 @@ snapshots: non-layered-tidy-tree-layout: 2.0.2 optional: true - '@mermaid-js/parser@0.6.2': + '@mermaid-js/parser@0.6.3': dependencies: langium: 3.3.1 @@ -18511,79 +16370,76 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/nice-android-arm-eabi@1.0.4': + '@napi-rs/nice-android-arm-eabi@1.1.1': + optional: true + + '@napi-rs/nice-android-arm64@1.1.1': optional: true - '@napi-rs/nice-android-arm64@1.0.4': + '@napi-rs/nice-darwin-arm64@1.1.1': optional: true - '@napi-rs/nice-darwin-arm64@1.0.4': + '@napi-rs/nice-darwin-x64@1.1.1': optional: true - '@napi-rs/nice-darwin-x64@1.0.4': + '@napi-rs/nice-freebsd-x64@1.1.1': optional: true - '@napi-rs/nice-freebsd-x64@1.0.4': + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': optional: true - '@napi-rs/nice-linux-arm-gnueabihf@1.0.4': + '@napi-rs/nice-linux-arm64-gnu@1.1.1': optional: true - '@napi-rs/nice-linux-arm64-gnu@1.0.4': + '@napi-rs/nice-linux-arm64-musl@1.1.1': optional: true - '@napi-rs/nice-linux-arm64-musl@1.0.4': + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': optional: true - '@napi-rs/nice-linux-ppc64-gnu@1.0.4': + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': optional: true - '@napi-rs/nice-linux-riscv64-gnu@1.0.4': + '@napi-rs/nice-linux-s390x-gnu@1.1.1': optional: true - '@napi-rs/nice-linux-s390x-gnu@1.0.4': + '@napi-rs/nice-linux-x64-gnu@1.1.1': optional: true - '@napi-rs/nice-linux-x64-gnu@1.0.4': + '@napi-rs/nice-linux-x64-musl@1.1.1': optional: true - '@napi-rs/nice-linux-x64-musl@1.0.4': + '@napi-rs/nice-openharmony-arm64@1.1.1': optional: true - '@napi-rs/nice-win32-arm64-msvc@1.0.4': + '@napi-rs/nice-win32-arm64-msvc@1.1.1': optional: true - '@napi-rs/nice-win32-ia32-msvc@1.0.4': + '@napi-rs/nice-win32-ia32-msvc@1.1.1': optional: true - '@napi-rs/nice-win32-x64-msvc@1.0.4': + '@napi-rs/nice-win32-x64-msvc@1.1.1': optional: true - '@napi-rs/nice@1.0.4': + '@napi-rs/nice@1.1.1': optionalDependencies: - '@napi-rs/nice-android-arm-eabi': 1.0.4 - '@napi-rs/nice-android-arm64': 1.0.4 - '@napi-rs/nice-darwin-arm64': 1.0.4 - '@napi-rs/nice-darwin-x64': 1.0.4 - '@napi-rs/nice-freebsd-x64': 1.0.4 - '@napi-rs/nice-linux-arm-gnueabihf': 1.0.4 - '@napi-rs/nice-linux-arm64-gnu': 1.0.4 - '@napi-rs/nice-linux-arm64-musl': 1.0.4 - '@napi-rs/nice-linux-ppc64-gnu': 1.0.4 - '@napi-rs/nice-linux-riscv64-gnu': 1.0.4 - '@napi-rs/nice-linux-s390x-gnu': 1.0.4 - '@napi-rs/nice-linux-x64-gnu': 1.0.4 - '@napi-rs/nice-linux-x64-musl': 1.0.4 - '@napi-rs/nice-win32-arm64-msvc': 1.0.4 - '@napi-rs/nice-win32-ia32-msvc': 1.0.4 - '@napi-rs/nice-win32-x64-msvc': 1.0.4 - optional: true - - '@napi-rs/wasm-runtime@1.0.6': - dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 - '@tybys/wasm-util': 0.10.1 + '@napi-rs/nice-android-arm-eabi': 1.1.1 + '@napi-rs/nice-android-arm64': 1.1.1 + '@napi-rs/nice-darwin-arm64': 1.1.1 + '@napi-rs/nice-darwin-x64': 1.1.1 + '@napi-rs/nice-freebsd-x64': 1.1.1 + '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1 + '@napi-rs/nice-linux-arm64-gnu': 1.1.1 + '@napi-rs/nice-linux-arm64-musl': 1.1.1 + '@napi-rs/nice-linux-ppc64-gnu': 1.1.1 + '@napi-rs/nice-linux-riscv64-gnu': 1.1.1 + '@napi-rs/nice-linux-s390x-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-musl': 1.1.1 + '@napi-rs/nice-openharmony-arm64': 1.1.1 + '@napi-rs/nice-win32-arm64-msvc': 1.1.1 + '@napi-rs/nice-win32-ia32-msvc': 1.1.1 + '@napi-rs/nice-win32-x64-msvc': 1.1.1 optional: true '@napi-rs/wasm-runtime@1.0.7': @@ -18593,12 +16449,12 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@nestjs/cli@11.0.10(@swc/cli@0.7.8(@swc/core@1.13.20(@swc/helpers@0.5.17))(chokidar@4.0.3))(@swc/core@1.13.20(@swc/helpers@0.5.17))(@types/node@22.17.0)': + '@nestjs/cli@11.0.10(@swc/cli@0.7.8(@swc/core@1.13.20(@swc/helpers@0.5.17))(chokidar@4.0.3))(@swc/core@1.13.20(@swc/helpers@0.5.17))(@types/node@22.18.11)': dependencies: '@angular-devkit/core': 19.2.15(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) - '@angular-devkit/schematics-cli': 19.2.15(@types/node@22.17.0)(chokidar@4.0.3) - '@inquirer/prompts': 7.8.0(@types/node@22.17.0) + '@angular-devkit/schematics-cli': 19.2.15(@types/node@22.18.11)(chokidar@4.0.3) + '@inquirer/prompts': 7.8.0(@types/node@22.18.11) '@nestjs/schematics': 11.0.9(chokidar@4.0.3)(typescript@5.8.3) ansis: 4.1.0 chokidar: 4.0.3 @@ -18693,96 +16549,6 @@ snapshots: optionalDependencies: '@nestjs/platform-express': 11.1.6(@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.6) - '@netlify/binary-info@1.0.0': {} - - '@netlify/blobs@9.1.2': - dependencies: - '@netlify/dev-utils': 2.2.0 - '@netlify/runtime-utils': 1.3.1 - - '@netlify/dev-utils@2.2.0': - dependencies: - '@whatwg-node/server': 0.9.71 - chokidar: 4.0.3 - decache: 4.6.2 - dot-prop: 9.0.0 - env-paths: 3.0.0 - find-up: 7.0.0 - lodash.debounce: 4.0.8 - netlify: 13.3.5 - parse-gitignore: 2.0.0 - uuid: 11.1.0 - write-file-atomic: 6.0.0 - - '@netlify/functions@3.1.10(encoding@0.1.13)(rollup@4.52.4)': - dependencies: - '@netlify/blobs': 9.1.2 - '@netlify/dev-utils': 2.2.0 - '@netlify/serverless-functions-api': 1.41.2 - '@netlify/zip-it-and-ship-it': 12.2.1(encoding@0.1.13)(rollup@4.52.4) - cron-parser: 4.9.0 - decache: 4.6.2 - extract-zip: 2.0.1 - is-stream: 4.0.1 - jwt-decode: 4.0.0 - lambda-local: 2.2.0 - read-package-up: 11.0.0 - source-map-support: 0.5.21 - transitivePeerDependencies: - - encoding - - react-native-b4a - - rollup - - supports-color - - '@netlify/open-api@2.37.0': {} - - '@netlify/runtime-utils@1.3.1': {} - - '@netlify/serverless-functions-api@1.41.2': {} - - '@netlify/serverless-functions-api@2.1.3': {} - - '@netlify/zip-it-and-ship-it@12.2.1(encoding@0.1.13)(rollup@4.52.4)': - dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.0 - '@netlify/binary-info': 1.0.0 - '@netlify/serverless-functions-api': 2.1.3 - '@vercel/nft': 0.29.4(encoding@0.1.13)(rollup@4.52.4) - archiver: 7.0.1 - common-path-prefix: 3.0.0 - copy-file: 11.0.0 - es-module-lexer: 1.7.0 - esbuild: 0.25.5 - execa: 8.0.1 - fast-glob: 3.3.3 - filter-obj: 6.1.0 - find-up: 7.0.0 - is-builtin-module: 3.2.1 - is-path-inside: 4.0.0 - junk: 4.0.1 - locate-path: 7.2.0 - merge-options: 3.0.4 - minimatch: 9.0.5 - normalize-path: 3.0.0 - p-map: 7.0.3 - path-exists: 5.0.0 - precinct: 12.2.0 - require-package-name: 2.0.1 - resolve: 2.0.0-next.5 - semver: 7.7.3 - tmp-promise: 3.0.3 - toml: 3.0.0 - unixify: 1.0.0 - urlpattern-polyfill: 8.0.2 - yargs: 17.7.2 - zod: 3.25.76 - transitivePeerDependencies: - - encoding - - react-native-b4a - - rollup - - supports-color - '@next/env@15.5.6': {} '@next/swc-darwin-arm64@15.5.6': @@ -18833,9 +16599,9 @@ snapshots: mkdirp: 1.0.4 rimraf: 3.0.2 - '@nuxt/cli@3.29.2(magicast@0.3.5)': + '@nuxt/cli@3.29.3(magicast@0.3.5)': dependencies: - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) citty: 0.1.6 clipboardy: 5.0.0 confbox: 0.2.2 @@ -18857,7 +16623,7 @@ snapshots: scule: 1.3.0 semver: 7.7.3 srvx: 0.8.16 - std-env: 3.9.0 + std-env: 3.10.0 tinyexec: 1.0.1 ufo: 1.6.1 undici: 7.16.0 @@ -18867,11 +16633,11 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@2.6.5(magicast@0.3.5)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@nuxt/devtools-kit@2.6.5(magicast@0.3.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@nuxt/kit': 3.19.3(magicast@0.3.5) execa: 8.0.1 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - magicast @@ -18886,12 +16652,12 @@ snapshots: prompts: 2.4.2 semver: 7.7.3 - '@nuxt/devtools@2.6.5(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@nuxt/devtools@2.6.5(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: - '@nuxt/devtools-kit': 2.6.5(magicast@0.3.5)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@nuxt/devtools-kit': 2.6.5(magicast@0.3.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@nuxt/devtools-wizard': 2.6.5 '@nuxt/kit': 3.19.3(magicast@0.3.5) - '@vue/devtools-core': 7.7.7(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@vue/devtools-core': 7.7.7(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) '@vue/devtools-kit': 7.7.7 birpc: 2.6.1 consola: 3.4.2 @@ -18916,9 +16682,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 1.0.0 tinyglobby: 0.2.15 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-inspect: 11.3.3(@nuxt/kit@3.19.3(magicast@0.3.5))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - vite-plugin-vue-tracer: 1.0.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-plugin-inspect: 11.3.3(@nuxt/kit@3.19.3(magicast@0.3.5))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite-plugin-vue-tracer: 1.0.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) which: 5.0.0 ws: 8.18.3 transitivePeerDependencies: @@ -18929,7 +16695,7 @@ snapshots: '@nuxt/kit@3.19.3(magicast@0.3.5)': dependencies: - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 @@ -18946,18 +16712,18 @@ snapshots: rc9: 2.1.2 scule: 1.3.0 semver: 7.7.3 - std-env: 3.9.0 + std-env: 3.10.0 tinyglobby: 0.2.15 ufo: 1.6.1 unctx: 2.4.1 - unimport: 5.4.1 + unimport: 5.5.0 untyped: 2.0.0 transitivePeerDependencies: - magicast '@nuxt/kit@4.1.3(magicast@0.3.5)': dependencies: - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 @@ -18973,11 +16739,11 @@ snapshots: rc9: 2.1.2 scule: 1.3.0 semver: 7.7.3 - std-env: 3.9.0 + std-env: 3.10.0 tinyglobby: 0.2.15 ufo: 1.6.1 unctx: 2.4.1 - unimport: 5.4.1 + unimport: 5.5.0 untyped: 2.0.0 transitivePeerDependencies: - magicast @@ -18993,7 +16759,7 @@ snapshots: defu: 6.1.4 pathe: 2.0.3 pkg-types: 2.3.0 - std-env: 3.9.0 + std-env: 3.10.0 ufo: 1.6.1 '@nuxt/telemetry@2.6.6(magicast@0.3.5)': @@ -19009,16 +16775,16 @@ snapshots: package-manager-detector: 1.4.1 pathe: 2.0.3 rc9: 2.1.2 - std-env: 3.9.0 + std-env: 3.10.0 transitivePeerDependencies: - magicast - '@nuxt/vite-builder@4.1.3(@types/node@24.8.1)(eslint@9.37.0(jiti@2.6.1))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1)': + '@nuxt/vite-builder@4.1.3(@types/node@22.18.11)(eslint@9.37.0(jiti@2.6.1))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1)': dependencies: '@nuxt/kit': 4.1.3(magicast@0.3.5) '@rollup/plugin-replace': 6.0.2(rollup@4.52.4) - '@vitejs/plugin-vue': 6.0.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) - '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@vitejs/plugin-vue': 6.0.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) autoprefixer: 10.4.21(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.1(postcss@8.5.6) @@ -19036,13 +16802,13 @@ snapshots: pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 - rollup-plugin-visualizer: 6.0.4(rollup@4.52.4) - std-env: 3.9.0 + rollup-plugin-visualizer: 6.0.5(rollup@4.52.4) + std-env: 3.10.0 ufo: 1.6.1 unenv: 2.0.0-rc.21 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-checker: 0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-plugin-checker: 0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vue: 3.5.22(typescript@5.8.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: @@ -19077,7 +16843,7 @@ snapshots: '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.2) '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.2) '@octokit/types': 12.6.0 - undici: 6.21.3 + undici: 6.22.0 '@octokit/auth-action@4.1.0': dependencies: @@ -19897,7 +17663,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.206.0 - import-in-the-middle: 1.14.4 + import-in-the-middle: 1.15.0 require-in-the-middle: 8.0.0 transitivePeerDependencies: - supports-color @@ -20101,7 +17867,7 @@ snapshots: '@oxc-minify/binding-wasm32-wasi@0.94.0': dependencies: - '@napi-rs/wasm-runtime': 1.0.6 + '@napi-rs/wasm-runtime': 1.0.7 optional: true '@oxc-minify/binding-win32-arm64-msvc@0.94.0': @@ -20148,7 +17914,7 @@ snapshots: '@oxc-parser/binding-wasm32-wasi@0.94.0': dependencies: - '@napi-rs/wasm-runtime': 1.0.6 + '@napi-rs/wasm-runtime': 1.0.7 optional: true '@oxc-parser/binding-win32-arm64-msvc@0.94.0': @@ -20256,7 +18022,7 @@ snapshots: '@oxc-transform/binding-wasm32-wasi@0.94.0': dependencies: - '@napi-rs/wasm-runtime': 1.0.6 + '@napi-rs/wasm-runtime': 1.0.7 optional: true '@oxc-transform/binding-win32-arm64-msvc@0.94.0': @@ -20343,7 +18109,7 @@ snapshots: '@pinia/colada@0.17.6(pinia@3.0.3(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3))': dependencies: - '@vue/devtools-api': 8.0.2 + '@vue/devtools-api': 8.0.3 pinia: 3.0.3(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)) vue: 3.5.22(typescript@5.8.3) @@ -20422,35 +18188,17 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.29': {} - '@rolldown/pluginutils@1.0.0-beta.35': {} - '@rolldown/pluginutils@1.0.0-beta.38': {} '@rolldown/pluginutils@1.0.0-beta.40': {} - '@rolldown/pluginutils@1.0.0-beta.42': {} - - '@rollup/plugin-alias@5.1.1(rollup@4.46.2)': - optionalDependencies: - rollup: 4.46.2 + '@rolldown/pluginutils@1.0.0-beta.43': {} '@rollup/plugin-alias@5.1.1(rollup@4.52.4)': optionalDependencies: rollup: 4.52.4 - '@rollup/plugin-commonjs@28.0.6(rollup@4.46.2)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.46.2) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.3) - is-reference: 1.2.1 - magic-string: 0.30.19 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.46.2 - - '@rollup/plugin-commonjs@28.0.6(rollup@4.52.4)': + '@rollup/plugin-commonjs@28.0.8(rollup@4.52.4)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.52.4) commondir: 1.0.1 @@ -20470,39 +18218,13 @@ snapshots: optionalDependencies: rollup: 4.52.4 - '@rollup/plugin-json@6.1.0(rollup@4.46.2)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.46.2) - optionalDependencies: - rollup: 4.46.2 - '@rollup/plugin-json@6.1.0(rollup@4.52.4)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.52.4) optionalDependencies: rollup: 4.52.4 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.46.2)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.46.2) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - optionalDependencies: - rollup: 4.46.2 - - '@rollup/plugin-node-resolve@16.0.1(rollup@4.52.4)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.52.4) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - optionalDependencies: - rollup: 4.52.4 - - '@rollup/plugin-node-resolve@16.0.2(rollup@4.52.4)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.52.4)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.52.4) '@types/resolve': 1.20.2 @@ -20512,13 +18234,6 @@ snapshots: optionalDependencies: rollup: 4.52.4 - '@rollup/plugin-replace@6.0.2(rollup@4.46.2)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.46.2) - magic-string: 0.30.19 - optionalDependencies: - rollup: 4.46.2 - '@rollup/plugin-replace@6.0.2(rollup@4.52.4)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.52.4) @@ -20538,22 +18253,6 @@ snapshots: optionalDependencies: rollup: 4.52.4 - '@rollup/pluginutils@5.2.0(rollup@4.46.2)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.46.2 - - '@rollup/pluginutils@5.3.0(rollup@4.46.2)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.46.2 - '@rollup/pluginutils@5.3.0(rollup@4.52.4)': dependencies: '@types/estree': 1.0.8 @@ -20562,195 +18261,69 @@ snapshots: optionalDependencies: rollup: 4.52.4 - '@rollup/rollup-android-arm-eabi@4.46.2': - optional: true - - '@rollup/rollup-android-arm-eabi@4.52.0': - optional: true - '@rollup/rollup-android-arm-eabi@4.52.4': optional: true - '@rollup/rollup-android-arm64@4.46.2': - optional: true - - '@rollup/rollup-android-arm64@4.52.0': - optional: true - '@rollup/rollup-android-arm64@4.52.4': optional: true - '@rollup/rollup-darwin-arm64@4.46.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.52.0': - optional: true - '@rollup/rollup-darwin-arm64@4.52.4': optional: true - '@rollup/rollup-darwin-x64@4.46.2': - optional: true - - '@rollup/rollup-darwin-x64@4.52.0': - optional: true - '@rollup/rollup-darwin-x64@4.52.4': optional: true - '@rollup/rollup-freebsd-arm64@4.46.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.52.0': - optional: true - '@rollup/rollup-freebsd-arm64@4.52.4': optional: true - '@rollup/rollup-freebsd-x64@4.46.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.52.0': - optional: true - '@rollup/rollup-freebsd-x64@4.52.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.52.0': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.52.0': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.52.0': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.52.0': - optional: true - '@rollup/rollup-linux-arm64-musl@4.52.4': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.0': - optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.46.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.52.0': - optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.52.0': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.2': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.52.0': - optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.52.0': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.52.0': - optional: true - '@rollup/rollup-linux-x64-gnu@4.52.4': optional: true - '@rollup/rollup-linux-x64-musl@4.46.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.52.0': - optional: true - '@rollup/rollup-linux-x64-musl@4.52.4': optional: true - '@rollup/rollup-openharmony-arm64@4.52.0': - optional: true - '@rollup/rollup-openharmony-arm64@4.52.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.52.0': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.52.0': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.4': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.0': - optional: true - '@rollup/rollup-win32-x64-gnu@4.52.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.52.0': - optional: true - '@rollup/rollup-win32-x64-msvc@4.52.4': optional: true @@ -20758,9 +18331,9 @@ snapshots: dependencies: zod: 3.24.1 - '@scalar/api-client@2.8.1(change-case@5.4.4)(jwt-decode@4.0.0)(tailwindcss@4.1.11)(typescript@5.8.3)': + '@scalar/api-client@2.8.1(change-case@5.4.4)(tailwindcss@4.1.14)(typescript@5.8.3)': dependencies: - '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.1.11) + '@headlessui/tailwindcss': 0.2.2(tailwindcss@4.1.14) '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.8.3)) '@scalar/analytics-client': 1.0.0 '@scalar/components': 0.15.1(typescript@5.8.3) @@ -20783,7 +18356,7 @@ snapshots: '@scalar/workspace-store': 0.17.1(typescript@5.8.3) '@types/har-format': 1.2.16 '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.8.3)) - '@vueuse/integrations': 13.9.0(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.22(typescript@5.8.3)) + '@vueuse/integrations': 13.9.0(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(vue@3.5.22(typescript@5.8.3)) focus-trap: 7.6.5 fuse.js: 7.1.0 js-base64: 3.7.8 @@ -20814,9 +18387,9 @@ snapshots: - typescript - universal-cookie - '@scalar/api-reference-react@0.8.1(change-case@5.4.4)(jwt-decode@4.0.0)(react@19.2.0)(tailwindcss@4.1.11)(typescript@5.8.3)': + '@scalar/api-reference-react@0.8.1(change-case@5.4.4)(react@19.2.0)(tailwindcss@4.1.14)(typescript@5.8.3)': dependencies: - '@scalar/api-reference': 1.38.1(change-case@5.4.4)(jwt-decode@4.0.0)(tailwindcss@4.1.11)(typescript@5.8.3) + '@scalar/api-reference': 1.38.1(change-case@5.4.4)(tailwindcss@4.1.14)(typescript@5.8.3) '@scalar/types': 0.3.2 react: 19.2.0 transitivePeerDependencies: @@ -20835,11 +18408,11 @@ snapshots: - typescript - universal-cookie - '@scalar/api-reference@1.38.1(change-case@5.4.4)(jwt-decode@4.0.0)(tailwindcss@4.1.11)(typescript@5.8.3)': + '@scalar/api-reference@1.38.1(change-case@5.4.4)(tailwindcss@4.1.14)(typescript@5.8.3)': dependencies: '@floating-ui/vue': 1.1.9(vue@3.5.22(typescript@5.8.3)) '@headlessui/vue': 1.7.23(vue@3.5.22(typescript@5.8.3)) - '@scalar/api-client': 2.8.1(change-case@5.4.4)(jwt-decode@4.0.0)(tailwindcss@4.1.11)(typescript@5.8.3) + '@scalar/api-client': 2.8.1(change-case@5.4.4)(tailwindcss@4.1.14)(typescript@5.8.3) '@scalar/code-highlight': 0.2.0 '@scalar/components': 0.15.1(typescript@5.8.3) '@scalar/helpers': 0.0.12 @@ -21304,19 +18877,17 @@ snapshots: '@sindresorhus/is@7.1.0': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@sindresorhus/merge-streams@4.0.0': {} '@solidjs/router@0.15.3(solid-js@1.9.9)': dependencies: solid-js: 1.9.9 - '@solidjs/start@1.2.0(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@solidjs/start@1.2.0(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@tanstack/server-functions-plugin': 1.121.21(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1)) + '@tanstack/server-functions-plugin': 1.121.21(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1)) cookie-es: 2.0.0 defu: 6.1.4 error-stack-parser: 2.1.4 @@ -21328,8 +18899,8 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.0.6(solid-js@1.9.9) tinyglobby: 0.2.15 - vinxi: 0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) - vite-plugin-solid: 2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vinxi: 0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) + vite-plugin-solid: 2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js @@ -21361,15 +18932,15 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/adapter-auto@6.1.1(@sveltejs/kit@2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': + '@sveltejs/adapter-auto@6.1.1(@sveltejs/kit@2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))': dependencies: - '@sveltejs/kit': 2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@sveltejs/kit': 2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@sveltejs/kit@2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@sveltejs/kit@2.47.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@standard-schema/spec': 1.0.0 '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -21382,49 +18953,28 @@ snapshots: set-cookie-parser: 2.7.1 sirv: 3.0.2 svelte: 5.40.2 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: '@opentelemetry/api': 1.9.0 - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - debug: 4.4.3 - svelte: 5.40.2 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - debug: 4.4.3 - svelte: 5.40.2 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) debug: 4.4.3 - deepmerge: 4.3.1 - magic-string: 0.30.19 svelte: 5.40.2 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) debug: 4.4.3 deepmerge: 4.3.1 magic-string: 0.30.19 svelte: 5.40.2 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - supports-color @@ -21436,13 +18986,14 @@ snapshots: commander: 8.3.0 minimatch: 9.0.5 piscina: 4.9.2 - semver: 7.7.2 + semver: 7.7.3 slash: 3.0.0 source-map: 0.7.6 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 optionalDependencies: chokidar: 4.0.3 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a - supports-color @@ -21507,7 +19058,7 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@swc/wasm@1.13.3': {} + '@swc/wasm@1.13.20': {} '@szmarczak/http-timer@4.0.6': dependencies: @@ -21517,15 +19068,15 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tanstack/angular-query-experimental@5.90.5(@angular/common@20.1.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@20.3.6(rxjs@7.8.2))': + '@tanstack/angular-query-experimental@5.90.5(@angular/common@20.3.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@20.3.6(rxjs@7.8.2))': dependencies: - '@angular/common': 20.1.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2) + '@angular/common': 20.3.6(@angular/core@20.3.6(rxjs@7.8.2))(rxjs@7.8.2) '@angular/core': 20.3.6(rxjs@7.8.2) '@tanstack/query-core': 5.90.5 optionalDependencies: '@tanstack/query-devtools': 5.90.1 - '@tanstack/directive-functions-plugin@1.121.21(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/directive-functions-plugin@1.121.21(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.4 @@ -21534,11 +19085,11 @@ snapshots: '@tanstack/router-utils': 1.133.3 babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@tanstack/directive-functions-plugin@1.133.3(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/directive-functions-plugin@1.133.3(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -21548,7 +19099,7 @@ snapshots: babel-dead-code-elimination: 1.0.10 pathe: 2.0.3 tiny-invariant: 1.3.3 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -21573,13 +19124,13 @@ snapshots: '@tanstack/query-core': 5.90.5 react: 19.2.0 - '@tanstack/react-router-devtools@1.133.3(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.3)(@types/node@22.17.0)(csstype@3.1.3)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.133.3(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.3)(@types/node@22.18.11)(csstype@3.1.3)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@tanstack/react-router': 1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.133.3(@tanstack/router-core@1.133.3)(@types/node@22.17.0)(csstype@3.1.3)(jiti@2.6.1)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/router-devtools-core': 1.133.3(@tanstack/router-core@1.133.3)(@types/node@22.18.11)(csstype@3.1.3)(jiti@2.6.1)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@tanstack/router-core' - '@types/node' @@ -21629,31 +19180,31 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-server@1.133.5(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-start-server@1.133.6(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/history': 1.133.3 '@tanstack/react-router': 1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/router-core': 1.133.3 '@tanstack/start-client-core': 1.133.5 - '@tanstack/start-server-core': 1.133.5(crossws@0.4.1(srvx@0.8.16)) + '@tanstack/start-server-core': 1.133.6(crossws@0.4.1(srvx@0.8.16)) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: - crossws - '@tanstack/react-start@1.133.5(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2)': + '@tanstack/react-start@1.133.6(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2)': dependencies: '@tanstack/react-router': 1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-start-client': 1.133.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-start-server': 1.133.5(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-start-server': 1.133.6(crossws@0.4.1(srvx@0.8.16))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/router-utils': 1.133.3 '@tanstack/start-client-core': 1.133.5 - '@tanstack/start-plugin-core': 1.133.5(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(crossws@0.4.1(srvx@0.8.16))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2) - '@tanstack/start-server-core': 1.133.5(crossws@0.4.1(srvx@0.8.16)) + '@tanstack/start-plugin-core': 1.133.6(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(crossws@0.4.1(srvx@0.8.16))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2) + '@tanstack/start-server-core': 1.133.6(crossws@0.4.1(srvx@0.8.16)) pathe: 2.0.3 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@rsbuild/core' - crossws @@ -21678,14 +19229,14 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.133.3(@tanstack/router-core@1.133.3)(@types/node@22.17.0)(csstype@3.1.3)(jiti@2.6.1)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.133.3(@tanstack/router-core@1.133.3)(@types/node@22.18.11)(csstype@3.1.3)(jiti@2.6.1)(solid-js@1.9.9)(terser@5.44.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@tanstack/router-core': 1.133.3 clsx: 2.1.1 goober: 2.1.18(csstype@3.1.3) solid-js: 1.9.9 tiny-invariant: 1.3.3 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: csstype: 3.1.3 transitivePeerDependencies: @@ -21714,7 +19265,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.133.4(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2)': + '@tanstack/router-plugin@1.133.4(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2)': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -21732,8 +19283,8 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-solid: 2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-plugin-solid: 2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) webpack: 5.100.2 transitivePeerDependencies: - supports-color @@ -21756,7 +19307,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.21(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/server-functions-plugin@1.121.21(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.4 @@ -21765,14 +19316,14 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/directive-functions-plugin': 1.121.21(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/directive-functions-plugin': 1.121.21(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color - vite - '@tanstack/server-functions-plugin@1.133.3(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/server-functions-plugin@1.133.3(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -21781,7 +19332,7 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/directive-functions-plugin': 1.133.3(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/directive-functions-plugin': 1.133.3(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -21801,7 +19352,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.133.5(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(crossws@0.4.1(srvx@0.8.16))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2)': + '@tanstack/start-plugin-core@1.133.6(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(crossws@0.4.1(srvx@0.8.16))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2)': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.4 @@ -21809,11 +19360,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.133.3 '@tanstack/router-generator': 1.133.4 - '@tanstack/router-plugin': 1.133.4(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2) + '@tanstack/router-plugin': 1.133.4(@tanstack/react-router@1.133.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.100.2) '@tanstack/router-utils': 1.133.3 - '@tanstack/server-functions-plugin': 1.133.3(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@tanstack/server-functions-plugin': 1.133.3(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@tanstack/start-client-core': 1.133.5 - '@tanstack/start-server-core': 1.133.5(crossws@0.4.1(srvx@0.8.16)) + '@tanstack/start-server-core': 1.133.6(crossws@0.4.1(srvx@0.8.16)) babel-dead-code-elimination: 1.0.10 cheerio: 1.1.2 exsolve: 1.0.7 @@ -21821,8 +19372,8 @@ snapshots: srvx: 0.8.16 tinyglobby: 0.2.15 ufo: 1.6.1 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) xmlbuilder2: 3.1.1 zod: 3.25.76 transitivePeerDependencies: @@ -21833,7 +19384,7 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-server-core@1.133.5(crossws@0.4.1(srvx@0.8.16))': + '@tanstack/start-server-core@1.133.6(crossws@0.4.1(srvx@0.8.16))': dependencies: '@tanstack/history': 1.133.3 '@tanstack/router-core': 1.133.3 @@ -21876,7 +19427,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -21895,7 +19446,7 @@ snapshots: '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@testing-library/dom': 10.4.1 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -21903,13 +19454,13 @@ snapshots: '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@testing-library/svelte@5.2.8(svelte@5.40.2)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)': + '@testing-library/svelte@5.2.8(svelte@5.40.2)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)': dependencies: '@testing-library/dom': 10.4.1 svelte: 5.40.2 optionalDependencies: - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -21919,7 +19470,7 @@ snapshots: dependencies: debug: 4.4.3 fflate: 0.8.2 - token-types: 6.0.4 + token-types: 6.1.1 transitivePeerDependencies: - supports-color @@ -21931,9 +19482,9 @@ snapshots: dependencies: typescript: 5.8.3 - '@ts-rest/core@3.52.1(@types/node@24.8.1)(zod@4.1.12)': + '@ts-rest/core@3.52.1(@types/node@22.18.11)(zod@4.1.12)': optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.11 zod: 4.1.12 '@tsconfig/node10@1.0.11': {} @@ -21978,12 +19529,12 @@ snapshots: '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 22.18.6 + '@types/node': 22.18.11 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.18.6 + '@types/node': 22.18.11 '@types/braces@3.0.5': {} @@ -22011,7 +19562,7 @@ snapshots: '@types/compression@1.8.1': dependencies: '@types/express': 5.0.3 - '@types/node': 22.17.0 + '@types/node': 22.18.11 '@types/connect@3.4.38': dependencies: @@ -22156,18 +19707,18 @@ snapshots: '@types/estree@1.0.8': {} - '@types/express-serve-static-core@5.0.7': + '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 22.18.6 + '@types/node': 22.18.11 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 - '@types/send': 0.17.5 + '@types/send': 1.2.0 '@types/express@5.0.3': dependencies: '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 5.0.7 - '@types/serve-static': 1.15.8 + '@types/express-serve-static-core': 5.1.0 + '@types/serve-static': 1.15.9 '@types/filesystem@0.0.36': dependencies: @@ -22238,29 +19789,10 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/node@22.17.0': - dependencies: - undici-types: 6.21.0 - '@types/node@22.18.11': dependencies: undici-types: 6.21.0 - '@types/node@22.18.6': - dependencies: - undici-types: 6.21.0 - - '@types/node@24.7.1': - dependencies: - undici-types: 7.14.0 - - '@types/node@24.8.1': - dependencies: - undici-types: 7.14.0 - optional: true - - '@types/normalize-package-data@2.4.4': {} - '@types/oracledb@6.5.2': dependencies: '@types/node': 22.18.11 @@ -22308,10 +19840,14 @@ snapshots: '@types/mime': 1.3.5 '@types/node': 22.18.11 - '@types/serve-static@1.15.8': + '@types/send@1.2.0': + dependencies: + '@types/node': 22.18.11 + + '@types/serve-static@1.15.9': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.18.6 + '@types/node': 22.18.11 '@types/send': 0.17.5 '@types/shimmer@1.2.0': {} @@ -22322,7 +19858,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 22.18.6 + '@types/node': 22.18.11 form-data: 4.0.4 '@types/supertest@6.0.3': @@ -22334,8 +19870,6 @@ snapshots: dependencies: '@types/node': 22.18.11 - '@types/triple-beam@1.3.5': {} - '@types/trusted-types@2.0.7': optional: true @@ -22352,7 +19886,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.18.6 + '@types/node': 22.18.11 '@types/yauzl@2.10.3': dependencies: @@ -22510,30 +20044,15 @@ snapshots: unhead: 2.0.19 vue: 3.5.22(typescript@5.8.3) - '@valibot/to-json-schema@1.3.0(valibot@1.1.0(typescript@5.8.3))': + '@upstash/redis@1.35.6': dependencies: - valibot: 1.1.0(typescript@5.8.3) + uncrypto: 0.1.3 - '@vercel/nft@0.29.4(encoding@0.1.13)(rollup@4.52.4)': - dependencies: - '@mapbox/node-pre-gyp': 2.0.0(encoding@0.1.13) - '@rollup/pluginutils': 5.3.0(rollup@4.52.4) - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) - async-sema: 3.1.1 - bindings: 1.5.0 - estree-walker: 2.0.2 - glob: 10.4.5 - graceful-fs: 4.2.11 - node-gyp-build: 4.8.4 - picomatch: 4.0.3 - resolve-from: 5.0.0 - transitivePeerDependencies: - - encoding - - rollup - - supports-color + '@valibot/to-json-schema@1.3.0(valibot@1.1.0(typescript@5.8.3))': + dependencies: + valibot: 1.1.0(typescript@5.8.3) - '@vercel/nft@0.30.2(encoding@0.1.13)(rollup@4.52.4)': + '@vercel/nft@0.30.3(encoding@0.1.13)(rollup@4.52.4)': dependencies: '@mapbox/node-pre-gyp': 2.0.0(encoding@0.1.13) '@rollup/pluginutils': 5.3.0(rollup@4.52.4) @@ -22569,12 +20088,12 @@ snapshots: mlly: 1.8.0 node-forge: 1.3.1 pathe: 1.1.2 - std-env: 3.9.0 + std-env: 3.10.0 ufo: 1.6.1 untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))': dependencies: '@babel/parser': 7.28.4 acorn: 8.15.0 @@ -22585,20 +20104,20 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) - '@vinxi/server-components@0.5.1(vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))': + '@vinxi/server-components@0.5.1(vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1)) acorn: 8.15.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.15.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) + vinxi: 0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1) - '@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@4.7.0(vite@6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -22606,35 +20125,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.6(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - - '@vitejs/plugin-react@5.0.3(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.35 - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - - '@vitejs/plugin-react@5.0.4(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.38 - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.0.4(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@5.0.4(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -22642,49 +20137,49 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.38 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.42 + '@rolldown/pluginutils': 1.0.0-beta.43 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4) - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vue: 3.5.22(typescript@5.8.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@22.17.0)(terser@5.44.0))(vue@3.5.22(typescript@5.8.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.20(@types/node@22.18.11)(terser@5.44.0))(vue@3.5.22(typescript@5.8.3))': dependencies: - vite: 5.4.19(@types/node@22.17.0)(terser@5.44.0) + vite: 5.4.20(@types/node@22.18.11)(terser@5.44.0) vue: 3.5.22(typescript@5.8.3) - '@vitejs/plugin-vue@6.0.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vue: 3.5.22(typescript@5.8.3) '@vitest/coverage-v8@3.2.4(vitest@3.2.4)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.4 - debug: 4.4.1 + ast-v8-to-istanbul: 0.3.7 + 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.1.7 - magic-string: 0.30.17 + istanbul-reports: 3.2.0 + magic-string: 0.30.19 magicast: 0.3.5 - std-env: 3.9.0 + std-env: 3.10.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -22695,7 +20190,7 @@ snapshots: eslint: 9.37.0(jiti@2.6.1) optionalDependencies: typescript: 5.8.3 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -22704,17 +20199,17 @@ snapshots: '@types/chai': 5.2.2 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.1 + chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - msw: 2.11.5(@types/node@22.17.0)(typescript@5.8.3) - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + msw: 2.11.5(@types/node@22.18.11)(typescript@5.8.3) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -22724,7 +20219,7 @@ snapshots: dependencies: '@vitest/utils': 3.2.4 pathe: 2.0.3 - strip-literal: 3.0.0 + strip-literal: 3.1.0 '@vitest/snapshot@3.2.4': dependencies: @@ -22734,7 +20229,7 @@ snapshots: '@vitest/spy@3.2.4': dependencies: - tinyspy: 4.0.3 + tinyspy: 4.0.4 '@vitest/ui@3.2.4(vitest@3.2.4)': dependencies: @@ -22742,39 +20237,35 @@ snapshots: fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 - sirv: 3.0.1 - tinyglobby: 0.2.14 + sirv: 3.0.2 + tinyglobby: 0.2.15 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/utils@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - loupe: 3.2.0 + loupe: 3.2.1 tinyrainbow: 2.0.0 - '@volar/kit@2.4.22(typescript@5.8.3)': + '@volar/kit@2.4.23(typescript@5.8.3)': dependencies: - '@volar/language-service': 2.4.22 - '@volar/typescript': 2.4.22 + '@volar/language-service': 2.4.23 + '@volar/typescript': 2.4.23 typesafe-path: 0.2.2 typescript: 5.8.3 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/language-core@2.4.22': - dependencies: - '@volar/source-map': 2.4.22 - '@volar/language-core@2.4.23': dependencies: '@volar/source-map': 2.4.23 - '@volar/language-server@2.4.22': + '@volar/language-server@2.4.23': dependencies: - '@volar/language-core': 2.4.22 - '@volar/language-service': 2.4.22 - '@volar/typescript': 2.4.22 + '@volar/language-core': 2.4.23 + '@volar/language-service': 2.4.23 + '@volar/typescript': 2.4.23 path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 @@ -22782,20 +20273,18 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/language-service@2.4.22': + '@volar/language-service@2.4.23': dependencies: - '@volar/language-core': 2.4.22 + '@volar/language-core': 2.4.23 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/source-map@2.4.22': {} - '@volar/source-map@2.4.23': {} - '@volar/typescript@2.4.22': + '@volar/typescript@2.4.23': dependencies: - '@volar/language-core': 2.4.22 + '@volar/language-core': 2.4.23 path-browserify: 1.0.1 vscode-uri: 3.1.0 @@ -22878,29 +20367,24 @@ snapshots: '@vue/compiler-dom': 3.5.22 '@vue/shared': 3.5.22 - '@vue/compiler-vue2@2.7.16': - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - '@vue/devtools-api@6.6.4': {} '@vue/devtools-api@7.7.7': dependencies: '@vue/devtools-kit': 7.7.7 - '@vue/devtools-api@8.0.2': + '@vue/devtools-api@8.0.3': dependencies: - '@vue/devtools-kit': 8.0.2 + '@vue/devtools-kit': 8.0.3 - '@vue/devtools-core@7.7.7(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': + '@vue/devtools-core@7.7.7(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3))': dependencies: '@vue/devtools-kit': 7.7.7 '@vue/devtools-shared': 7.7.7 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite-hot-client: 2.1.0(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vue: 3.5.22(typescript@5.8.3) transitivePeerDependencies: - vite @@ -22908,16 +20392,16 @@ snapshots: '@vue/devtools-kit@7.7.7': dependencies: '@vue/devtools-shared': 7.7.7 - birpc: 2.5.0 + birpc: 2.6.1 hookable: 5.5.3 mitt: 3.0.1 perfect-debounce: 1.0.0 speakingurl: 14.0.1 superjson: 2.2.2 - '@vue/devtools-kit@8.0.2': + '@vue/devtools-kit@8.0.3': dependencies: - '@vue/devtools-shared': 8.0.2 + '@vue/devtools-shared': 8.0.3 birpc: 2.6.1 hookable: 5.5.3 mitt: 3.0.1 @@ -22929,29 +20413,16 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/devtools-shared@8.0.2': + '@vue/devtools-shared@8.0.3': dependencies: rfdc: 1.4.1 - '@vue/language-core@3.0.7(typescript@5.8.3)': - dependencies: - '@volar/language-core': 2.4.23 - '@vue/compiler-dom': 3.5.22 - '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.22 - alien-signals: 2.0.7 - muggle-string: 0.4.1 - path-browserify: 1.0.1 - picomatch: 4.0.3 - optionalDependencies: - typescript: 5.8.3 - '@vue/language-core@3.1.1(typescript@5.8.3)': dependencies: '@volar/language-core': 2.4.23 '@vue/compiler-dom': 3.5.22 '@vue/shared': 3.5.22 - alien-signals: 3.0.0 + alien-signals: 3.0.1 muggle-string: 0.4.1 path-browserify: 1.0.1 picomatch: 4.0.3 @@ -22980,8 +20451,6 @@ snapshots: '@vue/shared': 3.5.22 vue: 3.5.22(typescript@5.8.3) - '@vue/shared@3.5.18': {} - '@vue/shared@3.5.22': {} '@vue/test-utils@2.4.6': @@ -23015,7 +20484,7 @@ snapshots: '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.8.3)) vue: 3.5.22(typescript@5.8.3) - '@vueuse/integrations@12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(jwt-decode@4.0.0)(typescript@5.8.3)': + '@vueuse/integrations@12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(typescript@5.8.3)': dependencies: '@vueuse/core': 12.8.2(typescript@5.8.3) '@vueuse/shared': 12.8.2(typescript@5.8.3) @@ -23024,11 +20493,10 @@ snapshots: change-case: 5.4.4 focus-trap: 7.6.5 fuse.js: 7.1.0 - jwt-decode: 4.0.0 transitivePeerDependencies: - typescript - '@vueuse/integrations@13.9.0(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.22(typescript@5.8.3))': + '@vueuse/integrations@13.9.0(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(vue@3.5.22(typescript@5.8.3))': dependencies: '@vueuse/core': 13.9.0(vue@3.5.22(typescript@5.8.3)) '@vueuse/shared': 13.9.0(vue@3.5.22(typescript@5.8.3)) @@ -23037,7 +20505,6 @@ snapshots: change-case: 5.4.4 focus-trap: 7.6.5 fuse.js: 7.1.0 - jwt-decode: 4.0.0 '@vueuse/metadata@10.11.1': {} @@ -23148,43 +20615,15 @@ snapshots: '@webext-core/match-patterns@1.0.3': {} - '@whatwg-node/disposablestack@0.0.6': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@whatwg-node/fetch@0.10.10': - dependencies: - '@whatwg-node/node-fetch': 0.7.25 - urlpattern-polyfill: 10.1.0 - - '@whatwg-node/node-fetch@0.7.25': - dependencies: - '@fastify/busboy': 3.2.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@whatwg-node/promise-helpers@1.3.2': - dependencies: - tslib: 2.8.1 - - '@whatwg-node/server@0.9.71': - dependencies: - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.10 - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - '@wxt-dev/browser@0.1.4': dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 - '@wxt-dev/module-react@1.1.5(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(wxt@0.20.11(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@wxt-dev/module-react@1.1.5(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(wxt@0.20.11(@types/node@22.18.11)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@vitejs/plugin-react': 5.0.3(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - wxt: 0.20.11(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + '@vitejs/plugin-react': 5.0.4(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + wxt: 0.20.11(@types/node@22.18.11)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - vite @@ -23213,6 +20652,7 @@ snapshots: '@xhmikosr/os-filter-obj': 3.0.0 bin-version-check: 5.1.0 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a - supports-color @@ -23222,6 +20662,7 @@ snapshots: is-stream: 2.0.1 tar-stream: 3.1.7 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a - supports-color @@ -23233,6 +20674,7 @@ snapshots: seek-bzip: 2.0.0 unbzip2-stream: 1.4.3 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a - supports-color @@ -23242,6 +20684,7 @@ snapshots: file-type: 20.5.0 is-stream: 2.0.1 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a - supports-color @@ -23262,6 +20705,7 @@ snapshots: graceful-fs: 4.2.11 strip-dirs: 3.0.0 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a - supports-color @@ -23277,6 +20721,7 @@ snapshots: get-stream: 6.0.1 got: 13.0.0 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a - supports-color @@ -23284,7 +20729,7 @@ snapshots: dependencies: arch: 3.0.0 - '@xmldom/xmldom@0.8.10': {} + '@xmldom/xmldom@0.8.11': {} '@xtuc/ieee754@1.2.0': {} @@ -23399,26 +20844,24 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.35.0: - dependencies: - '@algolia/abtesting': 1.1.0 - '@algolia/client-abtesting': 5.35.0 - '@algolia/client-analytics': 5.35.0 - '@algolia/client-common': 5.35.0 - '@algolia/client-insights': 5.35.0 - '@algolia/client-personalization': 5.35.0 - '@algolia/client-query-suggestions': 5.35.0 - '@algolia/client-search': 5.35.0 - '@algolia/ingestion': 1.35.0 - '@algolia/monitoring': 1.35.0 - '@algolia/recommend': 5.35.0 - '@algolia/requester-browser-xhr': 5.35.0 - '@algolia/requester-fetch': 5.35.0 - '@algolia/requester-node-http': 5.35.0 - - alien-signals@2.0.7: {} - - alien-signals@3.0.0: {} + algoliasearch@5.40.1: + dependencies: + '@algolia/abtesting': 1.6.1 + '@algolia/client-abtesting': 5.40.1 + '@algolia/client-analytics': 5.40.1 + '@algolia/client-common': 5.40.1 + '@algolia/client-insights': 5.40.1 + '@algolia/client-personalization': 5.40.1 + '@algolia/client-query-suggestions': 5.40.1 + '@algolia/client-search': 5.40.1 + '@algolia/ingestion': 1.40.1 + '@algolia/monitoring': 1.40.1 + '@algolia/recommend': 5.40.1 + '@algolia/requester-browser-xhr': 5.40.1 + '@algolia/requester-fetch': 5.40.1 + '@algolia/requester-node-http': 5.40.1 + + alien-signals@3.0.1: {} ansi-align@3.0.1: dependencies: @@ -23426,10 +20869,6 @@ snapshots: ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-escapes@7.1.1: dependencies: environment: 1.1.0 @@ -23524,6 +20963,7 @@ snapshots: tar-stream: 3.1.7 zip-stream: 6.0.1 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a are-docs-informative@0.0.2: {} @@ -23548,11 +20988,6 @@ snapshots: aria-query@5.3.2: {} - arktype@2.1.20: - dependencies: - '@ark/schema': 0.46.0 - '@ark/util': 0.46.0 - arktype@2.1.23: dependencies: '@ark/regex': 0.0.0 @@ -23579,15 +21014,13 @@ snapshots: '@babel/parser': 7.28.4 pathe: 2.0.3 - ast-module-types@6.0.1: {} - ast-types@0.16.1: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.4: + ast-v8-to-istanbul@0.3.7: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 js-tokens: 9.0.1 @@ -23601,7 +21034,7 @@ snapshots: astring@1.9.0: {} - astro@5.14.5(@netlify/blobs@9.1.2)(@types/node@24.8.1)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(yaml@2.8.1): + astro@5.14.5(@types/node@22.18.11)(@upstash/redis@1.35.6)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(yaml@2.8.1): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.7.4 @@ -23655,10 +21088,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.6.0 unist-util-visit: 5.0.0 - unstorage: 1.17.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) + unstorage: 1.17.1(@upstash/redis@1.35.6)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) vfile: 6.0.3 - vite: 6.4.0(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.4.0(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -23725,7 +21158,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.26.3 caniuse-lite: 1.0.30001751 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -23772,7 +21205,7 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.7.0: {} + bare-events@2.8.0: {} base-64@1.0.0: {} @@ -23796,7 +21229,7 @@ snapshots: bin-version-check@5.1.0: dependencies: bin-version: 6.0.0 - semver: 7.7.2 + semver: 7.7.3 semver-truncate: 3.0.0 bin-version@6.0.0: @@ -23810,8 +21243,6 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 - birpc@2.5.0: {} - birpc@2.6.1: {} bl@4.1.0: @@ -23834,12 +21265,12 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.1 + debug: 4.4.3 http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 qs: 6.14.0 - raw-body: 3.0.0 + raw-body: 3.0.1 type-is: 2.0.1 transitivePeerDependencies: - supports-color @@ -23877,13 +21308,6 @@ snapshots: dependencies: base64-js: 1.5.1 - browserslist@4.25.1: - dependencies: - caniuse-lite: 1.0.30001751 - electron-to-chromium: 1.5.198 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) - browserslist@4.26.3: dependencies: baseline-browser-mapping: 2.8.17 @@ -23937,20 +21361,18 @@ snapshots: transitivePeerDependencies: - supports-color - builtin-modules@3.3.0: {} - builtin-modules@5.0.0: {} bumpp@10.3.1(magicast@0.3.5): dependencies: ansis: 4.2.0 args-tokenizer: 0.3.0 - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) cac: 6.7.14 escalade: 3.2.0 jsonc-parser: 3.3.1 - package-manager-detector: 1.4.0 - semver: 7.7.2 + package-manager-detector: 1.4.1 + semver: 7.7.3 tinyexec: 1.0.1 tinyglobby: 0.2.15 yaml: 2.8.1 @@ -23959,12 +21381,12 @@ snapshots: bun-types@1.3.0(@types/react@19.2.2): dependencies: - '@types/node': 24.7.1 + '@types/node': 22.18.11 '@types/react': 19.2.2 bundle-name@4.1.0: dependencies: - run-applescript: 7.0.0 + run-applescript: 7.1.0 busboy@1.6.0: dependencies: @@ -23997,7 +21419,7 @@ snapshots: dotenv: 16.6.1 giget: 1.2.5 jiti: 2.6.1 - mlly: 1.7.4 + mlly: 1.8.0 ohash: 1.1.6 pathe: 1.1.2 perfect-debounce: 1.0.0 @@ -24006,24 +21428,7 @@ snapshots: optionalDependencies: magicast: 0.3.5 - c12@3.2.0(magicast@0.3.5): - dependencies: - chokidar: 4.0.3 - confbox: 0.2.2 - defu: 6.1.4 - dotenv: 17.2.2 - exsolve: 1.0.7 - giget: 2.0.0 - jiti: 2.6.1 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.3.0 - rc9: 2.1.2 - optionalDependencies: - magicast: 0.3.5 - - c12@3.3.0(magicast@0.3.5): + c12@3.3.1(magicast@0.3.5): dependencies: chokidar: 4.0.3 confbox: 0.2.2 @@ -24101,8 +21506,6 @@ snapshots: call-me-maybe@1.0.2: {} - callsite@1.0.0: {} - callsites@3.1.0: {} camelcase@8.0.0: {} @@ -24118,12 +21521,12 @@ snapshots: ccount@2.0.1: {} - chai@5.2.1: + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.2.0 + loupe: 3.2.1 pathval: 2.0.1 chalk@4.1.2: @@ -24149,22 +21552,22 @@ snapshots: pkg-types: 1.3.1 scule: 1.3.0 semver: 7.7.3 - std-env: 3.9.0 + std-env: 3.10.0 yaml: 2.8.1 transitivePeerDependencies: - magicast changelogithub@13.16.0(magicast@0.3.5): dependencies: - ansis: 4.1.0 - c12: 3.2.0(magicast@0.3.5) + ansis: 4.2.0 + c12: 3.3.1(magicast@0.3.5) cac: 6.7.14 changelogen: 0.5.7(magicast@0.3.5) convert-gitmoji: 0.1.5 execa: 9.6.0 ofetch: 1.4.1 - semver: 7.7.2 - tinyglobby: 0.2.14 + semver: 7.7.3 + tinyglobby: 0.2.15 transitivePeerDependencies: - magicast @@ -24174,7 +21577,7 @@ snapshots: character-entities@2.0.2: {} - chardet@0.7.0: {} + chardet@2.1.0: {} check-error@2.1.1: {} @@ -24252,8 +21655,6 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.3.0: {} - ci-info@4.3.1: {} citty@0.1.6: @@ -24366,16 +21767,10 @@ snapshots: '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.6 - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} color-string@1.9.1: @@ -24385,11 +21780,6 @@ snapshots: color-support@1.1.3: {} - color@3.2.1: - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - color@4.2.3: dependencies: color-convert: 2.0.1 @@ -24399,11 +21789,6 @@ snapshots: colorette@2.0.20: {} - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -24414,8 +21799,6 @@ snapshots: commander@11.1.0: {} - commander@12.1.0: {} - commander@13.0.0: {} commander@14.0.1: {} @@ -24448,8 +21831,6 @@ snapshots: common-ancestor-path@1.0.1: {} - common-path-prefix@3.0.0: {} - commondir@1.0.1: {} compare-version@0.1.2: {} @@ -24553,11 +21934,6 @@ snapshots: dependencies: is-what: 4.1.16 - copy-file@11.0.0: - dependencies: - graceful-fs: 4.2.11 - p-event: 6.0.1 - core-js-compat@3.46.0: dependencies: browserslist: 4.26.3 @@ -24605,10 +21981,6 @@ snapshots: crelt@1.0.6: {} - cron-parser@4.9.0: - dependencies: - luxon: 3.7.1 - croner@9.1.0: {} cross-dirname@0.1.0: @@ -24628,10 +22000,6 @@ snapshots: optionalDependencies: srvx: 0.8.16 - css-declaration-sorter@7.2.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - css-declaration-sorter@7.3.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -24660,40 +22028,6 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.8(postcss@8.5.6): - dependencies: - browserslist: 4.26.3 - css-declaration-sorter: 7.2.0(postcss@8.5.6) - cssnano-utils: 5.0.1(postcss@8.5.6) - postcss: 8.5.6 - postcss-calc: 10.1.1(postcss@8.5.6) - postcss-colormin: 7.0.4(postcss@8.5.6) - postcss-convert-values: 7.0.6(postcss@8.5.6) - postcss-discard-comments: 7.0.4(postcss@8.5.6) - postcss-discard-duplicates: 7.0.2(postcss@8.5.6) - postcss-discard-empty: 7.0.1(postcss@8.5.6) - postcss-discard-overridden: 7.0.1(postcss@8.5.6) - postcss-merge-longhand: 7.0.5(postcss@8.5.6) - postcss-merge-rules: 7.0.6(postcss@8.5.6) - postcss-minify-font-values: 7.0.1(postcss@8.5.6) - postcss-minify-gradients: 7.0.1(postcss@8.5.6) - postcss-minify-params: 7.0.4(postcss@8.5.6) - postcss-minify-selectors: 7.0.5(postcss@8.5.6) - postcss-normalize-charset: 7.0.1(postcss@8.5.6) - postcss-normalize-display-values: 7.0.1(postcss@8.5.6) - postcss-normalize-positions: 7.0.1(postcss@8.5.6) - postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6) - postcss-normalize-string: 7.0.1(postcss@8.5.6) - postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6) - postcss-normalize-unicode: 7.0.4(postcss@8.5.6) - postcss-normalize-url: 7.0.1(postcss@8.5.6) - postcss-normalize-whitespace: 7.0.1(postcss@8.5.6) - postcss-ordered-values: 7.0.2(postcss@8.5.6) - postcss-reduce-initial: 7.0.4(postcss@8.5.6) - postcss-reduce-transforms: 7.0.1(postcss@8.5.6) - postcss-svgo: 7.1.0(postcss@8.5.6) - postcss-unique-selectors: 7.0.4(postcss@8.5.6) - cssnano-preset-default@7.0.9(postcss@8.5.6): dependencies: browserslist: 4.26.3 @@ -24732,12 +22066,6 @@ snapshots: dependencies: postcss: 8.5.6 - cssnano@7.1.0(postcss@8.5.6): - dependencies: - cssnano-preset-default: 7.0.8(postcss@8.5.6) - lilconfig: 3.1.3 - postcss: 8.5.6 - cssnano@7.1.1(postcss@8.5.6): dependencies: cssnano-preset-default: 7.0.9(postcss@8.5.6) @@ -24950,8 +22278,6 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 - data-uri-to-buffer@4.0.1: {} - data-urls@6.0.0: dependencies: whatwg-mimetype: 4.0.0 @@ -24964,16 +22290,10 @@ snapshots: dayjs@1.11.18: {} - db0@0.3.2(better-sqlite3@12.4.1): - optionalDependencies: - better-sqlite3: 12.4.1 - db0@0.3.4(better-sqlite3@12.4.1): optionalDependencies: better-sqlite3: 12.4.1 - de-indent@1.0.2: {} - debounce@1.2.1: {} debug@2.6.9: @@ -24984,18 +22304,10 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 - decache@4.6.2: - dependencies: - callsite: 1.0.0 - decimal.js@10.6.0: {} decode-named-character-reference@1.2.0: @@ -25071,75 +22383,15 @@ snapshots: detect-libc@1.0.3: {} - detect-libc@2.1.0: {} - detect-libc@2.1.2: {} detect-node@2.1.0: optional: true - detective-amd@6.0.1: - dependencies: - ast-module-types: 6.0.1 - escodegen: 2.1.0 - get-amd-module-type: 6.0.1 - node-source-walk: 7.0.1 - - detective-cjs@6.0.1: - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - - detective-es6@5.0.1: - dependencies: - node-source-walk: 7.0.1 - - detective-postcss@7.0.1(postcss@8.5.6): - dependencies: - is-url: 1.2.4 - postcss: 8.5.6 - postcss-values-parser: 6.0.2(postcss@8.5.6) - - detective-sass@6.0.1: - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - - detective-scss@5.0.1: - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - - detective-stylus@5.0.1: {} - - detective-typescript@14.0.0(typescript@5.8.3): - dependencies: - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.8.3) - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - detective-vue2@2.2.0(typescript@5.8.3): - dependencies: - '@dependents/detective-less': 5.0.1 - '@vue/compiler-sfc': 3.5.22 - detective-es6: 5.0.1 - detective-sass: 6.0.1 - detective-scss: 5.0.1 - detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - deterministic-object-hash@2.0.2: dependencies: base-64: 1.0.0 - devalue@5.3.2: {} - devalue@5.4.1: {} devlop@1.1.0: @@ -25211,7 +22463,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.2.7: + dompurify@3.3.0: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -25239,8 +22491,6 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.2.2: {} - dotenv@17.2.3: {} dset@3.1.4: {} @@ -25308,19 +22558,17 @@ snapshots: transitivePeerDependencies: - supports-color - electron-to-chromium@1.5.198: {} - electron-to-chromium@1.5.237: {} - electron-vite@4.0.1(@swc/core@1.13.20(@swc/helpers@0.5.17))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + electron-vite@4.0.1(@swc/core@1.13.20(@swc/helpers@0.5.17))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) cac: 6.7.14 - esbuild: 0.25.10 + esbuild: 0.25.11 magic-string: 0.30.19 picocolors: 1.1.1 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: '@swc/core': 1.13.20(@swc/helpers@0.5.17) transitivePeerDependencies: @@ -25361,8 +22609,6 @@ snapshots: empathic@2.0.0: {} - enabled@2.0.0: {} - encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -25384,7 +22630,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.3 + tapable: 2.3.0 entities@4.5.0: {} @@ -25392,8 +22638,6 @@ snapshots: env-paths@2.2.1: {} - env-paths@3.0.0: {} - environment@1.1.0: {} err-code@2.0.3: {} @@ -25455,35 +22699,6 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.25.10: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.10 - '@esbuild/android-arm': 0.25.10 - '@esbuild/android-arm64': 0.25.10 - '@esbuild/android-x64': 0.25.10 - '@esbuild/darwin-arm64': 0.25.10 - '@esbuild/darwin-x64': 0.25.10 - '@esbuild/freebsd-arm64': 0.25.10 - '@esbuild/freebsd-x64': 0.25.10 - '@esbuild/linux-arm': 0.25.10 - '@esbuild/linux-arm64': 0.25.10 - '@esbuild/linux-ia32': 0.25.10 - '@esbuild/linux-loong64': 0.25.10 - '@esbuild/linux-mips64el': 0.25.10 - '@esbuild/linux-ppc64': 0.25.10 - '@esbuild/linux-riscv64': 0.25.10 - '@esbuild/linux-s390x': 0.25.10 - '@esbuild/linux-x64': 0.25.10 - '@esbuild/netbsd-arm64': 0.25.10 - '@esbuild/netbsd-x64': 0.25.10 - '@esbuild/openbsd-arm64': 0.25.10 - '@esbuild/openbsd-x64': 0.25.10 - '@esbuild/openharmony-arm64': 0.25.10 - '@esbuild/sunos-x64': 0.25.10 - '@esbuild/win32-arm64': 0.25.10 - '@esbuild/win32-ia32': 0.25.10 - '@esbuild/win32-x64': 0.25.10 - esbuild@0.25.11: optionalDependencies: '@esbuild/aix-ppc64': 0.25.11 @@ -25541,92 +22756,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.4 '@esbuild/win32-x64': 0.25.4 - esbuild@0.25.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 - - esbuild@0.25.8: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 - - esbuild@0.25.9: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.9 - '@esbuild/android-arm': 0.25.9 - '@esbuild/android-arm64': 0.25.9 - '@esbuild/android-x64': 0.25.9 - '@esbuild/darwin-arm64': 0.25.9 - '@esbuild/darwin-x64': 0.25.9 - '@esbuild/freebsd-arm64': 0.25.9 - '@esbuild/freebsd-x64': 0.25.9 - '@esbuild/linux-arm': 0.25.9 - '@esbuild/linux-arm64': 0.25.9 - '@esbuild/linux-ia32': 0.25.9 - '@esbuild/linux-loong64': 0.25.9 - '@esbuild/linux-mips64el': 0.25.9 - '@esbuild/linux-ppc64': 0.25.9 - '@esbuild/linux-riscv64': 0.25.9 - '@esbuild/linux-s390x': 0.25.9 - '@esbuild/linux-x64': 0.25.9 - '@esbuild/netbsd-arm64': 0.25.9 - '@esbuild/netbsd-x64': 0.25.9 - '@esbuild/openbsd-arm64': 0.25.9 - '@esbuild/openbsd-x64': 0.25.9 - '@esbuild/openharmony-arm64': 0.25.9 - '@esbuild/sunos-x64': 0.25.9 - '@esbuild/win32-arm64': 0.25.9 - '@esbuild/win32-ia32': 0.25.9 - '@esbuild/win32-x64': 0.25.9 - escalade@3.2.0: {} escape-goat@4.0.0: {} @@ -25639,14 +22768,6 @@ snapshots: escape-string-regexp@5.0.0: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@9.37.0(jiti@2.6.1)): dependencies: eslint: 9.37.0(jiti@2.6.1) @@ -25979,7 +23100,9 @@ snapshots: events-universal@1.0.1: dependencies: - bare-events: 2.7.0 + bare-events: 2.8.0 + transitivePeerDependencies: + - bare-abort-controller events@3.3.0: {} @@ -26019,10 +23142,10 @@ snapshots: is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 6.0.0 - pretty-ms: 9.2.0 + pretty-ms: 9.3.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 - yoctocolors: 2.1.1 + yoctocolors: 2.1.2 exit-hook@2.2.1: {} @@ -26040,7 +23163,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -26081,12 +23204,6 @@ snapshots: extend@3.0.2: {} - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - extract-zip@2.0.1: dependencies: debug: 4.4.3 @@ -26118,13 +23235,13 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-json-stringify@6.0.1: + fast-json-stringify@6.1.1: dependencies: '@fastify/merge-json-schemas': 0.2.1 ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) fast-uri: 3.1.0 - json-schema-ref-resolver: 2.0.1 + json-schema-ref-resolver: 3.0.0 rfdc: 1.4.1 fast-levenshtein@2.0.6: {} @@ -26141,42 +23258,42 @@ snapshots: fast-uri@3.1.0: {} - fastify-plugin@5.0.1: {} + fastify-plugin@5.1.0: {} fastify@5.4.0: dependencies: - '@fastify/ajv-compiler': 4.0.2 + '@fastify/ajv-compiler': 4.0.4 '@fastify/error': 4.2.0 '@fastify/fast-json-stringify-compiler': 5.0.3 - '@fastify/proxy-addr': 5.0.0 + '@fastify/proxy-addr': 5.1.0 abstract-logging: 2.0.1 avvio: 9.1.0 - fast-json-stringify: 6.0.1 + fast-json-stringify: 6.1.1 find-my-way: 9.3.0 light-my-request: 6.6.0 - pino: 9.11.0 + pino: 9.13.1 process-warning: 5.0.0 rfdc: 1.4.1 - secure-json-parse: 4.0.0 - semver: 7.7.2 + secure-json-parse: 4.1.0 + semver: 7.7.3 toad-cache: 3.7.0 fastify@5.6.1: dependencies: - '@fastify/ajv-compiler': 4.0.2 + '@fastify/ajv-compiler': 4.0.4 '@fastify/error': 4.2.0 '@fastify/fast-json-stringify-compiler': 5.0.3 - '@fastify/proxy-addr': 5.0.0 + '@fastify/proxy-addr': 5.1.0 abstract-logging: 2.0.1 avvio: 9.1.0 - fast-json-stringify: 6.0.1 + fast-json-stringify: 6.1.1 find-my-way: 9.3.0 light-my-request: 6.6.0 - pino: 9.11.0 + pino: 9.13.1 process-warning: 5.0.0 rfdc: 1.4.1 - secure-json-parse: 4.0.0 - semver: 7.7.2 + secure-json-parse: 4.1.0 + semver: 7.7.3 toad-cache: 3.7.0 fastq@1.19.1: @@ -26199,15 +23316,8 @@ snapshots: optionalDependencies: picomatch: 4.0.3 - fecha@4.2.3: {} - fenceparser@1.1.1: {} - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - fetchdts@0.1.7: {} fflate@0.8.2: {} @@ -26224,8 +23334,8 @@ snapshots: dependencies: '@tokenizer/inflate': 0.2.7 strtok3: 10.3.4 - token-types: 6.0.4 - uint8array-extras: 1.4.0 + token-types: 6.1.1 + uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color @@ -26233,8 +23343,8 @@ snapshots: dependencies: '@tokenizer/inflate': 0.2.7 strtok3: 10.3.4 - token-types: 6.0.4 - uint8array-extras: 1.4.0 + token-types: 6.1.1 + uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color @@ -26258,11 +23368,9 @@ snapshots: filter-obj@5.1.0: {} - filter-obj@6.1.0: {} - finalhandler@2.1.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -26284,12 +23392,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - find-versions@5.1.0: dependencies: semver-regex: 4.0.5 @@ -26305,7 +23407,7 @@ snapshots: fix-dts-default-cjs-exports@1.0.1: dependencies: magic-string: 0.30.19 - mlly: 1.7.4 + mlly: 1.8.0 rollup: 4.52.4 flat-cache@4.0.1: @@ -26325,8 +23427,6 @@ snapshots: optionalDependencies: '@nuxt/kit': 3.19.3(magicast@0.3.5) - fn.name@1.1.0: {} - focus-trap@7.6.5: dependencies: tabbable: 6.2.0 @@ -26368,7 +23468,7 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.3 - tapable: 2.2.2 + tapable: 2.3.0 typescript: 5.8.3 webpack: 5.100.2(@swc/core@1.13.20(@swc/helpers@0.5.17)) @@ -26390,10 +23490,6 @@ snapshots: formdata-node@6.0.3: {} - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - formidable@3.5.4: dependencies: '@paralleldrive/cuid2': 2.2.2 @@ -26415,7 +23511,7 @@ snapshots: fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-extra@11.3.2: @@ -26489,11 +23585,6 @@ snapshots: gensync@1.0.0-beta.2: {} - get-amd-module-type@6.0.1: - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - get-caller-file@2.0.5: {} get-east-asian-width@1.4.0: {} @@ -26535,10 +23626,6 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-tsconfig@4.10.1: - dependencies: - resolve-pkg-maps: 1.0.0 - get-tsconfig@4.12.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -26646,15 +23733,6 @@ snapshots: gopd: 1.2.0 optional: true - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.5 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - globby@15.0.0: dependencies: '@sindresorhus/merge-streams': 4.0.0 @@ -26666,10 +23744,6 @@ snapshots: globrex@0.1.2: {} - gonzales-pe@4.3.0: - dependencies: - minimist: 1.2.8 - goober@2.1.18(csstype@3.1.3): dependencies: csstype: 3.1.3 @@ -26736,7 +23810,7 @@ snapshots: defu: 6.1.4 destr: 2.0.5 iron-webcrypto: 1.2.1 - node-mock-http: 1.0.2 + node-mock-http: 1.0.3 radix3: 1.1.2 ufo: 1.6.1 uncrypto: 0.1.3 @@ -26922,8 +23996,6 @@ snapshots: property-information: 7.1.0 space-separated-tokens: 2.0.2 - he@1.2.0: {} - headers-polyfill@4.0.3: {} highlight.js@10.7.3: {} @@ -26934,17 +24006,13 @@ snapshots: highlightjs-vue@1.0.0: {} - hono@4.8.12: {} + hono@4.10.1: {} hookable@5.5.3: {} hosted-git-info@4.1.0: dependencies: - lru-cache: 6.0.0 - - hosted-git-info@7.0.2: - dependencies: - lru-cache: 10.4.3 + lru-cache: 6.0.0 html-encoding-sniffer@4.0.0: dependencies: @@ -27046,11 +24114,11 @@ snapshots: node-addon-api: 1.7.2 optional: true - iconv-lite@0.4.24: + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: + iconv-lite@0.7.0: dependencies: safer-buffer: 2.1.2 @@ -27069,13 +24137,6 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-in-the-middle@1.14.4: - dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) - cjs-module-lexer: 1.4.3 - module-details-from-path: 1.0.4 - import-in-the-middle@1.15.0: dependencies: acorn: 8.15.0 @@ -27099,8 +24160,6 @@ snapshots: indent-string@5.0.0: {} - index-to-position@1.1.0: {} - infer-owner@1.0.4: {} inflight@1.0.6: @@ -27124,20 +24183,6 @@ snapshots: internmap@2.0.3: {} - ioredis@5.7.0: - dependencies: - '@ioredis/commands': 1.3.0 - cluster-key-slot: 1.1.2 - debug: 4.4.3 - denque: 2.1.0 - lodash.defaults: 4.2.0 - lodash.isarguments: 3.1.0 - redis-errors: 1.2.0 - redis-parser: 3.0.0 - standard-as-callback: 2.1.0 - transitivePeerDependencies: - - supports-color - ioredis@5.8.1: dependencies: '@ioredis/commands': 1.4.0 @@ -27174,10 +24219,6 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - is-builtin-module@5.0.0: dependencies: builtin-modules: 5.0.0 @@ -27241,8 +24282,6 @@ snapshots: is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} - is-plain-obj@4.1.0: {} is-plain-object@2.0.4: @@ -27283,10 +24322,6 @@ snapshots: is-unicode-supported@2.1.0: {} - is-url-superb@4.0.0: {} - - is-url@1.2.4: {} - is-wayland@0.1.0: {} is-what@4.1.16: {} @@ -27329,13 +24364,13 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -27366,8 +24401,6 @@ snapshots: jiti@1.21.7: {} - jiti@2.5.1: {} - jiti@2.6.1: {} js-base64@3.7.8: {} @@ -27403,7 +24436,7 @@ snapshots: jsdom@27.0.0(postcss@8.5.6): dependencies: - '@asamuzakjp/dom-selector': 6.5.7 + '@asamuzakjp/dom-selector': 6.7.0 cssstyle: 5.3.1(postcss@8.5.6) data-urls: 6.0.0 decimal.js: 10.6.0 @@ -27443,7 +24476,7 @@ snapshots: json-parse-even-better-errors@3.0.2: {} - json-schema-ref-resolver@2.0.1: + json-schema-ref-resolver@3.0.0: dependencies: dequal: 2.0.3 @@ -27479,12 +24512,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - jsonfile@6.2.0: dependencies: universalify: 2.0.1 @@ -27500,15 +24527,11 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - junk@4.0.1: {} - just-clone@6.2.0: {} just-curry-it@5.3.0: {} - jwt-decode@4.0.0: {} - - katex@0.16.22: + katex@0.16.25: dependencies: commander: 8.3.0 @@ -27526,10 +24549,10 @@ snapshots: klona@2.0.6: {} - knip@5.66.0(@types/node@22.17.0)(typescript@5.8.3): + knip@5.66.0(@types/node@22.18.11)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 22.17.0 + '@types/node': 22.18.11 fast-glob: 3.3.3 formatly: 0.3.0 jiti: 2.6.1 @@ -27547,15 +24570,7 @@ snapshots: kolorist@1.8.0: {} - kuler@2.0.0: {} - - ky@1.10.0: {} - - lambda-local@2.2.0: - dependencies: - commander: 10.0.1 - dotenv: 16.6.1 - winston: 3.17.0 + ky@1.12.0: {} langium@3.3.1: dependencies: @@ -27652,7 +24667,7 @@ snapshots: mlly: 1.8.0 node-forge: 1.3.1 pathe: 1.1.2 - std-env: 3.9.0 + std-env: 3.10.0 ufo: 1.6.1 untun: 0.1.3 uqr: 0.1.2 @@ -27677,7 +24692,7 @@ snapshots: load-esm@1.0.2: {} - loader-runner@4.3.0: {} + loader-runner@4.3.1: {} local-pkg@1.1.2: dependencies: @@ -27691,16 +24706,10 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - lodash-es@4.17.21: {} lodash.camelcase@4.3.0: {} - lodash.debounce@4.0.8: {} - lodash.defaults@4.2.0: {} lodash.isarguments@3.1.0: {} @@ -27740,20 +24749,11 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.2 - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - long@5.3.2: {} longest-streak@3.1.0: {} - loupe@3.2.0: {} + loupe@3.2.1: {} lowercase-keys@2.0.0: {} @@ -27779,8 +24779,6 @@ snapshots: lru-cache@7.18.3: {} - luxon@3.7.1: {} - lz-string@1.5.0: {} magic-regexp@0.10.0: @@ -27864,7 +24862,7 @@ snapshots: markdown-title@1.0.2: {} - marked@16.3.0: {} + marked@16.4.1: {} marky@1.3.0: {} @@ -27885,7 +24883,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 mdast-util-from-markdown@2.0.2: @@ -27976,7 +24974,7 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 mdast-util-to-hast@13.2.0: dependencies: @@ -28026,10 +25024,6 @@ snapshots: merge-descriptors@2.0.0: {} - merge-options@3.0.4: - dependencies: - is-plain-obj: 2.1.0 - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -28038,7 +25032,7 @@ snapshots: dependencies: '@braintree/sanitize-url': 7.1.1 '@iconify/utils': 3.0.2 - '@mermaid-js/parser': 0.6.2 + '@mermaid-js/parser': 0.6.3 '@types/d3': 7.4.3 cytoscape: 3.33.1 cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1) @@ -28047,11 +25041,11 @@ snapshots: d3-sankey: 0.12.3 dagre-d3-es: 7.0.11 dayjs: 1.11.18 - dompurify: 3.2.7 - katex: 0.16.22 + dompurify: 3.3.0 + katex: 0.16.25 khroma: 2.1.0 lodash-es: 4.17.21 - marked: 16.3.0 + marked: 16.4.1 roughjs: 4.6.6 stylis: 4.3.6 ts-dedent: 2.2.0 @@ -28061,8 +25055,6 @@ snapshots: methods@1.1.2: {} - micro-api-client@3.3.0: {} - microdiff@1.5.0: {} micromark-core-commonmark@2.0.3: @@ -28290,8 +25282,6 @@ snapshots: mime@3.0.0: {} - mime@4.0.7: {} - mime@4.1.0: {} mimic-fn@2.1.0: {} @@ -28380,7 +25370,7 @@ snapshots: minipass@7.1.2: {} - minisearch@7.1.2: {} + minisearch@7.2.0: {} minizlib@2.1.2: dependencies: @@ -28401,17 +25391,17 @@ snapshots: mkdirp@1.0.4: {} - mkdist@2.3.0(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)): + mkdist@2.4.1(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)): dependencies: autoprefixer: 10.4.21(postcss@8.5.6) citty: 0.1.6 - cssnano: 7.1.0(postcss@8.5.6) + cssnano: 7.1.1(postcss@8.5.6) defu: 6.1.4 esbuild: 0.25.11 jiti: 1.21.7 - mlly: 1.7.4 + mlly: 1.8.0 pathe: 2.0.3 - pkg-types: 2.2.0 + pkg-types: 2.3.0 postcss: 8.5.6 postcss-nested: 7.0.2(postcss@8.5.6) semver: 7.7.3 @@ -28420,13 +25410,6 @@ snapshots: typescript: 5.8.3 vue: 3.5.22(typescript@5.8.3) - mlly@1.7.4: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - mlly@1.8.0: dependencies: acorn: 8.15.0 @@ -28436,11 +25419,6 @@ snapshots: mocked-exports@0.1.1: {} - module-definition@6.0.1: - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - module-details-from-path@1.0.4: {} mri@1.2.0: {} @@ -28451,9 +25429,9 @@ snapshots: ms@2.1.3: {} - msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3): + msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3): dependencies: - '@inquirer/confirm': 5.1.19(@types/node@22.17.0) + '@inquirer/confirm': 5.1.19(@types/node@22.18.11) '@mswjs/interceptors': 0.39.8 '@open-draft/deferred-promise': 2.2.0 '@types/statuses': 2.0.6 @@ -28529,15 +25507,6 @@ snapshots: neotraverse@0.6.18: {} - netlify@13.3.5: - dependencies: - '@netlify/open-api': 2.37.0 - lodash-es: 4.17.21 - micro-api-client: 3.3.0 - node-fetch: 3.3.2 - p-wait-for: 5.0.2 - qs: 6.14.0 - next@15.5.6(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@next/env': 15.5.6 @@ -28562,123 +25531,19 @@ snapshots: - '@babel/core' - babel-plugin-macros - nitropack@2.12.4(@netlify/blobs@9.1.2)(better-sqlite3@12.4.1)(encoding@0.1.13)(xml2js@0.6.2): - dependencies: - '@cloudflare/kv-asset-handler': 0.4.0 - '@netlify/functions': 3.1.10(encoding@0.1.13)(rollup@4.52.4) - '@rollup/plugin-alias': 5.1.1(rollup@4.52.4) - '@rollup/plugin-commonjs': 28.0.6(rollup@4.52.4) - '@rollup/plugin-inject': 5.0.5(rollup@4.52.4) - '@rollup/plugin-json': 6.1.0(rollup@4.52.4) - '@rollup/plugin-node-resolve': 16.0.1(rollup@4.52.4) - '@rollup/plugin-replace': 6.0.2(rollup@4.52.4) - '@rollup/plugin-terser': 0.4.4(rollup@4.52.4) - '@vercel/nft': 0.29.4(encoding@0.1.13)(rollup@4.52.4) - archiver: 7.0.1 - c12: 3.3.0(magicast@0.3.5) - chokidar: 4.0.3 - citty: 0.1.6 - compatx: 0.2.0 - confbox: 0.2.2 - consola: 3.4.2 - cookie-es: 2.0.0 - croner: 9.1.0 - crossws: 0.3.5 - db0: 0.3.2(better-sqlite3@12.4.1) - defu: 6.1.4 - destr: 2.0.5 - dot-prop: 9.0.0 - esbuild: 0.25.11 - escape-string-regexp: 5.0.0 - etag: 1.8.1 - exsolve: 1.0.7 - globby: 14.1.0 - gzip-size: 7.0.0 - h3: 1.15.4 - hookable: 5.5.3 - httpxy: 0.1.7 - ioredis: 5.7.0 - jiti: 2.6.1 - klona: 2.0.6 - knitwork: 1.2.0 - listhen: 1.9.0 - magic-string: 0.30.19 - magicast: 0.3.5 - mime: 4.0.7 - mlly: 1.8.0 - node-fetch-native: 1.6.7 - node-mock-http: 1.0.2 - ofetch: 1.4.1 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.3.0 - pretty-bytes: 6.1.1 - radix3: 1.1.2 - rollup: 4.52.4 - rollup-plugin-visualizer: 6.0.3(rollup@4.52.4) - scule: 1.3.0 - semver: 7.7.3 - serve-placeholder: 2.0.2 - serve-static: 2.2.0 - source-map: 0.7.6 - std-env: 3.9.0 - ufo: 1.6.1 - ultrahtml: 1.6.0 - uncrypto: 0.1.3 - unctx: 2.4.1 - unenv: 2.0.0-rc.21 - unimport: 5.4.1 - unplugin-utils: 0.2.5 - unstorage: 1.17.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0) - untyped: 2.0.0 - unwasm: 0.3.9 - youch: 4.1.0-beta.8 - youch-core: 0.3.3 - optionalDependencies: - xml2js: 0.6.2 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@electric-sql/pglite' - - '@libsql/client' - - '@netlify/blobs' - - '@planetscale/database' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - better-sqlite3 - - drizzle-orm - - encoding - - idb-keyval - - mysql2 - - react-native-b4a - - rolldown - - sqlite3 - - supports-color - - uploadthing - - nitropack@2.12.7(@netlify/blobs@9.1.2)(better-sqlite3@12.4.1)(encoding@0.1.13)(xml2js@0.6.2): + nitropack@2.12.7(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(encoding@0.1.13)(xml2js@0.6.2): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@rollup/plugin-alias': 5.1.1(rollup@4.52.4) - '@rollup/plugin-commonjs': 28.0.6(rollup@4.52.4) + '@rollup/plugin-commonjs': 28.0.8(rollup@4.52.4) '@rollup/plugin-inject': 5.0.5(rollup@4.52.4) '@rollup/plugin-json': 6.1.0(rollup@4.52.4) - '@rollup/plugin-node-resolve': 16.0.2(rollup@4.52.4) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.52.4) '@rollup/plugin-replace': 6.0.2(rollup@4.52.4) '@rollup/plugin-terser': 0.4.4(rollup@4.52.4) - '@vercel/nft': 0.30.2(encoding@0.1.13)(rollup@4.52.4) + '@vercel/nft': 0.30.3(encoding@0.1.13)(rollup@4.52.4) archiver: 7.0.1 - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) chokidar: 4.0.3 citty: 0.1.6 compatx: 0.2.0 @@ -28719,21 +25584,21 @@ snapshots: pretty-bytes: 7.1.0 radix3: 1.1.2 rollup: 4.52.4 - rollup-plugin-visualizer: 6.0.4(rollup@4.52.4) + rollup-plugin-visualizer: 6.0.5(rollup@4.52.4) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 serve-static: 2.2.0 source-map: 0.7.6 - std-env: 3.9.0 + std-env: 3.10.0 ufo: 1.6.1 ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.4.1 unenv: 2.0.0-rc.21 - unimport: 5.4.1 + unimport: 5.5.0 unplugin-utils: 0.3.1 - unstorage: 1.17.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) + unstorage: 1.17.1(@upstash/redis@1.35.6)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) untyped: 2.0.0 unwasm: 0.3.11 youch: 4.1.0-beta.11 @@ -28758,6 +25623,7 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch + - bare-abort-controller - better-sqlite3 - drizzle-orm - encoding @@ -28773,7 +25639,7 @@ snapshots: dependencies: '@types/nlcst': 2.0.3 - node-abi@3.77.0: + node-abi@3.78.0: dependencies: semver: 7.7.3 @@ -28788,8 +25654,6 @@ snapshots: dependencies: semver: 7.7.3 - node-domexception@1.0.0: {} - node-emoji@1.11.0: dependencies: lodash: 4.17.21 @@ -28802,18 +25666,10 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-forge@1.3.1: {} node-gyp-build@4.8.4: {} - node-mock-http@1.0.2: {} - node-mock-http@1.0.3: {} node-notifier@10.0.1: @@ -28825,14 +25681,8 @@ snapshots: uuid: 8.3.2 which: 2.0.2 - node-releases@2.0.19: {} - node-releases@2.0.25: {} - node-source-walk@7.0.1: - dependencies: - '@babel/parser': 7.28.4 - non-layered-tidy-tree-layout@2.0.2: optional: true @@ -28848,16 +25698,6 @@ snapshots: dependencies: abbrev: 3.0.1 - normalize-package-data@6.0.2: - dependencies: - hosted-git-info: 7.0.2 - semver: 7.7.3 - validate-npm-package-license: 3.0.4 - - normalize-path@2.1.1: - dependencies: - remove-trailing-separator: 1.1.0 - normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -28883,27 +25723,27 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.1.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.8.1)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(xml2js@0.6.2)(yaml@2.8.1): + nuxt@4.1.3(@parcel/watcher@2.5.1)(@types/node@22.18.11)(@upstash/redis@1.35.6)(@vue/compiler-sfc@3.5.22)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(eslint@9.37.0(jiti@2.6.1))(ioredis@5.8.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(xml2js@0.6.2)(yaml@2.8.1): dependencies: - '@nuxt/cli': 3.29.2(magicast@0.3.5) + '@nuxt/cli': 3.29.3(magicast@0.3.5) '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 2.6.5(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) + '@nuxt/devtools': 2.6.5(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)) '@nuxt/kit': 4.1.3(magicast@0.3.5) '@nuxt/schema': 4.1.3 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) - '@nuxt/vite-builder': 4.1.3(@types/node@24.8.1)(eslint@9.37.0(jiti@2.6.1))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1) + '@nuxt/vite-builder': 4.1.3(@types/node@22.18.11)(eslint@9.37.0(jiti@2.6.1))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3))(yaml@2.8.1) '@unhead/vue': 2.0.19(vue@3.5.22(typescript@5.8.3)) '@vue/shared': 3.5.22 - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) chokidar: 4.0.3 compatx: 0.2.0 consola: 3.4.2 cookie-es: 2.0.0 defu: 6.1.4 destr: 2.0.5 - devalue: 5.3.2 + devalue: 5.4.1 errx: 0.1.0 - esbuild: 0.25.10 + esbuild: 0.25.11 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 exsolve: 1.0.7 @@ -28918,7 +25758,7 @@ snapshots: mlly: 1.8.0 mocked-exports: 0.1.1 nanotar: 0.2.0 - nitropack: 2.12.7(@netlify/blobs@9.1.2)(better-sqlite3@12.4.1)(encoding@0.1.13)(xml2js@0.6.2) + nitropack: 2.12.7(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(encoding@0.1.13)(xml2js@0.6.2) nypm: 0.6.2 ofetch: 1.4.1 ohash: 2.0.11 @@ -28933,16 +25773,16 @@ snapshots: radix3: 1.1.2 scule: 1.3.0 semver: 7.7.3 - std-env: 3.9.0 + std-env: 3.10.0 tinyglobby: 0.2.15 ufo: 1.6.1 ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.4.1 - unimport: 5.4.1 + unimport: 5.5.0 unplugin: 2.3.10 unplugin-vue-router: 0.15.0(@vue/compiler-sfc@3.5.22)(typescript@5.8.3)(vue-router@4.6.3(vue@3.5.22(typescript@5.8.3)))(vue@3.5.22(typescript@5.8.3)) - unstorage: 1.17.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) + unstorage: 1.17.1(@upstash/redis@1.35.6)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) untyped: 2.0.0 vue: 3.5.22(typescript@5.8.3) vue-bundle-renderer: 2.2.0 @@ -28950,7 +25790,7 @@ snapshots: vue-router: 4.6.3(vue@3.5.22(typescript@5.8.3)) optionalDependencies: '@parcel/watcher': 2.5.1 - '@types/node': 24.8.1 + '@types/node': 22.18.11 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -28971,6 +25811,7 @@ snapshots: - '@vercel/kv' - '@vue/compiler-sfc' - aws4fetch + - bare-abort-controller - better-sqlite3 - bufferutil - db0 @@ -29060,10 +25901,6 @@ snapshots: dependencies: wrappy: 1.0.2 - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -29170,8 +26007,6 @@ snapshots: os-shim@0.1.3: {} - os-tmpdir@1.0.2: {} - outvariant@1.4.3: {} oxc-minify@0.94.0: @@ -29261,18 +26096,10 @@ snapshots: p-cancelable@3.0.0: {} - p-event@6.0.1: - dependencies: - p-timeout: 6.1.4 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.1 - p-limit@6.2.0: dependencies: yocto-queue: 1.2.1 @@ -29281,16 +26108,10 @@ snapshots: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - p-map@7.0.3: {} - p-queue@8.1.1: dependencies: eventemitter3: 5.0.1 @@ -29298,21 +26119,15 @@ snapshots: p-timeout@6.1.4: {} - p-wait-for@5.0.2: - dependencies: - p-timeout: 6.1.4 - package-json-from-dist@1.0.1: {} package-json@10.0.1: dependencies: - ky: 1.10.0 + ky: 1.12.0 registry-auth-token: 5.1.0 registry-url: 6.0.1 semver: 7.7.3 - package-manager-detector@1.4.0: {} - package-manager-detector@1.4.1: {} packrup@0.1.2: {} @@ -29346,12 +26161,6 @@ snapshots: lines-and-columns: 2.0.4 type-fest: 3.13.1 - parse-json@8.3.0: - dependencies: - '@babel/code-frame': 7.27.1 - index-to-position: 1.1.0 - type-fest: 4.41.0 - parse-latin@7.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -29409,8 +26218,6 @@ snapshots: path-exists@4.0.0: {} - path-exists@5.0.0: {} - path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -29488,10 +26295,9 @@ snapshots: pino-std-serializers@7.0.0: {} - pino@9.11.0: + pino@9.13.1: dependencies: atomic-sleep: 1.0.0 - fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 pino-std-serializers: 7.0.0 @@ -29499,6 +26305,7 @@ snapshots: quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 + slow-redact: 0.3.2 sonic-boom: 4.2.0 thread-stream: 3.1.0 @@ -29518,7 +26325,7 @@ snapshots: piscina@4.9.2: optionalDependencies: - '@napi-rs/nice': 1.0.4 + '@napi-rs/nice': 1.1.1 pkg-pr-new@0.0.60: dependencies: @@ -29537,12 +26344,6 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 - pkg-types@2.2.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - pkg-types@2.3.0: dependencies: confbox: 0.2.2 @@ -29551,7 +26352,7 @@ snapshots: plist@3.1.0: dependencies: - '@xmldom/xmldom': 0.8.10 + '@xmldom/xmldom': 0.8.11 base64-js: 1.5.1 xmlbuilder: 15.1.1 @@ -29582,12 +26383,6 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.6(postcss@8.5.6): - dependencies: - browserslist: 4.26.3 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.7(postcss@8.5.6): dependencies: browserslist: 4.26.3 @@ -29740,13 +26535,6 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss-values-parser@6.0.2(postcss@8.5.6): - dependencies: - color-name: 1.1.4 - is-url-superb: 4.0.0 - postcss: 8.5.6 - quote-unquote: 1.0.0 - postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -29774,43 +26562,23 @@ snapshots: commander: 9.5.0 optional: true - preact@10.27.0: {} + preact@10.27.2: {} prebuild-install@7.1.3: dependencies: - detect-libc: 2.1.0 + detect-libc: 2.1.2 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.77.0 + node-abi: 3.78.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 2.1.4 tunnel-agent: 0.6.0 - precinct@12.2.0: - dependencies: - '@dependents/detective-less': 5.0.1 - commander: 12.1.0 - detective-amd: 6.0.1 - detective-cjs: 6.0.1 - detective-es6: 5.0.1 - detective-postcss: 7.0.1(postcss@8.5.6) - detective-sass: 6.0.1 - detective-scss: 5.0.1 - detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.8.3) - detective-vue2: 2.2.0(typescript@5.8.3) - module-definition: 6.0.1 - node-source-walk: 7.0.1 - postcss: 8.5.6 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -29824,8 +26592,6 @@ snapshots: pretty-bytes@6.1.1: {} - pretty-bytes@7.0.1: {} - pretty-bytes@7.1.0: {} pretty-format@27.5.1: @@ -29838,7 +26604,7 @@ snapshots: dependencies: parse-ms: 3.0.0 - pretty-ms@9.2.0: + pretty-ms@9.3.0: dependencies: parse-ms: 4.0.0 @@ -29942,7 +26708,7 @@ snapshots: query-registry@3.0.1: dependencies: query-string: 9.3.1 - quick-lru: 7.2.0 + quick-lru: 7.3.0 url-join: 5.0.0 validate-npm-package-name: 5.0.1 zod: 3.25.76 @@ -29960,9 +26726,7 @@ snapshots: quick-lru@5.1.1: {} - quick-lru@7.2.0: {} - - quote-unquote@1.0.0: {} + quick-lru@7.3.0: {} radash@12.1.1: {} @@ -29978,7 +26742,7 @@ snapshots: aria-hidden: 1.2.6 defu: 6.1.4 fast-deep-equal: 3.1.3 - nanoid: 5.1.6 + nanoid: 5.1.5 vue: 3.5.22(typescript@5.8.3) transitivePeerDependencies: - '@vue/composition-api' @@ -29991,11 +26755,11 @@ snapshots: range-parser@1.2.1: {} - raw-body@3.0.0: + raw-body@3.0.1: dependencies: bytes: 3.1.2 http-errors: 2.0.0 - iconv-lite: 0.6.3 + iconv-lite: 0.7.0 unpipe: 1.0.0 rc9@2.1.2: @@ -30027,20 +26791,6 @@ snapshots: transitivePeerDependencies: - supports-color - read-package-up@11.0.0: - dependencies: - find-up-simple: 1.0.1 - read-pkg: 9.0.1 - type-fest: 4.41.0 - - read-pkg@9.0.1: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 - parse-json: 8.3.0 - type-fest: 4.41.0 - unicorn-magic: 0.1.0 - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -30262,8 +27012,6 @@ snapshots: remove-accents@0.5.0: {} - remove-trailing-separator@1.1.0: {} - request-light@0.5.8: {} request-light@0.7.0: {} @@ -30287,8 +27035,6 @@ snapshots: transitivePeerDependencies: - supports-color - require-package-name@2.0.1: {} - requireindex@1.2.0: {} requires-port@1.0.0: {} @@ -30311,12 +27057,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 @@ -30397,85 +27137,22 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-dts@6.2.1(rollup@4.46.2)(typescript@5.8.3): + rollup-plugin-dts@6.2.3(rollup@4.52.4)(typescript@5.8.3): dependencies: magic-string: 0.30.19 - rollup: 4.46.2 + rollup: 4.52.4 typescript: 5.8.3 optionalDependencies: '@babel/code-frame': 7.27.1 - rollup-plugin-visualizer@6.0.3(rollup@4.52.4): - dependencies: - open: 8.4.2 - picomatch: 4.0.3 - source-map: 0.7.6 - yargs: 17.7.2 - optionalDependencies: - rollup: 4.52.4 - - rollup-plugin-visualizer@6.0.4(rollup@4.52.4): + rollup-plugin-visualizer@6.0.5(rollup@4.52.4): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.52.4 - - rollup@4.46.2: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.2 - '@rollup/rollup-android-arm64': 4.46.2 - '@rollup/rollup-darwin-arm64': 4.46.2 - '@rollup/rollup-darwin-x64': 4.46.2 - '@rollup/rollup-freebsd-arm64': 4.46.2 - '@rollup/rollup-freebsd-x64': 4.46.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 - '@rollup/rollup-linux-arm64-musl': 4.46.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 - '@rollup/rollup-linux-x64-gnu': 4.46.2 - '@rollup/rollup-linux-x64-musl': 4.46.2 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 - '@rollup/rollup-win32-x64-msvc': 4.46.2 - fsevents: 2.3.3 - - rollup@4.52.0: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.0 - '@rollup/rollup-android-arm64': 4.52.0 - '@rollup/rollup-darwin-arm64': 4.52.0 - '@rollup/rollup-darwin-x64': 4.52.0 - '@rollup/rollup-freebsd-arm64': 4.52.0 - '@rollup/rollup-freebsd-x64': 4.52.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.0 - '@rollup/rollup-linux-arm-musleabihf': 4.52.0 - '@rollup/rollup-linux-arm64-gnu': 4.52.0 - '@rollup/rollup-linux-arm64-musl': 4.52.0 - '@rollup/rollup-linux-loong64-gnu': 4.52.0 - '@rollup/rollup-linux-ppc64-gnu': 4.52.0 - '@rollup/rollup-linux-riscv64-gnu': 4.52.0 - '@rollup/rollup-linux-riscv64-musl': 4.52.0 - '@rollup/rollup-linux-s390x-gnu': 4.52.0 - '@rollup/rollup-linux-x64-gnu': 4.52.0 - '@rollup/rollup-linux-x64-musl': 4.52.0 - '@rollup/rollup-openharmony-arm64': 4.52.0 - '@rollup/rollup-win32-arm64-msvc': 4.52.0 - '@rollup/rollup-win32-ia32-msvc': 4.52.0 - '@rollup/rollup-win32-x64-gnu': 4.52.0 - '@rollup/rollup-win32-x64-msvc': 4.52.0 - fsevents: 2.3.3 + rollup: 4.52.4 rollup@4.52.4: dependencies: @@ -30516,7 +27193,7 @@ snapshots: router@2.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -30526,7 +27203,7 @@ snapshots: rrweb-cssom@0.8.0: {} - run-applescript@7.0.0: {} + run-applescript@7.1.0: {} run-parallel@1.2.0: dependencies: @@ -30576,7 +27253,7 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.3.2: + schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 @@ -30598,7 +27275,7 @@ snapshots: extend-shallow: 2.0.1 kind-of: 6.0.3 - secure-json-parse@4.0.0: {} + secure-json-parse@4.1.0: {} seek-bzip@2.0.0: dependencies: @@ -30611,7 +27288,7 @@ snapshots: semver-truncate@3.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 semver@5.7.2: {} @@ -30641,7 +27318,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -30664,10 +27341,6 @@ snapshots: dependencies: randombytes: 2.1.0 - seroval-plugins@1.3.2(seroval@1.3.2): - dependencies: - seroval: 1.3.2 - seroval-plugins@1.3.3(seroval@1.3.2): dependencies: seroval: 1.3.2 @@ -30915,12 +27588,6 @@ snapshots: dependencies: semver: 7.7.3 - sirv@3.0.1: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 - sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -30950,6 +27617,8 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 + slow-redact@0.3.2: {} + smart-buffer@4.2.0: {} smob@1.5.0: {} @@ -30973,7 +27642,7 @@ snapshots: dependencies: csstype: 3.1.3 seroval: 1.3.2 - seroval-plugins: 1.3.2(seroval@1.3.2) + seroval-plugins: 1.3.3(seroval@1.3.2) solid-refresh@0.6.3(solid-js@1.9.9): dependencies: @@ -31020,18 +27689,8 @@ snapshots: concat-stream: 1.6.2 os-shim: 0.1.3 - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 - spdx-exceptions@2.5.0: {} - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 - spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 @@ -31060,8 +27719,6 @@ snapshots: dependencies: minipass: 3.3.6 - stack-trace@0.0.10: {} - stackback@0.0.2: {} stackframe@1.3.4: {} @@ -31074,7 +27731,7 @@ snapshots: statuses@2.0.2: {} - std-env@3.9.0: {} + std-env@3.10.0: {} stdin-discarder@0.1.0: dependencies: @@ -31092,6 +27749,7 @@ snapshots: fast-fifo: 1.3.2 text-decoder: 1.2.3 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a strict-event-emitter@0.5.1: {} @@ -31177,10 +27835,6 @@ snapshots: strip-json-comments@5.0.2: {} - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - strip-literal@3.1.0: dependencies: js-tokens: 9.0.1 @@ -31193,7 +27847,7 @@ snapshots: stubborn-fs@1.2.5: {} - style-mod@4.1.2: {} + style-mod@4.1.3: {} styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0): dependencies: @@ -31296,7 +27950,7 @@ snapshots: dependencies: dequal: 2.0.3 react: 19.2.0 - use-sync-external-store: 1.5.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.0) symbol-observable@4.0.0: {} @@ -31319,11 +27973,9 @@ snapshots: tailwind-merge@2.6.0: {} - tailwindcss@4.1.11: {} - - tapable@2.2.2: {} + tailwindcss@4.1.14: {} - tapable@2.2.3: {} + tapable@2.3.0: {} tar-fs@2.1.4: dependencies: @@ -31346,6 +27998,7 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a tar@6.2.1: @@ -31384,9 +28037,9 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.100.2(@swc/core@1.13.20(@swc/helpers@0.5.17)) optionalDependencies: '@swc/core': 1.13.20(@swc/helpers@0.5.17) @@ -31395,19 +28048,12 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.44.0 webpack: 5.100.2 optional: true - terser@5.43.1: - dependencies: - '@jridgewell/source-map': 0.3.10 - acorn: 8.15.0 - commander: 2.20.3 - source-map-support: 0.5.21 - terser@5.44.0: dependencies: '@jridgewell/source-map': 0.3.11 @@ -31427,8 +28073,6 @@ snapshots: transitivePeerDependencies: - react-native-b4a - text-hex@1.0.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -31461,11 +28105,6 @@ snapshots: tinyexec@1.0.1: {} - tinyglobby@0.2.14: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) @@ -31475,7 +28114,7 @@ snapshots: tinyrainbow@2.0.0: {} - tinyspy@4.0.3: {} + tinyspy@4.0.4: {} tldts-core@7.0.17: {} @@ -31487,10 +28126,6 @@ snapshots: dependencies: tmp: 0.2.5 - tmp@0.0.33: - dependencies: - os-tmpdir: 1.0.2 - tmp@0.2.5: {} to-regex-range@5.0.1: @@ -31501,19 +28136,18 @@ snapshots: toidentifier@1.0.1: {} - token-types@6.0.4: + token-types@6.1.1: dependencies: + '@borewit/text-codec': 0.1.1 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - tokenx@1.1.0: {} + tokenx@1.2.0: {} toml-eslint-parser@0.10.0: dependencies: eslint-visitor-keys: 3.4.3 - toml@3.0.0: {} - totalist@3.0.1: {} tough-cookie@6.0.0: @@ -31530,8 +28164,6 @@ snapshots: trim-lines@3.0.1: {} - triple-beam@1.4.1: {} - trough@2.2.0: {} truncate-utf8-bytes@1.0.2: @@ -31556,19 +28188,19 @@ snapshots: chalk: 4.1.2 enhanced-resolve: 5.18.3 micromatch: 4.0.8 - semver: 7.7.2 + semver: 7.7.3 source-map: 0.7.6 typescript: 5.8.3 webpack: 5.100.2(@swc/core@1.13.20(@swc/helpers@0.5.17)) - ts-node@10.9.2(@swc/core@1.13.20(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.13.20(@swc/helpers@0.5.17))(@swc/wasm@1.13.20)(@types/node@22.18.11)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.17.0 + '@types/node': 22.18.11 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -31580,7 +28212,7 @@ snapshots: yn: 3.1.1 optionalDependencies: '@swc/core': 1.13.20(@swc/helpers@0.5.17) - '@swc/wasm': 1.13.3 + '@swc/wasm': 1.13.20 tsconfck@3.1.6(typescript@5.8.3): optionalDependencies: @@ -31590,7 +28222,7 @@ snapshots: dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.3 - tapable: 2.2.2 + tapable: 2.3.0 tsconfig-paths: 4.2.0 tsconfig-paths@4.2.0: @@ -31605,8 +28237,8 @@ snapshots: tsx@4.20.6: dependencies: - esbuild: 0.25.10 - get-tsconfig: 4.10.1 + esbuild: 0.25.11 + get-tsconfig: 4.12.0 optionalDependencies: fsevents: 2.3.3 @@ -31620,7 +28252,7 @@ snapshots: twoslash-vue@0.3.4(typescript@5.8.3): dependencies: - '@vue/language-core': 3.0.7(typescript@5.8.3) + '@vue/language-core': 3.1.1(typescript@5.8.3) twoslash: 0.3.4(typescript@5.8.3) twoslash-protocol: 0.3.4 typescript: 5.8.3 @@ -31644,8 +28276,6 @@ snapshots: type-fest@0.13.1: optional: true - type-fest@0.21.3: {} - type-fest@3.13.1: {} type-fest@4.2.0: {} @@ -31696,35 +28326,35 @@ snapshots: dependencies: '@lukeed/csprng': 1.1.0 - uint8array-extras@1.4.0: {} + uint8array-extras@1.5.0: {} ultrahtml@1.6.0: {} unbuild@3.6.1(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)): dependencies: - '@rollup/plugin-alias': 5.1.1(rollup@4.46.2) - '@rollup/plugin-commonjs': 28.0.6(rollup@4.46.2) - '@rollup/plugin-json': 6.1.0(rollup@4.46.2) - '@rollup/plugin-node-resolve': 16.0.1(rollup@4.46.2) - '@rollup/plugin-replace': 6.0.2(rollup@4.46.2) - '@rollup/pluginutils': 5.2.0(rollup@4.46.2) + '@rollup/plugin-alias': 5.1.1(rollup@4.52.4) + '@rollup/plugin-commonjs': 28.0.8(rollup@4.52.4) + '@rollup/plugin-json': 6.1.0(rollup@4.52.4) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.52.4) + '@rollup/plugin-replace': 6.0.2(rollup@4.52.4) + '@rollup/pluginutils': 5.3.0(rollup@4.52.4) citty: 0.1.6 consola: 3.4.2 defu: 6.1.4 - esbuild: 0.25.9 + esbuild: 0.25.11 fix-dts-default-cjs-exports: 1.0.1 hookable: 5.5.3 - jiti: 2.5.1 - magic-string: 0.30.17 - mkdist: 2.3.0(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)) - mlly: 1.7.4 + jiti: 2.6.1 + magic-string: 0.30.19 + mkdist: 2.4.1(typescript@5.8.3)(vue@3.5.22(typescript@5.8.3)) + mlly: 1.8.0 pathe: 2.0.3 - pkg-types: 2.2.0 - pretty-bytes: 7.0.1 - rollup: 4.46.2 - rollup-plugin-dts: 6.2.1(rollup@4.46.2)(typescript@5.8.3) + pkg-types: 2.3.0 + pretty-bytes: 7.1.0 + rollup: 4.52.4 + rollup-plugin-dts: 6.2.3(rollup@4.52.4)(typescript@5.8.3) scule: 1.3.0 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 untyped: 2.0.0 optionalDependencies: typescript: 5.8.3 @@ -31752,13 +28382,11 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.14.0: {} - undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 - undici@6.21.3: {} + undici@6.22.0: {} undici@7.14.0: {} @@ -31801,8 +28429,6 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 - unicorn-magic@0.1.0: {} - unicorn-magic@0.3.0: {} unified@11.0.5: @@ -31821,24 +28447,7 @@ snapshots: ofetch: 1.4.1 ohash: 2.0.11 - unimport@5.3.0: - dependencies: - acorn: 8.15.0 - escape-string-regexp: 5.0.0 - estree-walker: 3.0.3 - local-pkg: 1.1.2 - magic-string: 0.30.19 - mlly: 1.8.0 - pathe: 2.0.3 - picomatch: 4.0.3 - pkg-types: 2.3.0 - scule: 1.3.0 - strip-literal: 3.0.0 - tinyglobby: 0.2.15 - unplugin: 2.3.10 - unplugin-utils: 0.3.0 - - unimport@5.4.1: + unimport@5.5.0: dependencies: acorn: 8.15.0 escape-string-regexp: 5.0.0 @@ -31870,10 +28479,6 @@ snapshots: unist-util-is@4.1.0: {} - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -31895,8 +28500,8 @@ snapshots: unist-util-remove@4.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 unist-util-stringify-position@4.0.0: dependencies: @@ -31911,11 +28516,6 @@ snapshots: '@types/unist': 2.0.11 unist-util-is: 4.1.0 - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 @@ -31930,8 +28530,8 @@ snapshots: unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 universal-user-agent@6.0.1: {} @@ -31939,10 +28539,6 @@ snapshots: universalify@2.0.1: {} - unixify@1.0.0: - dependencies: - normalize-path: 2.1.1 - unpipe@1.0.0: {} unplugin-utils@0.2.5: @@ -31950,11 +28546,6 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.3 - unplugin-utils@0.3.0: - dependencies: - pathe: 2.0.3 - picomatch: 4.0.3 - unplugin-utils@0.3.1: dependencies: pathe: 2.0.3 @@ -31985,11 +28576,6 @@ snapshots: - typescript - vue - unplugin@1.16.1: - dependencies: - acorn: 8.15.0 - webpack-virtual-modules: 0.6.2 - unplugin@2.3.10: dependencies: '@jridgewell/remapping': 2.3.5 @@ -31997,37 +28583,7 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - unstorage@1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0): - dependencies: - anymatch: 3.1.3 - chokidar: 4.0.3 - destr: 2.0.5 - h3: 1.15.4 - lru-cache: 10.4.3 - node-fetch-native: 1.6.7 - ofetch: 1.4.1 - ufo: 1.6.1 - optionalDependencies: - '@netlify/blobs': 9.1.2 - db0: 0.3.2(better-sqlite3@12.4.1) - ioredis: 5.7.0 - - unstorage@1.17.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0): - dependencies: - anymatch: 3.1.3 - chokidar: 4.0.3 - destr: 2.0.5 - h3: 1.15.4 - lru-cache: 10.4.3 - node-fetch-native: 1.6.7 - ofetch: 1.4.1 - ufo: 1.6.1 - optionalDependencies: - '@netlify/blobs': 9.1.2 - db0: 0.3.2(better-sqlite3@12.4.1) - ioredis: 5.7.0 - - unstorage@1.17.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1): + unstorage@1.17.1(@upstash/redis@1.35.6)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -32038,7 +28594,7 @@ snapshots: ofetch: 1.4.1 ufo: 1.6.1 optionalDependencies: - '@netlify/blobs': 9.1.2 + '@upstash/redis': 1.35.6 db0: 0.3.4(better-sqlite3@12.4.1) ioredis: 5.8.1 @@ -32054,7 +28610,7 @@ snapshots: dependencies: citty: 0.1.6 defu: 6.1.4 - jiti: 2.5.1 + jiti: 2.6.1 knitwork: 1.2.0 scule: 1.3.0 @@ -32067,21 +28623,6 @@ snapshots: pkg-types: 2.3.0 unplugin: 2.3.10 - unwasm@0.3.9: - dependencies: - knitwork: 1.2.0 - magic-string: 0.30.19 - mlly: 1.8.0 - pathe: 1.1.2 - pkg-types: 1.3.1 - unplugin: 1.16.1 - - update-browserslist-db@1.1.3(browserslist@4.25.1): - dependencies: - browserslist: 4.25.1 - escalade: 3.2.0 - picocolors: 1.1.1 - update-browserslist-db@1.1.3(browserslist@4.26.3): dependencies: browserslist: 4.26.3 @@ -32109,14 +28650,6 @@ snapshots: url-join@5.0.0: {} - urlpattern-polyfill@10.1.0: {} - - urlpattern-polyfill@8.0.2: {} - - use-sync-external-store@1.5.0(react@19.2.0): - dependencies: - react: 19.2.0 - use-sync-external-store@1.6.0(react@19.2.0): dependencies: react: 19.2.0 @@ -32141,11 +28674,6 @@ snapshots: validate-html-nesting@1.2.3: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.1: {} vary@1.1.2: {} @@ -32172,11 +28700,11 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vinxi@0.5.8(@netlify/blobs@9.1.2)(@types/node@24.8.1)(better-sqlite3@12.4.1)(db0@0.3.2(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1): + vinxi@0.5.8(@types/node@22.18.11)(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(db0@0.3.4(better-sqlite3@12.4.1))(encoding@0.1.13)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(xml2js@0.6.2)(yaml@2.8.1): dependencies: - '@babel/core': 7.28.0 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.4 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) '@types/micromatch': 4.0.9 '@vinxi/listhen': 1.5.6 boxen: 8.0.1 @@ -32187,13 +28715,13 @@ snapshots: dax-sh: 0.43.2 defu: 6.1.4 es-module-lexer: 1.7.0 - esbuild: 0.25.8 + esbuild: 0.25.11 get-port-please: 3.2.0 h3: 1.15.3 hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.12.4(@netlify/blobs@9.1.2)(better-sqlite3@12.4.1)(encoding@0.1.13)(xml2js@0.6.2) + nitropack: 2.12.7(@upstash/redis@1.35.6)(better-sqlite3@12.4.1)(encoding@0.1.13)(xml2js@0.6.2) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -32201,12 +28729,12 @@ snapshots: resolve: 1.22.10 serve-placeholder: 2.0.2 serve-static: 1.16.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 ufo: 1.6.1 unctx: 2.4.1 unenv: 1.10.0 - unstorage: 1.16.1(@netlify/blobs@9.1.2)(db0@0.3.2(better-sqlite3@12.4.1))(ioredis@5.7.0) - vite: 6.4.0(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + unstorage: 1.17.1(@upstash/redis@1.35.6)(db0@0.3.4(better-sqlite3@12.4.1))(ioredis@5.8.1) + vite: 6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -32227,6 +28755,7 @@ snapshots: - '@vercel/functions' - '@vercel/kv' - aws4fetch + - bare-abort-controller - better-sqlite3 - db0 - debug @@ -32252,44 +28781,23 @@ snapshots: - xml2js - yaml - vite-dev-rpc@1.1.0(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-dev-rpc@1.1.0(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: birpc: 2.6.1 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-hot-client: 2.1.0(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - - vite-hot-client@2.1.0(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): - dependencies: - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-hot-client: 2.1.0(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - vite-node@3.2.4(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite-hot-client@2.1.0(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(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.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node@3.2.4(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(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.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -32304,7 +28812,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-checker@0.11.0(eslint@9.37.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.8.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -32313,14 +28821,14 @@ snapshots: picomatch: 4.0.3 tiny-invariant: 1.3.3 tinyglobby: 0.2.15 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.37.0(jiti@2.6.1) optionator: 0.9.4 typescript: 5.8.3 - vite-plugin-inspect@11.3.3(@nuxt/kit@3.19.3(magicast@0.3.5))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-inspect@11.3.3(@nuxt/kit@3.19.3(magicast@0.3.5))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -32330,29 +28838,14 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-dev-rpc: 1.1.0(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-dev-rpc: 1.1.0(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) optionalDependencies: '@nuxt/kit': 3.19.3(magicast@0.3.5) transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): - dependencies: - '@babel/core': 7.28.4 - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.9(@babel/core@7.28.4)(solid-js@1.9.9) - merge-anything: 5.1.7 - solid-js: 1.9.9 - solid-refresh: 0.6.3(solid-js@1.9.9) - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - optionalDependencies: - '@testing-library/jest-dom': 6.9.1 - transitivePeerDependencies: - - supports-color - - vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-solid@2.11.9(@testing-library/jest-dom@6.9.1)(solid-js@1.9.9)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.4 '@types/babel__core': 7.20.5 @@ -32360,88 +28853,56 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.9 solid-refresh: 0.6.3(solid-js@1.9.9) - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-plugin-top-level-await@1.6.0(@swc/helpers@0.5.17)(rollup@4.52.4)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-top-level-await@1.6.0(@swc/helpers@0.5.17)(rollup@4.52.4)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@rollup/plugin-virtual': 3.0.2(rollup@4.52.4) '@swc/core': 1.13.20(@swc/helpers@0.5.17) - '@swc/wasm': 1.13.3 + '@swc/wasm': 1.13.20 uuid: 10.0.0 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@swc/helpers' - rollup - vite-plugin-vue-tracer@1.0.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)): + vite-plugin-vue-tracer@1.0.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.22(typescript@5.8.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.7 magic-string: 0.30.19 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vue: 3.5.22(typescript@5.8.3) - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - debug: 4.4.1 + debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@5.4.19(@types/node@22.17.0)(terser@5.44.0): + vite@5.4.20(@types/node@22.18.11)(terser@5.44.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.46.2 - optionalDependencies: - '@types/node': 22.17.0 - fsevents: 2.3.3 - terser: 5.44.0 - - vite@6.3.6(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - esbuild: 0.25.10 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.52.4 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.8.1 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.44.0 - tsx: 4.20.6 - yaml: 2.8.1 - - vite@6.4.0(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - esbuild: 0.25.11 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 rollup: 4.52.4 - tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.11 fsevents: 2.3.3 - jiti: 2.6.1 terser: 5.44.0 - tsx: 4.20.6 - yaml: 2.8.1 - vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -32450,14 +28911,14 @@ snapshots: rollup: 4.52.4 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.11 fsevents: 2.3.3 jiti: 2.6.1 terser: 5.44.0 tsx: 4.20.6 yaml: 2.8.1 - vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -32466,48 +28927,28 @@ snapshots: rollup: 4.52.4 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.8.1 - fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.44.0 - tsx: 4.20.6 - yaml: 2.8.1 - - vite@7.1.7(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - esbuild: 0.25.11 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.52.0 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.11 fsevents: 2.3.3 jiti: 2.6.1 terser: 5.44.0 tsx: 4.20.6 yaml: 2.8.1 - vitefu@1.1.1(vite@6.4.0(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vitefu@1.1.1(vite@6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: - vite: 6.4.0(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.0(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu@1.1.1(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitefu@1.1.1(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): - optionalDependencies: - vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - - vitepress-plugin-group-icons@1.6.4(markdown-it@14.1.0)(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vitepress-plugin-group-icons@1.6.4(markdown-it@14.1.0)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@iconify-json/logos': 1.2.9 '@iconify-json/vscode-icons': 1.2.32 '@iconify/utils': 3.0.2 markdown-it: 14.1.0 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -32524,46 +28965,46 @@ snapshots: pretty-bytes: 7.1.0 remark: 15.0.1 remark-frontmatter: 5.0.0 - tokenx: 1.1.0 + tokenx: 1.2.0 unist-util-remove: 4.0.0 unist-util-visit: 5.0.0 transitivePeerDependencies: - supports-color - vitepress-plugin-mermaid@2.0.17(mermaid@11.12.0)(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)): + vitepress-plugin-mermaid@2.0.17(mermaid@11.12.0)(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)): dependencies: mermaid: 11.12.0 - vitepress: 1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3) + vitepress: 1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3) optionalDependencies: '@mermaid-js/mermaid-mindmap': 9.3.0 - vitepress-plugin-shiki-twoslash@0.0.6(typescript@5.8.3)(vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)): + vitepress-plugin-shiki-twoslash@0.0.6(typescript@5.8.3)(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3)): dependencies: remark-shiki-twoslash: 3.1.3(typescript@5.8.3) - vitepress: 1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3) + vitepress: 1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3) transitivePeerDependencies: - supports-color - typescript - vitepress@1.6.4(@algolia/client-search@5.35.0)(@types/node@22.17.0)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3): + vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@22.18.11)(@types/react@19.2.2)(change-case@5.4.4)(fuse.js@7.1.0)(postcss@8.5.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(terser@5.44.0)(typescript@5.8.3): dependencies: '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.35.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3) - '@iconify-json/simple-icons': 1.2.47 + '@docsearch/js': 3.8.2(@algolia/client-search@5.40.1)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.54 '@shikijs/core': 2.5.0 '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@22.17.0)(terser@5.44.0))(vue@3.5.22(typescript@5.8.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.20(@types/node@22.18.11)(terser@5.44.0))(vue@3.5.22(typescript@5.8.3)) '@vue/devtools-api': 7.7.7 - '@vue/shared': 3.5.18 + '@vue/shared': 3.5.22 '@vueuse/core': 12.8.2(typescript@5.8.3) - '@vueuse/integrations': 12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(jwt-decode@4.0.0)(typescript@5.8.3) + '@vueuse/integrations': 12.8.2(change-case@5.4.4)(focus-trap@7.6.5)(fuse.js@7.1.0)(typescript@5.8.3) focus-trap: 7.6.5 mark.js: 8.11.1 - minisearch: 7.1.2 + minisearch: 7.2.0 shiki: 2.5.0 - vite: 5.4.19(@types/node@22.17.0)(terser@5.44.0) + vite: 5.4.20(@types/node@22.18.11)(terser@5.44.0) vue: 3.5.22(typescript@5.8.3) optionalDependencies: postcss: 8.5.6 @@ -32594,34 +29035,34 @@ snapshots: - typescript - universal-cookie - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.11.5(@types/node@22.17.0)(typescript@5.8.3))(vite@7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(msw@2.11.5(@types/node@22.18.11)(typescript@5.8.3))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.1 - debug: 4.4.1 + chai: 5.3.3 + debug: 4.4.3 expect-type: 1.2.2 - magic-string: 0.30.17 + magic-string: 0.30.19 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.9.0 + std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.10(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.17.0)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.17.0 + '@types/node': 22.18.11 '@vitest/ui': 3.2.4(vitest@3.2.4) jsdom: 27.0.0(postcss@8.5.6) transitivePeerDependencies: @@ -32638,45 +29079,45 @@ snapshots: - tsx - yaml - volar-service-css@0.0.62(@volar/language-service@2.4.22): + volar-service-css@0.0.65(@volar/language-service@2.4.23): dependencies: - vscode-css-languageservice: 6.3.7 + vscode-css-languageservice: 6.3.8 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.22 + '@volar/language-service': 2.4.23 - volar-service-emmet@0.0.62(@volar/language-service@2.4.22): + volar-service-emmet@0.0.65(@volar/language-service@2.4.23): dependencies: - '@emmetio/css-parser': 0.4.0 + '@emmetio/css-parser': https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660 '@emmetio/html-matcher': 1.3.0 '@vscode/emmet-helper': 2.11.0 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.22 + '@volar/language-service': 2.4.23 - volar-service-html@0.0.62(@volar/language-service@2.4.22): + volar-service-html@0.0.65(@volar/language-service@2.4.23): dependencies: - vscode-html-languageservice: 5.5.1 + vscode-html-languageservice: 5.6.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.22 + '@volar/language-service': 2.4.23 - volar-service-prettier@0.0.62(@volar/language-service@2.4.22)(prettier@3.6.2): + volar-service-prettier@0.0.65(@volar/language-service@2.4.23)(prettier@3.6.2): dependencies: vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.22 + '@volar/language-service': 2.4.23 prettier: 3.6.2 - volar-service-typescript-twoslash-queries@0.0.62(@volar/language-service@2.4.22): + volar-service-typescript-twoslash-queries@0.0.65(@volar/language-service@2.4.23): dependencies: vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.22 + '@volar/language-service': 2.4.23 - volar-service-typescript@0.0.62(@volar/language-service@2.4.22): + volar-service-typescript@0.0.65(@volar/language-service@2.4.23): dependencies: path-browserify: 1.0.1 semver: 7.7.3 @@ -32685,23 +29126,23 @@ snapshots: vscode-nls: 5.2.0 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.22 + '@volar/language-service': 2.4.23 - volar-service-yaml@0.0.62(@volar/language-service@2.4.22): + volar-service-yaml@0.0.65(@volar/language-service@2.4.23): dependencies: vscode-uri: 3.1.0 yaml-language-server: 1.15.0 optionalDependencies: - '@volar/language-service': 2.4.22 + '@volar/language-service': 2.4.23 - vscode-css-languageservice@6.3.7: + vscode-css-languageservice@6.3.8: dependencies: '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.12 vscode-languageserver-types: 3.17.5 vscode-uri: 3.1.0 - vscode-html-languageservice@5.5.1: + vscode-html-languageservice@5.6.0: dependencies: '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.12 @@ -32845,8 +29286,6 @@ snapshots: web-namespaces@2.0.1: {} - web-streams-polyfill@3.3.3: {} - webidl-conversions@3.0.1: {} webidl-conversions@8.0.0: {} @@ -32867,7 +29306,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.26.3 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -32876,11 +29315,11 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 + schema-utils: 4.3.3 + tapable: 2.3.0 terser-webpack-plugin: 5.3.14(webpack@5.100.2) watchpack: 2.4.4 webpack-sources: 3.3.3 @@ -32900,7 +29339,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.26.3 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -32909,11 +29348,11 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 + schema-utils: 4.3.3 + tapable: 2.3.0 terser-webpack-plugin: 5.3.14(@swc/core@1.13.20(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.20(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 @@ -32974,26 +29413,6 @@ snapshots: winreg@0.0.12: {} - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.17.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - word-wrap@1.2.5: {} wordwrap@1.0.0: {} @@ -33049,11 +29468,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@6.0.0: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - ws@8.18.0: {} ws@8.18.3: {} @@ -33062,7 +29476,7 @@ snapshots: dependencies: is-wsl: 3.1.0 - wxt@0.20.11(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + wxt@0.20.11(@types/node@22.18.11)(jiti@2.6.1)(rollup@4.52.4)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@1natsu/wait-element': 4.1.2 '@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.52.4) @@ -33072,15 +29486,15 @@ snapshots: '@wxt-dev/browser': 0.1.4 '@wxt-dev/storage': 1.2.0 async-mutex: 0.5.0 - c12: 3.3.0(magicast@0.3.5) + c12: 3.3.1(magicast@0.3.5) cac: 6.7.14 chokidar: 4.0.3 - ci-info: 4.3.0 + ci-info: 4.3.1 consola: 3.4.2 defu: 6.1.4 - dotenv: 17.2.2 + dotenv: 17.2.3 dotenv-expand: 12.0.3 - esbuild: 0.25.10 + esbuild: 0.25.11 fast-glob: 3.3.3 filesize: 11.0.13 fs-extra: 11.3.2 @@ -33105,9 +29519,9 @@ snapshots: prompts: 2.4.2 publish-browser-extension: 3.0.2 scule: 1.3.0 - unimport: 5.3.0 - vite: 7.1.7(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + unimport: 5.5.0 + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.11)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) web-ext-run: 0.2.4 transitivePeerDependencies: - '@types/node' @@ -33231,12 +29645,8 @@ snapshots: dependencies: yoctocolors: 2.1.2 - yoctocolors-cjs@2.1.2: {} - yoctocolors-cjs@2.1.3: {} - yoctocolors@2.1.1: {} - yoctocolors@2.1.2: {} youch-core@0.3.3: @@ -33260,14 +29670,6 @@ snapshots: cookie: 1.0.2 youch-core: 0.3.3 - youch@4.1.0-beta.8: - dependencies: - '@poppinss/colors': 4.1.5 - '@poppinss/dumper': 0.6.4 - '@speed-highlight/core': 1.2.7 - cookie: 1.0.2 - youch-core: 0.3.3 - zhead@2.2.4: {} zimmerframe@1.1.4: {} diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..f9d0b1487 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,70 @@ +import process from 'node:process' +import { svelte } from '@sveltejs/vite-plugin-svelte' +import { svelteTesting } from '@testing-library/svelte/vite' +import { loadEnv } from 'vite' +import solid from 'vite-plugin-solid' +import { defineConfig } from 'vitest/config' + +export default defineConfig(({ mode }) => ({ + test: { + env: loadEnv(mode, process.cwd(), ''), + projects: [ + { + test: { + globals: true, + setupFiles: ['./vitest.javascript.ts'], + include: ['**/*.test.ts'], + }, + }, + { + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['./vitest.javascript.ts', './vitest.jsdom.ts'], + include: [ + './packages/react/**/*.test.tsx', + './packages/react-query/**/*.test.tsx', + './packages/react-swr/**/*.test.tsx', + './packages/tanstack-query/**/*.test.tsx', + './packages/vue-colada/**/*.test.tsx', + './packages/vue-query/**/*.test.tsx', + ], + }, + }, + { + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['./vitest.javascript.ts', './vitest.jsdom.ts'], + include: [ + './packages/solid-query/**/*.test.tsx', + ], + deps: { + inline: [/solid-js/, /@solidjs\/testing-library/], + }, + }, + plugins: [solid()], + resolve: { + conditions: ['development', 'browser'], + }, + }, + { + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['./vitest.javascript.ts', './vitest.jsdom.ts'], + include: [ + './packages/svelte-query/**/*.test.tsx', + ], + deps: { + inline: [/svelte/, /@testing-library\/svelte /], + }, + }, + plugins: [svelte(), svelteTesting()], + resolve: { + conditions: ['development', 'browser'], + }, + }, + ], + }, +})) diff --git a/vitest.workspace.ts b/vitest.workspace.ts deleted file mode 100644 index d4fb1bd86..000000000 --- a/vitest.workspace.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { svelte } from '@sveltejs/vite-plugin-svelte' -import { svelteTesting } from '@testing-library/svelte/vite' -import solid from 'vite-plugin-solid' -import { defineWorkspace } from 'vitest/config' - -export default defineWorkspace([ - { - test: { - globals: true, - include: ['**/*.test.ts'], - setupFiles: ['./vitest.javascript.ts'], - }, - }, - { - test: { - globals: true, - environment: 'jsdom', - setupFiles: ['./vitest.javascript.ts', './vitest.jsdom.ts'], - include: [ - './packages/react/**/*.test.tsx', - './packages/react-query/**/*.test.tsx', - './packages/react-swr/**/*.test.tsx', - './packages/tanstack-query/**/*.test.tsx', - './packages/vue-colada/**/*.test.tsx', - './packages/vue-query/**/*.test.tsx', - ], - }, - }, - { - test: { - globals: true, - environment: 'jsdom', - setupFiles: ['./vitest.javascript.ts', './vitest.jsdom.ts'], - include: [ - './packages/solid-query/**/*.test.tsx', - ], - deps: { - inline: [/solid-js/, /@solidjs\/testing-library/], - }, - }, - plugins: [solid()], - resolve: { - conditions: ['development', 'browser'], - }, - }, - { - test: { - globals: true, - environment: 'jsdom', - setupFiles: ['./vitest.javascript.ts', './vitest.jsdom.ts'], - include: [ - './packages/svelte-query/**/*.test.tsx', - ], - deps: { - inline: [/svelte/, /@testing-library\/svelte /], - }, - }, - plugins: [svelte(), svelteTesting()], - resolve: { - conditions: ['development', 'browser'], - }, - }, -])