diff --git a/.changeset/orpc-integration.md b/.changeset/orpc-integration.md new file mode 100644 index 00000000..7ccad9c4 --- /dev/null +++ b/.changeset/orpc-integration.md @@ -0,0 +1,34 @@ +--- +'evlog': minor +--- + +Add oRPC integration (`evlog/orpc`) with automatic wide-event logging. Two complementary primitives: + +- `withEvlog(handler)` — wraps `RPCHandler` / `OpenAPIHandler` from `@orpc/server/fetch`. Each matched request becomes one wide event with full pipeline support (drain, enrich, `include`/`exclude`, route-based service overrides, tail sampling). Excluded routes still receive a no-op `context.log` so procedures never crash on missing fields. +- `evlog()` — procedure-level middleware (`os.use(evlog())`). Tags the wide event with `operation` (procedure path joined with `.`), forwards the request logger as `context.log`, and promotes the level to `error` when a procedure throws. + +```ts +import { os } from '@orpc/server' +import { RPCHandler } from '@orpc/server/fetch' +import { evlog, withEvlog, type EvlogOrpcContext } from 'evlog/orpc' + +const base = os.$context().use(evlog()) + +const router = { + ping: base.handler(({ context }) => { + context.log.set({ pinged: true }) + return { ok: true } + }), +} + +const handler = withEvlog(new RPCHandler(router)) + +export default async function fetch(request: Request) { + const { matched, response } = await handler.handle(request, { prefix: '/rpc' }) + return matched ? response : new Response('Not Found', { status: 404 }) +} +``` + +`useLogger()` is exposed for off-context access (utility modules / deep service functions). `EvlogOrpcContext` is the type to plug into `os.$context()` for typed access. + +Closes [#297](https://github.com/HugoRCD/evlog/issues/297). diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9eaf4973..18acfc16 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -43,6 +43,7 @@ scope. - next (Next.js integration) - nitro (Nitro plugin) - nuxt (Nuxt module) +- orpc (oRPC integration) - otlp (OTLP drain adapter) - playground (the playground app) - posthog (PostHog drain adapter) diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml index 855f92b7..24663106 100644 --- a/.github/workflows/semantic-pull-request.yml +++ b/.github/workflows/semantic-pull-request.yml @@ -42,6 +42,7 @@ jobs: next nitro nuxt + orpc otlp playground posthog diff --git a/apps/docs/app/components/features/FeatureFrameworks.vue b/apps/docs/app/components/features/FeatureFrameworks.vue index eafd5ac0..4955da16 100644 --- a/apps/docs/app/components/features/FeatureFrameworks.vue +++ b/apps/docs/app/components/features/FeatureFrameworks.vue @@ -32,6 +32,7 @@ const frameworkRows = [ { name: 'Hono', icon: 'i-simple-icons-hono', tab: 8 }, { name: 'Fastify', icon: 'i-simple-icons-fastify', tab: 9 }, { name: 'Elysia', icon: 'i-custom-elysia', tab: 10 }, + { name: 'oRPC', icon: 'i-lucide-network', tab: 13 }, { name: 'Cloudflare', icon: 'i-simple-icons-cloudflare', tab: 11 }, { name: 'Vite', icon: 'i-custom-vite', link: '/reference/vite-plugin' }, ], @@ -153,6 +154,9 @@ const frameworkRows = [
+
+ +
diff --git a/apps/docs/content/0.landing.md b/apps/docs/content/0.landing.md index e41129b2..f43d2035 100644 --- a/apps/docs/content/0.landing.md +++ b/apps/docs/content/0.landing.md @@ -425,6 +425,32 @@ A modern TypeScript logger built for everything you ship. Simple logs, wide even }) ``` + #orpc + ```ts [server/orpc.ts] + import { os } from '@orpc/server' + import { RPCHandler } from '@orpc/server/fetch' + import { evlog, withEvlog, type EvlogOrpcContext } from 'evlog/orpc' + import { createAxiomDrain } from 'evlog/axiom' + + const base = os.$context().use(evlog()) + + const router = { + checkout: base + .input(z.object({ cartId: z.string() })) + .handler(async ({ input, context }) => { + const cart = await db.findCart(input.cartId) + context.log.set({ cart: { items: cart.items.length, total: cart.total } }) + + const charge = await stripe.charge(cart.total) + context.log.set({ stripe: { chargeId: charge.id } }) + + return { orderId: charge.id } + }), + } + + const handler = withEvlog(new RPCHandler(router), { drain: createAxiomDrain() }) + ``` + #cloudflare ```ts [src/worker.ts] import { defineWorkerFetch, initWorkersLogger } from 'evlog/workers' diff --git a/apps/docs/content/1.start/3.installation.md b/apps/docs/content/1.start/3.installation.md index 46e97037..80b088f3 100644 --- a/apps/docs/content/1.start/3.installation.md +++ b/apps/docs/content/1.start/3.installation.md @@ -170,6 +170,15 @@ After installing the package, follow the setup guide for your framework: ::: :::card --- + icon: i-lucide-network + title: oRPC + to: /integrate/frameworks/orpc + color: neutral + --- + `withEvlog()` handler wrapper + `evlog()` procedure middleware. + ::: + :::card + --- icon: i-simple-icons-cloudflare title: Cloudflare Workers to: /integrate/frameworks/cloudflare-workers diff --git a/apps/docs/content/3.integrate/frameworks/00.overview.md b/apps/docs/content/3.integrate/frameworks/00.overview.md index 6c068119..be8c2c6f 100644 --- a/apps/docs/content/3.integrate/frameworks/00.overview.md +++ b/apps/docs/content/3.integrate/frameworks/00.overview.md @@ -28,6 +28,7 @@ No HTTP framework? Use [Standalone TypeScript](/integrate/frameworks/standalone) | [Hono](/integrate/frameworks/hono) | `evlog/hono` | Middleware | `c.get('log')` | Stable | | [Fastify](/integrate/frameworks/fastify) | `evlog/fastify` | Plugin | `request.log` / `useLogger()` | Stable | | [Elysia](/integrate/frameworks/elysia) | `evlog/elysia` | Plugin | `log` (context) / `useLogger()` | Stable | +| [oRPC](/integrate/frameworks/orpc) | `evlog/orpc` | Handler wrapper + middleware | `context.log` / `useLogger()` | Stable | | [Cloudflare Workers](/integrate/frameworks/cloudflare-workers) | `evlog/workers` | Factory | `createWorkersLogger()` | Stable | | [AWS Lambda](/integrate/frameworks/aws-lambda) | `evlog` | Manual | `createLogger()` / `createRequestLogger()` | Guide | | [Standalone](/integrate/frameworks/standalone) | `evlog` | Manual | `createLogger()` / `createRequestLogger()` | Stable | @@ -143,6 +144,15 @@ No HTTP framework? Use [Standalone TypeScript](/integrate/frameworks/standalone) ::: :::card --- + icon: i-lucide-network + title: oRPC + to: /integrate/frameworks/orpc + color: neutral + --- + Handler wrapper + procedure middleware exposing `context.log` and per-procedure `operation`. + ::: + :::card + --- icon: i-simple-icons-cloudflare title: Cloudflare Workers to: /integrate/frameworks/cloudflare-workers diff --git a/apps/docs/content/3.integrate/frameworks/15.orpc.md b/apps/docs/content/3.integrate/frameworks/15.orpc.md new file mode 100644 index 00000000..35c42a9f --- /dev/null +++ b/apps/docs/content/3.integrate/frameworks/15.orpc.md @@ -0,0 +1,310 @@ +--- +title: oRPC +description: Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications. +navigation: + title: oRPC + icon: i-lucide-network +links: + - label: Source Code + icon: i-simple-icons-github + to: https://github.com/hugorcd/evlog/tree/main/examples/orpc + color: neutral + variant: subtle +--- + +`evlog/orpc` ships two primitives: `withEvlog(handler)` wraps any oRPC handler (`RPCHandler`, `OpenAPIHandler`) so each request becomes one wide event, and `evlog()` is a procedure middleware that exposes `context.log` and tags the wide event with the procedure path as `operation`. + +::prompt +--- +description: Set up evlog in my oRPC app +icon: i-lucide-network +actions: + - copy + - cursor + - windsurf +--- + +Set up evlog in my oRPC app. + +- Install evlog: pnpm add evlog +- Call initLogger({ env: { service: 'my-rpc' } }) at startup +- Wrap your RPCHandler / OpenAPIHandler with withEvlog() from 'evlog/orpc' +- Add os.use(evlog()) on your base procedure for typed context.log + per-procedure operation +- Declare EvlogOrpcContext on your base context to type context.log +- Throw evlog errors (createError or defineErrorCatalog) directly from procedures — evlog/orpc bridges them to ORPCError +- Pass drain, enrich, include, and keep options to withEvlog() + +Docs: https://www.evlog.dev/integrate/frameworks/orpc +Adapters: https://www.evlog.dev/integrate/adapters/overview + +:: + +## Quick Start + +### 1. Install + +::code-group +```bash [pnpm] +pnpm add evlog @orpc/server +``` +```bash [bun] +bun add evlog @orpc/server +``` +```bash [yarn] +yarn add evlog @orpc/server +``` +```bash [npm] +npm install evlog @orpc/server +``` +:: + +### 2. Initialize and wire the wrappers + +```typescript [server/orpc.ts] +import { os } from '@orpc/server' +import { RPCHandler } from '@orpc/server/fetch' +import { initLogger } from 'evlog' +import { evlog, withEvlog, type EvlogOrpcContext } from 'evlog/orpc' + +initLogger({ + env: { service: 'my-rpc' }, +}) + +const base = os.$context().use(evlog()) + +const router = { + health: base.handler(({ context }) => { + context.log.set({ route: 'health' }) + return { ok: true } + }), +} + +const handler = withEvlog(new RPCHandler(router)) + +export default async function fetch(request: Request) { + const { matched, response } = await handler.handle(request, { prefix: '/rpc' }) + return matched ? response : new Response('Not Found', { status: 404 }) +} +``` + +::callout{icon="i-custom-vite" color="info"} +**Using Vite?** The [`evlog/vite` plugin](/reference/vite-plugin) replaces the `initLogger()` call with compile-time auto-initialization, strips `log.debug()` from production builds, and injects source locations. +:: + +`EvlogOrpcContext` declares `log: RequestLogger` on the procedure context so `context.log` is fully typed in every procedure that descends from `base`. + +## Wide Events + +Build up context progressively through your handler. One request = one wide event: + +```typescript [server/orpc.ts] +const getUser = base + .input(z.object({ id: z.string() })) + .handler(async ({ input, context }) => { + context.log.set({ user: { id: input.id } }) + + const user = await db.findUser(input.id) + context.log.set({ user: { name: user.name, plan: user.plan } }) + + const orders = await db.findOrders(input.id) + context.log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } }) + + return { user, orders } + }) +``` + +All fields are merged into a single wide event emitted when the request completes. The `operation` field is filled automatically from the procedure path (nested routers like `users.profile.get` surface as `operation: 'users.profile.get'`): + +```bash [Terminal output] +14:58:15 INFO [my-rpc] POST /rpc/getUser 200 in 12ms + ├─ operation: getUser + ├─ orders: count=2 totalRevenue=6298 + ├─ user: id=usr_123 name=Alice plan=pro + └─ requestId: 4a8ff3a8-... +``` + +## useLogger() + +Use `useLogger()` to access the request-scoped logger from anywhere in the call stack without passing the context through your service layer: + +```typescript [server/services/user.ts] +import { useLogger } from 'evlog/orpc' + +export async function findUser(id: string) { + const log = useLogger() + log.set({ user: { id } }) + + const user = await db.findUser(id) + log.set({ user: { name: user.name, plan: user.plan } }) + + return user +} +``` + +```typescript [server/orpc.ts] +import { findUser } from './services/user' + +const getUser = base + .input(z.object({ id: z.string() })) + .handler(async ({ input }) => findUser(input.id)) +``` + +Both `context.log` and `useLogger()` return the same logger instance. `useLogger()` uses `AsyncLocalStorage` to propagate the logger across async boundaries. + +## Error Handling + +Use `createError` for structured errors with `why`, `fix`, and `link` fields. The `evlog()` middleware catches the throw, records it on the wide event, and bridges it to an `ORPCError` so the wire response carries your `code`, `status`, `message`, and the human-guidance fields: + +```typescript [server/orpc.ts] +import { createError } from 'evlog' + +const checkout = base + .handler(({ context }) => { + context.log.set({ cart: { items: 3, total: 9999 } }) + + throw createError({ + message: 'Payment failed', + code: 'PAYMENT_DECLINED', + status: 402, + why: 'Card declined by issuer', + fix: 'Try a different payment method', + link: 'https://docs.example.com/payments/declined', + }) + }) +``` + +The error is captured and logged with both the custom context and structured error fields: + +```bash [Terminal output] +14:58:20 ERROR [my-rpc] POST /rpc/checkout 402 in 3ms + ├─ operation: checkout + ├─ error: name=EvlogError code=PAYMENT_DECLINED status=402 message=Payment failed + ├─ cart: items=3 total=9999 + └─ requestId: 880a50ac-... +``` + +Wire response returned to the client: + +```json [HTTP 402] +{ + "defined": false, + "code": "PAYMENT_DECLINED", + "status": 402, + "message": "Payment failed", + "data": { + "why": "Card declined by issuer", + "fix": "Try a different payment method", + "link": "https://docs.example.com/payments/declined" + } +} +``` + +::callout{icon="i-lucide-info" color="info"} +oRPC's error envelope is `{ defined, code, status, message, data }` — clients deserialize errors as a typed union via `safe()` from `@orpc/client`. evlog follows the protocol, so `why`/`fix`/`link` live under `data` instead of at the response root. The authoring API (`createError` / [`defineErrorCatalog`](/learn/structured-errors#error-catalogs)) is identical to the rest of evlog. +:: + +## Configuration + +See the [Configuration reference](/reference/configuration) for all available options (`initLogger`, middleware options, sampling, silent mode, etc.). + +## Drain & Enrichers + +Configure drain adapters and enrichers directly in the `withEvlog()` options: + +```typescript [server/orpc.ts] +import { createAxiomDrain } from 'evlog/axiom' +import { createUserAgentEnricher } from 'evlog/enrichers' + +const userAgent = createUserAgentEnricher() + +const handler = withEvlog(new RPCHandler(router), { + drain: createAxiomDrain(), + enrich: (ctx) => { + userAgent(ctx) + ctx.event.region = process.env.FLY_REGION + }, +}) +``` + +### Pipeline (Batching & Retry) + +For production, wrap your adapter with `createDrainPipeline` to batch events and retry on failure: + +```typescript [server/orpc.ts] +import type { DrainContext } from 'evlog' +import { createAxiomDrain } from 'evlog/axiom' +import { createDrainPipeline } from 'evlog/pipeline' + +const pipeline = createDrainPipeline({ + batch: { size: 50, intervalMs: 5000 }, + retry: { maxAttempts: 3 }, +}) +const drain = pipeline(createAxiomDrain()) + +const handler = withEvlog(new RPCHandler(router), { drain }) +``` + +::callout{icon="i-lucide-info" color="info"} +Call `drain.flush()` on server shutdown to ensure all buffered events are sent. See the [Pipeline docs](/extend/drain-pipeline) for all options. +:: + +## Tail Sampling + +Use `keep` to force-retain specific events regardless of head sampling: + +```typescript [server/orpc.ts] +const handler = withEvlog(new RPCHandler(router), { + drain: createAxiomDrain(), + keep: (ctx) => { + if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true + }, +}) +``` + +## Route Filtering + +`include` / `exclude` match against the HTTP path (the request URL), not the procedure name: + +```typescript [server/orpc.ts] +const handler = withEvlog(new RPCHandler(router), { + include: ['/rpc/**'], + exclude: ['/rpc/_internal/**', '/health'], + routes: { + '/rpc/auth/**': { service: 'auth-service' }, + '/rpc/payment/**': { service: 'payment-service' }, + }, +}) +``` + +When a route is filtered out, the wrapper still injects a no-op `context.log` so procedures never crash on missing fields — the wide event simply isn't emitted and drain/enrich aren't called. + +## Run Locally + +```bash [Terminal] +git clone https://github.com/hugorcd/evlog.git +cd evlog +pnpm install +pnpm run example:orpc +``` + +Open [http://localhost:3000](http://localhost:3000) to explore the interactive test UI. + +::card-group + :::card + --- + icon: i-simple-icons-github + title: Source Code + to: https://github.com/hugorcd/evlog/tree/main/examples/orpc + --- + Browse the complete oRPC example source on GitHub. + ::: +:: + +## Next Steps + +Deepen your **oRPC** integration: + +- [Wide Events](/learn/wide-events): Design comprehensive events with context layering +- [Adapters](/integrate/adapters/overview): Send logs to Axiom, Sentry, PostHog, and more +- [Sampling](/learn/sampling): Control log volume with head and tail sampling +- [Structured Errors](/learn/structured-errors): Throw errors with `why`, `fix`, and `link` fields diff --git a/apps/docs/skills/review-logging-patterns/SKILL.md b/apps/docs/skills/review-logging-patterns/SKILL.md index 5903fde7..0196bc8a 100644 --- a/apps/docs/skills/review-logging-patterns/SKILL.md +++ b/apps/docs/skills/review-logging-patterns/SKILL.md @@ -1,6 +1,6 @@ --- name: review-logging-patterns -description: Review code for logging patterns and suggest evlog adoption. Guides setup on Nuxt, Next.js, SvelteKit, Nitro, TanStack Start, React Router, NestJS, Express, Hono, Fastify, Elysia, Cloudflare Workers, and standalone TypeScript. Detects console.log spam, unstructured errors, and missing context. Covers wide events, structured errors, drain adapters (Axiom, OTLP, HyperDX, PostHog, Sentry, Better Stack, Datadog), sampling, enrichers, and AI SDK integration (token usage, tool calls, streaming metrics, telemetry integration, cost estimation, embedding metadata). +description: Review code for logging patterns and suggest evlog adoption. Guides setup on Nuxt, Next.js, SvelteKit, Nitro, TanStack Start, React Router, NestJS, Express, Hono, Fastify, Elysia, oRPC, Cloudflare Workers, and standalone TypeScript. Detects console.log spam, unstructured errors, and missing context. Covers wide events, structured errors, drain adapters (Axiom, OTLP, HyperDX, PostHog, Sentry, Better Stack, Datadog), sampling, enrichers, and AI SDK integration (token usage, tool calls, streaming metrics, telemetry integration, cost estimation, embedding metadata). license: MIT metadata: author: HugoRCD @@ -644,6 +644,61 @@ export const middleware: Route.MiddlewareFunction[] = [ ] ``` +### oRPC + +```typescript +import { os } from '@orpc/server' +import { RPCHandler } from '@orpc/server/fetch' +import { initLogger } from 'evlog' +import { evlog, withEvlog, type EvlogOrpcContext } from 'evlog/orpc' + +initLogger({ env: { service: 'my-rpc' } }) + +const base = os.$context().use(evlog()) + +const router = { + ping: base.handler(({ context }) => { + context.log.set({ pinged: true }) + return { ok: true } + }), +} + +const handler = withEvlog(new RPCHandler(router)) + +export default async function fetch(request: Request) { + const { matched, response } = await handler.handle(request, { prefix: '/rpc' }) + return matched ? response : new Response('Not Found', { status: 404 }) +} +``` + +`withEvlog()` wraps the handler so each matched request emits one wide event; `os.use(evlog())` exposes `context.log` on every procedure that descends from `base` and tags the wide event with `operation` (the procedure path joined with `.`). + +Use `useLogger()` to access the logger from utility modules: + +```typescript +import { useLogger } from 'evlog/orpc' + +async function chargeCard(amount: number) { + const log = useLogger() + log.set({ payment: { amount } }) +} +``` + +Full pipeline with drain, enrich, and tail sampling: + +```typescript +import { createAxiomDrain } from 'evlog/axiom' + +const handler = withEvlog(new RPCHandler(router), { + include: ['/rpc/**'], + drain: createAxiomDrain(), + enrich: (ctx) => { ctx.event.region = process.env.FLY_REGION }, + keep: (ctx) => { + if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true + }, +}) +``` + ### Cloudflare Workers ```typescript diff --git a/examples/orpc/README.md b/examples/orpc/README.md new file mode 100644 index 00000000..87753773 --- /dev/null +++ b/examples/orpc/README.md @@ -0,0 +1,31 @@ +# oRPC Example + +```bash +bun run dev +``` + +Open [http://localhost:3000](http://localhost:3000) to test routes from the UI. + +The example wires `withEvlog()` around an `OpenAPIHandler` so each procedure call becomes a single wide event, and uses `os.use(evlog())` on the procedure base to expose `context.log` and tag every event with `operation` (the procedure path joined with `.`). + +## What it demonstrates + +| Endpoint | RPC feature shown | +|---|---| +| `GET /health` | Minimal procedure, `context.log.set()` | +| `GET /users` | Nested router (`users.list`) → `operation: 'users.list'` on the wide event | +| `GET /users/{id}` | Zod input schema, context accumulation in a service via `useLogger()`, email masking before logging | +| `GET /users/unknown` | Typed `errors.USER_NOT_FOUND({ data: { userId } })` from `os.errors({...})` — clean `defined: true` response | +| `POST /payments/charge` | Typed `errors.PAYMENT_DECLINED` with structured `data` (reason + retryable flag) | +| `DELETE /admin/danger/{id}` | Auth middleware injecting `context.user`, role check, typed `FORBIDDEN` | + +## What to look for in the terminal + +Each request emits one pretty-printed wide event with: + +- `operation` — the full procedure path (e.g. `payments.charge`, `users.get`). +- `auth` — set by the auth middleware, only on procedures that go through `authed`. +- `error` — only on `error` events: `code`, `status`, and `data` are captured from the `ORPCError` thrown by `errors.(...)`. +- `runtime: 'bun'` and `pid` — added by the `enrich` callback configured on `withEvlog()`. + +Events are also drained to PostHog when `POSTHOG_API_KEY` is set in the root `.env`. diff --git a/examples/orpc/package.json b/examples/orpc/package.json new file mode 100644 index 00000000..a440dfc3 --- /dev/null +++ b/examples/orpc/package.json @@ -0,0 +1,18 @@ +{ + "name": "evlog-orpc-example", + "private": true, + "type": "module", + "scripts": { + "dev": "bun --watch src/index.ts", + "start": "bun src/index.ts" + }, + "dependencies": { + "evlog": "workspace:*", + "@orpc/server": "^1.14.2", + "@orpc/openapi": "^1.14.2", + "zod": "^4.4.3" + }, + "devDependencies": { + "@types/bun": "latest" + } +} diff --git a/examples/orpc/src/index.ts b/examples/orpc/src/index.ts new file mode 100644 index 00000000..76914be8 --- /dev/null +++ b/examples/orpc/src/index.ts @@ -0,0 +1,169 @@ +import { os } from '@orpc/server' +import { OpenAPIHandler } from '@orpc/openapi/fetch' +import { z } from 'zod' +import { defineErrorCatalog, initLogger, type EnrichContext } from 'evlog' +import { evlog, useLogger, withEvlog, type EvlogOrpcContext } from 'evlog/orpc' +import { createPostHogDrain } from 'evlog/posthog' +import { testUI } from './ui' + +initLogger({ + env: { service: 'orpc-example' }, + pretty: true, +}) + +const exampleErrors = defineErrorCatalog('example', { + PAYMENT_DECLINED: { + status: 402, + message: 'Payment declined', + why: 'The card issuer rejected the charge for insufficient funds', + fix: 'Ask the user to use a different card or top up the existing one', + link: 'https://docs.example.com/payments/declined', + }, + USER_NOT_FOUND: { + status: 404, + message: 'User not found', + why: 'No active user matches that id in the demo dataset', + fix: 'Try /users/42 or /users/43', + link: 'https://docs.example.com/api/users#not-found', + }, + FORBIDDEN: { + status: 403, + message: 'Forbidden', + why: 'The current user role does not allow destructive admin actions', + fix: 'Have a superadmin promote your role or call this endpoint with a superadmin API key', + link: 'https://docs.example.com/api/admin#permissions', + }, +}) + +const base = os.$context().use(evlog()) + +type Role = 'guest' | 'admin' | 'superadmin' + +interface AuthedUser { + id: string + name: string + role: Role + apiKey: string +} + +const authed = base.use(async ({ context, next }) => { + const user: AuthedUser = { id: 'u-1', name: 'Alice', role: 'admin', apiKey: 'demo' } + context.log.set({ auth: { ok: true, userId: user.id, role: user.role } }) + return next({ + context: { ...context, user }, + }) +}) + +function findUser(userId: string) { + const log = useLogger() + log.set({ user: { id: userId } }) + + if (userId === 'unknown') return null + + const user = { id: userId, name: 'Alice', plan: 'pro' as const, email: 'alice@example.com' } + const [local, domain] = user.email.split('@') + log.set({ user: { name: user.name, plan: user.plan, email: `${local![0]}***@${domain}` } }) + return user +} + +const usersRouter = { + list: base + .route({ method: 'GET', path: '/users', summary: 'List users (nested router demo)' }) + .handler(({ context }) => { + const list = [ + { id: '42', name: 'Alice' }, + { id: '43', name: 'Bob' }, + ] + context.log.set({ list: { count: list.length } }) + return { users: list } + }), + + get: base + .route({ method: 'GET', path: '/users/{id}', summary: 'Get user with input schema + masking' }) + .input(z.object({ id: z.string() })) + .handler(({ input }) => { + const user = findUser(input.id) + if (!user) { + throw exampleErrors.USER_NOT_FOUND() + } + const orders = [{ id: 'order_1', total: 4999 }, { id: 'order_2', total: 1299 }] + const log = useLogger() + log.set({ + orders: { + count: orders.length, + totalRevenue: orders.reduce((sum, o) => sum + o.total, 0), + }, + }) + return { user, orders } + }), +} + +const paymentsRouter = { + charge: base + .route({ method: 'POST', path: '/payments/charge', summary: 'createError() catalog → ORPCError bridge' }) + .input(z.object({ amount: z.number().int().positive() })) + .handler(({ input, context }) => { + context.log.set({ payment: { amount: input.amount } }) + throw exampleErrors.PAYMENT_DECLINED({ + internal: { paymentRef: 'demo_pay_X', attemptedAmount: input.amount }, + }) + }), +} + +const adminRouter = { + delete: authed + .route({ method: 'DELETE', path: '/admin/danger/{id}', summary: 'Auth middleware + role check + catalog error' }) + .input(z.object({ id: z.string() })) + .handler(({ input, context }) => { + if (context.user.role !== 'superadmin') { + throw exampleErrors.FORBIDDEN() + } + context.log.set({ deletedId: input.id, by: context.user.id }) + return { ok: true } + }), +} + +const router = { + health: base + .route({ method: 'GET', path: '/health', summary: 'Basic health check' }) + .handler(({ context }) => { + context.log.set({ route: 'health' }) + return { ok: true } + }), + + users: usersRouter, + payments: paymentsRouter, + admin: adminRouter, +} + +const handler = withEvlog( + new OpenAPIHandler(router), + { + drain: createPostHogDrain(), + enrich: (ctx: EnrichContext) => { + ctx.event.runtime = 'bun' + ctx.event.pid = process.pid + }, + keep: (ctx) => { + if (ctx.duration && ctx.duration > 1000) ctx.shouldKeep = true + }, + }, +) + +const port = Number(process.env.PORT ?? 3000) + +const server = Bun.serve({ + port, + async fetch(request) { + const url = new URL(request.url) + if (url.pathname === '/' && request.method === 'GET') { + return new Response(testUI(), { headers: { 'content-type': 'text/html' } }) + } + const { matched, response } = await handler.handle(request, { + context: {} as EvlogOrpcContext, + }) + return matched ? response : new Response('Not Found', { status: 404 }) + }, +}) + +console.log(`oRPC server started on http://localhost:${server.port}`) diff --git a/examples/orpc/src/ui.ts b/examples/orpc/src/ui.ts new file mode 100644 index 00000000..ac9acb56 --- /dev/null +++ b/examples/orpc/src/ui.ts @@ -0,0 +1,271 @@ +interface Route { + method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' + path: string + description: string + body?: string +} + +const routes: Route[] = [ + { method: 'GET', path: '/health', description: 'Basic procedure with log.set()' }, + { method: 'GET', path: '/users', description: 'Nested router (users.list)' }, + { method: 'GET', path: '/users/42', description: 'Input schema + context accumulation + email mask' }, + { method: 'GET', path: '/users/unknown', description: 'Typed USER_NOT_FOUND error' }, + { method: 'POST', path: '/payments/charge', description: 'Typed PAYMENT_DECLINED error', body: '{"amount":1999}' }, + { method: 'DELETE', path: '/admin/danger/x-42', description: 'Auth middleware injects context.user → FORBIDDEN' }, +] + +function escapeAttr(value: string): string { + return value + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(//g, '>') +} + +export function testUI(): string { + const routeButtons = routes.map(r => ` + + `).join('') + + return ` + + + + + evlog — oRPC Example + + + +
+
+

evlog

+ orpc-example +
+ +

Routes

+
${routeButtons}
+ +

Response

+
+ +
Click a route to test
+
+
+ + + +` +} diff --git a/examples/orpc/tsconfig.json b/examples/orpc/tsconfig.json new file mode 100644 index 00000000..27eceeed --- /dev/null +++ b/examples/orpc/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "types": ["bun"], + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/package.json b/package.json index bb79e25f..1952c440 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "example:solidstart": "dotenv -- turbo run dev --filter=evlog-solidstart-example", "example:express": "dotenv -- turbo run dev --filter=evlog-express-example", "example:elysia": "dotenv -- turbo run dev --filter=evlog-elysia-example", + "example:orpc": "dotenv -- turbo run dev --filter=evlog-orpc-example", "example:fastify": "dotenv -- turbo run dev --filter=evlog-fastify-example", "example:nestjs": "dotenv -- turbo run dev --filter=evlog-nestjs-example", "example:sveltekit": "dotenv -- turbo run dev --filter=evlog-sveltekit-example", diff --git a/packages/evlog/README.md b/packages/evlog/README.md index dfc51afe..58aa5a30 100644 --- a/packages/evlog/README.md +++ b/packages/evlog/README.md @@ -528,6 +528,38 @@ log.set({ users: { count: 42 } }) See the full [nestjs example](https://github.com/HugoRCD/evlog/tree/main/examples/nestjs) for a complete working project. +## oRPC + +```typescript +// server/orpc.ts +import { os } from '@orpc/server' +import { RPCHandler } from '@orpc/server/fetch' +import { initLogger } from 'evlog' +import { evlog, withEvlog, type EvlogOrpcContext } from 'evlog/orpc' + +initLogger({ env: { service: 'orpc-api' } }) + +const base = os.$context().use(evlog()) + +const router = { + ping: base.handler(({ context }) => { + context.log.set({ pinged: true }) + return { ok: true } + }), +} + +const handler = withEvlog(new RPCHandler(router)) + +export default async function fetch(request: Request) { + const { matched, response } = await handler.handle(request, { prefix: '/rpc' }) + return matched ? response : new Response('Not Found', { status: 404 }) +} +``` + +`withEvlog()` wraps the handler and emits one wide event per request; `os.use(evlog())` exposes `context.log` to procedures and tags each event with the procedure path as `operation`. Use `useLogger()` from `evlog/orpc` to access the logger off-context. + +See the full [orpc example](https://github.com/HugoRCD/evlog/tree/main/examples/orpc) for a complete working project. + ## Browser Use the `log` API on the client side for structured browser logging: @@ -1297,6 +1329,7 @@ try { | **Hono** | `app.use(evlog())` with `import { evlog } from 'evlog/hono'` ([example](./examples/hono)) | | **Fastify** | `app.register(evlog)` with `import { evlog } from 'evlog/fastify'` ([example](./examples/fastify)) | | **Elysia** | `.use(evlog())` with `import { evlog } from 'evlog/elysia'` ([example](./examples/elysia)) | +| **oRPC** | `withEvlog(handler)` + `os.use(evlog())` with `import { evlog, withEvlog } from 'evlog/orpc'` ([example](./examples/orpc)) | | **Cloudflare Workers** | Manual setup with `import { initWorkersLogger, createWorkersLogger } from 'evlog/workers'` ([example](./examples/workers)) | | **Custom** | Build your own with `import { createMiddlewareLogger } from 'evlog/toolkit'` ([guide](https://evlog.dev/extend/custom-framework)) | | **Analog** | Nitro v2 module setup | diff --git a/packages/evlog/package.json b/packages/evlog/package.json index 02c16caf..6a2283ae 100644 --- a/packages/evlog/package.json +++ b/packages/evlog/package.json @@ -24,6 +24,7 @@ "hono", "elysia", "nestjs", + "orpc", "sveltekit", "react-router", "vite", @@ -170,6 +171,11 @@ "import": "./dist/nestjs/index.mjs", "default": "./dist/nestjs/index.mjs" }, + "./orpc": { + "types": "./dist/orpc/index.d.mts", + "import": "./dist/orpc/index.mjs", + "default": "./dist/orpc/index.mjs" + }, "./react-router": { "types": "./dist/react-router/index.d.mts", "import": "./dist/react-router/index.mjs", @@ -291,6 +297,9 @@ "nestjs": [ "./dist/nestjs/index.d.mts" ], + "orpc": [ + "./dist/orpc/index.d.mts" + ], "react-router": [ "./dist/react-router/index.d.mts" ], @@ -345,6 +354,8 @@ "@nuxt/devtools": "^3.2.4", "@nuxt/schema": "^4.4.2", "@nuxt/test-utils": "^4.0.3", + "@orpc/client": "^1.14.2", + "@orpc/server": "^1.14.2", "@stryker-mutator/core": "^9.6.1", "@stryker-mutator/vitest-runner": "^9.6.1", "@sveltejs/kit": "^2.59.0", @@ -380,6 +391,7 @@ "peerDependencies": { "@nestjs/common": ">=11.1.19", "@nuxt/kit": "^4.4.2", + "@orpc/server": ">=1.14.0", "@tanstack/start-client-core": "^1.167.20", "ai": ">=6.0.168", "elysia": ">=1.4.28", @@ -432,6 +444,9 @@ "@nestjs/common": { "optional": true }, + "@orpc/server": { + "optional": true + }, "react-router": { "optional": true }, diff --git a/packages/evlog/src/orpc/index.ts b/packages/evlog/src/orpc/index.ts new file mode 100644 index 00000000..fff7c453 --- /dev/null +++ b/packages/evlog/src/orpc/index.ts @@ -0,0 +1,210 @@ +import { ORPCError, type Context, type MiddlewareOptions, type MiddlewareResult } from '@orpc/server' +import type { RequestLogger } from '../types' +import { EvlogError } from '../error' +import { parseError } from '../runtime/utils/parseError' +import { defineFrameworkIntegration } from '../shared/integration' +import type { BaseEvlogOptions } from '../shared/middleware' +import { createLoggerStorage } from '../shared/storage' + +const { storage, useLogger } = createLoggerStorage( + 'oRPC handler. Wrap your handler with `withEvlog()` from evlog/orpc.', +) + +export type EvlogOrpcOptions = BaseEvlogOptions + +export { useLogger } + +/** + * Inject this type into your oRPC initial context to access `context.log` + * inside procedures. + * + * @example + * ```ts + * import { os } from '@orpc/server' + * import { evlog, type EvlogOrpcContext } from 'evlog/orpc' + * + * const base = os.$context().use(evlog()) + * ``` + */ +export interface EvlogOrpcContext { + log: RequestLogger +} + +/** + * Result shape of `handler.handle()` for oRPC's fetch adapter + * ({@link https://orpc.dev/docs/adapters/http RPCHandler / OpenAPIHandler}). + */ +type OrpcFetchHandleResult = + | { matched: true, response: Response } + | { matched: false, response: undefined } + +/** + * Minimal subset of oRPC's `FetchHandler` that we need to wrap. Anything + * compatible (RPCHandler, OpenAPIHandler, custom handler) plugs in. + * + * `options` is intentionally typed loosely so this matches both the + * `(req, opts)` and `(req, opts?)` overloads that oRPC produces depending on + * whether the router declares a non-empty initial context. The wrapper just + * splats the original options through and injects `log` into `context`. + */ +interface OrpcFetchHandlerLike { + handle: ( + request: Request, + options?: any, + ) => Promise +} + +const integration = defineFrameworkIntegration<{ request: Request }>({ + name: 'orpc', + extractRequest: ({ request }) => { + const url = new URL(request.url) + return { + method: request.method, + path: url.pathname, + headers: request.headers, + requestId: request.headers.get('x-request-id') ?? undefined, + } + }, + attachLogger: () => { + /* logger is injected into the oRPC context inside withEvlog() */ + }, + storage, +}) + +/** + * Wrap an oRPC handler so each matched request emits a single wide event. + * Works with any handler that exposes `.handle(request, options)` from + * `@orpc/server/fetch` (RPCHandler, OpenAPIHandler, custom handlers). + * + * The returned proxy preserves the original handler's identity (instance + * methods, plugins, etc.) and only intercepts `handle`. Inside procedures, + * the request logger is exposed as `context.log` — pair this with + * `os.use(evlog())` to also accumulate `operation` (`path.join('.')`) on the + * wide event. + * + * Routes that are filtered out by `include`/`exclude` are passed straight to + * the underlying handler with no instrumentation. + * + * @example + * ```ts + * import { RPCHandler } from '@orpc/server/fetch' + * import { withEvlog } from 'evlog/orpc' + * import { router } from './router' + * + * const handler = withEvlog(new RPCHandler(router), { + * include: ['/rpc/**'], + * }) + * + * export default async function fetch(request: Request) { + * const { matched, response } = await handler.handle(request, { prefix: '/rpc' }) + * return matched ? response : new Response('Not Found', { status: 404 }) + * } + * ``` + */ +export function withEvlog( + handler: THandler, + options: EvlogOrpcOptions = {}, +): THandler { + const handle: THandler['handle'] = async (request, callOptions) => { + const { skipped, finish, runWith, logger } = integration.start({ request }, options) + + const initialContext = (callOptions as { context?: Record } | undefined)?.context ?? {} + const finalOptions = { + ...callOptions, + context: { ...initialContext, log: logger }, + } as Parameters[1] + + if (skipped) { + return handler.handle(request, finalOptions) + } + + try { + const result = await runWith(() => handler.handle(request, finalOptions)) + const status = result.matched ? result.response.status : 404 + await finish({ status }) + return result + } catch (error) { + await finish({ error: error as Error }) + throw error + } + } + + return new Proxy(handler, { + get(target, prop, receiver) { + if (prop === 'handle') return handle + return Reflect.get(target, prop, receiver) + }, + }) +} + +function isEvlogError(error: unknown): error is EvlogError { + return error instanceof EvlogError || (error instanceof Error && error.name === 'EvlogError') +} + +/** + * Procedure-level middleware. Three responsibilities: + * + * 1. Adds `operation` (the procedure path joined by `.`) to the wide event, + * so consumers can group events by procedure without parsing URLs. + * 2. Captures errors thrown by the procedure on the wide event so the level + * is promoted to `error`. + * 3. Converts {@link EvlogError} (from `createError()` / `defineErrorCatalog`) + * into a structurally-equivalent {@link ORPCError} before re-throwing, so + * the wire response carries the catalog `code`, status, message, and the + * `why` / `fix` / `link` guidance under `data` — instead of being wrapped + * as `INTERNAL_SERVER_ERROR` by oRPC's default handler. The catalog and + * `createError()` stay the canonical evlog way to author errors; + * `evlog/orpc` is the bridge. + * + * Requires `withEvlog()` to be wrapped around the handler — the request + * logger flows in via `context.log`. Declare {@link EvlogOrpcContext} on + * your oRPC base for typed access. + * + * @example + * ```ts + * import { os } from '@orpc/server' + * import { evlog, type EvlogOrpcContext } from 'evlog/orpc' + * + * const base = os.$context().use(evlog()) + * + * export const getUser = base + * .input(z.object({ id: z.string() })) + * .handler(async ({ input, context }) => { + * context.log.set({ user: { id: input.id } }) + * return await db.user.findUnique(input) + * }) + * ``` + */ +export function evlog & Context = EvlogOrpcContext>() { + return async function evlogMiddleware( + options: MiddlewareOptions, + ): Promise, unknown>> { + const { context: { log }, path, next } = options + if (log && path.length > 0) { + log.set({ operation: path.join('.') }) + } + try { + return await next() + } catch (error) { + if (log) log.error(error as Error) + if (isEvlogError(error)) { + throw toOrpcError(error) + } + throw error + } + } +} + +function toOrpcError(error: EvlogError): ORPCError> { + const parsed = parseError(error) + const data: Record = {} + if (parsed.why !== undefined) data.why = parsed.why + if (parsed.fix !== undefined) data.fix = parsed.fix + if (parsed.link !== undefined) data.link = parsed.link + return new ORPCError(parsed.code ?? 'EVLOG_ERROR', { + status: parsed.status, + message: parsed.message, + data, + cause: error, + }) +} diff --git a/packages/evlog/test/frameworks/orpc.test.ts b/packages/evlog/test/frameworks/orpc.test.ts new file mode 100644 index 00000000..a343002d --- /dev/null +++ b/packages/evlog/test/frameworks/orpc.test.ts @@ -0,0 +1,438 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { os } from '@orpc/server' +import { RPCHandler } from '@orpc/server/fetch' +import { RPCLink } from '@orpc/client/fetch' +import { createORPCClient, isDefinedError } from '@orpc/client' +import { initLogger } from '../../src/logger' +import { defineErrorCatalog } from '../../src/catalog' +import { createError } from '../../src/error' +import { + evlog, + type EvlogOrpcContext, + type EvlogOrpcOptions, + useLogger, + withEvlog, +} from '../../src/orpc/index' +import { + assertDrainCalledWith, + assertEnrichBeforeDrain, + assertHttpEventEmitted, + assertSensitiveHeadersFiltered, + createPipelineSpies, + findEventViaDrain, + waitForDrainCalls, +} from '../helpers/framework' + +interface ProcedureContext extends EvlogOrpcContext { + pingTrace?: { sawLogger: boolean, fromUseLogger: boolean } +} + +const billingErrors = defineErrorCatalog('billing', { + PAYMENT_DECLINED: { + status: 402, + message: 'Payment declined', + why: 'Issuer declined the charge', + fix: 'Try a different card', + link: 'https://docs.example.com/payments/declined', + }, +}) + +function buildRouter(trace?: { sawLogger: boolean, fromUseLogger: boolean }) { + const base = os.$context().use(evlog()) + + return { + ping: base.handler(({ context }) => { + if (trace) { + trace.sawLogger = typeof context.log?.set === 'function' + try { + const fromAls = useLogger() + trace.fromUseLogger = fromAls === context.log + } catch { + trace.fromUseLogger = false + } + } + context.log.set({ pinged: true }) + return { ok: true as const } + }), + fail: base.handler(() => { + throw new Error('procedure exploded') + }), + profile: base.handler(({ context }) => { + context.log.set({ user: { id: 'u-1', plan: 'pro' } }) + return { id: 'u-1' as const, plan: 'pro' as const } + }), + pay: base.handler(() => { + throw billingErrors.PAYMENT_DECLINED() + }), + payAdHoc: base.handler(() => { + throw createError({ + message: 'Card declined', + code: 'PAYMENT_DECLINED', + status: 402, + why: 'Adhoc card declined', + fix: 'Adhoc fix', + link: 'https://example.com/adhoc', + }) + }), + payNoCode: base.handler(() => { + throw createError({ message: 'Boom', status: 418, why: 'Just because' }) + }), + } +} + +type Router = ReturnType + +function buildClient(options: EvlogOrpcOptions = {}, trace?: { sawLogger: boolean, fromUseLogger: boolean }) { + const router = buildRouter(trace) + const handler = withEvlog(new RPCHandler(router), options) + + const link = new RPCLink({ + url: 'http://test/rpc', + fetch: async (input, init) => { + const request = new Request(input, init) + const { matched, response } = await handler.handle(request, { + prefix: '/rpc', + context: {} as ProcedureContext, + }) + return matched ? response : new Response('Not Found', { status: 404 }) + }, + }) + + return { + handler, + client: createORPCClient(link), + } +} + +describe('evlog/orpc', () => { + beforeEach(() => { + initLogger({ env: { service: 'orpc-test' }, pretty: false }) + vi.spyOn(console, 'info').mockImplementation(() => {}) + vi.spyOn(console, 'log').mockImplementation(() => {}) + vi.spyOn(console, 'warn').mockImplementation(() => {}) + vi.spyOn(console, 'error').mockImplementation(() => {}) + }) + + afterEach(() => { + vi.restoreAllMocks() + }) + + describe('handler wrapper', () => { + it('exposes the request logger as context.log inside the procedure', async () => { + const trace = { sawLogger: false, fromUseLogger: false } + const { client } = buildClient({}, trace) + + const result = await client.ping({}) + expect(result).toEqual({ ok: true }) + expect(trace.sawLogger).toBe(true) + }) + + it('emits a wide event with method, path, status', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + await client.ping({}) + await waitForDrainCalls(drain) + + const event = assertHttpEventEmitted(drain, { path: '/rpc/ping', status: 200, level: 'info' }) + expect(event.duration).toBeDefined() + expect(event.method).toBe('POST') + }) + + it('captures context set by the procedure handler', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + await client.profile({}) + await waitForDrainCalls(drain) + + const event = findEventViaDrain(drain, e => e.path === '/rpc/profile') + expect(event).toBeDefined() + expect(event!.user).toEqual({ id: 'u-1', plan: 'pro' }) + }) + + it('logs at error level when a procedure throws', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + await expect(client.fail({})).rejects.toBeDefined() + await waitForDrainCalls(drain) + + const event = findEventViaDrain(drain, e => e.path === '/rpc/fail') + expect(event).toBeDefined() + expect(event!.level).toBe('error') + }) + + it('emits status 404 when the request does not match any procedure', async () => { + const { drain } = createPipelineSpies() + const router = buildRouter() + const handler = withEvlog(new RPCHandler(router), { drain }) + + await handler.handle( + new Request('http://test/rpc/unknown', { method: 'POST', body: '{}' }), + { prefix: '/rpc', context: {} as ProcedureContext }, + ) + await waitForDrainCalls(drain) + + const event = findEventViaDrain(drain, e => e.path === '/rpc/unknown') + expect(event).toBeDefined() + expect(event!.status).toBe(404) + }) + + it('preserves the underlying handler identity (Proxy passthrough)', () => { + const router = buildRouter() + const original = new RPCHandler(router) + const wrapped = withEvlog(original) + expect(wrapped).not.toBe(original) + expect(wrapped.handle).toBeDefined() + expect(wrapped instanceof RPCHandler).toBe(true) + }) + + it('honors x-request-id when present on the request', async () => { + const { drain } = createPipelineSpies() + const router = buildRouter() + const handler = withEvlog(new RPCHandler(router), { drain }) + + const link = new RPCLink({ + url: 'http://test/rpc', + headers: () => ({ 'x-request-id': 'rid-orpc-42' }), + fetch: async (input, init) => { + const request = new Request(input, init) + const { matched, response } = await handler.handle(request, { + prefix: '/rpc', + context: {} as ProcedureContext, + }) + return matched ? response : new Response('Not Found', { status: 404 }) + }, + }) + const client = createORPCClient(link) + + await client.ping({}) + await waitForDrainCalls(drain) + + const event = findEventViaDrain(drain, e => e.path === '/rpc/ping') + expect(event).toBeDefined() + expect(event!.requestId).toBe('rid-orpc-42') + }) + }) + + describe('procedure middleware', () => { + it('adds operation = procedure path on the wide event', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + await client.ping({}) + await waitForDrainCalls(drain) + + const event = findEventViaDrain(drain, e => e.path === '/rpc/ping') + expect(event).toBeDefined() + expect(event!.operation).toBe('ping') + }) + + it('does not throw when context.log is missing', async () => { + const middleware = evlog() + const next = vi.fn(() => Promise.resolve({ output: undefined, context: {} })) + await expect( + middleware({ + context: {} as ProcedureContext, + next: next as never, + path: ['nested', 'op'], + procedure: {} as never, + errors: {} as never, + lastEventId: undefined, + }), + ).resolves.toBeDefined() + expect(next).toHaveBeenCalledOnce() + }) + }) + + describe('evlog error catalog → ORPCError bridge', () => { + it('preserves catalog code, status, message, and why/fix/link in data', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + const result = await client.pay({}).catch(err => err) + expect(result).toBeInstanceOf(Error) + expect(isDefinedError(result)).toBe(false) + expect(result.code).toBe('billing.PAYMENT_DECLINED') + expect(result.status).toBe(402) + expect(result.message).toBe('Payment declined') + expect(result.data).toEqual({ + why: 'Issuer declined the charge', + fix: 'Try a different card', + link: 'https://docs.example.com/payments/declined', + }) + + await waitForDrainCalls(drain) + const event = findEventViaDrain(drain, e => e.path === '/rpc/pay') + expect(event).toBeDefined() + expect(event!.level).toBe('error') + expect(event!.status).toBe(402) + expect(event!.error).toMatchObject({ code: 'billing.PAYMENT_DECLINED' }) + }) + + it('does not wrap non-EvlogError throws (lets oRPC handle them)', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + const result = await client.fail({}).catch(err => err) + // Generic Error becomes oRPC's INTERNAL_SERVER_ERROR + expect(result.code).toBe('INTERNAL_SERVER_ERROR') + + await waitForDrainCalls(drain) + const event = findEventViaDrain(drain, e => e.path === '/rpc/fail') + expect(event!.level).toBe('error') + }) + + it('bridges ad-hoc createError() the same way as a catalog factory', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + const result = await client.payAdHoc({}).catch(err => err) + expect(result.code).toBe('PAYMENT_DECLINED') + expect(result.status).toBe(402) + expect(result.message).toBe('Card declined') + expect(result.data).toEqual({ + why: 'Adhoc card declined', + fix: 'Adhoc fix', + link: 'https://example.com/adhoc', + }) + + await waitForDrainCalls(drain) + const event = findEventViaDrain(drain, e => e.path === '/rpc/payAdHoc') + expect(event!.level).toBe('error') + expect(event!.status).toBe(402) + }) + + it('falls back to EVLOG_ERROR code when createError() omits code', async () => { + const { client } = buildClient() + + const result = await client.payNoCode({}).catch(err => err) + expect(result.code).toBe('EVLOG_ERROR') + expect(result.status).toBe(418) + expect(result.message).toBe('Boom') + expect(result.data).toEqual({ why: 'Just because' }) + }) + }) + + describe('useLogger() ALS access', () => { + it('returns the same logger as context.log inside a procedure', async () => { + const trace = { sawLogger: false, fromUseLogger: false } + const { client } = buildClient({}, trace) + + await client.ping({}) + expect(trace.fromUseLogger).toBe(true) + }) + + it('throws when called outside of a wrapped handler', () => { + expect(() => useLogger()).toThrow(/oRPC handler/) + }) + }) + + describe('route filtering', () => { + it('skips drain when the route is excluded', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain, exclude: ['/rpc/ping'] }) + + await client.ping({}) + + expect(drain).not.toHaveBeenCalled() + }) + + it('only emits when the include pattern matches', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain, include: ['/rpc/profile'] }) + + await client.ping({}) + await client.profile({}) + await waitForDrainCalls(drain) + + const events = drain.mock.calls.map(c => (c[0] as { event: { path: string } }).event.path) + expect(events).toContain('/rpc/profile') + expect(events).not.toContain('/rpc/ping') + }) + }) + + describe('drain / enrich / keep / headers', () => { + it('calls drain with the emitted event', async () => { + const { drain } = createPipelineSpies() + const { client } = buildClient({ drain }) + + await client.ping({}) + await waitForDrainCalls(drain) + + assertDrainCalledWith(drain, { path: '/rpc/ping', method: 'POST', level: 'info', status: 200 }) + }) + + it('calls enrich before drain', async () => { + const { drain, enrich } = createPipelineSpies() + enrich.mockImplementation((ctx) => { + ctx.event.enriched = true + }) + const { client } = buildClient({ drain, enrich }) + + await client.ping({}) + await waitForDrainCalls(drain) + + assertEnrichBeforeDrain(enrich, drain) + expect((drain.mock.calls[0][0] as { event: { enriched?: boolean } }).event.enriched).toBe(true) + }) + + it('filters sensitive headers from the drain context', async () => { + const { drain } = createPipelineSpies() + const router = buildRouter() + const handler = withEvlog(new RPCHandler(router), { drain }) + + const link = new RPCLink({ + url: 'http://test/rpc', + headers: () => ({ + 'authorization': 'Bearer secret', + 'cookie': 'session=abc', + 'x-safe': 'visible', + }), + fetch: async (input, init) => { + const request = new Request(input, init) + const { matched, response } = await handler.handle(request, { + prefix: '/rpc', + context: {} as ProcedureContext, + }) + return matched ? response : new Response('Not Found', { status: 404 }) + }, + }) + const client = createORPCClient(link) + + await client.ping({}) + await waitForDrainCalls(drain) + + const ctx = drain.mock.calls[0][0] as Parameters[0] + assertSensitiveHeadersFiltered(ctx) + expect(ctx.headers!['x-safe']).toBe('visible') + }) + + it('lets the keep callback force-keep based on context', async () => { + const { drain, keep } = createPipelineSpies() + keep.mockImplementation((ctx) => { + if (ctx.context.pinged) ctx.shouldKeep = true + }) + const { client } = buildClient({ drain, keep }) + + await client.ping({}) + await waitForDrainCalls(drain) + + expect(keep).toHaveBeenCalledOnce() + expect(drain).toHaveBeenCalledOnce() + }) + + it('does not break the request when drain throws', async () => { + const drain = vi.fn(() => { + throw new Error('drain exploded') + }) + const { client } = buildClient({ drain }) + + const result = await client.ping({}) + + expect(result).toEqual({ ok: true }) + expect(drain).toHaveBeenCalledOnce() + }) + }) +}) diff --git a/packages/evlog/test/toolkit/__snapshots__/api-surface.test.ts.snap b/packages/evlog/test/toolkit/__snapshots__/api-surface.test.ts.snap index d57247c6..2dfef58f 100644 --- a/packages/evlog/test/toolkit/__snapshots__/api-surface.test.ts.snap +++ b/packages/evlog/test/toolkit/__snapshots__/api-surface.test.ts.snap @@ -160,6 +160,11 @@ exports[`public API surface > matches snapshot for all subpath exports 1`] = ` "useLogger", ], "./nuxt": [], + "./orpc": [ + "evlog", + "useLogger", + "withEvlog", + ], "./otlp": [ "createOTLPDrain", "sendBatchToOTLP", diff --git a/packages/evlog/tsdown.config.ts b/packages/evlog/tsdown.config.ts index 99bc0373..7f573f7a 100644 --- a/packages/evlog/tsdown.config.ts +++ b/packages/evlog/tsdown.config.ts @@ -46,6 +46,7 @@ export default defineConfig({ 'elysia/index': 'src/elysia/index.ts', 'fastify/index': 'src/fastify/index.ts', 'nestjs/index': 'src/nestjs/index.ts', + 'orpc/index': 'src/orpc/index.ts', 'react-router/index': 'src/react-router/index.ts', 'sveltekit/index': 'src/sveltekit/index.ts', 'vite/index': 'src/vite/index.ts', @@ -85,6 +86,8 @@ export default defineConfig({ 'fastify', '@nestjs/common', '@nestjs/core', + '@orpc/server', + '@orpc/server/fetch', 'react-router', '@sveltejs/kit', 'vite', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 676f56cf..caa8e497 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ importers: version: 25.6.0 ai: specifier: ^6.0.168 - version: 6.0.174(zod@4.4.2) + version: 6.0.174(zod@4.4.3) automd: specifier: ^0.4.3 version: 0.4.3(magicast@0.5.2) @@ -62,34 +62,34 @@ importers: dependencies: '@nuxt/fonts': specifier: 0.14.0 - version: 0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + version: 0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) '@nuxt/ui': specifier: ^4.7.1 - version: 4.7.1(2a136ac0b8bbf9306096d0df38a9f16f) + version: 4.7.1(632a48f3de739d7ab576d4ffca467443) '@resvg/resvg-js': specifier: ^2.6.2 version: 2.6.2 '@vercel/analytics': specifier: ^2.0.1 - version: 2.0.1(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3)) + version: 2.0.1(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3)) '@vercel/speed-insights': specifier: ^2.0.0 - version: 2.0.0(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3)) + version: 2.0.0(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3)) better-sqlite3: specifier: ^12.9.0 version: 12.9.0 docus: specifier: ^5.10.1 - version: 5.10.1(2ec5390895d83f4f248ff17455cd6f04) + version: 5.10.1(5953c4132225337ed91cfd359d532cd1) motion-v: specifier: ^2.2.1 version: 2.2.1(@vueuse/core@14.3.0(vue@3.5.33(typescript@6.0.3)))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vue@3.5.33(typescript@6.0.3)) nuxt: specifier: ^4.4.4 - version: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + version: 4.4.4(b84a188790b93beb9b4efd75c13b5564) nuxt-studio: specifier: ^1.6.1 - version: 1.7.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)) + version: 1.7.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)) satori: specifier: ^0.19.3 version: 0.19.3 @@ -105,25 +105,25 @@ importers: dependencies: '@comark/nuxt': specifier: ^0.3.1 - version: 0.3.1(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(shiki@4.0.2)(vue@3.5.33(typescript@6.0.3)) + version: 0.3.1(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(shiki@4.0.2)(vue@3.5.33(typescript@6.0.3)) '@nuxt/content': specifier: ^3.13.0 - version: 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + version: 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) '@nuxt/ui': specifier: ^4.7.0 - version: 4.7.1(a9b2d95377f84339de5d6b64e6e76365) + version: 4.7.1(edf38741bcb56e8db4eba74a05842b3a) '@nuxtjs/sitemap': specifier: ^8.0.14 - version: 8.0.15(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) + version: 8.0.15(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) '@vercel/analytics': specifier: ^2.0.1 - version: 2.0.1(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3)) + version: 2.0.1(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3)) better-sqlite3: specifier: ^12.9.0 version: 12.9.0 nuxt: specifier: ^4.4.2 - version: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + version: 4.4.4(b84a188790b93beb9b4efd75c13b5564) shiki: specifier: 4.0.2 version: 4.0.2 @@ -174,7 +174,7 @@ importers: devDependencies: nitro: specifier: latest - version: 3.0.260429-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + version: 3.0.260429-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) rolldown: specifier: latest version: 1.0.0-rc.18 @@ -190,7 +190,7 @@ importers: version: 1.15.11 nitropack: specifier: ^2.13.3 - version: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18) + version: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18) apps/nuxthub-playground: dependencies: @@ -205,7 +205,7 @@ importers: version: 0.17.3 '@nuxthub/core': specifier: ^0.10.7 - version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3)) + version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3)) ai: specifier: ^6.0.168 version: 6.0.174(zod@4.4.2) @@ -214,7 +214,7 @@ importers: version: 0.31.10 drizzle-orm: specifier: ^0.45.2 - version: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17) + version: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17) evlog: specifier: workspace:* version: link:../../packages/evlog @@ -223,7 +223,7 @@ importers: version: 1.0.0(@types/markdown-it@14.1.2)(react@19.2.5)(solid-js@1.9.12)(vue@3.5.33(typescript@5.9.3)) nuxt: specifier: ^4.4.2 - version: 4.4.4(a3ec5035fd2864a5c4c3312365960994) + version: 4.4.4(22cd37f964d1e9782fe0d1785e439e6e) zod: specifier: ^4.3.6 version: 4.4.2 @@ -232,10 +232,10 @@ importers: dependencies: '@nuxt/ui': specifier: ^4.7.0 - version: 4.7.1(2a136ac0b8bbf9306096d0df38a9f16f) + version: 4.7.1(77c7ae0d2d13db12e3934c11e2c6a934) better-auth: specifier: ^1.6.9 - version: 1.6.9(5f3a3ee1196d34db3f2bcf2c9a4427cf) + version: 1.6.9(de5f92278079270b2e59bf852a5ff4ae) better-sqlite3: specifier: ^12.9.0 version: 12.9.0 @@ -244,7 +244,7 @@ importers: version: link:../../packages/evlog nuxt: specifier: ^4.4.2 - version: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + version: 4.4.4(b84a188790b93beb9b4efd75c13b5564) tailwindcss: specifier: ^4.2.4 version: 4.2.4 @@ -321,7 +321,7 @@ importers: dependencies: elysia: specifier: ^1.4.27 - version: 1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@1.0.0)(file-type@21.3.4)(openapi-types@12.1.3)(typescript@6.0.3) + version: 1.4.28(@sinclair/typebox@0.34.49)(@types/bun@1.3.13)(exact-mirror@1.0.0)(file-type@21.3.4)(openapi-types@12.1.3)(typescript@6.0.3) evlog: specifier: workspace:* version: link:../../packages/evlog @@ -410,6 +410,25 @@ importers: specifier: ^5.9.3 version: 5.9.3 + examples/orpc: + dependencies: + '@orpc/openapi': + specifier: ^1.14.2 + version: 1.14.2(@opentelemetry/api@1.9.0)(crossws@0.4.5(srvx@0.11.15))(fastify@5.8.5)(ws@8.20.0) + '@orpc/server': + specifier: ^1.14.2 + version: 1.14.2(@opentelemetry/api@1.9.0)(crossws@0.4.5(srvx@0.11.15))(fastify@5.8.5)(ws@8.20.0) + evlog: + specifier: workspace:* + version: link:../../packages/evlog + zod: + specifier: ^4.4.3 + version: 4.4.3 + devDependencies: + '@types/bun': + specifier: latest + version: 1.3.13 + examples/react-router: dependencies: '@react-router/node': @@ -457,7 +476,7 @@ importers: version: 0.15.4(solid-js@1.9.12) '@solidjs/start': specifier: ^1.2.1 - version: 1.3.2(solid-js@1.9.12)(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + version: 1.3.2(solid-js@1.9.12)(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) evlog: specifier: workspace:* version: link:../../packages/evlog @@ -522,7 +541,7 @@ importers: version: 0.545.0(react@19.2.5) nitro: specifier: npm:nitro-nightly@latest - version: nitro-nightly@3.0.1-20260501-164602-aee73f19(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + version: nitro-nightly@3.0.1-20260501-164602-aee73f19(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) react: specifier: ^19.2.0 version: 19.2.5 @@ -594,7 +613,7 @@ importers: version: 4.4.4(magicast@0.5.2) ai: specifier: '>=6.0.168' - version: 6.0.174(zod@4.4.2) + version: 6.0.174(zod@4.4.3) hono: specifier: '' version: 4.12.18 @@ -632,6 +651,12 @@ importers: '@nuxt/test-utils': specifier: ^4.0.3 version: 4.0.3(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vitest@4.1.5) + '@orpc/client': + specifier: ^1.14.2 + version: 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/server': + specifier: ^1.14.2 + version: 1.14.2(@opentelemetry/api@1.9.0)(crossws@0.4.5(srvx@0.11.15))(fastify@5.8.5)(ws@8.20.0) '@stryker-mutator/core': specifier: ^9.6.1 version: 9.6.1(@types/node@25.6.0) @@ -667,7 +692,7 @@ importers: version: 3.4.2 elysia: specifier: ^1.4.28 - version: 1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@1.0.0)(file-type@21.3.4)(openapi-types@12.1.3)(typescript@6.0.3) + version: 1.4.28(@sinclair/typebox@0.34.49)(@types/bun@1.3.13)(exact-mirror@1.0.0)(file-type@21.3.4)(openapi-types@12.1.3)(typescript@6.0.3) express: specifier: ^5.2.1 version: 5.2.1 @@ -685,13 +710,13 @@ importers: version: 0.30.21 nitro: specifier: ^3.0.260311-beta - version: 3.0.260311-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + version: 3.0.260311-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) nitropack: specifier: ^2.13.3 - version: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17) + version: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17) nuxt: specifier: ^4.4.2 - version: 4.4.4(d016328d0f6a75c3ce3762b81393ba91) + version: 4.4.4(9b409ea1fe6f33dee98afa99f6156aa2) pino: specifier: ^10.3.1 version: 10.3.1 @@ -730,10 +755,10 @@ importers: dependencies: '@nuxthub/core': specifier: ^0.10.7 - version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)) + version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)) drizzle-orm: specifier: '>=0.45.2' - version: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17) + version: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17) devDependencies: '@nuxt/module-builder': specifier: ^1.0.2 @@ -3322,6 +3347,63 @@ packages: resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} + '@orpc/client@1.14.2': + resolution: {integrity: sha512-/tFAua/w/mao2kQtJqjoCYEojHrKMisxOCK8qtkMKOUcXVxWMl+QWhP/MykjzFgkFdO9mzKOu1h7vJvpH73EBA==} + + '@orpc/contract@1.14.2': + resolution: {integrity: sha512-51XFgfUYOfX7thwb8ww2EE0YHJDveW9HQNt7TN6sQMb3Bjx54h9r7vdfPJjUOJP3J4Ri2tOVstOsZ3CWUjbi5A==} + + '@orpc/interop@1.14.2': + resolution: {integrity: sha512-FkrXlR0vmhx5D0t5WA6YN7XyC1WwjGGmkaaShVUGdnFu6m0bl4v3vZZWIMcPy5fG/6wF7KCTEGx0B6+kMmLWiQ==} + + '@orpc/openapi-client@1.14.2': + resolution: {integrity: sha512-KIXSVuGYh3JvO0lxUUztuMkEj6FV5C96QivR+H/HvqfFidC3hEH0nqi0vEWmUzlbzH3jbCaJV8KKV41HKnUNYw==} + + '@orpc/openapi@1.14.2': + resolution: {integrity: sha512-Xuy8auE1KubDjZGc5mvntSfaHy03p0tjDfEkx7k/S4SSJi0o4Rn+HYgCltgYznKwuyMnljl/0gShf99bo77lFg==} + + '@orpc/server@1.14.2': + resolution: {integrity: sha512-+MkYqqI1CmR/eWsktpAxN4+Dd1rbDGO3xh9ZQae/V4zID5uz7smUnsIJL97GRDIZkwRUYlC8TDLLPAkxij22Iw==} + peerDependencies: + crossws: '>=0.3.4' + ws: '>=8.18.1' + peerDependenciesMeta: + crossws: + optional: true + ws: + optional: true + + '@orpc/shared@1.14.2': + resolution: {integrity: sha512-5YtbVz4yGbJgcyj7CmEv5FAy4xagCS/hP/MMAlHpJKBSlMHuD7FrDO4LQLFUmSkcBcbLhzX8Ll1ziUw3vtPasw==} + peerDependencies: + '@opentelemetry/api': '>=1.9.0' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@orpc/standard-server-aws-lambda@1.14.2': + resolution: {integrity: sha512-/aPEC+WTQMHxmX8NauolIyzTRic96vPM17py3oe7LEaCyP/McyKUVrUsKu4He4zkEFrj3ErwVeOCkm19VvtIMQ==} + + '@orpc/standard-server-fastify@1.14.2': + resolution: {integrity: sha512-qmbNZKU+JdNKqaKHwUBCytx0G1RKYbfBwA5Cqf+S6Y+4InpwEdbcRSMgRnN+VH40lRPQAg1RO0AmH3NtvQ4yNw==} + peerDependencies: + fastify: '>=5.6.1' + peerDependenciesMeta: + fastify: + optional: true + + '@orpc/standard-server-fetch@1.14.2': + resolution: {integrity: sha512-FPXhHfGPA2Hcb3GBd6YjsbMbgcvb3XJ5aFr6TXmlpS8Qgek4fDM7nK1nZ+GoA5OitsL6B7Z9WoIbu39IiG1FcA==} + + '@orpc/standard-server-node@1.14.2': + resolution: {integrity: sha512-9b/ffVIo8ZN6xk8hMxFvRxpaNmNMulPH9elaXkOwOdmH8TJnqAK79sKOSbDbmFx+wI0QPyjXOaqGpU9ie7J4uw==} + + '@orpc/standard-server-peer@1.14.2': + resolution: {integrity: sha512-uzbgGaxvlZ0IA2lasaLck+yrbR3bKoqJnsZehEdbSm6eWaKln4COvxQJ2PuPow3gA6tklNnGkTfmRmGIHvS/rg==} + + '@orpc/standard-server@1.14.2': + resolution: {integrity: sha512-XHySJICwDsJf211gcxtJBpzB1ldZrSHDW2mqbBQg+I2AewvTqWiqeGZV+SPvmq87q4IfBzncSuwMrRKplUJhsw==} + '@oxc-minify/binding-android-arm-eabi@0.128.0': resolution: {integrity: sha512-EwdDhZLRmXxSnfy0v9gdOru7TutM8ItRg1Xv8e2B4boWMnHlFCIH38JfwgQnenbkF8SVTwVJtDCkmwEzN4q3xA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5788,6 +5870,9 @@ packages: '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} + '@types/bun@1.3.13': + resolution: {integrity: sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -6845,6 +6930,9 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bun-types@1.3.13: + resolution: {integrity: sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -10579,6 +10667,10 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + radash@12.1.1: + resolution: {integrity: sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==} + engines: {node: '>=14.18.0'} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -12659,6 +12751,9 @@ packages: zod@4.4.2: resolution: {integrity: sha512-IynmDyxsEsb9RKzO3J9+4SxXnl2FTFSzNBaKKaMV6tsSk0rw9gYw9gs+JFCq/qk2LCZ78KDwyj+Z289TijSkUw==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -12678,6 +12773,13 @@ snapshots: '@vercel/oidc': 3.2.0 zod: 4.4.2 + '@ai-sdk/gateway@3.0.109(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.26(zod@4.4.3) + '@vercel/oidc': 3.2.0 + zod: 4.4.3 + '@ai-sdk/mcp@1.0.39(zod@4.4.2)': dependencies: '@ai-sdk/provider': 3.0.10 @@ -12699,6 +12801,13 @@ snapshots: eventsource-parser: 3.0.8 zod: 4.4.2 + '@ai-sdk/provider-utils@4.0.26(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.0.8 + zod: 4.4.3 + '@ai-sdk/provider@3.0.10': dependencies: json-schema: 0.4.0 @@ -13026,17 +13135,17 @@ snapshots: jose: 6.2.3 kysely: 0.28.17 nanostores: 1.3.0 - zod: 4.4.2 + zod: 4.4.3 optionalDependencies: '@cloudflare/workers-types': 4.20260503.1 '@opentelemetry/api': 1.9.0 - '@better-auth/drizzle-adapter@1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))': + '@better-auth/drizzle-adapter@1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))': dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 optionalDependencies: - drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17) + drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17) '@better-auth/kysely-adapter@1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17)': dependencies: @@ -13316,12 +13425,12 @@ snapshots: '@colors/colors@1.6.0': {} - '@comark/nuxt@0.3.1(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(shiki@4.0.2)(vue@3.5.33(typescript@6.0.3))': + '@comark/nuxt@0.3.1(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(shiki@4.0.2)(vue@3.5.33(typescript@6.0.3))': dependencies: '@comark/vue': 0.3.1(shiki@4.0.2)(vue@3.5.33(typescript@6.0.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) comark: 0.3.2(shiki@4.0.2) - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) transitivePeerDependencies: - beautiful-mermaid - katex @@ -14712,7 +14821,7 @@ snapshots: - magicast - supports-color - '@nuxt/content@3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': + '@nuxt/content@3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxtjs/mdc': 0.21.1(magicast@0.5.2) @@ -14723,7 +14832,7 @@ snapshots: c12: 3.3.4(magicast@0.5.2) chokidar: 5.0.0 consola: 3.4.2 - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) defu: 6.1.7 destr: 2.0.5 git-url-parse: 16.1.0 @@ -14901,13 +15010,13 @@ snapshots: - supports-color - typescript - '@nuxt/fonts@0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': + '@nuxt/fonts@0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) '@nuxt/kit': 4.4.4(magicast@0.5.2) consola: 3.4.2 defu: 6.1.7 - fontless: 0.2.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + fontless: 0.2.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) h3: 1.15.11 magic-regexp: 0.10.0 ofetch: 1.5.1 @@ -14917,7 +15026,7 @@ snapshots: ufo: 1.6.4 unifont: 0.7.4 unplugin: 3.0.0 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -14962,7 +15071,7 @@ snapshots: - vite - vue - '@nuxt/image@2.0.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)': + '@nuxt/image@2.0.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) consola: 3.4.2 @@ -14975,7 +15084,7 @@ snapshots: std-env: 3.10.0 ufo: 1.6.4 optionalDependencies: - ipx: 3.1.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + ipx: 3.1.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -15072,7 +15181,7 @@ snapshots: - vue - vue-tsc - '@nuxt/nitro-server@4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(a3ec5035fd2864a5c4c3312365960994))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3)': + '@nuxt/nitro-server@4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(22cd37f964d1e9782fe0d1785e439e6e))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -15090,8 +15199,8 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)) - nuxt: 4.4.4(a3ec5035fd2864a5c4c3312365960994) + nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)) + nuxt: 4.4.4(22cd37f964d1e9782fe0d1785e439e6e) nypm: 0.6.6 ohash: 2.0.11 pathe: 2.0.3 @@ -15099,7 +15208,7 @@ snapshots: std-env: 4.1.0 ufo: 1.6.4 unctx: 2.5.0 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) vue: 3.5.33(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 @@ -15143,7 +15252,7 @@ snapshots: - uploadthing - xml2js - '@nuxt/nitro-server@4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(d016328d0f6a75c3ce3762b81393ba91))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17)(typescript@6.0.3)': + '@nuxt/nitro-server@4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(9b409ea1fe6f33dee98afa99f6156aa2))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17)(typescript@6.0.3)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -15161,8 +15270,8 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17) - nuxt: 4.4.4(d016328d0f6a75c3ce3762b81393ba91) + nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17) + nuxt: 4.4.4(9b409ea1fe6f33dee98afa99f6156aa2) nypm: 0.6.6 ohash: 2.0.11 pathe: 2.0.3 @@ -15170,7 +15279,7 @@ snapshots: std-env: 4.1.0 ufo: 1.6.4 unctx: 2.5.0 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) vue: 3.5.33(typescript@6.0.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 @@ -15214,7 +15323,7 @@ snapshots: - uploadthing - xml2js - '@nuxt/nitro-server@4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(typescript@6.0.3)': + '@nuxt/nitro-server@4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(typescript@6.0.3)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -15232,8 +15341,8 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18) - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) nypm: 0.6.6 ohash: 2.0.11 pathe: 2.0.3 @@ -15241,7 +15350,7 @@ snapshots: std-env: 4.1.0 ufo: 1.6.4 unctx: 2.5.0 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) vue: 3.5.33(typescript@6.0.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 @@ -15346,11 +15455,11 @@ snapshots: - typescript - vite - '@nuxt/ui@4.7.1(2a136ac0b8bbf9306096d0df38a9f16f)': + '@nuxt/ui@4.7.1(632a48f3de739d7ab576d4ffca467443)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) - '@nuxt/fonts': 0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@nuxt/fonts': 0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxt/schema': 4.4.4 @@ -15415,7 +15524,121 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.1 '@internationalized/number': 3.6.6 - '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + valibot: 1.3.1(typescript@6.0.3) + zod: 4.4.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@emotion/is-prop-valid' + - '@netlify/blobs' + - '@planetscale/database' + - '@tiptap/extensions' + - '@tiptap/y-tiptap' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vue/composition-api' + - async-validator + - aws4fetch + - axios + - change-case + - db0 + - drauu + - embla-carousel + - focus-trap + - idb-keyval + - ioredis + - jwt-decode + - magicast + - nprogress + - qrcode + - react + - react-dom + - sortablejs + - universal-cookie + - uploadthing + - vite + - vue + - yjs + + '@nuxt/ui@4.7.1(77c7ae0d2d13db12e3934c11e2c6a934)': + dependencies: + '@floating-ui/dom': 1.7.6 + '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) + '@nuxt/fonts': 0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) + '@nuxt/kit': 4.4.4(magicast@0.5.2) + '@nuxt/schema': 4.4.4 + '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2) + '@standard-schema/spec': 1.1.0 + '@tailwindcss/postcss': 4.2.4 + '@tailwindcss/vite': 4.2.4(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@tanstack/vue-table': 8.21.3(vue@3.5.33(typescript@6.0.3)) + '@tanstack/vue-virtual': 3.13.24(vue@3.5.33(typescript@6.0.3)) + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-bubble-menu': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-code': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-collaboration': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30) + '@tiptap/extension-drag-handle': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/extension-collaboration@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)) + '@tiptap/extension-drag-handle-vue-3': 3.22.5(@tiptap/extension-drag-handle@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/extension-collaboration@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)))(@tiptap/pm@3.22.5)(@tiptap/vue-3@3.22.5(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)) + '@tiptap/extension-floating-menu': 3.22.5(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-horizontal-rule': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-image': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-mention': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@tiptap/suggestion@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/extension-node-range': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-placeholder': 3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)) + '@tiptap/markdown': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + '@tiptap/starter-kit': 3.22.5 + '@tiptap/suggestion': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/vue-3': 3.22.5(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(vue@3.5.33(typescript@6.0.3)) + '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) + '@vueuse/core': 14.3.0(vue@3.5.33(typescript@6.0.3)) + '@vueuse/integrations': 14.3.0(axios@1.16.0)(fuse.js@7.3.0)(vue@3.5.33(typescript@6.0.3)) + '@vueuse/shared': 14.3.0(vue@3.5.33(typescript@6.0.3)) + colortranslator: 5.0.0 + consola: 3.4.2 + defu: 6.1.7 + embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0) + embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0) + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0) + embla-carousel-fade: 8.6.0(embla-carousel@8.6.0) + embla-carousel-vue: 8.6.0(vue@3.5.33(typescript@6.0.3)) + embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0) + fuse.js: 7.3.0 + hookable: 6.1.1 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.2 + motion-v: 2.2.1(@vueuse/core@14.3.0(vue@3.5.33(typescript@6.0.3)))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vue@3.5.33(typescript@6.0.3)) + ohash: 2.0.11 + pathe: 2.0.3 + reka-ui: 2.9.6(vue@3.5.33(typescript@6.0.3)) + scule: 1.3.0 + tailwind-merge: 3.5.0 + tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4) + tailwindcss: 4.2.4 + tinyglobby: 0.2.16 + typescript: 6.0.3 + ufo: 1.6.4 + unplugin: 3.0.0 + unplugin-auto-import: 21.0.0(@nuxt/kit@4.4.4(magicast@0.5.2))(@vueuse/core@14.3.0(vue@3.5.33(typescript@6.0.3))) + unplugin-vue-components: 32.0.0(@nuxt/kit@4.4.4(magicast@0.5.2))(vue@3.5.33(typescript@6.0.3)) + vaul-vue: 0.4.1(reka-ui@2.9.6(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)) + vue-component-type-helpers: 3.2.7 + optionalDependencies: + '@internationalized/date': 3.12.1 + '@internationalized/number': 3.6.6 + '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)) zod: 4.4.2 @@ -15461,11 +15684,11 @@ snapshots: - vue - yjs - '@nuxt/ui@4.7.1(a9b2d95377f84339de5d6b64e6e76365)': + '@nuxt/ui@4.7.1(edf38741bcb56e8db4eba74a05842b3a)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) - '@nuxt/fonts': 0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@nuxt/fonts': 0.14.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxt/schema': 4.4.4 @@ -15530,7 +15753,7 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.1 '@internationalized/number': 3.6.6 - '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 3.25.76 transitivePeerDependencies: @@ -15575,7 +15798,7 @@ snapshots: - vue - yjs - '@nuxt/vite-builder@4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(a3ec5035fd2864a5c4c3312365960994))(optionator@0.9.4)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))(yaml@2.8.4)': + '@nuxt/vite-builder@4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(22cd37f964d1e9782fe0d1785e439e6e))(optionator@0.9.4)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))(yaml@2.8.4)': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.2) @@ -15593,7 +15816,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.4(a3ec5035fd2864a5c4c3312365960994) + nuxt: 4.4.4(22cd37f964d1e9782fe0d1785e439e6e) nypm: 0.6.6 pathe: 2.0.3 pkg-types: 2.3.1 @@ -15637,7 +15860,7 @@ snapshots: - vue-tsc - yaml - '@nuxt/vite-builder@4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(d016328d0f6a75c3ce3762b81393ba91))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4)': + '@nuxt/vite-builder@4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(9b409ea1fe6f33dee98afa99f6156aa2))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4)': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.2) @@ -15655,7 +15878,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.4(d016328d0f6a75c3ce3762b81393ba91) + nuxt: 4.4.4(9b409ea1fe6f33dee98afa99f6156aa2) nypm: 0.6.6 pathe: 2.0.3 pkg-types: 2.3.1 @@ -15699,7 +15922,7 @@ snapshots: - vue-tsc - yaml - '@nuxt/vite-builder@4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4)': + '@nuxt/vite-builder@4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4)': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.2) @@ -15717,7 +15940,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) nypm: 0.6.6 pathe: 2.0.3 pkg-types: 2.3.1 @@ -15761,7 +15984,7 @@ snapshots: - vue-tsc - yaml - '@nuxthub/core@0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3))': + '@nuxthub/core@0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3))': dependencies: '@cloudflare/workers-types': 4.20260503.1 '@nuxt/kit': 4.4.4(magicast@0.5.2) @@ -15786,7 +16009,7 @@ snapshots: tsdown: 0.18.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3)) ufo: 1.6.4 uncrypto: 0.1.3 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) zod: 4.4.2 transitivePeerDependencies: - '@arethetypeswrong/core' @@ -15823,7 +16046,7 @@ snapshots: - uploadthing - vue-tsc - '@nuxthub/core@0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))': + '@nuxthub/core@0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))': dependencies: '@cloudflare/workers-types': 4.20260503.1 '@nuxt/kit': 4.4.4(magicast@0.5.2) @@ -15848,7 +16071,7 @@ snapshots: tsdown: 0.18.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)) ufo: 1.6.4 uncrypto: 0.1.3 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) zod: 4.4.2 transitivePeerDependencies: - '@arethetypeswrong/core' @@ -15894,7 +16117,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vue/compiler-dom@3.5.33)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.2)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': + '@nuxtjs/i18n@10.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vue/compiler-dom@3.5.33)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.2)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': dependencies: '@intlify/core': 11.4.0 '@intlify/h3': 0.7.4 @@ -15919,7 +16142,7 @@ snapshots: ufo: 1.6.4 unplugin: 2.3.11 unrouting: 0.1.7 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) vue-i18n: 11.4.0(vue@3.5.33(typescript@6.0.3)) vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)) transitivePeerDependencies: @@ -16033,15 +16256,15 @@ snapshots: transitivePeerDependencies: - encoding - '@nuxtjs/robots@6.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2)': + '@nuxtjs/robots@6.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2)': dependencies: '@fingerprintjs/botd': 2.0.0 '@nuxt/kit': 4.4.4(magicast@0.5.2) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) - nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) + nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.3))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) pathe: 2.0.3 pkg-types: 2.3.1 ufo: 1.6.4 @@ -16054,14 +16277,14 @@ snapshots: - vite - vue - '@nuxtjs/sitemap@8.0.15(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76)': + '@nuxtjs/sitemap@8.0.15(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76)': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) consola: 3.4.2 defu: 6.1.7 fast-xml-parser: 5.7.2 - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) - nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) + nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) ofetch: 1.5.1 pathe: 2.0.3 pkg-types: 2.3.1 @@ -16098,6 +16321,126 @@ snapshots: '@opentelemetry/semantic-conventions@1.40.0': {} + '@orpc/client@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-fetch': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-peer': 1.14.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/contract@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/client': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@standard-schema/spec': 1.1.0 + openapi-types: 12.1.3 + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/interop@1.14.2': {} + + '@orpc/openapi-client@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/client': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/contract': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/openapi@1.14.2(@opentelemetry/api@1.9.0)(crossws@0.4.5(srvx@0.11.15))(fastify@5.8.5)(ws@8.20.0)': + dependencies: + '@orpc/client': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/contract': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/interop': 1.14.2 + '@orpc/openapi-client': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/server': 1.14.2(@opentelemetry/api@1.9.0)(crossws@0.4.5(srvx@0.11.15))(fastify@5.8.5)(ws@8.20.0) + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + json-schema-typed: 8.0.2 + rou3: 0.7.12 + transitivePeerDependencies: + - '@opentelemetry/api' + - crossws + - fastify + - ws + + '@orpc/server@1.14.2(@opentelemetry/api@1.9.0)(crossws@0.4.5(srvx@0.11.15))(fastify@5.8.5)(ws@8.20.0)': + dependencies: + '@orpc/client': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/contract': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/interop': 1.14.2 + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-aws-lambda': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-fastify': 1.14.2(@opentelemetry/api@1.9.0)(fastify@5.8.5) + '@orpc/standard-server-fetch': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-node': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-peer': 1.14.2(@opentelemetry/api@1.9.0) + cookie: 1.1.1 + optionalDependencies: + crossws: 0.4.5(srvx@0.11.15) + ws: 8.20.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - fastify + + '@orpc/shared@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + radash: 12.1.1 + type-fest: 5.6.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + + '@orpc/standard-server-aws-lambda@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-fetch': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-node': 1.14.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/standard-server-fastify@1.14.2(@opentelemetry/api@1.9.0)(fastify@5.8.5)': + dependencies: + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-node': 1.14.2(@opentelemetry/api@1.9.0) + optionalDependencies: + fastify: 5.8.5 + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/standard-server-fetch@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/standard-server-node@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server-fetch': 1.14.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/standard-server-peer@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + '@orpc/standard-server': 1.14.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' + + '@orpc/standard-server@1.14.2(@opentelemetry/api@1.9.0)': + dependencies: + '@orpc/shared': 1.14.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@opentelemetry/api' + '@oxc-minify/binding-android-arm-eabi@0.128.0': optional: true @@ -17154,11 +17497,11 @@ snapshots: dependencies: solid-js: 1.9.12 - '@solidjs/start@1.3.2(solid-js@1.9.12)(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': + '@solidjs/start@1.3.2(solid-js@1.9.12)(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@tanstack/server-functions-plugin': 1.121.21(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) cookie-es: 2.0.1 defu: 6.1.7 error-stack-parser: 2.1.4 @@ -17170,7 +17513,7 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.1.0(solid-js@1.9.12) tinyglobby: 0.2.16 - vinxi: 0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + vinxi: 0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) vite-plugin-solid: 2.11.12(solid-js@1.9.12)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) transitivePeerDependencies: - '@testing-library/jest-dom' @@ -18308,6 +18651,10 @@ snapshots: '@types/braces@3.0.5': {} + '@types/bun@1.3.13': + dependencies: + bun-types: 1.3.13 + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -18606,11 +18953,11 @@ snapshots: '@uploadthing/mime-types@0.3.6': {} - '@vercel/analytics@2.0.1(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3))': + '@vercel/analytics@2.0.1(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3))': optionalDependencies: '@sveltejs/kit': 2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) react: 19.2.5 svelte: 5.55.5(@typescript-eslint/types@8.59.1) vue: 3.5.33(typescript@6.0.3) @@ -18636,11 +18983,11 @@ snapshots: '@vercel/oidc@3.2.0': {} - '@vercel/speed-insights@2.0.0(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3))': + '@vercel/speed-insights@2.0.0(@sveltejs/kit@2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(next@16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(react@19.2.5)(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vue@3.5.33(typescript@6.0.3))': optionalDependencies: '@sveltejs/kit': 2.59.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.5(@typescript-eslint/types@8.59.1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(svelte@5.55.5(@typescript-eslint/types@8.59.1))(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) react: 19.2.5 svelte: 5.55.5(@typescript-eslint/types@8.59.1) vue: 3.5.33(typescript@6.0.3) @@ -18665,7 +19012,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.3 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@babel/parser': 7.29.3 acorn: 8.16.0 @@ -18676,18 +19023,18 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + vinxi: 0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) - '@vinxi/server-components@0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': + '@vinxi/server-components@0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) acorn: 8.16.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.16.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + vinxi: 0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) '@vitejs/plugin-react@5.2.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': dependencies: @@ -19065,6 +19412,14 @@ snapshots: '@opentelemetry/api': 1.9.0 zod: 4.4.2 + ai@6.0.174(zod@4.4.3): + dependencies: + '@ai-sdk/gateway': 3.0.109(zod@4.4.3) + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.26(zod@4.4.3) + '@opentelemetry/api': 1.9.0 + zod: 4.4.3 + ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 @@ -19334,10 +19689,10 @@ snapshots: dependencies: safe-buffer: 5.1.2 - better-auth@1.6.9(5f3a3ee1196d34db3f2bcf2c9a4427cf): + better-auth@1.6.9(de5f92278079270b2e59bf852a5ff4ae): dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) '@better-auth/kysely-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) '@better-auth/memory-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) '@better-auth/mongo-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260503.1)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.4.2))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) @@ -19358,7 +19713,7 @@ snapshots: '@tanstack/react-start': 1.167.61(crossws@0.4.5(srvx@0.11.15))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite-plugin-solid@2.11.12(solid-js@1.9.12)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) better-sqlite3: 12.9.0 drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17) + drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17) next: 16.2.4(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) @@ -19489,6 +19844,10 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bun-types@1.3.13: + dependencies: + '@types/node': 22.19.17 + bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -19961,11 +20320,11 @@ snapshots: '@deno/shim-deno': 0.19.2 undici-types: 5.28.4 - db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)): + db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)): optionalDependencies: '@libsql/client': 0.17.3 better-sqlite3: 12.9.0 - drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17) + drizzle-orm: 0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17) debug@2.6.9: dependencies: @@ -20068,7 +20427,7 @@ snapshots: dependencies: path-type: 4.0.0 - docus@5.10.1(2ec5390895d83f4f248ff17455cd6f04): + docus@5.10.1(5953c4132225337ed91cfd359d532cd1): dependencies: '@ai-sdk/gateway': 3.0.109(zod@4.4.2) '@ai-sdk/mcp': 1.0.39(zod@4.4.2) @@ -20076,14 +20435,14 @@ snapshots: '@iconify-json/lucide': 1.2.105 '@iconify-json/simple-icons': 1.2.80 '@iconify-json/vscode-icons': 1.2.48 - '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) - '@nuxt/image': 2.0.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2) + '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/image': 2.0.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/ui': 4.7.1(2a136ac0b8bbf9306096d0df38a9f16f) - '@nuxtjs/i18n': 10.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vue/compiler-dom@3.5.33)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.2)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) + '@nuxt/ui': 4.7.1(77c7ae0d2d13db12e3934c11e2c6a934) + '@nuxtjs/i18n': 10.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vue/compiler-dom@3.5.33)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.2)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) '@nuxtjs/mcp-toolkit': 0.16.1(@vue/compiler-sfc@3.5.33)(h3@2.0.1-rc.21(crossws@0.4.5(srvx@0.11.15)))(magicast@0.5.2)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) '@nuxtjs/mdc': 0.21.1(magicast@0.5.2) - '@nuxtjs/robots': 6.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) + '@nuxtjs/robots': 6.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) '@shikijs/core': 4.0.2 '@shikijs/engine-javascript': 4.0.2 '@shikijs/langs': 4.0.2 @@ -20096,9 +20455,9 @@ snapshots: exsolve: 1.0.8 git-url-parse: 16.1.0 motion-v: 2.2.1(@vueuse/core@14.3.0(vue@3.5.33(typescript@6.0.3)))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vue@3.5.33(typescript@6.0.3)) - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) nuxt-llms: 0.2.0(magicast@0.5.2) - nuxt-og-image: 6.4.10(b1208c23ce5f0edb97541cf6728e1735) + nuxt-og-image: 6.4.10(436a18f5e571990b1fed4d4404e49e0a) pkg-types: 2.3.1 scule: 1.3.0 shiki-stream: 0.1.4(react@19.2.5)(solid-js@1.9.12)(vue@3.5.33(typescript@6.0.3)) @@ -20256,13 +20615,14 @@ snapshots: esbuild: 0.25.12 tsx: 4.21.0 - drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17): + drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17): optionalDependencies: '@cloudflare/workers-types': 4.20260503.1 '@libsql/client': 0.17.3 '@opentelemetry/api': 1.9.0 '@types/better-sqlite3': 7.6.13 better-sqlite3: 12.9.0 + bun-types: 1.3.13 kysely: 0.28.17 dts-resolver@2.1.3: {} @@ -20281,7 +20641,7 @@ snapshots: electron-to-chromium@1.5.349: {} - elysia@1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@1.0.0)(file-type@21.3.4)(openapi-types@12.1.3)(typescript@6.0.3): + elysia@1.4.28(@sinclair/typebox@0.34.49)(@types/bun@1.3.13)(exact-mirror@1.0.0)(file-type@21.3.4)(openapi-types@12.1.3)(typescript@6.0.3): dependencies: '@sinclair/typebox': 0.34.49 cookie: 1.1.1 @@ -20291,6 +20651,7 @@ snapshots: memoirist: 0.4.0 openapi-types: 12.1.3 optionalDependencies: + '@types/bun': 1.3.13 typescript: 6.0.3 embla-carousel-auto-height@8.6.0(embla-carousel@8.6.0): @@ -21143,7 +21504,7 @@ snapshots: dependencies: tiny-inflate: 1.0.3 - fontless@0.2.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): + fontless@0.2.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): dependencies: consola: 3.4.2 css-tree: 3.2.1 @@ -21157,7 +21518,7 @@ snapshots: pathe: 2.0.3 ufo: 1.6.4 unifont: 0.7.4 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) optionalDependencies: vite: 8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) transitivePeerDependencies: @@ -21716,7 +22077,7 @@ snapshots: ipaddr.js@2.3.0: {} - ipx@3.1.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1): + ipx@3.1.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1): dependencies: '@fastify/accept-negotiator': 2.0.1 citty: 0.1.6 @@ -21732,7 +22093,7 @@ snapshots: sharp: 0.34.5 svgo: 4.0.1 ufo: 1.6.4 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) xss: 1.0.15 transitivePeerDependencies: - '@azure/app-configuration' @@ -22782,7 +23143,7 @@ snapshots: mutation-server-protocol@0.4.1: dependencies: - zod: 4.4.2 + zod: 4.4.3 mutation-testing-elements@3.7.3: {} @@ -22839,11 +23200,11 @@ snapshots: nf3@0.3.16: {} - nitro-nightly@3.0.1-20260501-164602-aee73f19(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): + nitro-nightly@3.0.1-20260501-164602-aee73f19(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): dependencies: consola: 3.4.2 crossws: 0.4.5(srvx@0.11.15) - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) env-runner: 0.1.7 h3: 2.0.1-rc.21(crossws@0.4.5(srvx@0.11.15)) hookable: 6.1.1 @@ -22854,7 +23215,7 @@ snapshots: rolldown: 1.0.0-rc.18 srvx: 0.11.15 unenv: 2.0.0-rc.24 - unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) + unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) optionalDependencies: dotenv: 17.4.2 giget: 3.2.0 @@ -22892,11 +23253,11 @@ snapshots: - sqlite3 - uploadthing - nitro@3.0.260311-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): + nitro@3.0.260311-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): dependencies: consola: 3.4.2 crossws: 0.4.5(srvx@0.11.15) - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) env-runner: 0.1.7 h3: 2.0.1-rc.21(crossws@0.4.5(srvx@0.11.15)) hookable: 6.1.1 @@ -22907,7 +23268,7 @@ snapshots: rolldown: 1.0.0-rc.18 srvx: 0.11.15 unenv: 2.0.0-rc.24 - unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) + unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) optionalDependencies: dotenv: 17.4.2 giget: 3.2.0 @@ -22945,11 +23306,11 @@ snapshots: - sqlite3 - uploadthing - nitro@3.0.260429-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): + nitro@3.0.260429-beta(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(giget@3.2.0)(ioredis@5.10.1)(jiti@2.6.1)(lru-cache@11.3.5)(rollup@4.60.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): dependencies: consola: 3.4.2 crossws: 0.4.5(srvx@0.11.15) - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) env-runner: 0.1.7 h3: 2.0.1-rc.21(crossws@0.4.5(srvx@0.11.15)) hookable: 6.1.1 @@ -22960,7 +23321,7 @@ snapshots: rolldown: 1.0.0-rc.18 srvx: 0.11.15 unenv: 2.0.0-rc.24 - unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) + unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3) optionalDependencies: dotenv: 17.4.2 giget: 3.2.0 @@ -22998,7 +23359,7 @@ snapshots: - sqlite3 - uploadthing - nitropack@2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)): + nitropack@2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.60.2) @@ -23019,7 +23380,7 @@ snapshots: cookie-es: 2.0.1 croner: 10.0.1 crossws: 0.3.5 - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) defu: 6.1.7 destr: 2.0.5 dot-prop: 10.1.0 @@ -23065,7 +23426,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.2.0(oxc-parser@0.128.0) unplugin-utils: 0.3.1 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -23102,7 +23463,7 @@ snapshots: - supports-color - uploadthing - nitropack@2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17): + nitropack@2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.60.2) @@ -23123,7 +23484,7 @@ snapshots: cookie-es: 2.0.1 croner: 10.0.1 crossws: 0.3.5 - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) defu: 6.1.7 destr: 2.0.5 dot-prop: 10.1.0 @@ -23169,7 +23530,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.2.0(oxc-parser@0.128.0) unplugin-utils: 0.3.1 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -23206,7 +23567,7 @@ snapshots: - supports-color - uploadthing - nitropack@2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18): + nitropack@2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.60.2) @@ -23227,7 +23588,7 @@ snapshots: cookie-es: 2.0.1 croner: 10.0.1 crossws: 0.3.5 - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) defu: 6.1.7 destr: 2.0.5 dot-prop: 10.1.0 @@ -23273,7 +23634,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.2.0(oxc-parser@0.128.0) unplugin-utils: 0.3.1 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -23377,7 +23738,7 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-og-image@6.4.10(b1208c23ce5f0edb97541cf6728e1735): + nuxt-og-image@6.4.10(436a18f5e571990b1fed4d4404e49e0a): dependencies: '@clack/prompts': 1.3.0 '@nuxt/kit': 4.4.4(magicast@0.5.2) @@ -23393,8 +23754,8 @@ snapshots: magic-string: 0.30.21 magicast: 0.5.2 mocked-exports: 0.1.1 - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) - nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) + nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.3))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) nypm: 0.6.6 ofetch: 1.5.1 ohash: 2.0.11 @@ -23410,11 +23771,11 @@ snapshots: ufo: 1.6.4 ultrahtml: 1.6.0 unplugin: 3.0.0 - unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@1.5.1) + unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@1.5.1) optionalDependencies: '@resvg/resvg-js': 2.6.2 '@takumi-rs/core': 1.1.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - fontless: 0.2.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + fontless: 0.2.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) satori: 0.19.3 sharp: 0.34.5 tailwindcss: 4.2.4 @@ -23437,12 +23798,12 @@ snapshots: - magicast - vue - nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76): + nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76): dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) h3: 1.15.11 nuxt-site-config-kit: 4.0.8(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)) - nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) + nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.0.8(vue@3.5.33(typescript@6.0.3)) @@ -23455,12 +23816,12 @@ snapshots: - vue - zod - nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2): + nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2): dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) h3: 1.15.11 nuxt-site-config-kit: 4.0.8(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)) - nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) + nuxtseo-shared: 5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.3))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.0.8(vue@3.5.33(typescript@6.0.3)) @@ -23473,7 +23834,7 @@ snapshots: - vue - zod - nuxt-studio@1.7.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)): + nuxt-studio@1.7.0(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)): dependencies: '@ai-sdk/gateway': 3.0.109(zod@4.4.2) '@ai-sdk/vue': 3.0.174(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) @@ -23488,11 +23849,11 @@ snapshots: nuxt-component-meta: 0.17.2(magicast@0.5.2) remark-mdc: 3.10.0 shiki: 4.0.2 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) zod: 4.4.2 zod-to-json-schema: 3.25.2(zod@4.4.2) optionalDependencies: - ipx: 3.1.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + ipx: 3.1.1(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23517,16 +23878,16 @@ snapshots: - uploadthing - vue - nuxt@4.4.4(a3ec5035fd2864a5c4c3312365960994): + nuxt@4.4.4(22cd37f964d1e9782fe0d1785e439e6e): dependencies: '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@5.9.3) '@nuxt/cli': 3.35.1(@nuxt/schema@4.4.4)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.4(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@5.9.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(a3ec5035fd2864a5c4c3312365960994))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3) + '@nuxt/nitro-server': 4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(22cd37f964d1e9782fe0d1785e439e6e))(oxc-parser@0.128.0)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3) '@nuxt/schema': 4.4.4 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.4(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(a3ec5035fd2864a5c4c3312365960994))(optionator@0.9.4)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))(yaml@2.8.4) + '@nuxt/vite-builder': 4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(22cd37f964d1e9782fe0d1785e439e6e))(optionator@0.9.4)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.7(typescript@5.9.3))(vue@3.5.33(typescript@5.9.3))(yaml@2.8.4) '@unhead/vue': 2.1.13(vue@3.5.33(typescript@5.9.3)) '@vue/shared': 3.5.33 chokidar: 5.0.0 @@ -23646,16 +24007,16 @@ snapshots: - xml2js - yaml - nuxt@4.4.4(d016328d0f6a75c3ce3762b81393ba91): + nuxt@4.4.4(9b409ea1fe6f33dee98afa99f6156aa2): dependencies: '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3) '@nuxt/cli': 3.35.1(@nuxt/schema@4.4.4)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.4(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(d016328d0f6a75c3ce3762b81393ba91))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17)(typescript@6.0.3) + '@nuxt/nitro-server': 4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(9b409ea1fe6f33dee98afa99f6156aa2))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.17)(typescript@6.0.3) '@nuxt/schema': 4.4.4 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.4(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(d016328d0f6a75c3ce3762b81393ba91))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4) + '@nuxt/vite-builder': 4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(9b409ea1fe6f33dee98afa99f6156aa2))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4) '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) '@vue/shared': 3.5.33 chokidar: 5.0.0 @@ -23775,16 +24136,16 @@ snapshots: - xml2js - yaml - nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1): + nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564): dependencies: '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3) '@nuxt/cli': 3.35.1(@nuxt/schema@4.4.4)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.4(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(typescript@6.0.3) + '@nuxt/nitro-server': 4.4.4(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(typescript@6.0.3) '@nuxt/schema': 4.4.4 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.4(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4) + '@nuxt/vite-builder': 4.4.4(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@9.39.4(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.33(typescript@6.0.3))(yaml@2.8.4) '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) '@vue/shared': 3.5.33 chokidar: 5.0.0 @@ -23904,7 +24265,7 @@ snapshots: - xml2js - yaml - nuxtseo-shared@5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76): + nuxtseo-shared@5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76): dependencies: '@clack/prompts': 1.3.0 '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) @@ -23913,7 +24274,7 @@ snapshots: birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) ofetch: 1.5.1 pathe: 2.0.3 pkg-types: 2.3.1 @@ -23923,13 +24284,13 @@ snapshots: ufo: 1.6.4 vue: 3.5.33(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - magicast - vite - nuxtseo-shared@5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2))(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2): + nuxtseo-shared@5.1.3(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.3))(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2): dependencies: '@clack/prompts': 1.3.0 '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) @@ -23938,7 +24299,7 @@ snapshots: birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1) + nuxt: 4.4.4(b84a188790b93beb9b4efd75c13b5564) ofetch: 1.5.1 pathe: 2.0.3 pkg-types: 2.3.1 @@ -23948,7 +24309,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.33(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(d5aa8e715b249dc8f3066482b1d2d6b1))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(b84a188790b93beb9b4efd75c13b5564))(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))(zod@4.4.2) zod: 4.4.2 transitivePeerDependencies: - magicast @@ -24713,6 +25074,8 @@ snapshots: quick-format-unescaped@4.0.4: {} + radash@12.1.1: {} + radix3@1.1.2: {} range-parser@1.2.1: {} @@ -26418,7 +26781,7 @@ snapshots: dependencies: rolldown: 1.0.0-rc.17 - unstorage@1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1): + unstorage@1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -26429,21 +26792,21 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.4 optionalDependencies: - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) ioredis: 5.10.1 - unstorage@2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@1.5.1): + unstorage@2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@1.5.1): optionalDependencies: chokidar: 5.0.0 - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) ioredis: 5.10.1 lru-cache: 11.3.5 ofetch: 1.5.1 - unstorage@2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3): + unstorage@2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1)(lru-cache@11.3.5)(ofetch@2.0.0-alpha.3): optionalDependencies: chokidar: 5.0.0 - db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)) + db0: 0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)) ioredis: 5.10.1 lru-cache: 11.3.5 ofetch: 2.0.0-alpha.3 @@ -26527,7 +26890,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4): + vinxi@0.5.11(@libsql/client@0.17.3)(@types/node@25.6.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4): dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -26548,7 +26911,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18) + nitropack: 2.13.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -26560,9 +26923,9 @@ snapshots: ufo: 1.6.4 unctx: 2.5.0 unenv: 1.10.0 - unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(kysely@0.28.17)))(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260503.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@12.9.0)(bun-types@1.3.13)(kysely@0.28.17)))(ioredis@5.10.1) vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) - zod: 4.4.2 + zod: 4.4.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -27336,4 +27699,6 @@ snapshots: zod@4.4.2: {} + zod@4.4.3: {} + zwitch@2.0.4: {}