diff --git a/.changeset/effect-v4-upgrade.md b/.changeset/effect-v4-upgrade.md new file mode 100644 index 0000000000..7b74797994 --- /dev/null +++ b/.changeset/effect-v4-upgrade.md @@ -0,0 +1,23 @@ +--- +"@uploadthing/shared": major +"uploadthing": major +"@example/backend-adapters-server": patch +"next-playground": patch +"next-playground-v6": patch +"@uploadthing/tsconfig": patch +--- + +feat!: upgrade to Effect v4 + +- `effect` is bumped from `3.21.0` to `4.0.0-beta.93`. Since `@effect/platform` + has been merged into the core `effect` package in v4, the separate + `@effect/platform` dependency is removed and all HTTP modules are now + imported from `effect/unstable/http`. +- Client-side code previously built on `effect/Micro` (which was removed in v4) + now uses the core `Effect` module, which is aggressively tree-shakeable in v4. +- The `uploadthing/effect-platform` adapter now returns a plain + `Effect` + handler that can be registered on an Effect v4 `HttpRouter` (e.g. via + `HttpRouter.add("*", "/api/uploadthing", handler)`). +- Public types that referenced Effect v3 concepts follow the v4 renames, e.g. + `logLevel` options are now typed as `LogLevel.LogLevel` string literals. diff --git a/.nvmrc b/.nvmrc index f3c67fcf74..836f191048 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.14 \ No newline at end of file +22.23 diff --git a/examples/backend-adapters/server/package.json b/examples/backend-adapters/server/package.json index 52aa618282..bce07ce8c0 100644 --- a/examples/backend-adapters/server/package.json +++ b/examples/backend-adapters/server/package.json @@ -13,15 +13,14 @@ "dev:effect": "NODE_ENV=development PORT=3003 tsx watch src/effect-platform.ts" }, "dependencies": { - "@effect/platform": "0.96.0", - "@effect/platform-node": "0.106.0", + "@effect/platform-node": "4.0.0-rc.110", "@elysiajs/cors": "^1.2.0", "@fastify/cors": "^10.0.1", "@hono/node-server": "^1.13.7", "@sinclair/typebox": "^0.34.13", "cors": "^2.8.5", "dotenv": "^16.4.5", - "effect": "3.21.0", + "effect": "4.0.0-rc.110", "elysia": "^1.2.9", "express": "^5.0.1", "fastify": "^5.2.0", diff --git a/examples/backend-adapters/server/src/effect-platform.ts b/examples/backend-adapters/server/src/effect-platform.ts index c3e991a336..ab6922885b 100644 --- a/examples/backend-adapters/server/src/effect-platform.ts +++ b/examples/backend-adapters/server/src/effect-platform.ts @@ -1,70 +1,52 @@ import "dotenv/config"; import { createServer } from "node:http"; +import { NodeHttpServer, NodeRuntime } from "@effect/platform-node"; +import { Config, Effect, Layer, References } from "effect"; import { FetchHttpClient, - Headers, - HttpMiddleware, HttpRouter, HttpServer, - HttpServerRequest, HttpServerResponse, -} from "@effect/platform"; -import { NodeHttpServer, NodeRuntime } from "@effect/platform-node"; -import { Config, Effect, Layer, Logger, LogLevel } from "effect"; +} from "effect/unstable/http"; import { createRouteHandler } from "uploadthing/effect-platform"; import { uploadRouter } from "./router"; -const uploadthingRouter = createRouteHandler({ +const uploadthingHandler = createRouteHandler({ router: uploadRouter, }); -/** - * Simple CORS middleware that allows everything - * Adjust to your needs. - */ -const cors = HttpMiddleware.make((app) => - Effect.gen(function* () { - const req = yield* HttpServerRequest.HttpServerRequest; - - const corsHeaders = { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "*", - "Access-Control-Allow-Headers": "*", - }; - - if (req.method === "OPTIONS") { - return HttpServerResponse.empty({ - status: 204, - headers: Headers.fromInput(corsHeaders), - }); - } - - const response = yield* app; - - return response.pipe(HttpServerResponse.setHeaders(corsHeaders)); +const Routes = Layer.mergeAll( + HttpRouter.add("GET", "/api", HttpServerResponse.text("Hello from Effect")), + HttpRouter.add( + "*", + "/api/uploadthing", + uploadthingHandler.pipe(Effect.orDie), + ), + /** + * Simple CORS middleware that allows everything. + * Adjust to your needs. + */ + HttpRouter.cors({ + allowedOrigins: ["*"], + allowedMethods: ["*"], + allowedHeaders: ["*"], }), ); -const router = HttpRouter.empty.pipe( - HttpRouter.get("/api", HttpServerResponse.text("Hello from Effect")), - HttpRouter.mountApp("/api/uploadthing", uploadthingRouter), +const ServerLive = Layer.unwrap( + Effect.map(Config.port("PORT").pipe(Config.withDefault(3000)), (port) => + NodeHttpServer.layer(() => createServer(), { port }), + ), ); -const app = router.pipe( - cors, - HttpServer.serve(HttpMiddleware.logger), +const AppLive = HttpRouter.serve(Routes).pipe( HttpServer.withLogAddress, Layer.provide(FetchHttpClient.layer), + Layer.provide(ServerLive), + Layer.provide(Layer.succeed(References.MinimumLogLevel, "Debug")), ); -const Port = Config.integer("PORT").pipe(Config.withDefault(3000)); -const ServerLive = Layer.unwrapEffect( - Effect.map(Port, (port) => - NodeHttpServer.layer(() => createServer(), { port }), - ).pipe(Effect.provide(Logger.minimumLogLevel(LogLevel.Debug))), -); - -NodeRuntime.runMain(Layer.launch(Layer.provide(app, ServerLive))); +NodeRuntime.runMain(Layer.launch(AppLive)); diff --git a/examples/minimal-expo/tsconfig.json b/examples/minimal-expo/tsconfig.json index 8a583be5f3..9f064e69e5 100644 --- a/examples/minimal-expo/tsconfig.json +++ b/examples/minimal-expo/tsconfig.json @@ -3,6 +3,14 @@ "compilerOptions": { "strict": true, "jsx": "react-native", + /** + * Effect v4 only exposes its submodules (e.g. `effect/Schema`) through + * package.json `exports` (no `typesVersions` fallback), which the legacy + * `node` resolution from expo/tsconfig.base cannot follow. Metro resolves + * package exports since Expo SDK 53, so `bundler` matches runtime behavior. + */ + "module": "preserve", + "moduleResolution": "bundler", "paths": { "~/*": ["./*"] } diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index edd26b4c19..06086b181a 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -47,7 +47,7 @@ "nuxt": "^3.15.0", "uploadthing": "workspace:*", "vite": "^6.3.4", - "vitest": "3.2.4" + "vitest": "4.1.10" }, "peerDependencies": { "uploadthing": "^7.2.0" diff --git a/packages/react/package.json b/packages/react/package.json index 7c49fcf543..82b35c1d1a 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -84,8 +84,9 @@ "@uploadthing/eslint-config": "workspace:*", "@uploadthing/tsconfig": "workspace:*", "@uploadthing/vitest-config": "workspace:*", - "@vitest/browser": "3.2.4", - "@vitest/coverage-istanbul": "3.2.4", + "@vitest/browser": "4.1.10", + "@vitest/browser-playwright": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", "concurrently": "^9.1.2", "eslint": "9.25.1", "msw": "2.7.5", @@ -96,8 +97,8 @@ "tsdown": "0.14.1", "typescript": "5.8.3", "uploadthing": "workspace:*", - "vitest": "3.2.4", - "vitest-browser-react": "0.3.0", + "vitest": "4.1.10", + "vitest-browser-react": "2.2.0", "wait-on": "^8.0.1", "zod": "^3.24.1" } diff --git a/packages/react/test/upload-button.browser.test.tsx b/packages/react/test/upload-button.browser.test.tsx index 8ed4cf7594..23ea4bffd3 100644 --- a/packages/react/test/upload-button.browser.test.tsx +++ b/packages/react/test/upload-button.browser.test.tsx @@ -1,8 +1,8 @@ -import { page, userEvent } from "@vitest/browser/context"; import { http, HttpResponse } from "msw"; import { setupWorker } from "msw/browser"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; import { render } from "vitest-browser-react"; +import { page, userEvent } from "vitest/browser"; import { createRouteHandler, @@ -86,7 +86,7 @@ afterAll(() => worker.stop()); describe("UploadButton - basic", () => { it("fetches and displays route config", async () => { - const utils = render(); + const utils = await render(); const label = utils.container.querySelector("label"); if (!label) throw new Error("No label found"); @@ -106,7 +106,7 @@ describe("UploadButton - basic", () => { }); it("fetches and displays route config (with callback endpoint arg)", async () => { - const utils = render( + const utils = await render( routeRegistry.image} />, ); const label = utils.container.querySelector("label"); @@ -128,7 +128,7 @@ describe("UploadButton - basic", () => { }); it("shows plural when maxFileCount is > 1", async () => { - const utils = render(); + const utils = await render(); const label = utils.container.querySelector("label"); if (!label) throw new Error("No label found"); @@ -146,7 +146,7 @@ describe("UploadButton - basic", () => { it("picks up route config from global and skips fetch", async () => { (window as any).__UPLOADTHING = extractRouterConfig(testRouter); - render(); + await render(); await expect.element(page.getByText("Image (4MB)")).toBeVisible(); expect(utGet).not.toHaveBeenCalled(); @@ -154,7 +154,7 @@ describe("UploadButton - basic", () => { }); it("requests URLs when a file is selected", async () => { - const utils = render(); + const utils = await render(); const label = utils.container.querySelector("label"); await vi.waitFor(() => expect(label).toHaveAttribute("data-state", "ready"), @@ -171,7 +171,7 @@ describe("UploadButton - basic", () => { { name: "foo.txt", type: "text/plain", - size: 18, + size: 3, lastModified: expect.any(Number), }, ], @@ -182,7 +182,7 @@ describe("UploadButton - basic", () => { }); it("manual mode requires extra click", async () => { - const utils = render( + const utils = await render( , ); const label = utils.container.querySelector("label"); @@ -209,7 +209,7 @@ describe("UploadButton - basic", () => { // https://discord.com/channels/966627436387266600/1102510616326967306/1267098160468197409 it.skip("disabled", async () => { - const utils = render(); + const utils = await render(); const label = utils.container.querySelector("label"); await vi.waitFor(() => expect(label).toHaveTextContent("Choose File")); expect(label).toHaveAttribute("disabled"); @@ -218,7 +218,7 @@ describe("UploadButton - basic", () => { describe("UploadButton - lifecycle hooks", () => { it("onBeforeUploadBegin alters the requested files", async () => { - const utils = render( + const utils = await render( { @@ -245,7 +245,7 @@ describe("UploadButton - lifecycle hooks", () => { it("onUploadBegin runs before uploading", async () => { const onUploadBegin = vi.fn(); - const utils = render( + const utils = await render( , ); @@ -265,7 +265,7 @@ describe("UploadButton - lifecycle hooks", () => { describe("UploadButton - Theming", () => { it("renders custom styles", async () => { - render( + await render( { describe("UploadButton - Content Customization", () => { it("renders custom content", async () => { - render( + await render( worker.stop()); describe("UploadDropzone - basic", () => { it("fetches and displays route config", async () => { - const utils = render(); + const utils = await render(); const label = utils.container.querySelector("label"); if (!label) throw new Error("No label found"); @@ -73,7 +73,7 @@ describe("UploadDropzone - basic", () => { }); it("shows plural when maxFileCount is > 1", async () => { - const utils = render(); + const utils = await render(); const label = utils.container.querySelector("label"); if (!label) throw new Error("No label found"); diff --git a/packages/react/vitest.config.ts b/packages/react/vitest.config.ts index 55d620e831..7b523c0b24 100644 --- a/packages/react/vitest.config.ts +++ b/packages/react/vitest.config.ts @@ -1,3 +1,4 @@ +import { playwright } from "@vitest/browser-playwright"; import { defineConfig, mergeConfig } from "vitest/config"; import { baseConfig } from "@uploadthing/vitest-config/base"; @@ -9,7 +10,7 @@ export default mergeConfig( name: "browser", browser: { instances: [{ browser: "chromium" }], - provider: "playwright", + provider: playwright(), enabled: true, }, }, diff --git a/packages/shared/package.json b/packages/shared/package.json index 10589e24da..fa1072ed0a 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -42,22 +42,22 @@ }, "dependencies": { "@uploadthing/mime-types": "workspace:*", - "effect": "3.21.0", + "effect": "4.0.0-rc.110", "sqids": "^0.3.0" }, "devDependencies": { - "@effect/vitest": "0.29.0", + "@effect/vitest": "4.0.0-rc.110", "@types/react": "19.2.7", "@uploadthing/eslint-config": "workspace:", "@uploadthing/tsconfig": "workspace:", "@uploadthing/vitest-config": "workspace:", - "@vitest/coverage-istanbul": "3.2.4", + "@vitest/coverage-istanbul": "4.1.10", "eslint": "9.25.1", "react": "19.2.2", "solid-js": "^1.9.3", "tsdown": "0.14.1", "typescript": "5.8.3", - "vitest": "3.2.4", + "vitest": "4.1.10", "vue": "^3.4.21", "wait-on": "^8.0.1" } diff --git a/packages/shared/src/crypto.ts b/packages/shared/src/crypto.ts index 7f46ea4c4b..899350cb10 100644 --- a/packages/shared/src/crypto.ts +++ b/packages/shared/src/crypto.ts @@ -1,6 +1,6 @@ +import * as Effect from "effect/Effect"; import * as Encoding from "effect/Encoding"; import * as Hash from "effect/Hash"; -import * as Micro from "effect/Micro"; import * as Redacted from "effect/Redacted"; import SQIds, { defaultOptions } from "sqids"; @@ -32,8 +32,8 @@ export const signPayload = ( payload: string, secret: Redacted.Redacted, ) => - Micro.gen(function* () { - const signingKey = yield* Micro.tryPromise({ + Effect.gen(function* () { + const signingKey = yield* Effect.tryPromise({ try: () => crypto.subtle.importKey( "raw", @@ -50,8 +50,8 @@ export const signPayload = ( }), }); - const signature = yield* Micro.map( - Micro.tryPromise({ + const signature = yield* Effect.map( + Effect.tryPromise({ try: () => crypto.subtle.sign(algorithm, signingKey, encoder.encode(payload)), catch: (e) => new UploadThingError({ code: "BAD_REQUEST", cause: e }), @@ -60,30 +60,30 @@ export const signPayload = ( ); return `${signaturePrefix}${signature}`; - }).pipe(Micro.withTrace("signPayload")); + }).pipe(Effect.withSpan("signPayload")); export const verifySignature = ( payload: string, signature: string | null, secret: Redacted.Redacted, ) => - Micro.gen(function* () { + Effect.gen(function* () { const sig = signature?.slice(signaturePrefix.length); if (!sig) return false; const secretBytes = encoder.encode(Redacted.value(secret)); - const signingKey = yield* Micro.promise(() => + const signingKey = yield* Effect.promise(() => crypto.subtle.importKey("raw", secretBytes, algorithm, false, ["verify"]), ); - const sigBytes = yield* Micro.fromEither(Encoding.decodeHex(sig)); + const sigBytes = yield* Effect.fromResult(Encoding.decodeHex(sig)); const payloadBytes = encoder.encode(payload); - return yield* Micro.promise(() => + return yield* Effect.promise(() => crypto.subtle.verify(algorithm, signingKey, sigBytes, payloadBytes), ); }).pipe( - Micro.withTrace("verifySignature"), - Micro.orElseSucceed(() => false), + Effect.withSpan("verifySignature"), + Effect.orElseSucceed(() => false), ); export const generateKey = ( @@ -92,7 +92,7 @@ export const generateKey = ( getHashParts?: ExtractHashPartsFn, hashFn?: HashFn, ) => - Micro.sync(() => { + Effect.sync(() => { // Get the parts of which we should hash to constuct the key // This allows the user to customize the hashing algorithm // If they for example want to generate the same key for the @@ -120,11 +120,11 @@ export const generateKey = ( // Concatenate them return encodedAppId + encodedFileSeed; - }).pipe(Micro.withTrace("generateKey")); + }).pipe(Effect.withSpan("generateKey")); // Verify that the key was generated with the same appId export const verifyKey = (key: string, appId: string) => - Micro.sync(() => { + Effect.sync(() => { const alphabet = shuffle(defaultOptions.alphabet, appId); const expectedPrefix = new SQIds({ alphabet, minLength: 12 }).encode([ Math.abs(Hash.string(appId)), @@ -132,8 +132,8 @@ export const verifyKey = (key: string, appId: string) => return key.startsWith(expectedPrefix); }).pipe( - Micro.withTrace("verifyKey"), - Micro.orElseSucceed(() => false), + Effect.withSpan("verifyKey"), + Effect.orElseSucceed(() => false), ); export const generateSignedURL = ( @@ -144,7 +144,7 @@ export const generateSignedURL = ( data?: Record; }, ) => - Micro.gen(function* () { + Effect.gen(function* () { const parsedURL = new URL(url); const ttl = opts.ttlInSeconds @@ -166,4 +166,4 @@ export const generateSignedURL = ( parsedURL.searchParams.append("signature", signature); return parsedURL.href; - }).pipe(Micro.withTrace("generateSignedURL")); + }).pipe(Effect.withSpan("generateSignedURL")); diff --git a/packages/shared/src/effect.ts b/packages/shared/src/effect.ts index 330ac30cfd..90248e32e7 100644 --- a/packages/shared/src/effect.ts +++ b/packages/shared/src/effect.ts @@ -1,14 +1,13 @@ import * as Context from "effect/Context"; -import * as Micro from "effect/Micro"; +import * as Effect from "effect/Effect"; import { BadRequestError, FetchError, InvalidJsonError } from "./tagged-errors"; import type { FetchEsque, ResponseEsque } from "./types"; export class FetchContext - extends /** #__PURE__ */ Context.Tag("uploadthing/Fetch")< - FetchContext, - FetchEsque - >() {} + extends /** #__PURE__ */ Context.Service()( + "uploadthing/Fetch", + ) {} interface ResponseWithURL extends ResponseEsque { requestUrl: string; @@ -16,12 +15,12 @@ interface ResponseWithURL extends ResponseEsque { // Temporary Effect wrappers below. // Only for use in the browser. -// On the server, use `@effect/platform.HttpClient` instead. +// On the server, use `effect/unstable/http.HttpClient` instead. export const fetchEff = ( input: string | URL, init?: RequestInit, -): Micro.Micro => - Micro.flatMap(Micro.service(FetchContext), (fetch) => { +): Effect.Effect => + Effect.flatMap(FetchContext, (fetch) => { const headers = new Headers(init?.headers ?? []); const reqInfo = { @@ -31,7 +30,7 @@ export const fetchEff = ( headers: Object.fromEntries(headers), }; - return Micro.tryPromise({ + return Effect.tryPromise({ try: (signal) => fetch(input, { ...init, headers, signal }), catch: (error) => new FetchError({ @@ -48,23 +47,23 @@ export const fetchEff = ( }), }).pipe( // eslint-disable-next-line no-console - Micro.tapError((e) => Micro.sync(() => console.error(e.input))), - Micro.map((res) => Object.assign(res, { requestUrl: reqInfo.url })), - Micro.withTrace("fetch"), + Effect.tapError((e) => Effect.sync(() => console.error(e.input))), + Effect.map((res) => Object.assign(res, { requestUrl: reqInfo.url })), + Effect.withSpan("fetch"), ); }); export const parseResponseJson = ( res: ResponseWithURL, -): Micro.Micro => - Micro.tryPromise({ +): Effect.Effect => + Effect.tryPromise({ try: async () => { const json = await res.json(); return { json, ok: res.ok, status: res.status }; }, catch: (error) => new InvalidJsonError({ error, input: res.requestUrl }), }).pipe( - Micro.filterOrFail( + Effect.filterOrFail( ({ ok }) => ok, ({ json, status }) => new BadRequestError({ @@ -73,6 +72,6 @@ export const parseResponseJson = ( json, }), ), - Micro.map(({ json }) => json), - Micro.withTrace("parseJson"), + Effect.map(({ json }) => json), + Effect.withSpan("parseJson"), ); diff --git a/packages/shared/src/error.ts b/packages/shared/src/error.ts index 9ca1357a30..1e0d947690 100644 --- a/packages/shared/src/error.ts +++ b/packages/shared/src/error.ts @@ -1,4 +1,4 @@ -import * as Micro from "effect/Micro"; +import * as Data from "effect/Data"; import * as Predicate from "effect/Predicate"; import type { Json } from "./types"; @@ -59,7 +59,7 @@ export interface SerializedUploadThingError { export class UploadThingError< TShape extends Json = { message: string }, -> extends Micro.Error<{ message: string }> { +> extends Data.Error<{ message: string }> { readonly _tag = "UploadThingError"; readonly name = "UploadThingError"; @@ -81,7 +81,7 @@ export class UploadThingError< if (opts.cause instanceof Error) { this.cause = opts.cause; } else if ( - Predicate.isRecord(opts.cause) && + Predicate.isObject(opts.cause) && Predicate.isNumber(opts.cause.status) && Predicate.isString(opts.cause.statusText) ) { diff --git a/packages/shared/src/tagged-errors.ts b/packages/shared/src/tagged-errors.ts index eaef4f8669..63bb03458a 100644 --- a/packages/shared/src/tagged-errors.ts +++ b/packages/shared/src/tagged-errors.ts @@ -1,8 +1,8 @@ -import * as Micro from "effect/Micro"; +import * as Data from "effect/Data"; import * as Predicate from "effect/Predicate"; export class InvalidRouteConfigError - extends /** #__PURE__ */ Micro.TaggedError("InvalidRouteConfig")<{ + extends /** #__PURE__ */ Data.TaggedError("InvalidRouteConfig")<{ reason: string; }> { @@ -15,7 +15,7 @@ export class InvalidRouteConfigError } export class UnknownFileTypeError - extends /** #__PURE__ */ Micro.TaggedError("UnknownFileType")<{ + extends /** #__PURE__ */ Data.TaggedError("UnknownFileType")<{ reason: string; }> { @@ -26,7 +26,7 @@ export class UnknownFileTypeError } export class InvalidFileTypeError - extends /** #__PURE__ */ Micro.TaggedError("InvalidFileType")<{ + extends /** #__PURE__ */ Data.TaggedError("InvalidFileType")<{ reason: string; }> { @@ -37,7 +37,7 @@ export class InvalidFileTypeError } export class InvalidFileSizeError - extends /** #__PURE__ */ Micro.TaggedError("InvalidFileSize")<{ + extends /** #__PURE__ */ Data.TaggedError("InvalidFileSize")<{ reason: string; }> { @@ -48,7 +48,7 @@ export class InvalidFileSizeError } export class InvalidURLError - extends /** #__PURE__ */ Micro.TaggedError("InvalidURL")<{ + extends /** #__PURE__ */ Data.TaggedError("InvalidURL")<{ reason: string; }> { @@ -58,10 +58,10 @@ export class InvalidURLError } export class RetryError - extends /** #__PURE__ */ Micro.TaggedError("RetryError") {} + extends /** #__PURE__ */ Data.TaggedError("RetryError") {} export class FetchError - extends /** #__PURE__ */ Micro.TaggedError("FetchError")<{ + extends /** #__PURE__ */ Data.TaggedError("FetchError")<{ readonly input: { url: string; method: string | undefined; @@ -72,20 +72,20 @@ export class FetchError }> {} export class InvalidJsonError - extends /** #__PURE__ */ Micro.TaggedError("InvalidJson")<{ + extends /** #__PURE__ */ Data.TaggedError("InvalidJson")<{ readonly input: unknown; readonly error: unknown; }> {} export class BadRequestError - extends /** #__PURE__ */ Micro.TaggedError("BadRequestError")<{ + extends /** #__PURE__ */ Data.TaggedError("BadRequestError")<{ readonly message: string; readonly status: number; readonly json: T; }> { getMessage() { - if (Predicate.isRecord(this.json)) { + if (Predicate.isObject(this.json)) { if (typeof this.json.message === "string") return this.json.message; } return this.message; @@ -93,7 +93,7 @@ export class BadRequestError } export class UploadPausedError - extends /** #__PURE__ */ Micro.TaggedError("UploadAborted") {} + extends /** #__PURE__ */ Data.TaggedError("UploadAborted") {} export class UploadAbortedError - extends /** #__PURE__ */ Micro.TaggedError("UploadAborted") {} + extends /** #__PURE__ */ Data.TaggedError("UploadAborted") {} diff --git a/packages/shared/src/utils.ts b/packages/shared/src/utils.ts index 85cd5e5a84..456882a277 100644 --- a/packages/shared/src/utils.ts +++ b/packages/shared/src/utils.ts @@ -1,4 +1,4 @@ -import * as Micro from "effect/Micro"; +import * as Effect from "effect/Effect"; import { lookup } from "@uploadthing/mime-types"; @@ -63,10 +63,10 @@ export function getDefaultRouteConfigValues( export const fillInputRouteConfig = ( routeConfig: FileRouterInputConfig, -): Micro.Micro => { +): Effect.Effect => { // If array, apply defaults if (isRouteArray(routeConfig)) { - return Micro.succeed( + return Effect.succeed( routeConfig.reduce((acc, fileType) => { acc[fileType] = getDefaultRouteConfigValues(fileType); return acc; @@ -78,13 +78,13 @@ export const fillInputRouteConfig = ( const newConfig: ExpandedRouteConfig = {}; for (const key of objectKeys(routeConfig)) { const value = routeConfig[key]; - if (!value) return Micro.fail(new InvalidRouteConfigError(key)); + if (!value) return Effect.fail(new InvalidRouteConfigError(key)); newConfig[key] = { ...getDefaultRouteConfigValues(key), ...value }; } // we know that the config is valid, so we can stringify it and parse it back // this allows us to replace numbers with "safe" equivalents - return Micro.succeed( + return Effect.succeed( JSON.parse( JSON.stringify(newConfig, safeNumberReplacer), ) as ExpandedRouteConfig, @@ -98,21 +98,21 @@ export const fillInputRouteConfig = ( export const matchFileType = ( file: FileProperties, allowedTypes: FileRouterInputKey[], -): Micro.Micro< +): Effect.Effect< FileRouterInputKey, UnknownFileTypeError | InvalidFileTypeError > => { // Type might be "" if the browser doesn't recognize the mime type const mimeType = file.type || lookup(file.name); if (!mimeType) { - if (allowedTypes.includes("blob")) return Micro.succeed("blob"); - return Micro.fail(new UnknownFileTypeError(file.name)); + if (allowedTypes.includes("blob")) return Effect.succeed("blob"); + return Effect.fail(new UnknownFileTypeError(file.name)); } // If the user has specified a specific mime type, use that if (allowedTypes.some((type) => type.includes("/"))) { if (allowedTypes.includes(mimeType as FileRouterInputKey)) { - return Micro.succeed(mimeType as FileRouterInputKey); + return Effect.succeed(mimeType as FileRouterInputKey); } } @@ -126,20 +126,20 @@ export const matchFileType = ( if (!allowedTypes.includes(type)) { // Blob is a catch-all for any file type not explicitly supported if (allowedTypes.includes("blob")) { - return Micro.succeed("blob"); + return Effect.succeed("blob"); } else { - return Micro.fail(new InvalidFileTypeError(type, file.name)); + return Effect.fail(new InvalidFileTypeError(type, file.name)); } } - return Micro.succeed(type); + return Effect.succeed(type); }; export const FILESIZE_UNITS = ["B", "KB", "MB", "GB", "TB"] as const; export type FileSizeUnit = (typeof FILESIZE_UNITS)[number]; export const fileSizeToBytes = ( fileSize: FileSize, -): Micro.Micro => { +): Effect.Effect => { const regex = new RegExp( `^(\\d+)(\\.\\d+)?\\s*(${FILESIZE_UNITS.join("|")})$`, "i", @@ -148,13 +148,13 @@ export const fileSizeToBytes = ( // make sure the string is in the format of 123KB const match = fileSize.match(regex); if (!match?.[1] || !match[3]) { - return Micro.fail(new InvalidFileSizeError(fileSize)); + return Effect.fail(new InvalidFileSizeError(fileSize)); } const sizeValue = parseFloat(match[1]); const sizeUnit = match[3].toUpperCase() as FileSizeUnit; const bytes = sizeValue * Math.pow(1024, FILESIZE_UNITS.indexOf(sizeUnit)); - return Micro.succeed(Math.floor(bytes)); + return Effect.succeed(Math.floor(bytes)); }; export const bytesToFileSize = (bytes: number) => { @@ -241,11 +241,11 @@ export function warnIfInvalidPeerDependency( } export const getRequestUrl = (req: Request) => - Micro.gen(function* () { + Effect.gen(function* () { const host = req.headers.get("x-forwarded-host") ?? req.headers.get("host"); const proto = req.headers.get("x-forwarded-proto") ?? "https"; const protocol = proto.endsWith(":") ? proto : `${proto}:`; - const url = yield* Micro.try({ + const url = yield* Effect.try({ try: () => new URL(req.url, `${protocol}//${host}`), catch: () => new InvalidURLError(req.url), }); @@ -255,15 +255,15 @@ export const getRequestUrl = (req: Request) => export const getFullApiUrl = ( maybeUrl?: string, -): Micro.Micro => - Micro.gen(function* () { +): Effect.Effect => + Effect.gen(function* () { const base = (() => { if (typeof window !== "undefined") return window.location.origin; if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; return "http://localhost:3000"; })(); - const url = yield* Micro.try({ + const url = yield* Effect.try({ try: () => new URL(maybeUrl ?? "/api/uploadthing", base), catch: () => new InvalidURLError(maybeUrl ?? "/api/uploadthing"), }); @@ -283,7 +283,7 @@ export const getFullApiUrl = ( export const resolveMaybeUrlArg = (maybeUrl: string | URL | undefined): URL => { return maybeUrl instanceof URL ? maybeUrl - : Micro.runSync(getFullApiUrl(maybeUrl)); + : Effect.runSync(getFullApiUrl(maybeUrl)); }; export function parseTimeToSeconds(time: Time) { diff --git a/packages/uploadthing/package.json b/packages/uploadthing/package.json index e70b822993..f9c169127d 100644 --- a/packages/uploadthing/package.json +++ b/packages/uploadthing/package.json @@ -159,14 +159,13 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@effect/platform": "0.96.0", "@standard-schema/spec": "1.0.0-beta.4", "@uploadthing/mime-types": "workspace:*", "@uploadthing/shared": "workspace:*", - "effect": "3.21.0" + "effect": "4.0.0-rc.110" }, "devDependencies": { - "@effect/vitest": "0.29.0", + "@effect/vitest": "4.0.0-rc.110", "@remix-run/server-runtime": "^2.12.0", "@types/body-parser": "^1.19.5", "@types/express": "^5.0.0", @@ -175,7 +174,8 @@ "@uploadthing/eslint-config": "workspace:*", "@uploadthing/tsconfig": "workspace:*", "@uploadthing/vitest-config": "workspace:*", - "@vitest/coverage-istanbul": "3.2.4", + "@vitest/browser-playwright": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", "body-parser": "^1.20.2", "eslint": "9.25.1", "express": "^5.0.1", @@ -188,7 +188,7 @@ "tsdown": "0.14.1", "typescript": "5.8.3", "valibot": "1.0.0-beta.9", - "vitest": "3.2.4", + "vitest": "4.1.10", "vue": "^3.4.21", "wait-on": "^8.0.1", "zod": "^3.24.1" diff --git a/packages/uploadthing/src/_internal/client-future.ts b/packages/uploadthing/src/_internal/client-future.ts index 1aa52bee1d..1af62602c2 100644 --- a/packages/uploadthing/src/_internal/client-future.ts +++ b/packages/uploadthing/src/_internal/client-future.ts @@ -1,6 +1,7 @@ import * as Arr from "effect/Array"; +import * as Data from "effect/Data"; +import * as Effect from "effect/Effect"; import type { LazyArg } from "effect/Function"; -import * as Micro from "effect/Micro"; import * as Predicate from "effect/Predicate"; import { fetchEff } from "@uploadthing/shared"; @@ -26,7 +27,7 @@ import { createUTReporter } from "./ut-reporter"; * Error indicating the XHR request failed * @public */ -export class XHRError extends Micro.TaggedError("XHRError")<{ +export class XHRError extends Data.TaggedError("XHRError")<{ message: string; xhr: unknown; }> {} @@ -41,7 +42,7 @@ export type NetworkError = XHRError | FetchError; * Error indicating the upload was rejected during upload to the storage provider * @public */ -export class UTStorageError extends Micro.TaggedError("UTStorageError")<{ +export class UTStorageError extends Data.TaggedError("UTStorageError")<{ message: string; response: unknown; }> {} @@ -50,7 +51,7 @@ export class UTStorageError extends Micro.TaggedError("UTStorageError")<{ * Error indicating the request to your UploadThing server failed * @public */ -export class UTServerError extends Micro.TaggedError( +export class UTServerError extends Data.TaggedError( "UTServerError", )<{ message: string; @@ -393,112 +394,120 @@ export interface UploadFileOptions { export function uploadFile( url: string, { file, files, XHRImpl, ...options }: UploadFileOptions, -): Micro.Micro | FailedFile, never, FetchContext> { +): Effect.Effect< + UploadedFile | FailedFile, + never, + FetchContext +> { return fetchEff(url, { method: "HEAD", headers: options.traceHeaders }).pipe( - Micro.map(({ headers }) => + Effect.map(({ headers }) => Number.parseInt(headers.get("x-ut-range-start") ?? "0"), ), - Micro.map((rangeStart) => transitionToUploading(file, rangeStart)), - Micro.tap((uploadingFile) => { - options.onEvent({ - type: "upload-started", - file: uploadingFile, - files, - }); - }), - Micro.flatMap((uploadingFile) => - Micro.async, XHRError | UTStorageError>((resume) => { - const xhr = new XHRImpl(); - xhr.open("PUT", url, true); - - const rangeStart = uploadingFile.sent; - xhr.setRequestHeader("Range", `bytes=${rangeStart}-`); - xhr.setRequestHeader("x-uploadthing-version", version); - xhr.setRequestHeader("b3", options.traceHeaders.b3); - xhr.setRequestHeader("traceparent", options.traceHeaders.traceparent); - xhr.responseType = "json"; - - xhr.upload.addEventListener("progress", (ev) => { - uploadingFile.sent = rangeStart + ev.loaded; - options.onEvent({ - type: "upload-progress", - file: uploadingFile, - files, - }); + Effect.map((rangeStart) => transitionToUploading(file, rangeStart)), + Effect.tap((uploadingFile) => + Effect.sync(() => { + options.onEvent({ + type: "upload-started", + file: uploadingFile, + files, }); - xhr.addEventListener("load", () => { - if ( - xhr.status > 299 || - Predicate.hasProperty(xhr.response, "error") - ) { + }), + ), + Effect.flatMap((uploadingFile) => + Effect.callback, XHRError | UTStorageError>( + (resume) => { + const xhr = new XHRImpl(); + xhr.open("PUT", url, true); + + const rangeStart = uploadingFile.sent; + xhr.setRequestHeader("Range", `bytes=${rangeStart}-`); + xhr.setRequestHeader("x-uploadthing-version", version); + xhr.setRequestHeader("b3", options.traceHeaders.b3); + xhr.setRequestHeader("traceparent", options.traceHeaders.traceparent); + xhr.responseType = "json"; + + xhr.upload.addEventListener("progress", (ev) => { + uploadingFile.sent = rangeStart + ev.loaded; + options.onEvent({ + type: "upload-progress", + file: uploadingFile, + files, + }); + }); + xhr.addEventListener("load", () => { + if ( + xhr.status > 299 || + Predicate.hasProperty(xhr.response, "error") + ) { + resume( + new UTStorageError({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + message: String(xhr.response.error), + response: xhr.response, + }), + ); + } else { + const uploadedFile = transitionToUploaded( + uploadingFile, + xhr.response as UploadPutResult, + ); + options.onEvent({ + type: "upload-completed", + file: uploadedFile, + files, + }); + resume(Effect.succeed(uploadedFile)); + } + }); + xhr.addEventListener("error", () => { resume( - new UTStorageError({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - message: String(xhr.response.error), - response: xhr.response, + new XHRError({ + message: `XHR failed ${xhr.status} ${xhr.statusText}`, + xhr: xhr, }), ); + }); + + const formData = new FormData(); + /** + * iOS/React Native FormData handling requires special attention: + * + * Issue: In React Native, iOS crashes with "attempt to insert nil object" when appending File directly + * to FormData. This happens because iOS tries to create NSDictionary from the file object and expects + * specific structure {uri, type, name}. + * + * + * Note: Don't try to use Blob or modify File object - iOS specifically needs plain object + * with these properties to create valid NSDictionary. + */ + if ("uri" in file) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + formData.append("file", { + uri: file.uri as string, + type: file.type, + name: file.name, + ...(rangeStart > 0 && { range: rangeStart }), + } as any); } else { - const uploadedFile = transitionToUploaded( - uploadingFile, - xhr.response as UploadPutResult, + formData.append( + "file", + rangeStart > 0 ? file.slice(rangeStart) : file, ); - options.onEvent({ - type: "upload-completed", - file: uploadedFile, - files, - }); - resume(Micro.succeed(uploadedFile)); } - }); - xhr.addEventListener("error", () => { - resume( - new XHRError({ - message: `XHR failed ${xhr.status} ${xhr.statusText}`, - xhr: xhr, - }), - ); - }); - - const formData = new FormData(); - /** - * iOS/React Native FormData handling requires special attention: - * - * Issue: In React Native, iOS crashes with "attempt to insert nil object" when appending File directly - * to FormData. This happens because iOS tries to create NSDictionary from the file object and expects - * specific structure {uri, type, name}. - * - * - * Note: Don't try to use Blob or modify File object - iOS specifically needs plain object - * with these properties to create valid NSDictionary. - */ - if ("uri" in file) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - formData.append("file", { - uri: file.uri as string, - type: file.type, - name: file.name, - ...(rangeStart > 0 && { range: rangeStart }), - } as any); - } else { - formData.append( - "file", - rangeStart > 0 ? file.slice(rangeStart) : file, - ); - } - xhr.send(formData); + xhr.send(formData); - return Micro.sync(() => xhr.abort()); - }), + return Effect.sync(() => xhr.abort()); + }, + ), ), - Micro.catchAll((error) => { + Effect.catch((error) => { const failedFile = transitionToFailed(file, error); options.onEvent({ type: "upload-failed", file: failedFile, files, }); - return Micro.succeed(failedFile); + return Effect.succeed(failedFile); }), ); } @@ -550,7 +559,7 @@ export function requestPresignedUrls< TEndpoint extends keyof TRouter, >( options: RequestPresignedUrlsOptions, -): Micro.Micro< +): Effect.Effect< ReadonlyArray, UTServerError, FetchContext @@ -572,7 +581,7 @@ export function requestPresignedUrls< lastModified: f.lastModified, })), }).pipe( - Micro.mapError( + Effect.mapError( (error) => new UTServerError({ message: error.message, @@ -612,19 +621,21 @@ export function uploadFiles< package: options.package, traceHeaders, }).pipe( - Micro.map(Arr.zip(pendingFiles)), - Micro.tap((pairs) => { - for (const [presigned, file] of pairs) { - file.key = presigned.key; - file.customId = presigned.customId; - } - options.onEvent({ - type: "presigned-received", - files: pendingFiles, - }); - }), - Micro.flatMap((pairs) => - Micro.forEach( + Effect.map(Arr.zip(pendingFiles)), + Effect.tap((pairs) => + Effect.sync(() => { + for (const [presigned, file] of pairs) { + file.key = presigned.key; + file.customId = presigned.customId; + } + options.onEvent({ + type: "presigned-received", + files: pendingFiles, + }); + }), + ), + Effect.flatMap((pairs) => + Effect.forEach( pairs, ([presigned, file]) => uploadFile(presigned.url, { diff --git a/packages/uploadthing/src/_internal/config.ts b/packages/uploadthing/src/_internal/config.ts index 88c758044a..39c26a9104 100644 --- a/packages/uploadthing/src/_internal/config.ts +++ b/packages/uploadthing/src/_internal/config.ts @@ -3,45 +3,26 @@ import * as ConfigProvider from "effect/ConfigProvider"; import * as Effect from "effect/Effect"; import * as S from "effect/Schema"; -import { - filterDefinedObjectValues, - UploadThingError, -} from "@uploadthing/shared"; +import { UploadThingError } from "@uploadthing/shared"; import { UploadThingToken } from "./shared-schemas"; export { version as UPLOADTHING_VERSION } from "../../package.json"; /** - * Merge in `import.meta.env` to the built-in `process.env` provider + * The built-in `ConfigProvider.fromEnv` provider merges `process.env` and + * `import.meta.env` out of the box. It snapshots the environment when it is + * created, so it's constructed lazily to pick up late `process.env` mutations. * Prefix keys with `UPLOADTHING_` so we can reference just the name. * @example * process.env.UPLOADTHING_TOKEN = "foo" * Config.string("token"); // Config<"foo"> */ -const envProvider = ConfigProvider.fromEnv().pipe( - ConfigProvider.orElse(() => - ConfigProvider.fromMap( - new Map( - Object.entries( - filterDefinedObjectValues( - // fuck this I give up. import.meta is a mistake, someone else can fix it - ( - import.meta as unknown as - | { env: Record } - | undefined - )?.env ?? {}, - ), - ), - ), - { - pathDelim: "_", - }, - ), - ), - ConfigProvider.nested("uploadthing"), - ConfigProvider.constantCase, -); +const envProvider = () => + ConfigProvider.fromEnv().pipe( + ConfigProvider.nested("uploadthing"), + ConfigProvider.constantCase, + ); /** * Config provider that merges the options from the object @@ -49,8 +30,8 @@ const envProvider = ConfigProvider.fromEnv().pipe( * @remarks Options take precedence over environment variables. */ export const configProvider = (options: unknown) => - ConfigProvider.fromJson(options ?? {}).pipe( - ConfigProvider.orElse(() => envProvider), + ConfigProvider.fromUnknown(options ?? {}).pipe( + ConfigProvider.orElse(envProvider()), ); export const IsDevelopment = Config.boolean("isDev").pipe( @@ -62,23 +43,35 @@ export const IsDevelopment = Config.boolean("isDev").pipe( Config.withDefault(false), ); -export const UTToken = S.Config("token", UploadThingToken).pipe( - Effect.catchTags({ - ConfigError: (e) => +export const UTToken = Config.string("token").pipe( + Effect.catchTag( + "ConfigError", + (e) => new UploadThingError({ - code: e._op === "InvalidData" ? "INVALID_SERVER_CONFIG" : "MISSING_ENV", + code: "MISSING_ENV", message: - e._op === "InvalidData" - ? "Invalid token. A token is a base64 encoded JSON object matching { apiKey: string, appId: string, regions: string[] }." - : "Missing token. Please set the `UPLOADTHING_TOKEN` environment variable or provide a token manually through config.", + "Missing token. Please set the `UPLOADTHING_TOKEN` environment variable or provide a token manually through config.", cause: e, }), - }), + ), + Effect.flatMap((rawToken) => + S.decodeUnknownEffect(UploadThingToken)(rawToken).pipe( + Effect.catchTag( + "SchemaError", + (e) => + new UploadThingError({ + code: "INVALID_SERVER_CONFIG", + message: + "Invalid token. A token is a base64 encoded JSON object matching { apiKey: string, appId: string, regions: string[] }.", + cause: e, + }), + ), + ), + ), ); -export const ApiUrl = Config.string("apiUrl").pipe( - Config.withDefault("https://api.uploadthing.com"), - Config.mapAttempt((_) => new URL(_)), +export const ApiUrl = Config.url("apiUrl").pipe( + Config.withDefault(new URL("https://api.uploadthing.com")), Config.map((url) => url.href.replace(/\/$/, "")), ); @@ -91,9 +84,8 @@ export const IngestUrl = Effect.fn(function* ( ? (regions.find((r) => r === preferredRegion) ?? regions[0]) : regions[0]; - return yield* Config.string("ingestUrl").pipe( - Config.withDefault(`https://${region}.${ingestHost}`), - Config.mapAttempt((_) => new URL(_)), + return yield* Config.url("ingestUrl").pipe( + Config.withDefault(new URL(`https://${region}.${ingestHost}`)), Config.map((url) => url.href.replace(/\/$/, "")), ); }); @@ -106,7 +98,7 @@ export const UfsHost = Config.string("ufsHost").pipe( Config.withDefault("ufs.sh"), ); -export const UfsAppIdLocation = Config.literal( - "subdomain", - "path", -)("ufsAppIdLocation").pipe(Config.withDefault("subdomain")); +export const UfsAppIdLocation = Config.literals( + ["subdomain", "path"], + "ufsAppIdLocation", +).pipe(Config.withDefault("subdomain")); diff --git a/packages/uploadthing/src/_internal/handler.ts b/packages/uploadthing/src/_internal/handler.ts index b4cc5fc355..428eee3dc6 100644 --- a/packages/uploadthing/src/_internal/handler.ts +++ b/packages/uploadthing/src/_internal/handler.ts @@ -1,18 +1,17 @@ -import * as HttpApp from "@effect/platform/HttpApp"; -import * as HttpBody from "@effect/platform/HttpBody"; -import * as HttpClient from "@effect/platform/HttpClient"; -import type * as HttpClientError from "@effect/platform/HttpClientError"; -import * as HttpClientRequest from "@effect/platform/HttpClientRequest"; -import * as HttpClientResponse from "@effect/platform/HttpClientResponse"; -import * as HttpRouter from "@effect/platform/HttpRouter"; -import * as HttpServerRequest from "@effect/platform/HttpServerRequest"; -import * as HttpServerResponse from "@effect/platform/HttpServerResponse"; import * as Config from "effect/Config"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; -import * as Match from "effect/Match"; +import * as Fiber from "effect/Fiber"; import * as Redacted from "effect/Redacted"; import * as Schema from "effect/Schema"; +import * as HttpBody from "effect/unstable/http/HttpBody"; +import * as HttpClient from "effect/unstable/http/HttpClient"; +import type * as HttpClientError from "effect/unstable/http/HttpClientError"; +import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"; +import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse"; +import * as HttpEffect from "effect/unstable/http/HttpEffect"; +import * as HttpServerRequest from "effect/unstable/http/HttpServerRequest"; +import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse"; import { fillInputRouteConfig, @@ -47,9 +46,27 @@ import { import { UTFiles, UTRegion } from "./types"; import type { AnyFileRoute, UTEvents } from "./types"; -export class AdapterArguments extends Context.Tag( - "uploadthing/AdapterArguments", -)>() {} +export class AdapterArguments extends Context.Service< + AdapterArguments, + Record +>()("uploadthing/AdapterArguments") {} + +/** + * Ignore the failure of an effect, logging any errors that occur. + * Effect v4 removed `Effect.ignoreLogged`, this is a drop-in replacement. + */ +const ignoreLogged = ( + effect: Effect.Effect, +): Effect.Effect => + effect.pipe( + Effect.catchCause((cause) => + Effect.logDebug( + "An error was silently ignored because it is not anticipated to be useful", + cause, + ), + ), + Effect.asVoid, + ); /** * Create a request handler adapter for any framework or server library. @@ -76,27 +93,30 @@ export const makeAdapterHandler = < opts.config?.fetch as typeof globalThis.fetch, opts.config, ); - const handle = Effect.promise(() => - managed.runtime().then(HttpApp.toWebHandlerRuntime), - ); - const app = (...args: Args) => - Effect.map( - Effect.promise(() => - managed.runPromise(createRequestHandler(opts, beAdapter ?? "custom")), - ), - Effect.provideServiceEffect(AdapterArguments, makeAdapterArgs(...args)), + return async (...args: Args) => { + const context = await managed.context(); + const [app, request] = await managed.runPromise( + Effect.all([ + Effect.map( + createRequestHandler(opts, beAdapter ?? "custom"), + Effect.provideServiceEffect( + AdapterArguments, + makeAdapterArgs(...args), + ), + ), + toRequest(...args), + ]), ); - return async (...args: Args) => { - const result = await handle.pipe( - Effect.ap(app(...args)), - Effect.ap(toRequest(...args)), - Effect.withLogSpan("requestHandler"), - managed.runPromise, + const handler = HttpEffect.toWebHandler( + app.pipe( + Effect.withLogSpan("requestHandler"), + Effect.provideContext(context), + ), ); - return result; + return handler(request); }; }; @@ -132,12 +152,12 @@ export const createRequestHandler = ( "x-uploadthing-version": clientVersion, } = yield* HttpServerRequest.schemaHeaders( Schema.Struct({ - "uploadthing-hook": UploadThingHook.pipe(Schema.optional), + "uploadthing-hook": Schema.optional(UploadThingHook), "x-uploadthing-package": Schema.String.pipe( - Schema.optionalWith({ default: () => "unknown" }), + Schema.withDecodingDefault(Effect.succeed("unknown")), ), "x-uploadthing-version": Schema.String.pipe( - Schema.optionalWith({ default: () => pkgJson.version }), + Schema.withDecodingDefault(Effect.succeed(pkgJson.version)), ), }), ); @@ -149,12 +169,16 @@ export const createRequestHandler = ( ).pipe(Effect.annotateLogs({ clientVersion, serverVersion })); } - const { slug, actionType } = yield* HttpRouter.schemaParams( + const serverRequest = yield* HttpServerRequest.HttpServerRequest; + const requestUrl = yield* Effect.fromOption( + HttpServerRequest.toURL(serverRequest), + ); + const { slug, actionType } = yield* Schema.decodeUnknownEffect( Schema.Struct({ - actionType: ActionType.pipe(Schema.optional), + actionType: Schema.optional(ActionType), slug: Schema.String, }), - ); + )(HttpServerRequest.searchParamsFromURL(requestUrl)); const uploadable = opts.router[slug]; if (!uploadable) { @@ -166,26 +190,19 @@ export const createRequestHandler = ( }); } - const { body, fiber } = yield* Match.value({ - actionType, - uploadthingHook, - }).pipe( - Match.when({ actionType: "upload", uploadthingHook: undefined }, () => - handleUploadAction({ + const { body, fiber } = yield* actionType === "upload" && + uploadthingHook === undefined + ? handleUploadAction({ uploadable, fePackage, beAdapter, slug, - }), - ), - Match.when({ actionType: undefined, uploadthingHook: "callback" }, () => - handleCallbackRequest({ uploadable, fePackage, beAdapter }), - ), - Match.when({ actionType: undefined, uploadthingHook: "error" }, () => - handleErrorRequest({ uploadable }), - ), - Match.orElse(() => Effect.succeed({ body: null, fiber: null })), - ); + }) + : actionType === undefined && uploadthingHook === "callback" + ? handleCallbackRequest({ uploadable, fePackage, beAdapter }) + : actionType === undefined && uploadthingHook === "error" + ? handleErrorRequest({ uploadable }) + : Effect.succeed({ body: null, fiber: null }); if (fiber) { yield* Effect.logDebug("Running fiber as daemon").pipe( @@ -194,9 +211,9 @@ export const createRequestHandler = ( if (handleDaemon === "void") { // noop } else if (handleDaemon === "await") { - yield* fiber.await; + yield* Fiber.await(fiber); } else if (typeof handleDaemon === "function") { - handleDaemon(Effect.runPromise(fiber.await)); + handleDaemon(Effect.runPromise(Fiber.await(fiber))); } } @@ -207,7 +224,7 @@ export const createRequestHandler = ( return yield* HttpServerResponse.json(body); }).pipe( Effect.catchTags({ - ParseError: (e) => + SchemaError: (e) => HttpServerResponse.json( formatError( new UploadThingError({ @@ -227,14 +244,23 @@ export const createRequestHandler = ( }), ); - const appendResponseHeaders = Effect.map( - HttpServerResponse.setHeader("x-uploadthing-version", pkgJson.version), - ); - - return HttpRouter.empty.pipe( - HttpRouter.get("*", GET), - HttpRouter.post("*", POST), - HttpRouter.use(appendResponseHeaders), + return Effect.gen(function* () { + const request = yield* HttpServerRequest.HttpServerRequest; + switch (request.method) { + case "GET": { + return yield* GET; + } + case "POST": { + return yield* POST; + } + default: { + return HttpServerResponse.empty({ status: 404 }); + } + } + }).pipe( + Effect.map( + HttpServerResponse.setHeader("x-uploadthing-version", pkgJson.version), + ), ); }).pipe(Effect.withLogSpan("createRequestHandler")); @@ -292,7 +318,7 @@ const handleErrorRequest = (opts: { uploadable: AnyFileRoute }) => ).pipe(Effect.annotateLogs("error", error)), ), ) - .pipe(Effect.ignoreLogged, Effect.forkDaemon); + .pipe(ignoreLogged, Effect.forkDetach); return { body: null, @@ -328,7 +354,7 @@ const handleCallbackRequest = (opts: { status: Schema.String, file: UploadedFileData, origin: Schema.String, - metadata: Schema.Record({ key: Schema.String, value: Schema.Unknown }), + metadata: Schema.Record(Schema.String, Schema.Unknown), }), ); yield* Effect.logDebug("Handling callback request with input:").pipe( @@ -399,9 +425,8 @@ const handleCallbackRequest = (opts: { HttpClientResponse.schemaBodyJson(CallbackResultResponse), ), Effect.tap(Effect.log("Sent callback result to UploadThing")), - Effect.scoped, ); - }).pipe(Effect.ignoreLogged, Effect.forkDaemon); + }).pipe(ignoreLogged, Effect.forkDetach); return { body: null, fiber }; }).pipe(Effect.withLogSpan("handleCallbackRequest")); @@ -603,7 +628,9 @@ const handleUploadAction = (opts: { ); const serverReq = yield* HttpServerRequest.HttpServerRequest; - const requestUrl = yield* HttpServerRequest.toURL(serverReq); + const requestUrl = yield* Effect.fromOption( + HttpServerRequest.toURL(serverReq), + ); const devHookRequest = yield* Config.string("callbackUrl").pipe( Config.withDefault(requestUrl.origin + requestUrl.pathname), @@ -634,13 +661,13 @@ const handleUploadAction = (opts: { ); const handleDevStreamError = Effect.fn("handleDevStreamError")(function* ( - err: HttpClientError.ResponseError, + err: HttpClientError.HttpClientError, chunk: string, ) { - const schema = Schema.parseJson( + const schema = Schema.fromJsonString( Schema.Struct({ file: UploadedFileData }), ); - const parsedChunk = yield* Schema.decodeUnknown(schema)(chunk); + const parsedChunk = yield* Schema.decodeUnknownEffect(schema)(chunk); const key = parsedChunk.file.key; yield* Effect.logError( @@ -672,53 +699,50 @@ const handleUploadAction = (opts: { // Send metadata to UT server (non blocking as a daemon) // In dev, keep the stream open and simulate the callback requests as // files complete uploading - const fiber = yield* Effect.if(isDev, { - onTrue: () => - metadataRequest.pipe( - Effect.tapBoth({ - onSuccess: logHttpClientResponse("Registered metadata", { - mixin: "None", // We're reading the stream so can't call a body mixin - }), - onFailure: logHttpClientError("Failed to register metadata"), - }), - HttpClientResponse.stream, - handleJsonLineStream(MetadataFetchStreamPart, (chunk) => - devHookRequest.pipe( - HttpClientRequest.setHeaders({ - "uploadthing-hook": chunk.hook, - "x-uploadthing-signature": chunk.signature, + const fiber = yield* ( + isDev + ? metadataRequest.pipe( + Effect.tap( + logHttpClientResponse("Registered metadata", { + mixin: "None", // We're reading the stream so can't call a body mixin }), - HttpClientRequest.setBody( - HttpBody.text(chunk.payload, "application/json"), - ), - httpClient.execute, - Effect.tap( - logHttpClientResponse( - "Successfully forwarded callback request from dev stream", + ), + Effect.tapError(logHttpClientError("Failed to register metadata")), + HttpClientResponse.stream, + handleJsonLineStream(MetadataFetchStreamPart, (chunk) => + devHookRequest.pipe( + HttpClientRequest.setHeaders({ + "uploadthing-hook": chunk.hook, + "x-uploadthing-signature": chunk.signature, + }), + HttpClientRequest.setBody( + HttpBody.text(chunk.payload, "application/json"), ), + httpClient.execute, + Effect.tap( + logHttpClientResponse( + "Successfully forwarded callback request from dev stream", + ), + ), + Effect.catchTag("HttpClientError", (err) => + err.response !== undefined + ? handleDevStreamError(err, chunk.payload) + : Effect.fail(err), + ), + Effect.annotateLogs({ ...chunk }), + Effect.asVoid, + ignoreLogged, ), - Effect.catchTag("ResponseError", (err) => - handleDevStreamError(err, chunk.payload), - ), - Effect.annotateLogs(chunk), - Effect.asVoid, - Effect.ignoreLogged, - Effect.scoped, ), - ), - ), - onFalse: () => - metadataRequest.pipe( - Effect.tapBoth({ - onSuccess: logHttpClientResponse("Registered metadata"), - onFailure: logHttpClientError("Failed to register metadata"), - }), - Effect.flatMap( - HttpClientResponse.schemaBodyJson(MetadataFetchResponse), - ), - Effect.scoped, - ), - }).pipe(Effect.forkDaemon); + ) + : metadataRequest.pipe( + Effect.tap(logHttpClientResponse("Registered metadata")), + Effect.tapError(logHttpClientError("Failed to register metadata")), + Effect.flatMap( + HttpClientResponse.schemaBodyJson(MetadataFetchResponse), + ), + ) + ).pipe(Effect.forkDetach); const presigneds = presignedUrls.map((p, i) => ({ url: p.url, diff --git a/packages/uploadthing/src/_internal/jsonl.ts b/packages/uploadthing/src/_internal/jsonl.ts index 5a75693b4d..90e5a0f517 100644 --- a/packages/uploadthing/src/_internal/jsonl.ts +++ b/packages/uploadthing/src/_internal/jsonl.ts @@ -3,13 +3,15 @@ import * as S from "effect/Schema"; import * as Stream from "effect/Stream"; export const handleJsonLineStream = - ( - schema: S.Schema, - onChunk: (chunk: TChunk) => Effect.Effect, + ( + schema: TChunk, + onChunk: (chunk: TChunk["Type"]) => Effect.Effect, ) => (stream: Stream.Stream) => { let buf = ""; + const decodeChunks = S.decodeUnknownEffect(S.Array(schema)); + return stream.pipe( Stream.decodeText(), Stream.mapEffect((chunk) => @@ -40,7 +42,7 @@ export const handleJsonLineStream = return validChunks; }), ), - Stream.mapEffect(S.decodeUnknown(S.Array(schema))), + Stream.mapEffect((chunks) => decodeChunks(chunks)), Stream.mapEffect(Effect.forEach((part) => onChunk(part))), Stream.runDrain, Effect.withLogSpan("handleJsonLineStream"), diff --git a/packages/uploadthing/src/_internal/logger.ts b/packages/uploadthing/src/_internal/logger.ts index a7ea660007..5940b208fb 100644 --- a/packages/uploadthing/src/_internal/logger.ts +++ b/packages/uploadthing/src/_internal/logger.ts @@ -1,42 +1,20 @@ -import type * as HttpBody from "@effect/platform/HttpBody"; -import type * as HttpClientError from "@effect/platform/HttpClientError"; -import type * as HttpClientResponse from "@effect/platform/HttpClientResponse"; import * as Config from "effect/Config"; -import * as ConfigError from "effect/ConfigError"; import * as Effect from "effect/Effect"; -import * as Either from "effect/Either"; import * as Layer from "effect/Layer"; import * as Logger from "effect/Logger"; -import * as LogLevel from "effect/LogLevel"; +import type * as LogLevel from "effect/LogLevel"; +import * as References from "effect/References"; +import type * as HttpBody from "effect/unstable/http/HttpBody"; +import type * as HttpClientError from "effect/unstable/http/HttpClientError"; +import type * as HttpClientResponse from "effect/unstable/http/HttpClientResponse"; import { UploadThingError } from "@uploadthing/shared"; import { IsDevelopment } from "./config"; -/** - * Config.logLevel counter-intuitively accepts LogLevel["label"] - * instead of a literal, ripping it and changing to accept literal - * Effect 4.0 will change this to accept a literal and then we can - * remove this and go back to the built-in validator. - */ -const ConfigLogLevel = (name?: string): Config.Config => { - const config = Config.mapOrFail(Config.string(), (literal) => { - const level = LogLevel.allLevels.find((level) => level._tag === literal); - return level === undefined - ? Either.left( - ConfigError.InvalidData( - [], - `Expected a log level but received ${literal}`, - ), - ) - : Either.right(level); - }); - return name === undefined ? config : Config.nested(config, name); -}; - -export const withMinimalLogLevel = ConfigLogLevel("logLevel").pipe( - Config.withDefault(LogLevel.Info), - Effect.andThen((level) => Logger.minimumLogLevel(level)), +export const withMinimalLogLevel = Config.logLevel("logLevel").pipe( + Config.withDefault("Info" as const), + Effect.map((level) => Layer.succeed(References.MinimumLogLevel, level)), Effect.tapError((e) => Effect.logError("Invalid log level").pipe(Effect.annotateLogs("error", e)), ), @@ -49,23 +27,28 @@ export const withMinimalLogLevel = ConfigLogLevel("logLevel").pipe( cause: e, }), ), - Layer.unwrapEffect, + Layer.unwrap, ); -export const LogFormat = Config.literal( - "json", - "logFmt", - "structured", - "pretty", -)("logFormat"); -export type LogFormat = Config.Config.Success; +export const LogFormat = Config.literals( + ["json", "logFmt", "structured", "pretty"], + "logFormat", +); +export type LogFormat = Effect.Success; + +const loggers = { + json: Logger.consoleJson, + logFmt: Logger.consoleLogFmt, + structured: Logger.consoleStructured, + pretty: Logger.consolePretty(), +} satisfies Record>; export const withLogFormat = Effect.gen(function* () { const isDev = yield* IsDevelopment; const logFormat = yield* LogFormat.pipe( - Config.withDefault(isDev ? "pretty" : "json"), + Config.withDefault(isDev ? ("pretty" as const) : ("json" as const)), ); - return Logger[logFormat]; + return Logger.layer([loggers[logFormat]]); }).pipe( Effect.catchTag( "ConfigError", @@ -76,7 +59,7 @@ export const withLogFormat = Effect.gen(function* () { cause: e, }), ), - Layer.unwrapEffect, + Layer.unwrap, ); type HttpClientResponseMixinMethod = "json" | "text" | "arrayBuffer" | "None"; @@ -85,25 +68,29 @@ export const logHttpClientResponse = ( message: string, opts?: { /** Level to log on, default "Debug" */ - level?: LogLevel.Literal; + level?: LogLevel.Severity; /** What body mixin to use to get the response body, default "json" */ mixin?: HttpClientResponseMixinMethod; }, ) => { const mixin = opts?.mixin ?? "json"; - const level = LogLevel.fromLiteral(opts?.level ?? "Debug"); + const level = opts?.level ?? "Debug"; + + return (response: HttpClientResponse.HttpClientResponse) => { + const consumeBody: Effect.Effect = + mixin !== "None" ? response[mixin] : Effect.void; - return (response: HttpClientResponse.HttpClientResponse) => - Effect.flatMap(mixin !== "None" ? response[mixin] : Effect.void, () => - Effect.logWithLevel(level, `${message} (${response.status})`).pipe( + return Effect.flatMap(consumeBody, () => + Effect.logWithLevel(level)(`${message} (${response.status})`).pipe( Effect.annotateLogs("response", response), ), ); + }; }; export const logHttpClientError = (message: string) => (err: HttpClientError.HttpClientError | HttpBody.HttpBodyError) => - err._tag === "ResponseError" + err._tag === "HttpClientError" && err.response !== undefined ? logHttpClientResponse(message, { level: "Error" })(err.response) : Effect.logError(message).pipe(Effect.annotateLogs("error", err)); diff --git a/packages/uploadthing/src/_internal/parser.ts b/packages/uploadthing/src/_internal/parser.ts index a95a980a8e..d1b5cd5de0 100644 --- a/packages/uploadthing/src/_internal/parser.ts +++ b/packages/uploadthing/src/_internal/parser.ts @@ -1,7 +1,5 @@ import type * as Standard from "@standard-schema/spec"; -import * as Cause from "effect/Cause"; import * as Data from "effect/Data"; -import * as Runtime from "effect/Runtime"; import * as Schema from "effect/Schema"; import type { Json } from "@uploadthing/shared"; @@ -18,7 +16,7 @@ export type ParserZodEsque = { export type JsonParser = | ParserZodEsque | Standard.StandardSchemaV1 - | Schema.Schema; + | Schema.Codec; export class ParserError extends Data.TaggedError("ParserError")<{ cause: unknown; @@ -44,14 +42,10 @@ export function getParseFn< * Effect Schema */ return (value) => - Schema.decodeUnknownPromise(parser as Schema.Schema)( + Schema.decodeUnknownPromise(parser as Schema.Codec)( value, ).catch((error) => { - throw new ParserError({ - cause: Cause.squash( - (error as Runtime.FiberFailure)[Runtime.FiberFailureCauseId], - ), - }); + throw new ParserError({ cause: error }); }); } diff --git a/packages/uploadthing/src/_internal/route-config.ts b/packages/uploadthing/src/_internal/route-config.ts index cd979dab6b..f392ec5ad5 100644 --- a/packages/uploadthing/src/_internal/route-config.ts +++ b/packages/uploadthing/src/_internal/route-config.ts @@ -1,6 +1,5 @@ import * as Data from "effect/Data"; import * as Effect from "effect/Effect"; -import type * as S from "effect/Schema"; import type { ExpandedRouteConfig, @@ -55,7 +54,7 @@ class FileCountMismatch extends Data.Error<{ // e.g. uploading more videos than allowed, or a file that is larger than allowed. // This is double-checked on infra side, but we want to fail early to avoid network latency. export const assertFilesMeetConfig = ( - files: S.Schema.Type["files"], + files: (typeof UploadActionPayload.Type)["files"], routeConfig: ExpandedRouteConfig, ): Effect.Effect< null, diff --git a/packages/uploadthing/src/_internal/runtime.ts b/packages/uploadthing/src/_internal/runtime.ts index 383b00ef3e..aa9adea6a3 100644 --- a/packages/uploadthing/src/_internal/runtime.ts +++ b/packages/uploadthing/src/_internal/runtime.ts @@ -1,34 +1,48 @@ -import * as FetchHttpClient from "@effect/platform/FetchHttpClient"; -import * as Headers from "@effect/platform/Headers"; -import * as FiberRef from "effect/FiberRef"; +import * as ConfigProvider from "effect/ConfigProvider"; +import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as ManagedRuntime from "effect/ManagedRuntime"; +import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient"; +import * as Headers from "effect/unstable/http/Headers"; import type { FetchEsque } from "@uploadthing/shared"; import { configProvider } from "./config"; import { withLogFormat, withMinimalLogLevel } from "./logger"; -export const makeRuntime = (fetch: FetchEsque, config: unknown) => { +export const makeRuntime = (fetch: FetchEsque | undefined, config: unknown) => { const fetchHttpClient = Layer.provideMerge( FetchHttpClient.layer, - Layer.succeed(FetchHttpClient.Fetch, fetch as typeof globalThis.fetch), + Layer.succeed( + FetchHttpClient.Fetch, + // The `Fetch` reference defaults to `globalThis.fetch`, but resolve it + // lazily so runtime-patched implementations (e.g. msw) are picked up. + fetch + ? (fetch as typeof globalThis.fetch) + : (...args) => globalThis.fetch(...args), + ), ); - const withRedactedHeaders = Layer.effectDiscard( - FiberRef.update(Headers.currentRedactedNames, (_) => - _.concat(["x-uploadthing-api-key"]), + const withRedactedHeaders = Layer.effect( + Headers.CurrentRedactedNames, + Effect.map(Headers.CurrentRedactedNames, (names) => + names.concat(["x-uploadthing-api-key"]), ), ); - const layer = Layer.provide( + /** + * In Effect v4, the config provider (like all `Context.Reference`s) lives in + * the context instead of in fiber refs, so it must be merged into the + * runtime's context for per-request effects to see it. + */ + const layer = Layer.provideMerge( Layer.mergeAll( withLogFormat, withMinimalLogLevel, fetchHttpClient, withRedactedHeaders, ), - Layer.setConfigProvider(configProvider(config)), + ConfigProvider.layer(configProvider(config)), ); return ManagedRuntime.make(layer); }; diff --git a/packages/uploadthing/src/_internal/shared-schemas.ts b/packages/uploadthing/src/_internal/shared-schemas.ts index 3875510f55..d5d4a0da44 100644 --- a/packages/uploadthing/src/_internal/shared-schemas.ts +++ b/packages/uploadthing/src/_internal/shared-schemas.ts @@ -1,10 +1,12 @@ +import * as Effect from "effect/Effect"; import * as S from "effect/Schema"; +import * as SchemaTransformation from "effect/SchemaTransformation"; import type { Json } from "@uploadthing/shared"; import { ValidACLs, ValidContentDispositions } from "@uploadthing/shared"; -export const ContentDispositionSchema = S.Literal(...ValidContentDispositions); -export const ACLSchema = S.Literal(...ValidACLs); +export const ContentDispositionSchema = S.Literals(ValidContentDispositions); +export const ACLSchema = S.Literals(ValidACLs); /** * Valid options for the `?actionType` query param @@ -15,30 +17,36 @@ export const ActionType = S.Literal("upload"); * Valid options for the `uploadthing-hook` header * for requests coming from UT server */ -export const UploadThingHook = S.Literal("callback", "error"); +export const UploadThingHook = S.Literals(["callback", "error"]); /** * ============================================================================= * =========================== Configuration =================================== * ============================================================================= */ -const DecodeString = S.transform(S.Uint8ArrayFromSelf, S.String, { - decode: (data) => new TextDecoder().decode(data), - encode: (data) => new TextEncoder().encode(data), -}); +const DecodeString = S.Uint8Array.pipe( + S.decodeTo( + S.String, + SchemaTransformation.transform({ + decode: (data) => new TextDecoder().decode(data), + encode: (data) => new TextEncoder().encode(data), + }), + ), +); export const ParsedToken = S.Struct({ - apiKey: S.Redacted(S.String.pipe(S.startsWith("sk_"))), + apiKey: S.RedactedFromValue(S.String.check(S.isStartsWith("sk_"))), appId: S.String, regions: S.NonEmptyArray(S.String), ingestHost: S.String.pipe( - S.optionalWith({ default: () => "ingest.uploadthing.com" }), + S.withDecodingDefault(Effect.succeed("ingest.uploadthing.com")), + S.withConstructorDefault(Effect.succeed("ingest.uploadthing.com")), ), }); export const UploadThingToken = S.Uint8ArrayFromBase64.pipe( - S.compose(DecodeString), - S.compose(S.parseJson(ParsedToken)), + S.decodeTo(DecodeString), + S.decodeTo(S.fromJsonString(ParsedToken)), ); /** @@ -54,7 +62,7 @@ export class FileUploadData extends S.Class("FileUploadData")({ name: S.String, size: S.Number, type: S.String, - lastModified: S.Number.pipe(S.optional), + lastModified: S.optional(S.Number), }) {} /** @@ -145,5 +153,7 @@ export class UploadActionPayload extends S.Class( "UploadActionPayload", )({ files: S.Array(FileUploadData), - input: S.Unknown as S.Schema, + // The key may be missing entirely on incoming payloads (treated as undefined), + // but consumers see it as `Json` like in previous versions. + input: S.optional(S.Unknown) as unknown as S.Codec, }) {} diff --git a/packages/uploadthing/src/_internal/to-web-request.ts b/packages/uploadthing/src/_internal/to-web-request.ts index 4a50ca025b..c040aaba6d 100644 --- a/packages/uploadthing/src/_internal/to-web-request.ts +++ b/packages/uploadthing/src/_internal/to-web-request.ts @@ -62,7 +62,7 @@ export const getPostBody = (opts: { on: (event: string, listener: (data: any) => void) => void; }; }) => - Effect.async((resume) => { + Effect.callback((resume) => { const { req } = opts; if (!req.method || !isBodyAllowed(req.method)) { return resume(Effect.succeed(undefined)); @@ -134,7 +134,7 @@ export const toWebRequest = ( return parseURL(req).pipe( Effect.catchTag("InvalidURL", (e) => Effect.die(e)), - Effect.andThen( + Effect.map( (url) => new Request(url, { method, diff --git a/packages/uploadthing/src/_internal/types.ts b/packages/uploadthing/src/_internal/types.ts index 76692991bf..c2850aefe7 100644 --- a/packages/uploadthing/src/_internal/types.ts +++ b/packages/uploadthing/src/_internal/types.ts @@ -1,5 +1,3 @@ -import type { Schema } from "effect/Schema"; - import type { ErrorMessage, FileRouterInputConfig, @@ -81,7 +79,7 @@ type MiddlewareFn< TArgs extends Record, > = ( opts: TArgs & { - files: Schema.Type["files"]; + files: (typeof UploadActionPayload.Type)["files"]; input: TInput extends UnsetMarker ? undefined : TInput; }, ) => MaybePromise; diff --git a/packages/uploadthing/src/_internal/upload-browser.ts b/packages/uploadthing/src/_internal/upload-browser.ts index ba8b95000c..a44961fc10 100644 --- a/packages/uploadthing/src/_internal/upload-browser.ts +++ b/packages/uploadthing/src/_internal/upload-browser.ts @@ -1,6 +1,5 @@ -import { unsafeCoerce } from "effect/Function"; -import * as Micro from "effect/Micro"; -import { hasProperty, isRecord } from "effect/Predicate"; +import * as Effect from "effect/Effect"; +import { hasProperty, isObject } from "effect/Predicate"; import type { FetchContext, FetchError } from "@uploadthing/shared"; import { fetchEff, UploadThingError } from "@uploadthing/shared"; @@ -30,7 +29,7 @@ const uploadWithProgress = ( | undefined; }, ) => - Micro.async((resume) => { + Effect.callback((resume) => { const xhr = new XMLHttpRequest(); xhr.open("PUT", presigned.url, true); xhr.setRequestHeader("Range", `bytes=${rangeStart}-`); @@ -47,7 +46,7 @@ const uploadWithProgress = ( previousLoaded = loaded; }); xhr.addEventListener("load", () => { - if (xhr.status >= 200 && xhr.status < 300 && isRecord(xhr.response)) { + if (xhr.status >= 200 && xhr.status < 300 && isObject(xhr.response)) { if (hasProperty(xhr.response, "error")) { resume( new UploadThingError({ @@ -57,7 +56,7 @@ const uploadWithProgress = ( }), ); } else { - resume(Micro.succeed(xhr.response)); + resume(Effect.succeed(xhr.response)); } } else { resume( @@ -105,7 +104,7 @@ const uploadWithProgress = ( } xhr.send(formData); - return Micro.sync(() => xhr.abort()); + return Effect.sync(() => xhr.abort()); }); export const uploadFile = < @@ -127,16 +126,18 @@ export const uploadFile = < method: "HEAD", headers: opts.traceHeaders, }).pipe( - Micro.map(({ headers }) => + Effect.map(({ headers }) => parseInt(headers.get("x-ut-range-start") ?? "0", 10), ), - Micro.tap((start) => - opts.onUploadProgress?.({ - delta: start, - loaded: start, - }), + Effect.tap((start) => + Effect.sync(() => + opts.onUploadProgress?.({ + delta: start, + loaded: start, + }), + ), ), - Micro.flatMap((start) => + Effect.flatMap((start) => uploadWithProgress(file, start, presigned, { traceHeaders: opts.traceHeaders, onUploadProgress: (progressEvent) => @@ -146,8 +147,8 @@ export const uploadFile = < }), }), ), - Micro.map(unsafeCoerce>), - Micro.map((uploadResponse) => ({ + Effect.map((_) => _ as UploadPutResult), + Effect.map((uploadResponse) => ({ name: file.name, size: file.size, key: presigned.key, @@ -179,7 +180,7 @@ export const uploadFilesInternal = < >( endpoint: TEndpoint, opts: UploadFilesOptions, -): Micro.Micro< +): Effect.Effect< ClientUploadedFileData[], UploadThingError | FetchError, FetchContext @@ -197,7 +198,7 @@ export const uploadFilesInternal = < const totalSize = opts.files.reduce((acc, f) => acc + f.size, 0); let totalLoaded = 0; - return Micro.flatMap( + return Effect.flatMap( reportEventToUT("upload", { input: "input" in opts ? opts.input : null, files: opts.files.map((f) => ({ @@ -208,11 +209,11 @@ export const uploadFilesInternal = < })), }), (presigneds) => - Micro.forEach( + Effect.forEach( presigneds, (presigned, i) => - Micro.flatMap( - Micro.sync(() => + Effect.flatMap( + Effect.sync(() => opts.onUploadBegin?.({ file: opts.files[i]!.name }), ), () => diff --git a/packages/uploadthing/src/_internal/upload-server.ts b/packages/uploadthing/src/_internal/upload-server.ts index e0b40eaba8..c537b4f035 100644 --- a/packages/uploadthing/src/_internal/upload-server.ts +++ b/packages/uploadthing/src/_internal/upload-server.ts @@ -1,7 +1,6 @@ -import * as HttpClient from "@effect/platform/HttpClient"; -import * as HttpClientRequest from "@effect/platform/HttpClientRequest"; import * as Effect from "effect/Effect"; -import { unsafeCoerce } from "effect/Function"; +import * as HttpClient from "effect/unstable/http/HttpClient"; +import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"; import { UploadThingError } from "@uploadthing/shared"; @@ -36,9 +35,8 @@ export const uploadWithoutProgress = ( cause: e, }), ), - Effect.andThen((_) => _.json), - Effect.andThen(unsafeCoerce), - Effect.scoped, + Effect.flatMap((_) => _.json), + Effect.map((_) => _ as UploadPutResult), ); yield* Effect.logDebug(`File ${file.name} uploaded successfully`).pipe( diff --git a/packages/uploadthing/src/_internal/ut-reporter.ts b/packages/uploadthing/src/_internal/ut-reporter.ts index 389b772a9c..257c62c600 100644 --- a/packages/uploadthing/src/_internal/ut-reporter.ts +++ b/packages/uploadthing/src/_internal/ut-reporter.ts @@ -1,5 +1,4 @@ -import { unsafeCoerce } from "effect/Function"; -import * as Micro from "effect/Micro"; +import * as Effect from "effect/Effect"; import type { FetchContext, MaybePromise } from "@uploadthing/shared"; import { @@ -37,7 +36,7 @@ const createAPIRequestUrl = (config: { export type UTReporter = ( type: TEvent, payload: UTEvents[TEvent]["in"], -) => Micro.Micro; +) => Effect.Effect; /** * Creates a "client" for reporting events to the UploadThing server via the user's API endpoint. @@ -52,14 +51,14 @@ export const createUTReporter = traceHeaders: TraceHeaders; }): UTReporter => (type, payload) => - Micro.gen(function* () { + Effect.gen(function* () { const url = createAPIRequestUrl({ url: cfg.url, slug: cfg.endpoint, actionType: type, }); const headers = new Headers( - yield* Micro.promise(async () => + yield* Effect.promise(async () => typeof cfg.headers === "function" ? await cfg.headers() : cfg.headers, ), ); @@ -76,15 +75,15 @@ export const createUTReporter = body: JSON.stringify(payload), headers, }).pipe( - Micro.andThen(parseResponseJson), + Effect.andThen(parseResponseJson), /** * We don't _need_ to validate the response here, just cast it for now. * As of now, @effect/schema includes quite a few bytes we cut out by this... * We have "strong typing" on the backend that ensures the shape should match. */ - Micro.map(unsafeCoerce), - Micro.catchTag("FetchError", (e) => - Micro.fail( + Effect.map((_) => _ as UTEvents[typeof type]["out"]), + Effect.catchTag("FetchError", (e) => + Effect.fail( new UploadThingError({ code: "INTERNAL_CLIENT_ERROR", message: `Failed to report event "${type}" to UploadThing server`, @@ -92,8 +91,8 @@ export const createUTReporter = }), ), ), - Micro.catchTag("BadRequestError", (e) => - Micro.fail( + Effect.catchTag("BadRequestError", (e) => + Effect.fail( new UploadThingError({ code: getErrorTypeFromStatusCode(e.status), message: e.getMessage(), @@ -101,8 +100,8 @@ export const createUTReporter = }), ), ), - Micro.catchTag("InvalidJson", (e) => - Micro.fail( + Effect.catchTag("InvalidJson", (e) => + Effect.fail( new UploadThingError({ code: "INTERNAL_CLIENT_ERROR", message: "Failed to parse response from UploadThing server", diff --git a/packages/uploadthing/src/client-future.ts b/packages/uploadthing/src/client-future.ts index 1585753bd0..9dcad8ce15 100644 --- a/packages/uploadthing/src/client-future.ts +++ b/packages/uploadthing/src/client-future.ts @@ -1,5 +1,6 @@ import * as Arr from "effect/Array"; -import * as Micro from "effect/Micro"; +import * as Cause from "effect/Cause"; +import * as Effect from "effect/Effect"; import type { FetchEsque } from "@uploadthing/shared"; import { @@ -83,13 +84,13 @@ export const future_genUploader = ( input: (options as any).input as inferEndpointInput, headers: options.headers, traceHeaders, - }).pipe(Micro.provideService(FetchContext, fetchFn), (effect) => - Micro.runPromiseExit( + }).pipe(Effect.provideService(FetchContext, fetchFn), (effect) => + Effect.runPromiseExit( effect, options.signal && { signal: options.signal }, ), ); - if (pExit._tag === "Failure") throw Micro.causeSquash(pExit.cause); + if (pExit._tag === "Failure") throw Cause.squash(pExit.cause); const presigneds = pExit.value; const pendingFiles = options.files.map(makePendingFile); @@ -114,7 +115,7 @@ export const future_genUploader = ( onEvent: options.onEvent, traceHeaders, XHRImpl: globalThis.XMLHttpRequest, - }).pipe(Micro.provideService(FetchContext, fetchFn)); + }).pipe(Effect.provideService(FetchContext, fetchFn)); for (const [presigned, file] of Arr.zip(presigneds, pendingFiles)) { file.key = presigned.key; @@ -123,16 +124,16 @@ export const future_genUploader = ( const deferred = createDeferred>(); uploads.set(file, { presigned, deferred }); - void Micro.runPromiseExit(uploadEffect(file, presigned), { + void Effect.runPromiseExit(uploadEffect(file, presigned), { signal: deferred.ac.signal, }) .then((result) => { if (result._tag === "Success") { return deferred.resolve(result.value); - } else if (result.cause._tag === "Interrupt") { + } else if (Cause.hasInterrupts(result.cause)) { throw new UploadPausedError(); } - throw Micro.causeSquash(result.cause); + throw Cause.squash(result.cause); }) .catch((err) => { if (err instanceof UploadPausedError) return; @@ -201,7 +202,7 @@ export const future_genUploader = ( if (!upload) throw "No upload found"; upload.deferred.ac = new AbortController(); - void Micro.runPromiseExit( + void Effect.runPromiseExit( uploadEffect(file as PendingFile, upload.presigned), { signal: upload.deferred.ac.signal, @@ -210,10 +211,10 @@ export const future_genUploader = ( .then((result) => { if (result._tag === "Success") { return upload.deferred.resolve(result.value); - } else if (result.cause._tag === "Interrupt") { + } else if (Cause.hasInterrupts(result.cause)) { throw new UploadPausedError(); } - throw Micro.causeSquash(result.cause); + throw Cause.squash(result.cause); }) .catch((err) => { if (err instanceof UploadPausedError) return; diff --git a/packages/uploadthing/src/client.ts b/packages/uploadthing/src/client.ts index 37820e3076..d31314c791 100644 --- a/packages/uploadthing/src/client.ts +++ b/packages/uploadthing/src/client.ts @@ -1,5 +1,6 @@ import * as Arr from "effect/Array"; -import * as Micro from "effect/Micro"; +import * as Cause from "effect/Cause"; +import * as Effect from "effect/Effect"; import type { ExpandedRouteConfig, FetchEsque } from "@uploadthing/shared"; import { @@ -59,10 +60,10 @@ export const isValidFileType = ( file: File, routeConfig: ExpandedRouteConfig, ): boolean => - Micro.runSync( + Effect.runSync( matchFileType(file, objectKeys(routeConfig)).pipe( - Micro.map((type) => file.type.includes(type)), - Micro.orElseSucceed(() => false), + Effect.map((type) => file.type.includes(type)), + Effect.orElseSucceed(() => false), ), ); @@ -74,11 +75,11 @@ export const isValidFileSize = ( file: File, routeConfig: ExpandedRouteConfig, ): boolean => - Micro.runSync( + Effect.runSync( matchFileType(file, objectKeys(routeConfig)).pipe( - Micro.flatMap((type) => fileSizeToBytes(routeConfig[type]!.maxFileSize)), - Micro.map((maxFileSize) => file.size <= maxFileSize), - Micro.orElseSucceed(() => false), + Effect.flatMap((type) => fileSizeToBytes(routeConfig[type]!.maxFileSize)), + Effect.map((maxFileSize) => file.size <= maxFileSize), + Effect.orElseSucceed(() => false), ), ); @@ -121,7 +122,7 @@ export const genUploader = ( }); const fetchFn: FetchEsque = initOpts?.fetch ?? window.fetch; - const presigneds = await Micro.runPromise( + const presigneds = await Effect.runPromise( utReporter("upload", { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment input: "input" in opts ? (opts.input as any) : null, @@ -131,7 +132,7 @@ export const genUploader = ( type: f.type, lastModified: f.lastModified, })), - }).pipe(Micro.provideService(FetchContext, fetchFn)), + }).pipe(Effect.provideService(FetchContext, fetchFn)), ); const totalSize = opts.files.reduce((acc, f) => acc + f.size, 0); @@ -150,7 +151,7 @@ export const genUploader = ( totalProgress: Math.round((totalLoaded / totalSize) * 100), }); }, - }).pipe(Micro.provideService(FetchContext, fetchFn)); + }).pipe(Effect.provideService(FetchContext, fetchFn)); for (const [i, p] of presigneds.entries()) { const file = opts.files[i]; @@ -159,16 +160,16 @@ export const genUploader = ( const deferred = createDeferred>(); uploads.set(file, { deferred, presigned: p }); - void Micro.runPromiseExit(uploadEffect(file, p), { + void Effect.runPromiseExit(uploadEffect(file, p), { signal: deferred.ac.signal, }) .then((result) => { if (result._tag === "Success") { return deferred.resolve(result.value); - } else if (result.cause._tag === "Interrupt") { + } else if (Cause.hasInterrupts(result.cause)) { throw new UploadPausedError(); } - throw Micro.causeSquash(result.cause); + throw Cause.squash(result.cause); }) .catch((err) => { if (err instanceof UploadPausedError) return; @@ -206,16 +207,16 @@ export const genUploader = ( if (!upload) throw "No upload found"; upload.deferred.ac = new AbortController(); - void Micro.runPromiseExit(uploadEffect(file, upload.presigned), { + void Effect.runPromiseExit(uploadEffect(file, upload.presigned), { signal: upload.deferred.ac.signal, }) .then((result) => { if (result._tag === "Success") { return upload.deferred.resolve(result.value); - } else if (result.cause._tag === "Interrupt") { + } else if (Cause.hasInterrupts(result.cause)) { throw new UploadPausedError(); } - throw Micro.causeSquash(result.cause); + throw Cause.squash(result.cause); }) .catch((err) => { if (err instanceof UploadPausedError) return; @@ -274,16 +275,16 @@ export const genUploader = ( // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access input: (opts as any).input as inferEndpointInput, }) - .pipe(Micro.provideService(FetchContext, fetchFn), (effect) => - Micro.runPromiseExit(effect, opts.signal && { signal: opts.signal }), + .pipe(Effect.provideService(FetchContext, fetchFn), (effect) => + Effect.runPromiseExit(effect, opts.signal && { signal: opts.signal }), ) .then((exit) => { if (exit._tag === "Success") { return exit.value; - } else if (exit.cause._tag === "Interrupt") { + } else if (Cause.hasInterrupts(exit.cause)) { throw new UploadAbortedError(); } - throw Micro.causeSquash(exit.cause); + throw Cause.squash(exit.cause); }); }; diff --git a/packages/uploadthing/src/effect-platform.ts b/packages/uploadthing/src/effect-platform.ts index a25e52bb8a..6d76d984ab 100644 --- a/packages/uploadthing/src/effect-platform.ts +++ b/packages/uploadthing/src/effect-platform.ts @@ -1,9 +1,9 @@ -import type * as HttpApp from "@effect/platform/HttpApp"; -import type * as HttpClient from "@effect/platform/HttpClient"; -import * as HttpRouter from "@effect/platform/HttpRouter"; -import * as HttpServerRequest from "@effect/platform/HttpServerRequest"; +import * as ConfigProvider from "effect/ConfigProvider"; import * as Effect from "effect/Effect"; -import * as Layer from "effect/Layer"; +import type * as Scope from "effect/Scope"; +import type * as HttpClient from "effect/unstable/http/HttpClient"; +import * as HttpServerRequest from "effect/unstable/http/HttpServerRequest"; +import type * as HttpServerResponse from "effect/unstable/http/HttpServerResponse"; import type { Json } from "@uploadthing/shared"; @@ -39,34 +39,40 @@ export const createRouteHandler = (opts: { * * @example * ```ts - * import { Effect, Layer, Logger, LogLevel } from "effect"; - * import { HttpClient } from "@effect/platform"; + * import { Effect, Layer, References } from "effect"; + * import { FetchHttpClient } from "effect/unstable/http"; * // Set logLevel - * Logger.withMinimumLogLevel(LogLevel.Debug) + * Layer.succeed(References.MinimumLogLevel, "Debug") * * // Override fetch implementation * Layer.succeed( - * HttpClient.Fetch, + * FetchHttpClient.Fetch, * myFetchImplementation, * ); * ``` */ config?: Omit; -}): HttpApp.Default => { - const router = Effect.runSync( +}): Effect.Effect< + HttpServerResponse.HttpServerResponse, + unknown, + HttpClient.HttpClient | HttpServerRequest.HttpServerRequest | Scope.Scope +> => { + const handler = Effect.runSync( createRequestHandler(opts, "effect-platform"), ); - return HttpRouter.provideServiceEffect( - router, - AdapterArguments, - Effect.map( - HttpServerRequest.HttpServerRequest, - (serverRequest) => - ({ - req: serverRequest, - }) satisfies AdapterArgs, + return handler.pipe( + Effect.provideServiceEffect( + AdapterArguments, + Effect.map( + HttpServerRequest.HttpServerRequest, + (serverRequest) => + ({ + req: serverRequest, + }) satisfies AdapterArgs, + ), ), - ).pipe(Effect.provide(Layer.setConfigProvider(configProvider(opts.config)))); + Effect.provide(ConfigProvider.layer(configProvider(opts.config))), + ); }; diff --git a/packages/uploadthing/src/sdk/index.ts b/packages/uploadthing/src/sdk/index.ts index ebfbf059f3..379f21cdaa 100644 --- a/packages/uploadthing/src/sdk/index.ts +++ b/packages/uploadthing/src/sdk/index.ts @@ -1,15 +1,12 @@ -import type * as FetchHttpClient from "@effect/platform/FetchHttpClient"; -import * as HttpClient from "@effect/platform/HttpClient"; -import type * as HttpClientError from "@effect/platform/HttpClientError"; -import * as HttpClientRequest from "@effect/platform/HttpClientRequest"; -import * as HttpClientResponse from "@effect/platform/HttpClientResponse"; import * as Arr from "effect/Array"; import * as Cause from "effect/Cause"; import * as Effect from "effect/Effect"; -import type { ManagedRuntime } from "effect/ManagedRuntime"; -import type { ParseError } from "effect/ParseResult"; import * as Redacted from "effect/Redacted"; import * as S from "effect/Schema"; +import * as HttpClient from "effect/unstable/http/HttpClient"; +import type * as HttpClientError from "effect/unstable/http/HttpClientError"; +import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"; +import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse"; import type { ACL, FetchEsque, MaybeUrl } from "@uploadthing/shared"; import { @@ -48,10 +45,7 @@ export { UTFile }; export class UTApi { private fetch: FetchEsque; private defaultKeyType: "fileKey" | "customId"; - private runtime: ManagedRuntime< - HttpClient.HttpClient | FetchHttpClient.Fetch, - UploadThingError - >; + private runtime: ReturnType; private opts: UTApiOptions; constructor(options?: UTApiOptions) { // Assert some stuff @@ -65,9 +59,9 @@ export class UTApi { private requestUploadThing = ( pathname: `/${string}`, body: Record, - responseSchema: S.Schema, + responseSchema: S.Codec, ) => - Effect.gen(this, function* () { + Effect.gen(function* () { const { apiKey } = yield* UTToken; const baseUrl = yield* ApiUrl; const httpClient = (yield* HttpClient.HttpClient).pipe( @@ -76,19 +70,18 @@ export class UTApi { return yield* HttpClientRequest.post(pathname).pipe( HttpClientRequest.prependUrl(baseUrl), - HttpClientRequest.bodyUnsafeJson(body), + HttpClientRequest.bodyJsonUnsafe(body), HttpClientRequest.setHeaders({ "x-uploadthing-version": UPLOADTHING_VERSION, "x-uploadthing-be-adapter": "server-sdk", "x-uploadthing-api-key": Redacted.value(apiKey), }), httpClient.execute, - Effect.tapBoth({ - onSuccess: logHttpClientResponse("UploadThing API Response"), - onFailure: logHttpClientError("Failed to request UploadThing API"), - }), + Effect.tap(logHttpClientResponse("UploadThing API Response")), + Effect.tapError( + logHttpClientError("Failed to request UploadThing API"), + ), Effect.flatMap(HttpClientResponse.schemaBodyJson(responseSchema)), - Effect.scoped, ); }).pipe( Effect.catchTag( @@ -107,7 +100,7 @@ export class UTApi { private executeAsync = async ( program: Effect.Effect< A, - UploadThingError | ParseError | HttpClientError.HttpClientError, + UploadThingError | S.SchemaError | HttpClientError.HttpClientError, HttpClient.HttpClient >, signal?: AbortSignal, @@ -350,12 +343,12 @@ export class UTApi { key: S.String, name: S.String, size: S.Number, - status: S.Literal( + status: S.Literals([ "Deletion Pending", "Failed", "Uploaded", "Uploading", - ), + ]), uploadedAt: S.Number, }), ), diff --git a/packages/uploadthing/src/sdk/types.ts b/packages/uploadthing/src/sdk/types.ts index 365df4611d..9c0566e441 100644 --- a/packages/uploadthing/src/sdk/types.ts +++ b/packages/uploadthing/src/sdk/types.ts @@ -1,5 +1,4 @@ import type { Blob as NodeBlob } from "buffer"; -import type * as Config from "effect/Config"; import type * as LogLevel from "effect/LogLevel"; import type { @@ -29,13 +28,13 @@ export interface UTApiOptions { /** * @default "info" */ - logLevel?: LogLevel.Literal; + logLevel?: LogLevel.LogLevel; /** * What format log entries should be in * @default "pretty" in development, else "json" * @see https://effect.website/docs/guides/observability/logging#built-in-loggers */ - logFormat?: Config.Config.Success; + logFormat?: LogFormat; /** * Set the default key type for file operations. Allows you to set your preferred filter * for file keys or custom identifiers without needing to specify it on every call. diff --git a/packages/uploadthing/src/sdk/utils.ts b/packages/uploadthing/src/sdk/utils.ts index 0b1df0acc6..b126bb5785 100644 --- a/packages/uploadthing/src/sdk/utils.ts +++ b/packages/uploadthing/src/sdk/utils.ts @@ -1,7 +1,7 @@ -import * as HttpClient from "@effect/platform/HttpClient"; -import * as HttpClientRequest from "@effect/platform/HttpClientRequest"; import * as Effect from "effect/Effect"; import * as Predicate from "effect/Predicate"; +import * as HttpClient from "effect/unstable/http/HttpClient"; +import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"; import { generateKey, @@ -35,7 +35,7 @@ export const downloadFile = ( _url: MaybeUrl | UrlWithOverrides, ): Effect.Effect => Effect.gen(function* () { - let url = Predicate.isRecord(_url) ? _url.url : _url; + let url = Predicate.isObject(_url) ? _url.url : _url; if (typeof url === "string") { // since dataurls will result in name being too long, tell the user // to use uploadFiles instead. @@ -53,7 +53,7 @@ export const downloadFile = ( const { name = url.pathname.split("/").pop() ?? "unknown-filename", customId = undefined, - } = Predicate.isRecord(_url) ? _url : {}; + } = Predicate.isObject(_url) ? _url : {}; const httpClient = (yield* HttpClient.HttpClient).pipe( HttpClient.filterStatusOk, ); @@ -69,7 +69,6 @@ export const downloadFile = ( data: cause.toJSON() as Json, } satisfies SerializedUploadThingError; }), - Effect.scoped, ); return new UTFile([arrayBuffer], name, { @@ -135,7 +134,7 @@ export const uploadFile = ( Effect.catchTag("UploadThingError", (e) => Effect.fail(UploadThingError.toObject(e)), ), - Effect.catchTag("ResponseError", (e) => + Effect.catchTag("HttpClientError", (e) => Effect.fail({ code: "UPLOAD_FAILED", message: "Failed to upload file", diff --git a/packages/uploadthing/src/types.ts b/packages/uploadthing/src/types.ts index 8fbf7e45bc..70b3036209 100644 --- a/packages/uploadthing/src/types.ts +++ b/packages/uploadthing/src/types.ts @@ -40,7 +40,7 @@ export type inferErrorShape = TFileRoute["$types"]["errorShape"]; export type RouteHandlerConfig = { - logLevel?: LogLevel.Literal; + logLevel?: LogLevel.LogLevel; /** * What format log entries should be in * @default "pretty" in development, else "json" diff --git a/packages/uploadthing/test/node/adapters.test.ts b/packages/uploadthing/test/node/adapters.test.ts index 6ba3fc822c..aaaaec222d 100644 --- a/packages/uploadthing/test/node/adapters.test.ts +++ b/packages/uploadthing/test/node/adapters.test.ts @@ -1,12 +1,11 @@ /* eslint-disable no-restricted-globals */ import type { NextApiRequest, NextApiResponse } from "next"; import { NextRequest } from "next/server"; -import * as FetchHttpClient from "@effect/platform/FetchHttpClient"; -import * as HttpServerRequest from "@effect/platform/HttpServerRequest"; -import * as HttpServerResponse from "@effect/platform/HttpServerResponse"; import * as ConfigProvider from "effect/ConfigProvider"; import * as Effect from "effect/Effect"; -import * as Layer from "effect/Layer"; +import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient"; +import * as HttpServerRequest from "effect/unstable/http/HttpServerRequest"; +import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse"; import * as express from "express"; import * as fastify from "fastify"; import { createApp, H3Event, toWebHandler } from "h3"; @@ -925,8 +924,8 @@ describe("adapters:effect-platform", async () => { expect(response.status).toBe(200); }).pipe( Effect.provide( - Layer.setConfigProvider( - ConfigProvider.fromJson({ + ConfigProvider.layer( + ConfigProvider.fromUnknown({ uploadthingToken: testToken.encoded, }), ), diff --git a/packages/uploadthing/test/node/config.test.ts b/packages/uploadthing/test/node/config.test.ts index b2501805bf..316b863b31 100644 --- a/packages/uploadthing/test/node/config.test.ts +++ b/packages/uploadthing/test/node/config.test.ts @@ -1,7 +1,7 @@ import { it } from "@effect/vitest"; +import * as ConfigProvider from "effect/ConfigProvider"; import * as Effect from "effect/Effect"; import * as Exit from "effect/Exit"; -import * as Layer from "effect/Layer"; import * as Redacted from "effect/Redacted"; import * as S from "effect/Schema"; import { beforeEach, describe, expect } from "vitest"; @@ -39,7 +39,7 @@ describe("utToken", () => { it.effect("fails if no token is provided as env", () => Effect.gen(function* () { const token = yield* UTToken.pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -61,7 +61,7 @@ describe("utToken", () => { process.env.UPLOADTHING_TOKEN = "some-token-that-is-not-a-token"; const token = yield* UTToken.pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -80,12 +80,12 @@ describe("utToken", () => { it.effect("succeeds if token is provided as env", () => Effect.gen(function* () { - process.env.UPLOADTHING_TOKEN = yield* S.encode(UploadThingToken)( + process.env.UPLOADTHING_TOKEN = yield* S.encodeEffect(UploadThingToken)( ParsedToken.make(app1TokenData), ); const token = yield* UTToken.pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -100,12 +100,12 @@ describe("utToken", () => { it.effect("with import.meta.env", () => Effect.gen(function* () { - import.meta.env.UPLOADTHING_TOKEN = yield* S.encode(UploadThingToken)( - ParsedToken.make(app1TokenData), - ); + import.meta.env.UPLOADTHING_TOKEN = yield* S.encodeEffect( + UploadThingToken, + )(ParsedToken.make(app1TokenData)); const token = yield* UTToken.pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -124,7 +124,7 @@ describe("utToken", () => { Effect.gen(function* () { const token = yield* UTToken.pipe( Effect.provide( - Layer.setConfigProvider(configProvider({ noToken: "here" })), + ConfigProvider.layer(configProvider({ noToken: "here" })), ), Effect.exit, ); @@ -148,7 +148,7 @@ describe("utToken", () => { const token = yield* UTToken.pipe( Effect.provide( - Layer.setConfigProvider(configProvider({ token: badToken })), + ConfigProvider.layer(configProvider({ token: badToken })), ), Effect.exit, ); @@ -168,13 +168,13 @@ describe("utToken", () => { it.effect("succeeds if token is provided as option", () => Effect.gen(function* () { - const testTokenStr = yield* S.encode(UploadThingToken)( + const testTokenStr = yield* S.encodeEffect(UploadThingToken)( ParsedToken.make(app1TokenData), ); const token = yield* UTToken.pipe( Effect.provide( - Layer.setConfigProvider(configProvider({ token: testTokenStr })), + ConfigProvider.layer(configProvider({ token: testTokenStr })), ), Effect.exit, ); @@ -190,7 +190,7 @@ describe("utToken", () => { it.effect("with ingestHost specified", () => Effect.gen(function* () { - const testTokenStr = yield* S.encode(UploadThingToken)( + const testTokenStr = yield* S.encodeEffect(UploadThingToken)( ParsedToken.make({ ...app1TokenData, ingestHost: "ingest.ut-staging.com", @@ -199,7 +199,7 @@ describe("utToken", () => { const token = yield* UTToken.pipe( Effect.provide( - Layer.setConfigProvider(configProvider({ token: testTokenStr })), + ConfigProvider.layer(configProvider({ token: testTokenStr })), ), Effect.exit, ); @@ -215,17 +215,17 @@ describe("utToken", () => { it.effect("options take precedence over env", () => Effect.gen(function* () { - process.env.UPLOADTHING_TOKEN = yield* S.encode(UploadThingToken)( + process.env.UPLOADTHING_TOKEN = yield* S.encodeEffect(UploadThingToken)( ParsedToken.make(app1TokenData), ); - const token2Str = yield* S.encode(UploadThingToken)( + const token2Str = yield* S.encodeEffect(UploadThingToken)( ParsedToken.make(app2TokenData), ); const token = yield* UTToken.pipe( Effect.provide( - Layer.setConfigProvider(configProvider({ token: token2Str })), + ConfigProvider.layer(configProvider({ token: token2Str })), ), Effect.exit, ); @@ -243,13 +243,13 @@ describe("utToken", () => { describe("ingest url infers correctly", () => { it.effect("takes from env if provided", () => Effect.gen(function* () { - process.env.UPLOADTHING_TOKEN = yield* S.encode(UploadThingToken)( + process.env.UPLOADTHING_TOKEN = yield* S.encodeEffect(UploadThingToken)( ParsedToken.make(app1TokenData), ); process.env.UPLOADTHING_INGEST_URL = "http://localhost:1234"; const url = yield* IngestUrl(undefined).pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -259,12 +259,12 @@ describe("ingest url infers correctly", () => { it.effect("infers from token region if no env is provided", () => Effect.gen(function* () { - process.env.UPLOADTHING_TOKEN = yield* S.encode(UploadThingToken)( + process.env.UPLOADTHING_TOKEN = yield* S.encodeEffect(UploadThingToken)( ParsedToken.make(app1TokenData), ); const url = yield* IngestUrl(undefined).pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -277,7 +277,7 @@ describe("IsDevelopment", () => { it.effect("defaults to false", () => Effect.gen(function* () { const isDev = yield* IsDevelopment.pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -291,7 +291,7 @@ describe("IsDevelopment", () => { process.env.NODE_ENV = "development"; const isDev = yield* IsDevelopment.pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -304,7 +304,7 @@ describe("IsDevelopment", () => { process.env.UPLOADTHING_IS_DEV = "true"; const isDev = yield* IsDevelopment.pipe( - Effect.provide(Layer.setConfigProvider(configProvider(null))), + Effect.provide(ConfigProvider.layer(configProvider(null))), Effect.exit, ); @@ -315,9 +315,7 @@ describe("IsDevelopment", () => { it.effect("is true if config set", () => Effect.gen(function* () { const isDev = yield* IsDevelopment.pipe( - Effect.provide( - Layer.setConfigProvider(configProvider({ isDev: true })), - ), + Effect.provide(ConfigProvider.layer(configProvider({ isDev: true }))), Effect.exit, ); diff --git a/packages/uploadthing/test/node/input.test.ts b/packages/uploadthing/test/node/input.test.ts index 6b13a5a0e1..98fe0ec611 100644 --- a/packages/uploadthing/test/node/input.test.ts +++ b/packages/uploadthing/test/node/input.test.ts @@ -1,4 +1,4 @@ -import { ParseError } from "effect/ParseResult"; +import { SchemaError } from "effect/Schema"; import * as Schema from "effect/Schema"; import * as v from "valibot"; import { expect, expectTypeOf, it } from "vitest"; @@ -91,7 +91,7 @@ it("validation fails when input is invalid (effect/schema)", async () => { const fileRoute = f(["image"]).input(Schema.String).onUploadComplete(noop); const err = await getParseFn(fileRoute.inputParser)(123).catch((e) => e); expect(err).toBeInstanceOf(ParserError); - expect(err.cause).toBeInstanceOf(ParseError); + expect(err.cause).toBeInstanceOf(SchemaError); }); it("with data transforming (zod)", async () => { @@ -162,7 +162,7 @@ it("with data transforming (effect/schema)", async () => { const fileRoute = f(["image"]) .input( Schema.Struct({ - date: Schema.Date, + date: Schema.DateFromString, }), ) .middleware((opts) => { @@ -201,7 +201,7 @@ it("type errors for non-JSON data types (valibot)", () => { it("type errors for non-JSON data types (effect/schema)", () => { f(["image"]) // @ts-expect-error - Set is not a valid JSON type - .input(Schema.Struct({ foo: Schema.Set(Schema.String) })) + .input(Schema.Struct({ foo: Schema.ReadonlySet(Schema.String) })) .middleware(() => { return {}; }) diff --git a/packages/uploadthing/test/node/jsonl.test.ts b/packages/uploadthing/test/node/jsonl.test.ts index 80431ac491..9dea4d9716 100644 --- a/packages/uploadthing/test/node/jsonl.test.ts +++ b/packages/uploadthing/test/node/jsonl.test.ts @@ -53,7 +53,9 @@ describe("handleJsonLineStreaming", () => { const exit = yield* handleJsonLineStream( MetadataFetchStreamPart, onChunk, - )(Stream.fromReadableStream(() => readable, onError)).pipe(Effect.exit); + )( + Stream.fromReadableStream({ evaluate: () => readable, onError }), + ).pipe(Effect.exit); expect(exit).toEqual(Exit.succeed(undefined)); @@ -80,7 +82,9 @@ describe("handleJsonLineStreaming", () => { const exit = yield* handleJsonLineStream( MetadataFetchStreamPart, onChunk, - )(Stream.fromReadableStream(() => stream, onError)).pipe(Effect.exit); + )(Stream.fromReadableStream({ evaluate: () => stream, onError })).pipe( + Effect.exit, + ); expect(exit).toEqual(Exit.succeed(undefined)); @@ -117,7 +121,9 @@ describe("handleJsonLineStreaming", () => { const exit = yield* handleJsonLineStream( MetadataFetchStreamPart, onChunk, - )(Stream.fromReadableStream(() => stream, onError)).pipe(Effect.exit); + )(Stream.fromReadableStream({ evaluate: () => stream, onError })).pipe( + Effect.exit, + ); expect(exit).toEqual(Exit.succeed(undefined)); @@ -155,7 +161,9 @@ describe("handleJsonLineStreaming", () => { const exit = yield* handleJsonLineStream( MetadataFetchStreamPart, onChunk, - )(Stream.fromReadableStream(() => stream, onError)).pipe(Effect.exit); + )(Stream.fromReadableStream({ evaluate: () => stream, onError })).pipe( + Effect.exit, + ); expect(exit).toEqual(Exit.succeed(undefined)); @@ -187,7 +195,9 @@ describe("handleJsonLineStreaming", () => { const exit = yield* handleJsonLineStream( MetadataFetchStreamPart, onChunk, - )(Stream.fromReadableStream(() => stream, onError)).pipe(Effect.exit); + )(Stream.fromReadableStream({ evaluate: () => stream, onError })).pipe( + Effect.exit, + ); expect(exit).toEqual(Exit.succeed(undefined)); diff --git a/packages/uploadthing/test/node/request-handler.test.ts b/packages/uploadthing/test/node/request-handler.test.ts index 07957726d3..f380cad672 100644 --- a/packages/uploadthing/test/node/request-handler.test.ts +++ b/packages/uploadthing/test/node/request-handler.test.ts @@ -113,7 +113,7 @@ describe("errors for invalid request input", () => { expect(res.status).toBe(400); await expect(res.json()).resolves.toEqual({ message: "Invalid input", - cause: expect.stringContaining('Expected "upload", actual "invalid"'), + cause: expect.stringContaining('Expected "upload" | undefined'), }); }); }); diff --git a/packages/uploadthing/test/node/sdk.test.ts b/packages/uploadthing/test/node/sdk.test.ts index 071f6ead59..0223a917fb 100644 --- a/packages/uploadthing/test/node/sdk.test.ts +++ b/packages/uploadthing/test/node/sdk.test.ts @@ -270,8 +270,7 @@ describe("uploadFilesFromUrl", () => { error: { code: "BAD_REQUEST", data: expect.objectContaining({ - _tag: "ResponseError", - description: "non 2xx status code", + _tag: "HttpClientError", }), message: "Failed to download requested file: StatusCode: non 2xx status code (404 GET https://cdn.foo.com/does-not-exist.txt)", @@ -313,8 +312,7 @@ describe("uploadFilesFromUrl", () => { error: { code: "BAD_REQUEST", data: expect.objectContaining({ - _tag: "ResponseError", - description: "non 2xx status code", + _tag: "HttpClientError", }), message: "Failed to download requested file: StatusCode: non 2xx status code (404 GET https://cdn.foo.com/does-not-exist.txt)", diff --git a/packages/uploadthing/vitest.config.ts b/packages/uploadthing/vitest.config.ts index 0823061748..b99af85982 100644 --- a/packages/uploadthing/vitest.config.ts +++ b/packages/uploadthing/vitest.config.ts @@ -1,4 +1,10 @@ -import { defaultExclude, defineConfig, mergeConfig } from "vitest/config"; +import { playwright } from "@vitest/browser-playwright"; +import { + defaultExclude, + defineConfig, + defineProject, + mergeConfig, +} from "vitest/config"; import { baseConfig } from "@uploadthing/vitest-config/base"; @@ -6,10 +12,10 @@ export default mergeConfig( baseConfig, defineConfig({ test: { - workspace: [ + projects: [ mergeConfig( baseConfig, - defineConfig({ + defineProject({ test: { include: ["test/node/**/*.test.{ts,tsx}"], exclude: [...defaultExclude, "test/browser/**"], @@ -20,14 +26,14 @@ export default mergeConfig( ), mergeConfig( baseConfig, - defineConfig({ + defineProject({ test: { include: ["test/browser/**/*.test.{ts,tsx}"], exclude: [...defaultExclude, "test/node/**"], name: "browser", browser: { instances: [{ browser: "chromium" }], - provider: "playwright", + provider: playwright(), enabled: true, }, }, diff --git a/playground-v6/package.json b/playground-v6/package.json index 20226e79bc..2a4a773dc6 100644 --- a/playground-v6/package.json +++ b/playground-v6/package.json @@ -11,7 +11,7 @@ "dependencies": { "@uploadthing/react": "npm:@uploadthing/react@6", "clsx": "2.1.1", - "effect": "3.21.0", + "effect": "4.0.0-rc.110", "next": "canary", "react": "19.2.2", "react-dom": "19.2.2", diff --git a/playground/package.json b/playground/package.json index 015fb46853..b7038ac25e 100644 --- a/playground/package.json +++ b/playground/package.json @@ -11,7 +11,7 @@ "dependencies": { "@uploadthing/react": "workspace:*", "class-variance-authority": "^0.7.1", - "effect": "3.21.0", + "effect": "4.0.0-rc.110", "lucide-react": "^0.469.0", "next": "canary", "react": "19.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 903248ba83..6d8eee09d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -133,7 +133,7 @@ importers: version: 12.0.6(react-dom@19.2.2(react@19.2.2))(react@19.2.2) next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)) @@ -245,13 +245,13 @@ importers: version: 19.2.3(@types/react@19.2.7) '@vitejs/plugin-react-swc': specifier: ^3.7.2 - version: 3.7.2(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 3.7.2(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) examples/backend-adapters/client-vanilla: dependencies: @@ -264,7 +264,7 @@ importers: version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) examples/backend-adapters/client-vue: dependencies: @@ -280,25 +280,22 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + version: 5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) vue-tsc: specifier: ^2.0.6 version: 2.2.0(typescript@5.8.3) examples/backend-adapters/server: dependencies: - '@effect/platform': - specifier: 0.96.0 - version: 0.96.0(effect@3.21.0) '@effect/platform-node': - specifier: 0.106.0 - version: 0.106.0(@effect/cluster@0.30.2(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0))(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0) + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110(effect@4.0.0-rc.110)(redis@6.2.1) '@elysiajs/cors': specifier: ^1.2.0 version: 1.2.0(elysia@1.2.9(@sinclair/typebox@0.34.13)(openapi-types@12.1.3)(typescript@5.8.3)) @@ -318,8 +315,8 @@ importers: specifier: ^16.4.5 version: 16.5.0 effect: - specifier: 3.21.0 - version: 3.21.0 + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110 elysia: specifier: ^1.2.9 version: 1.2.9(@sinclair/typebox@0.34.13)(openapi-types@12.1.3)(typescript@5.8.3) @@ -371,7 +368,7 @@ importers: version: link:../../packages/react next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -402,16 +399,16 @@ importers: dependencies: '@astrojs/node': specifier: ^9.0.0 - version: 9.0.0(astro@5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.7.0)) + version: 9.0.0(astro@5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.9.0)) '@astrojs/react': specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.0)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.4.2)(lightningcss@1.29.3)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 4.1.2(@types/node@25.5.0)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.4.2)(lightningcss@1.29.3)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) '@uploadthing/react': specifier: 7.3.3 version: link:../../packages/react astro: specifier: ^5.1.2 - version: 5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.7.0) + version: 5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.9.0) react: specifier: 19.2.2 version: 19.2.2 @@ -557,7 +554,7 @@ importers: version: link:../../packages/nuxt nuxt: specifier: ^3.15.0 - version: 3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + version: 3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0) uploadthing: specifier: 7.7.4 version: link:../../packages/uploadthing @@ -575,7 +572,7 @@ importers: version: link:../../packages/react next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -609,7 +606,7 @@ importers: version: 0.15.2(solid-js@1.9.3) '@solidjs/start': specifier: ^1.0.10 - version: 1.0.10(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 1.0.10(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@uploadthing/solid': specifier: 7.3.3 version: link:../../packages/solid @@ -621,7 +618,7 @@ importers: version: link:../../packages/uploadthing vinxi: specifier: ^0.5.1 - version: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0) + version: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0) devDependencies: autoprefixer: specifier: ^10.4.20 @@ -647,13 +644,13 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.3.1 - version: 3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))) + version: 3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))) '@sveltejs/kit': specifier: ^2.15.1 - version: 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) svelte: specifier: ^5.16.1 version: 5.16.1 @@ -665,7 +662,7 @@ importers: version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) examples/minimal-tanstack-start: dependencies: @@ -674,7 +671,7 @@ importers: version: 1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2) '@tanstack/react-start': specifier: ^1.121.32 - version: 1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(encoding@0.1.13)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1) + version: 1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(encoding@0.1.13)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1) '@uploadthing/react': specifier: 7.3.3 version: link:../../packages/react @@ -699,7 +696,7 @@ importers: version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) examples/profile-picture: dependencies: @@ -726,7 +723,7 @@ importers: version: 0.469.0(react@19.2.2) next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) next-auth: specifier: 5.0.0-beta.25 version: 5.0.0-beta.25(next@15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(react@19.2.2) @@ -802,7 +799,7 @@ importers: version: link:../../packages/react next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -851,7 +848,7 @@ importers: version: link:../../packages/react next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -922,7 +919,7 @@ importers: devDependencies: '@react-router/dev': specifier: ^7.0.0 - version: 7.1.3(@react-router/serve@7.1.3(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(typescript@5.8.3))(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0))(yaml@2.7.0) + version: 7.1.3(@react-router/serve@7.1.3(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(typescript@5.8.3))(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0))(yaml@2.9.0) '@types/react': specifier: 19.2.7 version: 19.2.7 @@ -940,10 +937,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) examples/with-clerk-remix: dependencies: @@ -977,7 +974,7 @@ importers: devDependencies: '@remix-run/dev': specifier: ^2.12.0 - version: 2.15.2(@remix-run/react@2.15.2(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(typescript@5.8.3))(@remix-run/serve@2.15.2(typescript@5.8.3))(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0)) + version: 2.15.2(@remix-run/react@2.15.2(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(typescript@5.8.3))(@remix-run/serve@2.15.2(typescript@5.8.3))(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0)) '@types/react': specifier: 19.2.7 version: 19.2.7 @@ -995,10 +992,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) examples/with-drizzle-appdir: dependencies: @@ -1016,7 +1013,7 @@ importers: version: 0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2) next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -1068,7 +1065,7 @@ importers: version: 0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2) next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -1126,7 +1123,7 @@ importers: version: 0.469.0(react@19.2.2) next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.2(react@19.2.2))(react@19.2.2) @@ -1181,7 +1178,7 @@ importers: version: link:../../packages/react next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -1212,7 +1209,7 @@ importers: dependencies: next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -1243,7 +1240,7 @@ importers: version: link:../../packages/react next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -1354,7 +1351,7 @@ importers: devDependencies: '@nuxt/devtools': specifier: 1.7.0 - version: 1.7.0(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + version: 1.7.0(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) '@nuxt/module-builder': specifier: ^0.8.4 version: 0.8.4(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@3.29.5))(nuxi@3.17.2)(typescript@5.8.3) @@ -1375,16 +1372,16 @@ importers: version: 1.15.3 nuxt: specifier: ^3.15.0 - version: 3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + version: 3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0) uploadthing: specifier: workspace:* version: link:../uploadthing vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) vitest: - specifier: 3.2.4 - version: 3.2.4(@types/node@25.5.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + specifier: 4.1.10 + version: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) packages/nuxt/playground: devDependencies: @@ -1393,7 +1390,7 @@ importers: version: 6.12.2(magicast@0.3.5)(rollup@4.44.0) nuxt: specifier: ^3.15.0 - version: 3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + version: 3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0) packages/react: dependencies: @@ -1423,11 +1420,14 @@ importers: specifier: workspace:* version: link:../../tooling/vitest-config '@vitest/browser': - specifier: 3.2.4 - version: 3.2.4(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.2.4) + specifier: 4.1.10 + version: 4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/browser-playwright': + specifier: 4.1.10 + version: 4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) '@vitest/coverage-istanbul': - specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4) + specifier: 4.1.10 + version: 4.1.10(vitest@4.1.10) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1439,7 +1439,7 @@ importers: version: 2.7.5(@types/node@22.12.0)(typescript@5.8.3) next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: specifier: 19.2.2 version: 19.2.2 @@ -1459,11 +1459,11 @@ importers: specifier: workspace:* version: link:../uploadthing vitest: - specifier: 3.2.4 - version: 3.2.4(@types/node@22.12.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + specifier: 4.1.10 + version: 4.1.10(@types/node@22.12.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) vitest-browser-react: - specifier: 0.3.0 - version: 0.3.0(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(@vitest/browser@3.2.4)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(vitest@3.2.4) + specifier: 2.2.0 + version: 2.2.0(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(vitest@4.1.10) wait-on: specifier: ^8.0.1 version: 8.0.1 @@ -1477,15 +1477,15 @@ importers: specifier: workspace:* version: link:../mime-types effect: - specifier: 3.21.0 - version: 3.21.0 + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110 sqids: specifier: ^0.3.0 version: 0.3.0 devDependencies: '@effect/vitest': - specifier: 0.29.0 - version: 0.29.0(effect@3.21.0)(vitest@3.2.4) + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110(effect@4.0.0-rc.110)(vitest@4.1.10) '@types/react': specifier: 19.2.7 version: 19.2.7 @@ -1499,8 +1499,8 @@ importers: specifier: 'workspace:' version: link:../../tooling/vitest-config '@vitest/coverage-istanbul': - specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4) + specifier: 4.1.10 + version: 4.1.10(vitest@4.1.10) eslint: specifier: 9.25.1 version: 9.25.1(jiti@2.4.2) @@ -1517,8 +1517,8 @@ importers: specifier: 5.8.3 version: 5.8.3 vitest: - specifier: 3.2.4 - version: 3.2.4(@types/node@25.5.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + specifier: 4.1.10 + version: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) vue: specifier: ^3.4.21 version: 3.5.13(typescript@5.8.3) @@ -1552,10 +1552,10 @@ importers: version: 3.4.17 tsup: specifier: 8.3.5 - version: 8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.7.0) + version: 8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.9.0) tsup-preset-solid: specifier: 2.2.0 - version: 2.2.0(esbuild@0.24.2)(solid-js@1.9.3)(tsup@8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.7.0)) + version: 2.2.0(esbuild@0.24.2)(solid-js@1.9.3)(tsup@8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.9.0)) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1577,16 +1577,16 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.3.1 - version: 3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))) + version: 3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))) '@sveltejs/kit': specifier: ^2.15.1 - version: 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@sveltejs/package': specifier: ^2.3.0 version: 2.3.7(svelte@5.16.1)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@uploadthing/eslint-config': specifier: workspace:* version: link:../../tooling/eslint-config @@ -1619,13 +1619,10 @@ importers: version: link:../uploadthing vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) packages/uploadthing: dependencies: - '@effect/platform': - specifier: 0.96.0 - version: 0.96.0(effect@3.21.0) '@standard-schema/spec': specifier: 1.0.0-beta.4 version: 1.0.0-beta.4 @@ -1636,12 +1633,12 @@ importers: specifier: workspace:* version: link:../shared effect: - specifier: 3.21.0 - version: 3.21.0 + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110 devDependencies: '@effect/vitest': - specifier: 0.29.0 - version: 0.29.0(effect@3.21.0)(vitest@3.2.4) + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110(effect@4.0.0-rc.110)(vitest@4.1.10) '@remix-run/server-runtime': specifier: ^2.12.0 version: 2.15.2(typescript@5.8.3) @@ -1666,9 +1663,12 @@ importers: '@uploadthing/vitest-config': specifier: workspace:* version: link:../../tooling/vitest-config + '@vitest/browser-playwright': + specifier: 4.1.10 + version: 4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) '@vitest/coverage-istanbul': - specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4) + specifier: 4.1.10 + version: 4.1.10(vitest@4.1.10) body-parser: specifier: ^1.20.2 version: 1.20.3 @@ -1686,10 +1686,10 @@ importers: version: 1.15.3 msw: specifier: 2.7.5 - version: 2.7.5(@types/node@22.12.0)(typescript@5.8.3) + version: 2.7.5(@types/node@25.5.0)(typescript@5.8.3) next: specifier: 15.5.8 - version: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + version: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) solid-js: specifier: ^1.9.3 version: 1.9.3 @@ -1706,8 +1706,8 @@ importers: specifier: 1.0.0-beta.9 version: 1.0.0-beta.9(typescript@5.8.3) vitest: - specifier: 3.2.4 - version: 3.2.4(@types/node@22.12.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + specifier: 4.1.10 + version: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) vue: specifier: ^3.4.21 version: 3.5.13(typescript@5.8.3) @@ -1770,8 +1770,8 @@ importers: specifier: ^0.7.1 version: 0.7.1 effect: - specifier: 3.21.0 - version: 3.21.0 + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110 lucide-react: specifier: ^0.469.0 version: 0.469.0(react@19.2.2) @@ -1826,13 +1826,13 @@ importers: dependencies: '@uploadthing/react': specifier: npm:@uploadthing/react@6 - version: 6.8.0(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(react@19.2.2)(solid-js@1.9.3)(uploadthing@6.13.3(@effect/platform@0.96.0(effect@3.21.0))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0))(vue@3.5.13(typescript@5.8.3)) + version: 6.8.0(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(react@19.2.2)(solid-js@1.9.3)(uploadthing@6.13.3(@effect/platform@0.96.0(effect@4.0.0-rc.110))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0))(vue@3.5.13(typescript@5.8.3)) clsx: specifier: 2.1.1 version: 2.1.1 effect: - specifier: 3.21.0 - version: 3.21.0 + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110 next: specifier: canary version: 15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) @@ -1844,7 +1844,7 @@ importers: version: 19.2.2(react@19.2.2) uploadthing: specifier: npm:uploadthing@6 - version: 6.13.3(@effect/platform@0.96.0(effect@3.21.0))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0) + version: 6.13.3(@effect/platform@0.96.0(effect@4.0.0-rc.110))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0) zod: specifier: ^3.24.1 version: 3.25.67 @@ -1923,11 +1923,11 @@ importers: tooling/tsconfig: dependencies: '@effect/language-service': - specifier: 0.84.3 - version: 0.84.3 + specifier: 0.87.2 + version: 0.87.2 effect: - specifier: 3.21.0 - version: 3.21.0 + specifier: 4.0.0-rc.110 + version: 4.0.0-rc.110 typescript: specifier: 5.8.3 version: 5.8.3 @@ -1938,11 +1938,11 @@ importers: specifier: workspace:* version: link:../tsconfig '@vitest/browser': - specifier: 3.2.4 - version: 3.2.4(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.2.4) + specifier: 4.1.10 + version: 4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) '@vitest/coverage-istanbul': - specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4) + specifier: 4.1.10 + version: 4.1.10(vitest@4.1.10) jsonc-parser: specifier: ^3.3.1 version: 3.3.1 @@ -1956,8 +1956,8 @@ importers: specifier: 5.8.3 version: 5.8.3 vitest: - specifier: 3.2.4 - version: 3.2.4(@types/node@25.5.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + specifier: 4.1.10 + version: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) packages: @@ -2161,10 +2161,6 @@ packages: resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.5': - resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} @@ -2318,14 +2314,18 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -2360,6 +2360,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} @@ -3232,11 +3237,18 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + '@bacons/text-decoder@0.0.0': resolution: {integrity: sha512-8KNbnXSHfhZRR1S1IQEdWQNa9HE/ylWRisDdkoCmHiaP53mksnPaxyqUSlwpJ3DyG1xEekRwFDEG+pbCbSsrkQ==} peerDependencies: react-native: '*' + '@blazediff/core@1.9.1': + resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + '@bundled-es-modules/cookie@2.0.1': resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} @@ -3489,78 +3501,39 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@effect/cluster@0.30.2': - resolution: {integrity: sha512-221SsceyBPTGIpt4WRWa6Hqtz4aGiKM7SQ48yWDZ7frdSrwxfd8IdQdU6zcJQei8YlTBYh5PPujO0m1b74625Q==} - peerDependencies: - '@effect/platform': ^0.80.14 - '@effect/rpc': ^0.56.2 - '@effect/sql': ^0.33.14 - effect: ^3.14.14 - - '@effect/experimental@0.44.14': - resolution: {integrity: sha512-soBCnKruHgXPPuxlFmw8DpvS6uuzDi2mytUwamfTttLMo5rydyFF9og6/c8MsUJyx4jadJzufDt2fhsxfsWxnQ==} - peerDependencies: - '@effect/platform': ^0.80.14 - effect: ^3.14.14 - ioredis: ^5 - lmdb: ^3 - peerDependenciesMeta: - ioredis: - optional: true - lmdb: - optional: true - - '@effect/language-service@0.84.3': - resolution: {integrity: sha512-zpxi6rLCwst/cBQd7ElwDvt36Y6Jvz8v6bCLnNiOL6OXvdLmqjOFWyzWZdMh92vvBQA/aVKhfIAAOP3o4wKt0A==} + '@effect/language-service@0.87.2': + resolution: {integrity: sha512-CfiSoaVQO8pZgaMZGw5VvMvRGybsJ2LaSDoLYaqiVGvo/YYPYVR2GzUKY0h1NtIweq/+SQ5XLrvtzPIttWQ0GQ==} hasBin: true - '@effect/platform-node-shared@0.59.0': - resolution: {integrity: sha512-3bq2YKKfLY7UFauZSxqZUneCXoA3SMSls82V+0RKunvRlfPuPQW0hVn6t1RkvEdh0PDoygWG2mZXYQa6Iqgp9A==} + '@effect/platform-node-shared@4.0.0-rc.110': + resolution: {integrity: sha512-P8EZloxS7RtCOSL3VSBPyqSenUm93xLbXf9jkWoy67cibZ2wgZ9nAou9iN8f1i4vzgxUsWtDuy6BEmg67np6Zw==} + engines: {node: '>=18.0.0'} peerDependencies: - '@effect/cluster': ^0.58.0 - '@effect/platform': ^0.96.0 - '@effect/rpc': ^0.75.0 - '@effect/sql': ^0.51.0 - effect: ^3.21.0 + effect: ^4.0.0-rc.110 - '@effect/platform-node@0.106.0': - resolution: {integrity: sha512-mpsJK2jNLVd0jQAjHKBo8j3wdKWznSGvfnKBcAuG/9Rr4mb8bMRZFLXHHT9wUP7EvnZ0tDZJgEDxkC+j+ByRag==} + '@effect/platform-node@4.0.0-rc.110': + resolution: {integrity: sha512-poj6VxTc2kRDowUHgjGXAZL2nWHTyGi/18607jK+pV9A9CH/wqZ4NeYj38rij95j5SiZ3U7Y1iOsk2Vfnr4GEw==} + engines: {node: '>=18.0.0'} peerDependencies: - '@effect/cluster': ^0.58.0 - '@effect/platform': ^0.96.0 - '@effect/rpc': ^0.75.0 - '@effect/sql': ^0.51.0 - effect: ^3.21.0 + effect: ^4.0.0-rc.110 + redis: '>=5.0.0 <7.0.0' '@effect/platform@0.96.0': resolution: {integrity: sha512-U7PLhkVzg7zzrgFvyWATOzD6reL87KG/fcdOxgLWBQ/J5CCU6qdPAVG+0o6o+IxcsLoqGwxs+rFxaFzrdtDV1A==} peerDependencies: effect: ^3.21.0 - '@effect/rpc@0.56.2': - resolution: {integrity: sha512-PY8MfVWUvebAnA04WWnooy6hzv0TA86qs8yS1k53DMsP0CnewdyA7aywmPkcB2ehiHfyNEyA0VYCMbG8jRtL2Q==} - peerDependencies: - '@effect/platform': ^0.80.14 - effect: ^3.14.14 - '@effect/schema@0.68.18': resolution: {integrity: sha512-+knLs36muKsyqIvQTB0itGp5Lwy+5jgEC0G5P8wSsrB6EWGFirS87QjbaFYGbg32l/P51RM+9cPMiAEyICwN6g==} deprecated: this package has been merged into the main effect package peerDependencies: effect: ^3.4.8 - '@effect/sql@0.33.14': - resolution: {integrity: sha512-R00NLgF4/Abwhd4X+Ip4Wq1xQ1VEEgAGSeBgV0SB+Vk6imU7zwo4Qydk9L+IllEbtLV0rfiWEKgCqiBtekKN5w==} - peerDependencies: - '@effect/experimental': ^0.44.14 - '@effect/platform': ^0.80.14 - effect: ^3.14.14 - - '@effect/vitest@0.29.0': - resolution: {integrity: sha512-DvWr1aeEcaZ8mtu8hNVb4e3rEYvGEwQSr7wsNrW53t6nKYjkmjRICcvVEsXUhjoCblRHSxRsRV0TOt0+UmcvaQ==} + '@effect/vitest@4.0.0-rc.110': + resolution: {integrity: sha512-ZvceBAWOPDnLgQgoObxPZOBuRTaRhBUR0K8sT4vfwwnf6Sv92GvCFp+WmfFV31j58Inf2p+wU1C3o9TNC1MZrQ==} peerDependencies: - effect: ^3.21.0 - vitest: ^3.2.0 + effect: ^4.0.0-rc.110 + vitest: '>=4.1.0 <5.0.0' '@egjs/agent@2.4.3': resolution: {integrity: sha512-XvksSENe8wPeFlEVouvrOhKdx8HMniJ3by7sro2uPF3M6QqWwjzVcmvwoPtdjiX8O1lfRoLhQMp1a7NGlVTdIA==} @@ -5608,33 +5581,33 @@ packages: '@mjackson/node-fetch-server@0.2.0': resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': - resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': + resolution: {integrity: sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==} cpu: [arm64] os: [darwin] - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': - resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': + resolution: {integrity: sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==} cpu: [x64] os: [darwin] - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': - resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': + resolution: {integrity: sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==} cpu: [arm64] os: [linux] - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': - resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': + resolution: {integrity: sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==} cpu: [arm] os: [linux] - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': - resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': + resolution: {integrity: sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==} cpu: [x64] os: [linux] - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': - resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': + resolution: {integrity: sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==} cpu: [x64] os: [win32] @@ -5954,10 +5927,6 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opentelemetry/semantic-conventions@1.40.0': - resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} - engines: {node: '>=14'} - '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} @@ -7229,6 +7198,42 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + '@redis/bloom@6.2.1': + resolution: {integrity: sha512-huQgNLaCIZfQ9SeLn4q9124uOUd8HbZDYHwwUzNcRgHqCHiHKl2dDxMqJCeWh8cMqZAoWuHR8XnWbDMIf+o7ag==} + engines: {node: '>= 20.0.0'} + peerDependencies: + '@redis/client': ^6.2.1 + + '@redis/client@6.2.1': + resolution: {integrity: sha512-LzxBY7SIBvvJiyCgcaJZZakE3fJrZZ++i24+EDW9fKpCl68D35uJcKFpZZwCfOoG9WZTbyZlMzMeM0gtOAMU9Q==} + engines: {node: '>= 20.0.0'} + peerDependencies: + '@node-rs/xxhash': ^1.1.0 + '@opentelemetry/api': '>=1 <2' + peerDependenciesMeta: + '@node-rs/xxhash': + optional: true + '@opentelemetry/api': + optional: true + + '@redis/json@6.2.1': + resolution: {integrity: sha512-AFIUJ8Gj0DaaSBHYuSt8+O0oYWM+50OK1c0OmodB7XERIA8+BbyV3O4v76f9iccWasd1/7qjfZTpuzexUaZtrQ==} + engines: {node: '>= 20.0.0'} + peerDependencies: + '@redis/client': ^6.2.1 + + '@redis/search@6.2.1': + resolution: {integrity: sha512-2vfOAOyYFE7UUw3sBBlkqqruBtOUS4HRY5MtW4hp83llrwvtrTE4r22CEqXddlV+54zkLxBE4nmsIJ/dpezQrQ==} + engines: {node: '>= 20.0.0'} + peerDependencies: + '@redis/client': ^6.2.1 + + '@redis/time-series@6.2.1': + resolution: {integrity: sha512-kiYniph04dJOole+L359B6C9E+jYS2uDP7hca6Onj0xF38ZIpyxARO0Iq0W4ZRn1e8Q6vqW00QFZVSMRA/2Ijw==} + engines: {node: '>= 20.0.0'} + peerDependencies: + '@redis/client': ^6.2.1 + '@remirror/core-constants@2.0.2': resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} @@ -8228,20 +8233,10 @@ packages: peerDependencies: vue: ^2.7.0 || ^3.0.0 - '@testing-library/dom@10.4.0': - resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} - engines: {node: '>=18'} - '@testing-library/jest-dom@6.6.3': resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - '@tiptap/core@2.3.2': resolution: {integrity: sha512-4sMpzYuxiG+fYMwPRXy+mLRVU315KEqzQUcBc2FEgSsmw9Kionykmkq3DvEco7rH8r0NdV/l9R49wVEtX54VqQ==} peerDependencies: @@ -8474,9 +8469,6 @@ packages: '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - '@types/aria-query@5.0.4': - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/babel__code-frame@7.0.6': resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} @@ -8674,6 +8666,9 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} @@ -8880,54 +8875,50 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@vitest/browser@3.2.4': - resolution: {integrity: sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==} + '@vitest/browser-playwright@4.1.10': + resolution: {integrity: sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==} peerDependencies: playwright: '*' - safaridriver: '*' - vitest: 3.2.4 - webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 - peerDependenciesMeta: - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true + vitest: 4.1.10 + + '@vitest/browser@4.1.10': + resolution: {integrity: sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==} + peerDependencies: + vitest: 4.1.10 - '@vitest/coverage-istanbul@3.2.4': - resolution: {integrity: sha512-IDlpuFJiWU9rhcKLkpzj8mFu/lpe64gVgnV15ZOrYx1iFzxxrxCzbExiUEKtwwXRvEiEMUS6iZeYgnMxgbqbxQ==} + '@vitest/coverage-istanbul@4.1.10': + resolution: {integrity: sha512-AyNJ5pQRFqCX7pwB9PSTmoVKPaZ4H5IEVJfJsT+q1DYkXvZMEFYgJlyk5sfStmt9rVYRyYYRRsuBeImCOc39ww==} peerDependencies: - vitest: 3.2.4 + vitest: 4.1.10 - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} '@volar/kit@2.4.11': resolution: {integrity: sha512-ups5RKbMzMCr6RKafcCqDRnJhJDNWqo2vfekwOAj6psZ15v5TlcQFQAyokQJ3wZxVkzxrQM+TqTRDENfQEXpmA==} @@ -9394,9 +9385,6 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -9455,10 +9443,6 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - ast-kit@1.3.2: resolution: {integrity: sha512-gdvX700WVC6sHCJQ7bJGfDvtuKAh6Sa6weIZROxfzUZKP7BjvB8y0SMlM/o4omSQ3L60PQSJROBJsb0vEViVnA==} engines: {node: '>=16.14.0'} @@ -9901,9 +9885,9 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -9942,10 +9926,6 @@ packages: charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -10594,10 +10574,6 @@ packages: babel-plugin-macros: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} @@ -10803,9 +10779,6 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} @@ -10970,12 +10943,12 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@3.21.0: - resolution: {integrity: sha512-PPN80qRokCd1f015IANNhrwOnLO7GrrMQfk4/lnZRE/8j7UPWrNNjPV0uBrZutI/nHzernbW+J0hdqQysHiSnQ==} - effect@3.4.8: resolution: {integrity: sha512-qOQNrSSN3ITuAtARtN2Ldq6E5f42splY9VV18LqpKOXMwQCCEWkXdns4by3D2CJnDXQD2KCE0iGcRR2KowiQIA==} + effect@4.0.0-rc.110: + resolution: {integrity: sha512-ega6FTJ8CS2of7tHZiADvgyJyV999Q6tZ9juE56V81O0jw6flRwydaPNtyfvP2a5LL9PZrse8A1jnNUD5sWVHg==} + electron-to-chromium@1.5.331: resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==} @@ -11114,6 +11087,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -11467,8 +11443,8 @@ packages: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} expo-asset@10.0.10: @@ -11692,6 +11668,10 @@ packages: resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} engines: {node: '>=8.0.0'} + fast-check@4.9.0: + resolution: {integrity: sha512-7ms6T7SybUev/PQITciI0yLM2pOSFy5zpG8Ty7tQofcVaQUvrMXp6CBwqF6fThLCLOrfBtuHAtwq6Yu4XPCllg==} + engines: {node: '>=12.17.0'} + fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -11779,6 +11759,15 @@ packages: picomatch: optional: true + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} @@ -12986,14 +12975,14 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - istanbul-reports@3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} @@ -13634,9 +13623,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.4: - resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -13666,10 +13652,6 @@ packages: resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} engines: {node: '>=12'} - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - magic-regexp@0.8.0: resolution: {integrity: sha512-lOSLWdE156csDYwCTIGiAymOLN7Epu/TU5e/oAnISZfU6qP+pgjkE+xbVjVn3yLPKN8n1G2yIAYTAM5KRk6/ow==} @@ -13683,12 +13665,18 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.2.11: resolution: {integrity: sha512-6saXbRDA1HMkqbsvHOU6HBjCVgZT460qheRkLhJQHWAbhXoWESI3Kn/dGGXyKs15FFKR85jsUqFx2sMK0wy/5g==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.4: + resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -14367,13 +14355,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msgpackr-extract@3.0.3: - resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + msgpackr-extract@3.0.4: + resolution: {integrity: sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==} hasBin: true msgpackr@1.11.9: resolution: {integrity: sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==} + msgpackr@2.0.4: + resolution: {integrity: sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA==} + msw@2.7.5: resolution: {integrity: sha512-00MyTlY3TJutBa5kiU+jWiz2z5pNJDYHn2TgPkGkh92kMmNH43RqvMXd8y/7HxNn8RjzUbvZWYZjcS36fdb6sw==} engines: {node: '>=18'} @@ -14797,6 +14788,10 @@ packages: obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + obug@2.1.4: + resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} + engines: {node: '>=12.20.0'} + ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -15149,10 +15144,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} @@ -15247,6 +15238,10 @@ packages: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -15855,10 +15850,6 @@ packages: resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} engines: {node: '>= 10'} - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16037,6 +16028,9 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pure-rand@8.4.1: + resolution: {integrity: sha512-c58R2+SPFcSIPXoU834QN/KPDDOSd8sXcSrqf6e83Me6Rrp1EYkxukkjXMVrKvKaADs1SOyNkWdfvLf6zY8qLQ==} + qrcode-terminal@0.11.0: resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} hasBin: true @@ -16404,6 +16398,10 @@ packages: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} + redis@6.2.1: + resolution: {integrity: sha512-Z9VHtgYs48PiQC77X9O2Er8Hj4T+5BtFjT91/vi5Is1D04N72cA946ZslM1ImJw8ZctFBZWAVjM7S5wJNeHMpg==} + engines: {node: '>= 20.0.0'} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -17015,6 +17013,10 @@ packages: resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -17195,6 +17197,9 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + stoppable@1.1.0: resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} engines: {node: '>=4', npm: '>=6'} @@ -17576,10 +17581,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -17623,6 +17624,10 @@ packages: tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} + engines: {node: '>=18'} + tinyglobby@0.2.10: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} @@ -17631,16 +17636,12 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyrainbow@3.1.1: + resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} tippy.js@6.3.7: @@ -18013,6 +18014,10 @@ packages: resolution: {integrity: sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==} engines: {node: '>=20.18.1'} + undici@8.7.0: + resolution: {integrity: sha512-N7iQtfyLhIMOFgQubvmLV26svHpO0bqKnAiWotTQCVKCmWrcGbBotPuW1x+xwYZ2VHdSTVUfPQQnlEt1/LouTQ==} + engines: {node: '>=22.19.0'} + unenv-nightly@2.0.0-20241204-140205-a5d5190: resolution: {integrity: sha512-jpmAytLeiiW01pl5bhVn9wYJ4vtiLdhGe10oXlJBuQEX8mxjxO8BlEXGHU4vr4yEikjFP1wsomTHt/CLU8kUwg==} @@ -18375,14 +18380,17 @@ packages: uuid@7.0.3: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uvu@0.5.6: @@ -18465,11 +18473,6 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite-plugin-checker@0.8.0: resolution: {integrity: sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g==} engines: {node: '>=14.16'} @@ -18616,42 +18619,53 @@ packages: vite: optional: true - vitest-browser-react@0.3.0: - resolution: {integrity: sha512-dk8T3GHhwrmCJLqDer1A2NB8MlIGsUb9Wr4/iMpbrwz4sBCh1PjV0SkZ9BYmoBrJ4j/Tx8qxzCXFXnbE2IbWzg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest-browser-react@2.2.0: + resolution: {integrity: sha512-oY3KM6305kwJMa6nHo92vVtkOsih7mjEf12dLKuphaF+9ywWPEc+qanIBd394SZ6m5LadVEaG6dicvvizOzmjA==} peerDependencies: '@types/react': ^18.0.0 || ^19.0.0 '@types/react-dom': ^18.0.0 || ^19.0.0 - '@vitest/browser': ^2.1.0 || ^3.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - vitest: ^2.1.0 || ^3.0.0 + vitest: ^4.0.0 peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': optional: true '@vitest/ui': optional: true @@ -19075,6 +19089,18 @@ packages: utf-8-validate: optional: true + ws@8.21.3: + resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xcode@3.0.1: resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==} engines: {node: '>=10.0.0'} @@ -19140,6 +19166,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -19389,7 +19420,7 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@antfu/utils@0.7.10': {} @@ -19457,9 +19488,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@9.0.0(astro@5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.7.0))': + '@astrojs/node@9.0.0(astro@5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.9.0))': dependencies: - astro: 5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.7.0) + astro: 5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.9.0) send: 1.2.0 server-destroy: 1.0.1 transitivePeerDependencies: @@ -19469,15 +19500,15 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/react@4.1.2(@types/node@25.5.0)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.4.2)(lightningcss@1.29.3)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)': + '@astrojs/react@4.1.2(@types/node@25.5.0)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.4.2)(lightningcss@1.29.3)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)': dependencies: '@types/react': 19.2.7 '@types/react-dom': 19.2.3(@types/react@19.2.7) - '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) react: 19.2.2 react-dom: 19.2.2(react@19.2.2) ultrahtml: 1.6.0 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -19495,7 +19526,7 @@ snapshots: '@astrojs/telemetry@3.2.0': dependencies: ci-info: 4.1.0 - debug: 4.4.1 + debug: 4.4.3 dlv: 1.1.3 dset: 3.1.4 is-docker: 3.0.0 @@ -19540,13 +19571,13 @@ snapshots: '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -19556,8 +19587,6 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.27.5': {} - '@babel/compat-data@7.29.0': {} '@babel/core@7.27.4': @@ -19587,10 +19616,10 @@ snapshots: '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.8 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -19602,7 +19631,7 @@ snapshots: '@babel/generator@7.2.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 jsesc: 2.5.2 lodash: 4.17.21 source-map: 0.5.7 @@ -19610,10 +19639,10 @@ snapshots: '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/generator@7.29.1': @@ -19626,13 +19655,13 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.27.5 + '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.4 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -19640,7 +19669,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.4 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -19652,7 +19681,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -19665,7 +19694,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -19727,9 +19756,9 @@ snapshots: '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -19738,9 +19767,9 @@ snapshots: '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -19770,32 +19799,32 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 '@babel/helper-globals@7.28.0': {} '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.28.5': dependencies: '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -19809,18 +19838,18 @@ snapshots: '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-transforms@7.27.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -19828,7 +19857,7 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -19837,14 +19866,14 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 '@babel/helper-plugin-utils@7.27.1': {} @@ -19855,7 +19884,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -19864,7 +19893,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -19891,7 +19920,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -19900,7 +19929,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -19931,17 +19960,19 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -19949,35 +19980,39 @@ snapshots: dependencies: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helpers@7.27.6': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 '@babel/highlight@7.25.9': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.29.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 '@babel/parser@7.28.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.0 '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.8': + dependencies: + '@babel/types': 7.29.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -20093,6 +20128,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -20155,18 +20199,18 @@ snapshots: '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.27.4)': dependencies: - '@babel/compat-data': 7.27.5 + '@babel/compat-data': 7.29.0 '@babel/core': 7.27.4 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.4) '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.4) '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.29.0)': dependencies: - '@babel/compat-data': 7.27.5 + '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.29.0) @@ -20224,6 +20268,11 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -20279,9 +20328,9 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.27.4)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.27.4)': @@ -20294,9 +20343,9 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.4)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': @@ -20442,7 +20491,7 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.27.4) transitivePeerDependencies: @@ -20451,7 +20500,7 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.29.0) transitivePeerDependencies: @@ -20541,10 +20590,10 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -20553,10 +20602,10 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -20589,13 +20638,13 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.27.2 + '@babel/template': 7.28.6 '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.27.2 + '@babel/template': 7.28.6 '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.27.4)': dependencies: @@ -20741,18 +20790,18 @@ snapshots: '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -20877,7 +20926,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -20887,7 +20936,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -20970,7 +21019,7 @@ snapshots: '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.4) @@ -21207,10 +21256,10 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -21218,10 +21267,10 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -21232,7 +21281,7 @@ snapshots: '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -21283,7 +21332,7 @@ snapshots: '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.27.4) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.27.4) @@ -21295,7 +21344,7 @@ snapshots: '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.29.0) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.29.0) @@ -21654,25 +21703,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-flow@7.25.9(@babel/core@7.27.4)': + '@babel/preset-flow@7.25.9(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.27.4) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.29.0) '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 esutils: 2.0.3 '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 esutils: 2.0.3 '@babel/preset-react@7.26.3(@babel/core@7.27.4)': @@ -21710,6 +21759,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-typescript@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -21721,9 +21781,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/register@7.25.9(@babel/core@7.27.4)': + '@babel/register@7.25.9(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -21740,9 +21800,9 @@ snapshots: '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@babel/template@7.28.6': dependencies: @@ -21752,12 +21812,12 @@ snapshots: '@babel/traverse@7.27.4': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.1 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -21776,23 +21836,30 @@ snapshots: '@babel/types@7.27.6': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bacons/text-decoder@0.0.0(react-native@0.74.6(@babel/core@7.27.4)(@babel/preset-env@7.26.0(@babel/core@7.27.4))(@types/react@19.2.7)(encoding@0.1.13)(react@19.2.2))': dependencies: react-native: 0.74.6(@babel/core@7.27.4)(@babel/preset-env@7.26.0(@babel/core@7.27.4))(@types/react@19.2.7)(encoding@0.1.13)(react@19.2.2) + '@blazediff/core@1.9.1': {} + '@bundled-es-modules/cookie@2.0.1': dependencies: cookie: 0.7.2 @@ -21824,7 +21891,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 '@changesets/assemble-release-plan@6.0.5': dependencies: @@ -21833,7 +21900,7 @@ snapshots: '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.2 + semver: 7.7.4 '@changesets/changelog-git@0.2.0': dependencies: @@ -21897,7 +21964,7 @@ snapshots: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.2 + semver: 7.7.4 '@changesets/get-github-info@0.6.0(encoding@0.1.13)': dependencies: @@ -21993,7 +22060,7 @@ snapshots: '@clerk/shared': 2.20.10(react-dom@19.2.2(react@19.2.2))(react@19.2.2) '@clerk/types': 4.41.1 crypto-js: 4.2.0 - next: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + next: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: 19.2.2 react-dom: 19.2.2(react@19.2.2) server-only: 0.0.1 @@ -22205,81 +22272,45 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@effect/cluster@0.30.2(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0)': - dependencies: - '@effect/platform': 0.96.0(effect@3.21.0) - '@effect/rpc': 0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0) - '@effect/sql': 0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0) - effect: 3.21.0 + '@effect/language-service@0.87.2': {} - '@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1)': + '@effect/platform-node-shared@4.0.0-rc.110(effect@4.0.0-rc.110)': dependencies: - '@effect/platform': 0.96.0(effect@3.21.0) - effect: 3.21.0 - uuid: 11.1.0 - optionalDependencies: - ioredis: 5.6.1 - - '@effect/language-service@0.84.3': {} - - '@effect/platform-node-shared@0.59.0(@effect/cluster@0.30.2(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0))(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0)': - dependencies: - '@effect/cluster': 0.30.2(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0) - '@effect/platform': 0.96.0(effect@3.21.0) - '@effect/rpc': 0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0) - '@effect/sql': 0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0) - '@parcel/watcher': 2.5.6 - effect: 3.21.0 - multipasta: 0.2.7 - ws: 8.20.0 + '@types/ws': 8.18.1 + effect: 4.0.0-rc.110 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform-node@0.106.0(@effect/cluster@0.30.2(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0))(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0)': + '@effect/platform-node@4.0.0-rc.110(effect@4.0.0-rc.110)(redis@6.2.1)': dependencies: - '@effect/cluster': 0.30.2(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0) - '@effect/platform': 0.96.0(effect@3.21.0) - '@effect/platform-node-shared': 0.59.0(@effect/cluster@0.30.2(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0))(@effect/platform@0.96.0(effect@3.21.0))(@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0))(effect@3.21.0) - '@effect/rpc': 0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0) - '@effect/sql': 0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0) - effect: 3.21.0 - mime: 3.0.0 - undici: 7.24.7 - ws: 8.20.0 + '@effect/platform-node-shared': 4.0.0-rc.110(effect@4.0.0-rc.110) + effect: 4.0.0-rc.110 + mime: 4.1.0 + redis: 6.2.1 + undici: 8.7.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform@0.96.0(effect@3.21.0)': + '@effect/platform@0.96.0(effect@4.0.0-rc.110)': dependencies: - effect: 3.21.0 + effect: 4.0.0-rc.110 find-my-way-ts: 0.1.6 msgpackr: 1.11.9 multipasta: 0.2.7 - - '@effect/rpc@0.56.2(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)': - dependencies: - '@effect/platform': 0.96.0(effect@3.21.0) - effect: 3.21.0 + optional: true '@effect/schema@0.68.18(effect@3.4.8)': dependencies: effect: 3.4.8 fast-check: 3.23.2 - '@effect/sql@0.33.14(@effect/experimental@0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1))(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)': - dependencies: - '@effect/experimental': 0.44.14(@effect/platform@0.96.0(effect@3.21.0))(effect@3.21.0)(ioredis@5.6.1) - '@effect/platform': 0.96.0(effect@3.21.0) - '@opentelemetry/semantic-conventions': 1.40.0 - effect: 3.21.0 - uuid: 11.1.0 - - '@effect/vitest@0.29.0(effect@3.21.0)(vitest@3.2.4)': + '@effect/vitest@4.0.0-rc.110(effect@4.0.0-rc.110)(vitest@4.1.10)': dependencies: - effect: 3.21.0 - vitest: 3.2.4(@types/node@25.5.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + effect: 4.0.0-rc.110 + vitest: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@egjs/agent@2.4.3': {} @@ -22935,7 +22966,7 @@ snapshots: '@eslint/config-array@0.20.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -22963,7 +22994,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1 + debug: 4.4.3 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -23019,7 +23050,7 @@ snapshots: chalk: 4.1.2 ci-info: 3.9.0 connect: 3.7.0 - debug: 4.4.1 + debug: 4.4.3 env-editor: 0.4.2 fast-glob: 3.3.3 find-yarn-workspace-root: 2.0.0 @@ -23054,7 +23085,7 @@ snapshots: resolve: 1.22.10 resolve-from: 5.0.0 resolve.exports: 2.0.3 - semver: 7.7.2 + semver: 7.7.4 send: 0.18.0 slugify: 1.6.6 source-map-support: 0.5.21 @@ -23147,7 +23178,7 @@ snapshots: undici: 6.24.1 unique-string: 2.0.0 wrap-ansi: 7.0.0 - ws: 8.20.0 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - encoding @@ -23167,12 +23198,12 @@ snapshots: '@expo/plist': 0.1.3 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.3 find-up: 5.0.0 getenv: 1.0.0 glob: 7.1.6 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 @@ -23231,7 +23262,7 @@ snapshots: glob: 7.1.6 require-from-string: 2.0.2 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 slugify: 1.6.6 sucrase: 3.34.0 transitivePeerDependencies: @@ -23306,7 +23337,7 @@ snapshots: node-fetch: 2.7.0(encoding@0.1.13) parse-png: 2.1.0 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 tempy: 0.3.0 transitivePeerDependencies: - encoding @@ -23354,16 +23385,16 @@ snapshots: '@expo/metro-config@0.18.11': dependencies: - '@babel/core': 7.27.4 - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@expo/config': 9.0.4 '@expo/env': 0.3.0 '@expo/json-file': 8.3.3 '@expo/spawn-async': 1.7.2 chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.3 find-yarn-workspace-root: 2.0.0 fs-extra: 9.1.0 getenv: 1.0.0 @@ -23379,8 +23410,8 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@expo/config': 10.0.11 '@expo/env': 0.4.2 '@expo/json-file': 9.0.2 @@ -23882,7 +23913,6 @@ snapshots: '@inquirer/core': 10.1.2(@types/node@25.5.0) '@inquirer/type': 3.0.2(@types/node@25.5.0) '@types/node': 25.5.0 - optional: true '@inquirer/core@10.1.2(@types/node@22.12.0)': dependencies: @@ -23911,7 +23941,6 @@ snapshots: yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' - optional: true '@inquirer/figures@1.0.9': {} @@ -23922,7 +23951,6 @@ snapshots: '@inquirer/type@3.0.2(@types/node@25.5.0)': dependencies: '@types/node': 25.5.0 - optional: true '@internationalized/date@3.7.0': dependencies: @@ -23967,14 +23995,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.12.0 + '@types/node': 22.19.15 jest-mock: 29.7.0 '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.12.0 + '@types/node': 22.19.15 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -23993,7 +24021,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.12.0 + '@types/node': 22.19.15 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -24002,14 +24030,14 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.12.0 + '@types/node': 22.19.15 '@types/yargs': 17.0.32 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': dependencies: @@ -24029,7 +24057,7 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -24047,14 +24075,14 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 '@jspm/core@2.0.1': {} '@koa/router@12.0.2': dependencies: - debug: 4.4.1 + debug: 4.4.3 http-errors: 2.0.0 koa-compose: 4.1.0 methods: 1.1.2 @@ -24064,7 +24092,7 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -24152,7 +24180,7 @@ snapshots: '@libsql/isomorphic-ws@0.1.5': dependencies: '@types/ws': 8.5.14 - ws: 8.18.2 + ws: 8.21.3 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -24227,7 +24255,7 @@ snapshots: https-proxy-agent: 7.0.6 node-fetch: 2.7.0(encoding@0.1.13) nopt: 8.0.0 - semver: 7.7.2 + semver: 7.7.4 tar: 7.4.3 transitivePeerDependencies: - encoding @@ -24302,22 +24330,22 @@ snapshots: '@mjackson/node-fetch-server@0.2.0': {} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': optional: true - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': optional: true '@mswjs/interceptors@0.37.4': @@ -24388,7 +24416,7 @@ snapshots: '@netlify/zip-it-and-ship-it@12.1.4(encoding@0.1.13)(rollup@4.44.0)': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.8 '@babel/types': 7.27.6 '@netlify/binary-info': 1.0.0 '@netlify/serverless-functions-api': 2.1.2 @@ -24414,7 +24442,7 @@ snapshots: precinct: 12.2.0 require-package-name: 2.0.1 resolve: 2.0.0-next.5 - semver: 7.7.2 + semver: 7.7.4 tmp-promise: 3.0.3 toml: 3.0.0 unixify: 1.0.0 @@ -24512,7 +24540,7 @@ snapshots: '@npmcli/fs@3.1.1': dependencies: - semver: 7.7.2 + semver: 7.7.4 '@npmcli/git@4.1.0': dependencies: @@ -24522,7 +24550,7 @@ snapshots: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.7.2 + semver: 7.7.4 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -24535,7 +24563,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 normalize-package-data: 5.0.0 proc-log: 3.0.0 - semver: 7.7.2 + semver: 7.7.4 transitivePeerDependencies: - bluebird @@ -24545,23 +24573,23 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@3.29.5) '@nuxt/schema': 3.15.0(magicast@0.3.5)(rollup@3.29.5) execa: 7.2.0 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - magicast - rollup - supports-color - '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@4.44.0) '@nuxt/schema': 3.15.0(magicast@0.3.5)(rollup@4.44.0) execa: 7.2.0 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - magicast - rollup @@ -24578,15 +24606,15 @@ snapshots: pkg-types: 1.3.1 prompts: 2.4.2 rc9: 2.1.2 - semver: 7.7.2 + semver: 7.7.4 - '@nuxt/devtools@1.7.0(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': + '@nuxt/devtools@1.7.0(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3))': dependencies: '@antfu/utils': 0.7.10 - '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@nuxt/devtools-wizard': 1.7.0 '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@3.29.5) - '@vue/devtools-core': 7.6.8(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + '@vue/devtools-core': 7.6.8(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) '@vue/devtools-kit': 7.6.8 birpc: 0.2.19 consola: 3.4.2 @@ -24615,9 +24643,9 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.14 unimport: 3.14.5(rollup@3.29.5) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@3.29.5))(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - vite-plugin-vue-inspector: 5.3.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@3.29.5))(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + vite-plugin-vue-inspector: 5.3.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) which: 3.0.1 ws: 8.18.2 transitivePeerDependencies: @@ -24627,13 +24655,13 @@ snapshots: - utf-8-validate - vue - '@nuxt/devtools@1.7.0(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': + '@nuxt/devtools@1.7.0(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3))': dependencies: '@antfu/utils': 0.7.10 - '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@nuxt/devtools-wizard': 1.7.0 '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@4.44.0) - '@vue/devtools-core': 7.6.8(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + '@vue/devtools-core': 7.6.8(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) '@vue/devtools-kit': 7.6.8 birpc: 0.2.19 consola: 3.4.2 @@ -24662,9 +24690,9 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.14 unimport: 3.14.5(rollup@4.44.0) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@4.44.0))(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - vite-plugin-vue-inspector: 5.3.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@4.44.0))(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + vite-plugin-vue-inspector: 5.3.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) which: 3.0.1 ws: 8.18.2 transitivePeerDependencies: @@ -24828,16 +24856,16 @@ snapshots: - rollup - supports-color - '@nuxt/vite-builder@3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.7.0)': + '@nuxt/vite-builder@3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.9.0)': dependencies: '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@3.29.5) '@rollup/plugin-replace': 6.0.2(rollup@3.29.5) - '@vitejs/plugin-vue': 5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) - '@vitejs/plugin-vue-jsx': 4.1.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + '@vitejs/plugin-vue': 5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) + '@vitejs/plugin-vue-jsx': 4.1.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) autoprefixer: 10.4.20(postcss@8.4.49) consola: 3.4.2 cssnano: 7.0.6(postcss@8.4.49) - defu: 6.1.4 + defu: 6.1.6 esbuild: 0.24.2 escape-string-regexp: 5.0.0 externality: 1.0.2 @@ -24847,19 +24875,19 @@ snapshots: knitwork: 1.2.0 magic-string: 0.30.17 mlly: 1.7.4 - ohash: 1.1.4 + ohash: 1.1.6 pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.3.1 postcss: 8.4.49 rollup-plugin-visualizer: 5.14.0(rolldown@1.0.0-beta.32)(rollup@3.29.5) std-env: 3.9.0 - ufo: 1.6.1 + ufo: 1.6.3 unenv: 1.10.0 unplugin: 2.3.5 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vite-node: 2.1.8(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) - vite-plugin-checker: 0.8.0(eslint@9.25.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vite-node: 2.1.8(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) + vite-plugin-checker: 0.8.0(eslint@9.25.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) vue: 3.5.13(typescript@5.8.3) vue-bundle-renderer: 2.1.1 transitivePeerDependencies: @@ -24887,16 +24915,16 @@ snapshots: - vue-tsc - yaml - '@nuxt/vite-builder@3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.7.0)': + '@nuxt/vite-builder@3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.9.0)': dependencies: '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@4.44.0) '@rollup/plugin-replace': 6.0.2(rollup@4.44.0) - '@vitejs/plugin-vue': 5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) - '@vitejs/plugin-vue-jsx': 4.1.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + '@vitejs/plugin-vue': 5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) + '@vitejs/plugin-vue-jsx': 4.1.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) autoprefixer: 10.4.20(postcss@8.4.49) consola: 3.4.2 cssnano: 7.0.6(postcss@8.4.49) - defu: 6.1.4 + defu: 6.1.6 esbuild: 0.24.2 escape-string-regexp: 5.0.0 externality: 1.0.2 @@ -24906,19 +24934,19 @@ snapshots: knitwork: 1.2.0 magic-string: 0.30.17 mlly: 1.7.4 - ohash: 1.1.4 + ohash: 1.1.6 pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.3.1 postcss: 8.4.49 rollup-plugin-visualizer: 5.14.0(rolldown@1.0.0-beta.32)(rollup@4.44.0) std-env: 3.9.0 - ufo: 1.6.1 + ufo: 1.6.3 unenv: 1.10.0 unplugin: 2.3.5 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vite-node: 2.1.8(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) - vite-plugin-checker: 0.8.0(eslint@9.25.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vite-node: 2.1.8(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) + vite-plugin-checker: 0.8.0(eslint@9.25.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) vue: 3.5.13(typescript@5.8.3) vue-bundle-renderer: 2.1.1 transitivePeerDependencies: @@ -25072,8 +25100,6 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opentelemetry/semantic-conventions@1.40.0': {} - '@oslojs/encoding@1.1.0': {} '@oxc-project/runtime@0.81.0': {} @@ -26182,7 +26208,7 @@ snapshots: hermes-profile-transformer: 0.0.6 node-stream-zip: 1.15.0 ora: 5.4.1 - semver: 7.7.2 + semver: 7.7.4 strip-ansi: 5.2.0 wcwidth: 1.0.1 yaml: 2.7.0 @@ -26253,7 +26279,7 @@ snapshots: node-fetch: 2.7.0(encoding@0.1.13) open: 6.4.0 ora: 5.4.1 - semver: 7.7.2 + semver: 7.7.4 shell-quote: 1.8.2 sudo-prompt: 9.2.1 transitivePeerDependencies: @@ -26281,7 +26307,7 @@ snapshots: fs-extra: 8.1.0 graceful-fs: 4.2.11 prompts: 2.4.2 - semver: 7.7.2 + semver: 7.7.4 transitivePeerDependencies: - bufferutil - encoding @@ -26359,7 +26385,7 @@ snapshots: '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.27.4) '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.27.4) - '@babel/template': 7.27.2 + '@babel/template': 7.28.6 '@react-native/babel-plugin-codegen': 0.74.87(@babel/preset-env@7.26.0(@babel/core@7.27.4)) babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.27.4) react-refresh: 0.14.2 @@ -26408,7 +26434,7 @@ snapshots: '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.27.4) '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.27.4) - '@babel/template': 7.27.2 + '@babel/template': 7.28.6 '@react-native/babel-plugin-codegen': 0.74.88(@babel/preset-env@7.26.0(@babel/core@7.27.4)) babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.27.4) react-refresh: 0.14.2 @@ -26457,7 +26483,7 @@ snapshots: '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.29.0) - '@babel/template': 7.27.2 + '@babel/template': 7.28.6 '@react-native/babel-plugin-codegen': 0.74.88(@babel/preset-env@7.26.0(@babel/core@7.29.0)) babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0) react-refresh: 0.14.2 @@ -26518,7 +26544,7 @@ snapshots: '@react-native/codegen@0.74.87(@babel/preset-env@7.26.0(@babel/core@7.27.4))': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.8 '@babel/preset-env': 7.26.0(@babel/core@7.27.4) glob: 7.2.3 hermes-parser: 0.19.1 @@ -26531,7 +26557,7 @@ snapshots: '@react-native/codegen@0.74.88(@babel/preset-env@7.26.0(@babel/core@7.27.4))': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.2 '@babel/preset-env': 7.26.0(@babel/core@7.27.4) glob: 7.2.3 hermes-parser: 0.19.1 @@ -26545,7 +26571,7 @@ snapshots: '@react-native/codegen@0.74.88(@babel/preset-env@7.26.0(@babel/core@7.29.0))': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.2 '@babel/preset-env': 7.26.0(@babel/core@7.29.0) glob: 7.2.3 hermes-parser: 0.19.1 @@ -26559,7 +26585,7 @@ snapshots: '@react-native/codegen@0.76.9(@babel/preset-env@7.26.0(@babel/core@7.29.0))': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.8 '@babel/preset-env': 7.26.0(@babel/core@7.29.0) glob: 7.2.3 hermes-parser: 0.23.1 @@ -26780,7 +26806,7 @@ snapshots: dependencies: nanoid: 3.3.8 - '@react-router/dev@7.1.3(@react-router/serve@7.1.3(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(typescript@5.8.3))(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0))(yaml@2.7.0)': + '@react-router/dev@7.1.3(@react-router/serve@7.1.3(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(typescript@5.8.3))(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0))(yaml@2.9.0)': dependencies: '@babel/core': 7.27.4 '@babel/generator': 7.28.3 @@ -26811,8 +26837,8 @@ snapshots: semver: 7.7.2 set-cookie-parser: 2.7.1 valibot: 0.41.0(typescript@5.8.3) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vite-node: 3.0.0-beta.2(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vite-node: 3.0.0-beta.2(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) optionalDependencies: '@react-router/serve': 7.1.3(react-router@7.1.3(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(typescript@5.8.3) typescript: 5.8.3 @@ -26874,9 +26900,29 @@ snapshots: dependencies: react: 19.2.2 + '@redis/bloom@6.2.1(@redis/client@6.2.1)': + dependencies: + '@redis/client': 6.2.1 + + '@redis/client@6.2.1': + dependencies: + cluster-key-slot: 1.1.2 + + '@redis/json@6.2.1(@redis/client@6.2.1)': + dependencies: + '@redis/client': 6.2.1 + + '@redis/search@6.2.1(@redis/client@6.2.1)': + dependencies: + '@redis/client': 6.2.1 + + '@redis/time-series@6.2.1(@redis/client@6.2.1)': + dependencies: + '@redis/client': 6.2.1 + '@remirror/core-constants@2.0.2': {} - '@remix-run/dev@2.15.2(@remix-run/react@2.15.2(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(typescript@5.8.3))(@remix-run/serve@2.15.2(typescript@5.8.3))(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0))': + '@remix-run/dev@2.15.2(@remix-run/react@2.15.2(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(typescript@5.8.3))(@remix-run/serve@2.15.2(typescript@5.8.3))(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0))': dependencies: '@babel/core': 7.27.4 '@babel/generator': 7.28.3 @@ -26893,7 +26939,7 @@ snapshots: '@remix-run/router': 1.21.0 '@remix-run/server-runtime': 2.15.2(typescript@5.8.3) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) + '@vanilla-extract/integration': 6.5.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -26932,12 +26978,12 @@ snapshots: tar-fs: 2.1.2 tsconfig-paths: 4.2.0 valibot: 0.41.0(typescript@5.8.3) - vite-node: 1.6.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) + vite-node: 1.6.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) ws: 7.5.10 optionalDependencies: '@remix-run/serve': 2.15.2(typescript@5.8.3) typescript: 5.8.3 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) wrangler: 3.99.0(@cloudflare/workers-types@4.20241230.0) transitivePeerDependencies: - '@types/node' @@ -27120,7 +27166,7 @@ snapshots: estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: rollup: 3.29.5 @@ -27131,7 +27177,7 @@ snapshots: estree-walker: 2.0.2 fdir: 6.4.4(picomatch@4.0.4) is-reference: 1.2.1 - magic-string: 0.30.17 + magic-string: 0.30.21 picomatch: 4.0.4 optionalDependencies: rollup: 4.44.0 @@ -27140,7 +27186,7 @@ snapshots: dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.44.0) estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: rollup: 4.44.0 @@ -27179,21 +27225,21 @@ snapshots: '@rollup/plugin-replace@5.0.5(rollup@3.29.5)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@3.29.5) - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: rollup: 3.29.5 '@rollup/plugin-replace@6.0.2(rollup@3.29.5)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@3.29.5) - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: rollup: 3.29.5 '@rollup/plugin-replace@6.0.2(rollup@4.44.0)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.44.0) - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: rollup: 4.44.0 @@ -27667,11 +27713,11 @@ snapshots: dependencies: solid-js: 1.9.3 - '@solidjs/start@1.0.10(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@solidjs/start@1.0.10(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@vinxi/plugin-directives': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0)) - '@vinxi/server-components': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0)) - '@vinxi/server-functions': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0)) + '@vinxi/plugin-directives': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0)) + '@vinxi/server-components': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0)) + '@vinxi/server-functions': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0)) defu: 6.1.4 error-stack-parser: 2.1.4 html-to-image: 1.11.11 @@ -27682,7 +27728,7 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.0.6(solid-js@1.9.3) tinyglobby: 0.2.14 - vite-plugin-solid: 2.11.0(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite-plugin-solid: 2.11.0(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js @@ -27696,14 +27742,14 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))': + '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))': dependencies: - '@sveltejs/kit': 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@sveltejs/kit': 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) import-meta-resolve: 4.1.0 - '@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 @@ -27717,7 +27763,7 @@ snapshots: sirv: 3.0.1 svelte: 5.16.1 tiny-glob: 0.2.9 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) '@sveltejs/package@2.3.7(svelte@5.16.1)(typescript@5.8.3)': dependencies: @@ -27730,25 +27776,25 @@ snapshots: transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) debug: 4.4.1 svelte: 5.16.1 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(svelte@5.16.1)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) debug: 4.4.1 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 svelte: 5.16.1 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vitefu: 1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vitefu: 1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) transitivePeerDependencies: - supports-color @@ -27953,16 +27999,16 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.17 - '@tanstack/directive-functions-plugin@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@tanstack/directive-functions-plugin@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: '@babel/code-frame': 7.26.2 - '@babel/core': 7.27.4 - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.8 '@tanstack/router-utils': 1.121.21 babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -27998,11 +28044,11 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-plugin@1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1)': + '@tanstack/react-start-plugin@1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1)': dependencies: - '@tanstack/start-plugin-core': 1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1) - '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + '@tanstack/start-plugin-core': 1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1) + '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) zod: 3.25.67 transitivePeerDependencies: - '@azure/app-configuration' @@ -28048,17 +28094,17 @@ snapshots: react: 19.2.2 react-dom: 19.2.2(react@19.2.2) - '@tanstack/react-start@1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(encoding@0.1.13)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1)': + '@tanstack/react-start@1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(encoding@0.1.13)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1)': dependencies: '@tanstack/react-start-client': 1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2) - '@tanstack/react-start-plugin': 1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1) + '@tanstack/react-start-plugin': 1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1) '@tanstack/react-start-server': 1.121.32(react-dom@19.2.2(react@19.2.2))(react@19.2.2) - '@tanstack/start-server-functions-client': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - '@tanstack/start-server-functions-server': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@tanstack/start-server-functions-client': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + '@tanstack/start-server-functions-server': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) react: 19.2.2 react-dom: 19.2.2(react@19.2.2) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -28123,14 +28169,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.121.29(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1)': + '@tanstack/router-plugin@1.121.29(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1)': dependencies: - '@babel/core': 7.27.4 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) - '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/core': 7.29.0 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.8 '@tanstack/router-core': 1.121.27 '@tanstack/router-generator': 1.121.27 '@tanstack/router-utils': 1.121.21 @@ -28141,32 +28187,32 @@ snapshots: zod: 3.25.67 optionalDependencies: '@tanstack/react-router': 1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) webpack: 5.97.1 transitivePeerDependencies: - supports-color '@tanstack/router-utils@1.121.21': dependencies: - '@babel/core': 7.27.4 - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.8 + '@babel/preset-typescript': 7.27.1(@babel/core@7.29.0) ansis: 4.1.0 diff: 8.0.2 transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@tanstack/server-functions-plugin@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: '@babel/code-frame': 7.26.2 - '@babel/core': 7.27.4 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.29.0 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) '@babel/template': 7.27.2 '@babel/traverse': 7.27.4 '@babel/types': 7.28.2 - '@tanstack/directive-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@tanstack/directive-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -28180,16 +28226,16 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1)': + '@tanstack/start-plugin-core@1.121.32(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(encoding@0.1.13)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1)': dependencies: '@babel/code-frame': 7.26.2 - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/types': 7.28.2 '@tanstack/router-core': 1.121.27 '@tanstack/router-generator': 1.121.27 - '@tanstack/router-plugin': 1.121.29(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(webpack@5.97.1) + '@tanstack/router-plugin': 1.121.29(@tanstack/react-router@1.121.27(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(webpack@5.97.1) '@tanstack/router-utils': 1.121.21 - '@tanstack/server-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@tanstack/server-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@tanstack/start-server-core': 1.121.32 '@types/babel__code-frame': 7.0.6 '@types/babel__core': 7.20.5 @@ -28199,7 +28245,7 @@ snapshots: nitropack: 2.11.12(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(rolldown@1.0.0-beta.32)(uploadthing@packages+uploadthing) pathe: 2.0.3 ufo: 1.6.3 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) xmlbuilder2: 3.1.1 zod: 3.25.67 transitivePeerDependencies: @@ -28246,9 +28292,9 @@ snapshots: tiny-warning: 1.0.3 unctx: 2.4.1 - '@tanstack/start-server-functions-client@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@tanstack/start-server-functions-client@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@tanstack/server-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@tanstack/server-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) '@tanstack/start-server-functions-fetcher': 1.121.27 transitivePeerDependencies: - supports-color @@ -28259,9 +28305,9 @@ snapshots: '@tanstack/router-core': 1.121.27 '@tanstack/start-client-core': 1.121.27 - '@tanstack/start-server-functions-server@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@tanstack/start-server-functions-server@1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@tanstack/server-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + '@tanstack/server-functions-plugin': 1.121.31(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color @@ -28280,17 +28326,6 @@ snapshots: '@tanstack/virtual-core': 3.11.3 vue: 3.5.13(typescript@5.8.3) - '@testing-library/dom@10.4.0': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.26.7 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - '@testing-library/jest-dom@6.6.3': dependencies: '@adobe/css-tools': 4.4.4 @@ -28302,10 +28337,6 @@ snapshots: redent: 3.0.0 optional: true - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': - dependencies: - '@testing-library/dom': 10.4.0 - '@tiptap/core@2.3.2(@tiptap/pm@2.3.2)': dependencies: '@tiptap/pm': 2.3.2 @@ -28545,8 +28576,6 @@ snapshots: dependencies: '@types/estree': 1.0.8 - '@types/aria-query@5.0.4': {} - '@types/babel__code-frame@7.0.6': {} '@types/babel__core@7.20.5': @@ -28559,16 +28588,16 @@ snapshots: '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 '@types/body-parser@1.19.5': dependencies: @@ -28698,7 +28727,7 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.12.0 + '@types/node': 22.19.15 '@types/node@12.20.55': {} @@ -28711,7 +28740,6 @@ snapshots: '@types/node@22.19.15': dependencies: undici-types: 6.21.0 - optional: true '@types/node@25.5.0': dependencies: @@ -28744,12 +28772,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.12.0 + '@types/node': 22.19.15 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.12.0 + '@types/node': 22.19.15 '@types/send': 0.17.4 '@types/stack-utils@2.0.3': {} @@ -28766,6 +28794,10 @@ snapshots: '@types/web-bluetooth@0.0.20': {} + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.19.15 + '@types/ws@8.5.14': dependencies: '@types/node': 22.12.0 @@ -28786,7 +28818,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.12.0 + '@types/node': 22.19.15 optional: true '@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': @@ -28827,7 +28859,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.3) '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1 + debug: 4.4.3 eslint: 9.25.1(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 @@ -28840,11 +28872,11 @@ snapshots: dependencies: '@typescript-eslint/types': 8.31.0 '@typescript-eslint/visitor-keys': 8.31.0 - debug: 4.4.1 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.4 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -28915,14 +28947,14 @@ snapshots: '@uploadthing/mime-types@0.2.10': {} - '@uploadthing/react@6.8.0(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(react@19.2.2)(solid-js@1.9.3)(uploadthing@6.13.3(@effect/platform@0.96.0(effect@3.21.0))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0))(vue@3.5.13(typescript@5.8.3))': + '@uploadthing/react@6.8.0(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(react@19.2.2)(solid-js@1.9.3)(uploadthing@6.13.3(@effect/platform@0.96.0(effect@4.0.0-rc.110))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0))(vue@3.5.13(typescript@5.8.3))': dependencies: '@uploadthing/dropzone': 0.4.1(react@19.2.2)(solid-js@1.9.3)(vue@3.5.13(typescript@5.8.3)) '@uploadthing/shared': 6.7.9 file-selector: 0.6.0 react: 19.2.2 tailwind-merge: 2.6.0 - uploadthing: 6.13.3(@effect/platform@0.96.0(effect@3.21.0))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0) + uploadthing: 6.13.3(@effect/platform@0.96.0(effect@4.0.0-rc.110))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0) optionalDependencies: next: 15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) transitivePeerDependencies: @@ -28969,7 +29001,7 @@ snapshots: '@vanilla-extract/babel-plugin-debug-ids@1.2.0': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 transitivePeerDependencies: - supports-color @@ -28990,10 +29022,10 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0)': + '@vanilla-extract/integration@6.5.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1)': dependencies: - '@babel/core': 7.27.4 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.29.0 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) '@vanilla-extract/babel-plugin-debug-ids': 1.2.0 '@vanilla-extract/css': 1.17.0 esbuild: 0.19.12 @@ -29003,8 +29035,8 @@ snapshots: lodash: 4.17.21 mlly: 1.7.4 outdent: 0.8.0 - vite: 5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) - vite-node: 1.6.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) + vite: 5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) + vite-node: 1.6.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -29045,7 +29077,7 @@ snapshots: citty: 0.1.6 clipboardy: 4.0.0 consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.6 get-port-please: 3.1.2 h3: 1.15.3 http-shutdown: 1.2.2 @@ -29054,13 +29086,13 @@ snapshots: node-forge: 1.3.1 pathe: 1.1.2 std-env: 3.9.0 - ufo: 1.6.1 + ufo: 1.6.3 untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0))': + '@vinxi/plugin-directives@0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0))': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.2 acorn: 8.14.1 acorn-jsx: 5.3.2(acorn@8.14.1) acorn-loose: 8.4.0 @@ -29069,168 +29101,189 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0) + vinxi: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0) - '@vinxi/server-components@0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0))': + '@vinxi/server-components@0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0))': dependencies: - '@vinxi/plugin-directives': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0)) + '@vinxi/plugin-directives': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0)) acorn: 8.14.1 acorn-loose: 8.4.0 acorn-typescript: 1.4.13(acorn@8.14.1) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0) + vinxi: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0) - '@vinxi/server-functions@0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0))': + '@vinxi/server-functions@0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0))': dependencies: - '@vinxi/plugin-directives': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0)) + '@vinxi/plugin-directives': 0.4.3(vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0)) acorn: 8.14.1 acorn-loose: 8.4.0 acorn-typescript: 1.4.13(acorn@8.14.1) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0) + vinxi: 0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0) - '@vitejs/plugin-react-swc@3.7.2(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitejs/plugin-react-swc@3.7.2(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: '@swc/core': 1.11.22 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: '@babel/core': 7.27.4 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.4) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.4) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.1.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': + '@vitejs/plugin-vue-jsx@4.1.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3))': dependencies: - '@babel/core': 7.27.4 - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) - '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.27.4) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + '@babel/core': 7.29.0 + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.29.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) vue: 3.5.13(typescript@5.8.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': + '@vitejs/plugin-vue@5.2.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3))': dependencies: - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) vue: 3.5.13(typescript@5.8.3) - '@vitest/browser@3.2.4(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.2.4)': + '@vitest/browser-playwright@4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10)': dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - '@vitest/utils': 3.2.4 - magic-string: 0.30.17 - sirv: 3.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@22.12.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - ws: 8.18.2 - optionalDependencies: + '@vitest/browser': 4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) playwright: 1.52.0 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@types/node@22.12.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@3.2.4(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.2.4)': + '@vitest/browser-playwright@4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10)': dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - '@vitest/utils': 3.2.4 - magic-string: 0.30.17 - sirv: 3.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@25.5.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - ws: 8.18.2 - optionalDependencies: + '@vitest/browser': 4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) playwright: 1.52.0 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@types/node@22.12.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + ws: 8.21.3 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4)': + '@vitest/browser@4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10)': dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + ws: 8.21.3 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/coverage-istanbul@4.1.10(vitest@4.1.10)': + dependencies: + '@babel/core': 7.29.0 '@istanbuljs/schema': 0.1.3 - debug: 4.4.1 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magicast: 0.3.5 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@22.12.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + istanbul-reports: 3.2.0 + magicast: 0.5.4 + obug: 2.1.4 + tinyrainbow: 3.1.1 + vitest: 4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) transitivePeerDependencies: - supports-color - '@vitest/expect@3.2.4': + '@vitest/expect@4.1.10': dependencies: + '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.0 - tinyrainbow: 2.0.0 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + chai: 6.2.2 + tinyrainbow: 3.1.1 - '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitest/mocker@4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: msw: 2.7.5(@types/node@22.12.0)(typescript@5.8.3) - vite: 6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) - '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitest/mocker@4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: msw: 2.7.5(@types/node@25.5.0)(typescript@5.8.3) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@4.1.10': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.1.1 - '@vitest/runner@3.2.4': + '@vitest/runner@4.1.10': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.1.10 pathe: 2.0.3 - strip-literal: 3.0.0 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@4.1.10': dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.17 + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 + magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 + '@vitest/spy@4.1.10': {} - '@vitest/utils@3.2.4': + '@vitest/utils@4.1.10': dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.1.4 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.1.10 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 '@volar/kit@2.4.11(typescript@5.8.3)': dependencies: @@ -29284,7 +29337,7 @@ snapshots: '@vue-macros/common@1.15.1(rollup@3.29.5)(vue@3.5.13(typescript@5.8.3))': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.0 '@rollup/pluginutils': 5.1.4(rollup@3.29.5) '@vue/compiler-sfc': 3.5.13 ast-kit: 1.3.2 @@ -29297,7 +29350,7 @@ snapshots: '@vue-macros/common@1.15.1(rollup@4.44.0)(vue@3.5.13(typescript@5.8.3))': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.0 '@rollup/pluginutils': 5.1.4(rollup@4.44.0) '@vue/compiler-sfc': 3.5.13 ast-kit: 1.3.2 @@ -29310,30 +29363,30 @@ snapshots: '@vue/babel-helper-vue-transform-on@1.2.5': {} - '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.27.4)': + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.29.0)': dependencies: - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.8 '@vue/babel-helper-vue-transform-on': 1.2.5 - '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.27.4) + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.29.0) html-tags: 3.3.1 svg-tags: 1.0.0 optionalDependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.27.4)': + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.29.0)': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/core': 7.27.4 - '@babel/helper-module-imports': 7.27.1 + '@babel/code-frame': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.8 '@vue/compiler-sfc': 3.5.13 transitivePeerDependencies: - supports-color @@ -29375,14 +29428,14 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-core@7.6.8(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': + '@vue/devtools-core@7.6.8(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3))': dependencies: '@vue/devtools-kit': 7.6.8 '@vue/devtools-shared': 7.6.8 mitt: 3.0.1 nanoid: 5.0.9 pathe: 1.1.2 - vite-hot-client: 0.2.4(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite-hot-client: 0.2.4(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) vue: 3.5.13(typescript@5.8.3) transitivePeerDependencies: - vite @@ -29672,7 +29725,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -29858,10 +29911,6 @@ snapshots: dependencies: tslib: 2.8.1 - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - aria-query@5.3.2: {} array-buffer-byte-length@1.0.2: @@ -29944,16 +29993,14 @@ snapshots: asap@2.0.6: {} - assertion-error@2.0.1: {} - ast-kit@1.3.2: dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.8 pathe: 1.1.2 ast-kit@2.1.2: dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.8 pathe: 2.0.3 ast-module-types@6.0.1: {} @@ -29970,14 +30017,14 @@ snapshots: ast-walker-scope@0.6.2: dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.2 ast-kit: 1.3.2 astral-regex@1.0.0: {} astring@1.9.0: {} - astro@5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.7.0): + astro@5.1.2(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(yaml@2.9.0): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.2 @@ -30029,8 +30076,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.16.0(db0@0.3.2)(ioredis@5.6.1)(uploadthing@packages+uploadthing) vfile: 6.0.3 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vitefu: 1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vitefu: 1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) which-pm: 3.0.0 xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 @@ -30123,16 +30170,16 @@ snapshots: b4a@1.6.6: {} - babel-core@7.0.0-bridge.0(@babel/core@7.27.4): + babel-core@7.0.0-bridge.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 babel-dead-code-elimination@1.0.10: dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.28.3 - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -30141,14 +30188,24 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/types': 7.28.2 + '@babel/types': 7.29.8 + html-entities: 2.3.3 + parse5: 7.3.0 + validate-html-nesting: 1.2.2 + + babel-plugin-jsx-dom-expressions@0.39.3(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/types': 7.29.8 html-entities: 2.3.3 parse5: 7.3.0 validate-html-nesting: 1.2.2 babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.27.4): dependencies: - '@babel/compat-data': 7.27.5 + '@babel/compat-data': 7.29.0 '@babel/core': 7.27.4 '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.27.4) semver: 6.3.1 @@ -30157,7 +30214,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.29.0): dependencies: - '@babel/compat-data': 7.27.5 + '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.29.0) semver: 6.3.1 @@ -30237,7 +30294,7 @@ snapshots: babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517: dependencies: '@babel/generator': 7.2.0 - '@babel/types': 7.28.2 + '@babel/types': 7.29.0 chalk: 4.1.2 invariant: 2.2.4 pretty-format: 24.9.0 @@ -30300,6 +30357,11 @@ snapshots: '@babel/core': 7.27.4 babel-plugin-jsx-dom-expressions: 0.39.3(@babel/core@7.27.4) + babel-preset-solid@1.9.3(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + babel-plugin-jsx-dom-expressions: 0.39.3(@babel/core@7.29.0) + bail@2.0.2: {} balanced-match@1.0.2: {} @@ -30515,12 +30577,12 @@ snapshots: dependencies: chokidar: 4.0.3 confbox: 0.1.8 - defu: 6.1.4 + defu: 6.1.6 dotenv: 16.5.0 giget: 1.2.3 jiti: 2.4.2 mlly: 1.7.4 - ohash: 1.1.4 + ohash: 1.1.6 pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.3.1 @@ -30532,7 +30594,7 @@ snapshots: dependencies: chokidar: 4.0.3 confbox: 0.2.2 - defu: 6.1.4 + defu: 6.1.6 dotenv: 16.5.0 exsolve: 1.0.7 giget: 2.0.0 @@ -30632,8 +30694,8 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001696 + browserslist: 4.28.2 + caniuse-lite: 1.0.30001784 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 @@ -30643,20 +30705,14 @@ snapshots: capnp-ts@0.7.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 tslib: 2.8.1 transitivePeerDependencies: - supports-color ccount@2.0.1: {} - chai@5.2.0: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.4 - pathval: 2.0.0 + chai@6.2.2: {} chalk@2.4.2: dependencies: @@ -30692,8 +30748,6 @@ snapshots: charenc@0.0.2: {} - check-error@2.1.1: {} - cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -30741,7 +30795,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 22.12.0 + '@types/node': 22.19.15 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -30753,7 +30807,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 25.5.0 + '@types/node': 22.19.15 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -31058,7 +31112,7 @@ snapshots: core-js-compat@3.40.0: dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 core-js-compat@3.49.0: dependencies: @@ -31171,7 +31225,7 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 css-declaration-sorter: 7.2.0(postcss@8.4.49) cssnano-utils: 4.0.2(postcss@8.4.49) postcss: 8.4.49 @@ -31205,7 +31259,7 @@ snapshots: cssnano-preset-default@7.0.6(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 css-declaration-sorter: 7.2.0(postcss@8.4.49) cssnano-utils: 5.0.0(postcss@8.4.49) postcss: 8.4.49 @@ -31361,8 +31415,6 @@ snapshots: dedent@1.5.3: {} - deep-eql@5.0.2: {} - deep-equal@1.0.1: {} deep-extend@0.6.0: {} @@ -31544,8 +31596,6 @@ snapshots: dependencies: esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} - dom-accessibility-api@0.6.3: optional: true @@ -31626,12 +31676,13 @@ snapshots: ee-first@1.1.1: {} - effect@3.21.0: + effect@3.4.8: {} + + effect@4.0.0-rc.110: dependencies: '@standard-schema/spec': 1.1.0 - fast-check: 3.23.2 - - effect@3.4.8: {} + fast-check: 4.9.0 + msgpackr: 2.0.4 electron-to-chromium@1.5.331: {} @@ -31812,6 +31863,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.3.2: {} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -32104,7 +32157,7 @@ snapshots: eslint: 9.25.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-react: 7.37.0(eslint@9.25.1(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.25.1(jiti@2.4.2)) @@ -32124,11 +32177,11 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)): dependencies: - debug: 4.4.1 + debug: 4.4.3 enhanced-resolve: 5.18.0 eslint: 9.25.1(jiti@2.4.2) eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.25.1(jiti@2.4.2)) fast-glob: 3.3.3 get-tsconfig: 4.10.1 is-core-module: 2.16.1 @@ -32170,7 +32223,7 @@ snapshots: - supports-color - typescript - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.25.1(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -32425,7 +32478,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.12.0 + '@types/node': 22.19.15 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -32486,7 +32539,7 @@ snapshots: exit-hook@2.2.1: {} - expect-type@1.2.1: {} + expect-type@1.4.0: {} expo-asset@10.0.10(expo@51.0.39(@babel/core@7.27.4)(@babel/preset-env@7.26.0(@babel/core@7.27.4))(encoding@0.1.13)): dependencies: @@ -32875,11 +32928,11 @@ snapshots: enhanced-resolve: 5.18.0 mlly: 1.7.4 pathe: 1.1.2 - ufo: 1.6.1 + ufo: 1.6.3 extract-zip@2.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.3 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -32891,6 +32944,10 @@ snapshots: dependencies: pure-rand: 6.1.0 + fast-check@4.9.0: + dependencies: + pure-rand: 8.4.1 + fast-decode-uri-component@1.0.1: {} fast-deep-equal@3.1.3: {} @@ -33012,6 +33069,10 @@ snapshots: optionalDependencies: picomatch: 4.0.4 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + fecha@4.2.3: {} fetch-blob@3.2.0: @@ -33087,7 +33148,8 @@ snapshots: make-dir: 3.1.0 pkg-dir: 4.2.0 - find-my-way-ts@0.1.6: {} + find-my-way-ts@0.1.6: + optional: true find-my-way@9.1.0: dependencies: @@ -33368,10 +33430,10 @@ snapshots: dependencies: citty: 0.1.6 consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.6 node-fetch-native: 1.6.6 nypm: 0.3.11 - ohash: 1.1.4 + ohash: 1.1.6 pathe: 1.1.2 tar: 6.2.1 @@ -33379,7 +33441,7 @@ snapshots: dependencies: citty: 0.1.6 consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.6 node-fetch-native: 1.6.6 nypm: 0.6.0 pathe: 2.0.3 @@ -33536,12 +33598,12 @@ snapshots: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 - defu: 6.1.4 + defu: 6.1.6 destr: 2.0.5 iron-webcrypto: 1.2.1 ohash: 1.1.6 radix3: 1.1.2 - ufo: 1.6.1 + ufo: 1.6.3 uncrypto: 0.1.3 unenv: 1.10.0 @@ -33915,14 +33977,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -34049,7 +34111,7 @@ snapshots: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.4.1 + debug: 4.4.3 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -34334,11 +34396,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.28.3 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -34359,21 +34421,18 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - istanbul-lib-source-maps@5.0.6: + istanbul-reports@3.1.7: dependencies: - '@jridgewell/trace-mapping': 0.3.30 - debug: 4.4.1 - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -34402,7 +34461,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.12.0 + '@types/node': 22.19.15 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -34410,7 +34469,7 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -34423,13 +34482,13 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.12.0 + '@types/node': 22.19.15 jest-util: 29.7.0 jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.12.0 + '@types/node': 22.19.15 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -34453,7 +34512,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.12.0 + '@types/node': 22.19.15 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -34512,17 +34571,17 @@ snapshots: jscodeshift@0.14.0(@babel/preset-env@7.26.0(@babel/core@7.27.4)): dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.28.3 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) '@babel/preset-env': 7.26.0(@babel/core@7.27.4) - '@babel/preset-flow': 7.25.9(@babel/core@7.27.4) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4) - '@babel/register': 7.25.9(@babel/core@7.27.4) - babel-core: 7.0.0-bridge.0(@babel/core@7.27.4) + '@babel/preset-flow': 7.25.9(@babel/core@7.29.0) + '@babel/preset-typescript': 7.27.1(@babel/core@7.29.0) + '@babel/register': 7.25.9(@babel/core@7.29.0) + babel-core: 7.0.0-bridge.0(@babel/core@7.29.0) chalk: 4.1.2 flow-parser: 0.258.0 graceful-fs: 4.2.11 @@ -34537,17 +34596,17 @@ snapshots: jscodeshift@0.14.0(@babel/preset-env@7.26.0(@babel/core@7.29.0)): dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.28.3 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) '@babel/preset-env': 7.26.0(@babel/core@7.29.0) - '@babel/preset-flow': 7.25.9(@babel/core@7.27.4) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4) - '@babel/register': 7.25.9(@babel/core@7.27.4) - babel-core: 7.0.0-bridge.0(@babel/core@7.27.4) + '@babel/preset-flow': 7.25.9(@babel/core@7.29.0) + '@babel/preset-typescript': 7.27.1(@babel/core@7.29.0) + '@babel/register': 7.25.9(@babel/core@7.29.0) + babel-core: 7.0.0-bridge.0(@babel/core@7.29.0) chalk: 4.1.2 flow-parser: 0.258.0 graceful-fs: 4.2.11 @@ -34677,7 +34736,7 @@ snapshots: koa-send@5.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.3 http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: @@ -34697,7 +34756,7 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.4.1 + debug: 4.4.3 delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -35053,8 +35112,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.4: {} - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -35083,12 +35140,10 @@ snapshots: luxon@3.6.1: {} - lz-string@1.5.0: {} - magic-regexp@0.8.0: dependencies: estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 mlly: 1.7.4 regexp-tree: 0.1.27 type-level-regexp: 0.1.17 @@ -35097,7 +35152,7 @@ snapshots: magic-string-ast@0.6.3: dependencies: - magic-string: 0.30.17 + magic-string: 0.30.21 magic-string@0.25.9: dependencies: @@ -35105,18 +35160,28 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.2.11: dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 recast: 0.23.11 magicast@0.3.5: dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + source-map-js: 1.2.1 + + magicast@0.5.4: + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 source-map-js: 1.2.1 make-dir@2.1.0: @@ -35130,7 +35195,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.4 make-synchronized@0.2.9: {} @@ -35504,7 +35569,7 @@ snapshots: metro-babel-transformer@0.80.12: dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 flow-enums-runtime: 0.0.6 hermes-parser: 0.23.1 nullthrows: 1.1.1 @@ -35576,8 +35641,8 @@ snapshots: metro-source-map@0.80.12: dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.80.12 @@ -35602,10 +35667,10 @@ snapshots: metro-transform-plugins@0.80.12: dependencies: - '@babel/core': 7.27.4 - '@babel/generator': 7.28.3 - '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -35613,10 +35678,10 @@ snapshots: metro-transform-worker@0.80.12: dependencies: - '@babel/core': 7.27.4 - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 flow-enums-runtime: 0.0.6 metro: 0.80.12 metro-babel-transformer: 0.80.12 @@ -35633,13 +35698,13 @@ snapshots: metro@0.80.12: dependencies: - '@babel/code-frame': 7.27.1 - '@babel/core': 7.27.4 - '@babel/generator': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.28.2 + '@babel/code-frame': 7.29.0 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 @@ -36122,7 +36187,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.8 - debug: 4.4.1 + debug: 4.4.3 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -36291,7 +36356,7 @@ snapshots: autoprefixer: 10.4.20(postcss@8.4.49) citty: 0.1.6 cssnano: 6.1.2(postcss@8.4.49) - defu: 6.1.4 + defu: 6.1.6 esbuild: 0.19.12 fs-extra: 11.2.0 globby: 13.2.2 @@ -36358,21 +36423,26 @@ snapshots: ms@2.1.3: {} - msgpackr-extract@3.0.3: + msgpackr-extract@3.0.4: dependencies: node-gyp-build-optional-packages: 5.2.2 optionalDependencies: - '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.4 optional: true msgpackr@1.11.9: optionalDependencies: - msgpackr-extract: 3.0.3 + msgpackr-extract: 3.0.4 + optional: true + + msgpackr@2.0.4: + optionalDependencies: + msgpackr-extract: 3.0.4 msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3): dependencies: @@ -36423,11 +36493,11 @@ snapshots: typescript: 5.8.3 transitivePeerDependencies: - '@types/node' - optional: true muggle-string@0.4.1: {} - multipasta@0.2.7: {} + multipasta@0.2.7: + optional: true mustache@4.2.0: {} @@ -36485,7 +36555,7 @@ snapshots: next-auth@5.0.0-beta.25(next@15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(react@19.2.2): dependencies: '@auth/core': 0.37.2 - next: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + next: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: 19.2.2 next-sitemap@4.2.3(next@15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)): @@ -36494,7 +36564,7 @@ snapshots: '@next/env': 13.5.6 fast-glob: 3.3.3 minimist: 1.2.8 - next: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + next: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) next-themes@0.4.6(react-dom@19.2.2(react@19.2.2))(react@19.2.2): dependencies: @@ -36503,7 +36573,7 @@ snapshots: next-view-transitions@0.3.4(next@15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(react-dom@19.2.2(react@19.2.2))(react@19.2.2): dependencies: - next: 15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) + next: 15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2) react: 19.2.2 react-dom: 19.2.2(react@19.2.2) @@ -36515,7 +36585,7 @@ snapshots: postcss: 8.4.31 react: 19.2.2 react-dom: 19.2.2(react@19.2.2) - styled-jsx: 5.1.6(react@19.2.2) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.2) optionalDependencies: '@next/swc-darwin-arm64': 15.4.2-canary.51 '@next/swc-darwin-x64': 15.4.2-canary.51 @@ -36531,7 +36601,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.5.8(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2): + next@15.5.8(@babel/core@7.29.0)(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2): dependencies: '@next/env': 15.5.8 '@swc/helpers': 0.5.15 @@ -36539,7 +36609,7 @@ snapshots: postcss: 8.4.31 react: 19.2.2 react-dom: 19.2.2(react@19.2.2) - styled-jsx: 5.1.6(react@19.2.2) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.2) optionalDependencies: '@next/swc-darwin-arm64': 15.5.7 '@next/swc-darwin-x64': 15.5.7 @@ -36580,7 +36650,7 @@ snapshots: croner: 9.0.0 crossws: 0.3.5 db0: 0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)) - defu: 6.1.4 + defu: 6.1.6 destr: 2.0.5 dot-prop: 9.0.0 esbuild: 0.25.5 @@ -36613,12 +36683,12 @@ snapshots: rollup: 4.44.0 rollup-plugin-visualizer: 5.14.0(rolldown@1.0.0-beta.32)(rollup@4.44.0) scule: 1.3.0 - semver: 7.7.2 + semver: 7.7.4 serve-placeholder: 2.0.2 serve-static: 2.2.0 source-map: 0.7.4 std-env: 3.9.0 - ufo: 1.6.1 + ufo: 1.6.3 ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.4.1 @@ -36717,7 +36787,7 @@ snapshots: node-source-walk@7.0.1: dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.29.8 node-stream-zip@1.15.0: {} @@ -36729,13 +36799,13 @@ snapshots: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.16.1 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -36796,7 +36866,7 @@ snapshots: npm-install-checks@6.3.0: dependencies: - semver: 7.7.2 + semver: 7.7.4 npm-normalize-package-bin@2.0.0: {} @@ -36806,14 +36876,14 @@ snapshots: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-name: 5.0.1 npm-package-arg@11.0.3: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-name: 5.0.1 npm-package-arg@7.0.0: @@ -36835,7 +36905,7 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.7.2 + semver: 7.7.4 npm-run-path@2.0.2: dependencies: @@ -36859,14 +36929,14 @@ snapshots: nuxi@3.17.2: {} - nuxt@3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0): + nuxt@3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 1.7.0(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + '@nuxt/devtools': 1.7.0(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@3.29.5) '@nuxt/schema': 3.15.0(magicast@0.3.5)(rollup@3.29.5) '@nuxt/telemetry': 2.6.2(magicast@0.3.5)(rollup@3.29.5) - '@nuxt/vite-builder': 3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.7.0) + '@nuxt/vite-builder': 3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@3.29.5)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.9.0) '@unhead/dom': 1.11.18 '@unhead/shared': 1.11.18 '@unhead/ssr': 1.11.14 @@ -36981,14 +37051,14 @@ snapshots: - xml2js - yaml - nuxt@3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0): + nuxt@3.15.0(@libsql/client@0.14.0)(@parcel/watcher@2.5.6)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(eslint@9.25.1(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(uploadthing@packages+uploadthing)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 1.7.0(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) + '@nuxt/devtools': 1.7.0(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.13(typescript@5.8.3)) '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@4.44.0) '@nuxt/schema': 3.15.0(magicast@0.3.5)(rollup@4.44.0) '@nuxt/telemetry': 2.6.2(magicast@0.3.5)(rollup@4.44.0) - '@nuxt/vite-builder': 3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.37.0)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.7.0) + '@nuxt/vite-builder': 3.15.0(@types/node@25.5.0)(eslint@9.25.1(jiti@2.4.2))(lightningcss@1.29.3)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.32)(rollup@4.44.0)(terser@5.46.1)(tsx@4.19.2)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))(yaml@2.9.0) '@unhead/dom': 1.11.18 '@unhead/shared': 1.11.18 '@unhead/ssr': 1.11.14 @@ -37142,7 +37212,7 @@ snapshots: execa: 8.0.1 pathe: 1.1.2 pkg-types: 1.3.1 - ufo: 1.6.1 + ufo: 1.6.3 nypm@0.4.1: dependencies: @@ -37151,7 +37221,7 @@ snapshots: pathe: 1.1.2 pkg-types: 1.3.1 tinyexec: 0.3.2 - ufo: 1.6.1 + ufo: 1.6.3 nypm@0.6.0: dependencies: @@ -37212,11 +37282,13 @@ snapshots: obliterator@2.0.4: {} + obug@2.1.4: {} + ofetch@1.4.1: dependencies: destr: 2.0.5 node-fetch-native: 1.6.6 - ufo: 1.6.1 + ufo: 1.6.3 ohash@1.1.4: {} @@ -37472,7 +37544,7 @@ snapshots: parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 index-to-position: 0.1.2 type-fest: 4.31.0 @@ -37564,8 +37636,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.0: {} - peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 @@ -37658,6 +37728,8 @@ snapshots: pngjs@3.4.0: {} + pngjs@7.0.0: {} + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -37682,7 +37754,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.49 @@ -37690,7 +37762,7 @@ snapshots: postcss-colormin@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.49 @@ -37698,13 +37770,13 @@ snapshots: postcss-convert-values@6.1.0(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-convert-values@7.0.4(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 postcss: 8.4.49 postcss-value-parser: 4.2.0 @@ -37780,14 +37852,14 @@ snapshots: postcss: 8.4.49 tsx: 4.19.2 - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.7.0): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.4.2 postcss: 8.4.49 tsx: 4.19.2 - yaml: 2.7.0 + yaml: 2.9.0 postcss-merge-longhand@6.0.5(postcss@8.4.49): dependencies: @@ -37803,7 +37875,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.4.49) postcss: 8.4.49 @@ -37811,7 +37883,7 @@ snapshots: postcss-merge-rules@7.0.4(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 caniuse-api: 3.0.0 cssnano-utils: 5.0.0(postcss@8.4.49) postcss: 8.4.49 @@ -37843,14 +37915,14 @@ snapshots: postcss-minify-params@6.1.0(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 cssnano-utils: 4.0.2(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-minify-params@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 cssnano-utils: 5.0.0(postcss@8.4.49) postcss: 8.4.49 postcss-value-parser: 4.2.0 @@ -37971,13 +38043,13 @@ snapshots: postcss-normalize-unicode@6.1.0(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-normalize-unicode@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 postcss: 8.4.49 postcss-value-parser: 4.2.0 @@ -38015,13 +38087,13 @@ snapshots: postcss-reduce-initial@6.1.0(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 caniuse-api: 3.0.0 postcss: 8.4.49 postcss-reduce-initial@7.0.2(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 caniuse-api: 3.0.0 postcss: 8.4.49 @@ -38179,12 +38251,6 @@ snapshots: ansi-styles: 4.3.0 react-is: 17.0.2 - pretty-format@27.5.1: - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -38394,6 +38460,8 @@ snapshots: pure-rand@6.1.0: {} + pure-rand@8.4.1: {} + qrcode-terminal@0.11.0: {} qs@6.13.0: @@ -38528,7 +38596,7 @@ snapshots: rc9@2.1.2: dependencies: - defu: 6.1.4 + defu: 6.1.6 destr: 2.0.5 rc@1.2.8: @@ -38996,6 +39064,17 @@ snapshots: dependencies: redis-errors: 1.2.0 + redis@6.2.1: + dependencies: + '@redis/bloom': 6.2.1(@redis/client@6.2.1) + '@redis/client': 6.2.1 + '@redis/json': 6.2.1(@redis/client@6.2.1) + '@redis/search': 6.2.1(@redis/client@6.2.1) + '@redis/time-series': 6.2.1(@redis/client@6.2.1) + transitivePeerDependencies: + - '@node-rs/xxhash' + - '@opentelemetry/api' + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -39397,11 +39476,11 @@ snapshots: rollup-plugin-dts@6.2.1(rollup@3.29.5)(typescript@5.8.3): dependencies: - magic-string: 0.30.17 + magic-string: 0.30.21 rollup: 3.29.5 typescript: 5.8.3 optionalDependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 rollup-plugin-inject@3.0.2: dependencies: @@ -39674,7 +39753,7 @@ snapshots: serve-placeholder@2.0.2: dependencies: - defu: 6.1.4 + defu: 6.1.6 serve-static@1.16.2: dependencies: @@ -39874,7 +39953,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -39900,6 +39979,12 @@ snapshots: mrmime: 2.0.0 totalist: 3.0.1 + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -39939,9 +40024,9 @@ snapshots: solid-refresh@0.6.3(solid-js@1.9.3): dependencies: - '@babel/generator': 7.28.3 - '@babel/helper-module-imports': 7.27.1 - '@babel/types': 7.28.2 + '@babel/generator': 7.29.1 + '@babel/helper-module-imports': 7.28.6 + '@babel/types': 7.29.0 solid-js: 1.9.3 transitivePeerDependencies: - supports-color @@ -40061,6 +40146,8 @@ snapshots: std-env@3.9.0: {} + std-env@4.2.0: {} + stoppable@1.1.0: {} stream-buffers@2.2.0: {} @@ -40222,20 +40309,22 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(react@19.2.2): + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.2): dependencies: client-only: 0.0.1 react: 19.2.2 + optionalDependencies: + '@babel/core': 7.29.0 stylehacks@6.1.1(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 postcss: 8.4.49 postcss-selector-parser: 6.1.2 stylehacks@7.0.4(postcss@8.4.49): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.2 postcss: 8.4.49 postcss-selector-parser: 6.1.2 @@ -40519,12 +40608,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - text-hex@1.0.0: {} text-table@0.2.0: {} @@ -40565,6 +40648,8 @@ snapshots: tinyexec@1.0.1: {} + tinyexec@1.3.0: {} + tinyglobby@0.2.10: dependencies: fdir: 6.4.4(picomatch@4.0.4) @@ -40575,11 +40660,12 @@ snapshots: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 - tinyspy@4.0.3: {} + tinyrainbow@3.1.1: {} tippy.js@6.3.7: dependencies: @@ -40707,16 +40793,16 @@ snapshots: tsscmp@1.0.6: {} - tsup-preset-solid@2.2.0(esbuild@0.24.2)(solid-js@1.9.3)(tsup@8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.7.0)): + tsup-preset-solid@2.2.0(esbuild@0.24.2)(solid-js@1.9.3)(tsup@8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.9.0)): dependencies: esbuild-plugin-solid: 0.5.0(esbuild@0.24.2)(solid-js@1.9.3) - tsup: 8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.7.0) + tsup: 8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.9.0) transitivePeerDependencies: - esbuild - solid-js - supports-color - tsup@8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.7.0): + tsup@8.3.5(@swc/core@1.11.22)(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.9.0): dependencies: bundle-require: 5.1.0(esbuild@0.24.2) cac: 6.7.14 @@ -40726,7 +40812,7 @@ snapshots: esbuild: 0.24.2 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.7.0) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.9.0) resolve-from: 5.0.0 rollup: 4.44.0 source-map: 0.8.0-beta.0 @@ -40875,7 +40961,7 @@ snapshots: typescript-auto-import-cache@0.3.5: dependencies: - semver: 7.7.2 + semver: 7.7.4 typescript-eslint@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3): dependencies: @@ -40922,7 +41008,7 @@ snapshots: globby: 13.2.2 hookable: 5.5.3 jiti: 1.21.7 - magic-string: 0.30.17 + magic-string: 0.30.21 mkdist: 1.4.0(typescript@5.8.3) mlly: 1.7.4 pathe: 1.1.2 @@ -40958,8 +41044,7 @@ snapshots: undici-types@6.20.0: {} - undici-types@6.21.0: - optional: true + undici-types@6.21.0: {} undici-types@7.18.2: {} @@ -40973,6 +41058,8 @@ snapshots: undici@7.24.7: {} + undici@8.7.0: {} + unenv-nightly@2.0.0-20241204-140205-a5d5190: dependencies: defu: 6.1.6 @@ -40983,7 +41070,7 @@ snapshots: unenv@1.10.0: dependencies: consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.6 mime: 3.0.0 node-fetch-native: 1.6.6 pathe: 1.1.2 @@ -41080,7 +41167,7 @@ snapshots: escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.1 - magic-string: 0.30.17 + magic-string: 0.30.21 mlly: 1.7.4 pathe: 2.0.3 picomatch: 4.0.4 @@ -41216,7 +41303,7 @@ snapshots: unplugin-vue-router@0.10.9(rollup@3.29.5)(vue-router@4.5.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)): dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.0 '@rollup/pluginutils': 5.1.4(rollup@3.29.5) '@vue-macros/common': 1.15.1(rollup@3.29.5)(vue@3.5.13(typescript@5.8.3)) ast-walker-scope: 0.6.2 @@ -41238,7 +41325,7 @@ snapshots: unplugin-vue-router@0.10.9(rollup@4.44.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)): dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.0 '@rollup/pluginutils': 5.1.4(rollup@4.44.0) '@vue-macros/common': 1.15.1(rollup@4.44.0)(vue@3.5.13(typescript@5.8.3)) ast-walker-scope: 0.6.2 @@ -41297,11 +41384,11 @@ snapshots: untyped@1.5.2: dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/standalone': 7.26.4 - '@babel/types': 7.28.2 + '@babel/types': 7.29.0 citty: 0.1.6 - defu: 6.1.4 + defu: 6.1.6 jiti: 2.4.2 knitwork: 1.2.0 scule: 1.3.0 @@ -41311,7 +41398,7 @@ snapshots: untyped@2.0.0: dependencies: citty: 0.1.6 - defu: 6.1.4 + defu: 6.1.6 jiti: 2.4.2 knitwork: 1.2.0 scule: 1.3.0 @@ -41319,7 +41406,7 @@ snapshots: unwasm@0.3.9: dependencies: knitwork: 1.2.0 - magic-string: 0.30.17 + magic-string: 0.30.21 mlly: 1.7.4 pathe: 1.1.2 pkg-types: 1.3.1 @@ -41337,7 +41424,7 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - uploadthing@6.13.3(@effect/platform@0.96.0(effect@3.21.0))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0): + uploadthing@6.13.3(@effect/platform@0.96.0(effect@4.0.0-rc.110))(express@5.0.1)(fastify@5.2.0)(h3@1.15.3)(next@15.4.2-canary.51(@playwright/test@1.52.0)(react-dom@19.2.2(react@19.2.2))(react@19.2.2))(tailwindcss@4.0.0): dependencies: '@effect/schema': 0.68.18(effect@3.4.8) '@uploadthing/mime-types': 0.2.10 @@ -41346,7 +41433,7 @@ snapshots: effect: 3.4.8 std-env: 3.9.0 optionalDependencies: - '@effect/platform': 0.96.0(effect@3.21.0) + '@effect/platform': 0.96.0(effect@4.0.0-rc.110) express: 5.0.1 fastify: 5.2.0 h3: 1.15.3 @@ -41480,7 +41567,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.37.0)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.7.0): + vinxi@0.5.1(@libsql/client@0.14.0)(@types/node@25.5.0)(db0@0.3.2(@libsql/client@0.14.0)(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2)))(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client@0.14.0)(@types/react@19.2.7)(bun-types@1.2.5)(react@19.2.2))(encoding@0.1.13)(ioredis@5.6.1)(jiti@2.4.2)(lightningcss@1.29.3)(rolldown@1.0.0-beta.32)(terser@5.46.1)(tsx@4.19.2)(uploadthing@packages+uploadthing)(yaml@2.9.0): dependencies: '@babel/core': 7.27.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) @@ -41514,7 +41601,7 @@ snapshots: unctx: 2.4.1 unenv: 1.10.0 unstorage: 1.16.0(db0@0.3.2)(ioredis@5.6.1)(uploadthing@packages+uploadthing) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) zod: 3.25.67 transitivePeerDependencies: - '@azure/app-configuration' @@ -41558,17 +41645,17 @@ snapshots: - xml2js - yaml - vite-hot-client@0.2.4(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + vite-hot-client@0.2.4(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) - vite-node@1.6.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0): + vite-node@1.6.0(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1): dependencies: cac: 6.7.14 - debug: 4.4.1 + debug: 4.4.3 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) + vite: 5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) transitivePeerDependencies: - '@types/node' - less @@ -41580,13 +41667,13 @@ snapshots: - supports-color - terser - vite-node@2.1.8(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0): + vite-node@2.1.8(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1): dependencies: cac: 6.7.14 - debug: 4.4.1 + debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0) + vite: 5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1) transitivePeerDependencies: - '@types/node' - less @@ -41598,34 +41685,13 @@ snapshots: - supports-color - terser - vite-node@3.0.0-beta.2(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): + vite-node@3.0.0-beta.2(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0): dependencies: cac: 6.7.14 - debug: 4.4.1 + debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-node@3.2.4(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): - dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -41640,30 +41706,9 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): + vite-plugin-checker@0.8.0(eslint@9.25.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-plugin-checker@0.8.0(eslint@9.25.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): - dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 ansi-escapes: 4.3.2 chalk: 4.1.2 chokidar: 3.6.0 @@ -41673,7 +41718,7 @@ snapshots: npm-run-path: 4.0.1 strip-ansi: 6.0.1 tiny-invariant: 1.3.3 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 vscode-languageserver-textdocument: 1.0.12 @@ -41683,84 +41728,84 @@ snapshots: optionator: 0.9.4 typescript: 5.8.3 - vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@3.29.5))(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@3.29.5))(rollup@3.29.5)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.4(rollup@3.29.5) - debug: 4.4.1 + debug: 4.4.3 error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 open: 10.1.0 perfect-debounce: 1.0.0 picocolors: 1.1.1 - sirv: 3.0.1 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + sirv: 3.0.2 + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) optionalDependencies: '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@3.29.5) transitivePeerDependencies: - rollup - supports-color - vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@4.44.0))(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.0(magicast@0.3.5)(rollup@4.44.0))(rollup@4.44.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.4(rollup@4.44.0) - debug: 4.4.1 + debug: 4.4.3 error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 open: 10.1.0 perfect-debounce: 1.0.0 picocolors: 1.1.1 - sirv: 3.0.1 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + sirv: 3.0.2 + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) optionalDependencies: '@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@4.44.0) transitivePeerDependencies: - rollup - supports-color - vite-plugin-solid@2.11.0(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + vite-plugin-solid@2.11.0(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.3(@babel/core@7.27.4) + babel-preset-solid: 1.9.3(@babel/core@7.29.0) merge-anything: 5.1.7 solid-js: 1.9.3 solid-refresh: 0.6.3(solid-js@1.9.3) - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vitefu: 1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) + vitefu: 1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) optionalDependencies: '@testing-library/jest-dom': 6.6.3 transitivePeerDependencies: - supports-color - vite-plugin-vue-inspector@5.3.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + vite-plugin-vue-inspector@5.3.1(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - '@babel/core': 7.27.4 - '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.27.4) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.27.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.4) - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) - '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.27.4) + '@babel/core': 7.29.0 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.29.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.29.0) '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 - magic-string: 0.30.17 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + magic-string: 0.30.21 + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - supports-color - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): dependencies: debug: 4.4.1 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.8.3) optionalDependencies: - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.37.0): + vite@5.4.11(@types/node@25.5.0)(lightningcss@1.29.3)(terser@5.46.1): dependencies: esbuild: 0.21.5 postcss: 8.4.49 @@ -41769,9 +41814,9 @@ snapshots: '@types/node': 25.5.0 fsevents: 2.3.3 lightningcss: 1.29.3 - terser: 5.37.0 + terser: 5.46.1 - vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): + vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0): dependencies: esbuild: 0.25.5 fdir: 6.4.4(picomatch@4.0.2) @@ -41784,11 +41829,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.3 - terser: 5.37.0 + terser: 5.46.1 tsx: 4.19.2 - yaml: 2.7.0 + yaml: 2.9.0 - vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): + vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0): dependencies: esbuild: 0.25.5 fdir: 6.4.4(picomatch@4.0.2) @@ -41801,109 +41846,82 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.3 - terser: 5.37.0 + terser: 5.46.1 tsx: 4.19.2 - yaml: 2.7.0 + yaml: 2.9.0 - vitefu@1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)): + vitefu@1.0.5(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): optionalDependencies: - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) - vitest-browser-react@0.3.0(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(@vitest/browser@3.2.4)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(vitest@3.2.4): + vitest-browser-react@2.2.0(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.2(react@19.2.2))(react@19.2.2)(vitest@4.1.10): dependencies: - '@vitest/browser': 3.2.4(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.2.4) react: 19.2.2 react-dom: 19.2.2(react@19.2.2) - vitest: 3.2.4(@types/node@22.12.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 4.1.10(@types/node@22.12.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) optionalDependencies: '@types/react': 19.2.7 '@types/react-dom': 19.2.3(@types/react@19.2.7) - vitest@3.2.4(@types/node@22.12.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 - magic-string: 0.30.17 + vitest@4.1.10(@types/node@22.12.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 pathe: 2.0.3 - picomatch: 4.0.2 - std-env: 3.9.0 + picomatch: 4.0.4 + std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: 6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.12.0 - '@vitest/browser': 3.2.4(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.2.4) + '@vitest/browser-playwright': 4.1.10(msw@2.7.5(@types/node@22.12.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/coverage-istanbul': 4.1.10(vitest@4.1.10) happy-dom: 16.3.0 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@3.2.4(@types/node@25.5.0)(@vitest/browser@3.2.4)(happy-dom@16.3.0)(jiti@2.4.2)(lightningcss@1.29.3)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 - magic-string: 0.30.17 + vitest@4.1.10(@types/node@25.5.0)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-istanbul@4.1.10)(happy-dom@16.3.0)(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.4 pathe: 2.0.3 - picomatch: 4.0.2 - std-env: 3.9.0 + picomatch: 4.0.4 + std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) - vite-node: 3.2.4(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.1 + vite: 6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.5.0 - '@vitest/browser': 3.2.4(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.2.4) + '@vitest/browser-playwright': 4.1.10(msw@2.7.5(@types/node@25.5.0)(typescript@5.8.3))(playwright@1.52.0)(vite@6.3.5(@types/node@25.5.0)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.46.1)(tsx@4.19.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/coverage-istanbul': 4.1.10(vitest@4.1.10) happy-dom: 16.3.0 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml vlq@1.0.1: {} @@ -41948,7 +41966,7 @@ snapshots: volar-service-typescript@0.0.62(@volar/language-service@2.4.11): dependencies: path-browserify: 1.0.1 - semver: 7.7.2 + semver: 7.7.4 typescript-auto-import-cache: 0.3.5 vscode-languageserver-textdocument: 1.0.12 vscode-nls: 5.2.0 @@ -41992,7 +42010,7 @@ snapshots: vscode-languageclient@7.0.0: dependencies: minimatch: 3.1.2 - semver: 7.7.2 + semver: 7.7.4 vscode-languageserver-protocol: 3.16.0 vscode-languageserver-protocol@3.16.0: @@ -42025,7 +42043,7 @@ snapshots: vue-bundle-renderer@2.1.1: dependencies: - ufo: 1.6.1 + ufo: 1.6.3 vue-demi@0.14.10(vue@3.5.13(typescript@5.8.3)): dependencies: @@ -42380,6 +42398,8 @@ snapshots: ws@8.20.0: {} + ws@8.21.3: {} + xcode@3.0.1: dependencies: simple-plist: 1.3.1 @@ -42438,6 +42458,9 @@ snapshots: yaml@2.7.0: {} + yaml@2.9.0: + optional: true + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 diff --git a/tooling/tsconfig/package.json b/tooling/tsconfig/package.json index 792a376032..c09bda69cc 100644 --- a/tooling/tsconfig/package.json +++ b/tooling/tsconfig/package.json @@ -6,8 +6,8 @@ "base.json" ], "dependencies": { - "@effect/language-service": "0.84.3", - "effect": "3.21.0", + "@effect/language-service": "0.87.2", + "effect": "4.0.0-rc.110", "typescript": "5.8.3" } } diff --git a/tooling/vitest-config/configs/base-config.js b/tooling/vitest-config/configs/base-config.js index c7d5b5799d..7b5c196366 100644 --- a/tooling/vitest-config/configs/base-config.js +++ b/tooling/vitest-config/configs/base-config.js @@ -1,5 +1,4 @@ import { existsSync, readdirSync } from "fs"; -import { defineConfig, mergeConfig } from "vitest/config"; /** * @@ -29,10 +28,12 @@ const aliases = readdirSync(pkgRoot("")) }), ); -export const baseConfig = defineConfig({ +/** @type {import("vitest/config").ViteUserConfig} */ +export const baseConfig = { test: { silent: "passed-only", mockReset: true, + setupFiles: [new URL("./setup-effect.js", import.meta.url).pathname], coverage: { provider: "istanbul", reporter: [ @@ -47,4 +48,4 @@ export const baseConfig = defineConfig({ }, }, resolve: { alias: aliases }, -}); +}; diff --git a/tooling/vitest-config/configs/setup-effect.js b/tooling/vitest-config/configs/setup-effect.js new file mode 100644 index 0000000000..da6c5e2156 --- /dev/null +++ b/tooling/vitest-config/configs/setup-effect.js @@ -0,0 +1,14 @@ +/** + * Vitest browser mode defines `setImmediate` on `globalThis` with an + * `undefined` value. Effect's scheduler feature-detects `setImmediate` with an + * `in` check, so the broken stub makes every scheduled task die with + * `TypeError: globalThis.setImmediate is not a function`. Remove the stub so + * Effect falls back to `setTimeout` like it does in real browsers. + * This must run before `effect` is imported. + */ +if ( + "setImmediate" in globalThis && + typeof globalThis.setImmediate !== "function" +) { + delete globalThis.setImmediate; +} diff --git a/tooling/vitest-config/package.json b/tooling/vitest-config/package.json index 1eda07b405..df00b839d5 100644 --- a/tooling/vitest-config/package.json +++ b/tooling/vitest-config/package.json @@ -8,12 +8,12 @@ }, "devDependencies": { "@uploadthing/tsconfig": "workspace:*", - "@vitest/browser": "3.2.4", - "@vitest/coverage-istanbul": "3.2.4", + "@vitest/browser": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", "jsonc-parser": "^3.3.1", "nyc": "17.1.0", "playwright": "1.52.0", "typescript": "5.8.3", - "vitest": "3.2.4" + "vitest": "4.1.10" } }