From f1c0eb55f3ee494238b477feb80ec78ba2739d0a Mon Sep 17 00:00:00 2001 From: Andres David Jimenez Sulbaran Date: Wed, 18 Mar 2026 17:33:45 -0600 Subject: [PATCH 01/26] init prisma migration --- apps/node-auth-example/src/http.ts | 2 +- packages/prisma/src/cli.ts | 11 ++++---- packages/prisma/src/commands/init.ts | 16 +++++------ packages/prisma/src/commands/prisma.ts | 20 ++++++------- .../prisma/src/services/formatter-service.ts | 18 ++++++------ .../prisma/src/services/generator-context.ts | 9 ++++-- .../prisma/src/services/generator-service.ts | 28 ++++++++++--------- .../prisma/src/services/render-service.ts | 20 ++++++------- 8 files changed, 64 insertions(+), 60 deletions(-) diff --git a/apps/node-auth-example/src/http.ts b/apps/node-auth-example/src/http.ts index 4a20d123..23b4eecc 100644 --- a/apps/node-auth-example/src/http.ts +++ b/apps/node-auth-example/src/http.ts @@ -8,5 +8,5 @@ import { pipe } from "effect/Function" export const Live = pipe( HttpServer.serve(toEffectHandler(Auth.auth)), - Layer.provide(NodeHttpServer.layer(() => createServer(), { port: 3001 })), + Layer.provide(NodeHttpServer.layer(createServer, { port: 3001 })), ) diff --git a/packages/prisma/src/cli.ts b/packages/prisma/src/cli.ts index 0fa1a732..412f7a3d 100755 --- a/packages/prisma/src/cli.ts +++ b/packages/prisma/src/cli.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node -import * as Command from "@effect/cli/Command" -import * as NodeContext from "@effect/platform-node/NodeContext" +import * as Command from "effect/unstable/cli/Command" +import * as NodeServices from "@effect/platform-node/NodeServices" import * as NodeRuntime from "@effect/platform-node/NodeRuntime" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" @@ -12,16 +12,15 @@ import { RenderService } from "./services/render-service.js" import { FormatterService } from "./services/formatter-service.js" const cli = Command.run(prismaCommand.pipe(Command.withSubcommands([initCommand])), { - name: "@effectify/prisma CLI", version: "0.1.0", }) const GeneratorLayer = GeneratorService.Live.pipe( Layer.provide(RenderService.Live), Layer.provide(FormatterService.Live), - Layer.provide(NodeContext.layer), + Layer.provide(NodeServices.layer), ) -const MainLayer = Layer.mergeAll(GeneratorLayer, RenderService.Live, FormatterService.Live, NodeContext.layer) +const MainLayer = Layer.mergeAll(GeneratorLayer, RenderService.Live, FormatterService.Live, NodeServices.layer) -cli(process.argv).pipe(Effect.provide(MainLayer), NodeRuntime.runMain) +cli.pipe(Effect.provide(MainLayer), NodeRuntime.runMain) diff --git a/packages/prisma/src/commands/init.ts b/packages/prisma/src/commands/init.ts index 3085534a..7fa73add 100644 --- a/packages/prisma/src/commands/init.ts +++ b/packages/prisma/src/commands/init.ts @@ -1,17 +1,17 @@ -import * as Command from "@effect/cli/Command" -import * as Options from "@effect/cli/Options" +import * as Command from "effect/unstable/cli/Command" +import * as Flag from "effect/unstable/cli/Flag" import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem" import * as NodePath from "@effect/platform-node/NodePath" -import * as FileSystem from "@effect/platform/FileSystem" +import * as FileSystem from "effect/FileSystem" import * as Console from "effect/Console" import * as Effect from "effect/Effect" import * as Match from "effect/Match" -// Options for the init command -const outputOption = Options.text("output").pipe( - Options.withAlias("o"), - Options.withDescription("Output directory path for generated files"), - Options.withDefault("src"), +// Flag for the init command +const outputOption = Flag.string("output").pipe( + Flag.withAlias("o"), + Flag.withDescription("Output directory path for generated files"), + Flag.withDefault("src"), ) // Check if file exists diff --git a/packages/prisma/src/commands/prisma.ts b/packages/prisma/src/commands/prisma.ts index 264632d4..ab27e549 100644 --- a/packages/prisma/src/commands/prisma.ts +++ b/packages/prisma/src/commands/prisma.ts @@ -1,11 +1,10 @@ -import * as Command from "@effect/cli/Command" -import type * as NodeContext from "@effect/platform-node/NodeContext" +import * as Command from "effect/unstable/cli/Command" +import type * as NodeServices from "@effect/platform-node/NodeServices" import type { GeneratorOptions } from "@prisma/generator-helper" import generatorHelper from "@prisma/generator-helper" import * as Deferred from "effect/Deferred" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" -import * as Runtime from "effect/Runtime" import * as Stream from "effect/Stream" import { GeneratorContext } from "../services/generator-context.js" import { GeneratorService } from "../services/generator-service.js" @@ -14,10 +13,10 @@ import type { RenderService } from "../services/render-service.js" export const prismaCommand = Command.make("prisma", {}, () => Effect.gen(function*() { const generator = yield* GeneratorService - const runtime = yield* Effect.runtime() - const run = Runtime.runPromise(runtime) + const runtime = yield* Effect.services() + const run = Effect.runForkWith(runtime) - const events = Stream.async<[GeneratorOptions, Deferred.Deferred]>((emit) => { + const events = Stream.callback<[GeneratorOptions, Deferred.Deferred]>(Effect.fnUntraced(function*(emit) { generatorHelper.generatorHandler({ onManifest() { return { @@ -35,16 +34,15 @@ export const prismaCommand = Command.make("prisma", {}, () => }), ) // Cerrar el stream después de procesar la generación - emit.end() + yield* emit. }, }) - }) + })) yield* events.pipe( - Stream.runForEach(([options, deferred]) => + Stream.runForEach(([options]) => generator.generate.pipe( - Effect.provide(Layer.succeed(GeneratorContext, options)), - Effect.intoDeferred(deferred), + Effect.provide(Layer.succeed(GeneratorContext, options)) ) ), ) diff --git a/packages/prisma/src/services/formatter-service.ts b/packages/prisma/src/services/formatter-service.ts index 1da00c42..449240df 100644 --- a/packages/prisma/src/services/formatter-service.ts +++ b/packages/prisma/src/services/formatter-service.ts @@ -1,17 +1,15 @@ -import * as Context from "effect/Context" +import * as ServiceMap from "effect/ServiceMap" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" import { createFromBuffer } from "@dprint/formatter" import { getPath } from "@dprint/typescript" import * as fs from "node:fs" -export class FormatterService extends Context.Tag("FormatterService")< - FormatterService, - { - readonly format: (code: string) => Effect.Effect - } ->() { - static Live = Layer.sync(FormatterService, () => { + +export class FormatterService extends ServiceMap.Service Effect.Effect +}>()("FormatterService", { + make: Effect.gen(function*() { const buffer = fs.readFileSync(getPath()) const formatter = createFromBuffer(buffer) @@ -22,5 +20,7 @@ export class FormatterService extends Context.Tag("FormatterService")< catch: (error) => new Error(`Failed to format code: ${error}`), }), } - }) + }), +}) { + static readonly layer = Layer.effect(FormatterService, this.make) } diff --git a/packages/prisma/src/services/generator-context.ts b/packages/prisma/src/services/generator-context.ts index 337bea6c..8d87e576 100644 --- a/packages/prisma/src/services/generator-context.ts +++ b/packages/prisma/src/services/generator-context.ts @@ -1,4 +1,9 @@ import type { GeneratorOptions } from "@prisma/generator-helper" -import * as Context from "effect/Context" +import * as ServiceMap from "effect/ServiceMap" -export class GeneratorContext extends Context.Tag("GeneratorContext")() {} + + +export class GeneratorContext extends ServiceMap.Service< + GeneratorContext, + GeneratorOptions +>()("GeneratorContext") {} \ No newline at end of file diff --git a/packages/prisma/src/services/generator-service.ts b/packages/prisma/src/services/generator-service.ts index 3990210d..25a06d9e 100644 --- a/packages/prisma/src/services/generator-service.ts +++ b/packages/prisma/src/services/generator-service.ts @@ -1,7 +1,6 @@ -import * as FileSystem from "@effect/platform/FileSystem" -import * as Path from "@effect/platform/Path" +import * as FileSystem from "effect/FileSystem" +import * as Path from "effect/Path" import type { DMMF, GeneratorOptions } from "@prisma/generator-helper" -import * as Context from "effect/Context" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" import { GeneratorContext } from "./generator-context.js" @@ -9,16 +8,13 @@ import { RenderService } from "./render-service.js" import { FormatterService } from "./formatter-service.js" import { generateSchemas } from "../schema-generator/index.js" +import * as ServiceMap from "effect/ServiceMap" -export class GeneratorService extends Context.Tag("GeneratorService")< - GeneratorService, - { - readonly generate: Effect.Effect - } ->() { - static Live = Layer.effect( - GeneratorService, - Effect.gen(function*() { + +export class GeneratorService extends ServiceMap.Service + }>()("GeneratorService", { + make: Effect.gen(function*() { const fs = yield* FileSystem.FileSystem const path = yield* Path.Path const renderService = yield* RenderService @@ -172,5 +168,11 @@ export class GeneratorService extends Context.Tag("GeneratorService")< return { generate } }), + }) { + + static readonly layer = Layer.effect(GeneratorService, this.make).pipe( + Layer.provide(RenderService.layer), + Layer.provide(FormatterService.layer), ) -} + +} \ No newline at end of file diff --git a/packages/prisma/src/services/render-service.ts b/packages/prisma/src/services/render-service.ts index 68db656b..9aa75dcb 100644 --- a/packages/prisma/src/services/render-service.ts +++ b/packages/prisma/src/services/render-service.ts @@ -1,17 +1,15 @@ -import * as Context from "effect/Context" +import * as ServiceMap from "effect/ServiceMap" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" import { Eta } from "eta" import * as path from "node:path" import { fileURLToPath } from "node:url" -export class RenderService extends Context.Tag("RenderService")< - RenderService, - { - readonly render: (templateName: string, data: Record) => Effect.Effect - } ->() { - static Live = Layer.sync(RenderService, () => { + +export class RenderService extends ServiceMap.Service) => Effect.Effect +}>()("RenderService", { + make: Effect.gen(function*() { const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const templatesDir = path.resolve(__dirname, "../templates") @@ -28,5 +26,7 @@ export class RenderService extends Context.Tag("RenderService")< catch: (error) => new Error(`Failed to render template ${templateName}: ${error}`), }), } - }) -} + }), +}) { + static readonly layer = Layer.effect(RenderService, this.make) +} \ No newline at end of file From c0d63b3d9bf9e4815e9c1aec404f9073b68ae679 Mon Sep 17 00:00:00 2001 From: Andres J Date: Fri, 20 Mar 2026 19:03:05 -0600 Subject: [PATCH 02/26] feat: update dependencies and improve TypeScript configuration - Updated '@effect/experimental' to version 0.59.0 in pnpm-workspace.yaml - Upgraded '@effect/vitest' to version 4.0.0-beta.33 - Added exclusion for '.effect-reference' directory in tsconfig.base.json - Introduced effect-pattern-discovery skill documentation for Effect-TS patterns - Added .nxignore file to exclude '.effect-reference' from NX workspace - Created migration document for transitioning packages/prisma to Effect v4 (Beta) --- .../skills/effect-pattern-discovery/SKILL.md | 195 +++ .nxignore | 1 + AGENTS.md | 10 + migration-prisma-v4.md | 60 + packages/prisma/src/cli.ts | 8 +- packages/prisma/src/commands/prisma.ts | 78 +- packages/prisma/src/runtime/index.ts | 477 +------ packages/prisma/src/schema-generator/index.ts | 14 +- .../prisma/src/services/generator-service.ts | 336 +++-- .../src/templates/index-custom-error.eta | 18 +- .../prisma/src/templates/index-default.eta | 18 +- pnpm-lock.yaml | 1210 ++++++++--------- pnpm-workspace.yaml | 5 +- tsconfig.base.json | 1 + 14 files changed, 1194 insertions(+), 1237 deletions(-) create mode 100644 .agent/skills/effect-pattern-discovery/SKILL.md create mode 100644 .nxignore create mode 100644 migration-prisma-v4.md diff --git a/.agent/skills/effect-pattern-discovery/SKILL.md b/.agent/skills/effect-pattern-discovery/SKILL.md new file mode 100644 index 00000000..3053f14b --- /dev/null +++ b/.agent/skills/effect-pattern-discovery/SKILL.md @@ -0,0 +1,195 @@ +--- +name: effect-pattern-discovery +description: > + Effect-TS patterns sourced from effect-smol reference implementation. + Trigger: When implementing Effect, Layer, Schema, Pipe, Context, or error handling patterns. +license: Apache-2.0 +metadata: + author: gentleman-programming + version: "1.0" +--- + +## When to Use + +- Implementing Effect-based services or layers +- Creating structured errors with Data.TaggedError or Schema.ErrorClass +- Building pipeable modules with dual functions +- Defining Context/Service patterns with Context.Tag +- Composing Layers with provide/merge + +## Critical Patterns + +### ❌ FORBIDDEN: try-catch in Effect.gen + +```typescript +// ❌ WRONG - Breaks Effect semantics +Effect.gen(function*() { + try { + return yield* someEffect + } catch (error) { + // Never reached! + } +}) + +// ✅ CORRECT - Use Effect.result or Effect.catchTag +Effect.gen(function*() { + const result = yield* Effect.result(someEffect) + if (result._tag === "Failure") { + return yield* Effect.fail(handleError(result.cause)) + } + return result.value +}) +``` + +### ❌ FORBIDDEN: Type Assertions + +```typescript +// ❌ FORBIDDEN - These break type safety +const value = something as any +const value = something as never + +// ✅ CORRECT - Use proper Effect constructors +const safeValue = Effect.try(() => JSON.parse(jsonString)) +``` + +### ✅ MANDATORY: return yield\* for Terminal Effects + +```typescript +Effect.gen(function*() { + if (invalidCondition) { + return yield* Effect.fail("Error") // ✅ correct + } + + if (shouldInterrupt) { + return yield* Effect.interrupt // ✅ correct + } + + return result // ✅ correct +}) +``` + +## Code Examples + +### Service Definition with Context.Tag + +```typescript +import { Context, Effect, Layer } from "effect" + +class DatabaseService extends Context.Tag("DatabaseService")< + DatabaseService, + { + readonly query: ( + sql: string, + ) => Effect.Effect + } +>() {} + +class UserService extends Context.Tag("UserService")< + UserService, + { + readonly getUser: (id: string) => Effect.Effect + } +>() {} + +// Layer implementation +const DatabaseServiceLive = Layer.succeed( + DatabaseService, + DatabaseService.of({ + query: (sql) => + Effect.tryPromise({ + try: () => db.execute(sql), + catch: (e) => new DatabaseError({ cause: e }), + }), + }), +) +``` + +### Structured Errors with Data.TaggedError + +```typescript +import { Data, Effect } from "effect" + +class ValidationError extends Data.TaggedError("ValidationError")<{ + field: string + message: string +}> {} + +class NetworkError extends Data.TaggedError("NetworkError")<{ + status: number + url: string + cause?: unknown +}> {} + +// Usage with catchTag +const program = operation().pipe( + Effect.catchTag("ValidationError", (e) => Console.log(`Invalid field: ${e.field}`)), +) +``` + +### Schema.ErrorClass for Serializable Errors + +```typescript +import { Schema } from "effect" + +class ApiError extends Schema.ErrorClass("@effectify/ApiError")({ + _tag: Schema.tag("ApiError"), + code: Schema.String, + message: Schema.String, +}) { + get message() { + return `[${this.code}] ${this.message}` + } +} +``` + +### Effect.fn vs Effect.fnUntraced + +| Function | Use Case | Tracing | +| ------------------------- | -------------------------- | ----------- | +| `Effect.fn("name")(fn)` | Public API, reusable | ✅ Yes | +| `Effect.fnUntraced(fn)` | Internal hot paths | ❌ No | +| `Effect.gen(function*())` | One-off inline composition | Uses parent | + +### Dual Function Pattern + +```typescript +import { dual } from "effect" + +export const map = dual< + (f: (a: A) => B) => (self: Module) => Module, + (self: Module, f: (a: A) => B) => Module +>(2, (self, f) => /* implementation */) +``` + +### Layer Composition + +```typescript +const AppLayer = UserServiceLive.pipe( + Layer.provide(DatabaseServiceLive), + Layer.launch, +) + +// Or with merge +const CombinedLayer = Layer.merge(UserServiceLive, DatabaseServiceLive) +``` + +## Commands + +```bash +# Scan for similar patterns in effect-smol +ls .effect-reference/packages/effect/src/ + +# Check internal implementations +cat .effect-reference/packages/effect/src/internal/effect.ts + +# Look at module exports +cat .effect-reference/packages/effect/src/index.ts +``` + +## Resources + +- **effect-smol source**: `.effect-reference/packages/effect/src/` +- **Pattern docs**: `.effect-reference/.patterns/` +- **Error handling**: `.effect-reference/.patterns/error-handling.md` +- **Module organization**: `.effect-reference/.patterns/module-organization.md` +- **Library development**: `.effect-reference/.patterns/effect-library-development.md` diff --git a/.nxignore b/.nxignore new file mode 100644 index 00000000..4f0c27bc --- /dev/null +++ b/.nxignore @@ -0,0 +1 @@ +.effect-reference/ \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index c42abcc6..e25334bd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,3 +20,13 @@ If the user wants help with fixing an error in their CI pipeline, use the follow - Make sure that the problem is fixed by running the task that you passed into the `nx_cloud_fix_cipe_failure` tool + +## Effect-TS Pattern Discovery + +This project uses effect-smol as the canonical source for Effect patterns. + +| Skill | Description | Location | +| -------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------- | +| `effect-pattern-discovery` | Effect-TS patterns from effect-smol | [.agent/skills/effect-pattern-discovery](.agent/skills/effect-pattern-discovery/SKILL.md) | + +**Reference Directory**: `.effect-reference/` contains the effect-smol source code mounted as a git worktree. diff --git a/migration-prisma-v4.md b/migration-prisma-v4.md new file mode 100644 index 00000000..a58b4361 --- /dev/null +++ b/migration-prisma-v4.md @@ -0,0 +1,60 @@ +--- +title: "PRD: Migración de packages/prisma a Effect v4 (Beta)" +type: "Product Requirements Document" +status: "In Progress" +epic: "Effect-ts v4 Monorepo Upgrade" +target_branch: "migration-prisma-v4" +base_branch: "dev" +--- + +# PRD: Migración del Generador Prisma a Effect v4 (Beta) + +## 1. Visión General + +El objetivo de este documento es definir los requerimientos para completar la migración del paquete `packages/prisma` a la versión **v4 (Beta)** de `effect`. Este es el último paquete del monorepo pendiente de actualización. La migración abarca el CLI, los servicios subyacentes (específicamente `generator-service.ts`), y la refactorización de los templates para asegurar que el código generado emita sintaxis válida y moderna de Effect v4. + +## 2. Contexto Técnico y Herramientas de IA + +- **Worktree Skill Activo:** El agente de IA cuenta con la habilidad de consultar el directorio `.effect-reference` (un git worktree local apuntando a `effect-smol` / `effect` v4 con `--depth 1`). +- **Fuentes de Verdad:** - `MIGRATION.md` interno de la librería. + - Patrones arquitectónicos actuales encontrados directamente en el código fuente del worktree. +- **Estado Actual:** El CLI y los servicios base están parcialmente migrados. Existe un bloqueante crítico de inyección de dependencias / manejo de errores en el `make` de `/packages/prisma/src/services/generator-service.ts`. + +## 3. Estrategia de Ramas y Soporte Técnico + +| Rama Objetivo | Versión de Effect | Propósito | +| :-------------------- | :---------------- | :------------------------------------------------------------------------------------------- | +| `main` | **v3 (Stable)** | Producción. Sin cambios, mantiene soporte legacy hasta el release estable de v4. | +| `dev` | **v4 (Beta)** | Integración. Soporte exclusivo para la versión 4 beta; rama base para las features actuales. | +| `migration-prisma-v4` | **v4 (Beta)** | Feature branch actual. Todo el trabajo de este PRD ocurre y se integra aquí contra `dev`. | + +## 4. Requerimientos de Ejecución (Objetivos) + +### R1. Resolución Crítica: `generator-service.ts` + +- **Diagnóstico:** Analizar el historial de git y las diferencias (diff) en la rama actual respecto al estado anterior con Effect v3 para entender el comportamiento original. +- **Implementación:** Resolver el error actual en el `make` del servicio. Esto implica verificar la provisión de dependencias (`Layer.provide`, `Effect.provide`) y la gestión de errores (`Effect.catchAll`, tipado de errores en el canal `E`) bajo las nuevas firmas de la v4. +- **este es el error** Type 'Effect<{ generate: Effect; }, never, FileSystem | Path | RenderService | FormatterService>' is not assignable to type '((...args: never) => Effect<{ readonly generate: Effect; }, never, FileSystem | Path | RenderService | FormatterService>) | Effect<...> | undefined'. + Type 'Effect<{ generate: Effect; }, never, FileSystem | Path | RenderService | FormatterService>' is not assignable to type 'Effect<{ readonly generate: Effect; }, never, FileSystem | Path | RenderService | FormatterService>'. + Type '{ generate: Effect.Effect; }' is not assignable to type '{ readonly generate: Effect; }'. + Types of property 'generate' are incompatible. + Type 'Effect' is not assignable to type 'Effect'. + Type 'unknown' is not assignable to type 'GeneratorContext'. + +### R2. Actualización de Templates de Generación + +- **Refactorización de AST/Strings:** Modificar los templates de generación de código propios del paquete Prisma. +- **Output Esperado:** El código generado (clientes, repositorios o esquemas) debe ser 100% compatible con Effect v4, requiriendo validación contra la API actual expuesta en el worktree. + +### R3. Validación y Pruebas + +- **Stack de Pruebas:** El paquete contiene un entorno de pruebas y un caso de uso de ejemplo implementado con **SQLite**. +- **Criterio de Éxito:** La suite completa de pruebas debe ejecutarse y pasar exitosamente. Esto certifica que tanto la lógica interna del generador como el código resultante son válidos y estables. + +## 5. Directivas de Comportamiento para el Agente (LLM) + +> **Rol:** Actuar como un Senior Developer experto en programación funcional y en el ecosistema de Effect. +> +> 1. **Consulta Proactiva:** Ante cualquier duda sobre firmas de tipos (ej. constructores de `Layer`, manejo del `Context`), consulta proactivamente el worktree usando el skill configurado antes de adivinar. +> 2. **Cero Regresiones a v3:** El código propuesto no debe utilizar APIs deprecadas o legacy de la versión 3. +> 3. **Aislamiento de Entorno:** El directorio `.effect-reference` es estrictamente de solo lectura y no debe incluirse en ninguna propuesta de commit. diff --git a/packages/prisma/src/cli.ts b/packages/prisma/src/cli.ts index 412f7a3d..637899b1 100755 --- a/packages/prisma/src/cli.ts +++ b/packages/prisma/src/cli.ts @@ -15,12 +15,12 @@ const cli = Command.run(prismaCommand.pipe(Command.withSubcommands([initCommand] version: "0.1.0", }) -const GeneratorLayer = GeneratorService.Live.pipe( - Layer.provide(RenderService.Live), - Layer.provide(FormatterService.Live), +const GeneratorLayer = GeneratorService.layer.pipe( + Layer.provide(RenderService.layer), + Layer.provide(FormatterService.layer), Layer.provide(NodeServices.layer), ) -const MainLayer = Layer.mergeAll(GeneratorLayer, RenderService.Live, FormatterService.Live, NodeServices.layer) +const MainLayer = Layer.mergeAll(GeneratorLayer, RenderService.layer, FormatterService.layer, NodeServices.layer) cli.pipe(Effect.provide(MainLayer), NodeRuntime.runMain) diff --git a/packages/prisma/src/commands/prisma.ts b/packages/prisma/src/commands/prisma.ts index ab27e549..0e610f7f 100644 --- a/packages/prisma/src/commands/prisma.ts +++ b/packages/prisma/src/commands/prisma.ts @@ -1,3 +1,4 @@ +import * as Cause from "effect/Cause" import * as Command from "effect/unstable/cli/Command" import type * as NodeServices from "@effect/platform-node/NodeServices" import type { GeneratorOptions } from "@prisma/generator-helper" @@ -5,45 +6,68 @@ import generatorHelper from "@prisma/generator-helper" import * as Deferred from "effect/Deferred" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" +import * as Queue from "effect/Queue" import * as Stream from "effect/Stream" import { GeneratorContext } from "../services/generator-context.js" import { GeneratorService } from "../services/generator-service.js" import type { RenderService } from "../services/render-service.js" +// Pattern based on: .effect-reference/packages/platform-node-shared/src/NodeFileSystem.ts (watchNode) +// Stream.callback receives a queue, and we use Effect.runFork to execute effects from callbacks + export const prismaCommand = Command.make("prisma", {}, () => Effect.gen(function*() { const generator = yield* GeneratorService - const runtime = yield* Effect.services() + const runtime = yield* Effect.services< + GeneratorService | RenderService | NodeServices.NodeServices + >() const run = Effect.runForkWith(runtime) - const events = Stream.callback<[GeneratorOptions, Deferred.Deferred]>(Effect.fnUntraced(function*(emit) { - generatorHelper.generatorHandler({ - onManifest() { - return { - defaultOutput: "../generated/effect", - prettyName: "Prisma Effect Generator", - requiresEngines: [], - } - }, - async onGenerate(options) { - await run( - Effect.gen(function*() { - const deferred = yield* Deferred.make() - yield* Effect.promise(() => emit.single([options, deferred])) - yield* Deferred.await(deferred) - }), - ) - // Cerrar el stream después de procesar la generación - yield* emit. - }, - }) - })) + // Stream.callback pattern from v4 + // The callback receives a queue and must return an Effect for setup/cleanup + const events = Stream.callback< + [GeneratorOptions, Deferred.Deferred], + never + >((queue) => + Effect.acquireRelease( + Effect.sync(() => { + // Setup del generator handler de Prisma (sync callback) + generatorHelper.generatorHandler({ + onManifest() { + return { + defaultOutput: "../generated/effect", + prettyName: "Prisma Effect Generator", + requiresEngines: [], + } + }, + async onGenerate(options) { + // Use Effect.runFork to execute effects from async callback + // This maintains effect tracking while being called from external async code + run( + Effect.gen(function*() { + const deferred = yield* Deferred.make() + // Emit to stream via Queue.offer (v4 API) + yield* Queue.offer(queue, [options, deferred]) + // Wait for generator.generate to complete (Stream.runForEach will complete deferred) + yield* Deferred.await(deferred) + }), + ) + }, + }) + }), + // Cleanup - nothing to release for prisma generator + () => Effect.void, + ) + ) yield* events.pipe( - Stream.runForEach(([options]) => - generator.generate.pipe( - Effect.provide(Layer.succeed(GeneratorContext, options)) + Stream.runForEach((item) => { + const [options, deferred] = item + return generator.generate.pipe( + Effect.provide(Layer.succeed(GeneratorContext, options)), + Effect.flatMap(() => Deferred.complete(deferred, Effect.void)), + Effect.catchCause((cause: Cause.Cause) => Deferred.complete(deferred, Effect.failCause(cause))), ) - ), + }), ) })) diff --git a/packages/prisma/src/runtime/index.ts b/packages/prisma/src/runtime/index.ts index bab902bd..45dcdf2f 100644 --- a/packages/prisma/src/runtime/index.ts +++ b/packages/prisma/src/runtime/index.ts @@ -1,34 +1,26 @@ -import { Schema } from "effect" -import * as AST from "effect/SchemaAST" -import type { - ColumnType as KyselyColumnType, - Generated as KyselyGenerated, - Insertable as KyselyInsertable, - Selectable as KyselySelectable, - Updateable as KyselyUpdateable, -} from "kysely" - /** * Runtime helpers for Kysely schema integration - * These are imported by generated code * - * ## Type Extraction Patterns + * ## v4 Migration Note * - * For Effect Schemas (recommended - full type safety): - * ```typescript - * import { Selectable, Insertable, Updateable } from '@effectify/prisma'; - * import { User } from './generated/types'; + * This module provides branded types for ColumnType and Generated that work with + * Effect Schema v4. The runtime AST manipulation functions (columnType, generated, + * Selectable, Insertable, Updateable) have been simplified. * - * type UserSelect = Selectable; - * type UserInsert = Insertable; - * type UserUpdate = Updateable; - * ``` + * For full v4 Schema integration, consider using: + * import { Model } from "effect/unstable/schema" * - * Note: This package exports branded versions of ColumnType and Generated that - * are compatible with Effect Schema's type inference. These extend the base - * select type (S) while carrying phantom insert/update type information. + * which provides Model.Class, Model.Generated, etc. */ +import type { + ColumnType as KyselyColumnType, + Generated as KyselyGenerated, + Insertable as KyselyInsertable, + Selectable as KyselySelectable, + Updateable as KyselyUpdateable, +} from "kysely" + // Re-export Kysely's native type utilities with aliases for advanced use cases export type { KyselyColumnType, KyselyGenerated, KyselyInsertable, KyselySelectable, KyselyUpdateable } @@ -38,7 +30,9 @@ export const GeneratedId = Symbol.for("/GeneratedId") /** * Symbol for VariantMarker - used in mapped type pattern that survives declaration emit. */ -export const VariantTypeId: unique symbol = Symbol.for("@effectify/prisma/VariantType") +export const VariantTypeId: unique symbol = Symbol.for( + "@effectify/prisma/VariantType", +) export type VariantTypeId = typeof VariantTypeId // ============================================================================ @@ -75,8 +69,7 @@ export interface VariantMarker { * * This replaces Kysely's ColumnType because: * 1. Kysely's ColumnType = { __select__: S, __insert__: I, __update__: U } is NOT a subtype of S - * 2. Schema.make>(ast) doesn't work because AST represents S, not the struct - * 3. Our ColumnType = S & Brand IS a subtype of S, so Schema.make works correctly + * 2. Our ColumnType = S & Brand IS a subtype of S, so Schema.make works correctly * * Includes Kysely's phantom properties (__select__, __insert__, __update__) so that: * 1. Kysely recognizes this as a ColumnType for INSERT/UPDATE operations @@ -146,273 +139,6 @@ export type Generated = GeneratedBrand & { readonly __update__: T } -// ============================================================================ -// Runtime Annotation Schemas -// ============================================================================ - -interface ColumnTypeSchemas { - selectSchema: Schema.Schema - insertSchema: Schema.Schema - updateSchema: Schema.Schema -} - -/** - * Interface for ColumnType schema - preserves type parameters in declaration emit. - * - * Named interfaces with type parameters are preserved by TypeScript in declaration files, - * unlike anonymous intersection types which may be simplified. - * - * This follows the Schema.brand pattern from Effect which returns a named interface. - */ -export interface ColumnTypeSchema extends - Schema.Schema< - ColumnType, IType, UType>, - ColumnType, IType, UType>, - Schema.Schema.Context - > -{ - /** The original select schema */ - readonly selectSchema: S -} - -/** - * Mark a field as having different types for select/insert/update - * Used for ID fields with @default (read-only) - * - * The insert/update schemas are stored in annotations and used at runtime - * to determine which fields to include in Insertable/Updateable schemas. - * - * Returns a ColumnTypeSchema which: - * 1. Is a named interface (preserved in declaration emit) - * 2. Contains the ColumnType brand with Kysely phantom properties - * 3. Includes the original schema via `selectSchema` property - * - * This enables Kysely to recognize fields with `__insert__: never` and omit them from INSERT. - */ -export const columnType = ( - selectSchema: Schema.Schema, - insertSchema: Schema.Schema, - updateSchema: Schema.Schema, -) => { - const schemas: ColumnTypeSchemas = { - selectSchema, - insertSchema, - updateSchema, - } - // Return annotated schema with ColumnType brand at type level - // The runtime annotation enables filtering in Insertable() function - // The type-level brand enables Kysely to recognize INSERT/UPDATE constraints - const annotated = selectSchema.annotations({ [ColumnTypeId]: schemas }) - return Object.assign(annotated, { selectSchema }) as ColumnTypeSchema< - Schema.Schema, - IType, - UType - > -} - -/** - * Interface for Generated schema - preserves type parameter in declaration emit. - * - * Named interfaces with type parameters are preserved by TypeScript in declaration files, - * unlike anonymous intersection types which may be simplified. - * - * This follows the Schema.brand pattern from Effect which returns a named interface. - */ -export interface GeneratedSchema extends - Schema.Schema< - Generated>, - Generated>, - Schema.Schema.Context - > -{ - /** The original schema before Generated wrapper */ - readonly from: S -} - -/** - * Mark a field as database-generated (omitted from insert) - * Used for fields with @default - * - * Follows @effect/sql Model.Generated pattern: - * - Present in select and update schemas - * - OMITTED from insert schema (not optional, completely absent) - * - * Returns a GeneratedSchema which: - * 1. Is a named interface (preserved in declaration emit) - * 2. Contains the Generated brand using VariantMarker (mapped types survive emit) - * 3. Includes the original schema via `from` property - * - * This enables CustomInsertable to filter out generated fields at compile time. - */ -export const generated = (schema: S) => { - // Return annotated schema with Generated brand at type level - // The runtime annotation enables filtering in Insertable() function - // The type-level brand enables filtering in CustomInsertable type utility - const annotated = schema.annotations({ [GeneratedId]: true }) - return Object.assign(annotated, { from: schema }) as GeneratedSchema -} - -// ============================================================================ -// Type Helpers (defined early for use in schema functions) -// ============================================================================ - -type AnyColumnTypeSchemas = ColumnTypeSchemas< - unknown, - unknown, - unknown, - unknown, - unknown, - unknown, - unknown, - unknown, - unknown -> - -/** - * Schema for validating column type annotations structure - */ -const ColumnTypeSchemasValidator = Schema.Struct({ - selectSchema: Schema.Any, - insertSchema: Schema.Any, - updateSchema: Schema.Any, -}) - -/** - * Extract and validate column type schemas from AST annotations - * Returns null if not a column type or validation fails - */ -function getColumnTypeSchemas(ast: AST.AST) { - if (!(ColumnTypeId in ast.annotations)) { - return null - } - - const annotation = ast.annotations[ColumnTypeId] - const decoded = Schema.decodeUnknownOption(ColumnTypeSchemasValidator)(annotation) - - if (decoded._tag === "None") { - return null - } - - // The decoded value has the correct structure, and the annotation - // was created by columnType() which ensures proper Schema types - return annotation as AnyColumnTypeSchemas -} - -const isGeneratedType = (ast: AST.AST) => GeneratedId in ast.annotations - -const isOptionalType = (ast: AST.AST) => { - // Check for Union(T, Undefined) or Union(T, null) patterns - // These are optional on insert because omitting = NULL in DB - if (!AST.isUnion(ast)) { - return false - } - - return ( - ast.types.some((t: AST.AST) => AST.isUndefinedKeyword(t)) || - ast.types.some((t: AST.AST) => isNullType(t)) - ) -} - -const isNullType = (ast: AST.AST) => - AST.isLiteral(ast) && - Object.entries(ast.annotations).find( - ([sym, value]) => sym === AST.IdentifierAnnotationId.toString() && value === "null", - ) - -/** - * Strip null from a union type for Insertable fields. - * For INSERT operations, omitting a field = null in DB, so we don't need explicit null. - * Returns the non-null type if it's a union with null, otherwise returns the original type. - */ -const stripNullFromUnion = (ast: AST.AST): AST.AST => { - if (!AST.isUnion(ast)) { - return ast - } - - // Filter out null types from the union - const nonNullTypes = ast.types.filter((t: AST.AST) => !isNullType(t)) - - // If only one type remains, return it directly (unwrap single-element union) - if (nonNullTypes.length === 1) { - return nonNullTypes[0] - } - - // If multiple types remain, create a new union without null - if (nonNullTypes.length > 1) { - return AST.Union.make(nonNullTypes) - } - - // Edge case: all types were null (shouldn't happen in practice) - return ast -} - -const extractParametersFromTypeLiteral = ( - ast: AST.TypeLiteral, - schemaType: keyof AnyColumnTypeSchemas, -) => { - return ast.propertySignatures - .map((prop: AST.PropertySignature) => { - const columnSchemas = getColumnTypeSchemas(prop.type) - - if (columnSchemas !== null) { - const targetSchema = columnSchemas[schemaType] - - // Check for Schema.Never BEFORE mutable transformation - // Schema.mutable() wraps in Transformation node, changing _tag - if (AST.isNeverKeyword(targetSchema.ast)) { - return null // Will be filtered out - } - - // Use Schema.mutable() for insert/update schema to make arrays mutable - // Kysely expects mutable T[] for insert/update operations - const shouldBeMutable = schemaType === "updateSchema" || schemaType === "insertSchema" - return new AST.PropertySignature( - prop.name, - shouldBeMutable ? Schema.mutable(targetSchema).ast : targetSchema.ast, - prop.isOptional, - prop.isReadonly, - prop.annotations, - ) - } - - // Handle Generated fields for Selectable - need to unwrap the base type - // Generated annotates the schema but we want plain T for select - if (schemaType === "selectSchema" && isGeneratedType(prop.type)) { - // Generated fields have the base schema stored in annotations - // The AST is the annotated version of the base schema, so just strip annotations - // Get the underlying type by removing the Generated annotation - const baseAst = AST.annotations(prop.type, { - ...prop.type.annotations, - [GeneratedId]: undefined, - [ColumnTypeId]: undefined, - }) - return new AST.PropertySignature( - prop.name, - baseAst, - prop.isOptional, - prop.isReadonly, - prop.annotations, - ) - } - - // Apply Schema.mutable() to regular fields for insert/updateSchema to make arrays mutable - // Safe for all types - no-op for non-arrays - if (schemaType === "updateSchema" || schemaType === "insertSchema") { - return new AST.PropertySignature( - prop.name, - Schema.mutable(Schema.asSchema(Schema.make(prop.type))).ast, - prop.isOptional, - prop.isReadonly, - prop.annotations, - ) - } - - // Regular fields - return as-is - return prop - }) - .filter((prop): prop is AST.PropertySignature => prop !== null) -} - // ============================================================================ // Custom Type Utilities for Insert/Update // ============================================================================ @@ -494,12 +220,15 @@ type CustomInsertable = * Custom Updateable type that properly omits fields with `never` update types. */ type CustomUpdateable = { - [K in keyof T as ExtractUpdateType extends never ? never : K]?: ExtractUpdateType + [ + K in keyof T as ExtractUpdateType extends never ? never + : K + ]?: ExtractUpdateType } -// Legacy aliases for backwards compatibility -type MutableInsert = CustomInsertable -type MutableUpdate = CustomUpdateable +// Legacy aliases for backwards compatibility (exported for external use) +export type MutableInsert = CustomInsertable +export type MutableUpdate = CustomUpdateable // ============================================================================ // Stripping Type Utilities (needed for Selectable function return type) @@ -538,139 +267,9 @@ type StripKyselyWrappersFromObject = { readonly [K in keyof T]: StripKyselyWrapper } -// ============================================================================ -// Schema Functions -// ============================================================================ - -export function Selectable( - schema: Schema.Schema, -): Schema.Schema< - StripKyselyWrappersFromObject, - StripKyselyWrappersFromObject, - never -> { - // Strip Generated/ColumnType wrappers to match what Kysely returns from queries - // Branded foreign keys (UserId, ProductId) are preserved - const { ast } = schema - if (!AST.isTypeLiteral(ast)) { - // Non-struct schemas: use as identity - // Internal cast needed because Schema.make(ast) returns unknown types - // The return type annotation is what TypeScript uses for declaration emit - return Schema.asSchema(Schema.make(ast)) as Schema.Schema< - StripKyselyWrappersFromObject, - StripKyselyWrappersFromObject, - never - > - } - // Extract select schemas from annotated fields (strips wrappers at runtime) - return Schema.asSchema( - Schema.make( - new AST.TypeLiteral( - extractParametersFromTypeLiteral(ast, "selectSchema"), - ast.indexSignatures, - ast.annotations, - ), - ), - ) as Schema.Schema< - StripKyselyWrappersFromObject, - StripKyselyWrappersFromObject, - never - > -} - -/** - * Create Insertable schema from base schema - * Generated fields (@default) are made optional, not excluded - */ -export function Insertable(schema: Schema.Schema) { - const { ast } = schema - if (!AST.isTypeLiteral(ast)) { - // Internal cast - return type annotation is what TypeScript uses for declaration emit - return Schema.asSchema(Schema.make(ast)) as Schema.Schema< - MutableInsert, - MutableInsert, - never - > - } - - const extracted = extractParametersFromTypeLiteral(ast, "insertSchema") - - const fields = extracted.map((prop) => { - // Check if this is a Generated field - make it optional - const isGenerated = isGeneratedType(prop.type) - - // Make Union(T, null) fields optional and strip null from the type - // For INSERT, omitting a field = null in DB, so explicit null is unnecessary - const isOptional = isOptionalType(prop.type) || isGenerated - - // For generated fields, unwrap the base type from the Generated annotation - let fieldType = prop.type - if (isGenerated) { - // Strip the Generated annotation to get the base type - fieldType = AST.annotations(prop.type, { - ...prop.type.annotations, - [GeneratedId]: undefined, - }) - } else if (isOptionalType(prop.type)) { - fieldType = stripNullFromUnion(prop.type) - } - - return new AST.PropertySignature( - prop.name, - fieldType, - isOptional, - prop.isReadonly, - prop.annotations, - ) - }) - - return Schema.asSchema( - Schema.make(new AST.TypeLiteral(fields, ast.indexSignatures, ast.annotations)), - ) as Schema.Schema, MutableInsert, never> -} - -/** - * Create Updateable schema from base schema - */ -export function Updateable(schema: Schema.Schema) { - const { ast } = schema - if (!AST.isTypeLiteral(ast)) { - // Internal cast - return type annotation is what TypeScript uses for declaration emit - return Schema.asSchema(Schema.make(ast)) as Schema.Schema< - MutableUpdate, - MutableUpdate, - never - > - } - - const extracted = extractParametersFromTypeLiteral(ast, "updateSchema") - - const res = new AST.TypeLiteral( - extracted.map( - (prop) => - new AST.PropertySignature( - prop.name, - AST.Union.make([prop.type, new AST.UndefinedKeyword()]), - true, - prop.isReadonly, - prop.annotations, - ), - ), - ast.indexSignatures, - ast.annotations, - ) - - return Schema.asSchema(Schema.make(res)) as Schema.Schema< - MutableUpdate, - MutableUpdate, - never - > -} - // ============================================================================ // Type Utilities (Work directly with Schema types) // Usage: Selectable, Insertable, Updateable -// Note: Stripping types are defined earlier in the file (before schema functions) // ============================================================================ /** @@ -699,3 +298,27 @@ export type Insertable = CustomInsertable * @example type UserUpdate = Updateable; */ export type Updateable = CustomUpdateable + +// ============================================================================ +// Schema Helpers for v4 +// ============================================================================ +// Note: The runtime schema manipulation functions have been removed. +// For full Effect Schema v4 integration with select/insert/update variants, +// use the Model system: import { Model } from "effect/unstable/schema" +// +// Example usage with Model: +// +// import { Schema } from "effect" +// import { Model } from "effect/unstable/schema" +// +// export const UserId = Schema.Number.pipe(Schema.brand("UserId")) +// +// export class User extends Model.Class("User")({ +// id: Model.Generated(UserId), +// name: Schema.String, +// createdAt: Model.DateTimeInsertFromDate, +// }) {} +// +// User // Select schema +// User.insert // Insert schema +// User.update // Update schema diff --git a/packages/prisma/src/schema-generator/index.ts b/packages/prisma/src/schema-generator/index.ts index eff0139f..8fe0c7ee 100644 --- a/packages/prisma/src/schema-generator/index.ts +++ b/packages/prisma/src/schema-generator/index.ts @@ -1,5 +1,5 @@ -import * as FileSystem from "@effect/platform/FileSystem" -import * as Path from "@effect/platform/Path" +import * as FileSystem from "effect/FileSystem" +import * as Path from "effect/Path" import type { DMMF } from "@prisma/generator-helper" import * as Effect from "effect/Effect" import { RenderService } from "../services/render-service.js" @@ -87,8 +87,14 @@ export const generateSchemas = (dmmf: DMMF.Document, outputDir: string) => } // DB Interface - const dbInterfaceData = KyselyGenerator.prepareDBInterfaceData(models, joinTables) - const dbInterfaceContent = yield* render("kysely-db-interface", dbInterfaceData) + const dbInterfaceData = KyselyGenerator.prepareDBInterfaceData( + models, + joinTables, + ) + const dbInterfaceContent = yield* render( + "kysely-db-interface", + dbInterfaceData, + ) content += `\n\n${dbInterfaceContent}` yield* writeFile("types.ts", content) diff --git a/packages/prisma/src/services/generator-service.ts b/packages/prisma/src/services/generator-service.ts index 25a06d9e..af071c5b 100644 --- a/packages/prisma/src/services/generator-service.ts +++ b/packages/prisma/src/services/generator-service.ts @@ -10,169 +10,213 @@ import { FormatterService } from "./formatter-service.js" import { generateSchemas } from "../schema-generator/index.js" import * as ServiceMap from "effect/ServiceMap" - -export class GeneratorService extends ServiceMap.Service - }>()("GeneratorService", { - make: Effect.gen(function*() { - const fs = yield* FileSystem.FileSystem - const path = yield* Path.Path - const renderService = yield* RenderService - const formatterService = yield* FormatterService - const { render } = renderService - const { format } = formatterService - - const parseErrorImportPath = ( - errorImportPath: string | undefined, - ): { path: string; className: string } | null => { - if (!errorImportPath) { - return null - } - const [modulePath, className] = errorImportPath.split("#") - if (!(modulePath && className)) { - throw new Error( - `Invalid errorImportPath format: "${errorImportPath}". Expected "path/to/module#ErrorClassName"`, - ) - } - return { path: modulePath, className } +export class GeneratorService extends ServiceMap.Service< + GeneratorService, + { + readonly generate: Effect.Effect + } +>()("GeneratorService", { + make: Effect.gen(function*() { + const fs = yield* FileSystem.FileSystem + const path = yield* Path.Path + const renderService = yield* RenderService + const formatterService = yield* FormatterService + const { render } = renderService + const { format } = formatterService + + const parseErrorImportPath = ( + errorImportPath: string | undefined, + ): { path: string; className: string } | null => { + if (!errorImportPath) { + return null } - - const addExtension = (filePath: string, extension: string): string => { - if (!extension) { - return filePath - } - const ext = path.extname(filePath) - if (ext) { - return filePath - } - return `${filePath}.${extension}` + const [modulePath, className] = errorImportPath.split("#") + if (!(modulePath && className)) { + throw new Error( + `Invalid errorImportPath format: "${errorImportPath}". Expected "path/to/module#ErrorClassName"`, + ) } + return { path: modulePath, className } + } - const getClientImportPath = (config: GeneratorOptions["generator"]["config"]) => - Array.isArray(config.clientImportPath) - ? config.clientImportPath[0] - : (config.clientImportPath ?? "@prisma/client") - - const getErrorImportPath = (config: GeneratorOptions["generator"]["config"]) => - Array.isArray(config.errorImportPath) ? config.errorImportPath[0] : config.errorImportPath - - const getImportFileExtension = (config: GeneratorOptions["generator"]["config"]) => - Array.isArray(config.importFileExtension) ? config.importFileExtension[0] : (config.importFileExtension ?? "") - - const getCustomError = ( - config: GeneratorOptions["generator"]["config"], - options: GeneratorOptions, - schemaDir: string, - ) => { - const errorImportPathRaw = getErrorImportPath(config) - const importFileExtension = getImportFileExtension(config) - - let customError = parseErrorImportPath(errorImportPathRaw) - - if (customError?.path.startsWith(".")) { - const outputDir = options.generator.output?.value - if (outputDir) { - const absoluteErrorPath = path.resolve(schemaDir, customError.path) - const relativeToOutput = path.relative(outputDir, absoluteErrorPath) - const normalizedPath = relativeToOutput.startsWith(".") ? relativeToOutput : `./${relativeToOutput}` - const pathWithExtension = addExtension(normalizedPath, importFileExtension) - customError = { ...customError, path: pathWithExtension } - } - } - return customError + const addExtension = (filePath: string, extension: string): string => { + if (!extension) { + return filePath } - - const getGeneratorConfig = (options: GeneratorOptions, schemaDir: string) => { - const { config } = options.generator - const clientImportPath = getClientImportPath(config) - const customError = getCustomError(config, options, schemaDir) - - return { clientImportPath, customError } + const ext = path.extname(filePath) + if (ext) { + return filePath } + return `${filePath}.${extension}` + } + + const getClientImportPath = ( + config: GeneratorOptions["generator"]["config"], + ) => + Array.isArray(config.clientImportPath) + ? config.clientImportPath[0] + : config.clientImportPath ?? "@prisma/client" + + const getErrorImportPath = ( + config: GeneratorOptions["generator"]["config"], + ) => + Array.isArray(config.errorImportPath) + ? config.errorImportPath[0] + : config.errorImportPath + + const getImportFileExtension = ( + config: GeneratorOptions["generator"]["config"], + ) => + Array.isArray(config.importFileExtension) + ? config.importFileExtension[0] + : config.importFileExtension ?? "" + + const getCustomError = ( + config: GeneratorOptions["generator"]["config"], + options: GeneratorOptions, + schemaDir: string, + ) => { + const errorImportPathRaw = getErrorImportPath(config) + const importFileExtension = getImportFileExtension(config) + + let customError = parseErrorImportPath(errorImportPathRaw) + + if (customError?.path.startsWith(".")) { + const outputDir = options.generator.output?.value + if (outputDir) { + const absoluteErrorPath = path.resolve(schemaDir, customError.path) + const relativeToOutput = path.relative(outputDir, absoluteErrorPath) + const normalizedPath = relativeToOutput.startsWith(".") + ? relativeToOutput + : `./${relativeToOutput}` + const pathWithExtension = addExtension( + normalizedPath, + importFileExtension, + ) + customError = { ...customError, path: pathWithExtension } + } + } + return customError + } + + const getGeneratorConfig = ( + options: GeneratorOptions, + schemaDir: string, + ) => { + const { config } = options.generator + const clientImportPath = getClientImportPath(config) + const customError = getCustomError(config, options, schemaDir) + + return { clientImportPath, customError } + } + + const generatePrismaSchema = (outputDir: string) => + Effect.gen(function*() { + const content = yield* render("prisma-schema", {}) + const formatted = yield* format(content) + yield* fs.writeFileString( + path.join(outputDir, "prisma-schema.ts"), + formatted, + ) + }) - const generatePrismaSchema = (outputDir: string) => - Effect.gen(function*() { - const content = yield* render("prisma-schema", {}) - const formatted = yield* format(content) - yield* fs.writeFileString(path.join(outputDir, "prisma-schema.ts"), formatted) - }) - - const generatePrismaRepository = (outputDir: string, clientImportPath: string) => - Effect.gen(function*() { - const content = yield* render("prisma-repository", { clientImportPath }) - const formatted = yield* format(content) - yield* fs.writeFileString(path.join(outputDir, "prisma-repository.ts"), formatted) + const generatePrismaRepository = ( + outputDir: string, + clientImportPath: string, + ) => + Effect.gen(function*() { + const content = yield* render("prisma-repository", { + clientImportPath, }) + const formatted = yield* format(content) + yield* fs.writeFileString( + path.join(outputDir, "prisma-repository.ts"), + formatted, + ) + }) - const generateModels = (outputDir: string, models: readonly DMMF.Model[]) => - Effect.gen(function*() { - yield* fs.makeDirectory(path.join(outputDir, "models"), { recursive: true }) - for (const model of models) { - const content = yield* render("model", { model }) - const formatted = yield* format(content) - yield* fs.writeFileString(path.join(outputDir, "models", `${model.name}.ts`), formatted) - } + const generateModels = (outputDir: string, models: readonly DMMF.Model[]) => + Effect.gen(function*() { + yield* fs.makeDirectory(path.join(outputDir, "models"), { + recursive: true, }) - - const generateIndex = ( - outputDir: string, - models: readonly DMMF.Model[], - clientImportPath: string, - customError: { path: string; className: string } | null, - ) => - Effect.gen(function*() { - const errorType = customError ? customError.className : "PrismaError" - const rawSqlOperations = yield* render("prisma-raw-sql", { errorType }) - const modelExports = models.map((m) => `export * from "./models/${m.name}.js"`).join("\n") - - const templateName = customError ? "index-custom-error" : "index-default" - const content = yield* render(templateName, { - clientImportPath, - customError, - rawSqlOperations, - modelExports, - }) - + for (const model of models) { + const content = yield* render("model", { model }) const formatted = yield* format(content) - yield* fs.writeFileString(path.join(outputDir, "index.ts"), formatted) - }) - - const generate = Effect.gen(function*() { - const options = yield* GeneratorContext - const models = options.dmmf.datamodel.models - const outputDir = options.generator.output?.value - const schemaDir = path.dirname(options.schemaPath) - - if (!outputDir) { - return yield* Effect.fail(new Error("No output directory specified")) + yield* fs.writeFileString( + path.join(outputDir, "models", `${model.name}.ts`), + formatted, + ) } + }) - const { clientImportPath, customError } = getGeneratorConfig(options, schemaDir) - - yield* fs.makeDirectory(outputDir, { recursive: true }) - - // Generate Effect/Kysely Schemas (enums.ts, types.ts, schemas/index.ts) - const schemasDir = path.join(outputDir, "schemas") - yield* generateSchemas(options.dmmf, schemasDir).pipe( - Effect.provideService(FileSystem.FileSystem, fs), - Effect.provideService(Path.Path, path), - Effect.provideService(RenderService, renderService), - Effect.provideService(FormatterService, formatterService), - ) + const generateIndex = ( + outputDir: string, + models: readonly DMMF.Model[], + clientImportPath: string, + customError: { path: string; className: string } | null, + ) => + Effect.gen(function*() { + const errorType = customError ? customError.className : "PrismaError" + const rawSqlOperations = yield* render("prisma-raw-sql", { errorType }) + const modelExports = models + .map((m) => `export * from "./models/${m.name}.js"`) + .join("\n") + + const templateName = customError + ? "index-custom-error" + : "index-default" + const content = yield* render(templateName, { + clientImportPath, + customError, + rawSqlOperations, + modelExports, + }) - yield* generatePrismaSchema(outputDir) - yield* generatePrismaRepository(outputDir, clientImportPath) - yield* generateModels(outputDir, models) - yield* generateIndex(outputDir, models, clientImportPath, customError) + const formatted = yield* format(content) + yield* fs.writeFileString(path.join(outputDir, "index.ts"), formatted) }) - return { generate } - }), - }) { + const generate = Effect.gen(function*() { + const options = yield* GeneratorContext + const models = options.dmmf.datamodel.models + const outputDir = options.generator.output?.value + const schemaDir = path.dirname(options.schemaPath) + + if (!outputDir) { + return yield* Effect.fail(new Error("No output directory specified")) + } + const { clientImportPath, customError } = getGeneratorConfig( + options, + schemaDir, + ) + + yield* fs.makeDirectory(outputDir, { recursive: true }) + + // Generate Effect/Kysely Schemas (enums.ts, types.ts, schemas/index.ts) + const schemasDir = path.join(outputDir, "schemas") + yield* generateSchemas(options.dmmf, schemasDir).pipe( + Effect.provideService(FileSystem.FileSystem, fs), + Effect.provideService(Path.Path, path), + Effect.provideService(RenderService, renderService), + Effect.provideService(FormatterService, formatterService), + ) + + yield* generatePrismaSchema(outputDir) + yield* generatePrismaRepository(outputDir, clientImportPath) + yield* generateModels(outputDir, models) + yield* generateIndex(outputDir, models, clientImportPath, customError) + }).pipe( + // Convert errors to defects to match the declared `never` error type + Effect.catch((error) => Effect.die(error)), + ) + + return { generate } + }), +}) { static readonly layer = Layer.effect(GeneratorService, this.make).pipe( Layer.provide(RenderService.layer), Layer.provide(FormatterService.layer), ) - -} \ No newline at end of file +} diff --git a/packages/prisma/src/templates/index-custom-error.eta b/packages/prisma/src/templates/index-custom-error.eta index a8bae72f..03442fac 100644 --- a/packages/prisma/src/templates/index-custom-error.eta +++ b/packages/prisma/src/templates/index-custom-error.eta @@ -1,7 +1,7 @@ // This file was generated by prisma-effect-generator, do not edit manually. -import { Context, Effect, Exit, Layer } from "effect" -import { Service } from "effect/Effect" +import { Effect, Exit, Layer } from "effect" +import * as ServiceMap from "effect/ServiceMap" import { Prisma as PrismaNamespace, PrismaClient as BasePrismaClient } from "<%= it.clientImportPath %>" import { <%= it.customError.className %>, mapPrismaError } from "<%= it.customError.path %>" import * as Model from "./prisma-repository.js" @@ -23,16 +23,16 @@ type TransactionOptions = { } /** - * Context tag for the Prisma client instance. + * Service tag for the Prisma client instance. * Holds the transaction client (tx) and root client. */ -export class PrismaClient extends Context.Tag("PrismaClient")< +export class PrismaClient extends ServiceMap.Service< PrismaClient, { tx: BasePrismaClient | PrismaNamespace.TransactionClient client: BasePrismaClient } ->() { +>()("PrismaClient") { static layer = ( ...args: ConstructorParameters ) => Layer.scoped( @@ -114,8 +114,8 @@ const $begin = ( * The main Prisma service with all database operations. * Provides type-safe, effectful access to your Prisma models. */ -export class Prisma extends Service()("Prisma", { - effect: Effect.gen(function* () { +export class Prisma extends ServiceMap.Service()("Prisma", { + make: Effect.gen(function* () { return { $transaction: ( effect: Effect.Effect, @@ -169,11 +169,11 @@ export class Prisma extends Service()("Prisma", { }) { static layer = ( ...args: ConstructorParameters - ) => Layer.merge(PrismaClient.layer(...args), Prisma.Default) + ) => Layer.merge(PrismaClient.layer(...args), Layer.effect(this, this.make)) static layerEffect = ( optionsEffect: Effect.Effect[0], E, R> - ) => Layer.merge(PrismaClient.layerEffect(optionsEffect), Prisma.Default) + ) => Layer.merge(PrismaClient.layerEffect(optionsEffect), Layer.effect(this, this.make)) } diff --git a/packages/prisma/src/templates/index-default.eta b/packages/prisma/src/templates/index-default.eta index dcc2429e..ace3a23b 100644 --- a/packages/prisma/src/templates/index-default.eta +++ b/packages/prisma/src/templates/index-default.eta @@ -1,7 +1,7 @@ // This file was generated by prisma-effect-generator, do not edit manually. -import { Context, Data, Effect, Exit, Layer } from "effect" -import { Service } from "effect/Effect" +import { Data, Effect, Exit, Layer } from "effect" +import * as ServiceMap from "effect/ServiceMap" import { Prisma as PrismaNamespace, PrismaClient as BasePrismaClient } from "<%= it.clientImportPath %>" // Symbol used to identify intentional rollbacks vs actual errors @@ -21,16 +21,16 @@ type TransactionOptions = { } /** - * Context tag for the Prisma client instance. + * Service tag for the Prisma client instance. * Holds the transaction client (tx) and root client. */ -export class PrismaClient extends Context.Tag("PrismaClient")< +export class PrismaClient extends ServiceMap.Service< PrismaClient, { tx: BasePrismaClient | PrismaNamespace.TransactionClient client: BasePrismaClient } ->() { +>()("PrismaClient") { static layer = ( ...args: ConstructorParameters ) => Layer.scoped( @@ -288,8 +288,8 @@ const $begin = ( * The main Prisma service with all database operations. * Provides type-safe, effectful access to your Prisma models. */ -export class Prisma extends Service()("Prisma", { - effect: Effect.gen(function* () { +export class Prisma extends ServiceMap.Service()("Prisma", { + make: Effect.gen(function* () { return { $transaction: ( effect: Effect.Effect, @@ -343,11 +343,11 @@ export class Prisma extends Service()("Prisma", { }) { static layer = ( ...args: ConstructorParameters - ) => Layer.merge(PrismaClient.layer(...args), Prisma.Default) + ) => Layer.merge(PrismaClient.layer(...args), Layer.effect(this, this.make)) static layerEffect = ( optionsEffect: Effect.Effect[0], E, R> - ) => Layer.merge(PrismaClient.layerEffect(optionsEffect), Prisma.Default) + ) => Layer.merge(PrismaClient.layerEffect(optionsEffect), Layer.effect(this, this.make)) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e57f8ff..045033b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,8 +28,8 @@ catalogs: specifier: 0.8.9 version: 0.8.9 '@effect/experimental': - specifier: 0.58.0 - version: 0.58.0 + specifier: 0.59.0 + version: 0.59.0 '@effect/language-service': specifier: 0.56.0 version: 0.56.0 @@ -37,8 +37,8 @@ catalogs: specifier: 4.0.0-beta.33 version: 4.0.0-beta.33 '@effect/vitest': - specifier: 0.27.0 - version: 0.27.0 + specifier: 4.0.0-beta.33 + version: 4.0.0-beta.33 '@kobalte/core': specifier: 0.13.11 version: 0.13.11 @@ -125,7 +125,7 @@ catalogs: version: 5.90.10 '@tanstack/router-plugin': specifier: ^1.133.21 - version: 1.166.12 + version: 1.167.1 '@tanstack/solid-form': specifier: 1.25.0 version: 1.25.0 @@ -134,16 +134,16 @@ catalogs: version: 5.90.23 '@tanstack/solid-router': specifier: ^1.133.20 - version: 1.167.3 + version: 1.168.1 '@tanstack/solid-router-devtools': specifier: ^1.133.20 - version: 1.166.9 + version: 1.166.10 '@tanstack/solid-router-ssr-query': specifier: ^1.132.25 - version: 1.166.9 + version: 1.166.10 '@tanstack/solid-start': specifier: ^1.132.25 - version: 1.166.14 + version: 1.167.1 '@types/better-sqlite3': specifier: 7.6.13 version: 7.6.13 @@ -313,7 +313,7 @@ importers: dependencies: '@effect/experimental': specifier: 'catalog:' - version: 0.58.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.0) + version: 0.59.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.1) '@prisma/client': specifier: 'catalog:' version: 7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.8.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3) @@ -350,19 +350,19 @@ importers: version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) '@nx/react': specifier: 'catalog:' - version: 22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) '@nx/vite': specifier: 'catalog:' - version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) '@nx/vitest': specifier: 22.5.4 - version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) '@nx/web': specifier: 'catalog:' version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) '@react-router/dev': specifier: 'catalog:' - version: 7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + version: 7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) '@swc-node/register': specifier: 'catalog:' version: 1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3) @@ -383,7 +383,7 @@ importers: version: 19.1.9(@types/react@19.1.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.1(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.1(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/ui': specifier: 'catalog:' version: 4.0.9(vitest@4.0.9) @@ -425,43 +425,43 @@ importers: version: 5.9.3 ultracite: specifier: 'catalog:' - version: 6.3.6(effect@4.0.0-beta.33)(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3)) + version: 6.3.6(effect@4.0.0-beta.33)(typescript@5.9.3)(valibot@1.3.1(typescript@5.9.3)) verdaccio: specifier: 'catalog:' version: 6.2.2(encoding@0.1.13)(typanion@3.14.0) vite: specifier: 'catalog:' - version: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: 'catalog:' - version: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) apps/docs: dependencies: '@astrojs/starlight': specifier: 'catalog:' - version: 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + version: 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) '@astrojs/starlight-tailwind': specifier: 'catalog:' - version: 4.0.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(tailwindcss@4.1.18) + version: 4.0.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(tailwindcss@4.1.18) '@tailwindcss/vite': specifier: 'catalog:' - version: 4.1.18(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.18(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) astro: specifier: 'catalog:' - version: 5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) sharp: specifier: 'catalog:' version: 0.34.5 starlight-sidebar-topics: specifier: 'catalog:' - version: 0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + version: 0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) starlight-sidebar-topics-dropdown: specifier: 'catalog:' - version: 0.5.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))) + version: 0.5.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))) starlight-theme-nova: specifier: 'catalog:' - version: 0.10.0(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(typescript@5.9.3) + version: 0.10.0(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(typescript@5.9.3) tailwindcss: specifier: 'catalog:' version: 4.1.18 @@ -470,7 +470,7 @@ importers: dependencies: '@effect/platform-node': specifier: 'catalog:' - version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.0) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.1) '@effectify/node-better-auth': specifier: workspace:* version: link:../../packages/node/better-auth @@ -495,7 +495,7 @@ importers: dependencies: '@effect/platform-node': specifier: 'catalog:' - version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.0) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.1) '@effectify/node-better-auth': specifier: workspace:* version: link:../../packages/node/better-auth @@ -550,10 +550,10 @@ importers: version: 7.3.0 '@react-router/dev': specifier: 'catalog:' - version: 7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + version: 7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) '@remix-run/dev': specifier: 2.17.1 - version: 2.17.1(@remix-run/react@2.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(@remix-run/serve@2.17.1(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + version: 2.17.1(@remix-run/react@2.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(@remix-run/serve@2.17.1(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) '@types/better-sqlite3': specifier: 7.6.13 version: 7.6.13 @@ -574,7 +574,7 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) apps/react-router-example: dependencies: @@ -638,7 +638,7 @@ importers: version: 7.3.0 '@react-router/dev': specifier: 'catalog:' - version: 7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) + version: 7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) '@types/better-sqlite3': specifier: 7.6.13 version: 7.6.13 @@ -656,28 +656,28 @@ importers: dependencies: '@effect-atom/atom': specifier: 'catalog:' - version: 0.5.0(@effect/experimental@0.58.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.0))(@effect/platform@0.94.5(effect@4.0.0-beta.33))(@effect/rpc@0.73.2(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33))(effect@4.0.0-beta.33) + version: 0.5.0(@effect/experimental@0.59.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.1))(@effect/platform@0.94.5(effect@4.0.0-beta.33))(@effect/rpc@0.73.2(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33))(effect@4.0.0-beta.33) '@effect/atom-solid': specifier: 'catalog:' version: 4.0.0-beta.33(effect@4.0.0-beta.33)(solid-js@1.9.11) '@tailwindcss/vite': specifier: 'catalog:' - version: 4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/router-plugin': specifier: 'catalog:' - version: 1.166.12(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) + version: 1.167.1(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@tanstack/solid-router': specifier: 'catalog:' - version: 1.167.3(solid-js@1.9.11) + version: 1.168.1(solid-js@1.9.11) '@tanstack/solid-router-devtools': specifier: 'catalog:' - version: 1.166.9(@tanstack/router-core@1.167.3)(@tanstack/solid-router@1.167.3(solid-js@1.9.11))(csstype@3.2.3)(solid-js@1.9.11) + version: 1.166.10(@tanstack/router-core@1.168.1)(@tanstack/solid-router@1.168.1(solid-js@1.9.11))(csstype@3.2.3)(solid-js@1.9.11) '@tanstack/solid-router-ssr-query': specifier: 'catalog:' - version: 1.166.9(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.167.3)(@tanstack/solid-query@5.90.23(solid-js@1.9.11))(@tanstack/solid-router@1.167.3(solid-js@1.9.11))(solid-js@1.9.11) + version: 1.166.10(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.168.1)(@tanstack/solid-query@5.90.23(solid-js@1.9.11))(@tanstack/solid-router@1.168.1(solid-js@1.9.11))(solid-js@1.9.11) '@tanstack/solid-start': specifier: 'catalog:' - version: 1.166.14(solid-js@1.9.11)(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) + version: 1.167.1(solid-js@1.9.11)(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) effect: specifier: 'catalog:' version: 4.0.0-beta.33 @@ -692,23 +692,23 @@ importers: version: 4.1.18 vite-plugin-lucide-preprocess: specifier: 'catalog:' - version: 1.4.6(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.4.6(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) devDependencies: '@nx/vite': specifier: 'catalog:' - version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) '@tanstack/devtools-vite': specifier: 'catalog:' - version: 0.3.12(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.12(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-solid: specifier: 'catalog:' - version: 2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) packages/chat/domain: dependencies: @@ -735,7 +735,7 @@ importers: version: link:../../react/ui '@tailwindcss/vite': specifier: 'catalog:' - version: 4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/react-form': specifier: 'catalog:' version: 1.25.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -760,7 +760,7 @@ importers: version: 19.1.9(@types/react@19.1.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) globals: specifier: 'catalog:' version: 16.5.0 @@ -772,7 +772,7 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/chat/solid: dependencies: @@ -814,10 +814,10 @@ importers: devDependencies: '@effect/platform-node': specifier: 'catalog:' - version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.0) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.1) '@effect/vitest': specifier: 'catalog:' - version: 0.27.0(effect@4.0.0-beta.33)(vitest@4.0.9) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.0.9) '@types/better-sqlite3': specifier: 'catalog:' version: 7.6.13 @@ -832,7 +832,7 @@ importers: version: 4.0.0-beta.33 vitest: specifier: 'catalog:' - version: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/prisma: dependencies: @@ -844,7 +844,7 @@ importers: version: 0.95.15 '@effect/platform-node': specifier: 'catalog:' - version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.0) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.1) '@prisma/client': specifier: 'catalog:' version: 7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3) @@ -866,13 +866,13 @@ importers: version: 0.8.9 '@effect/experimental': specifier: 'catalog:' - version: 0.58.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.0) + version: 0.59.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.1) '@effect/language-service': specifier: 'catalog:' version: 0.56.0 '@effect/vitest': specifier: 'catalog:' - version: 0.27.0(effect@4.0.0-beta.33)(vitest@4.0.9) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.0.9) '@prisma/adapter-better-sqlite3': specifier: 'catalog:' version: 7.3.0 @@ -914,10 +914,10 @@ importers: version: 5.9.3 vite-tsconfig-paths: specifier: 'catalog:' - version: 5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2)) + version: 5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)) vitest: specifier: 'catalog:' - version: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2) + version: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2) packages/react/query: dependencies: @@ -990,7 +990,7 @@ importers: version: 1.2.4(@types/react@19.1.13)(react@19.2.0) '@tailwindcss/vite': specifier: 'catalog:' - version: 4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/react-form': specifier: 'catalog:' version: 1.25.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -1027,7 +1027,7 @@ importers: version: 19.1.9(@types/react@19.1.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 5.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) globals: specifier: 'catalog:' version: 16.5.0 @@ -1039,7 +1039,7 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/shared/domain: dependencies: @@ -1229,8 +1229,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.7': - resolution: {integrity: sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==} + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1296,12 +1296,12 @@ packages: resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true @@ -1816,8 +1816,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.29.0': - resolution: {integrity: sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==} + '@babel/preset-env@7.29.2': + resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1839,8 +1839,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} '@babel/template@7.28.6': @@ -2030,11 +2030,11 @@ packages: engines: {node: '>=16.17.1'} hasBin: true - '@effect/experimental@0.58.0': - resolution: {integrity: sha512-IEP9sapjF6rFy5TkoqDPc86st/fnqUfjT7Xa3pWJrFGr1hzaMXHo+mWsYOZS9LAOVKnpHuVziDK97EP5qsCHVA==} + '@effect/experimental@0.59.0': + resolution: {integrity: sha512-XqdBpIH5VLlkRxKlyPYp8TAYUeBPjoWYgtrxDebDab14K4kkrpkHk0ZsmmOiQUZ+LY5veRn/PBSogXor9gtPqg==} peerDependencies: - '@effect/platform': ^0.94.0 - effect: ^3.19.13 + '@effect/platform': ^0.95.0 + effect: ^3.20.0 ioredis: ^5 lmdb: ^3 peerDependenciesMeta: @@ -2047,11 +2047,11 @@ packages: resolution: {integrity: sha512-gvJaHoeXMHAoA6+Xyj9Vdq52yDCs+ECLbKpHvxHtdJP/C0D9b3JFEfLjdVuw37zoWcYS856um4rgEYHlW2LSEQ==} hasBin: true - '@effect/platform-node-shared@4.0.0-beta.33': - resolution: {integrity: sha512-jaJnvYz1IiPZyN//fCJsvwnmujJS5KD8noCVVLhb4ZGCWKhQpt0x2iuax6HFzMlPEQSfl04GLU+PVKh0nkzPyA==} + '@effect/platform-node-shared@4.0.0-beta.36': + resolution: {integrity: sha512-QRK+B2tzMJ4L6uQXj4c1r9cRSCspPPuCF+ptJXWoZXO+fR3mIu1h4rTefTvtPVdiED5t3IhIm252FoMVBWwuZQ==} engines: {node: '>=18.0.0'} peerDependencies: - effect: ^4.0.0-beta.33 + effect: ^4.0.0-beta.36 '@effect/platform-node@4.0.0-beta.33': resolution: {integrity: sha512-mw/zCuq4bSRP5nm3hPlfjX+veKlG6kC3NleuMhRuVSa8NzlHF08rXptd6S9ks9JuDz5F6dgzIf/beaGAYF8TmA==} @@ -2071,11 +2071,11 @@ packages: '@effect/platform': ^0.94.5 effect: ^3.19.18 - '@effect/vitest@0.27.0': - resolution: {integrity: sha512-8bM7n9xlMUYw9GqPIVgXFwFm2jf27m/R7psI64PGpwU5+26iwyxp9eAXEsfT5S6lqztYfpQQ1Ubp5o6HfNYzJQ==} + '@effect/vitest@4.0.0-beta.33': + resolution: {integrity: sha512-atoJmncSbrKm8Fb1W+09mju6LwWRdhfvBicHpChwoPWCiij5fFrwRD7EBgIAmYUjycikR2/RYsPpeKXi8L26kw==} peerDependencies: - effect: ^3.19.0 - vitest: ^3.2.0 + effect: ^4.0.0-beta.33 + vitest: ^3.0.0 || ^4.0.0 '@electric-sql/pglite-socket@0.0.20': resolution: {integrity: sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg==} @@ -2091,11 +2091,11 @@ packages: '@electric-sql/pglite@0.3.15': resolution: {integrity: sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ==} - '@emnapi/core@1.9.0': - resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - '@emnapi/runtime@1.9.0': - resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} @@ -3025,16 +3025,16 @@ packages: '@module-federation/bridge-react-webpack-plugin@0.21.6': resolution: {integrity: sha512-lJMmdhD4VKVkeg8RHb+Jwe6Ou9zKVgjtb1inEURDG/sSS2ksdZA8pVKLYbRPRbdmjr193Y8gJfqFbI2dqoyc/g==} - '@module-federation/bridge-react-webpack-plugin@2.2.1': - resolution: {integrity: sha512-0WTYkW5MYyyzBRH/wwVRuvP3ZE5pRnkIITU11ahPZhB1LtjBx03CLXmAlyhGocJ+wVkXM4WO8U3U6pN4+Y9jQQ==} + '@module-federation/bridge-react-webpack-plugin@2.2.3': + resolution: {integrity: sha512-km7ik//+v/LtO8mnuCwmReP/vDYNeS7WeP6Zdl4bqFV/3+hMgEv/Uk4vtKsGBE3EIuk/arwtnBV19cHqyZpHAg==} '@module-federation/cli@0.21.6': resolution: {integrity: sha512-qNojnlc8pTyKtK7ww3i/ujLrgWwgXqnD5DcDPsjADVIpu7STaoaVQ0G5GJ7WWS/ajXw6EyIAAGW/AMFh4XUxsQ==} engines: {node: '>=16.0.0'} hasBin: true - '@module-federation/cli@2.2.1': - resolution: {integrity: sha512-JUuVY0X6FTis7+mvd7GBK4aDWvKo4dUNGYL7KjOZ5PWjbdZ/u/Igbbzx3LC/UK4PHIf5M/Xg7NQXC5RUcpYLKg==} + '@module-federation/cli@2.2.3': + resolution: {integrity: sha512-AcSVTH28a2LLRhlOtnXnnQgPJnBganBNTWO7yZyXXIBhHCM6FpII1y9rfUfaTIhlIqrGaEe5gLPCAmwuA97Tjg==} engines: {node: '>=16.0.0'} hasBin: true @@ -3044,8 +3044,8 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' - '@module-federation/data-prefetch@2.2.1': - resolution: {integrity: sha512-guT54LpM88VfDG4g12EB4UVrPpPYQ3cKRcRsz8Fa9lrX2vqOOmVCrNxGkKBOhtoMv3dcSJ/jtiBpiZWo6RcGfw==} + '@module-federation/data-prefetch@2.2.3': + resolution: {integrity: sha512-JdO+cdXICQ7cbEw0Sn//q/M6RC403UjUNuVo6GACSeBPlExKkAnOFXEjH1R9csnIVL1kOS+0GygvTMjYZRLjhg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -3064,8 +3064,8 @@ packages: vue-tsc: optional: true - '@module-federation/dts-plugin@2.2.1': - resolution: {integrity: sha512-XmGwPyb0F88uR1wKCjJV1oR9zY1h1easCZymavOiklbC1KYADUUd90P4ti+2NesUdLsSdAE0EUzEhD4k+8B/8A==} + '@module-federation/dts-plugin@2.2.3': + resolution: {integrity: sha512-a7Rv2nPJGLufeeOFiLmgRNxw97peAB+SjyBZdpPa3g5ojOEdhZYxdpB15RYiyOtPUc7PhZsSvfYKgj4cEU8f1w==} peerDependencies: typescript: ^4.9.0 || ^5.0.0 vue-tsc: '>=1.0.24' @@ -3088,8 +3088,8 @@ packages: webpack: optional: true - '@module-federation/enhanced@2.2.1': - resolution: {integrity: sha512-KXVSXHi5Msx7r8IoubAuJCdHYxzzTynP4KDP3XdgZYqzYz3EjVqS5gWGVAtB4FMeYYVUW17+J3lQdgSSq1oCDQ==} + '@module-federation/enhanced@2.2.3': + resolution: {integrity: sha512-9jANnDfa06aVsvwy/HXrmo89a5lcXEQg6ud3qKzfSEYZheXrWWEk5+3wWI0OoTmLr8VufleEYLtrg6AnxF9ZHg==} hasBin: true peerDependencies: typescript: ^4.9.0 || ^5.0.0 @@ -3106,33 +3106,33 @@ packages: '@module-federation/error-codes@0.21.6': resolution: {integrity: sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==} - '@module-federation/error-codes@2.2.1': - resolution: {integrity: sha512-uucGTGpLk43HiOxLSsm04o/dk4nCde4NxfUrIsdJoFjQcnvC9rvDiuSqyoLm+8wxF7TOKSeZ0OG3I6h6/RKjsA==} + '@module-federation/error-codes@2.2.3': + resolution: {integrity: sha512-3+qOylnuljh1XulzXd3iNhALXuVXPVGFUupz9qnUL1paWX48F89Wex3egu6psZhxi3F7y7TA7ykjfWpP0vlrjQ==} '@module-federation/inject-external-runtime-core-plugin@0.21.6': resolution: {integrity: sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ==} peerDependencies: '@module-federation/runtime-tools': 0.21.6 - '@module-federation/inject-external-runtime-core-plugin@2.2.1': - resolution: {integrity: sha512-SslQbzYMaDMNuvdRiRk/m+7I5CcwHQZVPrGZsFeKN9x93F0e07CxnEbiEJbLCTM/yBivxKB+0Wg+iNw+TRs+Bg==} + '@module-federation/inject-external-runtime-core-plugin@2.2.3': + resolution: {integrity: sha512-uykv6vFU9whyR37WUOB8ExkVLMKyKSjpQCQUFyRNBs8/rQpupN9HnPQS4DYyFdQUCEFje3JjL2I00/hnrG65Dw==} peerDependencies: - '@module-federation/runtime-tools': 2.2.1 + '@module-federation/runtime-tools': 2.2.3 '@module-federation/managers@0.21.6': resolution: {integrity: sha512-BeV6m2/7kF5MDVz9JJI5T8h8lMosnXkH2bOxxFewcra7ZjvDOgQu7WIio0mgk5l1zjNPvnEVKhnhrenEdcCiWg==} - '@module-federation/managers@2.2.1': - resolution: {integrity: sha512-lndwQ2Pu8TKgmhc5+jykAcHbDeSUGuxdFNYp+7C2oFps4vc5m1aGRl8WB9Lm9LX1xmF4qhz0/CVZ/oCt4rSv4w==} + '@module-federation/managers@2.2.3': + resolution: {integrity: sha512-xBv2hg88K4QIPVYKNAYm+LnH5hRuTPGeFya2obSxalagnMb6lEw7Gko5QqXAZDgCK44dkuqslu8/YtMEXc3v7w==} '@module-federation/manifest@0.21.6': resolution: {integrity: sha512-yg93+I1qjRs5B5hOSvjbjmIoI2z3th8/yst9sfwvx4UDOG1acsE3HHMyPN0GdoIGwplC/KAnU5NmUz4tREUTGQ==} - '@module-federation/manifest@2.2.1': - resolution: {integrity: sha512-Y5IoOQB9R/WmZePY7nyio7NMqAPL9xUqH42qeCZkUJHs2wrtR11fwOUNR9eEwGUPEsGUutXpiHWAXm7Eqcnb+w==} + '@module-federation/manifest@2.2.3': + resolution: {integrity: sha512-RleCI0ywgee9uIGXWPdDfVdvyHhBy7bXQTD3ba96/5fKaNmQTAymrhLX36dFKqaknYn2/tj0oE+oWOZ6ZvbtOQ==} - '@module-federation/node@2.7.35': - resolution: {integrity: sha512-z4l4LGsUhHntERzb6X9ggtTpq+L7xtXdeGRnr+Alv5GNubbml78HjE1b1sJZyqwpIVIt9buGerWUUlJosaEH+g==} + '@module-federation/node@2.7.37': + resolution: {integrity: sha512-+sZdnRUvE3b4bT9x/xFWOXwqOSjPwc9qemrfU+iA/kmVqEhS3RVwaWAoGr6T8UwTXNJ+x4D1oGumYti7Ku4O+Q==} peerDependencies: webpack: ^5.40.0 peerDependenciesMeta: @@ -3151,8 +3151,8 @@ packages: vue-tsc: optional: true - '@module-federation/rspack@2.2.1': - resolution: {integrity: sha512-tT84wYRg3T4cH+AUDHS+UCYiMN2KHpxtDGmMrS/yV78KhMoIj4X5uo59mdLtt9nnq/HQ6k557hrTwHW1HS6A+A==} + '@module-federation/rspack@2.2.3': + resolution: {integrity: sha512-HU0a+E28EDjaulLyu18EOmhIyFoQ/+cIQ/psRyFKw+GHn0AjavlzJCQPQukdCLNuc7T0yGoW7ATXV7TQK6m6VA==} peerDependencies: '@rspack/core': ^0.7.0 || ^1.0.0 || ^2.0.0-0 typescript: ^4.9.0 || ^5.0.0 @@ -3166,26 +3166,26 @@ packages: '@module-federation/runtime-core@0.21.6': resolution: {integrity: sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==} - '@module-federation/runtime-core@2.2.1': - resolution: {integrity: sha512-u+cv5h599CriHsjjT7Xg7retuV6SnKPqA+/PjdSOZNkS3DR9PM+lmRZYb5p3qEricykbc0DdL4ZeHVPwGwlqWA==} + '@module-federation/runtime-core@2.2.3': + resolution: {integrity: sha512-muGMkv1AQIkCQy8mIa6lmgHu3qTasl/se+bZHERulD3gddK6ninM/Hc7mHyUVNO9rVhb+5Fv7QiCYahH4pRrIg==} '@module-federation/runtime-tools@0.21.6': resolution: {integrity: sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==} - '@module-federation/runtime-tools@2.2.1': - resolution: {integrity: sha512-MfDNbQFvbfeQNdc2hvb85qBQ29aehs9NGVWXE0goDPLb4SJNPVMYXjrgiNx6Z0glud7rEnXdstRGsmLcRAOujA==} + '@module-federation/runtime-tools@2.2.3': + resolution: {integrity: sha512-nc7N2oGCwrn+WBou+K3owSILt57ibBxEBA1tppwypuSr7/GPNoOCyLJ9C/nBcPJf5NcHce4GYJES5+pO4f4C+A==} '@module-federation/runtime@0.21.6': resolution: {integrity: sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==} - '@module-federation/runtime@2.2.1': - resolution: {integrity: sha512-FNE0jqhDvAEm84uyNVbGizbfrESk2Ftl/NdPpfADYiLa/zTapTGgbvkSHkrpTI7nqvwe/s4nPe05uNyo3fJCAg==} + '@module-federation/runtime@2.2.3': + resolution: {integrity: sha512-5xAIPhzNPLXL7J61ZJxNiM+kpKfKw2IKf4oAT1KFVxntZnnWZiZFAkzTeRiNlfIjwbgasKqBoARTLbu1GEaydA==} '@module-federation/sdk@0.21.6': resolution: {integrity: sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==} - '@module-federation/sdk@2.2.1': - resolution: {integrity: sha512-J99VObuxkzwO57VvUwq1mDhbqvnqXmtBEossxiMlxayp2u2cGUNg94KD4tBrZQ/cZKce1nmufo5TxkUGnPKyjA==} + '@module-federation/sdk@2.2.3': + resolution: {integrity: sha512-DUXqwxQRqxlBz7XWW5mEsdTvYEZPWVAgwfh9JtLW1fkxfdG+Czzzs1sXGz8MPF76H3PGzbRdzeCEfiANlANWiw==} peerDependencies: node-fetch: ^3.3.2 peerDependenciesMeta: @@ -3195,14 +3195,14 @@ packages: '@module-federation/third-party-dts-extractor@0.21.6': resolution: {integrity: sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A==} - '@module-federation/third-party-dts-extractor@2.2.1': - resolution: {integrity: sha512-gIx2qQT9fMklnUf+SBnZHD0tbBrPhWP9krccxXR+BzwDVtjnP6hlYDzbiElx0c4oFaL48cxMwiHgVixybw/xEQ==} + '@module-federation/third-party-dts-extractor@2.2.3': + resolution: {integrity: sha512-PweNCC79K+fV/BxBjnkJnK1xrrSq9rWmqZat2CfmxStwPhO9yy5Q7XikZnwwUF7mb4p7WoniQRsz//h1aYUdqw==} '@module-federation/webpack-bundler-runtime@0.21.6': resolution: {integrity: sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==} - '@module-federation/webpack-bundler-runtime@2.2.1': - resolution: {integrity: sha512-LSZ7RiJuiOuz+918eDNcFXZfFsj/mpwO/NC37N7Q8Jf/iQgPuGKZKYX6hbuX4uXhuS1KWJn/k2NctwkkVQ6LrQ==} + '@module-federation/webpack-bundler-runtime@2.2.3': + resolution: {integrity: sha512-mSXz89ftG4rkt3t2yhUmKJUbPXnhUqU4hZ6wGCrsLL/N3G6USnFNg2vAcAc6lDo04vxLnZczrd6kKmLdASVEsw==} '@mrleebo/prisma-ast@0.13.1': resolution: {integrity: sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==} @@ -4830,30 +4830,32 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.167.3': - resolution: {integrity: sha512-M/CxrTGKk1fsySJjd+Pzpbi3YLDz+cJSutDjSTMy12owWlOgHV/I6kzR0UxyaBlHraM6XgMHNA0XdgsS1fa4Nw==} + '@tanstack/router-core@1.168.1': + resolution: {integrity: sha512-RtpshTLZsMOkwW7rI52WFWGZSSfMAyDR1zWP9kVm91UX28gedc+LXih1CTP6TchS+TvxK4q8oW7ApMTvnpiY1w==} engines: {node: '>=20.19'} + hasBin: true - '@tanstack/router-devtools-core@1.166.9': - resolution: {integrity: sha512-PNlA7GmOUX9wY7LUG709Pk3Lg33dfHBztQwzjzrOiOsuf4ggp2R6bwarF8nYGNjG79z/MaB5PN+5yvkCVk8jGw==} + '@tanstack/router-devtools-core@1.167.0': + resolution: {integrity: sha512-icgcpE7CQqOzZs4hbFfmICvwk4k7R8ErhUUuUHIKbAYioowQWKm1F3oJhkv6CtoTiofzplUrv9Jy8KE+U/sTKA==} engines: {node: '>=20.19'} peerDependencies: - '@tanstack/router-core': ^1.167.2 + '@tanstack/router-core': ^1.168.0 csstype: ^3.0.10 peerDependenciesMeta: csstype: optional: true - '@tanstack/router-generator@1.166.11': - resolution: {integrity: sha512-Q/49wxURbft1oNOvo/eVAWZq/lNLK3nBGlavqhLToAYXY6LCzfMtRlE/y3XPHzYC9pZc09u5jvBR1k1E4hyGDQ==} + '@tanstack/router-generator@1.166.15': + resolution: {integrity: sha512-W8ybCktgN/45fc7ohWJKAyG5Al1pnTg7V8Z6RiG8NkSrN7Igo4BqanUmXULnhnkdCID5XhMbkhP84r2hzkXbPw==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.166.12': - resolution: {integrity: sha512-PYsnN6goK6zBaVo63UVKjofv69+HHMKRQXymwN55JYKguNnNR8OZ6E12icPb0Olc5uIpPiGz1YI2+rbpmNKGHA==} + '@tanstack/router-plugin@1.167.1': + resolution: {integrity: sha512-bPDdwvpoznjyCUWd+w2ss+y9GemXvF3R6Zzi36rxiWUGwuqDhQbvs1fWkjsx2oBqXSG8vkF74yFdUxFEX90o4g==} engines: {node: '>=20.19'} + hasBin: true peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.167.3 + '@tanstack/react-router': ^1.168.1 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' @@ -4869,8 +4871,8 @@ packages: webpack: optional: true - '@tanstack/router-ssr-query-core@1.166.9': - resolution: {integrity: sha512-7L9Wly0PYMHhCdiGmlSZPOVz0O0OQhmIrE0VH3+ZP4RFfDtOZZSk0TywssLrOWDbkNfLY/MBqlhXi9t50KTGAw==} + '@tanstack/router-ssr-query-core@1.167.0': + resolution: {integrity: sha512-+fpK1U+NR8YzcUmXhEy2tdPfT/XxIn1AMd/ODkYGMExAAUWnV8Zptptf41djK5eBj6718P6YTfxLRkxtfUdnVA==} engines: {node: '>=20.19'} peerDependencies: '@tanstack/query-core': '>=5.90.0' @@ -4890,19 +4892,19 @@ packages: peerDependencies: solid-js: ^1.6.0 - '@tanstack/solid-router-devtools@1.166.9': - resolution: {integrity: sha512-l9laUaakRMQlXTE33gZIStXo/1gzAvQjzxv92FaUIaiKP6rZdAKXmdEoiOh6EtVpssJ/Cx2VYdDIZbpUUfz0Gw==} + '@tanstack/solid-router-devtools@1.166.10': + resolution: {integrity: sha512-zuL2k2oPYnIwQ9wFqWMDH532/PcdYpnVvCQi+iG7sZj2Pm8UonazrGwqlEZ35Av1wqfl4JbEPA+a9TVN1KNtOw==} engines: {node: '>=20.19'} peerDependencies: - '@tanstack/router-core': ^1.167.2 - '@tanstack/solid-router': ^1.167.2 + '@tanstack/router-core': ^1.168.0 + '@tanstack/solid-router': ^1.168.0 solid-js: ^1.9.10 peerDependenciesMeta: '@tanstack/router-core': optional: true - '@tanstack/solid-router-ssr-query@1.166.9': - resolution: {integrity: sha512-g/yo9kSsXDxjWK/T+Q6ERJ1HR4WxA0XKDFBTYnL3coJgbAlfF+EWK+hrO/0h7Fr336v4j4Scnyw+Gu8c9WJLTA==} + '@tanstack/solid-router-ssr-query@1.166.10': + resolution: {integrity: sha512-FPfjiXlhDCR5o+nkvR/rIRI6htEfNRTc38ROY4YQBS5OL4r6nitl23hCpt4JgiQ8t+jbsZsKe+qplw8Kk+JNmw==} engines: {node: '>=20.19'} peerDependencies: '@tanstack/query-core': '>=5.90.0' @@ -4910,27 +4912,29 @@ packages: '@tanstack/solid-router': '>=1.127.0' solid-js: ^1.9.10 - '@tanstack/solid-router@1.167.3': - resolution: {integrity: sha512-ZOnmGDGhqMSYJG58y0ZVFG/6N0XIvu0bNh9RLU0sCYUcd6oN36FKgGO8ngmhK50vEgx4uibMj6G6HJ3pVFJqtw==} + '@tanstack/solid-router@1.168.1': + resolution: {integrity: sha512-+JkfqlgjZsvvBEdlgkmbU/2efB07LAioCXpjWoNcTcz25NcjcXvp6fDfvPR2HmqJ2XUEuiZj10WE3bYbORYVMg==} engines: {node: '>=20.19'} + hasBin: true peerDependencies: solid-js: ^1.9.10 - '@tanstack/solid-start-client@1.166.11': - resolution: {integrity: sha512-+TuhO9kBSWm6xuMhNCiPdJkrCtRNMiNHFzp31KjT9WfCvqZ2X0eYDR2XW7uL0ghd08YBQu2+xKOFy9j9fkO1HQ==} + '@tanstack/solid-start-client@1.166.15': + resolution: {integrity: sha512-avWz5gQaH5Hkw8LA1Jdde+2+Y0ktSuOslvf6tr3zqN37J0+FYLo2vn9wfDbuKfnHPKvmfLdci7ii8BtJfnlsTg==} engines: {node: '>=22.12.0'} peerDependencies: solid-js: '>=1.0.0' - '@tanstack/solid-start-server@1.166.11': - resolution: {integrity: sha512-Qf7dJXlihsOrMgTJKBEQh6//WGyTsWzkT3dJdGokvzQd5fWgoQJNfhVIslJO5LfygDijbnjNDeGr1+ZktmSIYA==} + '@tanstack/solid-start-server@1.166.15': + resolution: {integrity: sha512-byVrP9iLRPbHQ5MKoEW/SK8JH68OSymjyex02/ABTzWJ61WUp+5JvFce2YzDTWXhrk8CfH61oMth7/iQmsC2mw==} engines: {node: '>=22.12.0'} peerDependencies: solid-js: ^1.0.0 - '@tanstack/solid-start@1.166.14': - resolution: {integrity: sha512-1ZPJWihvwnQK9JaHPl1QsoQdmCoqE/nzxguNM9Ixc4AtAMfa08Ld9YQV0qbDI2K8hUIEEhDlYxApngLfHybRYA==} + '@tanstack/solid-start@1.167.1': + resolution: {integrity: sha512-HDO+DYQ2EbBMPE8aM9pCCaXpFEDKaL585Sw1454pMSZb+O+mwvhzb9Qk+pVg2A/9QhhIToMEtS/mKu0isq5xPQ==} engines: {node: '>=22.12.0'} + hasBin: true peerDependencies: solid-js: '>=1.0.0' vite: '>=7.0.0' @@ -4940,45 +4944,40 @@ packages: peerDependencies: solid-js: ^1.6.0 - '@tanstack/solid-store@0.9.2': - resolution: {integrity: sha512-W6D6WnIL0Fch2zcLd7qCFf3eLD6AqwZiPoQnoRFKhe8DFXdxM4GRvfLpsAIQQHsun97EcttbwbfVq14SZfT7jg==} - peerDependencies: - solid-js: ^1.6.0 - - '@tanstack/start-client-core@1.166.11': - resolution: {integrity: sha512-G5mYnNHMAlVtcKjEqbd1L8dqdXmsIl0fGztgV6XdcwjohdV0ctx7/JTCt0R0bEIOzSMW1uFiP7ag2rZ3rP43Ug==} + '@tanstack/start-client-core@1.167.1': + resolution: {integrity: sha512-6oVxTwGoXo+Gcs5aDuzJQIdXCBfvvfIbv9tl4z8pH+bRCRM8CzKXqb4JBt8i7G8G7fAJQCOcoldpbVv3JsWGwA==} engines: {node: '>=22.12.0'} + hasBin: true '@tanstack/start-fn-stubs@1.161.6': resolution: {integrity: sha512-Y6QSlGiLga8cHfvxGGaonXIlt2bIUTVdH6AMjmpMp7+ANNCp+N96GQbjjhLye3JkaxDfP68x5iZA8NK4imgRig==} engines: {node: '>=22.12.0'} - '@tanstack/start-plugin-core@1.166.14': - resolution: {integrity: sha512-4jb14aAtt4IfLlLValwr0CMUlRc7IfaQQBZ/zSaMgdEK9P66j3XPqmnICHVC/DQW7MLWkIXFXN3tNQaV0jY1pQ==} + '@tanstack/start-plugin-core@1.167.4': + resolution: {integrity: sha512-04UFdpkCIw65BOWnuu++sxdg5b0lcPFX+RaPRobKFSn1P5bM3ZufF/K1CotAry3SJ64Vq4NDUdQQFKcd+V38/A==} engines: {node: '>=22.12.0'} peerDependencies: vite: '>=7.0.0' - '@tanstack/start-server-core@1.166.11': - resolution: {integrity: sha512-szWUc7scEP/XVu4xl+nz7hDpuBWq/KzIUidAPG+3mL9hyouRbK9FBApT31fw3LFsNYMeGO0eo7/hYooyS7PruA==} + '@tanstack/start-server-core@1.167.1': + resolution: {integrity: sha512-Cwl3Z2qJQi2+V6tkmQ3YHLkj7g+QjIsDVgsYRpJPL93hxb4bb3sOQggz9PaGMxUyzkiFyeRNO8R/3AgW7mr5ig==} engines: {node: '>=22.12.0'} + hasBin: true - '@tanstack/start-storage-context@1.166.11': - resolution: {integrity: sha512-NgAdUR78dgeLb7xAPfwZORqJOcd46PO0ocF6XNgEZNDWJ1MVgOiWRLDstszwkOTO/g7VyFc4cyHmB1HlePxvSQ==} + '@tanstack/start-storage-context@1.166.15': + resolution: {integrity: sha512-mGDNfJo/eFtwgFFBrJ85rNdIBNTroE3zy5zbwHZ/FV0HPYOawnev7KscDjKBuVxBGY2jl0fQLrRNUO/Sjqy3cg==} engines: {node: '>=22.12.0'} '@tanstack/store@0.7.7': resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} - '@tanstack/store@0.9.2': - resolution: {integrity: sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==} - - '@tanstack/virtual-file-routes@1.161.6': - resolution: {integrity: sha512-EGWs9yvJA821pUkwkiZLQW89CzUumHyJy8NKq229BubyoWXfDw1oWnTJYSS/hhbLiwP9+KpopjeF5wWwnCCyeQ==} + '@tanstack/virtual-file-routes@1.161.7': + resolution: {integrity: sha512-olW33+Cn+bsCsZKPwEGhlkqS6w3M2slFv11JIobdnCFKMLG97oAI2kWKdx5/zsywTL8flpnoIgaZZPlQTFYhdQ==} engines: {node: '>=20.19'} + hasBin: true - '@trpc/server@11.13.4': - resolution: {integrity: sha512-SZmLwi43KSp1D3jp2aPuzqhC644gIy87hgFuD9xWCTwFspH9Pr5DO2/JmpWjCqybTG2fTuKYzxFYLUGjTY5LGg==} + '@trpc/server@11.14.0': + resolution: {integrity: sha512-Qdc8Ebm4ofwlyM/fk64lMfQEGxHJWVXMU7suJ7uRv5N2dy9mQno73UR9sl2vVjw80zoeCNLe1Rr925b2dVkdkA==} peerDependencies: typescript: '>=5.7.2' @@ -5012,8 +5011,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -5231,8 +5230,8 @@ packages: '@vanilla-extract/babel-plugin-debug-ids@1.2.2': resolution: {integrity: sha512-MeDWGICAF9zA/OZLOKwhoRlsUW+fiMwnfuOAqFVohL31Agj7Q/RBWAYweqjHLgFBCsdnr6XIfwjJnmb2znEWxw==} - '@vanilla-extract/css@1.19.0': - resolution: {integrity: sha512-CmiHmTn0VXYW2/A575zzAJ+gJWBRdpEhEseg93WBst0QNQJiHO3cQXyVMIW+RhPi5D9TM8W4U929/ELDaXq6yQ==} + '@vanilla-extract/css@1.20.0': + resolution: {integrity: sha512-yKuajXFlghIjRZmEfy95z6MYj+mzJPoD3nbNLVAUB8Np6I1P9g5vBlznQPD+0A46osCn0za/wIvp/cg8HU3aig==} '@vanilla-extract/integration@6.5.0': resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==} @@ -5420,11 +5419,11 @@ packages: resolution: {integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==} engines: {node: '>=18.12.0'} - '@zag-js/dom-query@1.36.0': - resolution: {integrity: sha512-GlodCpZSQ+LKsyZ6DmgXN5dAF5CNat+4EwJ91pX4Fd7YHayXHCRca/ztpcdt+jeIWguW59BF4TiJgAilnhwf0Q==} + '@zag-js/dom-query@1.37.0': + resolution: {integrity: sha512-nL3z5UOvRMDL5iBrNMs6Rm8vm5qC6Vt0FykFAhEL++mC01W0xpO/KKJNcpdooGFYQxwHBbgI/djE+sq9yY3pNw==} - '@zag-js/types@1.36.0': - resolution: {integrity: sha512-7qLMvaIfRwVLzxCi3MZ2rImkNZGJ1avtrhhQ8G9AIk19P765O9IqvfDlCXTqHGUZPUL/+fJOWcgQDkWaFM8RBw==} + '@zag-js/types@1.37.0': + resolution: {integrity: sha512-auzzQI7+MtZvU8q5C9yNkg/DQqAT3ar9drE4rQFz1OERpaXtyp/JaeT3/t7IXDrocJBy0CY7vfrJSb+CIfjPzw==} '@zkochan/js-yaml@0.0.7': resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==} @@ -5682,8 +5681,8 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} - babel-plugin-polyfill-corejs2@0.4.16: - resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -5692,13 +5691,13 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.14.1: - resolution: {integrity: sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw==} + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.7: - resolution: {integrity: sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==} + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -5755,8 +5754,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.8: - resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==} + baseline-browser-mapping@2.10.9: + resolution: {integrity: sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==} engines: {node: '>=6.0.0'} hasBin: true @@ -5987,8 +5986,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001779: - resolution: {integrity: sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA==} + caniuse-lite@1.0.30001780: + resolution: {integrity: sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -6248,8 +6247,8 @@ packages: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} - core-js-compat@3.48.0: - resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -6580,8 +6579,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.313: - resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==} + electron-to-chromium@1.5.321: + resolution: {integrity: sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -6617,8 +6616,8 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.20.0: - resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} enquirer@2.3.6: @@ -7004,8 +7003,8 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.4.1: - resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} flattie@1.1.1: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} @@ -7251,8 +7250,8 @@ packages: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true - h3@1.15.6: - resolution: {integrity: sha512-oi15ESLW5LRthZ+qPCi5GNasY/gvynSKUQxgiovrY63bPAtG59wtM+LSrlcwvOHAXzGrXVLnI97brbkdPF9WoQ==} + h3@1.15.9: + resolution: {integrity: sha512-H7UPnyIupUOYUQu7f2x7ABVeMyF/IbJjqn20WSXpMdnQB260luADUkSgJU7QTWLutq8h3tUayMQ1DdbSYX5LkA==} h3@2.0.1-rc.16: resolution: {integrity: sha512-h+pjvyujdo9way8qj6FUbhaQcHlR8FEq65EhTX9ViT5pK8aLj68uFl4hBkF+hsTJAH+H1END2Yv6hTIsabGfag==} @@ -7538,8 +7537,8 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - ioredis@5.10.0: - resolution: {integrity: sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==} + ioredis@5.10.1: + resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==} engines: {node: '>=12.22.0'} ip-regex@4.3.0: @@ -7895,8 +7894,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@6.2.1: - resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} + jose@6.2.2: + resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -8038,8 +8037,8 @@ packages: resolution: {integrity: sha512-zpGIFg0HuoC893rIjYX1BETkVWdDnzTzF5e0kWXJFg5lE0k1/LfNWBejrcnOFu8Q2Rfq/hTDTU7XLUM8QOrpzg==} engines: {node: '>=20.0.0'} - kysely@0.28.12: - resolution: {integrity: sha512-kWiueDWXhbCchgiotwXkwdxZE/6h56IHAeFWg4euUfW0YsmO9sxbAxzx1KLLv2lox15EfuuxHQvgJ1qIfZuHGw==} + kysely@0.28.14: + resolution: {integrity: sha512-SU3lgh0rPvq7upc6vvdVrCsSMUG1h3ChvHVOY7wJ2fw4C9QEB7X3d5eyYEyULUX7UQtxZJtZXGuT6U2US72UYA==} engines: {node: '>=20.0.0'} launch-editor@2.13.1: @@ -8748,8 +8747,8 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.8.1: - resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} modern-ahocorasick@1.1.0: resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==} @@ -9428,8 +9427,8 @@ packages: pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} - pure-rand@8.1.0: - resolution: {integrity: sha512-53B3MB8wetRdD6JZ4W/0gDKaOvKwuXrEmV1auQc0hASWge8rieKV4PCCVNVbJ+i24miiubb4c/B+dg8Ho0ikYw==} + pure-rand@8.3.0: + resolution: {integrity: sha512-1ws1Ab8fnsf4bvpL+SujgBnr3KFs5abgCLVzavBp+f2n8Ld5YTOZlkv/ccYPhu3X9s+MEeqPRMqKlJz/kWDK8A==} qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} @@ -9824,8 +9823,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sax@1.5.0: - resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} saxes@6.0.0: @@ -10150,8 +10149,8 @@ packages: resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} engines: {node: '>=8.0'} - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -10307,8 +10306,8 @@ packages: uglify-js: optional: true - terser@5.46.0: - resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} engines: {node: '>=10'} hasBin: true @@ -10361,15 +10360,15 @@ packages: tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.26: - resolution: {integrity: sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew==} + tldts-core@7.0.27: + resolution: {integrity: sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==} tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tldts@7.0.26: - resolution: {integrity: sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ==} + tldts@7.0.27: + resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} hasBin: true tmp@0.2.5: @@ -10566,8 +10565,8 @@ packages: resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} engines: {node: '>=18.17'} - undici@7.24.4: - resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} + undici@7.24.5: + resolution: {integrity: sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==} engines: {node: '>=20.18.1'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -10813,6 +10812,14 @@ packages: typescript: optional: true + valibot@1.3.1: + resolution: {integrity: sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -11310,7 +11317,7 @@ snapshots: '@ariatype/aria-attributes': 1.0.2 '@ariatype/aria-roles': 1.0.2 '@preact/signals-core': 1.14.0 - '@zag-js/dom-query': 1.36.0 + '@zag-js/dom-query': 1.37.0 just-kebab-case: 4.2.0 just-map-values: 3.2.0 server-dom-shim: 1.1.0 @@ -11320,12 +11327,12 @@ snapshots: '@aria-ui/core': 0.0.22 '@floating-ui/dom': 1.7.6 '@floating-ui/utils': 0.2.11 - '@zag-js/dom-query': 1.36.0 + '@zag-js/dom-query': 1.37.0 '@aria-ui/presence@0.0.20': dependencies: '@aria-ui/core': 0.0.22 - '@zag-js/dom-query': 1.36.0 + '@zag-js/dom-query': 1.37.0 '@aria-ui/tooltip@0.0.30': dependencies: @@ -11464,12 +11471,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.14(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))': + '@astrojs/mdx@4.3.14(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))': dependencies: '@astrojs/markdown-remark': 6.3.11 '@mdx-js/mdx': 3.1.1 acorn: 8.16.0 - astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -11493,22 +11500,22 @@ snapshots: stream-replace-string: 2.0.0 zod: 4.3.6 - '@astrojs/starlight-tailwind@4.0.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(tailwindcss@4.1.18)': + '@astrojs/starlight-tailwind@4.0.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(tailwindcss@4.1.18)': dependencies: - '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) tailwindcss: 4.1.18 - '@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))': + '@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))': dependencies: '@astrojs/markdown-remark': 6.3.11 - '@astrojs/mdx': 4.3.14(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/mdx': 4.3.14(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) '@astrojs/sitemap': 3.7.1 '@pagefind/default-ui': 1.4.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) - astro-expressive-code: 0.41.7(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + astro-expressive-code: 0.41.7(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -11563,8 +11570,8 @@ snapshots: '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -11579,7 +11586,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -11617,7 +11624,7 @@ snapshots: regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 @@ -11702,12 +11709,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.6': + '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.0': + '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 @@ -12191,9 +12198,9 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12260,7 +12267,7 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.29.0(@babel/core@7.29.0)': + '@babel/preset-env@7.29.2(@babel/core@7.29.0)': dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 @@ -12328,10 +12335,10 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) - babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.14.1(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12366,12 +12373,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -12379,7 +12386,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -12393,20 +12400,20 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0)': + '@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)': dependencies: '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@standard-schema/spec': 1.1.0 better-call: 1.1.7(zod@4.3.6) - jose: 6.2.1 - kysely: 0.28.12 + jose: 6.2.2 + kysely: 0.28.14 nanostores: 1.2.0 zod: 4.3.6 - '@better-auth/telemetry@1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0))': + '@better-auth/telemetry@1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0))': dependencies: - '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0) + '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 @@ -12533,9 +12540,9 @@ snapshots: '@dprint/win32-x64@0.51.1': optional: true - '@effect-atom/atom@0.5.0(@effect/experimental@0.58.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.0))(@effect/platform@0.94.5(effect@4.0.0-beta.33))(@effect/rpc@0.73.2(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)': + '@effect-atom/atom@0.5.0(@effect/experimental@0.59.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.1))(@effect/platform@0.94.5(effect@4.0.0-beta.33))(@effect/rpc@0.73.2(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)': dependencies: - '@effect/experimental': 0.58.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.0) + '@effect/experimental': 0.59.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.1) '@effect/platform': 0.94.5(effect@4.0.0-beta.33) '@effect/rpc': 0.73.2(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33) effect: 4.0.0-beta.33 @@ -12550,17 +12557,17 @@ snapshots: micromatch: 4.0.8 pkg-entry-points: 1.1.1 - '@effect/experimental@0.58.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.0)': + '@effect/experimental@0.59.0(@effect/platform@0.94.5(effect@4.0.0-beta.33))(effect@4.0.0-beta.33)(ioredis@5.10.1)': dependencies: '@effect/platform': 0.94.5(effect@4.0.0-beta.33) effect: 4.0.0-beta.33 uuid: 11.1.0 optionalDependencies: - ioredis: 5.10.0 + ioredis: 5.10.1 '@effect/language-service@0.56.0': {} - '@effect/platform-node-shared@4.0.0-beta.33(effect@4.0.0-beta.33)': + '@effect/platform-node-shared@4.0.0-beta.36(effect@4.0.0-beta.33)': dependencies: '@types/ws': 8.18.1 effect: 4.0.0-beta.33 @@ -12569,13 +12576,13 @@ snapshots: - bufferutil - utf-8-validate - '@effect/platform-node@4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.0)': + '@effect/platform-node@4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.1)': dependencies: - '@effect/platform-node-shared': 4.0.0-beta.33(effect@4.0.0-beta.33) + '@effect/platform-node-shared': 4.0.0-beta.36(effect@4.0.0-beta.33) effect: 4.0.0-beta.33 - ioredis: 5.10.0 + ioredis: 5.10.1 mime: 4.1.0 - undici: 7.24.4 + undici: 7.24.5 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -12593,10 +12600,10 @@ snapshots: effect: 4.0.0-beta.33 msgpackr: 1.11.9 - '@effect/vitest@0.27.0(effect@4.0.0-beta.33)(vitest@4.0.9)': + '@effect/vitest@4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.0.9)': dependencies: effect: 4.0.0-beta.33 - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': dependencies: @@ -12608,12 +12615,12 @@ snapshots: '@electric-sql/pglite@0.3.15': {} - '@emnapi/core@1.9.0': + '@emnapi/core@1.9.1': dependencies: '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 - '@emnapi/runtime@1.9.0': + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 @@ -13073,7 +13080,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.9.0 + '@emnapi/runtime': 1.9.1 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -13369,9 +13376,9 @@ snapshots: '@types/semver': 7.5.8 semver: 7.6.3 - '@module-federation/bridge-react-webpack-plugin@2.2.1(node-fetch@2.7.0(encoding@0.1.13))': + '@module-federation/bridge-react-webpack-plugin@2.2.3(node-fetch@2.7.0(encoding@0.1.13))': dependencies: - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) '@types/semver': 7.5.8 semver: 7.6.3 transitivePeerDependencies: @@ -13392,10 +13399,10 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/cli@2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': + '@module-federation/cli@2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': dependencies: - '@module-federation/dts-plugin': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/dts-plugin': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) chalk: 3.0.0 commander: 11.1.0 jiti: 2.4.2 @@ -13416,10 +13423,10 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@module-federation/data-prefetch@2.2.1(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@module-federation/data-prefetch@2.2.3(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@module-federation/runtime': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/runtime': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) fs-extra: 9.1.0 optionalDependencies: react: 19.2.0 @@ -13452,12 +13459,12 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/dts-plugin@2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': + '@module-federation/dts-plugin@2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': dependencies: - '@module-federation/error-codes': 2.2.1 - '@module-federation/managers': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/third-party-dts-extractor': 2.2.1 + '@module-federation/error-codes': 2.2.3 + '@module-federation/managers': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/third-party-dts-extractor': 2.2.3 adm-zip: 0.5.16 ansi-colors: 4.1.3 axios: 1.13.6 @@ -13505,20 +13512,20 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@2.2.1(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/cli': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/data-prefetch': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@module-federation/dts-plugin': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/error-codes': 2.2.1 - '@module-federation/inject-external-runtime-core-plugin': 2.2.1(@module-federation/runtime-tools@2.2.1(node-fetch@2.7.0(encoding@0.1.13))) - '@module-federation/managers': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/manifest': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/rspack': 2.2.1(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/runtime-tools': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/webpack-bundler-runtime': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/enhanced@2.2.3(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/cli': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/data-prefetch': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@module-federation/dts-plugin': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/error-codes': 2.2.3 + '@module-federation/inject-external-runtime-core-plugin': 2.2.3(@module-federation/runtime-tools@2.2.3(node-fetch@2.7.0(encoding@0.1.13))) + '@module-federation/managers': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/manifest': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/rspack': 2.2.3(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/runtime-tools': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/webpack-bundler-runtime': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) btoa: 1.2.1 schema-utils: 4.3.3 tapable: 2.3.0 @@ -13538,15 +13545,15 @@ snapshots: '@module-federation/error-codes@0.21.6': {} - '@module-federation/error-codes@2.2.1': {} + '@module-federation/error-codes@2.2.3': {} '@module-federation/inject-external-runtime-core-plugin@0.21.6(@module-federation/runtime-tools@0.21.6)': dependencies: '@module-federation/runtime-tools': 0.21.6 - '@module-federation/inject-external-runtime-core-plugin@2.2.1(@module-federation/runtime-tools@2.2.1(node-fetch@2.7.0(encoding@0.1.13)))': + '@module-federation/inject-external-runtime-core-plugin@2.2.3(@module-federation/runtime-tools@2.2.3(node-fetch@2.7.0(encoding@0.1.13)))': dependencies: - '@module-federation/runtime-tools': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/runtime-tools': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) '@module-federation/managers@0.21.6': dependencies: @@ -13554,9 +13561,9 @@ snapshots: find-pkg: 2.0.0 fs-extra: 9.1.0 - '@module-federation/managers@2.2.1(node-fetch@2.7.0(encoding@0.1.13))': + '@module-federation/managers@2.2.3(node-fetch@2.7.0(encoding@0.1.13))': dependencies: - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) find-pkg: 2.0.0 fs-extra: 9.1.0 transitivePeerDependencies: @@ -13577,11 +13584,11 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/manifest@2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': + '@module-federation/manifest@2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': dependencies: - '@module-federation/dts-plugin': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/managers': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/dts-plugin': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/managers': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) chalk: 3.0.0 find-pkg: 2.0.0 transitivePeerDependencies: @@ -13593,11 +13600,11 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.35(@rspack/core@1.6.8(@swc/helpers@0.5.19))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': + '@module-federation/node@2.7.37(@rspack/core@1.6.8(@swc/helpers@0.5.19))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': dependencies: - '@module-federation/enhanced': 2.2.1(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@module-federation/runtime': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/enhanced': 2.2.3(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@module-federation/runtime': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) @@ -13634,15 +13641,15 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/rspack@2.2.1(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': + '@module-federation/rspack@2.2.3(@rspack/core@1.6.8(@swc/helpers@0.5.19))(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)': dependencies: - '@module-federation/bridge-react-webpack-plugin': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/dts-plugin': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/inject-external-runtime-core-plugin': 2.2.1(@module-federation/runtime-tools@2.2.1(node-fetch@2.7.0(encoding@0.1.13))) - '@module-federation/managers': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/manifest': 2.2.1(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) - '@module-federation/runtime-tools': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/bridge-react-webpack-plugin': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/dts-plugin': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/inject-external-runtime-core-plugin': 2.2.3(@module-federation/runtime-tools@2.2.3(node-fetch@2.7.0(encoding@0.1.13))) + '@module-federation/managers': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/manifest': 2.2.3(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3) + '@module-federation/runtime-tools': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) '@rspack/core': 1.6.8(@swc/helpers@0.5.19) btoa: 1.2.1 optionalDependencies: @@ -13659,10 +13666,10 @@ snapshots: '@module-federation/error-codes': 0.21.6 '@module-federation/sdk': 0.21.6 - '@module-federation/runtime-core@2.2.1(node-fetch@2.7.0(encoding@0.1.13))': + '@module-federation/runtime-core@2.2.3(node-fetch@2.7.0(encoding@0.1.13))': dependencies: - '@module-federation/error-codes': 2.2.1 - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/error-codes': 2.2.3 + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) transitivePeerDependencies: - node-fetch @@ -13671,10 +13678,10 @@ snapshots: '@module-federation/runtime': 0.21.6 '@module-federation/webpack-bundler-runtime': 0.21.6 - '@module-federation/runtime-tools@2.2.1(node-fetch@2.7.0(encoding@0.1.13))': + '@module-federation/runtime-tools@2.2.3(node-fetch@2.7.0(encoding@0.1.13))': dependencies: - '@module-federation/runtime': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/webpack-bundler-runtime': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/runtime': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/webpack-bundler-runtime': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) transitivePeerDependencies: - node-fetch @@ -13684,17 +13691,17 @@ snapshots: '@module-federation/runtime-core': 0.21.6 '@module-federation/sdk': 0.21.6 - '@module-federation/runtime@2.2.1(node-fetch@2.7.0(encoding@0.1.13))': + '@module-federation/runtime@2.2.3(node-fetch@2.7.0(encoding@0.1.13))': dependencies: - '@module-federation/error-codes': 2.2.1 - '@module-federation/runtime-core': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/error-codes': 2.2.3 + '@module-federation/runtime-core': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) transitivePeerDependencies: - node-fetch '@module-federation/sdk@0.21.6': {} - '@module-federation/sdk@2.2.1(node-fetch@2.7.0(encoding@0.1.13))': + '@module-federation/sdk@2.2.3(node-fetch@2.7.0(encoding@0.1.13))': optionalDependencies: node-fetch: 2.7.0(encoding@0.1.13) @@ -13704,7 +13711,7 @@ snapshots: fs-extra: 9.1.0 resolve: 1.22.8 - '@module-federation/third-party-dts-extractor@2.2.1': + '@module-federation/third-party-dts-extractor@2.2.3': dependencies: find-pkg: 2.0.0 fs-extra: 9.1.0 @@ -13715,10 +13722,10 @@ snapshots: '@module-federation/runtime': 0.21.6 '@module-federation/sdk': 0.21.6 - '@module-federation/webpack-bundler-runtime@2.2.1(node-fetch@2.7.0(encoding@0.1.13))': + '@module-federation/webpack-bundler-runtime@2.2.3(node-fetch@2.7.0(encoding@0.1.13))': dependencies: - '@module-federation/runtime': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/sdk': 2.2.1(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/runtime': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) + '@module-federation/sdk': 2.2.3(node-fetch@2.7.0(encoding@0.1.13)) transitivePeerDependencies: - node-fetch @@ -13747,28 +13754,28 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.9.0 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.10.1 optional: true '@napi-rs/wasm-runtime@0.2.4': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.9.0 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.9.0 '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.9.0 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.10.1 optional: true '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.9.0 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -13910,9 +13917,9 @@ snapshots: '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/workspace': 22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)) '@zkochan/js-yaml': 0.0.7 @@ -13945,7 +13952,7 @@ snapshots: '@nx/module-federation@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@module-federation/enhanced': 0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.19))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@module-federation/node': 2.7.35(@rspack/core@1.6.8(@swc/helpers@0.5.19))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@module-federation/node': 2.7.37(@rspack/core@1.6.8(@swc/helpers@0.5.19))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@module-federation/sdk': 0.21.6 '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -14032,7 +14039,7 @@ snapshots: '@nx/nx-win32-x64-msvc@22.5.4': optional: true - '@nx/react@22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/react@22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/eslint': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -14049,7 +14056,7 @@ snapshots: semver: 7.7.4 tslib: 2.8.1 optionalDependencies: - '@nx/vite': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + '@nx/vite': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) transitivePeerDependencies: - '@babel/core' - '@babel/traverse' @@ -14106,11 +14113,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) - '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) ajv: 8.18.0 enquirer: 2.3.6 @@ -14118,8 +14125,8 @@ snapshots: semver: 7.7.4 tsconfig-paths: 4.2.0 tslib: 2.8.1 - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -14130,11 +14137,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) - '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) ajv: 8.18.0 enquirer: 2.3.6 @@ -14142,8 +14149,8 @@ snapshots: semver: 7.7.4 tsconfig-paths: 4.2.0 tslib: 2.8.1 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -14154,7 +14161,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -14162,8 +14169,8 @@ snapshots: semver: 7.7.4 tslib: 2.8.1 optionalDependencies: - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -14174,7 +14181,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -14182,8 +14189,8 @@ snapshots: semver: 7.7.4 tslib: 2.8.1 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -14668,11 +14675,11 @@ snapshots: optionalDependencies: '@types/react': 19.1.13 - '@react-router/dev@7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': + '@react-router/dev@7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@babel/traverse': 7.29.0 @@ -14697,9 +14704,9 @@ snapshots: react-router: 7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) semver: 7.7.4 tinyglobby: 0.2.15 - valibot: 1.2.0(typescript@5.9.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + valibot: 1.3.1(typescript@5.9.3) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: '@react-router/serve': 7.12.0(react-router@7.12.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(typescript@5.9.3) typescript: 5.9.3 @@ -14718,11 +14725,11 @@ snapshots: - tsx - yaml - '@react-router/dev@7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': + '@react-router/dev@7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@babel/traverse': 7.29.0 @@ -14747,9 +14754,9 @@ snapshots: react-router: 7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) semver: 7.7.4 tinyglobby: 0.2.15 - valibot: 1.2.0(typescript@5.9.3) - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + valibot: 1.3.1(typescript@5.9.3) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: '@react-router/serve': 7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) typescript: 5.9.3 @@ -14768,11 +14775,11 @@ snapshots: - tsx - yaml - '@react-router/dev@7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': + '@react-router/dev@7.12.0(@react-router/serve@7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@babel/traverse': 7.29.0 @@ -14797,9 +14804,9 @@ snapshots: react-router: 7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) semver: 7.7.4 tinyglobby: 0.2.15 - valibot: 1.2.0(typescript@5.9.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + valibot: 1.3.1(typescript@5.9.3) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: '@react-router/serve': 7.12.0(react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3) typescript: 5.9.3 @@ -14880,11 +14887,11 @@ snapshots: - supports-color - typescript - '@remix-run/dev@2.17.1(@remix-run/react@2.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(@remix-run/serve@2.17.1(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': + '@remix-run/dev@2.17.1(@remix-run/react@2.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(@remix-run/serve@2.17.1(typescript@5.9.3))(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0) '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) @@ -14897,7 +14904,7 @@ snapshots: '@remix-run/router': 1.23.0 '@remix-run/server-runtime': 2.17.1(typescript@5.9.3) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(lightningcss@1.30.2)(terser@5.46.0) + '@vanilla-extract/integration': 6.5.0(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(lightningcss@1.30.2)(terser@5.46.1) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -14937,12 +14944,12 @@ snapshots: tar-fs: 2.1.4 tsconfig-paths: 4.2.0 valibot: 0.41.0(typescript@5.9.3) - vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) ws: 7.5.10 optionalDependencies: '@remix-run/serve': 2.17.1(typescript@5.9.3) typescript: 5.9.3 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -15556,7 +15563,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) '@babel/preset-react': 7.28.5(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@svgr/core': 8.1.0(typescript@5.9.3) @@ -15655,7 +15662,7 @@ snapshots: '@tailwindcss/node@4.1.18': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.20.0 + enhanced-resolve: 5.20.1 jiti: 2.6.1 lightningcss: 1.30.2 magic-string: 0.30.21 @@ -15713,19 +15720,19 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@tanstack/devtools-client@0.0.5': dependencies: @@ -15742,11 +15749,11 @@ snapshots: '@tanstack/devtools-event-client@0.4.3': {} - '@tanstack/devtools-vite@0.3.12(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/devtools-vite@0.3.12(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 '@tanstack/devtools-client': 0.0.5 @@ -15754,7 +15761,7 @@ snapshots: chalk: 5.6.2 launch-editor: 2.13.1 picomatch: 4.0.3 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - bufferutil - supports-color @@ -15797,30 +15804,29 @@ snapshots: react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) - '@tanstack/router-core@1.167.3': + '@tanstack/router-core@1.168.1': dependencies: '@tanstack/history': 1.161.6 - '@tanstack/store': 0.9.2 cookie-es: 2.0.0 seroval: 1.5.1 seroval-plugins: 1.5.1(seroval@1.5.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.166.9(@tanstack/router-core@1.167.3)(csstype@3.2.3)': + '@tanstack/router-devtools-core@1.167.0(@tanstack/router-core@1.168.1)(csstype@3.2.3)': dependencies: - '@tanstack/router-core': 1.167.3 + '@tanstack/router-core': 1.168.1 clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) tiny-invariant: 1.3.3 optionalDependencies: csstype: 3.2.3 - '@tanstack/router-generator@1.166.11': + '@tanstack/router-generator@1.166.15': dependencies: - '@tanstack/router-core': 1.167.3 + '@tanstack/router-core': 1.168.1 '@tanstack/router-utils': 1.161.6 - '@tanstack/virtual-file-routes': 1.161.6 + '@tanstack/virtual-file-routes': 1.161.7 prettier: 3.8.1 recast: 0.23.11 source-map: 0.7.6 @@ -15829,7 +15835,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.166.12(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': + '@tanstack/router-plugin@1.167.1(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -15837,30 +15843,30 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/router-core': 1.167.3 - '@tanstack/router-generator': 1.166.11 + '@tanstack/router-core': 1.168.1 + '@tanstack/router-generator': 1.166.15 '@tanstack/router-utils': 1.161.6 - '@tanstack/virtual-file-routes': 1.161.6 + '@tanstack/virtual-file-routes': 1.161.7 chokidar: 3.6.0 unplugin: 2.3.11 zod: 3.25.76 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-solid: 2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite-plugin-solid: 2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) webpack: 5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)) transitivePeerDependencies: - supports-color - '@tanstack/router-ssr-query-core@1.166.9(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.167.3)': + '@tanstack/router-ssr-query-core@1.167.0(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.168.1)': dependencies: '@tanstack/query-core': 5.90.20 - '@tanstack/router-core': 1.167.3 + '@tanstack/router-core': 1.168.1 '@tanstack/router-utils@1.161.6': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 ansis: 4.2.0 babel-dead-code-elimination: 1.0.12 @@ -15881,71 +15887,70 @@ snapshots: '@tanstack/query-core': 5.90.20 solid-js: 1.9.11 - '@tanstack/solid-router-devtools@1.166.9(@tanstack/router-core@1.167.3)(@tanstack/solid-router@1.167.3(solid-js@1.9.11))(csstype@3.2.3)(solid-js@1.9.11)': + '@tanstack/solid-router-devtools@1.166.10(@tanstack/router-core@1.168.1)(@tanstack/solid-router@1.168.1(solid-js@1.9.11))(csstype@3.2.3)(solid-js@1.9.11)': dependencies: - '@tanstack/router-devtools-core': 1.166.9(@tanstack/router-core@1.167.3)(csstype@3.2.3) - '@tanstack/solid-router': 1.167.3(solid-js@1.9.11) + '@tanstack/router-devtools-core': 1.167.0(@tanstack/router-core@1.168.1)(csstype@3.2.3) + '@tanstack/solid-router': 1.168.1(solid-js@1.9.11) solid-js: 1.9.11 optionalDependencies: - '@tanstack/router-core': 1.167.3 + '@tanstack/router-core': 1.168.1 transitivePeerDependencies: - csstype - '@tanstack/solid-router-ssr-query@1.166.9(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.167.3)(@tanstack/solid-query@5.90.23(solid-js@1.9.11))(@tanstack/solid-router@1.167.3(solid-js@1.9.11))(solid-js@1.9.11)': + '@tanstack/solid-router-ssr-query@1.166.10(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.168.1)(@tanstack/solid-query@5.90.23(solid-js@1.9.11))(@tanstack/solid-router@1.168.1(solid-js@1.9.11))(solid-js@1.9.11)': dependencies: '@tanstack/query-core': 5.90.20 - '@tanstack/router-ssr-query-core': 1.166.9(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.167.3) + '@tanstack/router-ssr-query-core': 1.167.0(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.168.1) '@tanstack/solid-query': 5.90.23(solid-js@1.9.11) - '@tanstack/solid-router': 1.167.3(solid-js@1.9.11) + '@tanstack/solid-router': 1.168.1(solid-js@1.9.11) solid-js: 1.9.11 transitivePeerDependencies: - '@tanstack/router-core' - '@tanstack/solid-router@1.167.3(solid-js@1.9.11)': + '@tanstack/solid-router@1.168.1(solid-js@1.9.11)': dependencies: '@solid-devtools/logger': 0.9.11(solid-js@1.9.11) '@solid-primitives/refs': 1.1.3(solid-js@1.9.11) '@solidjs/meta': 0.29.4(solid-js@1.9.11) '@tanstack/history': 1.161.6 - '@tanstack/router-core': 1.167.3 - '@tanstack/solid-store': 0.9.2(solid-js@1.9.11) + '@tanstack/router-core': 1.168.1 isbot: 5.1.36 solid-js: 1.9.11 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/solid-start-client@1.166.11(solid-js@1.9.11)': + '@tanstack/solid-start-client@1.166.15(solid-js@1.9.11)': dependencies: - '@tanstack/router-core': 1.167.3 - '@tanstack/solid-router': 1.167.3(solid-js@1.9.11) - '@tanstack/start-client-core': 1.166.11 + '@tanstack/router-core': 1.168.1 + '@tanstack/solid-router': 1.168.1(solid-js@1.9.11) + '@tanstack/start-client-core': 1.167.1 solid-js: 1.9.11 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/solid-start-server@1.166.11(solid-js@1.9.11)': + '@tanstack/solid-start-server@1.166.15(solid-js@1.9.11)': dependencies: '@solidjs/meta': 0.29.4(solid-js@1.9.11) '@tanstack/history': 1.161.6 - '@tanstack/router-core': 1.167.3 - '@tanstack/solid-router': 1.167.3(solid-js@1.9.11) - '@tanstack/start-client-core': 1.166.11 - '@tanstack/start-server-core': 1.166.11 + '@tanstack/router-core': 1.168.1 + '@tanstack/solid-router': 1.168.1(solid-js@1.9.11) + '@tanstack/start-client-core': 1.167.1 + '@tanstack/start-server-core': 1.167.1 solid-js: 1.9.11 transitivePeerDependencies: - crossws - '@tanstack/solid-start@1.166.14(solid-js@1.9.11)(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': + '@tanstack/solid-start@1.167.1(solid-js@1.9.11)(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': dependencies: - '@tanstack/solid-router': 1.167.3(solid-js@1.9.11) - '@tanstack/solid-start-client': 1.166.11(solid-js@1.9.11) - '@tanstack/solid-start-server': 1.166.11(solid-js@1.9.11) - '@tanstack/start-client-core': 1.166.11 - '@tanstack/start-plugin-core': 1.166.14(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@tanstack/start-server-core': 1.166.11 + '@tanstack/solid-router': 1.168.1(solid-js@1.9.11) + '@tanstack/solid-start-client': 1.166.15(solid-js@1.9.11) + '@tanstack/solid-start-server': 1.166.15(solid-js@1.9.11) + '@tanstack/start-client-core': 1.167.1 + '@tanstack/start-plugin-core': 1.167.4(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@tanstack/start-server-core': 1.167.1 pathe: 2.0.3 solid-js: 1.9.11 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@rsbuild/core' - '@tanstack/react-router' @@ -15959,34 +15964,29 @@ snapshots: '@tanstack/store': 0.7.7 solid-js: 1.9.11 - '@tanstack/solid-store@0.9.2(solid-js@1.9.11)': - dependencies: - '@tanstack/store': 0.9.2 - solid-js: 1.9.11 - - '@tanstack/start-client-core@1.166.11': + '@tanstack/start-client-core@1.167.1': dependencies: - '@tanstack/router-core': 1.167.3 + '@tanstack/router-core': 1.168.1 '@tanstack/start-fn-stubs': 1.161.6 - '@tanstack/start-storage-context': 1.166.11 + '@tanstack/start-storage-context': 1.166.15 seroval: 1.5.1 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 '@tanstack/start-fn-stubs@1.161.6': {} - '@tanstack/start-plugin-core@1.166.14(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': + '@tanstack/start-plugin-core@1.167.4(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 '@babel/types': 7.29.0 '@rolldown/pluginutils': 1.0.0-beta.40 - '@tanstack/router-core': 1.167.3 - '@tanstack/router-generator': 1.166.11 - '@tanstack/router-plugin': 1.166.12(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@tanstack/router-core': 1.168.1 + '@tanstack/router-generator': 1.166.15 + '@tanstack/router-plugin': 1.167.1(vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(webpack@5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@tanstack/router-utils': 1.161.6 - '@tanstack/start-client-core': 1.166.11 - '@tanstack/start-server-core': 1.166.11 + '@tanstack/start-client-core': 1.167.1 + '@tanstack/start-server-core': 1.167.1 cheerio: 1.2.0 exsolve: 1.0.8 pathe: 2.0.3 @@ -15995,8 +15995,8 @@ snapshots: srvx: 0.11.12 tinyglobby: 0.2.15 ufo: 1.6.3 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) xmlbuilder2: 4.0.3 zod: 3.25.76 transitivePeerDependencies: @@ -16007,29 +16007,27 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-server-core@1.166.11': + '@tanstack/start-server-core@1.167.1': dependencies: '@tanstack/history': 1.161.6 - '@tanstack/router-core': 1.167.3 - '@tanstack/start-client-core': 1.166.11 - '@tanstack/start-storage-context': 1.166.11 + '@tanstack/router-core': 1.168.1 + '@tanstack/start-client-core': 1.167.1 + '@tanstack/start-storage-context': 1.166.15 h3-v2: h3@2.0.1-rc.16 seroval: 1.5.1 tiny-invariant: 1.3.3 transitivePeerDependencies: - crossws - '@tanstack/start-storage-context@1.166.11': + '@tanstack/start-storage-context@1.166.15': dependencies: - '@tanstack/router-core': 1.167.3 + '@tanstack/router-core': 1.168.1 '@tanstack/store@0.7.7': {} - '@tanstack/store@0.9.2': {} - - '@tanstack/virtual-file-routes@1.161.6': {} + '@tanstack/virtual-file-routes@1.161.7': {} - '@trpc/server@11.13.4(typescript@5.9.3)': + '@trpc/server@11.14.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -16048,7 +16046,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -16060,7 +16058,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': @@ -16078,7 +16076,7 @@ snapshots: '@types/cookie@0.6.0': {} - '@types/debug@4.1.12': + '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -16272,7 +16270,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vanilla-extract/css@1.19.0(babel-plugin-macros@3.1.0)': + '@vanilla-extract/css@1.20.0(babel-plugin-macros@3.1.0)': dependencies: '@emotion/hash': 0.9.2 '@vanilla-extract/private': 1.0.9 @@ -16289,21 +16287,21 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(lightningcss@1.30.2)(terser@5.46.0)': + '@vanilla-extract/integration@6.5.0(@types/node@25.5.0)(babel-plugin-macros@3.1.0)(lightningcss@1.30.2)(terser@5.46.1)': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@vanilla-extract/babel-plugin-debug-ids': 1.2.2 - '@vanilla-extract/css': 1.19.0(babel-plugin-macros@3.1.0) + '@vanilla-extract/css': 1.20.0(babel-plugin-macros@3.1.0) esbuild: 0.17.6 eval: 0.1.8 find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.23 - mlly: 1.8.1 + mlly: 1.8.2 outdent: 0.8.0 - vite: 5.4.21(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.0) - vite-node: 1.6.1(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.0) + vite: 5.4.21(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.1) + vite-node: 1.6.1(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -16475,7 +16473,7 @@ snapshots: lodash: 4.17.21 minimatch: 7.4.6 - '@vitejs/plugin-react@5.1.1(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.1(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -16483,11 +16481,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.47 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-react@5.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -16495,7 +16493,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.47 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -16508,29 +16506,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2))': - dependencies: - '@vitest/spy': 4.0.9 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2) - - '@vitest/mocker@4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2) - '@vitest/mocker@4.0.9(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.9': dependencies: @@ -16553,12 +16543,12 @@ snapshots: dependencies: '@vitest/utils': 4.0.9 fflate: 0.8.2 - flatted: 3.4.1 + flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/utils@4.0.9': dependencies: @@ -16654,11 +16644,11 @@ snapshots: js-yaml: 3.14.2 tslib: 2.8.1 - '@zag-js/dom-query@1.36.0': + '@zag-js/dom-query@1.37.0': dependencies: - '@zag-js/types': 1.36.0 + '@zag-js/types': 1.37.0 - '@zag-js/types@1.36.0': + '@zag-js/types@1.37.0': dependencies: csstype: 3.2.3 @@ -16803,14 +16793,14 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.7(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)): + astro-expressive-code@0.41.7(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)): dependencies: - astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) rehype-expressive-code: 0.41.7 astro-theme-toggle@0.8.0: {} - astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: '@astrojs/compiler': 2.13.1 '@astrojs/internal-helpers': 0.7.5 @@ -16865,10 +16855,10 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 - unstorage: 1.17.4(ioredis@5.10.0) + unstorage: 1.17.4(ioredis@5.10.1) vfile: 6.0.3 - vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -16923,7 +16913,7 @@ snapshots: autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001779 + caniuse-lite: 1.0.30001780 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.8 @@ -16954,7 +16944,7 @@ snapshots: babel-dead-code-elimination@1.0.12: dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 transitivePeerDependencies: @@ -17007,15 +16997,15 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 cosmiconfig: 7.1.0 resolve: 1.22.11 - babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -17023,23 +17013,23 @@ snapshots: babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.1(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -17094,7 +17084,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.8: {} + baseline-browser-mapping@2.10.9: {} basic-auth@2.0.1: dependencies: @@ -17116,16 +17106,16 @@ snapshots: better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.11)(vitest@4.0.9): dependencies: - '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0) - '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0)) + '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 '@noble/hashes': 2.0.1 better-call: 1.1.7(zod@4.3.6) defu: 6.1.4 - jose: 6.2.1 - kysely: 0.28.12 + jose: 6.2.2 + kysely: 0.28.14 nanostores: 1.2.0 zod: 4.3.6 optionalDependencies: @@ -17136,20 +17126,20 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) solid-js: 1.9.11 - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.0.9): dependencies: - '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0) - '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0)) + '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 '@noble/hashes': 2.0.1 better-call: 1.1.7(zod@4.3.6) defu: 6.1.4 - jose: 6.2.1 - kysely: 0.28.12 + jose: 6.2.2 + kysely: 0.28.14 nanostores: 1.2.0 zod: 4.3.6 optionalDependencies: @@ -17160,20 +17150,20 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) solid-js: 1.9.11 - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.6.2)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.0.9): dependencies: - '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0) - '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.1)(kysely@0.28.12)(nanostores@1.2.0)) + '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) + '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 '@noble/hashes': 2.0.1 better-call: 1.1.7(zod@4.3.6) defu: 6.1.4 - jose: 6.2.1 - kysely: 0.28.12 + jose: 6.2.2 + kysely: 0.28.14 nanostores: 1.2.0 zod: 4.3.6 optionalDependencies: @@ -17184,7 +17174,7 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) solid-js: 1.9.11 - vitest: 4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) better-call@1.1.7(zod@4.3.6): dependencies: @@ -17296,9 +17286,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.10.8 - caniuse-lite: 1.0.30001779 - electron-to-chromium: 1.5.313 + baseline-browser-mapping: 2.10.9 + caniuse-lite: 1.0.30001780 + electron-to-chromium: 1.5.321 node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -17407,7 +17397,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001779: {} + caniuse-lite@1.0.30001780: {} caseless@0.12.0: {} @@ -17457,7 +17447,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.24.4 + undici: 7.24.5 whatwg-mimetype: 4.0.0 chevrotain@10.5.0: @@ -17644,7 +17634,7 @@ snapshots: depd: 2.0.0 keygrip: 1.1.0 - core-js-compat@3.48.0: + core-js-compat@3.49.0: dependencies: browserslist: 4.28.1 @@ -17879,7 +17869,7 @@ snapshots: dotenv-expand@11.0.7: dependencies: - dotenv: 16.6.1 + dotenv: 16.4.7 dotenv@16.4.7: {} @@ -17951,7 +17941,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.313: {} + electron-to-chromium@1.5.321: {} emittery@0.13.1: {} @@ -17980,7 +17970,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.20.0: + enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -18456,7 +18446,7 @@ snapshots: fast-check@4.6.0: dependencies: - pure-rand: 8.1.0 + pure-rand: 8.3.0 fast-deep-equal@3.1.3: {} @@ -18556,13 +18546,13 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.4.1 + flatted: 3.4.2 keyv: 4.5.4 rimraf: 3.0.2 flat@5.0.2: {} - flatted@3.4.1: {} + flatted@3.4.2: {} flattie@1.1.1: {} @@ -18833,7 +18823,7 @@ snapshots: pumpify: 1.5.1 through2: 2.0.5 - h3@1.15.6: + h3@1.15.9: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 @@ -19234,7 +19224,7 @@ snapshots: i18next@23.16.8: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 iconv-lite@0.4.24: dependencies: @@ -19290,7 +19280,7 @@ snapshots: inline-style-parser@0.2.7: {} - ioredis@5.10.0: + ioredis@5.10.1: dependencies: '@ioredis/commands': 1.5.1 cluster-key-slot: 1.1.2 @@ -19462,7 +19452,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.4 @@ -19781,7 +19771,7 @@ snapshots: jiti@2.6.1: {} - jose@6.2.1: {} + jose@6.2.2: {} js-tokens@4.0.0: {} @@ -19944,7 +19934,7 @@ snapshots: kysely@0.28.11: {} - kysely@0.28.12: {} + kysely@0.28.14: {} launch-editor@2.13.1: dependencies: @@ -20040,7 +20030,7 @@ snapshots: local-pkg@1.1.2: dependencies: - mlly: 1.8.1 + mlly: 1.8.2 pkg-types: 2.3.0 quansync: 0.2.11 @@ -20103,7 +20093,7 @@ snapshots: dependencies: date-format: 4.0.14 debug: 4.4.3 - flatted: 3.4.1 + flatted: 3.4.2 rfdc: 1.4.1 streamroller: 3.1.5 transitivePeerDependencies: @@ -20161,7 +20151,7 @@ snapshots: magicast@0.5.2: dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 source-map-js: 1.2.1 @@ -20483,7 +20473,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 media-typer@0.3.0: {} @@ -20944,7 +20934,7 @@ snapshots: micromark@3.2.0: dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3 decode-named-character-reference: 1.3.0 micromark-core-commonmark: 1.1.0 @@ -20966,7 +20956,7 @@ snapshots: micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 @@ -21074,7 +21064,7 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.8.1: + mlly@1.8.2: dependencies: acorn: 8.16.0 pathe: 2.0.3 @@ -21643,7 +21633,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.1 + mlly: 1.8.2 pathe: 2.0.3 pkg-types@2.3.0: @@ -21892,7 +21882,7 @@ snapshots: pure-rand@7.0.1: {} - pure-rand@8.1.0: {} + pure-rand@8.3.0: {} qs@6.13.0: dependencies: @@ -22416,7 +22406,7 @@ snapshots: safer-buffer@2.1.2: {} - sax@1.5.0: {} + sax@1.6.0: {} saxes@6.0.0: dependencies: @@ -22644,7 +22634,7 @@ snapshots: '@types/node': 24.12.0 '@types/sax': 1.2.7 arg: 5.0.2 - sax: 1.5.0 + sax: 1.6.0 slash@3.0.0: {} @@ -22769,18 +22759,18 @@ snapshots: standard-as-callback@2.1.0: {} - starlight-sidebar-topics-dropdown@0.5.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))): + starlight-sidebar-topics-dropdown@0.5.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))): dependencies: - '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) - starlight-sidebar-topics: 0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + starlight-sidebar-topics: 0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) - starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)): + starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)): dependencies: - '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) - astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + astro: 5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) picomatch: 4.0.3 - starlight-theme-nova@0.10.0(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(typescript@5.9.3): + starlight-theme-nova@0.10.0(@astrojs/starlight@0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)))(typescript@5.9.3): dependencies: '@aria-ui/core': 0.0.22 '@pagefind/default-ui': 1.4.0 @@ -22794,7 +22784,7 @@ snapshots: remark-custom-header-id: 1.0.0 shiki-twoslash-renderer: 0.1.0(typescript@5.9.3) optionalDependencies: - '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) + '@astrojs/starlight': 0.36.3(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) transitivePeerDependencies: - supports-color - typescript @@ -22825,7 +22815,7 @@ snapshots: transitivePeerDependencies: - supports-color - streamx@2.23.0: + streamx@2.25.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 @@ -22929,7 +22919,7 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.5.0 + sax: 1.6.0 svgo@4.0.1: dependencies: @@ -22939,7 +22929,7 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.5.0 + sax: 1.6.0 symbol-tree@3.2.4: {} @@ -22976,7 +22966,7 @@ snapshots: dependencies: b4a: 1.8.0 fast-fifo: 1.3.2 - streamx: 2.23.0 + streamx: 2.25.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -23002,12 +22992,12 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 + terser: 5.46.1 webpack: 5.105.4(@swc/core@1.15.8(@swc/helpers@0.5.19)) optionalDependencies: '@swc/core': 1.15.8(@swc/helpers@0.5.19) - terser@5.46.0: + terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 @@ -23060,15 +23050,15 @@ snapshots: tldts-core@6.1.86: {} - tldts-core@7.0.26: {} + tldts-core@7.0.27: {} tldts@6.1.86: dependencies: tldts-core: 6.1.86 - tldts@7.0.26: + tldts@7.0.27: dependencies: - tldts-core: 7.0.26 + tldts-core: 7.0.27 tmp@0.2.5: {} @@ -23090,7 +23080,7 @@ snapshots: tough-cookie@6.0.1: dependencies: - tldts: 7.0.26 + tldts: 7.0.27 tr46@0.0.3: {} @@ -23104,13 +23094,13 @@ snapshots: trough@2.2.0: {} - trpc-cli@0.12.4(@trpc/server@11.13.4(typescript@5.9.3))(effect@4.0.0-beta.33)(valibot@1.2.0(typescript@5.9.3))(zod@4.3.6): + trpc-cli@0.12.4(@trpc/server@11.14.0(typescript@5.9.3))(effect@4.0.0-beta.33)(valibot@1.3.1(typescript@5.9.3))(zod@4.3.6): dependencies: commander: 14.0.3 optionalDependencies: - '@trpc/server': 11.13.4(typescript@5.9.3) + '@trpc/server': 11.14.0(typescript@5.9.3) effect: 4.0.0-beta.33 - valibot: 1.2.0(typescript@5.9.3) + valibot: 1.3.1(typescript@5.9.3) zod: 4.3.6 ts-patch@3.3.0: @@ -23202,15 +23192,15 @@ snapshots: uglify-js@3.19.3: optional: true - ultracite@6.3.6(effect@4.0.0-beta.33)(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3)): + ultracite@6.3.6(effect@4.0.0-beta.33)(typescript@5.9.3)(valibot@1.3.1(typescript@5.9.3)): dependencies: '@clack/prompts': 0.11.0 - '@trpc/server': 11.13.4(typescript@5.9.3) + '@trpc/server': 11.14.0(typescript@5.9.3) deepmerge: 4.3.1 glob: 12.0.0 jsonc-parser: 3.3.1 nypm: 0.6.5 - trpc-cli: 0.12.4(@trpc/server@11.13.4(typescript@5.9.3))(effect@4.0.0-beta.33)(valibot@1.2.0(typescript@5.9.3))(zod@4.3.6) + trpc-cli: 0.12.4(@trpc/server@11.14.0(typescript@5.9.3))(effect@4.0.0-beta.33)(valibot@1.3.1(typescript@5.9.3))(zod@4.3.6) zod: 4.3.6 transitivePeerDependencies: - '@orpc/server' @@ -23231,7 +23221,7 @@ snapshots: undici@6.24.1: {} - undici@7.24.4: {} + undici@7.24.5: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -23401,18 +23391,18 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unstorage@1.17.4(ioredis@5.10.0): + unstorage@1.17.4(ioredis@5.10.1): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 destr: 2.0.5 - h3: 1.15.6 + h3: 1.15.9 lru-cache: 11.2.7 node-fetch-native: 1.6.7 ofetch: 1.5.1 ufo: 1.6.3 optionalDependencies: - ioredis: 5.10.0 + ioredis: 5.10.1 upath@2.0.1: {} @@ -23471,6 +23461,10 @@ snapshots: optionalDependencies: typescript: 5.9.3 + valibot@1.3.1(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -23577,13 +23571,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@1.6.1(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.0): + vite-node@1.6.1(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.1): dependencies: cac: 6.7.14 debug: 4.4.3 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.21(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.0) + vite: 5.4.21(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.1) transitivePeerDependencies: - '@types/node' - less @@ -23595,13 +23589,13 @@ snapshots: - supports-color - terser - vite-node@3.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -23616,13 +23610,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -23637,12 +23631,12 @@ snapshots: - tsx - yaml - vite-plugin-lucide-preprocess@1.4.6(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-lucide-preprocess@1.4.6(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: magic-string: 0.30.21 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-solid@2.11.11(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 @@ -23650,23 +23644,23 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.11 solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - supports-color - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2) transitivePeerDependencies: - supports-color - typescript - vite@5.4.21(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.0): + vite@5.4.21(@types/node@25.5.0)(lightningcss@1.30.2)(terser@5.46.1): dependencies: esbuild: 0.21.5 postcss: 8.5.8 @@ -23675,9 +23669,9 @@ snapshots: '@types/node': 25.5.0 fsevents: 2.3.3 lightningcss: 1.30.2 - terser: 5.46.0 + terser: 5.46.1 - vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -23690,11 +23684,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2): + vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.3) @@ -23707,11 +23701,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.20.6 yaml: 2.8.2 - vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.3) @@ -23724,11 +23718,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.3) @@ -23741,22 +23735,22 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vitefu@1.1.2(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vitefu@1.1.2(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: - vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu@1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vitefu@1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vitest@4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2): + vitest@4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2)) + '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.9 '@vitest/runner': 4.0.9 '@vitest/snapshot': 4.0.9 @@ -23773,10 +23767,10 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.20.6)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 '@types/node': 20.19.25 '@vitest/ui': 4.0.9(vitest@4.0.9) jsdom: 27.2.0 @@ -23794,10 +23788,10 @@ snapshots: - tsx - yaml - vitest@4.0.9(@types/debug@4.1.12)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.9 '@vitest/runner': 4.0.9 '@vitest/snapshot': 4.0.9 @@ -23814,10 +23808,10 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 '@types/node': 20.19.25 '@vitest/ui': 4.0.9(vitest@4.0.9) jsdom: 27.2.0 @@ -23835,10 +23829,10 @@ snapshots: - tsx - yaml - vitest@4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.9 '@vitest/runner': 4.0.9 '@vitest/snapshot': 4.0.9 @@ -23855,10 +23849,10 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 '@types/node': 25.5.0 '@vitest/ui': 4.0.9(vitest@4.0.9) jsdom: 27.2.0 @@ -23923,7 +23917,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.0 + enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8c4bff97..a711bd51 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -15,12 +15,11 @@ catalog: '@effect-atom/atom': 0.5.0 '@effect/atom-solid': 4.0.0-beta.33 '@effect/build-utils': 0.8.9 - '@effect/cli': ^0.56.0 - '@effect/experimental': 0.58.0 + '@effect/experimental': 0.59.0 '@effect/language-service': 0.56.0 '@effect/platform': 4.0.0-beta.33 '@effect/platform-node': 4.0.0-beta.33 - '@effect/vitest': 0.27.0 + '@effect/vitest': 4.0.0-beta.33 '@kobalte/core': 0.13.11 '@nx/js': 22.5.4 '@nx/node': 22.5.4 diff --git a/tsconfig.base.json b/tsconfig.base.json index 6964db59..d21f6c19 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,4 +1,5 @@ { + "exclude": ["./.effect-reference"], "compilerOptions": { "importHelpers": true, "isolatedModules": true, From 9284585f22d48a3485a4b14d0af65a9ded73268a Mon Sep 17 00:00:00 2001 From: Andres J Date: Sat, 21 Mar 2026 01:01:06 -0600 Subject: [PATCH 03/26] Refactor RenderService and update template schemas - Refactored RenderService to improve error handling in the render method. - Updated template schemas to use Schema.Schema.Type for type definitions. - Changed Layer.scoped to Layer.effect in PrismaClient layer definitions. - Updated various template files to reflect changes in the Effect API. - Added a new test file for Effect API to validate runtime exports and effect execution. - Modified existing tests to use a new SQLite adapter and improved UUID handling. --- packages/prisma/prisma/dev.db | Bin 53248 -> 53248 bytes packages/prisma/prisma/schema.prisma | 8 +- packages/prisma/src/cli.ts | 16 +- packages/prisma/src/commands/prisma.ts | 303 ++++++++++++++---- packages/prisma/src/runtime/index.ts | 25 ++ .../src/schema-generator/effect/generator.ts | 19 +- .../src/schema-generator/effect/type.ts | 7 +- packages/prisma/src/schema-generator/index.ts | 14 +- .../prisma/src/services/formatter-service.ts | 24 +- .../prisma/src/services/generator-service.ts | 1 - .../prisma/src/services/render-service.ts | 32 +- .../src/templates/effect-branded-id.eta | 2 +- .../src/templates/index-custom-error.eta | 8 +- .../prisma/src/templates/index-default.eta | 8 +- .../src/templates/prisma-repository.eta | 2 +- .../prisma/src/templates/prisma-schema.eta | 18 +- packages/prisma/test-effect-api.mjs | 31 ++ packages/prisma/test/prisma-model.test.ts | 257 ++++++++++----- 18 files changed, 575 insertions(+), 200 deletions(-) create mode 100644 packages/prisma/test-effect-api.mjs diff --git a/packages/prisma/prisma/dev.db b/packages/prisma/prisma/dev.db index d43ad607e26340433101ac8f5e13c4c4b61ca49f..ccc33f13f575cc7ea741ac6369a5401e7b6efdd6 100644 GIT binary patch delta 25 hcmZozz}&Ead4d!Zr@%xRCpJz22EE?j8&l?-2LNAe2v7h3 delta 25 hcmZozz}&Ead4d!Z$Ek@jPHY^f81#C7ZA_VS9sqE?3BdpW diff --git a/packages/prisma/prisma/schema.prisma b/packages/prisma/prisma/schema.prisma index 492a2e4d..305bf6a8 100644 --- a/packages/prisma/prisma/schema.prisma +++ b/packages/prisma/prisma/schema.prisma @@ -7,10 +7,10 @@ generator client { } generator effect { - provider = "tsx ./src/cli.ts" - output = "./generated/effect" // relative to the schema.prisma file, e.g. prisma/generated/effect - clientImport = "../client/index.js" - clientImportPath = "../client.js" // relative to the output path ^here (defaults to "@prisma/client") + provider = "tsx ./src/cli.ts" + output = "./generated/effect" // relative to the schema.prisma file, e.g. prisma/generated/effect + clientImport = "../client/index.js" + clientImportPath = "../client.js" // relative to the output path ^here (defaults to "@prisma/client") importFileExtension = "js" } diff --git a/packages/prisma/src/cli.ts b/packages/prisma/src/cli.ts index 637899b1..74559524 100755 --- a/packages/prisma/src/cli.ts +++ b/packages/prisma/src/cli.ts @@ -11,9 +11,12 @@ import { GeneratorService } from "./services/generator-service.js" import { RenderService } from "./services/render-service.js" import { FormatterService } from "./services/formatter-service.js" -const cli = Command.run(prismaCommand.pipe(Command.withSubcommands([initCommand])), { - version: "0.1.0", -}) +const cli = Command.run( + prismaCommand.pipe(Command.withSubcommands([initCommand])), + { + version: "0.1.0", + }, +) const GeneratorLayer = GeneratorService.layer.pipe( Layer.provide(RenderService.layer), @@ -21,6 +24,11 @@ const GeneratorLayer = GeneratorService.layer.pipe( Layer.provide(NodeServices.layer), ) -const MainLayer = Layer.mergeAll(GeneratorLayer, RenderService.layer, FormatterService.layer, NodeServices.layer) +const MainLayer = Layer.mergeAll( + GeneratorLayer, + RenderService.layer, + FormatterService.layer, + NodeServices.layer, +) cli.pipe(Effect.provide(MainLayer), NodeRuntime.runMain) diff --git a/packages/prisma/src/commands/prisma.ts b/packages/prisma/src/commands/prisma.ts index 0e610f7f..e94b26a5 100644 --- a/packages/prisma/src/commands/prisma.ts +++ b/packages/prisma/src/commands/prisma.ts @@ -1,73 +1,254 @@ -import * as Cause from "effect/Cause" import * as Command from "effect/unstable/cli/Command" -import type * as NodeServices from "@effect/platform-node/NodeServices" -import type { GeneratorOptions } from "@prisma/generator-helper" +import type { DMMF, GeneratorOptions } from "@prisma/generator-helper" import generatorHelper from "@prisma/generator-helper" -import * as Deferred from "effect/Deferred" import * as Effect from "effect/Effect" -import * as Layer from "effect/Layer" -import * as Queue from "effect/Queue" -import * as Stream from "effect/Stream" -import { GeneratorContext } from "../services/generator-context.js" -import { GeneratorService } from "../services/generator-service.js" -import type { RenderService } from "../services/render-service.js" +import * as fs from "node:fs" +import * as path from "node:path" +import { fileURLToPath } from "node:url" +import { Eta } from "eta" +import { createFromBuffer } from "@dprint/formatter" +import { getPath } from "@dprint/typescript" +import * as EnumGenerator from "../schema-generator/effect/enum.js" +import * as EffectGenerator from "../schema-generator/effect/generator.js" +import * as JoinTableGenerator from "../schema-generator/effect/join-table.js" +import * as KyselyGenerator from "../schema-generator/kysely/generator.js" +import * as PrismaGenerator from "../schema-generator/prisma/generator.js" -// Pattern based on: .effect-reference/packages/platform-node-shared/src/NodeFileSystem.ts (watchNode) -// Stream.callback receives a queue, and we use Effect.runFork to execute effects from callbacks +// Pattern: Direct async wrapper with Effect.runPromise + sync I/O. +// +// The deadlock was caused by Stream.callback + Queue.offer + Deferred.await: +// - Fork fiber blocked on Queue.offer (no main fiber batting yet) +// - Main fiber blocked in Stream.runForEach (waiting for Stream.callback acquire to return) +// - Deadlock +// +// The fix: eliminate the queue and Effect fiber coordination entirely. +// Just call Effect.runPromise directly with sync Node.js fs inside onGenerate. +// The async callback from Prisma handles the concurrency, Effect just provides the runtime. export const prismaCommand = Command.make("prisma", {}, () => Effect.gen(function*() { - const generator = yield* GeneratorService - const runtime = yield* Effect.services< - GeneratorService | RenderService | NodeServices.NodeServices - >() - const run = Effect.runForkWith(runtime) - - // Stream.callback pattern from v4 - // The callback receives a queue and must return an Effect for setup/cleanup - const events = Stream.callback< - [GeneratorOptions, Deferred.Deferred], - never - >((queue) => - Effect.acquireRelease( - Effect.sync(() => { - // Setup del generator handler de Prisma (sync callback) - generatorHelper.generatorHandler({ - onManifest() { - return { - defaultOutput: "../generated/effect", - prettyName: "Prisma Effect Generator", - requiresEngines: [], + // Initialize Eta and dprint once (at CLI startup, not per-generation) + const templatesDir = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "../templates", + ) + const eta = new Eta({ views: templatesDir, autoEscape: false }) + const dprintFormatter = createFromBuffer(fs.readFileSync(getPath())) + + generatorHelper.generatorHandler({ + onManifest() { + return { + defaultOutput: "../generated/effect", + prettyName: "Prisma Effect Generator", + requiresEngines: [], + } + }, + async onGenerate(options: GeneratorOptions) { + // Run the entire generation synchronously via Effect.runPromise. + // All actual I/O is direct Node.js sync fs calls — no Effect fiber blocking. + await Effect.runPromise( + Effect.sync(() => { + const outputDir = options.generator.output?.value + if (!outputDir) { + throw new Error("No output directory specified") + } + + const models = options.dmmf.datamodel.models + const clientImportPath = Array.isArray( + options.generator.config.clientImportPath, + ) + ? options.generator.config.clientImportPath[0] + : options.generator.config.clientImportPath ?? "@prisma/client" + + const formatAndWrite = ( + templateName: string, + data: Record, + fileName: string, + baseDir?: string, + ) => { + const content = eta.render(templateName, data) + const formatted = dprintFormatter.formatText({ + filePath: fileName, + fileText: content, + }) + fs.writeFileSync( + path.join(baseDir ?? outputDir, fileName), + formatted, + "utf8", + ) + } + + // Create output directory + fs.mkdirSync(outputDir, { recursive: true }) + + // ======================================== + // Generate schemas/ directory (Effect schemas) + // ======================================== + const schemasDir = path.join(outputDir, "schemas") + fs.mkdirSync(schemasDir, { recursive: true }) + + const schemasFormatAndWrite = ( + templateName: string, + data: Record, + fileName: string, + ) => { + const content = eta.render(templateName, data) + const formatted = dprintFormatter.formatText({ + filePath: fileName, + fileText: content, + }) + fs.writeFileSync( + path.join(schemasDir, fileName), + formatted, + "utf8", + ) + } + + const enums = PrismaGenerator.getEnums(options.dmmf) + const joinTables = PrismaGenerator.getManyToManyJoinTables( + options.dmmf, + ) + const hasEnums = enums.length > 0 + + // Generate enums.ts + const enumsData = EnumGenerator.prepareEnumsData(enums) + if (enumsData) { + schemasFormatAndWrite("effect-enums", enumsData, "enums.ts") + } + + // Generate types.ts + const headerData = EffectGenerator.prepareTypesHeaderData( + options.dmmf, + hasEnums, + ) + let typesContent = eta.render("effect-types-header", headerData) + + // Branded IDs + type BrandedIdData = { name: string; baseType: string } | null + const brandedIdsRaw = models.map( + (model: DMMF.Model): BrandedIdData => { + const fields = PrismaGenerator.getModelFields(model) + return EffectGenerator.prepareBrandedIdSchemaData( + model, + fields, + ) + }, + ) + const brandedIdsData = brandedIdsRaw.filter( + (d: BrandedIdData): d is { name: string; baseType: string } => d !== null, + ) + + if (brandedIdsData.length > 0) { + typesContent += `\n\n// ===== Branded ID Schemas =====` + for (const data of brandedIdsData) { + const idContent = eta.render("effect-branded-id", data) + typesContent += `\n\n${idContent}` } - }, - async onGenerate(options) { - // Use Effect.runFork to execute effects from async callback - // This maintains effect tracking while being called from external async code - run( - Effect.gen(function*() { - const deferred = yield* Deferred.make() - // Emit to stream via Queue.offer (v4 API) - yield* Queue.offer(queue, [options, deferred]) - // Wait for generator.generate to complete (Stream.runForEach will complete deferred) - yield* Deferred.await(deferred) - }), + } + + // Models + const modelsData = models.map((model: DMMF.Model) => { + const fields = PrismaGenerator.getModelFields(model) + return EffectGenerator.prepareModelSchemaData( + options.dmmf, + model, + fields, ) - }, - }) - }), - // Cleanup - nothing to release for prisma generator - () => Effect.void, - ) - ) + }) + + if (modelsData.length > 0) { + typesContent += `\n\n// ===== Model Schemas =====` + for (const data of modelsData) { + const modelContent = eta.render("effect-model", data) + typesContent += `\n\n${modelContent}` + } + } + + // Join Tables + const joinTablesData = joinTables.map((jt) => JoinTableGenerator.prepareJoinTableData(jt, options.dmmf)) + if (joinTablesData.length > 0) { + for (const data of joinTablesData) { + const jtContent = eta.render("effect-join-table", data) + typesContent += `\n\n${jtContent}` + } + } + + // DB Interface + const dbInterfaceData = KyselyGenerator.prepareDBInterfaceData( + models, + joinTables, + ) + const dbInterfaceContent = eta.render( + "kysely-db-interface", + dbInterfaceData, + ) + typesContent += `\n\n${dbInterfaceContent}` + + const formattedTypes = dprintFormatter.formatText({ + filePath: "types.ts", + fileText: typesContent, + }) + fs.writeFileSync( + path.join(schemasDir, "types.ts"), + formattedTypes, + "utf8", + ) + + // Generate schemas/index.ts + const indexData = KyselyGenerator.prepareIndexData(hasEnums) + schemasFormatAndWrite("effect-index", indexData, "index.ts") - yield* events.pipe( - Stream.runForEach((item) => { - const [options, deferred] = item - return generator.generate.pipe( - Effect.provide(Layer.succeed(GeneratorContext, options)), - Effect.flatMap(() => Deferred.complete(deferred, Effect.void)), - Effect.catchCause((cause: Cause.Cause) => Deferred.complete(deferred, Effect.failCause(cause))), + // ======================================== + // Generate prisma-schema.ts + // ======================================== + formatAndWrite("prisma-schema", {}, "prisma-schema.ts") + + // Generate prisma-repository.ts + formatAndWrite( + "prisma-repository", + { clientImportPath }, + "prisma-repository.ts", + ) + + // Generate model files + fs.mkdirSync(path.join(outputDir, "models"), { recursive: true }) + for (const model of models) { + const modelContent = eta.render("model", { model }) + const formatted = dprintFormatter.formatText({ + filePath: `${model.name}.ts`, + fileText: modelContent, + }) + fs.writeFileSync( + path.join(outputDir, "models", `${model.name}.ts`), + formatted, + "utf8", + ) + } + + // Generate index.ts + const modelExports = models + .map( + (m: { name: string }) => `export * from "./models/${m.name}.js"`, + ) + .join("\n") + const indexContent = eta.render("index-default", { + clientImportPath, + modelExports, + }) + const formattedIndex = dprintFormatter.formatText({ + filePath: "index.ts", + fileText: indexContent, + }) + fs.writeFileSync( + path.join(outputDir, "index.ts"), + formattedIndex, + "utf8", + ) + }), ) - }), - ) + }, + }) + + // Handler is registered, command completes + yield* Effect.sync(() => {}) })) diff --git a/packages/prisma/src/runtime/index.ts b/packages/prisma/src/runtime/index.ts index 45dcdf2f..674a4c39 100644 --- a/packages/prisma/src/runtime/index.ts +++ b/packages/prisma/src/runtime/index.ts @@ -299,6 +299,31 @@ export type Insertable = CustomInsertable */ export type Updateable = CustomUpdateable +// ============================================================================ +// Runtime Schema Helpers +// ============================================================================ + +/** + * Mark a schema field as database-generated. + * + * At runtime, this function returns the schema unchanged. + * The Generated type information is used by Kysely for INSERT/UPDATE type inference. + * + * For full Effect Schema v4 integration, consider using: + * import { Model } from "effect/unstable/schema" + * Model.Generated + * + * @example + * export const Todo = Schema.Struct({ + * id: generated(TodoId), // Auto-generated ID + * published: generated(Schema.Boolean), // Default value + * }); + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function generated(schema: S): S { + return schema +} + // ============================================================================ // Schema Helpers for v4 // ============================================================================ diff --git a/packages/prisma/src/schema-generator/effect/generator.ts b/packages/prisma/src/schema-generator/effect/generator.ts index 6509a996..42bc1da8 100644 --- a/packages/prisma/src/schema-generator/effect/generator.ts +++ b/packages/prisma/src/schema-generator/effect/generator.ts @@ -6,7 +6,10 @@ import { generateFileHeader } from "../utils/codegen.js" import { toPascalCase } from "../utils/naming.js" import { buildFieldType } from "./type.js" -export const prepareBrandedIdSchemaData = (model: DMMF.Model, fields: readonly DMMF.Field[]) => { +export const prepareBrandedIdSchemaData = ( + model: DMMF.Model, + fields: readonly DMMF.Field[], +) => { const idField = fields.find((f) => f.isId) if (!idField) { return null @@ -17,7 +20,8 @@ export const prepareBrandedIdSchemaData = (model: DMMF.Model, fields: readonly D let baseType: string if (isUuid) { - baseType = "Schema.UUID" + // Prisma validates UUIDs at the database level, so we use Schema.String directly + baseType = "Schema.String" } else if (idField.type === "Int") { baseType = "Schema.Number.pipe(Schema.positive())" } else { @@ -27,7 +31,11 @@ export const prepareBrandedIdSchemaData = (model: DMMF.Model, fields: readonly D return { name, baseType } } -export const prepareModelSchemaData = (dmmf: DMMF.Document, model: DMMF.Model, fields: readonly DMMF.Field[]) => { +export const prepareModelSchemaData = ( + dmmf: DMMF.Document, + model: DMMF.Model, + fields: readonly DMMF.Field[], +) => { const fkMap = buildForeignKeyMap(model, dmmf.datamodel.models) const name = toPascalCase(model.name) @@ -40,7 +48,10 @@ export const prepareModelSchemaData = (dmmf: DMMF.Document, model: DMMF.Model, f return { name, fields: fieldDefinitions } } -export const prepareTypesHeaderData = (dmmf: DMMF.Document, hasEnums: boolean) => { +export const prepareTypesHeaderData = ( + dmmf: DMMF.Document, + hasEnums: boolean, +) => { const header = generateFileHeader() const enumImports = hasEnums ? dmmf.datamodel.enums.map((e) => toPascalCase(e.name)).join(", ") diff --git a/packages/prisma/src/schema-generator/effect/type.ts b/packages/prisma/src/schema-generator/effect/type.ts index 1c3df37f..ae6ca84e 100644 --- a/packages/prisma/src/schema-generator/effect/type.ts +++ b/packages/prisma/src/schema-generator/effect/type.ts @@ -7,7 +7,7 @@ import { toPascalCase } from "../utils/naming.js" * Prisma scalar type mapping to Effect Schema types * Uses const assertion to avoid type guards * - * Note: DateTime uses Schema.DateFromSelf (not Schema.Date) so that: + * Note: DateTime uses Schema.DateTimeUtc (not Schema.Date) so that: * - Type = Date (runtime) * - Encoded = Date (database) * This allows Kysely to work with native Date objects directly. @@ -20,7 +20,7 @@ const PRISMA_SCALAR_MAP = { BigInt: "Schema.BigInt", Decimal: "Schema.String", // For precision Boolean: "Schema.Boolean", - DateTime: "Schema.DateFromSelf", // Native Date type for Kysely compatibility + DateTime: "Schema.DateTimeUtc", // Native Date type for Kysely compatibility Json: "Schema.Unknown", // Safe unknown type Bytes: "Schema.Uint8Array", } as const @@ -52,8 +52,9 @@ export function mapFieldToEffectType( } // PRIORITY 3: Handle String type with UUID detection (non-FK UUIDs) + // Prisma validates UUIDs at the database level, so we use Schema.String directly if (field.type === "String" && isUuidField(field)) { - return "Schema.UUID" + return "Schema.String" } // PRIORITY 4: Handle scalar types with const assertion lookup diff --git a/packages/prisma/src/schema-generator/index.ts b/packages/prisma/src/schema-generator/index.ts index 8fe0c7ee..5adcf0c9 100644 --- a/packages/prisma/src/schema-generator/index.ts +++ b/packages/prisma/src/schema-generator/index.ts @@ -23,10 +23,14 @@ export const generateSchemas = (dmmf: DMMF.Document, outputDir: string) => yield* fs.makeDirectory(outputDir, { recursive: true }) - const writeFile = (filename: string, content: string) => + // Write schemas/ files into a "schemas" subdirectory for proper module resolution + const schemasDir = path.join(outputDir, "schemas") + yield* fs.makeDirectory(schemasDir, { recursive: true }) + + const writeSchemaFile = (filename: string, content: string) => Effect.gen(function*() { const formatted = yield* format(content) - const filePath = path.join(outputDir, filename) + const filePath = path.join(schemasDir, filename) yield* fs.writeFileString(filePath, formatted) }) @@ -35,7 +39,7 @@ export const generateSchemas = (dmmf: DMMF.Document, outputDir: string) => const enumsData = EnumGenerator.prepareEnumsData(enums) if (enumsData) { const content = yield* render("effect-enums", enumsData) - yield* writeFile("enums.ts", content) + yield* writeSchemaFile("enums.ts", content) } // Generate Types @@ -97,10 +101,10 @@ export const generateSchemas = (dmmf: DMMF.Document, outputDir: string) => ) content += `\n\n${dbInterfaceContent}` - yield* writeFile("types.ts", content) + yield* writeSchemaFile("types.ts", content) // Index const indexData = KyselyGenerator.prepareIndexData(hasEnums) const indexContent = yield* render("effect-index", indexData) - yield* writeFile("index.ts", indexContent) + yield* writeSchemaFile("index.ts", indexContent) }) diff --git a/packages/prisma/src/services/formatter-service.ts b/packages/prisma/src/services/formatter-service.ts index 449240df..55d8c8b0 100644 --- a/packages/prisma/src/services/formatter-service.ts +++ b/packages/prisma/src/services/formatter-service.ts @@ -5,20 +5,26 @@ import { createFromBuffer } from "@dprint/formatter" import { getPath } from "@dprint/typescript" import * as fs from "node:fs" - -export class FormatterService extends ServiceMap.Service Effect.Effect -}>()("FormatterService", { +export class FormatterService extends ServiceMap.Service< + FormatterService, + { + readonly format: (code: string) => Effect.Effect + } +>()("FormatterService", { make: Effect.gen(function*() { const buffer = fs.readFileSync(getPath()) const formatter = createFromBuffer(buffer) return { - format: (code: string) => - Effect.try({ - try: () => formatter.formatText({ filePath: "file.ts", fileText: code }), - catch: (error) => new Error(`Failed to format code: ${error}`), - }), + format: (code: string): Effect.Effect => { + try { + return Effect.succeed( + formatter.formatText({ filePath: "file.ts", fileText: code }), + ) + } catch (error) { + return Effect.fail(new Error(`Failed to format code: ${error}`)) + } + }, } }), }) { diff --git a/packages/prisma/src/services/generator-service.ts b/packages/prisma/src/services/generator-service.ts index af071c5b..4c58430b 100644 --- a/packages/prisma/src/services/generator-service.ts +++ b/packages/prisma/src/services/generator-service.ts @@ -6,7 +6,6 @@ import * as Layer from "effect/Layer" import { GeneratorContext } from "./generator-context.js" import { RenderService } from "./render-service.js" import { FormatterService } from "./formatter-service.js" - import { generateSchemas } from "../schema-generator/index.js" import * as ServiceMap from "effect/ServiceMap" diff --git a/packages/prisma/src/services/render-service.ts b/packages/prisma/src/services/render-service.ts index 9aa75dcb..caada796 100644 --- a/packages/prisma/src/services/render-service.ts +++ b/packages/prisma/src/services/render-service.ts @@ -5,10 +5,15 @@ import { Eta } from "eta" import * as path from "node:path" import { fileURLToPath } from "node:url" - -export class RenderService extends ServiceMap.Service) => Effect.Effect -}>()("RenderService", { +export class RenderService extends ServiceMap.Service< + RenderService, + { + readonly render: ( + templateName: string, + data: Record, + ) => Effect.Effect + } +>()("RenderService", { make: Effect.gen(function*() { const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) @@ -20,13 +25,20 @@ export class RenderService extends ServiceMap.Service) => - Effect.try({ - try: () => eta.render(templateName, data), - catch: (error) => new Error(`Failed to render template ${templateName}: ${error}`), - }), + render: ( + templateName: string, + data: Record, + ): Effect.Effect => { + try { + return Effect.succeed(eta.render(templateName, data)) + } catch (error) { + return Effect.fail( + new Error(`Failed to render template ${templateName}: ${error}`), + ) + } + }, } }), }) { static readonly layer = Layer.effect(RenderService, this.make) -} \ No newline at end of file +} diff --git a/packages/prisma/src/templates/effect-branded-id.eta b/packages/prisma/src/templates/effect-branded-id.eta index 4e433fb5..767f975e 100644 --- a/packages/prisma/src/templates/effect-branded-id.eta +++ b/packages/prisma/src/templates/effect-branded-id.eta @@ -1,2 +1,2 @@ export const <%= it.name %>Id = <%~ it.baseType %>.pipe(Schema.brand("<%= it.name %>Id")); -export type <%= it.name %>Id = typeof <%= it.name %>Id.Type; +export type <%= it.name %>Id = Schema.Schema.TypeId>; diff --git a/packages/prisma/src/templates/index-custom-error.eta b/packages/prisma/src/templates/index-custom-error.eta index 03442fac..68a23e93 100644 --- a/packages/prisma/src/templates/index-custom-error.eta +++ b/packages/prisma/src/templates/index-custom-error.eta @@ -35,8 +35,7 @@ export class PrismaClient extends ServiceMap.Service< >()("PrismaClient") { static layer = ( ...args: ConstructorParameters - ) => Layer.scoped( - PrismaClient, + ) => Layer.effect(PrismaClient)( Effect.gen(function* () { const prisma = new BasePrismaClient(...args) yield* Effect.addFinalizer(() => Effect.promise(() => prisma.$disconnect())) @@ -46,8 +45,7 @@ export class PrismaClient extends ServiceMap.Service< static layerEffect = ( optionsEffect: Effect.Effect[0], E, R> - ) => Layer.scoped( - PrismaClient, + ) => Layer.effect(PrismaClient)( Effect.gen(function* () { const options = yield* optionsEffect const prisma = new BasePrismaClient(options) @@ -74,7 +72,7 @@ const $begin = ( isolationLevel?: PrismaNamespace.TransactionIsolationLevel } ): Effect.Effect> => - Effect.async>((resume) => { + Effect.callback>((resume) => { let setTxClient: (txClient: PrismaNamespace.TransactionClient) => void let commit: () => void let rollback: () => void diff --git a/packages/prisma/src/templates/index-default.eta b/packages/prisma/src/templates/index-default.eta index ace3a23b..4a16aaec 100644 --- a/packages/prisma/src/templates/index-default.eta +++ b/packages/prisma/src/templates/index-default.eta @@ -33,8 +33,7 @@ export class PrismaClient extends ServiceMap.Service< >()("PrismaClient") { static layer = ( ...args: ConstructorParameters - ) => Layer.scoped( - PrismaClient, + ) => Layer.effect(PrismaClient)( Effect.gen(function* () { const prisma = new BasePrismaClient(...args) yield* Effect.addFinalizer(() => Effect.promise(() => prisma.$disconnect())) @@ -44,8 +43,7 @@ export class PrismaClient extends ServiceMap.Service< static layerEffect = ( optionsEffect: Effect.Effect[0], E, R> - ) => Layer.scoped( - PrismaClient, + ) => Layer.effect(PrismaClient)( Effect.gen(function* () { const options = yield* optionsEffect const prisma = new BasePrismaClient(options) @@ -248,7 +246,7 @@ const $begin = ( isolationLevel?: PrismaNamespace.TransactionIsolationLevel } ): Effect.Effect => - Effect.async((resume) => { + Effect.callback((resume) => { let setTxClient: (txClient: PrismaNamespace.TransactionClient) => void let commit: () => void let rollback: () => void diff --git a/packages/prisma/src/templates/prisma-repository.eta b/packages/prisma/src/templates/prisma-repository.eta index a4cdd908..1ab9751b 100644 --- a/packages/prisma/src/templates/prisma-repository.eta +++ b/packages/prisma/src/templates/prisma-repository.eta @@ -1,4 +1,4 @@ -import * as VariantSchema from '@effect/experimental/VariantSchema' +import * as VariantSchema from 'effect/unstable/schema/VariantSchema' import { type PrismaClient as BasePrismaClient, Prisma as PrismaNamespace } from '<%= it.clientImportPath %>' import { PrismaClient } from './index.js' import * as Data from 'effect/Data' diff --git a/packages/prisma/src/templates/prisma-schema.eta b/packages/prisma/src/templates/prisma-schema.eta index 48649f36..8f7b37dc 100644 --- a/packages/prisma/src/templates/prisma-schema.eta +++ b/packages/prisma/src/templates/prisma-schema.eta @@ -18,8 +18,8 @@ export const findAll = (options: { readonly Result: Schema.Schema readonly execute: (request: II) => Effect.Effect, E, R> }) => { - const encodeRequest = Schema.encode(options.Request) - const decode = Schema.decodeUnknown(Schema.Array(options.Result)) + const encodeRequest = Schema.encodeEffect(options.Request) + const decode = Schema.decodeUnknownEffect(Schema.Array(options.Result)) return (request: IA): Effect.Effect, E | ParseError, R | IR | AR> => Effect.flatMap(Effect.flatMap(encodeRequest(request), options.execute), decode) } @@ -28,7 +28,7 @@ const void_ = (options: { readonly Request: Schema.Schema readonly execute: (request: II) => Effect.Effect }) => { - const encode = Schema.encode(options.Request) + const encode = Schema.encodeEffect(options.Request) return (request: IA): Effect.Effect => Effect.asVoid(Effect.flatMap(encode(request), options.execute)) } @@ -53,8 +53,8 @@ export const findOne = (options: { readonly Result: Schema.Schema readonly execute: (request: II) => Effect.Effect, E, R> }) => { - const encodeRequest = Schema.encode(options.Request) - const decode = Schema.decodeUnknown(options.Result) + const encodeRequest = Schema.encodeEffect(options.Request) + const decode = Schema.decodeUnknownEffect(options.Result) return (request: IA): Effect.Effect, E | ParseError, R | IR | AR> => Effect.flatMap(Effect.flatMap(encodeRequest(request), options.execute), (arr) => Array.isArray(arr) && arr.length > 0 ? Effect.asSome(decode(arr[0])) : Effect.succeedNone, @@ -72,8 +72,8 @@ export const single = (options: { readonly Result: Schema.Schema readonly execute: (request: II) => Effect.Effect, E, R> }) => { - const encodeRequest = Schema.encode(options.Request) - const decode = Schema.decodeUnknown(options.Result) + const encodeRequest = Schema.encodeEffect(options.Request) + const decode = Schema.decodeUnknownEffect(options.Result) return (request: IA): Effect.Effect => Effect.flatMap( Effect.flatMap(encodeRequest(request), options.execute), @@ -87,8 +87,8 @@ export const many = (options: { readonly Result: Schema.Schema readonly execute: (request: II) => Effect.Effect, E, R> }) => { - const encodeRequest = Schema.encode(options.Request) - const decode = Schema.decodeUnknown(Schema.Array(options.Result)) + const encodeRequest = Schema.encodeEffect(options.Request) + const decode = Schema.decodeUnknownEffect(Schema.Array(options.Result)) return (request: IA): Effect.Effect, E | ParseError, R | IR | AR> => Effect.map(Effect.flatMap(Effect.flatMap(encodeRequest(request), options.execute), decode), (arr) => [...arr]) } diff --git a/packages/prisma/test-effect-api.mjs b/packages/prisma/test-effect-api.mjs new file mode 100644 index 00000000..8d6950d8 --- /dev/null +++ b/packages/prisma/test-effect-api.mjs @@ -0,0 +1,31 @@ +import * as Effect from "effect"; +import * as Runtime from "effect/Runtime"; + +const runtimeKeys = Object.keys(Runtime); +console.log("Runtime exports:", runtimeKeys.join(", ")); + +const effectKeys = Object.keys(Effect); +const forkRunKeys = effectKeys.filter( + (k) => + k.includes("run") || + k.includes("fork") || + k.includes("Fork") || + k.includes("Run") || + k.includes("sync") +); +console.log("Effect fork/run keys:", forkRunKeys.join(", ")); + +// Check defaultRuntime +const defaultRuntime = Runtime.defaultRuntime; +console.log("defaultRuntime:", typeof defaultRuntime); + +// Try running a simple effect +const prog = Effect.succeed(42); +try { + const result = Effect.runPromise(prog); + result + .then((r) => console.log("runPromise works:", r)) + .catch((e) => console.log("runPromise error:", e.message)); +} catch (e) { + console.log("Error running effect:", e.message); +} diff --git a/packages/prisma/test/prisma-model.test.ts b/packages/prisma/test/prisma-model.test.ts index 54e565ab..9b797574 100644 --- a/packages/prisma/test/prisma-model.test.ts +++ b/packages/prisma/test/prisma-model.test.ts @@ -1,16 +1,24 @@ import { layer } from "@effect/vitest" -import { Prisma, PrismaClient } from "@prisma/effect" +import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3" +import { PrismaClient } from "@prisma/effect" import * as PrismaRepository from "@prisma/effect/prisma-repository.js" import { TodoId, TodoModel } from "@prisma/effect/models/Todo.js" -import { Effect, Layer, Option } from "effect" +import * as Effect from "effect/Effect" +import * as Option from "effect/Option" +import * as Result from "effect/Result" import { beforeEach, expect } from "vitest" +import path from "node:path" import { randomUUID } from "node:crypto" import { prisma as db } from "./utils.js" -// Create the Prisma layer manually to use the existing client instance -const ClientLayer = Layer.succeed(PrismaClient, { tx: db, client: db }) -const PrismaLayer = Layer.merge(ClientLayer, Prisma.Default.pipe(Layer.provide(ClientLayer))) +// Helper to create a TodoId from a raw UUID string +const makeTodoId = (uuid: string): TodoId => uuid as TodoId + +// Create the Prisma layer using the SQLite adapter + dev.db +const dbPath = path.join(import.meta.dirname, "../prisma/dev.db") +const adapter = new PrismaBetterSqlite3({ url: `file:${dbPath}` }) +const PrismaLayer = PrismaClient.layer({ adapter }) layer(PrismaLayer)("Prisma Model Repository", (it) => { // UUIDs generados para usar en los tests @@ -24,11 +32,6 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { findFirstOrThrow: randomUUID(), update: randomUUID(), delete: randomUUID(), - aggregate1: randomUUID(), - aggregate2: randomUUID(), - groupBy1: randomUUID(), - groupBy2: randomUUID(), - groupBy3: randomUUID(), } beforeEach(async () => { @@ -37,11 +40,14 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("create", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) const created = yield* todoRepo.create({ data: { - id: TodoId.make(testUUIDs.create), + id: makeTodoId(testUUIDs.create), title: "Create Test", content: "Content", published: false, @@ -54,12 +60,27 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("createMany", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) const result = yield* todoRepo.createMany({ data: [ - { id: TodoId.make(testUUIDs.findMany1), title: "Todo 1", content: "C1", published: false, authorId: 1 }, - { id: TodoId.make(testUUIDs.findMany2), title: "Todo 2", content: "C2", published: true, authorId: 1 }, + { + id: makeTodoId(testUUIDs.findMany1), + title: "Todo 1", + content: "C1", + published: false, + authorId: 1, + }, + { + id: makeTodoId(testUUIDs.findMany2), + title: "Todo 2", + content: "C2", + published: true, + authorId: 1, + }, ], }) expect(result.count).toBe(2) @@ -67,12 +88,27 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("createManyAndReturn", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) const result = yield* todoRepo.createManyAndReturn({ data: [ - { id: TodoId.make(testUUIDs.findMany1), title: "Todo 1", content: "C1", published: false, authorId: 1 }, - { id: TodoId.make(testUUIDs.findMany2), title: "Todo 2", content: "C2", published: true, authorId: 1 }, + { + id: makeTodoId(testUUIDs.findMany1), + title: "Todo 1", + content: "C1", + published: false, + authorId: 1, + }, + { + id: makeTodoId(testUUIDs.findMany2), + title: "Todo 2", + content: "C2", + published: true, + authorId: 1, + }, ], }) expect(result).toHaveLength(2) @@ -82,11 +118,14 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("findUnique", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.create({ data: { - id: TodoId.make(testUUIDs.findUnique), + id: makeTodoId(testUUIDs.findUnique), title: "Find Unique", content: "Content", published: false, @@ -95,7 +134,7 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { }) const found = yield* todoRepo.findUnique({ - where: { id: TodoId.make(testUUIDs.findUnique) }, + where: { id: makeTodoId(testUUIDs.findUnique) }, }) expect(Option.isSome(found)).toBe(true) if (Option.isSome(found)) { @@ -103,18 +142,21 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { } const notFound = yield* todoRepo.findUnique({ - where: { id: TodoId.make("550e8400-e29b-41d4-a716-446655449999") }, + where: { id: makeTodoId("550e8400-e29b-41d4-a716-446655449999") }, }) expect(Option.isNone(notFound)).toBe(true) })) - it.effect("findUniqueOrThrow", () => + it.effect("findUniqueOrThrow - success", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.create({ data: { - id: TodoId.make(testUUIDs.findUniqueOrThrow), + id: makeTodoId(testUUIDs.findUniqueOrThrow), title: "Find Unique Or Throw", content: "Content", published: false, @@ -123,26 +165,40 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { }) const found = yield* todoRepo.findUniqueOrThrow({ - where: { id: TodoId.make(testUUIDs.findUniqueOrThrow) }, + where: { id: makeTodoId(testUUIDs.findUniqueOrThrow) }, }) expect(found.title).toBe("Find Unique Or Throw") + })) + + it.effect("findUniqueOrThrow - not found", () => + Effect.gen(function*() { + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) - const error = yield* todoRepo - .findUniqueOrThrow({ - where: { id: TodoId.make("550e8400-e29b-41d4-a716-446655440999") }, - }) - .pipe(Effect.flip) + const result = yield* Effect.result( + todoRepo.findUniqueOrThrow({ + where: { id: makeTodoId("550e8400-e29b-41d4-a716-446655440999") }, + }), + ) - expect(error._tag).toBe("PrismaRecordNotFoundError") + expect(Result.isFailure(result)).toBe(true) + if (Result.isFailure(result)) { + expect(result.failure._tag).toBe("PrismaRecordNotFoundError") + } })) - it.effect("findFirst", () => + it.effect("findFirst - success", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.create({ data: { - id: TodoId.make(testUUIDs.findFirst), + id: makeTodoId(testUUIDs.findFirst), title: "Find First", content: "Content", published: false, @@ -156,13 +212,16 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { expect(Option.isSome(found)).toBe(true) })) - it.effect("findFirstOrThrow", () => + it.effect("findFirstOrThrow - success", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.create({ data: { - id: TodoId.make(testUUIDs.findFirstOrThrow), + id: makeTodoId(testUUIDs.findFirstOrThrow), title: "Find First Or Throw", content: "Content", published: false, @@ -174,38 +233,52 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { where: { title: "Find First Or Throw" }, }) expect(found.title).toBe("Find First Or Throw") + })) + + it.effect("findFirstOrThrow - not found", () => + Effect.gen(function*() { + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) - const error = yield* todoRepo - .findFirstOrThrow({ + const result = yield* Effect.result( + todoRepo.findFirstOrThrow({ where: { title: "Non Existent" }, - }) - .pipe(Effect.flip) + }), + ) - expect(error._tag).toBe("PrismaRecordNotFoundError") + expect(Result.isFailure(result)).toBe(true) + if (Result.isFailure(result)) { + expect(result.failure._tag).toBe("PrismaRecordNotFoundError") + } })) it.effect("findMany", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.createMany({ data: [ { - id: TodoId.make("550e8400-e29b-41d4-a716-446655440232"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655440232"), title: "T1", content: "C", published: true, authorId: 1, }, { - id: TodoId.make("21312312-e29b-41d4-a716-446655440002"), + id: makeTodoId("21312312-e29b-41d4-a716-446655440002"), title: "T2", content: "C", published: true, authorId: 1, }, { - id: TodoId.make("31234123-e29b-41d4-a716-446655440003"), + id: makeTodoId("31234123-e29b-41d4-a716-446655440003"), title: "T3", content: "C", published: false, @@ -222,11 +295,14 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("update", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.create({ data: { - id: TodoId.make(testUUIDs.findFirstOrThrow), + id: makeTodoId(testUUIDs.update), title: "Create Test", content: "Content", published: false, @@ -235,7 +311,7 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { }) const updated = yield* todoRepo.update({ - where: { id: TodoId.make(testUUIDs.findFirstOrThrow) }, + where: { id: makeTodoId(testUUIDs.update) }, data: { title: "Updated" }, }) expect(updated.title).toBe("Updated") @@ -243,19 +319,22 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("updateMany", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.createMany({ data: [ { - id: TodoId.make("550e8400-e29b-41d4-a716-446655440033"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655440033"), title: "T1", content: "C", published: false, authorId: 1, }, { - id: TodoId.make("550e8400-e29b-41d4-a716-446655440044"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655440044"), title: "T2", content: "C", published: false, @@ -273,13 +352,16 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("upsert", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) // Create new const created = yield* todoRepo.upsert({ - where: { id: TodoId.make("550e8400-e29b-41d4-a716-446655449999") }, + where: { id: makeTodoId("550e8400-e29b-41d4-a716-446655449999") }, create: { - id: TodoId.make("550e8400-e29b-41d4-a716-446655449999"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655449999"), title: "Upsert Created", content: "Content", published: false, @@ -291,9 +373,9 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { // Update existing const updated = yield* todoRepo.upsert({ - where: { id: TodoId.make("550e8400-e29b-41d4-a716-446655449999") }, + where: { id: makeTodoId("550e8400-e29b-41d4-a716-446655449999") }, create: { - id: TodoId.make("550e8400-e29b-41d4-a716-446655449999"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655449999"), title: "Upsert Created", content: "Content", published: false, @@ -306,11 +388,14 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("delete", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.create({ data: { - id: TodoId.make("550e8400-e29b-41d4-a716-446655442222"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655442222"), title: "To Delete", content: "Content", published: false, @@ -319,31 +404,34 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { }) const deleted = yield* todoRepo.delete({ - where: { id: TodoId.make("550e8400-e29b-41d4-a716-446655442222") }, + where: { id: makeTodoId("550e8400-e29b-41d4-a716-446655442222") }, }) expect(deleted.title).toBe("To Delete") const found = yield* todoRepo.findUnique({ - where: { id: TodoId.make("550e8400-e29b-41d4-a716-446655442222") }, + where: { id: makeTodoId("550e8400-e29b-41d4-a716-446655442222") }, }) expect(Option.isNone(found)).toBe(true) })) it.effect("deleteMany", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.createMany({ data: [ { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666666"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666666"), title: "T1", content: "C", published: false, authorId: 1, }, { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666667"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666667"), title: "T2", content: "C", published: false, @@ -360,19 +448,22 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("count", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.createMany({ data: [ { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666666"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666666"), title: "T1", content: "C", published: false, authorId: 1, }, { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666667"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666667"), title: "T2", content: "C", published: false, @@ -385,26 +476,29 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { expect(count).toBe(2) const filteredCount = yield* todoRepo.count({ - where: { id: TodoId.make("550e8400-e29b-41d4-a716-446655666666") }, + where: { id: makeTodoId("550e8400-e29b-41d4-a716-446655666666") }, }) expect(filteredCount).toBe(1) })) it.effect("aggregate", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.createMany({ data: [ { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666666"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666666"), title: "T1", content: "C", published: false, authorId: 1, }, { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666667"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666667"), title: "T2", content: "C", published: false, @@ -426,26 +520,29 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { it.effect("groupBy", () => Effect.gen(function*() { - const todoRepo = yield* PrismaRepository.make(TodoModel, { modelName: "todo", spanPrefix: "todo" }) + const todoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "todo", + }) yield* todoRepo.createMany({ data: [ { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666666"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666666"), title: "T1", content: "C", published: true, authorId: 1, }, { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666667"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666667"), title: "T2", content: "C", published: true, authorId: 1, }, { - id: TodoId.make("550e8400-e29b-41d4-a716-446655666668"), + id: makeTodoId("550e8400-e29b-41d4-a716-446655666668"), title: "T3", content: "C", published: false, @@ -465,12 +562,16 @@ layer(PrismaLayer)("Prisma Model Repository", (it) => { expect(result.length).toBeGreaterThan(0) // Check for the group with published: true, authorId: 1 - const group1 = result.find((g: any) => g.published === true && g.authorId === 1) + const group1 = result.find( + (g: any) => g.published === true && g.authorId === 1, + ) expect(group1).toBeDefined() expect(group1._count.id).toBe(2) // Check for the group with published: false, authorId: 2 - const group2 = result.find((g: any) => g.published === false && g.authorId === 2) + const group2 = result.find( + (g: any) => g.published === false && g.authorId === 2, + ) expect(group2).toBeDefined() expect(group2._count.id).toBe(1) })) From c1dc0054c55083105251e76c256dc8ed687897b5 Mon Sep 17 00:00:00 2001 From: Andres J Date: Sat, 21 Mar 2026 01:05:14 -0600 Subject: [PATCH 04/26] sync engram memories --- .engram/chunks/3775ed35.jsonl.gz | Bin 0 -> 21082 bytes .engram/manifest.json | 8 ++++++++ 2 files changed, 8 insertions(+) create mode 100644 .engram/chunks/3775ed35.jsonl.gz diff --git a/.engram/chunks/3775ed35.jsonl.gz b/.engram/chunks/3775ed35.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..5db243805caee29694e4c786c08c8021572bfbaf GIT binary patch literal 21082 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 literal 0 HcmV?d00001 diff --git a/.engram/manifest.json b/.engram/manifest.json index 28c20aab..2fec5261 100644 --- a/.engram/manifest.json +++ b/.engram/manifest.json @@ -16,6 +16,14 @@ "sessions": 9, "memories": 20, "prompts": 0 + }, + { + "id": "3775ed35", + "created_by": "andres", + "created_at": "2026-03-21T07:05:04Z", + "sessions": 30, + "memories": 21, + "prompts": 0 } ] } From 78df127c7879df822bd1fc6ef7949ad89ffb01f9 Mon Sep 17 00:00:00 2001 From: Andres J Date: Sat, 21 Mar 2026 20:22:25 -0600 Subject: [PATCH 05/26] fix: update PrismaClient usage and adjust TypeScript types in schema templates --- packages/prisma/README.md | 7 +- packages/prisma/prisma/dev.db | Bin 53248 -> 53248 bytes .../prisma/scripts/generate-test-files.ts | 2 +- .../src/schema-generator/effect/generator.ts | 2 +- .../src/schema-generator/utils/annotations.ts | 8 +- .../prisma/src/templates/effect-enums.eta | 2 +- .../src/templates/effect-types-header.eta | 2 +- .../src/templates/index-custom-error.eta | 4 +- .../prisma/src/templates/index-default.eta | 9 +- .../prisma/src/templates/prisma-raw-sql.eta | 8 +- .../src/templates/prisma-repository.eta | 199 ++++++++---------- .../prisma/src/templates/prisma-schema.eta | 54 +++-- tsconfig.json | 2 +- 13 files changed, 143 insertions(+), 156 deletions(-) diff --git a/packages/prisma/README.md b/packages/prisma/README.md index 6a3eb237..a8df3c96 100644 --- a/packages/prisma/README.md +++ b/packages/prisma/README.md @@ -53,7 +53,8 @@ pnpm prisma generate The generator creates a `Prisma` service for transactions and raw queries, and Model classes that you can use to create repositories. ```typescript -import { Effect, Layer } from "effect" +import * as Effect from "effect/Effect" +import * as Layer from "effect/Layer" import { Prisma, UserModel } from "./generated/effect/index.js" import * as PrismaRepository from "./generated/effect/prisma-repository.js" @@ -97,7 +98,7 @@ The generated layers make testing easy by allowing you to provide alternative im ```typescript import { it } from "@effect/vitest" -import { Effect } from "effect" +import * as Effect from "effect/Effect" import { Prisma, UserModel } from "./generated/effect/index.js" import * as PrismaRepository from "./generated/effect/prisma-repository.js" @@ -123,7 +124,7 @@ it.effect("should create a user", () => All Prisma errors are mapped to specific tagged errors in Effect, allowing you to handle them precisely. ```typescript -import { Effect } from "effect" +import * as Effect from "effect/Effect" import { Prisma, UserModel } from "./generated/effect/index.js" import * as PrismaRepository from "./generated/effect/prisma-repository.js" diff --git a/packages/prisma/prisma/dev.db b/packages/prisma/prisma/dev.db index ccc33f13f575cc7ea741ac6369a5401e7b6efdd6..a0388127f4c426174a1fc4e31a8f58e12a01f5fa 100644 GIT binary patch delta 19 bcmZozz}&Ead4e?K{)sZqjQckxEI1DUNGAv4 delta 19 bcmZozz}&Ead4e>fz(g5mMuCk93(f-oJ>~|4 diff --git a/packages/prisma/scripts/generate-test-files.ts b/packages/prisma/scripts/generate-test-files.ts index 98b9c049..69e891c4 100644 --- a/packages/prisma/scripts/generate-test-files.ts +++ b/packages/prisma/scripts/generate-test-files.ts @@ -39,7 +39,7 @@ it.scoped("${testName}", () => test${testIndex + 1}Effect)` }).join("\n\n") return `import { expect, it } from "@effect/vitest" -import { Effect } from "effect" +import * as Effect from "effect/Effect" import type { Todo, User } from "../../generated/prisma/index.js" import { PrismaService } from "../../generated/effect-prisma/index.js" import { TestPrismaLayer } from "../../services/prisma.service.js" diff --git a/packages/prisma/src/schema-generator/effect/generator.ts b/packages/prisma/src/schema-generator/effect/generator.ts index 42bc1da8..5be31d2b 100644 --- a/packages/prisma/src/schema-generator/effect/generator.ts +++ b/packages/prisma/src/schema-generator/effect/generator.ts @@ -23,7 +23,7 @@ export const prepareBrandedIdSchemaData = ( // Prisma validates UUIDs at the database level, so we use Schema.String directly baseType = "Schema.String" } else if (idField.type === "Int") { - baseType = "Schema.Number.pipe(Schema.positive())" + baseType = "Schema.Number.check(Schema.isBetween({ minimum: 1 }))" } else { baseType = "Schema.String" } diff --git a/packages/prisma/src/schema-generator/utils/annotations.ts b/packages/prisma/src/schema-generator/utils/annotations.ts index 737217f0..790e89c9 100644 --- a/packages/prisma/src/schema-generator/utils/annotations.ts +++ b/packages/prisma/src/schema-generator/utils/annotations.ts @@ -13,7 +13,7 @@ import type { DMMF } from "@prisma/generator-helper" * email String * * // Positive number constraint for Int field - * /// @customType(Schema.Number.pipe(Schema.positive())) + * /// @customType(Schema.Number.check(Schema.isBetween({ minimum: 1 }))) * age Int * * // Custom branded type @@ -35,7 +35,11 @@ export function extractEffectTypeOverride(field: DMMF.Field) { let parenCount = 1 let endIdx = startIdx - for (let i = startIdx; i < field.documentation.length && parenCount > 0; i++) { + for ( + let i = startIdx; + i < field.documentation.length && parenCount > 0; + i++ + ) { if (field.documentation[i] === "(") parenCount++ if (field.documentation[i] === ")") parenCount-- if (parenCount === 0) { diff --git a/packages/prisma/src/templates/effect-enums.eta b/packages/prisma/src/templates/effect-enums.eta index 67c57c11..2edc2227 100644 --- a/packages/prisma/src/templates/effect-enums.eta +++ b/packages/prisma/src/templates/effect-enums.eta @@ -1,6 +1,6 @@ <%~ it.header %> -import { Schema } from "effect"; +import * as Schema from "effect/Schema"; <% it.enums.forEach(function(enumItem) { %> export const <%= enumItem.name %> = Schema.Literal(<%~ enumItem.values %>); diff --git a/packages/prisma/src/templates/effect-types-header.eta b/packages/prisma/src/templates/effect-types-header.eta index 5d953815..b84d9ba1 100644 --- a/packages/prisma/src/templates/effect-types-header.eta +++ b/packages/prisma/src/templates/effect-types-header.eta @@ -1,6 +1,6 @@ <%~ it.header %> -import { Schema } from "effect"; +import * as Schema from "effect/Schema"; import { generated } from "@effectify/prisma"; <% if (it.enumImports) { %> import { <%~ it.enumImports %> } from "./enums.js"; diff --git a/packages/prisma/src/templates/index-custom-error.eta b/packages/prisma/src/templates/index-custom-error.eta index 68a23e93..ca25cfcb 100644 --- a/packages/prisma/src/templates/index-custom-error.eta +++ b/packages/prisma/src/templates/index-custom-error.eta @@ -1,6 +1,8 @@ // This file was generated by prisma-effect-generator, do not edit manually. -import { Effect, Exit, Layer } from "effect" +import * as Effect from "effect/Effect" +import * as Exit from "effect/Exit" +import * as Layer from "effect/Layer" import * as ServiceMap from "effect/ServiceMap" import { Prisma as PrismaNamespace, PrismaClient as BasePrismaClient } from "<%= it.clientImportPath %>" import { <%= it.customError.className %>, mapPrismaError } from "<%= it.customError.path %>" diff --git a/packages/prisma/src/templates/index-default.eta b/packages/prisma/src/templates/index-default.eta index 4a16aaec..fe571700 100644 --- a/packages/prisma/src/templates/index-default.eta +++ b/packages/prisma/src/templates/index-default.eta @@ -1,6 +1,9 @@ // This file was generated by prisma-effect-generator, do not edit manually. -import { Data, Effect, Exit, Layer } from "effect" +import * as Data from "effect/Data" +import * as Effect from "effect/Effect" +import * as Exit from "effect/Exit" +import * as Layer from "effect/Layer" import * as ServiceMap from "effect/ServiceMap" import { Prisma as PrismaNamespace, PrismaClient as BasePrismaClient } from "<%= it.clientImportPath %>" @@ -294,7 +297,7 @@ export class Prisma extends ServiceMap.Service()("Prisma", { options?: TransactionOptions ) => Effect.flatMap( - PrismaClient, + PrismaClient.asEffect(), ({ client, tx }): Effect.Effect => { const isRootClient = "$transaction" in tx if (!isRootClient) { @@ -320,7 +323,7 @@ export class Prisma extends ServiceMap.Service()("Prisma", { options?: TransactionOptions ) => Effect.flatMap( - PrismaClient, + PrismaClient.asEffect(), ({ client }): Effect.Effect => { return Effect.acquireUseRelease( $begin(client, options), diff --git a/packages/prisma/src/templates/prisma-raw-sql.eta b/packages/prisma/src/templates/prisma-raw-sql.eta index dde9c343..b385d652 100644 --- a/packages/prisma/src/templates/prisma-raw-sql.eta +++ b/packages/prisma/src/templates/prisma-raw-sql.eta @@ -1,5 +1,5 @@ $executeRaw: (args: PrismaNamespace.Sql | [PrismaNamespace.Sql, ...any[]]): Effect.Effect, PrismaClient> => - Effect.flatMap(PrismaClient, ({ tx: client }) => + Effect.flatMap(PrismaClient.asEffect(), ({ tx: client }) => Effect.tryPromise({ try: () => (Array.isArray(args) ? client.$executeRaw(args[0], ...args.slice(1)) : client.$executeRaw(args)), catch: (error) => mapError(error, "$executeRaw", "Prisma") @@ -7,7 +7,7 @@ ), $executeRawUnsafe: (query: string, ...values: any[]): Effect.Effect, PrismaClient> => - Effect.flatMap(PrismaClient, ({ tx: client }) => + Effect.flatMap(PrismaClient.asEffect(), ({ tx: client }) => Effect.tryPromise({ try: () => client.$executeRawUnsafe(query, ...values), catch: (error) => mapError(error, "$executeRawUnsafe", "Prisma") @@ -15,7 +15,7 @@ ), $queryRaw: (args: PrismaNamespace.Sql | [PrismaNamespace.Sql, ...any[]]): Effect.Effect, PrismaClient> => - Effect.flatMap(PrismaClient, ({ tx: client }) => + Effect.flatMap(PrismaClient.asEffect(), ({ tx: client }) => Effect.tryPromise({ try: () => (Array.isArray(args) ? client.$queryRaw(args[0], ...args.slice(1)) : client.$queryRaw(args)) as Promise, catch: (error) => mapError(error, "$queryRaw", "Prisma") @@ -23,7 +23,7 @@ ), $queryRawUnsafe: (query: string, ...values: any[]): Effect.Effect, PrismaClient> => - Effect.flatMap(PrismaClient, ({ tx: client }) => + Effect.flatMap(PrismaClient.asEffect(), ({ tx: client }) => Effect.tryPromise({ try: () => client.$queryRawUnsafe(query, ...values) as Promise, catch: (error) => mapError(error, "$queryRawUnsafe", "Prisma") diff --git a/packages/prisma/src/templates/prisma-repository.eta b/packages/prisma/src/templates/prisma-repository.eta index 1ab9751b..5a7cdc26 100644 --- a/packages/prisma/src/templates/prisma-repository.eta +++ b/packages/prisma/src/templates/prisma-repository.eta @@ -304,7 +304,7 @@ export const mapUpdateManyError = (error: unknown, operation: string, model: str throw error; } -const { Class, Field, FieldExcept, FieldOnly, Struct, Union, extract, fieldEvolve, fieldFromKey } = VariantSchema.make({ +const { Class, Field, FieldExcept, FieldOnly, Struct, Union, extract, fieldEvolve } = VariantSchema.make({ variants: [ 'findUnique', 'findUniqueOrThrow', @@ -326,40 +326,40 @@ const { Class, Field, FieldExcept, FieldOnly, Struct, Union, extract, fieldEvolv * @since 1.0.0 * @category models */ -export type Any = Schema.Schema.Any & { +export type Any = Schema.Top & { readonly fields: Schema.Struct.Fields - readonly findUnique: Schema.Schema.Any - readonly findUniqueOrThrow: Schema.Schema.Any - readonly findFirst: Schema.Schema.Any - readonly findFirstOrThrow: Schema.Schema.Any - readonly findMany: Schema.Schema.Any - readonly create: Schema.Schema.Any - readonly createMany: Schema.Schema.Any - readonly createManyAndReturn: Schema.Schema.Any - readonly update: Schema.Schema.Any - readonly json: Schema.Schema.Any - readonly jsonCreate: Schema.Schema.Any - readonly jsonUpdate: Schema.Schema.Any + readonly findUnique: Schema.Top + readonly findUniqueOrThrow: Schema.Top + readonly findFirst: Schema.Top + readonly findFirstOrThrow: Schema.Top + readonly findMany: Schema.Top + readonly create: Schema.Top + readonly createMany: Schema.Top + readonly createManyAndReturn: Schema.Top + readonly update: Schema.Top + readonly json: Schema.Top + readonly jsonCreate: Schema.Top + readonly jsonUpdate: Schema.Top } /** * @since 1.0.0 * @category models */ -export type AnyNoContext = Schema.Schema.AnyNoContext & { +export type AnyNoContext = Schema.Top & { readonly fields: Schema.Struct.Fields - readonly findUnique: Schema.Schema.AnyNoContext - readonly findUniqueOrThrow: Schema.Schema.AnyNoContext - readonly findFirst: Schema.Schema.AnyNoContext - readonly findFirstOrThrow: Schema.Schema.AnyNoContext - readonly findMany: Schema.Schema.AnyNoContext - readonly create: Schema.Schema.AnyNoContext - readonly createMany: Schema.Schema.AnyNoContext - readonly createManyAndReturn: Schema.Schema.AnyNoContext - readonly update: Schema.Schema.AnyNoContext - readonly json: Schema.Schema.AnyNoContext - readonly jsonCreate: Schema.Schema.AnyNoContext - readonly jsonUpdate: Schema.Schema.AnyNoContext + readonly findUnique: Schema.Top + readonly findUniqueOrThrow: Schema.Top + readonly findFirst: Schema.Top + readonly findFirstOrThrow: Schema.Top + readonly findMany: Schema.Top + readonly create: Schema.Top + readonly createMany: Schema.Top + readonly createManyAndReturn: Schema.Top + readonly update: Schema.Top + readonly json: Schema.Top + readonly jsonCreate: Schema.Top + readonly jsonUpdate: Schema.Top } /** @@ -413,7 +413,7 @@ export { * @category constructors * @example * \`\`\`ts - * import { Schema } from "effect" + * import * as Schema from "effect/Schema" * import { Model } from "@effect/sql" * * export const GroupId = Schema.Number.pipe(Schema.brand("GroupId")) @@ -468,11 +468,6 @@ export { * @category fields */ FieldExcept, - /** - * @since 1.0.0 - * @category fields - */ - fieldFromKey, /** * @since 1.0.0 * @category fields @@ -507,67 +502,67 @@ export const make = ( { readonly findUnique: >( args: PrismaNamespace.Exact>, - ) => Effect.Effect, PrismaFindError, S['Context'] | S['findUnique']['Context']> + ) => Effect.Effect, PrismaFindError, never> readonly findUniqueOrThrow: >( args: PrismaNamespace.Exact>, - ) => Effect.Effect + ) => Effect.Effect readonly findFirst: >( args?: PrismaNamespace.Exact> - ) => Effect.Effect, PrismaFindError, S['Context'] | S['findFirst']['Context']> + ) => Effect.Effect, PrismaFindError, never> readonly findFirstOrThrow: >( args?: PrismaNamespace.Exact> - ) => Effect.Effect + ) => Effect.Effect readonly findMany: >( args?: PrismaNamespace.Exact> - ) => Effect.Effect, PrismaFindError, S['Context'] | S['findMany']['Context']> + ) => Effect.Effect, PrismaFindError, never> readonly create: >( args: PrismaNamespace.Exact> & { data: Insertable }, - ) => Effect.Effect + ) => Effect.Effect readonly createMany: >( args: PrismaNamespace.Exact> & { data: ReadonlyArray> | Insertable }, - ) => Effect.Effect + ) => Effect.Effect readonly createManyAndReturn: >( args: PrismaNamespace.Exact> & { data: ReadonlyArray> | Insertable }, - ) => Effect.Effect, PrismaCreateError, S['Context'] | S['createManyAndReturn']['Context']> + ) => Effect.Effect, PrismaCreateError, never> readonly update: >( args: PrismaNamespace.Exact> & { data: Updateable } - ) => Effect.Effect + ) => Effect.Effect readonly updateMany: >( args: PrismaNamespace.Exact> & { data: Updateable } - ) => Effect.Effect + ) => Effect.Effect readonly delete: >( args: PrismaNamespace.Exact> - ) => Effect.Effect + ) => Effect.Effect readonly deleteMany: >( args?: PrismaNamespace.Exact> - ) => Effect.Effect + ) => Effect.Effect readonly upsert: >( args: PrismaNamespace.Exact> & { create: Insertable; update: Updateable } - ) => Effect.Effect + ) => Effect.Effect readonly count: >( args?: PrismaNamespace.Exact> - ) => Effect.Effect + ) => Effect.Effect readonly aggregate: >( args: PrismaNamespace.Exact> - ) => Effect.Effect + ) => Effect.Effect readonly groupBy: >( args: PrismaNamespace.Exact> - ) => Effect.Effect + ) => Effect.Effect }, never, PrismaClient @@ -576,10 +571,10 @@ export const make = ( const prisma = yield* PrismaClient // Construye el schema del where para findUnique usando uniqueKey en modo builder - let findUniqueRequestSchema: Schema.Schema = Schema.Unknown + let findUniqueRequestSchema: Schema.Schema = Schema.Unknown if (options.uniqueKey) { const keys = Array.isArray(options.uniqueKey) ? options.uniqueKey : [options.uniqueKey] - const shape: Record = {} + const shape: Record = {} let valid = true for (const key of keys) { const field = (Model as any).fields?.[key] @@ -607,11 +602,10 @@ export const make = ( const findUnique = >( args: PrismaNamespace.Exact>, - ): Effect.Effect, never, S['Context'] | S['findUnique']['Context']> => + ): Effect.Effect, never, never> => findUniqueSchema((args as any).where).pipe( - Effect.catchTag('ParseError', Effect.die), + Effect.catchTag('SchemaError', Effect.die), Effect.withSpan(`\${options.spanPrefix}.findUnique`, { - captureStackTrace: false, attributes: { ...(args as any).where }, }), ) as any @@ -631,13 +625,12 @@ export const make = ( const findUniqueOrThrow = >( args: PrismaNamespace.Exact>, - ): Effect.Effect => + ): Effect.Effect => findUniqueOrThrowSchema((args as any).where).pipe( Effect.map((result) => result as S['Type']), - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`\${options.spanPrefix}.findUniqueOrThrow`, { - captureStackTrace: false, attributes: { ...(args as any).where }, }), ) as any @@ -655,11 +648,10 @@ export const make = ( const findFirst = >( args?: PrismaNamespace.Exact> - ): Effect.Effect, never, S['Context'] | S['findFirst']['Context']> => + ): Effect.Effect, never, never> => findFirstSchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), + Effect.catchTag('SchemaError', Effect.die), Effect.withSpan(`\${options.spanPrefix}.findFirst`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -677,13 +669,12 @@ export const make = ( const findFirstOrThrow = >( args?: PrismaNamespace.Exact> - ): Effect.Effect => + ): Effect.Effect => findFirstOrThrowSchema(args).pipe( Effect.map((result) => result as S['Type']), - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`\${options.spanPrefix}.findFirstOrThrow`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -701,11 +692,10 @@ export const make = ( const findMany = >( args?: PrismaNamespace.Exact> - ): Effect.Effect, never, S['Context'] | S['findMany']['Context']> => + ): Effect.Effect, never, never> => findManySchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), + Effect.catchTag('SchemaError', Effect.die), Effect.withSpan(`\${options.spanPrefix}.findMany`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -722,12 +712,11 @@ export const make = ( const create = >( args: PrismaNamespace.Exact> & { data: Insertable }, - ): Effect.Effect => + ): Effect.Effect => createSchema((args as any).data).pipe( - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.create`, { - captureStackTrace: false, attributes: { ...(args as any).data }, }), ) as any @@ -745,13 +734,12 @@ export const make = ( const createMany = >( args: PrismaNamespace.Exact> & { data: ReadonlyArray> | Insertable }, - ): Effect.Effect => + ): Effect.Effect => createManySchema((args as any).data).pipe( Effect.map((res) => res as unknown as PrismaNamespace.BatchPayload), - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.createMany`, { - captureStackTrace: false, attributes: { ...(args as any).data }, }), ) as any @@ -771,11 +759,10 @@ export const make = ( const createManyAndReturn = >( args: PrismaNamespace.Exact> & { data: ReadonlyArray> | Insertable }, - ): Effect.Effect, never, S['Context'] | S['createManyAndReturn']['Context']> => + ): Effect.Effect, never, never> => createManyAndReturnSchema((args as any).data).pipe( - Effect.catchTag('ParseError', Effect.die), + Effect.catchTag('SchemaError', Effect.die), Effect.withSpan(`${options.spanPrefix}.createManyAndReturn`, { - captureStackTrace: false, attributes: { ...(args as any).data }, }), ) as any @@ -792,12 +779,11 @@ export const make = ( const count = >( args?: PrismaNamespace.Exact> - ): Effect.Effect => + ): Effect.Effect => countSchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`\${options.spanPrefix}.count`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -814,12 +800,11 @@ export const make = ( const update = >( args: PrismaNamespace.Exact> & { data: Updateable } - ): Effect.Effect => + ): Effect.Effect => updateSchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.update`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -836,12 +821,11 @@ export const make = ( const delete_ = >( args: PrismaNamespace.Exact> - ): Effect.Effect => + ): Effect.Effect => deleteSchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.delete`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -858,12 +842,11 @@ export const make = ( const upsert = >( args: PrismaNamespace.Exact> & { create: Insertable; update: Updateable } - ): Effect.Effect => + ): Effect.Effect => upsertSchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.upsert`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -880,12 +863,11 @@ export const make = ( const aggregate = >( args: PrismaNamespace.Exact> - ): Effect.Effect => + ): Effect.Effect => aggregateSchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.aggregate`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -902,11 +884,10 @@ export const make = ( const groupBy = >( args: PrismaNamespace.Exact> - ): Effect.Effect => + ): Effect.Effect => groupBySchema(args).pipe( - Effect.catchTag('ParseError', Effect.die), + Effect.catchTag('SchemaError', Effect.die), Effect.withSpan(`${options.spanPrefix}.groupBy`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -923,13 +904,12 @@ export const make = ( const updateMany = >( args: PrismaNamespace.Exact> & { data: Updateable } - ): Effect.Effect => + ): Effect.Effect => updateManySchema(args).pipe( Effect.map((res) => res as unknown as PrismaNamespace.BatchPayload), - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.updateMany`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any @@ -946,13 +926,12 @@ export const make = ( const deleteMany = >( args?: PrismaNamespace.Exact> - ): Effect.Effect => + ): Effect.Effect => deleteManySchema(args).pipe( Effect.map((res) => res as unknown as PrismaNamespace.BatchPayload), - Effect.catchTag('ParseError', Effect.die), - Effect.catchTag('NoSuchElementException', Effect.die), + Effect.catchTag('SchemaError', Effect.die), + Effect.catchTag('NoSuchElementError', Effect.die), Effect.withSpan(`${options.spanPrefix}.deleteMany`, { - captureStackTrace: false, attributes: { ...(args as any) }, }), ) as any diff --git a/packages/prisma/src/templates/prisma-schema.eta b/packages/prisma/src/templates/prisma-schema.eta index 8f7b37dc..0b74f35d 100644 --- a/packages/prisma/src/templates/prisma-schema.eta +++ b/packages/prisma/src/templates/prisma-schema.eta @@ -3,8 +3,6 @@ */ import * as Cause from 'effect/Cause' import * as Effect from 'effect/Effect' -import type * as Option from 'effect/Option' -import type { ParseError } from 'effect/ParseResult' import * as Schema from 'effect/Schema' /** @@ -13,23 +11,23 @@ import * as Schema from 'effect/Schema' * @since 1.0.0 * @category constructor */ -export const findAll = (options: { - readonly Request: Schema.Schema - readonly Result: Schema.Schema - readonly execute: (request: II) => Effect.Effect, E, R> +export const findAll = , Result extends Schema.Schema, R, E>(options: { + readonly Request: Request + readonly Result: Result + readonly execute: (request: any) => Effect.Effect, E, R> }) => { const encodeRequest = Schema.encodeEffect(options.Request) const decode = Schema.decodeUnknownEffect(Schema.Array(options.Result)) - return (request: IA): Effect.Effect, E | ParseError, R | IR | AR> => + return (request: any): Effect.Effect => Effect.flatMap(Effect.flatMap(encodeRequest(request), options.execute), decode) } -const void_ = (options: { - readonly Request: Schema.Schema - readonly execute: (request: II) => Effect.Effect +const void_ = , R, E>(options: { + readonly Request: Request + readonly execute: (request: any) => Effect.Effect }) => { const encode = Schema.encodeEffect(options.Request) - return (request: IA): Effect.Effect => + return (request: any): Effect.Effect => Effect.asVoid(Effect.flatMap(encode(request), options.execute)) } export { @@ -48,14 +46,14 @@ export { * @since 1.0.0 * @category constructor */ -export const findOne = (options: { - readonly Request: Schema.Schema - readonly Result: Schema.Schema - readonly execute: (request: II) => Effect.Effect, E, R> +export const findOne = , Result extends Schema.Schema, R, E>(options: { + readonly Request: Request + readonly Result: Result + readonly execute: (request: any) => Effect.Effect, E, R> }) => { const encodeRequest = Schema.encodeEffect(options.Request) const decode = Schema.decodeUnknownEffect(options.Result) - return (request: IA): Effect.Effect, E | ParseError, R | IR | AR> => + return (request: any): Effect.Effect => Effect.flatMap(Effect.flatMap(encodeRequest(request), options.execute), (arr) => Array.isArray(arr) && arr.length > 0 ? Effect.asSome(decode(arr[0])) : Effect.succeedNone, ) @@ -67,28 +65,28 @@ export const findOne = (options: { * @since 1.0.0 * @category constructor */ -export const single = (options: { - readonly Request: Schema.Schema - readonly Result: Schema.Schema - readonly execute: (request: II) => Effect.Effect, E, R> +export const single = , Result extends Schema.Schema, R, E>(options: { + readonly Request: Request + readonly Result: Result + readonly execute: (request: any) => Effect.Effect, E, R> }) => { const encodeRequest = Schema.encodeEffect(options.Request) const decode = Schema.decodeUnknownEffect(options.Result) - return (request: IA): Effect.Effect => + return (request: any): Effect.Effect => Effect.flatMap( Effect.flatMap(encodeRequest(request), options.execute), - (arr): Effect.Effect => - Array.isArray(arr) && arr.length > 0 ? decode(arr[0]) : Effect.fail(new Cause.NoSuchElementException()), + (arr): Effect.Effect => + Array.isArray(arr) && arr.length > 0 ? decode(arr[0]) : Effect.fail(new Cause.NoSuchElementError("not found")), ) } -export const many = (options: { - readonly Request: Schema.Schema - readonly Result: Schema.Schema - readonly execute: (request: II) => Effect.Effect, E, R> +export const many = , Result extends Schema.Schema, R, E>(options: { + readonly Request: Request + readonly Result: Result + readonly execute: (request: any) => Effect.Effect, E, R> }) => { const encodeRequest = Schema.encodeEffect(options.Request) const decode = Schema.decodeUnknownEffect(Schema.Array(options.Result)) - return (request: IA): Effect.Effect, E | ParseError, R | IR | AR> => + return (request: any): Effect.Effect => Effect.map(Effect.flatMap(Effect.flatMap(encodeRequest(request), options.execute), decode), (arr) => [...arr]) } diff --git a/tsconfig.json b/tsconfig.json index d8901c61..1773369e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "path": "./packages/node/better-auth" }, { - "path": "./apps/node-auth-app" + "path": "./apps/node-auth-example" } ], "compilerOptions": { From 1ad3b615a5f5da53d4d809b275066d1d6dcb9807 Mon Sep 17 00:00:00 2001 From: Andres J Date: Sat, 21 Mar 2026 20:37:02 -0600 Subject: [PATCH 06/26] fix: update pnpm workspace configuration and dependencies - Adjusted package exclusion patterns for dist directories. - Updated dependency versions in the catalog for various packages. - Changed version specifications for vitest and added coverage-v8. - Reformatted catalog entries for consistency. --- .gitignore | 2 +- packages/node/better-auth/package.json | 13 +- packages/prisma/package.json | 1 + pnpm-lock.yaml | 360 ++++++++++++++----------- pnpm-workspace.yaml | 161 +++++------ 5 files changed, 286 insertions(+), 251 deletions(-) diff --git a/.gitignore b/.gitignore index d78baa90..9bc25cd3 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,7 @@ node_modules # misc /.sass-cache /connect.lock -/coverage +coverage /libpeerconnection.log npm-debug.log yarn-error.log diff --git a/packages/node/better-auth/package.json b/packages/node/better-auth/package.json index 20ad5851..3e8c97d0 100644 --- a/packages/node/better-auth/package.json +++ b/packages/node/better-auth/package.json @@ -29,17 +29,16 @@ "effect": "catalog:" }, "devDependencies": { - "@effect/vitest": "catalog:", - "effect": "catalog:", "@effect/platform-node": "catalog:", - "vitest": "catalog:", - "better-sqlite3": "catalog:", + "@effect/vitest": "catalog:", "@types/better-sqlite3": "catalog:", - "@types/node": "catalog:" + "@types/node": "catalog:", + "better-sqlite3": "catalog:", + "effect": "catalog:", + "vitest": "catalog:" }, "dependenciesMeta": {}, "dependencies": { "zod": "catalog:" - }, - "optionalDependencies": {} + } } diff --git a/packages/prisma/package.json b/packages/prisma/package.json index 79991288..05c5807b 100644 --- a/packages/prisma/package.json +++ b/packages/prisma/package.json @@ -52,6 +52,7 @@ "@prisma/internals": "catalog:", "@types/better-sqlite3": "catalog:", "@types/node": "catalog:", + "@vitest/coverage-v8": "catalog:", "better-sqlite3": "catalog:", "bun": "1.3.0", "dprint": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 045033b8..103c079a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,9 +156,12 @@ catalogs: '@vitejs/plugin-react': specifier: 5.1.1 version: 5.1.1 + '@vitest/coverage-v8': + specifier: ^4.1.0 + version: 4.1.0 '@vitest/ui': - specifier: 4.0.9 - version: 4.0.9 + specifier: ^4.1.0 + version: 4.1.0 astro: specifier: 5.17.1 version: 5.17.1 @@ -295,8 +298,8 @@ catalogs: specifier: 5.1.4 version: 5.1.4 vitest: - specifier: 4.0.9 - version: 4.0.9 + specifier: ^4.1.0 + version: 4.1.0 zod: specifier: 4.3.6 version: 4.3.6 @@ -350,13 +353,13 @@ importers: version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) '@nx/react': specifier: 'catalog:' - version: 22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@nx/vite': specifier: 'catalog:' - version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@nx/vitest': specifier: 22.5.4 - version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@nx/web': specifier: 'catalog:' version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -386,7 +389,7 @@ importers: version: 5.1.1(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/ui': specifier: 'catalog:' - version: 4.0.9(vitest@4.0.9) + version: 4.1.0(vitest@4.1.0) dprint: specifier: 'catalog:' version: 0.51.1 @@ -434,7 +437,7 @@ importers: version: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: 'catalog:' - version: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) apps/docs: dependencies: @@ -476,7 +479,7 @@ importers: version: link:../../packages/node/better-auth better-auth: specifier: 'catalog:' - version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.6.2)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.0.9) + version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.6.2)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.1.0) better-sqlite3: specifier: 'catalog:' version: 12.6.2 @@ -522,7 +525,7 @@ importers: version: 2.17.1(typescript@5.9.3) better-auth: specifier: 'catalog:' - version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.11)(vitest@4.0.9) + version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.11)(vitest@4.1.0) better-sqlite3: specifier: 12.4.6 version: 12.4.6 @@ -610,7 +613,7 @@ importers: version: 5.90.10(react@19.2.0) better-auth: specifier: 'catalog:' - version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.0.9) + version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.1.0) better-sqlite3: specifier: 12.4.6 version: 12.4.6 @@ -696,7 +699,7 @@ importers: devDependencies: '@nx/vite': specifier: 'catalog:' - version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + version: 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@tanstack/devtools-vite': specifier: 'catalog:' version: 0.3.12(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) @@ -807,7 +810,7 @@ importers: dependencies: better-auth: specifier: 'catalog:' - version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.6.2)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.0.9) + version: 1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.6.2)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.1.0) zod: specifier: 'catalog:' version: 4.3.6 @@ -817,7 +820,7 @@ importers: version: 4.0.0-beta.33(effect@4.0.0-beta.33)(ioredis@5.10.1) '@effect/vitest': specifier: 'catalog:' - version: 4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.0.9) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.1.0) '@types/better-sqlite3': specifier: 'catalog:' version: 7.6.13 @@ -832,7 +835,7 @@ importers: version: 4.0.0-beta.33 vitest: specifier: 'catalog:' - version: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) packages/prisma: dependencies: @@ -872,7 +875,7 @@ importers: version: 0.56.0 '@effect/vitest': specifier: 'catalog:' - version: 4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.0.9) + version: 4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.1.0) '@prisma/adapter-better-sqlite3': specifier: 'catalog:' version: 7.3.0 @@ -891,6 +894,9 @@ importers: '@types/node': specifier: 'catalog:' version: 20.19.25 + '@vitest/coverage-v8': + specifier: 'catalog:' + version: 4.1.0(vitest@4.1.0) better-sqlite3: specifier: 'catalog:' version: 12.6.2 @@ -917,7 +923,7 @@ importers: version: 5.1.4(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)) vitest: specifier: 'catalog:' - version: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2) + version: 4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)) packages/react/query: dependencies: @@ -1858,6 +1864,10 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + '@better-auth/core@1.4.10': resolution: {integrity: sha512-AThrfb6CpG80wqkanfrbN2/fGOYzhGladHFf3JhaWt/3/Vtf4h084T6PJLrDE7M/vCCGYvDI1DkvP3P1OB2HAg==} peerDependencies: @@ -5324,39 +5334,48 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitest/expect@4.0.9': - resolution: {integrity: sha512-C2vyXf5/Jfj1vl4DQYxjib3jzyuswMi/KHHVN2z+H4v16hdJ7jMZ0OGe3uOVIt6LyJsAofDdaJNIFEpQcrSTFw==} + '@vitest/coverage-v8@4.1.0': + resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==} + peerDependencies: + '@vitest/browser': 4.1.0 + vitest: 4.1.0 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@4.1.0': + resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} - '@vitest/mocker@4.0.9': - resolution: {integrity: sha512-PUyaowQFHW+9FKb4dsvvBM4o025rWMlEDXdWRxIOilGaHREYTi5Q2Rt9VCgXgPy/hHZu1LeuXtrA/GdzOatP2g==} + '@vitest/mocker@4.1.0': + resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.0.9': - resolution: {integrity: sha512-Hor0IBTwEi/uZqB7pvGepyElaM8J75pYjrrqbC8ZYMB9/4n5QA63KC15xhT+sqHpdGWfdnPo96E8lQUxs2YzSQ==} + '@vitest/pretty-format@4.1.0': + resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} - '@vitest/runner@4.0.9': - resolution: {integrity: sha512-aF77tsXdEvIJRkj9uJZnHtovsVIx22Ambft9HudC+XuG/on1NY/bf5dlDti1N35eJT+QZLb4RF/5dTIG18s98w==} + '@vitest/runner@4.1.0': + resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} - '@vitest/snapshot@4.0.9': - resolution: {integrity: sha512-r1qR4oYstPbnOjg0Vgd3E8ADJbi4ditCzqr+Z9foUrRhIy778BleNyZMeAJ2EjV+r4ASAaDsdciC9ryMy8xMMg==} + '@vitest/snapshot@4.1.0': + resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} - '@vitest/spy@4.0.9': - resolution: {integrity: sha512-J9Ttsq0hDXmxmT8CUOWUr1cqqAj2FJRGTdyEjSR+NjoOGKEqkEWj+09yC0HhI8t1W6t4Ctqawl1onHgipJve1A==} + '@vitest/spy@4.1.0': + resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} - '@vitest/ui@4.0.9': - resolution: {integrity: sha512-6HV2HHl9aRJ09TlYj/WAQxaa797Ezb5u0LpgabthlASAUAWKgw/W1DSPX7t848mMZmIUvzZgnUHGIylAoYHP0w==} + '@vitest/ui@4.1.0': + resolution: {integrity: sha512-sTSDtVM1GOevRGsCNhp1mBUHKo9Qlc55+HCreFT4fe99AHxl1QQNXSL3uj4Pkjh5yEuWZIx8E2tVC94nnBZECQ==} peerDependencies: - vitest: 4.0.9 + vitest: 4.1.0 - '@vitest/utils@4.0.9': - resolution: {integrity: sha512-cEol6ygTzY4rUPvNZM19sDf7zGa35IYTm9wfzkHoT/f5jX10IOY7QleWSOh5T0e3I3WVozwK5Asom79qW8DiuQ==} + '@vitest/utils@4.1.0': + resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -5583,6 +5602,9 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} + astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -7003,6 +7025,9 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true + flatted@3.4.0: + resolution: {integrity: sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw==} + flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} @@ -7897,6 +7922,9 @@ packages: jose@6.2.2: resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -8954,6 +8982,9 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -10133,6 +10164,9 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + steno@0.4.4: resolution: {integrity: sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==} @@ -10342,9 +10376,6 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.4: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} @@ -11019,24 +11050,25 @@ packages: vite: optional: true - vitest@4.0.9: - resolution: {integrity: sha512-E0Ja2AX4th+CG33yAFRC+d1wFx2pzU5r6HtG6LiPSE04flaE0qB6YyjSw9ZcpJAtVPfsvZGtJlKWZpuW7EHRxg==} + vitest@4.1.0: + resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 + '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.9 - '@vitest/browser-preview': 4.0.9 - '@vitest/browser-webdriverio': 4.0.9 - '@vitest/ui': 4.0.9 + '@vitest/browser-playwright': 4.1.0 + '@vitest/browser-preview': 4.1.0 + '@vitest/browser-webdriverio': 4.1.0 + '@vitest/ui': 4.1.0 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true @@ -12400,6 +12432,8 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@bcoe/v8-coverage@1.0.2': {} + '@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)': dependencies: '@better-auth/utils': 0.3.0 @@ -12600,10 +12634,10 @@ snapshots: effect: 4.0.0-beta.33 msgpackr: 1.11.9 - '@effect/vitest@4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.0.9)': + '@effect/vitest@4.0.0-beta.33(effect@4.0.0-beta.33)(vitest@4.1.0)': dependencies: effect: 4.0.0-beta.33 - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': dependencies: @@ -14039,7 +14073,7 @@ snapshots: '@nx/nx-win32-x64-msvc@22.5.4': optional: true - '@nx/react@22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/react@22.5.4(@babel/core@7.29.0)(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/helpers@0.5.19)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/eslint': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(@zkochan/js-yaml@0.0.7)(eslint@8.57.1)(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -14056,7 +14090,7 @@ snapshots: semver: 7.7.4 tslib: 2.8.1 optionalDependencies: - '@nx/vite': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + '@nx/vite': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) transitivePeerDependencies: - '@babel/core' - '@babel/traverse' @@ -14113,11 +14147,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) - '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) ajv: 8.18.0 enquirer: 2.3.6 @@ -14126,7 +14160,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -14137,11 +14171,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vite@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) - '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9) + '@nx/vitest': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0) '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) ajv: 8.18.0 enquirer: 2.3.6 @@ -14150,7 +14184,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@25.5.0)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -14161,7 +14195,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -14170,7 +14204,7 @@ snapshots: tslib: 2.8.1 optionalDependencies: vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -14181,7 +14215,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.9)': + '@nx/vitest@22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.1.0)': dependencies: '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) '@nx/js': 22.5.4(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.2.2(encoding@0.1.13)(typanion@3.14.0)) @@ -14190,7 +14224,7 @@ snapshots: tslib: 2.8.1 optionalDependencies: vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@25.5.0)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -16497,62 +16531,86 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/expect@4.0.9': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.0 + ast-v8-to-istanbul: 1.0.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.2 + obug: 2.1.1 + std-env: 4.0.0 + tinyrainbow: 3.1.0 + vitest: 4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)) + + '@vitest/expect@4.1.0': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.9 - '@vitest/utils': 4.0.9 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2))': dependencies: - '@vitest/spy': 4.0.9 + '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2) - '@vitest/mocker@4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@vitest/spy': 4.0.9 + '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/pretty-format@4.0.9': + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 4.1.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/pretty-format@4.1.0': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.0.9': + '@vitest/runner@4.1.0': dependencies: - '@vitest/utils': 4.0.9 + '@vitest/utils': 4.1.0 pathe: 2.0.3 - '@vitest/snapshot@4.0.9': + '@vitest/snapshot@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.9 + '@vitest/pretty-format': 4.1.0 + '@vitest/utils': 4.1.0 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.9': {} + '@vitest/spy@4.1.0': {} - '@vitest/ui@4.0.9(vitest@4.0.9)': + '@vitest/ui@4.1.0(vitest@4.1.0)': dependencies: - '@vitest/utils': 4.0.9 + '@vitest/utils': 4.1.0 fflate: 0.8.2 - flatted: 3.4.2 + flatted: 3.4.0 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@25.5.0)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/utils@4.0.9': + '@vitest/utils@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.9 + '@vitest/pretty-format': 4.1.0 + convert-source-map: 2.0.0 tinyrainbow: 3.1.0 '@web3-storage/multipart-parser@1.0.0': {} @@ -16791,6 +16849,12 @@ snapshots: dependencies: tslib: 2.8.1 + ast-v8-to-istanbul@1.0.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + astring@1.9.0: {} astro-expressive-code@0.41.7(astro@5.17.1(@types/node@25.5.0)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)): @@ -17104,7 +17168,7 @@ snapshots: bcryptjs@2.4.3: {} - better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.11)(vitest@4.0.9): + better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(solid-js@1.9.11)(vitest@4.1.0): dependencies: '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)) @@ -17126,9 +17190,9 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) solid-js: 1.9.11 - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@25.5.0)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) - better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.0.9): + better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.4.6)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.4.6)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.1.0): dependencies: '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)) @@ -17150,9 +17214,9 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) solid-js: 1.9.11 - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@25.5.0)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) - better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.6.2)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.0.9): + better-auth@1.4.10(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(typescript@5.9.3))(better-sqlite3@12.6.2)(mysql2@3.15.3)(prisma@7.3.0(@types/react@19.1.13)(better-sqlite3@12.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.11)(vitest@4.1.0): dependencies: '@better-auth/core': 1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0) '@better-auth/telemetry': 1.4.10(@better-auth/core@1.4.10(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.7(zod@4.3.6))(jose@6.2.2)(kysely@0.28.14)(nanostores@1.2.0)) @@ -17174,7 +17238,7 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) solid-js: 1.9.11 - vitest: 4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@types/node@25.5.0)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) better-call@1.1.7(zod@4.3.6): dependencies: @@ -18552,6 +18616,8 @@ snapshots: flat@5.0.2: {} + flatted@3.4.0: {} + flatted@3.4.2: {} flattie@1.1.1: {} @@ -19773,6 +19839,8 @@ snapshots: jose@6.2.2: {} + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -21309,6 +21377,8 @@ snapshots: object-inspect@1.13.4: {} + obug@2.1.1: {} + ofetch@1.5.1: dependencies: destr: 2.0.5 @@ -22797,6 +22867,8 @@ snapshots: std-env@3.10.0: {} + std-env@4.0.0: {} + steno@0.4.4: dependencies: graceful-fs: 4.2.11 @@ -23037,8 +23109,6 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} - tinyexec@1.0.4: {} tinyglobby@0.2.15: @@ -23747,128 +23817,92 @@ snapshots: optionalDependencies: vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vitest@4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2): + vitest@4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)): dependencies: - '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.9 - '@vitest/runner': 4.0.9 - '@vitest/snapshot': 4.0.9 - '@vitest/spy': 4.0.9 - '@vitest/utils': 4.0.9 - debug: 4.4.3 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.13 '@types/node': 20.19.25 - '@vitest/ui': 4.0.9(vitest@4.0.9) + '@vitest/ui': 4.1.0(vitest@4.1.0) jsdom: 27.2.0 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@4.0.9(@types/debug@4.1.13)(@types/node@20.19.25)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.0(@types/node@20.19.25)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.9 - '@vitest/runner': 4.0.9 - '@vitest/snapshot': 4.0.9 - '@vitest/spy': 4.0.9 - '@vitest/utils': 4.0.9 - debug: 4.4.3 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 vite: 7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.13 '@types/node': 20.19.25 - '@vitest/ui': 4.0.9(vitest@4.0.9) + '@vitest/ui': 4.1.0(vitest@4.1.0) jsdom: 27.2.0 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@4.0.9(@types/debug@4.1.13)(@types/node@25.5.0)(@vitest/ui@4.0.9)(jiti@2.6.1)(jsdom@27.2.0)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.0(@types/node@25.5.0)(@vitest/ui@4.1.0)(jsdom@27.2.0)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(vite@7.3.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.9 - '@vitest/runner': 4.0.9 - '@vitest/snapshot': 4.0.9 - '@vitest/spy': 4.0.9 - '@vitest/utils': 4.0.9 - debug: 4.4.3 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.13 '@types/node': 25.5.0 - '@vitest/ui': 4.0.9(vitest@4.0.9) + '@vitest/ui': 4.1.0(vitest@4.1.0) jsdom: 27.2.0 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml w3c-xmlserializer@5.0.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a711bd51..a986d398 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,84 +2,85 @@ packages: - apps/* - packages/* - packages/*/* - - '!packages/*/dist' - - '!packages/*/*/dist' + - "!packages/*/dist" + - "!packages/*/*/dist" catalog: - '@astrojs/starlight': 0.36.3 - '@astrojs/starlight-tailwind': 4.0.2 - '@better-auth/cli': 1.4.10 - '@corvu/drawer': 0.2.4 - '@dprint/formatter': ^0.5.1 - '@dprint/typescript': ^0.95.15 - '@effect-atom/atom': 0.5.0 - '@effect/atom-solid': 4.0.0-beta.33 - '@effect/build-utils': 0.8.9 - '@effect/experimental': 0.59.0 - '@effect/language-service': 0.56.0 - '@effect/platform': 4.0.0-beta.33 - '@effect/platform-node': 4.0.0-beta.33 - '@effect/vitest': 4.0.0-beta.33 - '@kobalte/core': 0.13.11 - '@nx/js': 22.5.4 - '@nx/node': 22.5.4 - '@nx/react': 22.5.4 - '@nx/vite': 22.5.4 - '@nx/web': 22.5.4 - '@prisma/adapter-better-sqlite3': 7.3.0 - '@prisma/adapter-pg': 7.3.0 - '@prisma/client': 7.3.0 - '@prisma/client-runtime-utils': 7.3.0 - '@prisma/generator': 7.3.0 - '@prisma/generator-helper': 7.3.0 - '@prisma/internals': 7.3.0 - '@radix-ui/react-form': 0.1.8 - '@radix-ui/react-label': 2.1.8 - '@radix-ui/react-slot': 1.2.4 - '@react-router/dev': 7.12.0 - '@react-router/node': 7.12.0 - '@react-router/serve': 7.12.0 - '@remix-run/node': 2.17.4 - '@remix-run/node-fetch-server': 0.12.0 - '@remix-run/react': 2.17.4 - '@remix-run/serve': 2.17.2 - '@solidjs/start': 1.2.0 - '@solidjs/testing-library': 0.8.10 - '@swc-node/register': 1.11.1 - '@swc/core': 1.15.8 - '@swc/helpers': 0.5.19 - '@tailwindcss/postcss': 4.1.17 - '@tailwindcss/typography': 0.5.19 - '@tailwindcss/vite': 4.1.18 - '@tanstack/devtools-vite': ^0.3.11 - '@tanstack/query-core': 5.90.20 - '@tanstack/react-form': 1.25.0 - '@tanstack/react-query': 5.90.10 - '@tanstack/react-query-devtools': 5.91.0 - '@tanstack/react-router': 1.139.3 - '@tanstack/react-router-devtools': 1.139.3 - '@tanstack/router-plugin': ^1.133.21 - '@tanstack/solid-form': 1.25.0 - '@tanstack/solid-query': 5.90.23 - '@tanstack/solid-query-devtools': 5.91.0 - '@tanstack/solid-router': ^1.133.20 - '@tanstack/solid-router-devtools': ^1.133.20 - '@tanstack/solid-router-ssr-query': ^1.132.25 - '@tanstack/solid-start': ^1.132.25 - '@testing-library/dom': 10.4.1 - '@testing-library/jest-dom': 6.9.1 - '@testing-library/react': 16.3.0 - '@types/better-sqlite3': 7.6.13 - '@types/compression': 1.8.1 - '@types/express': 5.0.5 - '@types/node': 20.19.25 - '@types/pg': ^8.15.6 - '@types/react': 19.2.7 - '@types/react-dom': 19.2.3 - '@types/validator': 13.15.10 - '@vitejs/plugin-react': 5.1.1 - '@vitejs/plugin-rsc': 0.5.1 - '@vitest/ui': 4.0.9 + "@astrojs/starlight": 0.36.3 + "@astrojs/starlight-tailwind": 4.0.2 + "@better-auth/cli": 1.4.10 + "@corvu/drawer": 0.2.4 + "@dprint/formatter": ^0.5.1 + "@dprint/typescript": ^0.95.15 + "@effect-atom/atom": 0.5.0 + "@effect/atom-solid": 4.0.0-beta.33 + "@effect/build-utils": 0.8.9 + "@effect/experimental": 0.59.0 + "@effect/language-service": 0.56.0 + "@effect/platform": 4.0.0-beta.33 + "@effect/platform-node": 4.0.0-beta.33 + "@effect/vitest": 4.0.0-beta.33 + "@kobalte/core": 0.13.11 + "@nx/js": 22.5.4 + "@nx/node": 22.5.4 + "@nx/react": 22.5.4 + "@nx/vite": 22.5.4 + "@nx/web": 22.5.4 + "@prisma/adapter-better-sqlite3": 7.3.0 + "@prisma/adapter-pg": 7.3.0 + "@prisma/client": 7.3.0 + "@prisma/client-runtime-utils": 7.3.0 + "@prisma/generator": 7.3.0 + "@prisma/generator-helper": 7.3.0 + "@prisma/internals": 7.3.0 + "@radix-ui/react-form": 0.1.8 + "@radix-ui/react-label": 2.1.8 + "@radix-ui/react-slot": 1.2.4 + "@react-router/dev": 7.12.0 + "@react-router/node": 7.12.0 + "@react-router/serve": 7.12.0 + "@remix-run/node": 2.17.4 + "@remix-run/node-fetch-server": 0.12.0 + "@remix-run/react": 2.17.4 + "@remix-run/serve": 2.17.2 + "@solidjs/start": 1.2.0 + "@solidjs/testing-library": 0.8.10 + "@swc-node/register": 1.11.1 + "@swc/core": 1.15.8 + "@swc/helpers": 0.5.19 + "@tailwindcss/postcss": 4.1.17 + "@tailwindcss/typography": 0.5.19 + "@tailwindcss/vite": 4.1.18 + "@tanstack/devtools-vite": ^0.3.11 + "@tanstack/query-core": 5.90.20 + "@tanstack/react-form": 1.25.0 + "@tanstack/react-query": 5.90.10 + "@tanstack/react-query-devtools": 5.91.0 + "@tanstack/react-router": 1.139.3 + "@tanstack/react-router-devtools": 1.139.3 + "@tanstack/router-plugin": ^1.133.21 + "@tanstack/solid-form": 1.25.0 + "@tanstack/solid-query": 5.90.23 + "@tanstack/solid-query-devtools": 5.91.0 + "@tanstack/solid-router": ^1.133.20 + "@tanstack/solid-router-devtools": ^1.133.20 + "@tanstack/solid-router-ssr-query": ^1.132.25 + "@tanstack/solid-start": ^1.132.25 + "@testing-library/dom": 10.4.1 + "@testing-library/jest-dom": 6.9.1 + "@testing-library/react": 16.3.0 + "@types/better-sqlite3": 7.6.13 + "@types/compression": 1.8.1 + "@types/express": 5.0.5 + "@types/node": 20.19.25 + "@types/pg": ^8.15.6 + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3 + "@types/validator": 13.15.10 + "@vitejs/plugin-react": 5.1.1 + "@vitejs/plugin-rsc": 0.5.1 + "@vitest/coverage-v8": ^4.1.0 + "@vitest/ui": ^4.1.0 astro: 5.17.1 autoprefixer: 10.4.22 better-auth: 1.4.10 @@ -135,7 +136,7 @@ catalog: vite-plugin-lucide-preprocess: 1.4.6 vite-plugin-solid: ^2.11.10 vite-tsconfig-paths: 5.1.4 - vitest: 4.0.9 + vitest: ^4.1.0 web-vitals: 5.1.0 zod: 4.3.6 @@ -144,9 +145,9 @@ catalogMode: prefer cleanupUnusedCatalogs: true onlyBuiltDependencies: - - '@parcel/watcher' - - '@swc/core' - - '@tailwindcss/oxide' + - "@parcel/watcher" + - "@swc/core" + - "@tailwindcss/oxide" - better-sqlite3 - core-js - esbuild From 8fdb723206b4e9d81b075ccce49adbda12f7e81b Mon Sep 17 00:00:00 2001 From: Andres J Date: Sat, 21 Mar 2026 21:37:49 -0600 Subject: [PATCH 07/26] feat: integrate Prisma with the React Router example and update schema --- .../docs/src/content/docs/universal/index.mdx | 2 +- .../app/lib/runtime.server.ts | 9 +++- .../app/routes/todo-app.tsx | 45 +++++++++++-------- apps/react-router-example/package.json | 4 +- .../react-router-example/prisma/schema.prisma | 5 +++ apps/react-router-example/tsconfig.app.json | 1 + .../prisma/src/templates/effect-enums.eta | 2 +- pnpm-lock.yaml | 3 ++ 8 files changed, 48 insertions(+), 23 deletions(-) diff --git a/apps/docs/src/content/docs/universal/index.mdx b/apps/docs/src/content/docs/universal/index.mdx index c54895e6..57f9d3f2 100644 --- a/apps/docs/src/content/docs/universal/index.mdx +++ b/apps/docs/src/content/docs/universal/index.mdx @@ -217,7 +217,7 @@ export const MessageSchema = Schema.struct({ userId: Schema.string, roomId: Schema.string, timestamp: Schema.Date, - type: Schema.literal('text', 'image', 'file') + type: Schema.literals(['text', 'image', 'file']) }) // Use for validation diff --git a/apps/react-router-example/app/lib/runtime.server.ts b/apps/react-router-example/app/lib/runtime.server.ts index cc15b4cb..bb6f3694 100644 --- a/apps/react-router-example/app/lib/runtime.server.ts +++ b/apps/react-router-example/app/lib/runtime.server.ts @@ -3,9 +3,16 @@ import { Runtime } from "@effectify/react-router" import { AuthService } from "@effectify/node-better-auth" import * as Layer from "effect/Layer" import { authOptions } from "./better-auth-options.server.js" +import { Prisma } from "./../../prisma/generated/effect/index.js" const Authlayer = AuthService.AuthServiceContext.layer(authOptions) -const AppLayer = Layer.mergeAll(Authlayer) +const AppLayer = Layer.mergeAll( + Authlayer, + Prisma.layer({ + // Prisma Client options + log: ["query", "info", "warn", "error"], + }), +) export const { withLoaderEffect, withActionEffect } = Runtime.make(AppLayer) diff --git a/apps/react-router-example/app/routes/todo-app.tsx b/apps/react-router-example/app/routes/todo-app.tsx index b955964d..2f922a1f 100644 --- a/apps/react-router-example/app/routes/todo-app.tsx +++ b/apps/react-router-example/app/routes/todo-app.tsx @@ -6,17 +6,16 @@ import { randomUUID } from "node:crypto" import { Form, useActionData, useSubmit } from "react-router" import { useState } from "react" import { withBetterAuthGuard } from "@effectify/react-router-better-auth" - -let todos = [ - { - id: "1", - title: "Todo 1", - content: "Content 1", - status: "PENDING", - }, -] +import * as PrismaRepository from "./../../prisma/generated/effect/prisma-repository.js" +import { TodoId, TodoModel } from "./../../prisma/generated/effect/index.js" export const loader = Effect.gen(function*() { + const TodoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "Todo", + }) + + const todos = yield* TodoRepo.findMany() return yield* httpSuccess({ todos: todos }) }) .pipe(withBetterAuthGuard.with({ redirectOnFail: "/login" })) @@ -30,11 +29,16 @@ export const action = Effect.gen(function*() { const title = String(formData.get("title") ?? "") const content = String(formData.get("content") ?? "") + const TodoRepo = yield* PrismaRepository.make(TodoModel, { + modelName: "todo", + spanPrefix: "Todo", + }) + if (intent === "delete") { if (!id) { return yield* httpFailure("Missing id") } - todos = todos.filter((todo) => todo.id !== id) + yield* TodoRepo.delete({ where: { id } }) return yield* httpRedirect("/todo-app") } @@ -46,7 +50,7 @@ export const action = Effect.gen(function*() { return yield* httpFailure("Title is required") } - todos = todos.map((todo) => todo.id === id ? { ...todo, title, content } : todo) + yield* TodoRepo.update({ where: { id }, data: { title, content } }) return yield* httpRedirect("/todo-app") } @@ -55,8 +59,8 @@ export const action = Effect.gen(function*() { return yield* httpFailure("Missing id") } const statusStr = String(formData.get("status") ?? "") - const status = statusStr === "COMPLETED" ? "COMPLETED" : "PENDING" - todos = todos.map((todo) => todo.id === id ? { ...todo, status } : todo) + const status = statusStr === "COMPLETED" ? "COMPLETED" : "PENDING" as const + yield* TodoRepo.update({ where: { id }, data: { status } }) return yield* httpRedirect("/todo-app") } @@ -64,13 +68,16 @@ export const action = Effect.gen(function*() { return yield* httpFailure("Title is required") } - todos.push({ - id: randomUUID(), - title, - content, - status: "PENDING", + yield* TodoRepo.create({ + data: { + id: TodoId.makeUnsafe(randomUUID()), + title, + content, + status: "PENDING", + authorId: 1, + published: false, + }, }) - return yield* httpRedirect("/todo-app") }) .pipe(withBetterAuthGuard.with({ redirectOnFail: "/login" })) diff --git a/apps/react-router-example/package.json b/apps/react-router-example/package.json index 668f6856..c6ae90cb 100644 --- a/apps/react-router-example/package.json +++ b/apps/react-router-example/package.json @@ -4,7 +4,8 @@ "type": "module", "scripts": { "typecheck": "react-router typegen && tsc", - "dev": "react-router dev" + "dev": "react-router dev", + "prisma:generate": "pnpm dlx prisma generate" }, "sideEffects": false, "dependencies": { @@ -12,6 +13,7 @@ "@effectify/react-query": "workspace:*", "@effectify/react-router": "workspace:*", "@effectify/react-router-better-auth": "workspace:*", + "@effectify/prisma": "workspace:*", "@prisma/adapter-better-sqlite3": "catalog:", "@prisma/client": "catalog:", "@prisma/client-runtime-utils": "catalog:", diff --git a/apps/react-router-example/prisma/schema.prisma b/apps/react-router-example/prisma/schema.prisma index 5fd50230..6991dcd1 100644 --- a/apps/react-router-example/prisma/schema.prisma +++ b/apps/react-router-example/prisma/schema.prisma @@ -8,6 +8,11 @@ generator client { provider = "prisma-client-js" } +generator effect { + provider = "effect-prisma" + output = "./generated/effect" +} + datasource db { provider = "sqlite" } diff --git a/apps/react-router-example/tsconfig.app.json b/apps/react-router-example/tsconfig.app.json index 2005a52e..4be41c19 100644 --- a/apps/react-router-example/tsconfig.app.json +++ b/apps/react-router-example/tsconfig.app.json @@ -5,6 +5,7 @@ "app/**/*.tsx", "app/**/*.js", "app/**/*.jsx", + "prisma/generated/**/*.ts", "**/.server/**/*.ts", "**/.server/**/*.tsx", "**/.client/**/*.ts", diff --git a/packages/prisma/src/templates/effect-enums.eta b/packages/prisma/src/templates/effect-enums.eta index 2edc2227..c31f4586 100644 --- a/packages/prisma/src/templates/effect-enums.eta +++ b/packages/prisma/src/templates/effect-enums.eta @@ -3,7 +3,7 @@ import * as Schema from "effect/Schema"; <% it.enums.forEach(function(enumItem) { %> -export const <%= enumItem.name %> = Schema.Literal(<%~ enumItem.values %>); +export const <%= enumItem.name %> = Schema.Literals([<%~ enumItem.values %>]); export type <%= enumItem.name %> = typeof <%= enumItem.name %>.Type; <% }) %> diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 103c079a..2d39ec2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -584,6 +584,9 @@ importers: '@effectify/node-better-auth': specifier: workspace:* version: link:../../packages/node/better-auth + '@effectify/prisma': + specifier: workspace:* + version: link:../../packages/prisma '@effectify/react-query': specifier: workspace:* version: link:../../packages/react/query From 16665d9e79178b47ad21b0ab5ab5bc0c1b71101d Mon Sep 17 00:00:00 2001 From: Andres J Date: Sun, 22 Mar 2026 11:54:34 -0600 Subject: [PATCH 08/26] feat: add PrismaBetterSqlite3 adapter and enhance auth guard integration in TodoApp --- .../app/lib/runtime.server.ts | 6 ++ .../app/routes/todo-app.tsx | 86 ++++++++++++++---- dev.db | Bin 57344 -> 57344 bytes packages/react/router/src/lib/runtime.ts | 2 +- 4 files changed, 74 insertions(+), 20 deletions(-) diff --git a/apps/react-router-example/app/lib/runtime.server.ts b/apps/react-router-example/app/lib/runtime.server.ts index bb6f3694..63f04559 100644 --- a/apps/react-router-example/app/lib/runtime.server.ts +++ b/apps/react-router-example/app/lib/runtime.server.ts @@ -4,13 +4,19 @@ import { AuthService } from "@effectify/node-better-auth" import * as Layer from "effect/Layer" import { authOptions } from "./better-auth-options.server.js" import { Prisma } from "./../../prisma/generated/effect/index.js" +import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3" const Authlayer = AuthService.AuthServiceContext.layer(authOptions) +const adapter = new PrismaBetterSqlite3({ + url: process.env.DATABASE_URL ?? "file:./dev.db", +}) + const AppLayer = Layer.mergeAll( Authlayer, Prisma.layer({ // Prisma Client options + adapter, log: ["query", "info", "warn", "error"], }), ) diff --git a/apps/react-router-example/app/routes/todo-app.tsx b/apps/react-router-example/app/routes/todo-app.tsx index 2f922a1f..03617d4d 100644 --- a/apps/react-router-example/app/routes/todo-app.tsx +++ b/apps/react-router-example/app/routes/todo-app.tsx @@ -5,7 +5,7 @@ import { withActionEffect, withLoaderEffect } from "../lib/runtime.server.js" import { randomUUID } from "node:crypto" import { Form, useActionData, useSubmit } from "react-router" import { useState } from "react" -import { withBetterAuthGuard } from "@effectify/react-router-better-auth" +import { withBetterAuthGuard, withBetterAuthGuardAction } from "@effectify/react-router-better-auth" import * as PrismaRepository from "./../../prisma/generated/effect/prisma-repository.js" import { TodoId, TodoModel } from "./../../prisma/generated/effect/index.js" @@ -59,7 +59,7 @@ export const action = Effect.gen(function*() { return yield* httpFailure("Missing id") } const statusStr = String(formData.get("status") ?? "") - const status = statusStr === "COMPLETED" ? "COMPLETED" : "PENDING" as const + const status = statusStr === "COMPLETED" ? "COMPLETED" : ("PENDING" as const) yield* TodoRepo.update({ where: { id }, data: { status } }) return yield* httpRedirect("/todo-app") } @@ -80,12 +80,10 @@ export const action = Effect.gen(function*() { }) return yield* httpRedirect("/todo-app") }) - .pipe(withBetterAuthGuard.with({ redirectOnFail: "/login" })) + .pipe(withBetterAuthGuardAction.with({ redirectOnFail: "/login" })) .pipe(withActionEffect) -export default function TodoApp({ - loaderData, -}: Route.ComponentProps) { +export default function TodoApp({ loaderData }: Route.ComponentProps) { const actionData = useActionData() const submit = useSubmit() const [editingId, setEditingId] = useState(null) @@ -98,14 +96,31 @@ export default function TodoApp({
- + -