Repository: colinhacks/zod
Pull request #4090 (2025-04-11 06:53:53)

`.toJSONSchema()` Fix optional behaviour
https://github.com/colinhacks/zod/issues/4089

`.optional()` and `.nonoptional()` shouldn't actually change our type as optionality and nullability are different things.

I've changed it to just pipe through our inner type.


Patch:
diff --git a/package.json b/package.json
index e9a2a740..8eb035e5 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "private": true,
   "type": "module",
-  "packageManager": "pnpm@9.1.4",
+  "packageManager": "pnpm@10.8.0",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/colinhacks/zod.git"
@@ -19,11 +19,11 @@
     "@biomejs/biome": "^1.9.4",
     "@types/benchmark": "^2.1.5",
     "@types/chalk": "^2.2.4",
-    "@types/node": "^20.17.14",
+    "@types/node": "^20.17.30",
     "@web-std/file": "^3.0.3",
     "@zod/core": "workspace:*",
     "@zod/mini": "workspace:*",
-    "arktype": "^2.0.0",
+    "arktype": "^2.1.19",
     "benchmark": "^2.1.4",
     "chalk": "^5.4.1",
     "console-table-printer": "^2.12.1",
@@ -32,14 +32,14 @@
     "jsr": "^0.12.4",
     "lint-staged": "^12.5.0",
     "mitata": "^0.1.14",
-    "prettier": "^3.4.2",
+    "prettier": "^3.5.3",
     "tinybench": "^2.9.0",
     "ts-morph": "^14.0.0",
     "tshy": "^3.0.2",
     "tslib": "^2.8.1",
-    "tsx": "^4.19.2",
-    "typescript": "~5.5.0",
-    "vitest": "^2.0.0",
+    "tsx": "^4.19.3",
+    "typescript": "~5.5.4",
+    "vitest": "^2.1.9",
     "zod": "workspace:*"
   },
   "lint-staged": {
diff --git a/packages/bench/object.ts b/packages/bench/object.ts
index d6d8cb96..decc285f 100644
--- a/packages/bench/object.ts
+++ b/packages/bench/object.ts
@@ -1,24 +1,49 @@
-import { zodbench } from "./zodbench.js";
-
-const bench = zodbench({
-  name: "z.object().parse",
-  batch: 1000,
-  schema(z) {
-    return z.object({
-      string: z.string(),
-      boolean: z.boolean(),
-      number: z.number(),
-    });
+import * as z4 from "zod";
+import * as z3 from "zod3";
+import { metabench } from "./metabench.js";
+import * as v from "valibot";
+import { type } from 'arktype';
+
+const z3Schema = z3.object({
+  string: z3.string(),
+  boolean: z3.boolean(),
+  number: z3.number(),
+});
+
+const z4Schema = z4.object({
+  string: z4.string(),
+  boolean: z4.boolean(),
+  number: z4.number(),
+});
+
+const valibotSchema = v.object({
+  string: v.string(),
+  boolean: v.boolean(),
+  number: v.number(),
+});
+
+const DATA = Array.from({ length: 1000 }, () =>
+  Object.freeze({
+    number: Math.random(),
+    string: `${Math.random()}`,
+    boolean: Math.random() > 0.5,
+  })
+);
+
+console.log(z3Schema.parse(DATA[0]));
+console.log(z4Schema.parse(DATA[0]));
+console.log(v.parse(valibotSchema, DATA[0]));
+
+
+const bench = metabench("z.object().parse", {
+  zod3() {
+    for (const d of DATA) z3Schema.parse(d);
   },
-  data() {
-    return Object.freeze({
-      number: Math.random(),
-      string: `${Math.random()}`,
-      boolean: Math.random() > 0.5,
-    });
+  zod4() {
+    for (const d of DATA) z4Schema.parse(d);
   },
-  benchmark(d) {
-    this.schema.parse(d);
+  valibot() {
+    for (const d of DATA) v.parse(valibotSchema, d);
   },
 });
 
diff --git a/packages/bench/package.json b/packages/bench/package.json
index 497fbe87..67f0bd06 100644
--- a/packages/bench/package.json
+++ b/packages/bench/package.json
@@ -4,10 +4,10 @@
   "type": "module",
   "devDependencies": {
     "@zod/core": "workspace:*",
-    "zod": "workspace:*",
     "@zod/mini": "workspace:*",
-    "zod3": "npm:zod@3.23.7",
-    "arktype": "2.0.0",
-    "valibot": "1.0.0-rc.2"
+    "arktype": "^2.1.19",
+    "valibot": "^1.0.0",
+    "zod": "workspace:*",
+    "zod3": "npm:zod@^3.23.7"
   }
 }
diff --git a/packages/core/src/doc.ts b/packages/core/src/doc.ts
index 4f1d046f..ffb7bd72 100644
--- a/packages/core/src/doc.ts
+++ b/packages/core/src/doc.ts
@@ -1,12 +1,12 @@
 type ModeWriter = (doc: Doc, modes: { execution: "sync" | "async" }) => void;
 
 export class Doc {
-  args: string[];
+  args!: string[];
   content: string[] = [];
   indent = 0;
 
-  constructor(args: string[]) {
-    this.args = args;
+  constructor(args: string[] = []) {
+    if (this) this.args = args;
   }
 
   indented(fn: (doc: Doc) => void) {
@@ -34,7 +34,9 @@ export class Doc {
   }
 
   compile() {
-    const lines = [...this.content.map((x) => `  ${x}`)];
-    return new Function(...this.args, lines.join("\n"));
+    const args = this?.args;
+    const content = this?.content ?? [``];
+    const lines = [...content.map((x) => `  ${x}`)];
+    return new Function(...args, lines.join("\n"));
   }
 }
diff --git a/packages/core/src/errors.ts b/packages/core/src/errors.ts
index 7c3ca641..397c017e 100644
--- a/packages/core/src/errors.ts
+++ b/packages/core/src/errors.ts
@@ -169,12 +169,17 @@ export interface $ZodErrorMap<T extends $ZodIssueBase = $ZodIssue> {
 ////////////////////////    ERROR CLASS   ////////////////////////
 
 const ZOD_ERROR: symbol = Symbol.for("{{zod.error}}");
+export interface $ZodError<T = unknown> extends Error {
+  _zod: { type: T };
+  stack?: string;
+  name: string;
+}
 export class $ZodError<T = unknown> implements Error {
   /** @deprecated Virtual property, do not access. */
-  _zod!: { type: T };
+
   public issues: $ZodIssue[];
-  name!: string;
-  stack?: string;
+
+  // stack?: string;
 
   get message(): string {
     return JSON.stringify(this.issues, jsonStringifyReplacer, 2);
diff --git a/packages/core/src/function.ts b/packages/core/src/function.ts
index 01c22f82..00ac0906 100644
--- a/packages/core/src/function.ts
+++ b/packages/core/src/function.ts
@@ -117,6 +117,8 @@ export interface $ZodFunctionParams<I extends $ZodFunctionArgs, O extends schema
   input?: I;
   output?: O;
 }
+
+function _function(): $ZodFunction;
 function _function<
   const In extends Array<schemas.$ZodType> = Array<schemas.$ZodType>,
   Out extends schemas.$ZodType = schemas.$ZodType,
diff --git a/packages/core/src/locales/en.ts b/packages/core/src/locales/en.ts
index e27018c2..55ecf50e 100644
--- a/packages/core/src/locales/en.ts
+++ b/packages/core/src/locales/en.ts
@@ -27,7 +27,8 @@ export const parsedType = (data: any): string => {
       if (data === null) {
         return "null";
       }
-      if (Object.getPrototypeOf(data) !== Object.prototype) {
+
+      if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
         return data.constructor.name;
       }
     }
@@ -38,7 +39,7 @@ export const parsedType = (data: any): string => {
 const Nouns: {
   [k in $ZodStringFormats | (string & {})]?: string;
 } = {
-  regex: "string",
+  regex: "input",
   email: "email address",
   url: "URL",
   emoji: "emoji",
@@ -65,6 +66,7 @@ const Nouns: {
   json_string: "JSON string",
   e164: "E.164 number",
   jwt: "JWT",
+  template_literal: "input",
 };
 
 const error: errors.$ZodErrorMap = (issue) => {
diff --git a/packages/core/src/schemas.ts b/packages/core/src/schemas.ts
index e30f3b1f..96cb935b 100644
--- a/packages/core/src/schemas.ts
+++ b/packages/core/src/schemas.ts
@@ -199,8 +199,7 @@ export const $ZodType: core.$constructor<$ZodType> = /*@__PURE__*/ core.$constru
           throw new core.$ZodAsyncError();
         }
         if (asyncResult || _ instanceof Promise) {
-          asyncResult = asyncResult ?? Promise.resolve();
-          asyncResult.then(async () => {
+          asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {
             await _;
             const nextLen = payload.issues.length;
             if (nextLen === currLen) return;
@@ -239,11 +238,11 @@ export const $ZodType: core.$constructor<$ZodType> = /*@__PURE__*/ core.$constru
       if (result instanceof Promise) {
         return result.then(({ issues, value }) => {
           if (issues.length === 0) return { value } as any;
-          return { issues };
+          return { issues: issues.map((iss) => util.finalizeIssue(iss, {}, core.config())) };
         });
       }
       if (result.issues.length === 0) return { value: result.value } as any;
-      return { issues: result.issues };
+      return { issues: result.issues.map((iss) => util.finalizeIssue(iss, {}, core.config())) };
     },
     vendor: "zod",
     version: 1 as const,
@@ -1483,7 +1482,7 @@ export interface $ZodObjectLikeDef<out Shape extends $ZodShape = $ZodShape> exte
 
 export interface $ZodObjectLikeInternals<out O = object, out I = object> extends $ZodTypeInternals<O, I> {
   def: $ZodObjectLikeDef;
-  shape: $ZodShape;
+  // shape: $ZodShape;
   extra: Record<string, unknown>;
   optional: string;
   defaulted: string;
@@ -1524,7 +1523,7 @@ export const $ZodObjectLike: core.$constructor<$ZodObjectLike> = /*@__PURE__*/ c
   "$ZodObjectLike",
   (inst, def) => {
     $ZodType.init(inst, def);
-    util.defineLazy(inst._zod, "shape", () => def.shape);
+    // util.defineLazy(inst._zod, "shape", () => def.shape);
 
     const _normalized = util.cached(() => {
       const keys = Object.keys(def.shape);
@@ -1684,7 +1683,7 @@ export const $ZodObjectLike: core.$constructor<$ZodObjectLike> = /*@__PURE__*/ c
 
     let fastpass!: ReturnType<typeof generateFastpass>;
     const fastEnabled = util.allowsEval.value; // && !def.catchall;
-    const isObject = util.isObject;
+    const isObject = util.isPlainObject;
     const { catchall } = def;
 
     let value!: typeof _normalized.value;
@@ -1852,7 +1851,7 @@ export interface $ZodInterfaceInternals<
 > extends $ZodObjectLikeInternals<$InferInterfaceOutput<Shape, Params>, $InferInterfaceInput<Shape, Params>> {
   subtype: "interface";
   def: $ZodInterfaceDef<Shape>;
-  shape: Shape;
+  // shape: Shape;
   optional: Params["optional"];
   defaulted: Params["defaulted"];
   extra: Params["extra"];
@@ -2047,16 +2046,23 @@ export interface $ZodDiscriminatedUnion<T extends readonly $ZodType[] = readonly
 }
 
 function matchDiscriminators(input: any, discs: util.DiscriminatorMap): boolean {
+  let matched = true;
   for (const [key, value] of discs) {
     const data = input?.[key];
-    if (value.values.has(data)) return true;
+
+    if (value.values.size && !value.values.has(data)) {
+      matched = false;
+    }
     if (value.maps.length > 0) {
       for (const m of value.maps) {
-        if (matchDiscriminators(data, m)) return true;
+        if (!matchDiscriminators(data, m)) {
+          matched = false;
+        }
       }
     }
   }
-  return false;
+
+  return matched;
 }
 
 export const $ZodDiscriminatedUnion: core.$constructor<$ZodDiscriminatedUnion> =
@@ -3522,9 +3528,9 @@ export const $ZodTemplateLiteral: core.$constructor<$ZodTemplateLiteral> = /*@__
         payload.issues.push({
           input: payload.value,
           inst,
-          expected: "template_literal",
-          code: "invalid_type",
-          pattern: inst._zod.pattern,
+          code: "invalid_format",
+          format: "template_literal",
+          pattern: inst._zod.pattern.source,
         });
         return payload;
       }
@@ -3633,8 +3639,6 @@ export interface $ZodCustom<O = unknown, I = unknown> extends $ZodType {
 }
 
 export const $ZodCustom: core.$constructor<$ZodCustom> = /*@__PURE__*/ core.$constructor("$ZodCustom", (inst, def) => {
-  // if (def.checks?.length) console.warn("Can't add custom checks to z.custom()");
-
   checks.$ZodCheck.init(inst, def);
   $ZodType.init(inst, def);
 
diff --git a/packages/core/src/to-json-schema.ts b/packages/core/src/to-json-schema.ts
index e9d9c2e8..9d796dff 100644
--- a/packages/core/src/to-json-schema.ts
+++ b/packages/core/src/to-json-schema.ts
@@ -168,7 +168,8 @@ export class JSONSchemaGenerator {
         // custom pattern overrides format
         if (format) {
           json.format = formatMap[format] ?? format;
-        } else if (pattern) {
+        }
+        if (pattern) {
           json.pattern = pattern.source;
         }
         if (contentEncoding) json.contentEncoding = contentEncoding;
@@ -391,7 +392,11 @@ export class JSONSchemaGenerator {
           if (val === undefined) throw new Error("Literal `undefined` cannot be represented in JSON Schema");
           if (typeof val === "bigint") throw new Error("BigInt literals cannot be represented in JSON Schema");
         }
-        json.enum = def.values as any;
+        if (def.values.length === 1) {
+          json.const = def.values[0] as any;
+        } else {
+          json.enum = def.values as any;
+        }
         break;
       }
       case "file": {
@@ -408,8 +413,7 @@ export class JSONSchemaGenerator {
       }
       case "optional": {
         const inner = this.process(def.innerType, params);
-        const json: JSONSchema.BaseSchema = _json as any;
-        json!.oneOf = [inner, { type: "null" }];
+        Object.assign(_json, inner);
         break;
       }
       case "nullable": {
@@ -420,7 +424,6 @@ export class JSONSchemaGenerator {
       case "nonoptional": {
         const inner = this.process(def.innerType, params);
         Object.assign(_json, inner);
-        _json.not = { type: "null" };
         break;
       }
       case "success": {
diff --git a/packages/core/src/util.ts b/packages/core/src/util.ts
index f24a2861..122dfbb3 100644
--- a/packages/core/src/util.ts
+++ b/packages/core/src/util.ts
@@ -561,10 +561,10 @@ export type InitInterfaceParams<T extends schemas.$ZodLooseShape, Extra extends
 }>;
 
 export type MergeOptional<A extends schemas.$ZodInterface, B extends schemas.$ZodInterface> =
-  | Exclude<A["_zod"]["optional"], keyof B["_zod"]["shape"]>
+  | Exclude<A["_zod"]["optional"], keyof B["_zod"]["def"]["shape"]>
   | B["_zod"]["optional"];
 export type MergeDefaulted<A extends schemas.$ZodInterface, B extends schemas.$ZodInterface> =
-  | Exclude<A["_zod"]["defaulted"], keyof B["_zod"]["shape"]>
+  | Exclude<A["_zod"]["defaulted"], keyof B["_zod"]["def"]["shape"]>
   | B["_zod"]["defaulted"];
 
 export type MergeInterfaceParams<
@@ -572,8 +572,8 @@ export type MergeInterfaceParams<
   B extends schemas.$ZodInterface,
   // BKeys extends PropertyKey,
 > = Identity<{
-  optional: Exclude<A["_zod"]["optional"], keyof B["_zod"]["shape"]> | B["_zod"]["optional"];
-  defaulted: Exclude<A["_zod"]["defaulted"], keyof B["_zod"]["shape"]> | B["_zod"]["defaulted"];
+  optional: Exclude<A["_zod"]["optional"], keyof B["_zod"]["def"]["shape"]> | B["_zod"]["optional"];
+  defaulted: Exclude<A["_zod"]["defaulted"], keyof B["_zod"]["def"]["shape"]> | B["_zod"]["defaulted"];
   extra: A["_zod"]["extra"];
 }>;
 
diff --git a/packages/core/src/versions.ts b/packages/core/src/versions.ts
index ebf2e892..d8be5fb3 100644
--- a/packages/core/src/versions.ts
+++ b/packages/core/src/versions.ts
@@ -1,5 +1,5 @@
 export const version = {
   major: 0,
-  minor: 3,
-  patch: 3 as number,
+  minor: 4,
+  patch: 6 as number,
 } as const;
diff --git a/packages/docs/app/layout.config.tsx b/packages/docs/app/layout.config.tsx
index 274fd639..c023d820 100644
--- a/packages/docs/app/layout.config.tsx
+++ b/packages/docs/app/layout.config.tsx
@@ -3,7 +3,7 @@ import Logo from "@/public/logo/logo.png";
 import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared";
 import Image from "next/image";
 export const logo = (
-  <div className="mb-2">
+  <div className="md:mb-2">
     <Image alt="Zod logo" src={Logo} sizes="100px" className="hidden dark:block w-8 md:w-8" aria-label="Zod logo" />
     <Image alt="Zod logo" src={Logo} sizes="100px" className="block dark:hidden w-8 md:w-8" aria-label="Zod logo" />
   </div>
diff --git a/packages/docs/components/ecosystem.tsx b/packages/docs/components/ecosystem.tsx
index d921ac5b..f908d907 100644
--- a/packages/docs/components/ecosystem.tsx
+++ b/packages/docs/components/ecosystem.tsx
@@ -17,19 +17,494 @@ const apiLibraries: ZodResource[] = [
     description: "Build end-to-end typesafe APIs without GraphQL.",
     slug: "trpc/trpc",
   },
+  {
+    name: "@anatine/zod-nestjs",
+    url: "https://github.com/anatine/zod-plugins/tree/main/packages/zod-nestjs",
+    description: "Helper methods for using Zod in a NestJS project.",
+    slug: "anatine/zod-plugins",
+  },
+  {
+    name: "zod-endpoints",
+    url: "https://github.com/flock-community/zod-endpoints",
+    description: "Contract-first strictly typed endpoints with Zod. OpenAPI compatible.",
+    slug: "flock-community/zod-endpoints",
+  },
+  {
+    name: "zhttp",
+    url: "https://github.com/evertdespiegeleer/zhttp",
+    description: "An OpenAPI compatible, strictly typed http library with Zod input and response validation.",
+    slug: "evertdespiegeleer/zhttp",
+  },
+  {
+    name: "domain-functions",
+    url: "https://github.com/SeasonedSoftware/domain-functions/",
+    description:
+      "Decouple your business logic from your framework using composable functions. With first-class type inference from end to end powered by Zod schemas.",
+    slug: "SeasonedSoftware/domain-functions",
+  },
+  {
+    name: "@zodios/core",
+    url: "https://github.com/ecyrbe/zodios",
+    description: "A typescript API client with runtime and compile time validation backed by axios and zod.",
+    slug: "ecyrbe/zodios",
+  },
+  {
+    name: "express-zod-api",
+    url: "https://github.com/RobinTail/express-zod-api",
+    description: "Build Express-based APIs with I/O schema validation and custom middlewares.",
+    slug: "RobinTail/express-zod-api",
+  },
+  {
+    name: "tapiduck",
+    url: "https://github.com/sumukhbarve/monoduck/blob/main/src/tapiduck/README.md",
+    description: "End-to-end typesafe JSON APIs with Zod and Express; a bit like tRPC, but simpler.",
+    slug: "sumukhbarve/monoduck",
+  },
+  {
+    name: "koa-zod-router",
+    url: "https://github.com/JakeFenley/koa-zod-router",
+    description: "Create typesafe routes in Koa with I/O validation using Zod.",
+    slug: "JakeFenley/koa-zod-router",
+  },
+  {
+    name: "zod-sockets",
+    url: "https://github.com/RobinTail/zod-sockets",
+    description: "Zod-powered Socket.IO microframework with I/O validation and built-in AsyncAPI specs",
+    slug: "RobinTail/zod-sockets",
+  },
+  {
+    name: "oas-tszod-gen",
+    url: "https://github.com/inkognitro/oas-tszod-gen",
+    description:
+      "Client SDK code generator to convert OpenApi v3 specifications into TS endpoint caller functions with Zod types.",
+    slug: "inkognitro/oas-tszod-gen",
+  },
+  {
+    name: "GQLoom",
+    url: "https://github.com/modevol-com/gqloom",
+    description: "Weave GraphQL schema and resolvers using Zod.",
+    slug: "modevol-com/gqloom",
+  },
 ];
 
-const formIntegrations: ZodResource[] = [];
+const formIntegrations: ZodResource[] = [
+  {
+    name: "react-hook-form",
+    url: "https://github.com/react-hook-form/resolvers#zod",
+    description: "A first-party Zod resolver for React Hook Form.",
+    slug: "react-hook-form/react-hook-form",
+  },
+  {
+    name: "zod-validation-error",
+    url: "https://github.com/causaly/zod-validation-error",
+    description: "Generate user-friendly error messages from ZodError instances.",
+    slug: "causaly/zod-validation-error",
+  },
+  {
+    name: "zod-formik-adapter",
+    url: "https://github.com/robertLichtnow/zod-formik-adapter",
+    description: "A community-maintained Formik adapter for Zod.",
+    slug: "robertLichtnow/zod-formik-adapter",
+  },
+  {
+    name: "react-zorm",
+    url: "https://github.com/esamattis/react-zorm",
+    description: "Standalone `<form>` generation and validation for React using Zod.",
+    slug: "esamattis/react-zorm",
+  },
+  {
+    name: "zodix",
+    url: "https://github.com/rileytomasek/zodix",
+    description: "Zod utilities for FormData and URLSearchParams in Remix loaders and actions.",
+    slug: "rileytomasek/zodix",
+  },
+  {
+    name: "conform",
+    url: "https://conform.guide/api/zod/parseWithZod",
+    description:
+      "A typesafe form validation library for progressive enhancement of HTML forms. Works with Remix and Next.js.",
+    slug: "edmundhung/conform",
+  },
+  {
+    name: "remix-params-helper",
+    url: "https://github.com/kiliman/remix-params-helper",
+    description: "Simplify integration of Zod with standard URLSearchParams and FormData for Remix apps.",
+    slug: "kiliman/remix-params-helper",
+  },
+  {
+    name: "formik-validator-zod",
+    url: "https://github.com/glazy/formik-validator-zod",
+    description: "Formik-compliant validator library that simplifies using Zod with Formik.",
+    slug: "glazy/formik-validator-zod",
+  },
+  {
+    name: "zod-i18n-map",
+    url: "https://github.com/aiji42/zod-i18n",
+    description: "Useful for translating Zod error messages.",
+    slug: "aiji42/zod-i18n",
+  },
+  {
+    name: "@modular-forms/solid",
+    url: "https://github.com/fabian-hiller/modular-forms",
+    description: "Modular form library for SolidJS that supports Zod for validation.",
+    slug: "fabian-hiller/modular-forms",
+  },
+  {
+    name: "houseform",
+    url: "https://github.com/crutchcorn/houseform/",
+    description: "A React form library that uses Zod for validation.",
+    slug: "crutchcorn/houseform",
+  },
+  {
+    name: "sveltekit-superforms",
+    url: "https://github.com/ciscoheat/sveltekit-superforms",
+    description: "Supercharged form library for SvelteKit with Zod validation.",
+    slug: "ciscoheat/sveltekit-superforms",
+  },
+  {
+    name: "mobx-zod-form",
+    url: "https://github.com/MonoidDev/mobx-zod-form",
+    description: "Data-first form builder based on MobX & Zod.",
+    slug: "MonoidDev/mobx-zod-form",
+  },
+  {
+    name: "@vee-validate/zod",
+    url: "https://github.com/logaretm/vee-validate/tree/main/packages/zod",
+    description: "Form library for Vue.js with Zod schema validation.",
+    slug: "logaretm/vee-validate",
+  },
+  {
+    name: "zod-form-renderer",
+    url: "https://github.com/thepeaklab/zod-form-renderer",
+    description: "Auto-infer form fields from zod schema and render them with react-hook-form with E2E type safety.",
+    slug: "thepeaklab/zod-form-renderer",
+  },
+  {
+    name: "antd-zod",
+    url: "https://github.com/MrBr/antd-zod",
+    description: "Zod adapter for Ant Design form fields validation.",
+    slug: "MrBr/antd-zod",
+  },
+  {
+    name: "frrm",
+    url: "https://github.com/schalkventer/frrm",
+    description: "Tiny 0.5kb Zod-based, HTML form abstraction that goes brr.",
+    slug: "schalkventer/frrm",
+  },
+];
 
-const zodToXConverters: ZodResource[] = [];
+const zodToXConverters: ZodResource[] = [
+  {
+    name: "zod-to-ts",
+    url: "https://github.com/sachinraja/zod-to-ts",
+    description: "Generate TypeScript definitions from Zod schemas.",
+    slug: "sachinraja/zod-to-ts",
+  },
+  {
+    name: "zod-to-json-schema",
+    url: "https://github.com/StefanTerdell/zod-to-json-schema",
+    description: "Convert your Zod schemas into JSON Schemas.",
+    slug: "StefanTerdell/zod-to-json-schema",
+  },
+  {
+    name: "@anatine/zod-openapi",
+    url: "https://github.com/anatine/zod-plugins/tree/main/packages/zod-openapi",
+    description: "Converts a Zod schema to an OpenAPI v3.x `SchemaObject`.",
+    slug: "anatine/zod-plugins",
+  },
+  {
+    name: "zod-fast-check",
+    url: "https://github.com/DavidTimms/zod-fast-check",
+    description: "Generate `fast-check` arbitraries from Zod schemas.",
+    slug: "DavidTimms/zod-fast-check",
+  },
+  {
+    name: "zod-dto",
+    url: "https://github.com/kbkk/abitia/tree/master/packages/zod-dto",
+    description: "Generate Nest.js DTOs from a Zod schema.",
+    slug: "kbkk/abitia",
+  },
+  {
+    name: "fastify-type-provider-zod",
+    url: "https://github.com/turkerdev/fastify-type-provider-zod",
+    description: "Create Fastify type providers from Zod schemas.",
+    slug: "turkerdev/fastify-type-provider-zod",
+  },
+  {
+    name: "zod-to-openapi",
+    url: "https://github.com/asteasolutions/zod-to-openapi",
+    description: "Generate full OpenAPI (Swagger) docs from Zod, including schemas, endpoints & parameters.",
+    slug: "asteasolutions/zod-to-openapi",
+  },
+  {
+    name: "nestjs-graphql-zod",
+    url: "https://github.com/incetarik/nestjs-graphql-zod",
+    description:
+      "Generates NestJS GraphQL model classes from Zod schemas. Provides GraphQL method decorators working with Zod schemas.",
+    slug: "incetarik/nestjs-graphql-zod",
+  },
+  {
+    name: "zod-openapi",
+    url: "https://github.com/samchungy/zod-openapi",
+    description: "Create full OpenAPI v3.x documentation from Zod schemas.",
+    slug: "samchungy/zod-openapi",
+  },
+  {
+    name: "fastify-zod-openapi",
+    url: "https://github.com/samchungy/fastify-zod-openapi",
+    description: "Fastify type provider, validation, serialization and @fastify/swagger support for Zod schemas.",
+    slug: "samchungy/fastify-zod-openapi",
+  },
+  {
+    name: "typeschema",
+    url: "https://typeschema.com/",
+    description: "Universal adapter for schema validation.",
+    slug: "decs/typeschema",
+  },
+  {
+    name: "zodex",
+    url: "https://github.com/commonbaseapp/zodex",
+    description: "(De)serialization for zod schemas",
+    slug: "commonbaseapp/zodex",
+  },
+];
 
-const xToZodConverters: ZodResource[] = [];
+const xToZodConverters: ZodResource[] = [
+  {
+    name: "ts-to-zod",
+    url: "https://github.com/fabien0102/ts-to-zod",
+    description: "Convert TypeScript definitions into Zod schemas.",
+    slug: "fabien0102/ts-to-zod",
+  },
+  {
+    name: "@runtyping/zod",
+    url: "https://github.com/johngeorgewright/runtyping",
+    description: "Generate Zod from static types & JSON schema.",
+    slug: "johngeorgewright/runtyping",
+  },
+  {
+    name: "json-schema-to-zod",
+    url: "https://github.com/StefanTerdell/json-schema-to-zod",
+    description: "Convert your JSON Schemas into Zod schemas.",
+    slug: "StefanTerdell/json-schema-to-zod",
+  },
+  {
+    name: "json-to-zod",
+    url: "https://github.com/rsinohara/json-to-zod",
+    description: "Convert JSON objects into Zod schemas.",
+    slug: "rsinohara/json-to-zod",
+  },
+  {
+    name: "GraphQL schema gen",
+    url: "https://github.com/Code-Hex/graphql-codegen-typescript-validation-schema",
+    description: "GraphQL Code Generator plugin to generate form validation schema from your GraphQL schema.",
+    slug: "Code-Hex/graphql-codegen-typescript-validation-schema",
+  },
+  {
+    name: "zod-prisma",
+    url: "https://github.com/CarterGrimmeisen/zod-prisma",
+    description: "Generate Zod schemas from your Prisma schema.",
+    slug: "CarterGrimmeisen/zod-prisma",
+  },
+  {
+    name: "Supervillain",
+    url: "https://github.com/Southclaws/supervillain",
+    description: "Generate Zod schemas from your Go structs.",
+    slug: "Southclaws/supervillain",
+  },
+  {
+    name: "prisma-zod-generator",
+    url: "https://github.com/omar-dulaimi/prisma-zod-generator",
+    description: "Emit Zod schemas from your Prisma schema.",
+    slug: "omar-dulaimi/prisma-zod-generator",
+  },
+  {
+    name: "drizzle-zod",
+    url: "https://orm.drizzle.team/docs/zod",
+    description: "Emit Zod schemas from your Drizzle schema.",
+    slug: "drizzle-team/drizzle-orm",
+  },
+  {
+    name: "prisma-trpc-generator",
+    url: "https://github.com/omar-dulaimi/prisma-trpc-generator",
+    description: "Emit fully implemented tRPC routers and their validation schemas using Zod.",
+    slug: "omar-dulaimi/prisma-trpc-generator",
+  },
+  {
+    name: "zod-prisma-types",
+    url: "https://github.com/chrishoermann/zod-prisma-types",
+    description: "Create Zod types from your Prisma models.",
+    slug: "chrishoermann/zod-prisma-types",
+  },
+  {
+    name: "quicktype",
+    url: "https://app.quicktype.io/",
+    description: "Convert JSON objects and JSON schemas into Zod schemas.",
+    slug: "glideapps/quicktype",
+  },
+  {
+    name: "@sanity-typed/zod",
+    url: "https://github.com/saiichihashimoto/sanity-typed/tree/main/packages/zod",
+    description: "Generate Zod Schemas from Sanity Schemas.",
+    slug: "saiichihashimoto/sanity-typed",
+  },
+  {
+    name: "java-to-zod",
+    url: "https://github.com/ivangreene/java-to-zod",
+    description: "Convert POJOs to Zod schemas",
+    slug: "ivangreene/java-to-zod",
+  },
+  {
+    name: "Orval",
+    url: "https://github.com/anymaniax/orval",
+    description: "Generate Zod schemas from OpenAPI schemas",
+    slug: "anymaniax/orval",
+  },
+  {
+    name: "Kubb",
+    url: "https://github.com/kubb-labs/kubb",
+    description: "Generate SDKs and Zod schemas from your OpenAPI schemas",
+    slug: "kubb-labs/kubb",
+  },
+];
 
-const mockingLibraries: ZodResource[] = [];
+const mockingLibraries: ZodResource[] = [
+  {
+    name: "@anatine/zod-mock",
+    url: "https://github.com/anatine/zod-plugins/tree/main/packages/zod-mock",
+    description: "Generate mock data from a Zod schema. Powered by faker.js.",
+    slug: "anatine/zod-plugins",
+  },
+  {
+    name: "zod-mocking",
+    url: "https://github.com/dipasqualew/zod-mocking",
+    description: "Generate mock data from your Zod schemas.",
+    slug: "dipasqualew/zod-mocking",
+  },
+  {
+    name: "zod-fixture",
+    url: "https://github.com/timdeschryver/zod-fixture",
+    description:
+      "Use your zod schemas to automate the generation of non-relevant test fixtures in a deterministic way.",
+    slug: "timdeschryver/zod-fixture",
+  },
+  {
+    name: "zocker",
+    url: "https://zocker.sigrist.dev",
+    description: "Generate plausible mock-data from your schemas.",
+    slug: "LorisSigrist/zocker",
+  },
+  {
+    name: "zodock",
+    url: "https://github.com/ItMaga/zodock",
+    description: "Generate mock data based on Zod schemas.",
+    slug: "ItMaga/zodock",
+  },
+  {
+    name: "zod-schema-faker",
+    url: "https://github.com/soc221b/zod-schema-faker",
+    description: "Generates mock data from Zod schemas. Powered by @faker-js/faker and randexp.js",
+    slug: "soc221b/zod-schema-faker",
+  },
+];
 
-const poweredByZodProjects: ZodResource[] = [];
+const poweredByZodProjects: ZodResource[] = [
+  {
+    name: "freerstore",
+    url: "https://github.com/JacobWeisenburger/freerstore",
+    description: "Firestore cost optimizer.",
+    slug: "JacobWeisenburger/freerstore",
+  },
+  {
+    name: "slonik",
+    url: "https://github.com/gajus/slonik/tree/gajus/add-zod-validation-backwards-compatible#runtime-validation-and-static-type-inference",
+    description: "Node.js Postgres client with strong Zod integration.",
+    slug: "gajus/slonik",
+  },
+  {
+    name: "schemql",
+    url: "https://github.com/a2lix/schemql",
+    description: "Enhances your SQL workflow by combining raw SQL with targeted type safety and schema validation.",
+    slug: "a2lix/schemql",
+  },
+  {
+    name: "soly",
+    url: "https://github.com/mdbetancourt/soly",
+    description: "Create CLI applications with zod.",
+    slug: "mdbetancourt/soly",
+  },
+  {
+    name: "pastel",
+    url: "reesericci/zod-struct",
+    description: "Create CLI applications with react, zod, and ink.",
+    slug: "vadimdemedes/pastel",
+  },
+  {
+    name: "zod-xlsx",
+    url: "https://github.com/sidwebworks/zod-xlsx",
+    description: "A xlsx based resource validator using Zod schemas.",
+    slug: "sidwebworks/zod-xlsx",
+  },
+  {
+    name: "znv",
+    url: "https://github.com/lostfictions/znv",
+    description: "Type-safe environment parsing and validation for Node.js with Zod schemas.",
+    slug: "lostfictions/znv",
+  },
+  {
+    name: "zod-config",
+    url: "https://github.com/alexmarqs/zod-config",
+    description: "Load configurations across multiple sources with flexible adapters, ensuring type safety with Zod.",
+    slug: "alexmarqs/zod-config",
+  },
+  {
+    name: "unplugin-environment",
+    url: "https://github.com/r17x/js/tree/main/packages/unplugin-environment#readme",
+    description:
+      "A plugin for loading environment variables safely with schema validation, simple with virtual module, type-safe with intellisense, and better DX 🔥 🚀 👷. Powered by Zod.",
+    slug: "r17x/js",
+  },
+  {
+    name: "zod-struct",
+    url: "https://codeberg.org/reesericci/zod-struct",
+    description: "Create runtime-checked structs with Zod.",
+    slug: "reesericci/zod-struct",
+    stars: 0,
+  },
+];
 
-const zodUtilities: ZodResource[] = [];
+const zodUtilities: ZodResource[] = [
+  {
+    name: "zod_utilz",
+    url: "https://github.com/JacobWeisenburger/zod_utilz",
+    description: "Framework agnostic utilities for Zod.",
+    slug: "JacobWeisenburger/zod_utilz",
+  },
+  {
+    name: "zod-playground",
+    url: "https://github.com/marilari88/zod-playground",
+    description: "A tool for learning and testing Zod schema validation functionalities.",
+    slug: "marilari88/zod-playground",
+  },
+  {
+    name: "zod-sandbox",
+    url: "https://github.com/nereumelo/zod-sandbox",
+    description: "Controlled environment for testing zod schemas.",
+    slug: "nereumelo/zod-sandbox",
+  },
+  {
+    name: "zod-dev",
+    url: "https://github.com/schalkventer/zod-dev",
+    description: "Conditionally disables Zod runtime parsing in production.",
+    slug: "schalkventer/zod-dev",
+  },
+  {
+    name: "zod-accelerator",
+    url: "https://github.com/duplojs/duplojs-zod-accelerator",
+    description: "Accelerates Zod's throughput up to ~100x.",
+    slug: "duplojs/duplojs-zod-accelerator",
+  },
+];
 
 export {
   apiLibraries,
diff --git a/packages/docs/content/api.mdx b/packages/docs/content/api.mdx
index 4cdc593b..20f3ac51 100644
--- a/packages/docs/content/api.mdx
+++ b/packages/docs/content/api.mdx
@@ -6,7 +6,7 @@ import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
 import { Callout } from "fumadocs-ui/components/callout"
 import { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
 
-To validate data, you must first define a *schema*. Schemas represent *types*, from simple primitive values to complex. nested objects and arrays. 
+To validate data, you must first define a *schema*. Schemas represent *types*, from simple primitive values to complex nested objects and arrays. 
 
 ## Primitives
 
@@ -221,7 +221,7 @@ z.ulid();
 z.ipv4();
 z.ipv6();
 z.cidrv4();        // ipv4 CIDR block
-z.cidrv4();        // ipv6 CIDR block
+z.cidrv6();        // ipv6 CIDR block
 z.iso.date();
 z.iso.time();
 z.iso.datetime();
@@ -252,7 +252,8 @@ Zod exports several useful regexes you could use.
 
 ```ts
 // Zod's default email regex
-z.email({ pattern: z.regexes.emai });
+z.email();
+z.email({ pattern: z.regexes.email }); // equivalent
 
 // the regex used by browsers to validate input[type=email] fields
 // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email
@@ -306,7 +307,7 @@ datetime.parse("2020-01-01T00:00:00.123456Z"); // ✅ (arbitrary precision)
 datetime.parse("2020-01-01T00:00:00+02:00"); // ❌ (no offsets allowed)
 ```
 
-To allow Timezone offsets can be allowed by setting the `offset` option to `true`.
+To allow timesone offsets:
 
 ```ts
 const datetime = z.iso.datetime({ offset: true });
@@ -318,14 +319,14 @@ datetime.parse("2020-01-01T00:00:00.123+02"); // ✅ (only offset hours)
 datetime.parse("2020-01-01T00:00:00Z"); // ✅ (Z still supported)
 ```
 
-Allow unqualified (timezone-less) datetimes with the `local` flag.
+To allow unqualified (timezone-less) datetimes:
 
 ```ts
 const schema = z.iso.datetime({ local: true });
 schema.parse("2020-01-01T00:00:00"); // ✅
 ```
 
-You can additionally constrain the allowable `precision`. By default, arbitrary sub-second precision is supported (but optional).
+To constrain the allowable `precision` (by default, arbitrary sub-second precision is supported).
 
 ```ts
 const datetime = z.iso.datetime({ precision: 3 });
@@ -547,8 +548,8 @@ Use `z.enum` to validate inputs against a fixed set of allowable _string_ values
 ```ts
 const FishEnum = z.enum(["Salmon", "Tuna", "Trout"]);
 
-Fishenum.parse("Salmon"); // => "Salmon"
-Fishenum.parse("Swordfish"); // => ❌
+FishEnum.parse("Salmon"); // => "Salmon"
+FishEnum.parse("Swordfish"); // => ❌
 ```
 
 <Callout>
@@ -620,7 +621,7 @@ To create a new enum schema, excluding certain values:
 <Tab value="zod">
 ```ts
 const FishEnum = z.enum(["Salmon", "Tuna", "Trout"]);
-const SalmonAndTroutOnly = FishEnum.extract(["Salmon", "Trout"]);
+const TunaOnly = FishEnum.exclude(["Salmon", "Trout"]);
 ```
 </Tab>
 <Tab value="@zod/mini">
@@ -639,7 +640,7 @@ To create a new enum schema, extracting certain values:
 <Tab value="zod">
 ```ts
 const FishEnum = z.enum(["Salmon", "Tuna", "Trout"]);
-const TunaOnly = FishEnum.exclude(["Salmon", "Trout"]);
+const SalmonAndTroutOnly = FishEnum.extract(["Salmon", "Trout"]);
 ```
 </Tab>
 <Tab value="@zod/mini">
@@ -854,14 +855,14 @@ For these reasons, `z.interface` is the recommended approach. However, `z.object
 
 {/* The `z.interface()` API fixes some shortcomings with `z.object()`. Let's run through them. */}
 
-There are a couple ways in which a key can be "optional" in TypeScript. Consider these two inferfaces.
+There are a couple ways in which a key can be "optional" in TypeScript. Consider these two interfaces.
 
 ```ts
-inferface A {
+interface A {
   name?: string | undefined;
 }
 
-inferface B {
+interface B {
   name: string | undefined;
 }
 ```
@@ -884,7 +885,7 @@ z.object({ name: z.string().optional() });
 // { name?: string | undefined; }
 ```
 
-By contrast, `z.inferface()` can represent both varieties. To make a property "key optional" (e.g. to add the question mark), prefix that key with `?`. 
+By contrast, `z.interface()` can represent both varieties. To make a property "key optional" (e.g. to add the question mark), prefix that key with `?`. 
 
 
 ```ts
@@ -1207,7 +1208,7 @@ const RecipeNoId = z.omit(Recipe, { id: true });
 
 ### `.partial()`
 
-For convenience, Zod provides a dedicated API for make some or all properties optional, inspired by the built-in TypeScript utility type [`Partial`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype).
+For convenience, Zod provides a dedicated API for making some or all properties optional, inspired by the built-in TypeScript utility type [`Partial`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype).
 {/* 
 
 <Tabs groupId="object-api" items={["z.interface", "z.object"]}>
@@ -1237,13 +1238,13 @@ To make all fields optional:
 <Tab value="zod">
 ```ts zod
 const PartialRecipe = Recipe.partial();
-// { title?: string | undefined; discription?: string | undefined; ingredients?: string[] | undefined }
+// { title?: string | undefined; description?: string | undefined; ingredients?: string[] | undefined }
 ```
 </Tab>
 <Tab value="@zod/mini">
 ```ts @zod/mini
 const PartialRecipe = z.partial(Recipe);
-// { title?: string | undefined; discription?: string | undefined; ingredients?: string[] | undefined }
+// { title?: string | undefined; description?: string | undefined; ingredients?: string[] | undefined }
 ```
 </Tab>
 </Tabs>
@@ -1261,7 +1262,7 @@ const RecipeOptionalIngredients = Recipe.partial({
 </Tab>
 <Tab value="@zod/mini">
 ```ts @zod/mini
-const RecipeOptionalIngredients = z.partial(User, {
+const RecipeOptionalIngredients = z.partial(Recipe, {
   ingredients: true,
 });
 // { title: string; description?: string | undefined; ingredients?: string[] | undefined }
@@ -1641,7 +1642,7 @@ function handleResult(result: MyResult){
 
 You could represent with with a regular `z.union()`. But regular unions are *naive*—they check the input against each option in order and return the first one that passes. This can be slow for large unions.
 
-So Zod provides a `z.discriminatedUnion()` API that leverages the discriminator key to make parsing more efficient.
+So Zod provides a `z.discriminatedUnion()` API that uses a *discriminator key* to make parsing more efficient.
 
 
 ```ts
@@ -1745,7 +1746,7 @@ const Person = z.record(Keys, z.string());
 
 <Accordions type="single"><Accordion title="A note on numeric keys">
 
-Despite the fact that TypeScript lets you define `Record` types with `number` keys (e.g. `Record<number, unknown>`), numerical keys don't actually exist in JavaScript.
+Though TypeScript lets you define `Record` types with `number` keys (e.g. `Record<number, unknown>`), numerical keys don't actually exist in JavaScript, which converts all keys to strings.
 
 ```ts
 const myObject = { 1: "one" };
@@ -1854,7 +1855,7 @@ TestSchema.parse("whatever"); // ❌
 
 ## Refinements
 
-Every Zod schema stores an array of *refinements*. Refinements are a way to perform additional custom validation that can Zod doesn't provide a native API for.
+Every Zod schema stores an array of *refinements*. Refinements are a way to perform custom validation that can Zod doesn't provide a native API for.
 
 ### `.refine()`
 
@@ -1901,7 +1902,7 @@ const myString = z.string().check(
 </Tabs>
 
 
-By default, validation issues from checks are considered *continuable*; that is, Zod will execute *all* checks in sequence, even if one of them causes a validation error. This is usually desirable, so Zod can present a comprehensive list of validation issues in one go.
+By default, validation issues from checks are considered *continuable*; that is, Zod will execute *all* checks in sequence, even if one of them causes a validation error. This is usually desirable, as it means Zod can surface as many errors as possible in one go.
 
 <Tabs groupId="lib" items={["zod", "@zod/mini"]}>
 <Tab value="zod">
@@ -2169,7 +2170,7 @@ const UniqueStringArray = z.array(z.string()).check((ctx) => {
 </Tab>
 </Tabs>
 
-The regular `.refine` API only generated create issues with a `"custom"` error code, but `.superRefine()` makes it possible to throw other issue types. For more information on Zod's internal issue types, read the [Error customization]`(/error-customization) docs.
+The regular `.refine` API only generates issues with a `"custom"` error code, but `.check()` makes it possible to throw other issue types. For more information on Zod's internal issue types, read the [Error customization](./error-customization) docs.
 
 ## Pipes
 
diff --git a/packages/docs/content/basics.mdx b/packages/docs/content/basics.mdx
index f6a47f86..260ebb3f 100644
--- a/packages/docs/content/basics.mdx
+++ b/packages/docs/content/basics.mdx
@@ -17,7 +17,7 @@ Before you can do anything else, you need to define a schema. For the purposes o
 import * as z from "zod";
 
 const Player = z.interface({ 
-  username: z. string(),
+  username: z.string(),
   xp: z.number()
 });
 ```
diff --git a/packages/docs/content/error-customization.mdx b/packages/docs/content/error-customization.mdx
index 27ef9287..8f0271e0 100644
--- a/packages/docs/content/error-customization.mdx
+++ b/packages/docs/content/error-customization.mdx
@@ -273,7 +273,7 @@ Global error messages have *lower precedence* than schema-level or per-parse err
 
 The `iss` object is a [discriminated union](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#discriminated-unions) of all possible issue types. Use the `code` property to discriminate between them.
 
-> For a breakdown of all Zod issue codes, see the [`@zod/core`](/core#issue-types) documentation.
+> For a breakdown of all Zod issue codes, see the [`@zod/core`](/packages/core#issue-types) documentation.
 
 ```ts
 const result = schema.safeParse(12, {
diff --git a/packages/docs/content/index.mdx b/packages/docs/content/index.mdx
index cb862286..99f1ef6b 100644
--- a/packages/docs/content/index.mdx
+++ b/packages/docs/content/index.mdx
@@ -85,7 +85,7 @@ const User = z.interface({
 });
 
 // some untrusted data...
-const input = { /* stuff */};
+const input = { /* stuff */ };
 
 // the parsed result is validated and type safe!
 const data = User.parse(input);
diff --git a/packages/docs/content/packages/mini.mdx b/packages/docs/content/packages/mini.mdx
index b945cf6e..9796ebbb 100644
--- a/packages/docs/content/packages/mini.mdx
+++ b/packages/docs/content/packages/mini.mdx
@@ -105,6 +105,10 @@ z.endsWith(value);
 z.property(key, schema);
 z.mime(value);
 
+// custom checks
+z.refine()
+z.check()   // replaces .superRefine()
+
 // mutations (these do not change the inferred types)
 z.overwrite(value => newValue);
 z.normalize();
diff --git a/packages/docs/content/v4/changelog.mdx b/packages/docs/content/v4/changelog.mdx
index f7ee81a5..0ed23ff4 100644
--- a/packages/docs/content/v4/changelog.mdx
+++ b/packages/docs/content/v4/changelog.mdx
@@ -211,7 +211,7 @@ myError.issues.push({
 });
 ```
 
-## `.and()` dropped
+{/* ## `.and()` dropped
 
 The `.and()` method on `ZodType` has been dropped in favor of `z.intersection(A, B)`. Not only is this method rarely used, there are few good reasons to use intersections at all. The `.and()` API prevented bundlers from treeshaking `ZodIntersection`, a fairly large and complex class. 
 
@@ -222,7 +222,7 @@ z.object({ a: z.string() }).and(z.object({ b: z.number() })); // ❌
 z.intersection(z.object({ a: z.string() }), z.object({ b: z.number() })); // ✅
 // or .extend() when possible
 z.object({ a: z.string() }).extend(z.object({ b: z.number() })); // ✅
-```
+``` */}
 
 ## `z.number()`
 
@@ -284,7 +284,7 @@ Validation now happens using the `new URL()` constructor, which is far more robu
 
 ### drops `z.string().cidr()` 
 
-Similarly, this has been replaced with separate `.cidrv4()` and `.cidrv4()` methods. Use `z.union()` to combine them if you need to accept both.
+Similarly, this has been replaced with separate `.cidrv4()` and `.cidrv6()` methods. Use `z.union()` to combine them if you need to accept both.
 
 ```ts
 z.string().cidr() // ❌
@@ -348,7 +348,7 @@ This long-deprecated alias for `.strip()` has been removed.
 
 ### drops `.deepPartial()`
 
-This has been long deprecated in Zod 3 and it now removed in Zod 4. There is no direct alternative to this API. There were lots of footguns in it's implementation, and it's use is generally an anti-pattern.
+This has been long deprecated in Zod 3 and it now removed in Zod 4. There is no direct alternative to this API. There were lots of footguns in its implementation, and its use is generally an anti-pattern.
 
 ### changes `z.unknown()` optionality
 
@@ -419,7 +419,7 @@ The result of `z.function()` is no longer a Zod schema. Instead, it acts as a st
 <Tabs groupId="lib" items={["Zod 4", "Zod 3"]} persist>
 <Tab value="Zod 4">
 ```ts
-const myFunction = z.function().args({
+const myFunction = z.function({
   input: [z.object({
     name: z.string(),
     age: z.number().int(),
@@ -532,7 +532,7 @@ const myRecord = z.record(z.enum(["a", "b", "c"]), z.number());
 // { a?: number; b?: number; c?: number; }
 ```
 
-In Zod 4, this is no longer the case. The inferred type is what you'd expect, and Zod ensures exhaustiveneess; that is, it makes sure all enum keys exist in the input during parsing.
+In Zod 4, this is no longer the case. The inferred type is what you'd expect, and Zod ensures exhaustiveness; that is, it makes sure all enum keys exist in the input during parsing.
 
 ```ts
 const myRecord = z.record(z.enum(["a", "b", "c"]), z.number());
@@ -594,7 +594,7 @@ class ZodType<Output = unknown, Input = unknown> {
 The second generic `Def` has been entirely removed. Instead the base class now only tracks `Output` and `Input`. While previously the `Input` value defaulted to `Output`, it now defaults to `unknown`. This allows generic functions involving `z.ZodType` to behave more intuitively in many cases.
 
 ```ts
-const inferSchema<T extends z.ZodType>(schema: T): T {
+function inferSchema<T extends z.ZodType>(schema: T): T {
   return schema;
 };
 
diff --git a/packages/docs/content/v4/index.mdx b/packages/docs/content/v4/index.mdx
index 8b2c869a..1d4eed4c 100644
--- a/packages/docs/content/v4/index.mdx
+++ b/packages/docs/content/v4/index.mdx
@@ -37,6 +37,7 @@ You can run these benchmarks yourself in the Zod repo:
 ```sh 
 $ git clone git@github.com:colinhacks/zod.git
 $ cd zod
+$ git switch v4
 $ pnpm install
 ```
 
@@ -344,6 +345,10 @@ The following top-level refinements are available in `@zod/mini`. It should be f
 ```ts
 import * as z from "@zod/mini";
 
+// custom checks
+z.refine();
+
+// first-class checks
 z.lt(value);
 z.lte(value); // alias: z.maximum()
 z.gt(value);
@@ -398,7 +403,7 @@ When we build this with `rollup`, the gzipped bundle size is `1.88kb`. That's an
 | `zod@4`     | `5.36kb`       |
 | `@zod/mini` | `1.88kb`       |
 
-Learn more on the dedicated [`@zod/mini`](/mini) docs page. Complete API details are mixed into existing documentation pages; code blocks contain separate tabs for `zod` and `@zod/mini` wherever their APIs diverge.
+Learn more on the dedicated [`@zod/mini`](/packages/mini) docs page. Complete API details are mixed into existing documentation pages; code blocks contain separate tabs for `zod` and `@zod/mini` wherever their APIs diverge.
 
 ## Metadata
 
@@ -435,9 +440,9 @@ Zod also exports a global registry `z.globalRegistry` that accepts some common J
 
 ```ts
 z.globalRegistry.add(z.string(), { 
-  id: "email_address"
-  title: "Email address"
-  description: "Provide your email"
+  id: "email_address",
+  title: "Email address",
+  description: "Provide your email",
   examples: ["naomie@example.com"],
   extraKey: "Additional properties are also allowed"
 });
@@ -451,9 +456,9 @@ To conveniently add a schema to `z.globalRegistry`, use the `.meta()` method.
 
 ```ts
 z.string().meta({ 
-  id: "email_address"
-  title: "Email address"
-  description: "Provide your email"
+  id: "email_address",
+  title: "Email address",
+  description: "Provide your email",
   examples: ["naomie@example.com"],
   // ...
 });
diff --git a/packages/docs/public/logo/logo.svg b/packages/docs/public/logo/logo.svg
new file mode 100644
index 00000000..0652c7e2
--- /dev/null
+++ b/packages/docs/public/logo/logo.svg
@@ -0,0 +1,1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1309 1075" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="zod-new-logo"><path d="M258.188,0.987c-51.217,0 -96.967,32.03 -114.488,80.159l-132.717,364.517c-17.279,47.47 -3.479,100.679 34.7,133.762l536.4,464.825c46.192,40.029 114.892,39.638 160.625,-0.912l520.988,-461.934c37.296,-33.071 50.687,-85.525 33.808,-132.425l-132.241,-367.412c-17.4,-48.346 -63.259,-80.58 -114.638,-80.58l-792.438,0.001Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/><g><clipPath id="_clip2"><path d="M302.446,646.246l202.858,176.987l617.229,-391.504c26.467,-17.8 37.442,-51.312 26.642,-81.325l-64.617,-179.533l-782.112,475.375Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip2)"><use xlink:href="#_Image3" x="302.5" y="171.038" width="850.848px" height="652.362px" transform="matrix(0.999821,0,0,0.999024,0,0)"/></g></g><path d="M1081.94,163.608l65.675,182.463l-987.525,-0l66.537,-182.75c11.892,-32.658 42.821,-54.488 77.575,-54.754l698.796,-0c35.329,-0.267 66.979,21.8 78.942,55.041" style="fill:#fff;"/><g><clipPath id="_clip4"><path d="M302.446,646.246l311.121,271.446c24.787,21.625 61.779,21.483 86.4,-0.334l305.912,-271.112l-703.433,-0Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip4)"><use xlink:href="#_Image5" x="302.689" y="647.212" width="703.433px" height="287.57px" transform="matrix(0.999195,0,0,0.998508,0,0)"/></g></g></g><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-1073.35,1073.35,-0,654.163,1074.34)"><stop offset="0" style="stop-color:#3a6aff;stop-opacity:1"/><stop offset="1" style="stop-color:#45a9ff;stop-opacity:1"/></linearGradient><image id="_Image3" width="851px" height="653px" xlink:href="data:image/png;base64,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"/><image id="_Image5" width="704px" height="288px" xlink:href="data:image/png;base64,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"/></defs></svg>
\ No newline at end of file
diff --git a/packages/mini/src/schemas.ts b/packages/mini/src/schemas.ts
index 8d76f9f3..c20e89a4 100644
--- a/packages/mini/src/schemas.ts
+++ b/packages/mini/src/schemas.ts
@@ -694,7 +694,7 @@ export const ZodMiniObjectLike: core.$constructor<ZodMiniObjectLike> = /*@__PURE
 );
 
 // .keyof
-export function keyof<T extends ZodMiniObject>(schema: T): ZodMiniLiteral<keyof T["_zod"]["shape"]>;
+export function keyof<T extends ZodMiniObject>(schema: T): ZodMiniLiteral<keyof T["_zod"]["def"]["shape"]>;
 export function keyof<T extends ZodMiniInterface>(schema: T): ZodMiniLiteral<keyof T["_zod"]["output"]>;
 export function keyof(schema: ZodMiniObjectLike) {
   const shape =
@@ -859,20 +859,26 @@ export function looseObject<T extends core.$ZodShape>(
 export function extend<T extends ZodMiniInterface, U extends ZodMiniInterface>(
   a: T,
   b: U
-): ZodMiniInterface<util.ExtendShape<T["_zod"]["shape"], U["_zod"]["shape"]>, util.MergeInterfaceParams<T, U>>;
+): ZodMiniInterface<
+  util.ExtendShape<T["_zod"]["def"]["shape"], U["_zod"]["def"]["shape"]>,
+  util.MergeInterfaceParams<T, U>
+>;
 export function extend<T extends ZodMiniObject, U extends ZodMiniObject>(
   a: T,
   b: U
-): ZodMiniObject<util.ExtendObject<T["_zod"]["shape"], U["_zod"]["shape"]>, U["_zod"]["extra"] & T["_zod"]["extra"]>;
+): ZodMiniObject<
+  util.ExtendObject<T["_zod"]["def"]["shape"], U["_zod"]["def"]["shape"]>,
+  U["_zod"]["extra"] & T["_zod"]["extra"]
+>;
 
 export function extend<T extends ZodMiniInterface, U extends core.$ZodLooseShape>(
   a: T,
   b: U
-): ZodMiniInterface<util.ExtendInterfaceShape<T["_zod"]["shape"], U>, util.ExtendInterfaceParams<T, U>>;
+): ZodMiniInterface<util.ExtendInterfaceShape<T["_zod"]["def"]["shape"], U>, util.ExtendInterfaceParams<T, U>>;
 export function extend<T extends ZodMiniObject, U extends core.$ZodLooseShape>(
   a: T,
   b: U
-): ZodMiniObject<util.ExtendObject<T["_zod"]["shape"], U>, T["_zod"]["extra"]>;
+): ZodMiniObject<util.ExtendObject<T["_zod"]["def"]["shape"], U>, T["_zod"]["extra"]>;
 export function extend(schema: ZodMiniObjectLike, shape: any): ZodMiniObjectLike {
   // console.log({ schema, shape });
   if (shape instanceof core.$ZodType) return util.mergeObjectLike(schema, shape as any);
@@ -888,50 +894,59 @@ export function merge<T extends ZodMiniObjectLike, U extends core.$ZodLooseShape
   shape: U
 ): T["_zod"]["def"]["type"] extends "interface"
   ? ZodMiniInterface<
-      util.ExtendShape<T["_zod"]["shape"], U["_zod"]["shape"]>,
+      util.ExtendShape<T["_zod"]["def"]["shape"], U["_zod"]["def"]["shape"]>,
       {
         extra: T["_zod"]["extra"] & U["_zod"]["extra"];
-        optional: Exclude<T["_zod"]["optional"], keyof U["_zod"]["shape"]> | U["_zod"]["optional"];
-        defaulted: Exclude<T["_zod"]["defaulted"], keyof U["_zod"]["shape"]> | U["_zod"]["defaulted"];
+        optional: Exclude<T["_zod"]["optional"], keyof U["_zod"]["def"]["shape"]> | U["_zod"]["optional"];
+        defaulted: Exclude<T["_zod"]["defaulted"], keyof U["_zod"]["def"]["shape"]> | U["_zod"]["defaulted"];
       }
     >
-  : ZodMiniObject<util.ExtendObject<T["_zod"]["shape"], U>, T["_zod"]["extra"]>;
+  : ZodMiniObject<util.ExtendObject<T["_zod"]["def"]["shape"], U>, T["_zod"]["extra"]>;
 export function merge(a: ZodMiniObjectLike, b: ZodMiniObjectLike): ZodMiniObjectLike {
   return util.mergeObjectLike(a, b);
 }
 
 // .pick
-export function pick<T extends ZodMiniObjectLike, M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>>(
+export function pick<
+  T extends ZodMiniObjectLike,
+  M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>,
+>(
   schema: T,
   mask: M
 ): T["_zod"]["def"]["type"] extends "interface"
   ? ZodMiniInterface<
-      util.Flatten<Pick<T["_zod"]["shape"], keyof T["_zod"]["shape"] & keyof M>>,
+      util.Flatten<Pick<T["_zod"]["def"]["shape"], keyof T["_zod"]["def"]["shape"] & keyof M>>,
       {
         optional: Extract<T["_zod"]["optional"], keyof M>;
         defaulted: Extract<T["_zod"]["defaulted"], keyof M>;
         extra: T["_zod"]["extra"];
       }
     >
-  : ZodMiniObject<util.Flatten<Pick<T["_zod"]["shape"], keyof T["_zod"]["shape"] & keyof M>>, T["_zod"]["extra"]>;
+  : ZodMiniObject<
+      util.Flatten<Pick<T["_zod"]["def"]["shape"], keyof T["_zod"]["def"]["shape"] & keyof M>>,
+      T["_zod"]["extra"]
+    >;
 export function pick(schema: ZodMiniObjectLike, mask: object) {
   return util.pick(schema, mask);
 }
 
 // .omit
-export function omit<T extends ZodMiniObjectLike, const M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>>(
+export function omit<
+  T extends ZodMiniObjectLike,
+  const M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>,
+>(
   schema: T,
   mask: M
 ): T["_zod"]["def"]["type"] extends "interface"
   ? ZodMiniInterface<
-      util.Flatten<Omit<T["_zod"]["shape"], keyof M>>,
+      util.Flatten<Omit<T["_zod"]["def"]["shape"], keyof M>>,
       {
         optional: Exclude<T["_zod"]["optional"], keyof M>;
         defaulted: Exclude<T["_zod"]["defaulted"], keyof M>;
         extra: T["_zod"]["extra"];
       }
     >
-  : ZodMiniObject<util.Flatten<Omit<T["_zod"]["shape"], keyof M>>, T["_zod"]["extra"]>;
+  : ZodMiniObject<util.Flatten<Omit<T["_zod"]["def"]["shape"], keyof M>>, T["_zod"]["extra"]>;
 
 export function omit(schema: ZodMiniObjectLike, mask: object) {
   return util.omit(schema, mask);
@@ -943,29 +958,32 @@ export function partial<T extends ZodMiniObjectLike>(
   ? ZodMiniInterface<
       // T['_zod']["shape"],
       {
-        [k in keyof T["_zod"]["shape"]]: ZodMiniOptional<T["_zod"]["shape"][k]>;
+        [k in keyof T["_zod"]["def"]["shape"]]: ZodMiniOptional<T["_zod"]["def"]["shape"][k]>;
       },
       {
-        optional: string & keyof T["_zod"]["shape"];
+        optional: string & keyof T["_zod"]["def"]["shape"];
         defaulted: never;
         extra: T["_zod"]["extra"];
       }
     >
   : ZodMiniObject<
       {
-        [k in keyof T["_zod"]["shape"]]: ZodMiniOptional<T["_zod"]["shape"][k]>;
+        [k in keyof T["_zod"]["def"]["shape"]]: ZodMiniOptional<T["_zod"]["def"]["shape"][k]>;
       },
       T["_zod"]["extra"]
     >;
-export function partial<T extends ZodMiniObjectLike, M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>>(
+export function partial<
+  T extends ZodMiniObjectLike,
+  M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>,
+>(
   schema: T,
   mask: M
 ): T["_zod"]["def"]["type"] extends "interface"
   ? ZodMiniInterface<
       util.ExtendShape<
-        T["_zod"]["shape"],
+        T["_zod"]["def"]["shape"],
         {
-          [k in keyof M & keyof T["_zod"]["shape"]]: ZodMiniOptional<T["_zod"]["shape"][k]>;
+          [k in keyof M & keyof T["_zod"]["def"]["shape"]]: ZodMiniOptional<T["_zod"]["def"]["shape"][k]>;
         }
       >,
       {
@@ -976,9 +994,9 @@ export function partial<T extends ZodMiniObjectLike, M extends util.Exactly<util
     >
   : ZodMiniObject<
       {
-        [k in keyof T["_zod"]["shape"]]: k extends keyof M
-          ? ZodMiniOptional<T["_zod"]["shape"][k]>
-          : T["_zod"]["shape"][k];
+        [k in keyof T["_zod"]["def"]["shape"]]: k extends keyof M
+          ? ZodMiniOptional<T["_zod"]["def"]["shape"][k]>
+          : T["_zod"]["def"]["shape"][k];
       },
       T["_zod"]["extra"]
     >;
@@ -991,19 +1009,19 @@ export function partial(schema: ZodMiniObjectLike, mask?: object): ZodMiniObject
 export function required<T extends { _zod: { subtype: "object" } } & ZodMiniObject>(
   schema: T
 ): ZodMiniObject<{
-  [k in keyof T["_zod"]["shape"]]: ZodMiniNonOptional<T["_zod"]["shape"][k]>;
+  [k in keyof T["_zod"]["def"]["shape"]]: ZodMiniNonOptional<T["_zod"]["def"]["shape"][k]>;
 }>;
 export function required<
   T extends { _zod: { subtype: "object" } } & ZodMiniObject,
-  M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>,
+  M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>,
 >(
   schema: T,
   mask: M
 ): ZodMiniObject<
   util.ExtendShape<
-    T["_zod"]["shape"],
+    T["_zod"]["def"]["shape"],
     {
-      [k in keyof M & keyof T["_zod"]["shape"]]: ZodMiniNonOptional<T["_zod"]["shape"][k]>;
+      [k in keyof M & keyof T["_zod"]["def"]["shape"]]: ZodMiniNonOptional<T["_zod"]["def"]["shape"][k]>;
     }
   >
 >;
@@ -1011,7 +1029,7 @@ export function required<T extends { _zod: { subtype: "interface" } } & ZodMiniI
   schema: T
 ): ZodMiniInterface<
   {
-    [k in keyof T["_zod"]["shape"]]: ZodMiniNonOptional<T["_zod"]["shape"][k]>;
+    [k in keyof T["_zod"]["def"]["shape"]]: ZodMiniNonOptional<T["_zod"]["def"]["shape"][k]>;
   },
   {
     optional: never;
@@ -1027,9 +1045,9 @@ export function required<
   mask: M
 ): ZodMiniInterface<
   util.ExtendShape<
-    T["_zod"]["shape"],
+    T["_zod"]["def"]["shape"],
     {
-      [k in keyof M & keyof T["_zod"]["shape"]]: ZodMiniNonOptional<T["_zod"]["shape"][k]>;
+      [k in keyof M & keyof T["_zod"]["def"]["shape"]]: ZodMiniNonOptional<T["_zod"]["def"]["shape"][k]>;
     }
   >,
   {
diff --git a/packages/tsc/package.json b/packages/tsc/package.json
index e706164b..2e42df25 100644
--- a/packages/tsc/package.json
+++ b/packages/tsc/package.json
@@ -9,7 +9,7 @@
     "@types/node": "^22.10.5",
     "@typescript/analyze-trace": "^0.10.1",
     "arktype": "2.0.0-rc.33",
-    "valibot": "1.0.0-beta.12",
+    "valibot": "^1.0.0",
     "zod": "workspace:*",
     "@zod/core": "workspace:*",
     "zod3": "npm:zod@3.23.7",
diff --git a/packages/zod/src/compat.ts b/packages/zod/src/compat.ts
index 2816bc81..ad59b36e 100644
--- a/packages/zod/src/compat.ts
+++ b/packages/zod/src/compat.ts
@@ -72,3 +72,5 @@ export type {
   /** @deprecated Use `z.ZodType` */
   ZodType as Schema,
 };
+
+export type ZodRawShape = core.$ZodShape;
diff --git a/packages/zod/src/schemas.ts b/packages/zod/src/schemas.ts
index 1e8cd1f3..09153dd0 100644
--- a/packages/zod/src/schemas.ts
+++ b/packages/zod/src/schemas.ts
@@ -7,8 +7,6 @@ import * as parse from "./parse.js";
 export * as iso from "./iso.js";
 export * as coerce from "./coerce.js";
 
-type SomeType = core.$ZodType;
-
 ///////////////////////////////////////////
 ///////////////////////////////////////////
 ////////////                   ////////////
@@ -25,6 +23,10 @@ export interface ZodType<out Output = unknown, out Input = unknown> extends core
   def: this["_zod"]["def"];
   /** @deprecated Use `.def` instead. */
   _def: this["_zod"]["def"];
+  /** @deprecated Use `z.output<typeof schema>` instead. */
+  _output: this["_zod"]["output"];
+  /** @deprecated Use `z.input<typeof schema>` instead. */
+  _input: this["_zod"]["input"];
   // base methods
   check(...checks: (core.CheckFn<this["_zod"]["output"]> | core.$ZodCheck<this["_zod"]["output"]>)[]): this;
   clone(def?: this["_zod"]["def"]): this;
@@ -70,7 +72,7 @@ export interface ZodType<out Output = unknown, out Input = unknown> extends core
   default(def: () => util.NoUndefined<core.output<this>>, params?: core.$ZodDefaultParams): ZodDefault<this>;
   array(): ZodArray<this>;
   or<T extends core.$ZodType>(option: T): ZodUnion<[this, T]>;
-  // and<T extends core.$ZodType>(incoming: T): ZodIntersection<this, T>;
+  and<T extends core.$ZodType>(incoming: T): ZodIntersection<this, T>;
   transform<NewOut>(
     transform: (arg: core.output<this>, ctx: RefinementCtx<core.output<this>>) => NewOut | Promise<NewOut>
   ): ZodPipe<this, ZodTransform<Awaited<NewOut>, core.output<this>>>;
@@ -135,7 +137,7 @@ export const ZodType: core.$constructor<ZodType> = /*@__PURE__*/ core.$construct
   inst.nonoptional = (params) => nonoptional(inst, params);
   inst.array = () => array(inst);
   inst.or = (arg) => union([inst, arg]);
-  // inst.and = (arg) => intersection(inst, arg);
+  inst.and = (arg) => intersection(inst, arg);
   inst.transform = (tx) => pipe(inst, transform(tx as any)) as never;
   inst.default = (def, params) => _default(inst, def, params);
   // inst.coalesce = (def, params) => coalesce(inst, def, params);
@@ -321,7 +323,7 @@ export const ZodString: core.$constructor<ZodString> = /*@__PURE__*/ core.$const
   inst.duration = (params) => inst.check(iso.duration(params as any));
 
   // validations
-  inst.regex = (params) => inst.check(checks.regex(params));
+  inst.regex = (...args) => inst.check(checks.regex(...args));
   inst.includes = (...args) => inst.check(checks.includes(...args));
   inst.startsWith = (params) => inst.check(checks.startsWith(params));
   inst.endsWith = (params) => inst.check(checks.endsWith(params));
@@ -979,7 +981,7 @@ export function date(params?: string | core.$ZodDateParams): ZodDate {
 }
 
 // ZodArray
-export interface ZodArray<T extends SomeType = SomeType> extends ZodType {
+export interface ZodArray<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodArrayInternals<T>;
 
   element: T;
@@ -999,8 +1001,8 @@ export const ZodArray: core.$constructor<ZodArray> = /*@__PURE__*/ core.$constru
   inst.length = (len, params) => inst.check(checks.length(len, params));
 });
 
-export function array<T extends SomeType>(element: T, params?: core.$ZodArrayParams): ZodArray<T>;
-export function array<T extends SomeType>(element: SomeType, params?: any): ZodArray<T> {
+export function array<T extends core.$ZodType>(element: T, params?: core.$ZodArrayParams): ZodArray<T>;
+export function array<T extends core.$ZodType>(element: core.$ZodType, params?: any): ZodArray<T> {
   return core._array(ZodArray, element, params) as any;
 }
 
@@ -1017,7 +1019,7 @@ export const ZodObjectLike: core.$constructor<ZodObjectLike> = /*@__PURE__*/ cor
 );
 
 // .keyof
-export function keyof<T extends ZodObject>(schema: T): ZodLiteral<keyof T["_zod"]["shape"]>;
+export function keyof<T extends ZodObject>(schema: T): ZodLiteral<keyof T["_zod"]["def"]["shape"]>;
 export function keyof<T extends ZodInterface>(schema: T): ZodLiteral<keyof T["_zod"]["output"]>;
 export function keyof(schema: ZodObjectLike) {
   const shape =
@@ -1031,12 +1033,12 @@ export function keyof(schema: ZodObjectLike) {
 // ZodInterface
 type ZodInterfacePartial<
   T extends ZodInterface,
-  Keys extends keyof T["_zod"]["shape"] = keyof T["_zod"]["shape"],
+  Keys extends keyof T["_zod"]["def"]["shape"] = keyof T["_zod"]["def"]["shape"],
 > = ZodInterface<
   util.ExtendShape<
-    T["_zod"]["shape"],
+    T["_zod"]["def"]["shape"],
     {
-      [k in Keys]: ZodOptional<T["_zod"]["shape"][k]>;
+      [k in Keys]: ZodOptional<T["_zod"]["def"]["shape"][k]>;
     }
   >,
   {
@@ -1048,12 +1050,12 @@ type ZodInterfacePartial<
 
 type ZodInterfaceRequired<
   T extends ZodInterface,
-  Keys extends keyof T["_zod"]["shape"] = keyof T["_zod"]["shape"],
+  Keys extends keyof T["_zod"]["def"]["shape"] = keyof T["_zod"]["def"]["shape"],
 > = ZodInterface<
   util.ExtendShape<
-    T["_zod"]["shape"],
+    T["_zod"]["def"]["shape"],
     {
-      [k in Keys]: ZodNonOptional<T["_zod"]["shape"][k]>;
+      [k in Keys]: ZodNonOptional<T["_zod"]["def"]["shape"][k]>;
     }
   >,
   {
@@ -1063,8 +1065,8 @@ type ZodInterfaceRequired<
   }
 >;
 
-type MergeInterfaces<A extends ZodInterface, B extends ZodInterface> = ZodInterface<
-  util.ExtendShape<A["_zod"]["shape"], B["_zod"]["shape"]>,
+export type MergeInterfaces<A extends ZodInterface, B extends ZodInterface> = ZodInterface<
+  util.ExtendShape<A["_zod"]["def"]["shape"], B["_zod"]["def"]["shape"]>,
   util.MergeInterfaceParams<A, B>
 >;
 
@@ -1117,7 +1119,7 @@ export interface ZodInterface<
     shape: U
   ): MergeInterfaces<this, ZodInterface<U, util.InitInterfaceParams<U, {}>>>;
 
-  /** @deprecated Use `.extend()` */
+  /** @deprecated Use `A.extend(B)` */
   merge<U extends ZodInterface>(incoming: U): MergeInterfaces<this, U>;
 
   pick<const M extends util.Exactly<util.Mask<string & keyof Shape>, M>>(
@@ -1153,7 +1155,7 @@ export const ZodInterface: core.$constructor<ZodInterface> = /*@__PURE__*/ core.
   (inst, def) => {
     core.$ZodInterface.init(inst, def);
     ZodType.init(inst, def);
-    util.defineLazy(inst._zod, "shape", () => def.shape);
+    // util.defineLazy(inst._zod, "shape", () => def.shape);
 
     inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));
     inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall });
@@ -1270,12 +1272,7 @@ export interface ZodObject<
   /** @deprecated This is the default behavior. This method call is likely unnecessary. */
   strip(): ZodObject<Shape, {}>;
 
-  extend<U extends ZodObject>(
-    shape: U
-  ): ZodObject<
-    util.ExtendShape<Shape, U["_zod"]["shape"]>,
-    Extra // & B['_zod']["extra"]
-  >;
+  extend<const U extends ZodObject>(schema: U): ZodObject<util.ExtendShape<Shape, U["_zod"]["def"]["shape"]>, Extra>;
   extend<U extends core.$ZodShape>(
     shape: U
   ): ZodObject<
@@ -1351,7 +1348,7 @@ export const ZodObject: core.$constructor<ZodObject> = /*@__PURE__*/ core.$const
   inst.partial = (...args: any[]) => util.partialObjectLike(ZodOptional, inst, args[0] as object);
   inst.required = (...args: any[]) => util.requiredObjectLike(ZodNonOptional, inst, args[0] as object);
 });
-export function object<T extends core.$ZodShape = Record<never, SomeType>>(
+export function object<T extends core.$ZodShape = Record<never, core.$ZodType>>(
   shape?: T,
   params?: core.$ZodObjectLikeParams
 ): ZodObject<T, {}> {
@@ -1401,17 +1398,23 @@ export function looseObject<T extends core.$ZodShape>(
 export function extend<T extends ZodInterface, U extends ZodInterface>(
   a: T,
   b: U
-): ZodInterface<util.ExtendShape<T["_zod"]["shape"], U["_zod"]["shape"]>, util.MergeInterfaceParams<T, U>>;
+): ZodInterface<
+  util.ExtendShape<T["_zod"]["def"]["shape"], U["_zod"]["def"]["shape"]>,
+  util.MergeInterfaceParams<T, U>
+>;
 export function extend<T extends ZodObject, U extends ZodObject>(
   a: T,
   b: U
-): ZodObject<util.ExtendObject<T["_zod"]["shape"], U["_zod"]["shape"]>, U["_zod"]["extra"] & T["_zod"]["extra"]>;
+): ZodObject<
+  util.ExtendObject<T["_zod"]["def"]["shape"], U["_zod"]["def"]["shape"]>,
+  U["_zod"]["extra"] & T["_zod"]["extra"]
+>;
 export function extend<T extends ZodObjectLike, U extends core.$ZodLooseShape>(
   schema: T,
   shape: U
 ): T extends ZodInterface<infer TShape, infer TParams>
   ? ZodInterface<util.ExtendInterfaceShape<TShape, U>, util.ExtendInterfaceParams<ZodInterface<TShape, TParams>, U>>
-  : ZodObject<util.ExtendObject<T["_zod"]["shape"], U>, T["_zod"]["extra"]>;
+  : ZodObject<util.ExtendObject<T["_zod"]["def"]["shape"], U>, T["_zod"]["extra"]>;
 export function extend(schema: ZodObjectLike, shape: core.$ZodShape): ZodObjectLike {
   if (shape instanceof core.$ZodType) return util.mergeObjectLike(schema, shape as any);
   if (schema instanceof ZodInterface) {
@@ -1427,51 +1430,57 @@ export function merge<T extends ZodObjectLike, U extends core.$ZodLooseShape>(
 ): T["_zod"]["def"]["type"] extends "interface"
   ? // T extends ZodInterface
     ZodInterface<
-      util.ExtendShape<T["_zod"]["shape"], U["_zod"]["shape"]>,
+      util.ExtendShape<T["_zod"]["def"]["shape"], U["_zod"]["def"]["shape"]>,
       {
         extra: T["_zod"]["extra"] & U["_zod"]["extra"];
-        optional: Exclude<T["_zod"]["optional"], keyof U["_zod"]["shape"]> | U["_zod"]["optional"];
-        defaulted: Exclude<T["_zod"]["defaulted"], keyof U["_zod"]["shape"]> | U["_zod"]["defaulted"];
+        optional: Exclude<T["_zod"]["optional"], keyof U["_zod"]["def"]["shape"]> | U["_zod"]["optional"];
+        defaulted: Exclude<T["_zod"]["defaulted"], keyof U["_zod"]["def"]["shape"]> | U["_zod"]["defaulted"];
       }
     >
-  : ZodObject<util.ExtendObject<T["_zod"]["shape"], U>, T["_zod"]["extra"]>;
+  : ZodObject<util.ExtendObject<T["_zod"]["def"]["shape"], U>, T["_zod"]["extra"]>;
 export function merge(a: ZodObjectLike, b: ZodObjectLike): ZodObjectLike {
   return util.mergeObjectLike(a, b);
 }
 
 // .pick
-export function pick<T extends ZodObjectLike, M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>>(
+export function pick<T extends ZodObjectLike, M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>>(
   schema: T,
   mask: M
 ): T["_zod"]["def"]["type"] extends "interface"
   ? ZodInterface<
-      util.Flatten<Pick<T["_zod"]["shape"], keyof T["_zod"]["shape"] & keyof M>>,
+      util.Flatten<Pick<T["_zod"]["def"]["shape"], keyof T["_zod"]["def"]["shape"] & keyof M>>,
       {
         optional: Extract<T["_zod"]["optional"], keyof M>;
         defaulted: Extract<T["_zod"]["defaulted"], keyof M>;
         extra: T["_zod"]["extra"];
       }
     >
-  : ZodObject<util.Flatten<Pick<T["_zod"]["shape"], keyof T["_zod"]["shape"] & keyof M>>, T["_zod"]["extra"]>;
+  : ZodObject<
+      util.Flatten<Pick<T["_zod"]["def"]["shape"], keyof T["_zod"]["def"]["shape"] & keyof M>>,
+      T["_zod"]["extra"]
+    >;
 export function pick(schema: ZodObjectLike, mask: object) {
   // const picked = util.pick(schema, mask);
   return util.pick(schema, mask);
 }
 
 // .omit
-export function omit<T extends ZodObjectLike, const M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>>(
+export function omit<
+  T extends ZodObjectLike,
+  const M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>,
+>(
   schema: T,
   mask: M
 ): T["_zod"]["def"]["type"] extends "interface"
   ? ZodInterface<
-      util.Flatten<Omit<T["_zod"]["shape"], keyof M>>,
+      util.Flatten<Omit<T["_zod"]["def"]["shape"], keyof M>>,
       {
         optional: Exclude<T["_zod"]["optional"], keyof M>;
         defaulted: Exclude<T["_zod"]["defaulted"], keyof M>;
         extra: T["_zod"]["extra"];
       }
     >
-  : ZodObject<util.Flatten<Omit<T["_zod"]["shape"], keyof M>>, T["_zod"]["extra"]>;
+  : ZodObject<util.Flatten<Omit<T["_zod"]["def"]["shape"], keyof M>>, T["_zod"]["extra"]>;
 
 export function omit(schema: ZodObjectLike, mask: object) {
   return util.omit(schema, mask);
@@ -1483,29 +1492,29 @@ export function partial<T extends ZodObjectLike>(
   ? ZodInterface<
       // T['_zod']["shape"],
       {
-        [k in keyof T["_zod"]["shape"]]: ZodOptional<T["_zod"]["shape"][k]>;
+        [k in keyof T["_zod"]["def"]["shape"]]: ZodOptional<T["_zod"]["def"]["shape"][k]>;
       },
       {
-        optional: string & keyof T["_zod"]["shape"];
+        optional: string & keyof T["_zod"]["def"]["shape"];
         defaulted: never;
         extra: T["_zod"]["extra"];
       }
     >
   : ZodObject<
       {
-        [k in keyof T["_zod"]["shape"]]: ZodOptional<T["_zod"]["shape"][k]>;
+        [k in keyof T["_zod"]["def"]["shape"]]: ZodOptional<T["_zod"]["def"]["shape"][k]>;
       },
       T["_zod"]["extra"]
     >;
-export function partial<T extends ZodObjectLike, M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>>(
+export function partial<T extends ZodObjectLike, M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>>(
   schema: T,
   mask: M
 ): T["_zod"]["def"]["type"] extends "interface"
   ? ZodInterface<
       util.ExtendShape<
-        T["_zod"]["shape"],
+        T["_zod"]["def"]["shape"],
         {
-          [k in keyof M & keyof T["_zod"]["shape"]]: ZodOptional<T["_zod"]["shape"][k]>;
+          [k in keyof M & keyof T["_zod"]["def"]["shape"]]: ZodOptional<T["_zod"]["def"]["shape"][k]>;
         }
       >,
       {
@@ -1516,7 +1525,9 @@ export function partial<T extends ZodObjectLike, M extends util.Exactly<util.Mas
     >
   : ZodObject<
       {
-        [k in keyof T["_zod"]["shape"]]: k extends keyof M ? ZodOptional<T["_zod"]["shape"][k]> : T["_zod"]["shape"][k];
+        [k in keyof T["_zod"]["def"]["shape"]]: k extends keyof M
+          ? ZodOptional<T["_zod"]["def"]["shape"][k]>
+          : T["_zod"]["def"]["shape"][k];
       },
       T["_zod"]["extra"]
     >;
@@ -1529,19 +1540,19 @@ export function partial(schema: ZodObjectLike, mask?: object): ZodObjectLike {
 export function required<T extends { _subtype: "object" } & ZodObject>(
   schema: T
 ): ZodObject<{
-  [k in keyof T["_zod"]["shape"]]: ZodNonOptional<T["_zod"]["shape"][k]>;
+  [k in keyof T["_zod"]["def"]["shape"]]: ZodNonOptional<T["_zod"]["def"]["shape"][k]>;
 }>;
 export function required<
   T extends { _subtype: "object" } & ZodObject,
-  M extends util.Exactly<util.Mask<keyof T["_zod"]["shape"]>, M>,
+  M extends util.Exactly<util.Mask<keyof T["_zod"]["def"]["shape"]>, M>,
 >(
   schema: T,
   mask: M
 ): ZodObject<
   util.ExtendShape<
-    T["_zod"]["shape"],
+    T["_zod"]["def"]["shape"],
     {
-      [k in keyof M & keyof T["_zod"]["shape"]]: ZodNonOptional<T["_zod"]["shape"][k]>;
+      [k in keyof M & keyof T["_zod"]["def"]["shape"]]: ZodNonOptional<T["_zod"]["def"]["shape"][k]>;
     }
   >
 >;
@@ -1549,7 +1560,7 @@ export function required<T extends { _subtype: "interface" } & ZodInterface>(
   schema: T
 ): ZodInterface<
   {
-    [k in keyof T["_zod"]["shape"]]: ZodNonOptional<T["_zod"]["shape"][k]>;
+    [k in keyof T["_zod"]["def"]["shape"]]: ZodNonOptional<T["_zod"]["def"]["shape"][k]>;
   },
   {
     optional: never;
@@ -1565,9 +1576,9 @@ export function required<
   mask: M
 ): ZodInterface<
   util.ExtendShape<
-    T["_zod"]["shape"],
+    T["_zod"]["def"]["shape"],
     {
-      [k in keyof M & keyof T["_zod"]["shape"]]: ZodNonOptional<T["_zod"]["shape"][k]>;
+      [k in keyof M & keyof T["_zod"]["def"]["shape"]]: ZodNonOptional<T["_zod"]["def"]["shape"][k]>;
     }
   >,
   {
@@ -1581,7 +1592,7 @@ export function required(schema: ZodObjectLike, mask?: object): ZodObjectLike {
 }
 
 // ZodUnion
-export interface ZodUnion<T extends readonly SomeType[] = readonly SomeType[]> extends ZodType {
+export interface ZodUnion<T extends readonly core.$ZodType[] = readonly core.$ZodType[]> extends ZodType {
   _zod: core.$ZodUnionInternals<T>;
   options: T;
 }
@@ -1591,7 +1602,10 @@ export const ZodUnion: core.$constructor<ZodUnion> = /*@__PURE__*/ core.$constru
   inst.options = def.options;
 });
 
-export function union<const T extends readonly SomeType[]>(options: T, params?: core.$ZodUnionParams): ZodUnion<T> {
+export function union<const T extends readonly core.$ZodType[]>(
+  options: T,
+  params?: core.$ZodUnionParams
+): ZodUnion<T> {
   return new ZodUnion({
     type: "union",
     options,
@@ -1600,7 +1614,7 @@ export function union<const T extends readonly SomeType[]>(options: T, params?:
 }
 
 // ZodDiscriminatedUnion
-export interface ZodDiscriminatedUnion<Options extends readonly SomeType[] = readonly SomeType[]>
+export interface ZodDiscriminatedUnion<Options extends readonly core.$ZodType[] = readonly core.$ZodType[]>
   extends ZodUnion<Options> {
   _zod: core.$ZodDiscriminatedUnionInternals<Options>;
 }
@@ -1640,7 +1654,8 @@ export function discriminatedUnion(...args: any[]): any {
 }
 
 // ZodIntersection
-export interface ZodIntersection<A extends SomeType = SomeType, B extends SomeType = SomeType> extends ZodType {
+export interface ZodIntersection<A extends core.$ZodType = core.$ZodType, B extends core.$ZodType = core.$ZodType>
+  extends ZodType {
   _zod: core.$ZodIntersectionInternals<A, B>;
 }
 export const ZodIntersection: core.$constructor<ZodIntersection> = /*@__PURE__*/ core.$constructor(
@@ -1651,7 +1666,7 @@ export const ZodIntersection: core.$constructor<ZodIntersection> = /*@__PURE__*/
   }
 );
 
-export function intersection<T extends SomeType, U extends SomeType>(
+export function intersection<T extends core.$ZodType, U extends core.$ZodType>(
   left: T,
   right: U,
   params?: core.$ZodIntersectionParams
@@ -1665,8 +1680,10 @@ export function intersection<T extends SomeType, U extends SomeType>(
 }
 
 // ZodTuple
-export interface ZodTuple<T extends util.TupleItems = util.TupleItems, Rest extends SomeType | null = SomeType | null>
-  extends ZodType {
+export interface ZodTuple<
+  T extends util.TupleItems = util.TupleItems,
+  Rest extends core.$ZodType | null = core.$ZodType | null,
+> extends ZodType {
   _zod: core.$ZodTupleInternals<T, Rest>;
   rest<Rest extends core.$ZodType>(rest: Rest): ZodTuple<T, Rest>;
 }
@@ -1680,19 +1697,19 @@ export const ZodTuple: core.$constructor<ZodTuple> = /*@__PURE__*/ core.$constru
     }) as any;
 });
 
-export function tuple<T extends readonly [SomeType, ...SomeType[]]>(
+export function tuple<T extends readonly [core.$ZodType, ...core.$ZodType[]]>(
   items: T,
   params?: core.$ZodTupleParams
 ): ZodTuple<T, null>;
-export function tuple<T extends readonly [SomeType, ...SomeType[]], Rest extends SomeType>(
+export function tuple<T extends readonly [core.$ZodType, ...core.$ZodType[]], Rest extends core.$ZodType>(
   items: T,
   rest: Rest,
   params?: core.$ZodTupleParams
 ): ZodTuple<T, Rest>;
 export function tuple(items: [], params?: core.$ZodTupleParams): ZodTuple<[], null>;
 export function tuple(
-  items: SomeType[],
-  _paramsOrRest?: core.$ZodTupleParams | SomeType,
+  items: core.$ZodType[],
+  _paramsOrRest?: core.$ZodTupleParams | core.$ZodType,
   _params?: core.$ZodTupleParams
 ) {
   const hasRest = _paramsOrRest instanceof core.$ZodType;
@@ -1707,8 +1724,10 @@ export function tuple(
 }
 
 // ZodRecord
-export interface ZodRecord<Key extends core.$ZodRecordKey = core.$ZodRecordKey, Value extends SomeType = SomeType>
-  extends ZodType {
+export interface ZodRecord<
+  Key extends core.$ZodRecordKey = core.$ZodRecordKey,
+  Value extends core.$ZodType = core.$ZodType,
+> extends ZodType {
   _zod: core.$ZodRecordInternals<Key, Value>;
   keyType: Key;
   valueType: Value;
@@ -1721,7 +1740,7 @@ export const ZodRecord: core.$constructor<ZodRecord> = /*@__PURE__*/ core.$const
   inst.valueType = def.valueType;
 });
 
-export function record<Key extends core.$ZodRecordKey, Value extends SomeType>(
+export function record<Key extends core.$ZodRecordKey, Value extends core.$ZodType>(
   keyType: Key,
   valueType: Value,
   params?: core.$ZodRecordParams
@@ -1735,7 +1754,8 @@ export function record<Key extends core.$ZodRecordKey, Value extends SomeType>(
 }
 
 // ZodMap
-export interface ZodMap<Key extends SomeType = SomeType, Value extends SomeType = SomeType> extends ZodType {
+export interface ZodMap<Key extends core.$ZodType = core.$ZodType, Value extends core.$ZodType = core.$ZodType>
+  extends ZodType {
   _zod: core.$ZodMapInternals<Key, Value>;
 
   keyType: Key;
@@ -1748,7 +1768,7 @@ export const ZodMap: core.$constructor<ZodMap> = /*@__PURE__*/ core.$constructor
   inst.valueType = def.valueType;
 });
 
-export function map<Key extends SomeType, Value extends SomeType>(
+export function map<Key extends core.$ZodType, Value extends core.$ZodType>(
   keyType: Key,
   valueType: Value,
   params?: core.$ZodMapParams
@@ -1762,7 +1782,7 @@ export function map<Key extends SomeType, Value extends SomeType>(
 }
 
 // ZodSet
-export interface ZodSet<T extends SomeType = SomeType> extends ZodType {
+export interface ZodSet<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodSetInternals<T>;
   min(minSize: number, params?: core.$ZodCheckMinSizeParams): this;
   /** */
@@ -1780,7 +1800,7 @@ export const ZodSet: core.$constructor<ZodSet> = /*@__PURE__*/ core.$constructor
   inst.size = (...args) => inst.check(core._size(...args));
 });
 
-export function set<Value extends SomeType>(valueType: Value, params?: core.$ZodSetParams): ZodSet<Value> {
+export function set<Value extends core.$ZodType>(valueType: Value, params?: core.$ZodSetParams): ZodSet<Value> {
   return new ZodSet({
     type: "set",
     valueType,
@@ -1845,8 +1865,11 @@ export const ZodEnum: core.$constructor<ZodEnum> = /*@__PURE__*/ core.$construct
   };
 });
 
-function _enum<const T extends string[]>(values: T, params?: core.$ZodEnumParams): ZodEnum<util.ToEnum<T[number]>>;
-function _enum<T extends util.EnumLike>(entries: T, params?: core.$ZodEnumParams): ZodEnum<T>;
+function _enum<const T extends readonly string[]>(
+  values: T,
+  params?: core.$ZodEnumParams
+): ZodEnum<util.ToEnum<T[number]>>;
+function _enum<const T extends util.EnumLike>(entries: T, params?: core.$ZodEnumParams): ZodEnum<T>;
 function _enum(values: any, params?: core.$ZodEnumParams) {
   const entries: any = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
 
@@ -1970,7 +1993,7 @@ export function transform<I = unknown, O = I>(
 }
 
 // ZodOptional
-export interface ZodOptional<T extends SomeType = SomeType> extends ZodType {
+export interface ZodOptional<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodOptionalInternals<T>;
 
   unwrap(): T;
@@ -1985,7 +2008,7 @@ export const ZodOptional: core.$constructor<ZodOptional> = /*@__PURE__*/ core.$c
   }
 );
 
-export function optional<T extends SomeType>(innerType: T, params?: core.$ZodOptionalParams): ZodOptional<T> {
+export function optional<T extends core.$ZodType>(innerType: T, params?: core.$ZodOptionalParams): ZodOptional<T> {
   return new ZodOptional({
     type: "optional",
     innerType,
@@ -1994,7 +2017,7 @@ export function optional<T extends SomeType>(innerType: T, params?: core.$ZodOpt
 }
 
 // ZodNullable
-export interface ZodNullable<T extends SomeType = SomeType> extends ZodType {
+export interface ZodNullable<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodNullableInternals<T>;
 
   unwrap(): T;
@@ -2009,7 +2032,7 @@ export const ZodNullable: core.$constructor<ZodNullable> = /*@__PURE__*/ core.$c
   }
 );
 
-export function nullable<T extends SomeType>(innerType: T, params?: core.$ZodNullableParams): ZodNullable<T> {
+export function nullable<T extends core.$ZodType>(innerType: T, params?: core.$ZodNullableParams): ZodNullable<T> {
   return new ZodNullable({
     type: "nullable",
     innerType,
@@ -2018,12 +2041,12 @@ export function nullable<T extends SomeType>(innerType: T, params?: core.$ZodNul
 }
 
 // nullish
-export function nullish<T extends SomeType>(innerType: T): ZodOptional<ZodNullable<T>> {
+export function nullish<T extends core.$ZodType>(innerType: T): ZodOptional<ZodNullable<T>> {
   return optional(nullable(innerType));
 }
 
 // ZodDefault
-export interface ZodDefault<T extends SomeType = SomeType> extends ZodType {
+export interface ZodDefault<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodDefaultInternals<T>;
 
   unwrap(): T;
@@ -2038,7 +2061,7 @@ export const ZodDefault: core.$constructor<ZodDefault> = /*@__PURE__*/ core.$con
   inst.removeDefault = inst.unwrap;
 });
 
-export function _default<T extends SomeType>(
+export function _default<T extends core.$ZodType>(
   innerType: T,
   defaultValue: util.NoUndefined<core.output<T>> | (() => util.NoUndefined<core.output<T>>),
   params?: core.$ZodDefaultParams
@@ -2052,7 +2075,7 @@ export function _default<T extends SomeType>(
 }
 
 // ZodNonOptional
-export interface ZodNonOptional<T extends SomeType = SomeType> extends ZodType {
+export interface ZodNonOptional<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodNonOptionalInternals<T>;
 
   unwrap(): T;
@@ -2067,7 +2090,10 @@ export const ZodNonOptional: core.$constructor<ZodNonOptional> = /*@__PURE__*/ c
   }
 );
 
-export function nonoptional<T extends SomeType>(innerType: T, params?: core.$ZodNonOptionalParams): ZodNonOptional<T> {
+export function nonoptional<T extends core.$ZodType>(
+  innerType: T,
+  params?: core.$ZodNonOptionalParams
+): ZodNonOptional<T> {
   return new ZodNonOptional({
     type: "nonoptional",
     innerType,
@@ -2076,7 +2102,7 @@ export function nonoptional<T extends SomeType>(innerType: T, params?: core.$Zod
 }
 
 // ZodSuccess
-export interface ZodSuccess<T extends SomeType = SomeType> extends ZodType {
+export interface ZodSuccess<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodSuccessInternals<T>;
 
   unwrap(): T;
@@ -2088,7 +2114,7 @@ export const ZodSuccess: core.$constructor<ZodSuccess> = /*@__PURE__*/ core.$con
   inst.unwrap = () => inst._zod.def.innerType;
 });
 
-export function success<T extends SomeType>(innerType: T, params?: core.$ZodSuccessParams): ZodSuccess<T> {
+export function success<T extends core.$ZodType>(innerType: T, params?: core.$ZodSuccessParams): ZodSuccess<T> {
   return new ZodSuccess({
     type: "success",
     innerType,
@@ -2097,7 +2123,7 @@ export function success<T extends SomeType>(innerType: T, params?: core.$ZodSucc
 }
 
 // ZodCatch
-export interface ZodCatch<T extends SomeType = SomeType> extends ZodType {
+export interface ZodCatch<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodCatchInternals<T>;
 
   unwrap(): T;
@@ -2112,7 +2138,7 @@ export const ZodCatch: core.$constructor<ZodCatch> = /*@__PURE__*/ core.$constru
   inst.removeCatch = inst.unwrap;
 });
 
-function _catch<T extends SomeType>(
+function _catch<T extends core.$ZodType>(
   innerType: T,
   catchValue: core.output<T> | ((ctx: core.$ZodCatchCtx) => core.output<T>),
   params?: core.$ZodCatchParams
@@ -2142,7 +2168,8 @@ export function nan(params?: string | core.$ZodNaNParams): ZodNaN {
 }
 
 // ZodPipe
-export interface ZodPipe<A extends SomeType = SomeType, B extends SomeType = SomeType> extends ZodType {
+export interface ZodPipe<A extends core.$ZodType = core.$ZodType, B extends core.$ZodType = core.$ZodType>
+  extends ZodType {
   _zod: core.$ZodPipeInternals<A, B>;
 
   in: A;
@@ -2170,7 +2197,7 @@ export function pipe(in_: core.$ZodType, out: core.$ZodType, params?: core.$ZodP
 }
 
 // ZodReadonly
-export interface ZodReadonly<T extends SomeType = SomeType> extends ZodType {
+export interface ZodReadonly<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodReadonlyInternals<T>;
 }
 export const ZodReadonly: core.$constructor<ZodReadonly> = /*@__PURE__*/ core.$constructor(
@@ -2181,7 +2208,7 @@ export const ZodReadonly: core.$constructor<ZodReadonly> = /*@__PURE__*/ core.$c
   }
 );
 
-export function readonly<T extends SomeType>(innerType: T, params?: core.$ZodReadonlyParams): ZodReadonly<T> {
+export function readonly<T extends core.$ZodType>(innerType: T, params?: core.$ZodReadonlyParams): ZodReadonly<T> {
   return new ZodReadonly({
     type: "readonly",
     innerType,
@@ -2213,7 +2240,7 @@ export function templateLiteral<const Parts extends core.$TemplateLiteralPart[]>
 }
 
 // ZodLazy
-export interface ZodLazy<T extends SomeType = SomeType> extends ZodType {
+export interface ZodLazy<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodLazyInternals<T>;
 
   unwrap(): T;
@@ -2225,7 +2252,7 @@ export const ZodLazy: core.$constructor<ZodLazy> = /*@__PURE__*/ core.$construct
   inst.unwrap = () => inst._zod.def.getter();
 });
 
-export function lazy<T extends SomeType>(getter: () => T): ZodLazy<T> {
+export function lazy<T extends core.$ZodType>(getter: () => T): ZodLazy<T> {
   return new ZodLazy({
     type: "lazy",
     getter,
@@ -2233,7 +2260,7 @@ export function lazy<T extends SomeType>(getter: () => T): ZodLazy<T> {
 }
 
 // ZodPromise
-export interface ZodPromise<T extends SomeType = SomeType> extends ZodType {
+export interface ZodPromise<T extends core.$ZodType = core.$ZodType> extends ZodType {
   _zod: core.$ZodPromiseInternals<T>;
 
   unwrap(): T;
@@ -2245,7 +2272,7 @@ export const ZodPromise: core.$constructor<ZodPromise> = /*@__PURE__*/ core.$con
   inst.unwrap = () => inst._zod.def.innerType;
 });
 
-export function promise<T extends SomeType>(innerType: T, params?: core.$ZodPromiseParams): ZodPromise<T> {
+export function promise<T extends core.$ZodType>(innerType: T, params?: core.$ZodPromiseParams): ZodPromise<T> {
   return new ZodPromise({
     type: "promise",
     innerType,
diff --git a/play.ts b/play.ts
index ea75ce57..a6f32fb0 100644
--- a/play.ts
+++ b/play.ts
@@ -1,3 +1,3 @@
 import * as z from "zod";
 
-console.dir(z.number().min(0).safeParse(-1), { depth: null });
+console.log(z.object({}).parse([]));
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 703aafd4..94d50ba5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -21,8 +21,8 @@ importers:
         specifier: ^2.2.4
         version: 2.2.4
       '@types/node':
-        specifier: ^20.17.14
-        version: 20.17.14
+        specifier: ^20.17.30
+        version: 20.17.30
       '@web-std/file':
         specifier: ^3.0.3
         version: 3.0.3
@@ -33,8 +33,8 @@ importers:
         specifier: workspace:*
         version: link:packages/mini
       arktype:
-        specifier: ^2.0.0
-        version: 2.0.0
+        specifier: ^2.1.19
+        version: 2.1.19
       benchmark:
         specifier: ^2.1.4
         version: 2.1.4
@@ -60,8 +60,8 @@ importers:
         specifier: ^0.1.14
         version: 0.1.14
       prettier:
-        specifier: ^3.4.2
-        version: 3.4.2
+        specifier: ^3.5.3
+        version: 3.5.3
       tinybench:
         specifier: ^2.9.0
         version: 2.9.0
@@ -75,14 +75,14 @@ importers:
         specifier: ^2.8.1
         version: 2.8.1
       tsx:
-        specifier: ^4.19.2
-        version: 4.19.2
+        specifier: ^4.19.3
+        version: 4.19.3
       typescript:
-        specifier: ~5.5.0
-        version: 5.5.3
+        specifier: ~5.5.4
+        version: 5.5.4
       vitest:
-        specifier: ^2.0.0
-        version: 2.1.9(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0)
+        specifier: ^2.1.9
+        version: 2.1.9(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0)
       zod:
         specifier: workspace:*
         version: link:packages/zod
@@ -96,17 +96,17 @@ importers:
         specifier: workspace:*
         version: link:../mini
       arktype:
-        specifier: 2.0.0
-        version: 2.0.0
+        specifier: ^2.1.19
+        version: 2.1.19
       valibot:
-        specifier: 1.0.0-rc.2
-        version: 1.0.0-rc.2(typescript@5.8.2)
+        specifier: ^1.0.0
+        version: 1.0.0(typescript@5.8.2)
       zod:
         specifier: workspace:*
         version: link:../zod
       zod3:
-        specifier: npm:zod@3.23.7
-        version: zod@3.23.7
+        specifier: npm:zod@^3.23.7
+        version: zod@3.24.2
 
   packages/core: {}
 
@@ -237,8 +237,8 @@ importers:
         specifier: ^9.5.2
         version: 9.5.2
       valibot:
-        specifier: 1.0.0-beta.12
-        version: 1.0.0-beta.12(typescript@5.8.2)
+        specifier: ^1.0.0
+        version: 1.0.0(typescript@5.8.2)
       zod:
         specifier: workspace:*
         version: link:../zod
@@ -273,14 +273,14 @@ packages:
   '@ark/schema@0.33.0':
     resolution: {integrity: sha512-GPjzbiydOL5gd9UFZMUQr5JBqT9YTX2dPT+u18aNswlGOgQE01y9B6kiwK/JyoaSwEJSDyxAPABsVRL7gG9KSQ==}
 
-  '@ark/schema@0.35.0':
-    resolution: {integrity: sha512-cV3tiYpIFIt4JB4ZrXSUJ6v2nnAzbX5DqaNWRMpk4pVQV15HMEawg6wYn+JKEI16vfRCIcGqxxdGBvE0zIxqKw==}
+  '@ark/schema@0.45.9':
+    resolution: {integrity: sha512-rG0v/JI0sibn/0wERAHTYVLCtEqoMP2IIlxnb+S5DrEjCI5wpubbZSWMDW50tZ8tV6FANu6zzHDeeKbp6lsZdg==}
 
   '@ark/util@0.33.0':
     resolution: {integrity: sha512-zzYQiRHLPwK15T5CM6SgQXTycKNpAvA2qwdlMbK5vFbLzy3P87VNKA8NiezBIXm+jsov3lEtMKE6kLtbZQDUbg==}
 
-  '@ark/util@0.35.0':
-    resolution: {integrity: sha512-KxhwMOGMoV605zcqoBVyNFEtKAc3PKy95IWmVz9dwuUzIQ+sh7Bk9KEnlGPXcPAD8DCDs/10deHeO1kfWWONvg==}
+  '@ark/util@0.45.9':
+    resolution: {integrity: sha512-0WYNAb8aRGp7dNt6xIvIrRzL7V1XL3u3PK2vcklhtTrdaP235DjC9qJhzidrxtWr68mA5ySSjUrgrXk622bKkw==}
 
   '@babel/runtime@7.27.0':
     resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
@@ -355,14 +355,14 @@ packages:
     cpu: [ppc64]
     os: [aix]
 
-  '@esbuild/aix-ppc64@0.23.1':
-    resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
+  '@esbuild/aix-ppc64@0.25.1':
+    resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==}
     engines: {node: '>=18'}
     cpu: [ppc64]
     os: [aix]
 
-  '@esbuild/aix-ppc64@0.25.1':
-    resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==}
+  '@esbuild/aix-ppc64@0.25.2':
+    resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==}
     engines: {node: '>=18'}
     cpu: [ppc64]
     os: [aix]
@@ -373,14 +373,14 @@ packages:
     cpu: [arm64]
     os: [android]
 
-  '@esbuild/android-arm64@0.23.1':
-    resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
+  '@esbuild/android-arm64@0.25.1':
+    resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [android]
 
-  '@esbuild/android-arm64@0.25.1':
-    resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==}
+  '@esbuild/android-arm64@0.25.2':
+    resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [android]
@@ -391,14 +391,14 @@ packages:
     cpu: [arm]
     os: [android]
 
-  '@esbuild/android-arm@0.23.1':
-    resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
+  '@esbuild/android-arm@0.25.1':
+    resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==}
     engines: {node: '>=18'}
     cpu: [arm]
     os: [android]
 
-  '@esbuild/android-arm@0.25.1':
-    resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==}
+  '@esbuild/android-arm@0.25.2':
+    resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==}
     engines: {node: '>=18'}
     cpu: [arm]
     os: [android]
@@ -409,14 +409,14 @@ packages:
     cpu: [x64]
     os: [android]
 
-  '@esbuild/android-x64@0.23.1':
-    resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
+  '@esbuild/android-x64@0.25.1':
+    resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [android]
 
-  '@esbuild/android-x64@0.25.1':
-    resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==}
+  '@esbuild/android-x64@0.25.2':
+    resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [android]
@@ -427,14 +427,14 @@ packages:
     cpu: [arm64]
     os: [darwin]
 
-  '@esbuild/darwin-arm64@0.23.1':
-    resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
+  '@esbuild/darwin-arm64@0.25.1':
+    resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [darwin]
 
-  '@esbuild/darwin-arm64@0.25.1':
-    resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==}
+  '@esbuild/darwin-arm64@0.25.2':
+    resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [darwin]
@@ -445,14 +445,14 @@ packages:
     cpu: [x64]
     os: [darwin]
 
-  '@esbuild/darwin-x64@0.23.1':
-    resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
+  '@esbuild/darwin-x64@0.25.1':
+    resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [darwin]
 
-  '@esbuild/darwin-x64@0.25.1':
-    resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==}
+  '@esbuild/darwin-x64@0.25.2':
+    resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [darwin]
@@ -463,14 +463,14 @@ packages:
     cpu: [arm64]
     os: [freebsd]
 
-  '@esbuild/freebsd-arm64@0.23.1':
-    resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
+  '@esbuild/freebsd-arm64@0.25.1':
+    resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [freebsd]
 
-  '@esbuild/freebsd-arm64@0.25.1':
-    resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==}
+  '@esbuild/freebsd-arm64@0.25.2':
+    resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [freebsd]
@@ -481,14 +481,14 @@ packages:
     cpu: [x64]
     os: [freebsd]
 
-  '@esbuild/freebsd-x64@0.23.1':
-    resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
+  '@esbuild/freebsd-x64@0.25.1':
+    resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [freebsd]
 
-  '@esbuild/freebsd-x64@0.25.1':
-    resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==}
+  '@esbuild/freebsd-x64@0.25.2':
+    resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [freebsd]
@@ -499,14 +499,14 @@ packages:
     cpu: [arm64]
     os: [linux]
 
-  '@esbuild/linux-arm64@0.23.1':
-    resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
+  '@esbuild/linux-arm64@0.25.1':
+    resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [linux]
 
-  '@esbuild/linux-arm64@0.25.1':
-    resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==}
+  '@esbuild/linux-arm64@0.25.2':
+    resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [linux]
@@ -517,14 +517,14 @@ packages:
     cpu: [arm]
     os: [linux]
 
-  '@esbuild/linux-arm@0.23.1':
-    resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
+  '@esbuild/linux-arm@0.25.1':
+    resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==}
     engines: {node: '>=18'}
     cpu: [arm]
     os: [linux]
 
-  '@esbuild/linux-arm@0.25.1':
-    resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==}
+  '@esbuild/linux-arm@0.25.2':
+    resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==}
     engines: {node: '>=18'}
     cpu: [arm]
     os: [linux]
@@ -535,14 +535,14 @@ packages:
     cpu: [ia32]
     os: [linux]
 
-  '@esbuild/linux-ia32@0.23.1':
-    resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
+  '@esbuild/linux-ia32@0.25.1':
+    resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==}
     engines: {node: '>=18'}
     cpu: [ia32]
     os: [linux]
 
-  '@esbuild/linux-ia32@0.25.1':
-    resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==}
+  '@esbuild/linux-ia32@0.25.2':
+    resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==}
     engines: {node: '>=18'}
     cpu: [ia32]
     os: [linux]
@@ -553,14 +553,14 @@ packages:
     cpu: [loong64]
     os: [linux]
 
-  '@esbuild/linux-loong64@0.23.1':
-    resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
+  '@esbuild/linux-loong64@0.25.1':
+    resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==}
     engines: {node: '>=18'}
     cpu: [loong64]
     os: [linux]
 
-  '@esbuild/linux-loong64@0.25.1':
-    resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==}
+  '@esbuild/linux-loong64@0.25.2':
+    resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==}
     engines: {node: '>=18'}
     cpu: [loong64]
     os: [linux]
@@ -571,14 +571,14 @@ packages:
     cpu: [mips64el]
     os: [linux]
 
-  '@esbuild/linux-mips64el@0.23.1':
-    resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
+  '@esbuild/linux-mips64el@0.25.1':
+    resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==}
     engines: {node: '>=18'}
     cpu: [mips64el]
     os: [linux]
 
-  '@esbuild/linux-mips64el@0.25.1':
-    resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==}
+  '@esbuild/linux-mips64el@0.25.2':
+    resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==}
     engines: {node: '>=18'}
     cpu: [mips64el]
     os: [linux]
@@ -589,14 +589,14 @@ packages:
     cpu: [ppc64]
     os: [linux]
 
-  '@esbuild/linux-ppc64@0.23.1':
-    resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
+  '@esbuild/linux-ppc64@0.25.1':
+    resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==}
     engines: {node: '>=18'}
     cpu: [ppc64]
     os: [linux]
 
-  '@esbuild/linux-ppc64@0.25.1':
-    resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==}
+  '@esbuild/linux-ppc64@0.25.2':
+    resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==}
     engines: {node: '>=18'}
     cpu: [ppc64]
     os: [linux]
@@ -607,14 +607,14 @@ packages:
     cpu: [riscv64]
     os: [linux]
 
-  '@esbuild/linux-riscv64@0.23.1':
-    resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
+  '@esbuild/linux-riscv64@0.25.1':
+    resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==}
     engines: {node: '>=18'}
     cpu: [riscv64]
     os: [linux]
 
-  '@esbuild/linux-riscv64@0.25.1':
-    resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==}
+  '@esbuild/linux-riscv64@0.25.2':
+    resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==}
     engines: {node: '>=18'}
     cpu: [riscv64]
     os: [linux]
@@ -625,14 +625,14 @@ packages:
     cpu: [s390x]
     os: [linux]
 
-  '@esbuild/linux-s390x@0.23.1':
-    resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
+  '@esbuild/linux-s390x@0.25.1':
+    resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==}
     engines: {node: '>=18'}
     cpu: [s390x]
     os: [linux]
 
-  '@esbuild/linux-s390x@0.25.1':
-    resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==}
+  '@esbuild/linux-s390x@0.25.2':
+    resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==}
     engines: {node: '>=18'}
     cpu: [s390x]
     os: [linux]
@@ -643,14 +643,14 @@ packages:
     cpu: [x64]
     os: [linux]
 
-  '@esbuild/linux-x64@0.23.1':
-    resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
+  '@esbuild/linux-x64@0.25.1':
+    resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [linux]
 
-  '@esbuild/linux-x64@0.25.1':
-    resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==}
+  '@esbuild/linux-x64@0.25.2':
+    resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [linux]
@@ -661,32 +661,38 @@ packages:
     cpu: [arm64]
     os: [netbsd]
 
+  '@esbuild/netbsd-arm64@0.25.2':
+    resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [netbsd]
+
   '@esbuild/netbsd-x64@0.21.5':
     resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/netbsd-x64@0.23.1':
-    resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
+  '@esbuild/netbsd-x64@0.25.1':
+    resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/netbsd-x64@0.25.1':
-    resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==}
+  '@esbuild/netbsd-x64@0.25.2':
+    resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/openbsd-arm64@0.23.1':
-    resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
+  '@esbuild/openbsd-arm64@0.25.1':
+    resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [openbsd]
 
-  '@esbuild/openbsd-arm64@0.25.1':
-    resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==}
+  '@esbuild/openbsd-arm64@0.25.2':
+    resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [openbsd]
@@ -697,14 +703,14 @@ packages:
     cpu: [x64]
     os: [openbsd]
 
-  '@esbuild/openbsd-x64@0.23.1':
-    resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
+  '@esbuild/openbsd-x64@0.25.1':
+    resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [openbsd]
 
-  '@esbuild/openbsd-x64@0.25.1':
-    resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==}
+  '@esbuild/openbsd-x64@0.25.2':
+    resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [openbsd]
@@ -715,14 +721,14 @@ packages:
     cpu: [x64]
     os: [sunos]
 
-  '@esbuild/sunos-x64@0.23.1':
-    resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
+  '@esbuild/sunos-x64@0.25.1':
+    resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [sunos]
 
-  '@esbuild/sunos-x64@0.25.1':
-    resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==}
+  '@esbuild/sunos-x64@0.25.2':
+    resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [sunos]
@@ -733,14 +739,14 @@ packages:
     cpu: [arm64]
     os: [win32]
 
-  '@esbuild/win32-arm64@0.23.1':
-    resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
+  '@esbuild/win32-arm64@0.25.1':
+    resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [win32]
 
-  '@esbuild/win32-arm64@0.25.1':
-    resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==}
+  '@esbuild/win32-arm64@0.25.2':
+    resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==}
     engines: {node: '>=18'}
     cpu: [arm64]
     os: [win32]
@@ -751,14 +757,14 @@ packages:
     cpu: [ia32]
     os: [win32]
 
-  '@esbuild/win32-ia32@0.23.1':
-    resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
+  '@esbuild/win32-ia32@0.25.1':
+    resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==}
     engines: {node: '>=18'}
     cpu: [ia32]
     os: [win32]
 
-  '@esbuild/win32-ia32@0.25.1':
-    resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==}
+  '@esbuild/win32-ia32@0.25.2':
+    resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==}
     engines: {node: '>=18'}
     cpu: [ia32]
     os: [win32]
@@ -769,14 +775,14 @@ packages:
     cpu: [x64]
     os: [win32]
 
-  '@esbuild/win32-x64@0.23.1':
-    resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
+  '@esbuild/win32-x64@0.25.1':
+    resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [win32]
 
-  '@esbuild/win32-x64@0.25.1':
-    resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==}
+  '@esbuild/win32-x64@0.25.2':
+    resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==}
     engines: {node: '>=18'}
     cpu: [x64]
     os: [win32]
@@ -1907,101 +1913,201 @@ packages:
     cpu: [arm]
     os: [android]
 
+  '@rollup/rollup-android-arm-eabi@4.39.0':
+    resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==}
+    cpu: [arm]
+    os: [android]
+
   '@rollup/rollup-android-arm64@4.37.0':
     resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==}
     cpu: [arm64]
     os: [android]
 
+  '@rollup/rollup-android-arm64@4.39.0':
+    resolution: {integrity: sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==}
+    cpu: [arm64]
+    os: [android]
+
   '@rollup/rollup-darwin-arm64@4.37.0':
     resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==}
     cpu: [arm64]
     os: [darwin]
 
+  '@rollup/rollup-darwin-arm64@4.39.0':
+    resolution: {integrity: sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==}
+    cpu: [arm64]
+    os: [darwin]
+
   '@rollup/rollup-darwin-x64@4.37.0':
     resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==}
     cpu: [x64]
     os: [darwin]
 
+  '@rollup/rollup-darwin-x64@4.39.0':
+    resolution: {integrity: sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==}
+    cpu: [x64]
+    os: [darwin]
+
   '@rollup/rollup-freebsd-arm64@4.37.0':
     resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==}
     cpu: [arm64]
     os: [freebsd]
 
+  '@rollup/rollup-freebsd-arm64@4.39.0':
+    resolution: {integrity: sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==}
+    cpu: [arm64]
+    os: [freebsd]
+
   '@rollup/rollup-freebsd-x64@4.37.0':
     resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==}
     cpu: [x64]
     os: [freebsd]
 
+  '@rollup/rollup-freebsd-x64@4.39.0':
+    resolution: {integrity: sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==}
+    cpu: [x64]
+    os: [freebsd]
+
   '@rollup/rollup-linux-arm-gnueabihf@4.37.0':
     resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==}
     cpu: [arm]
     os: [linux]
 
+  '@rollup/rollup-linux-arm-gnueabihf@4.39.0':
+    resolution: {integrity: sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==}
+    cpu: [arm]
+    os: [linux]
+
   '@rollup/rollup-linux-arm-musleabihf@4.37.0':
     resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==}
     cpu: [arm]
     os: [linux]
 
+  '@rollup/rollup-linux-arm-musleabihf@4.39.0':
+    resolution: {integrity: sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==}
+    cpu: [arm]
+    os: [linux]
+
   '@rollup/rollup-linux-arm64-gnu@4.37.0':
     resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==}
     cpu: [arm64]
     os: [linux]
 
+  '@rollup/rollup-linux-arm64-gnu@4.39.0':
+    resolution: {integrity: sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==}
+    cpu: [arm64]
+    os: [linux]
+
   '@rollup/rollup-linux-arm64-musl@4.37.0':
     resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==}
     cpu: [arm64]
     os: [linux]
 
+  '@rollup/rollup-linux-arm64-musl@4.39.0':
+    resolution: {integrity: sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==}
+    cpu: [arm64]
+    os: [linux]
+
   '@rollup/rollup-linux-loongarch64-gnu@4.37.0':
     resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==}
     cpu: [loong64]
     os: [linux]
 
+  '@rollup/rollup-linux-loongarch64-gnu@4.39.0':
+    resolution: {integrity: sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==}
+    cpu: [loong64]
+    os: [linux]
+
   '@rollup/rollup-linux-powerpc64le-gnu@4.37.0':
     resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==}
     cpu: [ppc64]
     os: [linux]
 
+  '@rollup/rollup-linux-powerpc64le-gnu@4.39.0':
+    resolution: {integrity: sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==}
+    cpu: [ppc64]
+    os: [linux]
+
   '@rollup/rollup-linux-riscv64-gnu@4.37.0':
     resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==}
     cpu: [riscv64]
     os: [linux]
 
+  '@rollup/rollup-linux-riscv64-gnu@4.39.0':
+    resolution: {integrity: sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==}
+    cpu: [riscv64]
+    os: [linux]
+
   '@rollup/rollup-linux-riscv64-musl@4.37.0':
     resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==}
     cpu: [riscv64]
     os: [linux]
 
+  '@rollup/rollup-linux-riscv64-musl@4.39.0':
+    resolution: {integrity: sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==}
+    cpu: [riscv64]
+    os: [linux]
+
   '@rollup/rollup-linux-s390x-gnu@4.37.0':
     resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==}
     cpu: [s390x]
     os: [linux]
 
+  '@rollup/rollup-linux-s390x-gnu@4.39.0':
+    resolution: {integrity: sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==}
+    cpu: [s390x]
+    os: [linux]
+
   '@rollup/rollup-linux-x64-gnu@4.37.0':
     resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==}
     cpu: [x64]
     os: [linux]
 
+  '@rollup/rollup-linux-x64-gnu@4.39.0':
+    resolution: {integrity: sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==}
+    cpu: [x64]
+    os: [linux]
+
   '@rollup/rollup-linux-x64-musl@4.37.0':
     resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==}
     cpu: [x64]
     os: [linux]
 
+  '@rollup/rollup-linux-x64-musl@4.39.0':
+    resolution: {integrity: sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==}
+    cpu: [x64]
+    os: [linux]
+
   '@rollup/rollup-win32-arm64-msvc@4.37.0':
     resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==}
     cpu: [arm64]
     os: [win32]
 
+  '@rollup/rollup-win32-arm64-msvc@4.39.0':
+    resolution: {integrity: sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==}
+    cpu: [arm64]
+    os: [win32]
+
   '@rollup/rollup-win32-ia32-msvc@4.37.0':
     resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==}
     cpu: [ia32]
     os: [win32]
 
+  '@rollup/rollup-win32-ia32-msvc@4.39.0':
+    resolution: {integrity: sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==}
+    cpu: [ia32]
+    os: [win32]
+
   '@rollup/rollup-win32-x64-msvc@4.37.0':
     resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==}
     cpu: [x64]
     os: [win32]
 
+  '@rollup/rollup-win32-x64-msvc@4.39.0':
+    resolution: {integrity: sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==}
+    cpu: [x64]
+    os: [win32]
+
   '@sec-ant/readable-stream@0.4.1':
     resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
 
@@ -2207,8 +2313,8 @@ packages:
   '@types/node@18.19.86':
     resolution: {integrity: sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==}
 
-  '@types/node@20.17.14':
-    resolution: {integrity: sha512-w6qdYetNL5KRBiSClK/KWai+2IMEJuAj+EujKCumalFOwXtvOXaEan9AuwcRID2IcOIAWSIfR495hBtgKlx2zg==}
+  '@types/node@20.17.30':
+    resolution: {integrity: sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==}
 
   '@types/node@22.10.5':
     resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==}
@@ -2401,12 +2507,12 @@ packages:
     resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
     engines: {node: '>=10'}
 
-  arktype@2.0.0:
-    resolution: {integrity: sha512-LVuXndcKO+zB7Hg9laGJmXYD5BZYhm/cUFL5pgB/75/3sGnvN8fsQ/yuBlf4JSn90g4rOoU7+9aTvdn5lToWOg==}
-
   arktype@2.0.0-rc.33:
     resolution: {integrity: sha512-ndtDXtunbff0o1urOOXq/eHGuUqIlp5MZ99lWON3MS0LZzF7/WFf+SwOCSomoPj9BptMLMyLS9cIYVNndD5QVQ==}
 
+  arktype@2.1.19:
+    resolution: {integrity: sha512-notORSuTSpfLV7rq0kYC4mTgIVlVR0xQuvtFxOaE9aKiXyON/kgoIBwZZcKeSSb4BebNcfJoGlxJicAUl/HMdw==}
+
   assertion-error@2.0.1:
     resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
     engines: {node: '>=12'}
@@ -2490,12 +2596,16 @@ packages:
     resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
     engines: {node: '>= 0.4'}
 
+  call-bind-apply-helpers@1.0.2:
+    resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+    engines: {node: '>= 0.4'}
+
   call-bind@1.0.8:
     resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
     engines: {node: '>= 0.4'}
 
-  call-bound@1.0.3:
-    resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
+  call-bound@1.0.4:
+    resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
     engines: {node: '>= 0.4'}
 
   camelcase@6.3.0:
@@ -2511,8 +2621,8 @@ packages:
   ccount@2.0.1:
     resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
 
-  chai@5.1.2:
-    resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
+  chai@5.2.0:
+    resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
     engines: {node: '>=12'}
 
   chalk@1.1.3:
@@ -2675,10 +2785,6 @@ packages:
     resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
     engines: {node: '>= 0.6'}
 
-  cross-spawn@7.0.3:
-    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
-    engines: {node: '>= 8'}
-
   cross-spawn@7.0.6:
     resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
     engines: {node: '>= 8'}
@@ -2837,13 +2943,13 @@ packages:
     engines: {node: '>=12'}
     hasBin: true
 
-  esbuild@0.23.1:
-    resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
+  esbuild@0.25.1:
+    resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==}
     engines: {node: '>=18'}
     hasBin: true
 
-  esbuild@0.25.1:
-    resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==}
+  esbuild@0.25.2:
+    resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==}
     engines: {node: '>=18'}
     hasBin: true
 
@@ -2910,8 +3016,8 @@ packages:
     resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
     engines: {node: '>= 0.8.0'}
 
-  expect-type@1.1.0:
-    resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
+  expect-type@1.2.1:
+    resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
     engines: {node: '>=12.0.0'}
 
   exponential-backoff@3.1.2:
@@ -2964,12 +3070,9 @@ packages:
     resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
     engines: {node: '>=8'}
 
-  for-each@0.3.3:
-    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
-
-  foreground-child@3.3.0:
-    resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
-    engines: {node: '>=14'}
+  for-each@0.3.5:
+    resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+    engines: {node: '>= 0.4'}
 
   foreground-child@3.3.1:
     resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
@@ -3061,6 +3164,10 @@ packages:
     resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
     engines: {node: '>= 0.4'}
 
+  get-intrinsic@1.3.0:
+    resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+    engines: {node: '>= 0.4'}
+
   get-nonce@1.0.1:
     resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
     engines: {node: '>=6'}
@@ -3077,8 +3184,8 @@ packages:
     resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
     engines: {node: '>=18'}
 
-  get-tsconfig@4.8.1:
-    resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
+  get-tsconfig@4.10.0:
+    resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
 
   github-slugger@2.0.0:
     resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
@@ -3212,8 +3319,8 @@ packages:
     resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
     engines: {node: '>=10.17.0'}
 
-  human-signals@8.0.0:
-    resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==}
+  human-signals@8.0.1:
+    resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
     engines: {node: '>=18.18.0'}
 
   humanize-ms@1.2.1:
@@ -3353,8 +3460,8 @@ packages:
     resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
     engines: {node: '>= 0.4'}
 
-  is-unicode-supported@2.0.0:
-    resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==}
+  is-unicode-supported@2.1.0:
+    resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
     engines: {node: '>=18'}
 
   is-what@4.1.16:
@@ -3367,8 +3474,8 @@ packages:
   jackspeak@3.4.3:
     resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
 
-  jackspeak@4.0.2:
-    resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
+  jackspeak@4.1.0:
+    resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
     engines: {node: 20 || >=22}
 
   jiti@2.4.2:
@@ -3581,8 +3688,8 @@ packages:
   lru-cache@10.4.3:
     resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
 
-  lru-cache@11.0.2:
-    resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
+  lru-cache@11.1.0:
+    resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
     engines: {node: 20 || >=22}
 
   lru-cache@7.18.3:
@@ -4021,8 +4128,8 @@ packages:
     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
     engines: {node: '>=0.10.0'}
 
-  object-inspect@1.13.3:
-    resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
+  object-inspect@1.13.4:
+    resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
     engines: {node: '>= 0.4'}
 
   octokit@4.1.2:
@@ -4148,8 +4255,8 @@ packages:
     resolution: {integrity: sha512-OLS/0XeUAcE8a2fdwemNja+udKgXNnY6yKVIXqAD2zVRx1KvY6Ato/rZ2vdzbxqYwPW0u6SCNC/bAMPNzpzxbw==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
 
-  possible-typed-array-names@1.0.0:
-    resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+  possible-typed-array-names@1.1.0:
+    resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
     engines: {node: '>= 0.4'}
 
   postcss-selector-parser@7.1.0:
@@ -4167,8 +4274,8 @@ packages:
     resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
     engines: {node: ^10 || ^12 || >=14}
 
-  prettier@3.4.2:
-    resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==}
+  prettier@3.5.3:
+    resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
     engines: {node: '>=14'}
     hasBin: true
 
@@ -4176,8 +4283,8 @@ packages:
     resolution: {integrity: sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==}
     engines: {node: '>=0.10.0'}
 
-  pretty-ms@9.0.0:
-    resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==}
+  pretty-ms@9.2.0:
+    resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==}
     engines: {node: '>=18'}
 
   prism-react-renderer@2.4.1:
@@ -4415,11 +4522,16 @@ packages:
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
+  rollup@4.39.0:
+    resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==}
+    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+    hasBin: true
+
   run-parallel@1.2.0:
     resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
 
-  rxjs@7.8.1:
-    resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+  rxjs@7.8.2:
+    resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
 
   safe-buffer@5.2.1:
     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@@ -4586,8 +4698,8 @@ packages:
   stackback@0.0.2:
     resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
 
-  std-env@3.8.0:
-    resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
+  std-env@3.9.0:
+    resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
 
   streamsearch@1.1.0:
     resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
@@ -4770,8 +4882,8 @@ packages:
   tslib@2.8.1:
     resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
 
-  tsx@4.19.2:
-    resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==}
+  tsx@4.19.3:
+    resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==}
     engines: {node: '>=18.0.0'}
     hasBin: true
 
@@ -4787,8 +4899,8 @@ packages:
     resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
     engines: {node: '>=10'}
 
-  typescript@5.5.3:
-    resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==}
+  typescript@5.5.4:
+    resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
     engines: {node: '>=14.17'}
     hasBin: true
 
@@ -4931,22 +5043,6 @@ packages:
       typescript:
         optional: true
 
-  valibot@1.0.0-beta.12:
-    resolution: {integrity: sha512-j3WIxJ0pmUFMfdfUECn3YnZPYOiG0yHYcFEa/+RVgo0I+MXE3ToLt7gNRLtY5pwGfgNmsmhenGZfU5suu9ijUA==}
-    peerDependencies:
-      typescript: '>=5'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  valibot@1.0.0-rc.2:
-    resolution: {integrity: sha512-Tnnp7dydpihvoUbJiaxuYfsCAgAFKuFMex7PTaI25XSjRWkU70DmJPlAO1W6sF1/WUx4RNWyM2hdmBSMIUSZFA==}
-    peerDependencies:
-      typescript: '>=5'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
   validate-npm-package-license@3.0.4:
     resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
 
@@ -4968,8 +5064,8 @@ packages:
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
 
-  vite@5.4.14:
-    resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==}
+  vite@5.4.18:
+    resolution: {integrity: sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==}
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
     peerDependencies:
@@ -5048,8 +5144,8 @@ packages:
   whatwg-url@5.0.0:
     resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
 
-  which-typed-array@1.1.18:
-    resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
+  which-typed-array@1.1.19:
+    resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
     engines: {node: '>= 0.4'}
 
   which@2.0.2:
@@ -5159,13 +5255,13 @@ snapshots:
     dependencies:
       '@ark/util': 0.33.0
 
-  '@ark/schema@0.35.0':
+  '@ark/schema@0.45.9':
     dependencies:
-      '@ark/util': 0.35.0
+      '@ark/util': 0.45.9
 
   '@ark/util@0.33.0': {}
 
-  '@ark/util@0.35.0': {}
+  '@ark/util@0.45.9': {}
 
   '@babel/runtime@7.27.0':
     dependencies:
@@ -5219,219 +5315,222 @@ snapshots:
   '@esbuild/aix-ppc64@0.21.5':
     optional: true
 
-  '@esbuild/aix-ppc64@0.23.1':
+  '@esbuild/aix-ppc64@0.25.1':
     optional: true
 
-  '@esbuild/aix-ppc64@0.25.1':
+  '@esbuild/aix-ppc64@0.25.2':
     optional: true
 
   '@esbuild/android-arm64@0.21.5':
     optional: true
 
-  '@esbuild/android-arm64@0.23.1':
+  '@esbuild/android-arm64@0.25.1':
     optional: true
 
-  '@esbuild/android-arm64@0.25.1':
+  '@esbuild/android-arm64@0.25.2':
     optional: true
 
   '@esbuild/android-arm@0.21.5':
     optional: true
 
-  '@esbuild/android-arm@0.23.1':
+  '@esbuild/android-arm@0.25.1':
     optional: true
 
-  '@esbuild/android-arm@0.25.1':
+  '@esbuild/android-arm@0.25.2':
     optional: true
 
   '@esbuild/android-x64@0.21.5':
     optional: true
 
-  '@esbuild/android-x64@0.23.1':
+  '@esbuild/android-x64@0.25.1':
     optional: true
 
-  '@esbuild/android-x64@0.25.1':
+  '@esbuild/android-x64@0.25.2':
     optional: true
 
   '@esbuild/darwin-arm64@0.21.5':
     optional: true
 
-  '@esbuild/darwin-arm64@0.23.1':
+  '@esbuild/darwin-arm64@0.25.1':
     optional: true
 
-  '@esbuild/darwin-arm64@0.25.1':
+  '@esbuild/darwin-arm64@0.25.2':
     optional: true
 
   '@esbuild/darwin-x64@0.21.5':
     optional: true
 
-  '@esbuild/darwin-x64@0.23.1':
+  '@esbuild/darwin-x64@0.25.1':
     optional: true
 
-  '@esbuild/darwin-x64@0.25.1':
+  '@esbuild/darwin-x64@0.25.2':
     optional: true
 
   '@esbuild/freebsd-arm64@0.21.5':
     optional: true
 
-  '@esbuild/freebsd-arm64@0.23.1':
+  '@esbuild/freebsd-arm64@0.25.1':
     optional: true
 
-  '@esbuild/freebsd-arm64@0.25.1':
+  '@esbuild/freebsd-arm64@0.25.2':
     optional: true
 
   '@esbuild/freebsd-x64@0.21.5':
     optional: true
 
-  '@esbuild/freebsd-x64@0.23.1':
+  '@esbuild/freebsd-x64@0.25.1':
     optional: true
 
-  '@esbuild/freebsd-x64@0.25.1':
+  '@esbuild/freebsd-x64@0.25.2':
     optional: true
 
   '@esbuild/linux-arm64@0.21.5':
     optional: true
 
-  '@esbuild/linux-arm64@0.23.1':
+  '@esbuild/linux-arm64@0.25.1':
     optional: true
 
-  '@esbuild/linux-arm64@0.25.1':
+  '@esbuild/linux-arm64@0.25.2':
     optional: true
 
   '@esbuild/linux-arm@0.21.5':
     optional: true
 
-  '@esbuild/linux-arm@0.23.1':
+  '@esbuild/linux-arm@0.25.1':
     optional: true
 
-  '@esbuild/linux-arm@0.25.1':
+  '@esbuild/linux-arm@0.25.2':
     optional: true
 
   '@esbuild/linux-ia32@0.21.5':
     optional: true
 
-  '@esbuild/linux-ia32@0.23.1':
+  '@esbuild/linux-ia32@0.25.1':
     optional: true
 
-  '@esbuild/linux-ia32@0.25.1':
+  '@esbuild/linux-ia32@0.25.2':
     optional: true
 
   '@esbuild/linux-loong64@0.21.5':
     optional: true
 
-  '@esbuild/linux-loong64@0.23.1':
+  '@esbuild/linux-loong64@0.25.1':
     optional: true
 
-  '@esbuild/linux-loong64@0.25.1':
+  '@esbuild/linux-loong64@0.25.2':
     optional: true
 
   '@esbuild/linux-mips64el@0.21.5':
     optional: true
 
-  '@esbuild/linux-mips64el@0.23.1':
+  '@esbuild/linux-mips64el@0.25.1':
     optional: true
 
-  '@esbuild/linux-mips64el@0.25.1':
+  '@esbuild/linux-mips64el@0.25.2':
     optional: true
 
   '@esbuild/linux-ppc64@0.21.5':
     optional: true
 
-  '@esbuild/linux-ppc64@0.23.1':
+  '@esbuild/linux-ppc64@0.25.1':
     optional: true
 
-  '@esbuild/linux-ppc64@0.25.1':
+  '@esbuild/linux-ppc64@0.25.2':
     optional: true
 
   '@esbuild/linux-riscv64@0.21.5':
     optional: true
 
-  '@esbuild/linux-riscv64@0.23.1':
+  '@esbuild/linux-riscv64@0.25.1':
     optional: true
 
-  '@esbuild/linux-riscv64@0.25.1':
+  '@esbuild/linux-riscv64@0.25.2':
     optional: true
 
   '@esbuild/linux-s390x@0.21.5':
     optional: true
 
-  '@esbuild/linux-s390x@0.23.1':
+  '@esbuild/linux-s390x@0.25.1':
     optional: true
 
-  '@esbuild/linux-s390x@0.25.1':
+  '@esbuild/linux-s390x@0.25.2':
     optional: true
 
   '@esbuild/linux-x64@0.21.5':
     optional: true
 
-  '@esbuild/linux-x64@0.23.1':
+  '@esbuild/linux-x64@0.25.1':
     optional: true
 
-  '@esbuild/linux-x64@0.25.1':
+  '@esbuild/linux-x64@0.25.2':
     optional: true
 
   '@esbuild/netbsd-arm64@0.25.1':
     optional: true
 
-  '@esbuild/netbsd-x64@0.21.5':
+  '@esbuild/netbsd-arm64@0.25.2':
     optional: true
 
-  '@esbuild/netbsd-x64@0.23.1':
+  '@esbuild/netbsd-x64@0.21.5':
     optional: true
 
   '@esbuild/netbsd-x64@0.25.1':
     optional: true
 
-  '@esbuild/openbsd-arm64@0.23.1':
+  '@esbuild/netbsd-x64@0.25.2':
     optional: true
 
   '@esbuild/openbsd-arm64@0.25.1':
     optional: true
 
-  '@esbuild/openbsd-x64@0.21.5':
+  '@esbuild/openbsd-arm64@0.25.2':
     optional: true
 
-  '@esbuild/openbsd-x64@0.23.1':
+  '@esbuild/openbsd-x64@0.21.5':
     optional: true
 
   '@esbuild/openbsd-x64@0.25.1':
     optional: true
 
-  '@esbuild/sunos-x64@0.21.5':
+  '@esbuild/openbsd-x64@0.25.2':
     optional: true
 
-  '@esbuild/sunos-x64@0.23.1':
+  '@esbuild/sunos-x64@0.21.5':
     optional: true
 
   '@esbuild/sunos-x64@0.25.1':
     optional: true
 
-  '@esbuild/win32-arm64@0.21.5':
+  '@esbuild/sunos-x64@0.25.2':
     optional: true
 
-  '@esbuild/win32-arm64@0.23.1':
+  '@esbuild/win32-arm64@0.21.5':
     optional: true
 
   '@esbuild/win32-arm64@0.25.1':
     optional: true
 
-  '@esbuild/win32-ia32@0.21.5':
+  '@esbuild/win32-arm64@0.25.2':
     optional: true
 
-  '@esbuild/win32-ia32@0.23.1':
+  '@esbuild/win32-ia32@0.21.5':
     optional: true
 
   '@esbuild/win32-ia32@0.25.1':
     optional: true
 
-  '@esbuild/win32-x64@0.21.5':
+  '@esbuild/win32-ia32@0.25.2':
     optional: true
 
-  '@esbuild/win32-x64@0.23.1':
+  '@esbuild/win32-x64@0.21.5':
     optional: true
 
   '@esbuild/win32-x64@0.25.1':
     optional: true
 
+  '@esbuild/win32-x64@0.25.2':
+    optional: true
+
   '@floating-ui/core@1.6.9':
     dependencies:
       '@floating-ui/utils': 0.2.9
@@ -6648,63 +6747,123 @@ snapshots:
   '@rollup/rollup-android-arm-eabi@4.37.0':
     optional: true
 
+  '@rollup/rollup-android-arm-eabi@4.39.0':
+    optional: true
+
   '@rollup/rollup-android-arm64@4.37.0':
     optional: true
 
+  '@rollup/rollup-android-arm64@4.39.0':
+    optional: true
+
   '@rollup/rollup-darwin-arm64@4.37.0':
     optional: true
 
+  '@rollup/rollup-darwin-arm64@4.39.0':
+    optional: true
+
   '@rollup/rollup-darwin-x64@4.37.0':
     optional: true
 
+  '@rollup/rollup-darwin-x64@4.39.0':
+    optional: true
+
   '@rollup/rollup-freebsd-arm64@4.37.0':
     optional: true
 
+  '@rollup/rollup-freebsd-arm64@4.39.0':
+    optional: true
+
   '@rollup/rollup-freebsd-x64@4.37.0':
     optional: true
 
+  '@rollup/rollup-freebsd-x64@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-arm-gnueabihf@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-arm-gnueabihf@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-arm-musleabihf@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-arm-musleabihf@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-arm64-gnu@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-arm64-gnu@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-arm64-musl@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-arm64-musl@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-loongarch64-gnu@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-loongarch64-gnu@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-powerpc64le-gnu@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-powerpc64le-gnu@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-riscv64-gnu@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-riscv64-gnu@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-riscv64-musl@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-riscv64-musl@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-s390x-gnu@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-s390x-gnu@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-x64-gnu@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-x64-gnu@4.39.0':
+    optional: true
+
   '@rollup/rollup-linux-x64-musl@4.37.0':
     optional: true
 
+  '@rollup/rollup-linux-x64-musl@4.39.0':
+    optional: true
+
   '@rollup/rollup-win32-arm64-msvc@4.37.0':
     optional: true
 
+  '@rollup/rollup-win32-arm64-msvc@4.39.0':
+    optional: true
+
   '@rollup/rollup-win32-ia32-msvc@4.37.0':
     optional: true
 
+  '@rollup/rollup-win32-ia32-msvc@4.39.0':
+    optional: true
+
   '@rollup/rollup-win32-x64-msvc@4.37.0':
     optional: true
 
+  '@rollup/rollup-win32-x64-msvc@4.39.0':
+    optional: true
+
   '@sec-ant/readable-stream@0.4.1': {}
 
   '@shikijs/core@3.2.1':
@@ -6914,14 +7073,14 @@ snapshots:
 
   '@types/node-fetch@2.6.12':
     dependencies:
-      '@types/node': 22.13.13
+      '@types/node': 22.13.10
       form-data: 4.0.2
 
   '@types/node@18.19.86':
     dependencies:
       undici-types: 5.26.5
 
-  '@types/node@20.17.14':
+  '@types/node@20.17.30':
     dependencies:
       undici-types: 6.19.8
 
@@ -6978,16 +7137,16 @@ snapshots:
     dependencies:
       '@vitest/spy': 2.1.9
       '@vitest/utils': 2.1.9
-      chai: 5.1.2
+      chai: 5.2.0
       tinyrainbow: 1.2.0
 
-  '@vitest/mocker@2.1.9(vite@5.4.14(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0))':
+  '@vitest/mocker@2.1.9(vite@5.4.18(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0))':
     dependencies:
       '@vitest/spy': 2.1.9
       estree-walker: 3.0.3
       magic-string: 0.30.17
     optionalDependencies:
-      vite: 5.4.14(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0)
+      vite: 5.4.18(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0)
 
   '@vitest/pretty-format@2.1.9':
     dependencies:
@@ -7124,16 +7283,16 @@ snapshots:
     dependencies:
       tslib: 2.8.1
 
-  arktype@2.0.0:
-    dependencies:
-      '@ark/schema': 0.35.0
-      '@ark/util': 0.35.0
-
   arktype@2.0.0-rc.33:
     dependencies:
       '@ark/schema': 0.33.0
       '@ark/util': 0.33.0
 
+  arktype@2.1.19:
+    dependencies:
+      '@ark/schema': 0.45.9
+      '@ark/util': 0.45.9
+
   assertion-error@2.0.1: {}
 
   astral-regex@2.0.0: {}
@@ -7144,7 +7303,7 @@ snapshots:
 
   available-typed-arrays@1.0.7:
     dependencies:
-      possible-typed-array-names: 1.0.0
+      possible-typed-array-names: 1.1.0
 
   bail@2.0.2: {}
 
@@ -7242,17 +7401,22 @@ snapshots:
       es-errors: 1.3.0
       function-bind: 1.1.2
 
+  call-bind-apply-helpers@1.0.2:
+    dependencies:
+      es-errors: 1.3.0
+      function-bind: 1.1.2
+
   call-bind@1.0.8:
     dependencies:
-      call-bind-apply-helpers: 1.0.1
+      call-bind-apply-helpers: 1.0.2
       es-define-property: 1.0.1
-      get-intrinsic: 1.2.7
+      get-intrinsic: 1.3.0
       set-function-length: 1.2.2
 
-  call-bound@1.0.3:
+  call-bound@1.0.4:
     dependencies:
-      call-bind-apply-helpers: 1.0.1
-      get-intrinsic: 1.2.7
+      call-bind-apply-helpers: 1.0.2
+      get-intrinsic: 1.3.0
 
   camelcase@6.3.0: {}
 
@@ -7262,7 +7426,7 @@ snapshots:
 
   ccount@2.0.1: {}
 
-  chai@5.1.2:
+  chai@5.2.0:
     dependencies:
       assertion-error: 2.0.1
       check-error: 2.1.1
@@ -7420,12 +7584,6 @@ snapshots:
 
   content-type@1.0.5: {}
 
-  cross-spawn@7.0.3:
-    dependencies:
-      path-key: 3.1.1
-      shebang-command: 2.0.0
-      which: 2.0.2
-
   cross-spawn@7.0.6:
     dependencies:
       path-key: 3.1.1
@@ -7486,7 +7644,7 @@ snapshots:
 
   dunder-proto@1.0.1:
     dependencies:
-      call-bind-apply-helpers: 1.0.1
+      call-bind-apply-helpers: 1.0.2
       es-errors: 1.3.0
       gopd: 1.2.0
 
@@ -7587,33 +7745,6 @@ snapshots:
       '@esbuild/win32-ia32': 0.21.5
       '@esbuild/win32-x64': 0.21.5
 
-  esbuild@0.23.1:
-    optionalDependencies:
-      '@esbuild/aix-ppc64': 0.23.1
-      '@esbuild/android-arm': 0.23.1
-      '@esbuild/android-arm64': 0.23.1
-      '@esbuild/android-x64': 0.23.1
-      '@esbuild/darwin-arm64': 0.23.1
-      '@esbuild/darwin-x64': 0.23.1
-      '@esbuild/freebsd-arm64': 0.23.1
-      '@esbuild/freebsd-x64': 0.23.1
-      '@esbuild/linux-arm': 0.23.1
-      '@esbuild/linux-arm64': 0.23.1
-      '@esbuild/linux-ia32': 0.23.1
-      '@esbuild/linux-loong64': 0.23.1
-      '@esbuild/linux-mips64el': 0.23.1
-      '@esbuild/linux-ppc64': 0.23.1
-      '@esbuild/linux-riscv64': 0.23.1
-      '@esbuild/linux-s390x': 0.23.1
-      '@esbuild/linux-x64': 0.23.1
-      '@esbuild/netbsd-x64': 0.23.1
-      '@esbuild/openbsd-arm64': 0.23.1
-      '@esbuild/openbsd-x64': 0.23.1
-      '@esbuild/sunos-x64': 0.23.1
-      '@esbuild/win32-arm64': 0.23.1
-      '@esbuild/win32-ia32': 0.23.1
-      '@esbuild/win32-x64': 0.23.1
-
   esbuild@0.25.1:
     optionalDependencies:
       '@esbuild/aix-ppc64': 0.25.1
@@ -7642,6 +7773,34 @@ snapshots:
       '@esbuild/win32-ia32': 0.25.1
       '@esbuild/win32-x64': 0.25.1
 
+  esbuild@0.25.2:
+    optionalDependencies:
+      '@esbuild/aix-ppc64': 0.25.2
+      '@esbuild/android-arm': 0.25.2
+      '@esbuild/android-arm64': 0.25.2
+      '@esbuild/android-x64': 0.25.2
+      '@esbuild/darwin-arm64': 0.25.2
+      '@esbuild/darwin-x64': 0.25.2
+      '@esbuild/freebsd-arm64': 0.25.2
+      '@esbuild/freebsd-x64': 0.25.2
+      '@esbuild/linux-arm': 0.25.2
+      '@esbuild/linux-arm64': 0.25.2
+      '@esbuild/linux-ia32': 0.25.2
+      '@esbuild/linux-loong64': 0.25.2
+      '@esbuild/linux-mips64el': 0.25.2
+      '@esbuild/linux-ppc64': 0.25.2
+      '@esbuild/linux-riscv64': 0.25.2
+      '@esbuild/linux-s390x': 0.25.2
+      '@esbuild/linux-x64': 0.25.2
+      '@esbuild/netbsd-arm64': 0.25.2
+      '@esbuild/netbsd-x64': 0.25.2
+      '@esbuild/openbsd-arm64': 0.25.2
+      '@esbuild/openbsd-x64': 0.25.2
+      '@esbuild/sunos-x64': 0.25.2
+      '@esbuild/win32-arm64': 0.25.2
+      '@esbuild/win32-ia32': 0.25.2
+      '@esbuild/win32-x64': 0.25.2
+
   escalade@3.1.2: {}
 
   escape-html@1.0.3: {}
@@ -7708,21 +7867,21 @@ snapshots:
   execa@9.5.2:
     dependencies:
       '@sindresorhus/merge-streams': 4.0.0
-      cross-spawn: 7.0.3
+      cross-spawn: 7.0.6
       figures: 6.1.0
       get-stream: 9.0.1
-      human-signals: 8.0.0
+      human-signals: 8.0.1
       is-plain-obj: 4.1.0
       is-stream: 4.0.1
       npm-run-path: 6.0.0
-      pretty-ms: 9.0.0
+      pretty-ms: 9.2.0
       signal-exit: 4.1.0
       strip-final-newline: 4.0.0
       yoctocolors: 2.1.1
 
   exit@0.1.2: {}
 
-  expect-type@1.1.0: {}
+  expect-type@1.2.1: {}
 
   exponential-backoff@3.1.2: {}
 
@@ -7761,7 +7920,7 @@ snapshots:
 
   figures@6.1.0:
     dependencies:
-      is-unicode-supported: 2.0.0
+      is-unicode-supported: 2.1.0
 
   filesize@6.4.0: {}
 
@@ -7769,15 +7928,10 @@ snapshots:
     dependencies:
       to-regex-range: 5.0.1
 
-  for-each@0.3.3:
+  for-each@0.3.5:
     dependencies:
       is-callable: 1.2.7
 
-  foreground-child@3.3.0:
-    dependencies:
-      cross-spawn: 7.0.6
-      signal-exit: 4.1.0
-
   foreground-child@3.3.1:
     dependencies:
       cross-spawn: 7.0.6
@@ -7909,6 +8063,19 @@ snapshots:
       hasown: 2.0.2
       math-intrinsics: 1.1.0
 
+  get-intrinsic@1.3.0:
+    dependencies:
+      call-bind-apply-helpers: 1.0.2
+      es-define-property: 1.0.1
+      es-errors: 1.3.0
+      es-object-atoms: 1.1.1
+      function-bind: 1.1.2
+      get-proto: 1.0.1
+      gopd: 1.2.0
+      has-symbols: 1.1.0
+      hasown: 2.0.2
+      math-intrinsics: 1.1.0
+
   get-nonce@1.0.1: {}
 
   get-proto@1.0.1:
@@ -7923,7 +8090,7 @@ snapshots:
       '@sec-ant/readable-stream': 0.4.1
       is-stream: 4.0.1
 
-  get-tsconfig@4.8.1:
+  get-tsconfig@4.10.0:
     dependencies:
       resolve-pkg-maps: 1.0.0
 
@@ -7944,8 +8111,8 @@ snapshots:
 
   glob@11.0.1:
     dependencies:
-      foreground-child: 3.3.0
-      jackspeak: 4.0.2
+      foreground-child: 3.3.1
+      jackspeak: 4.1.0
       minimatch: 10.0.1
       minipass: 7.1.2
       package-json-from-dist: 1.0.1
@@ -8152,7 +8319,7 @@ snapshots:
 
   human-signals@2.1.0: {}
 
-  human-signals@8.0.0: {}
+  human-signals@8.0.1: {}
 
   humanize-ms@1.2.1:
     dependencies:
@@ -8202,7 +8369,7 @@ snapshots:
 
   is-arguments@1.2.0:
     dependencies:
-      call-bound: 1.0.3
+      call-bound: 1.0.4
       has-tostringtag: 1.0.2
 
   is-arrayish@0.3.2:
@@ -8230,7 +8397,7 @@ snapshots:
 
   is-generator-function@1.1.0:
     dependencies:
-      call-bound: 1.0.3
+      call-bound: 1.0.4
       get-proto: 1.0.1
       has-tostringtag: 1.0.2
       safe-regex-test: 1.1.0
@@ -8255,7 +8422,7 @@ snapshots:
 
   is-regex@1.2.1:
     dependencies:
-      call-bound: 1.0.3
+      call-bound: 1.0.4
       gopd: 1.2.0
       has-tostringtag: 1.0.2
       hasown: 2.0.2
@@ -8266,9 +8433,9 @@ snapshots:
 
   is-typed-array@1.1.15:
     dependencies:
-      which-typed-array: 1.1.18
+      which-typed-array: 1.1.19
 
-  is-unicode-supported@2.0.0: {}
+  is-unicode-supported@2.1.0: {}
 
   is-what@4.1.16: {}
 
@@ -8280,7 +8447,7 @@ snapshots:
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
 
-  jackspeak@4.0.2:
+  jackspeak@4.1.0:
     dependencies:
       '@isaacs/cliui': 8.0.2
 
@@ -8423,7 +8590,7 @@ snapshots:
       listr2: 4.0.5(enquirer@2.4.1)
       micromatch: 4.0.8
       normalize-path: 3.0.0
-      object-inspect: 1.13.3
+      object-inspect: 1.13.4
       pidtree: 0.5.0
       string-argv: 0.3.2
       supports-color: 9.4.0
@@ -8438,7 +8605,7 @@ snapshots:
       log-update: 4.0.0
       p-map: 4.0.0
       rfdc: 1.4.1
-      rxjs: 7.8.1
+      rxjs: 7.8.2
       through: 2.3.8
       wrap-ansi: 7.0.0
     optionalDependencies:
@@ -8465,7 +8632,7 @@ snapshots:
 
   lru-cache@10.4.3: {}
 
-  lru-cache@11.0.2: {}
+  lru-cache@11.1.0: {}
 
   lru-cache@7.18.3: {}
 
@@ -9222,7 +9389,7 @@ snapshots:
 
   object-assign@4.1.1: {}
 
-  object-inspect@1.13.3: {}
+  object-inspect@1.13.4: {}
 
   octokit@4.1.2:
     dependencies:
@@ -9350,7 +9517,7 @@ snapshots:
 
   path-scurry@2.0.0:
     dependencies:
-      lru-cache: 11.0.2
+      lru-cache: 11.1.0
       minipass: 7.1.2
 
   pathe@1.1.2: {}
@@ -9369,7 +9536,7 @@ snapshots:
 
   polite-json@5.0.0: {}
 
-  possible-typed-array-names@1.0.0: {}
+  possible-typed-array-names@1.1.0: {}
 
   postcss-selector-parser@7.1.0:
     dependencies:
@@ -9390,13 +9557,13 @@ snapshots:
       picocolors: 1.1.1
       source-map-js: 1.2.1
 
-  prettier@3.4.2: {}
+  prettier@3.5.3: {}
 
   pretty-bytes@3.0.1:
     dependencies:
       number-is-nan: 1.0.1
 
-  pretty-ms@9.0.0:
+  pretty-ms@9.2.0:
     dependencies:
       parse-ms: 4.0.0
 
@@ -9725,11 +9892,37 @@ snapshots:
       '@rollup/rollup-win32-x64-msvc': 4.37.0
       fsevents: 2.3.3
 
+  rollup@4.39.0:
+    dependencies:
+      '@types/estree': 1.0.7
+    optionalDependencies:
+      '@rollup/rollup-android-arm-eabi': 4.39.0
+      '@rollup/rollup-android-arm64': 4.39.0
+      '@rollup/rollup-darwin-arm64': 4.39.0
+      '@rollup/rollup-darwin-x64': 4.39.0
+      '@rollup/rollup-freebsd-arm64': 4.39.0
+      '@rollup/rollup-freebsd-x64': 4.39.0
+      '@rollup/rollup-linux-arm-gnueabihf': 4.39.0
+      '@rollup/rollup-linux-arm-musleabihf': 4.39.0
+      '@rollup/rollup-linux-arm64-gnu': 4.39.0
+      '@rollup/rollup-linux-arm64-musl': 4.39.0
+      '@rollup/rollup-linux-loongarch64-gnu': 4.39.0
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.39.0
+      '@rollup/rollup-linux-riscv64-gnu': 4.39.0
+      '@rollup/rollup-linux-riscv64-musl': 4.39.0
+      '@rollup/rollup-linux-s390x-gnu': 4.39.0
+      '@rollup/rollup-linux-x64-gnu': 4.39.0
+      '@rollup/rollup-linux-x64-musl': 4.39.0
+      '@rollup/rollup-win32-arm64-msvc': 4.39.0
+      '@rollup/rollup-win32-ia32-msvc': 4.39.0
+      '@rollup/rollup-win32-x64-msvc': 4.39.0
+      fsevents: 2.3.3
+
   run-parallel@1.2.0:
     dependencies:
       queue-microtask: 1.2.3
 
-  rxjs@7.8.1:
+  rxjs@7.8.2:
     dependencies:
       tslib: 2.8.1
 
@@ -9737,7 +9930,7 @@ snapshots:
 
   safe-regex-test@1.1.0:
     dependencies:
-      call-bound: 1.0.3
+      call-bound: 1.0.4
       es-errors: 1.3.0
       is-regex: 1.2.1
 
@@ -9787,7 +9980,7 @@ snapshots:
       define-data-property: 1.1.4
       es-errors: 1.3.0
       function-bind: 1.1.2
-      get-intrinsic: 1.2.7
+      get-intrinsic: 1.3.0
       gopd: 1.2.0
       has-property-descriptors: 1.0.2
 
@@ -9941,7 +10134,7 @@ snapshots:
 
   stackback@0.0.2: {}
 
-  std-env@3.8.0: {}
+  std-env@3.9.0: {}
 
   streamsearch@1.1.0: {}
 
@@ -10097,22 +10290,22 @@ snapshots:
     dependencies:
       chalk: 5.4.1
       chokidar: 3.6.0
-      foreground-child: 3.3.0
+      foreground-child: 3.3.1
       minimatch: 10.0.1
       mkdirp: 3.0.1
       polite-json: 5.0.0
       resolve-import: 2.0.0
       rimraf: 6.0.1
       sync-content: 2.0.1
-      typescript: 5.8.2
+      typescript: 5.5.4
       walk-up-path: 4.0.0
 
   tslib@2.8.1: {}
 
-  tsx@4.19.2:
+  tsx@4.19.3:
     dependencies:
-      esbuild: 0.23.1
-      get-tsconfig: 4.8.1
+      esbuild: 0.25.2
+      get-tsconfig: 4.10.0
     optionalDependencies:
       fsevents: 2.3.3
 
@@ -10128,7 +10321,7 @@ snapshots:
 
   type-fest@0.21.3: {}
 
-  typescript@5.5.3: {}
+  typescript@5.5.4: {}
 
   typescript@5.6.1-rc: {}
 
@@ -10252,20 +10445,12 @@ snapshots:
       is-arguments: 1.2.0
       is-generator-function: 1.1.0
       is-typed-array: 1.1.15
-      which-typed-array: 1.1.18
+      which-typed-array: 1.1.19
 
   valibot@1.0.0(typescript@5.8.2):
     optionalDependencies:
       typescript: 5.8.2
 
-  valibot@1.0.0-beta.12(typescript@5.8.2):
-    optionalDependencies:
-      typescript: 5.8.2
-
-  valibot@1.0.0-rc.2(typescript@5.8.2):
-    optionalDependencies:
-      typescript: 5.8.2
-
   validate-npm-package-license@3.0.4:
     dependencies:
       spdx-correct: 3.2.0
@@ -10288,13 +10473,13 @@ snapshots:
       '@types/unist': 3.0.3
       vfile-message: 4.0.2
 
-  vite-node@2.1.9(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0):
+  vite-node@2.1.9(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0):
     dependencies:
       cac: 6.7.14
       debug: 4.4.0(supports-color@9.4.0)
       es-module-lexer: 1.6.0
       pathe: 1.1.2
-      vite: 5.4.14(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0)
+      vite: 5.4.18(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0)
     transitivePeerDependencies:
       - '@types/node'
       - less
@@ -10306,41 +10491,41 @@ snapshots:
       - supports-color
       - terser
 
-  vite@5.4.14(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0):
+  vite@5.4.18(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0):
     dependencies:
       esbuild: 0.21.5
       postcss: 8.5.3
-      rollup: 4.37.0
+      rollup: 4.39.0
     optionalDependencies:
-      '@types/node': 20.17.14
+      '@types/node': 20.17.30
       fsevents: 2.3.3
       lightningcss: 1.29.3
       terser: 5.39.0
 
-  vitest@2.1.9(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0):
+  vitest@2.1.9(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0):
     dependencies:
       '@vitest/expect': 2.1.9
-      '@vitest/mocker': 2.1.9(vite@5.4.14(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0))
+      '@vitest/mocker': 2.1.9(vite@5.4.18(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0))
       '@vitest/pretty-format': 2.1.9
       '@vitest/runner': 2.1.9
       '@vitest/snapshot': 2.1.9
       '@vitest/spy': 2.1.9
       '@vitest/utils': 2.1.9
-      chai: 5.1.2
+      chai: 5.2.0
       debug: 4.4.0(supports-color@9.4.0)
-      expect-type: 1.1.0
+      expect-type: 1.2.1
       magic-string: 0.30.17
       pathe: 1.1.2
-      std-env: 3.8.0
+      std-env: 3.9.0
       tinybench: 2.9.0
       tinyexec: 0.3.2
       tinypool: 1.0.2
       tinyrainbow: 1.2.0
-      vite: 5.4.14(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0)
-      vite-node: 2.1.9(@types/node@20.17.14)(lightningcss@1.29.3)(terser@5.39.0)
+      vite: 5.4.18(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0)
+      vite-node: 2.1.9(@types/node@20.17.30)(lightningcss@1.29.3)(terser@5.39.0)
       why-is-node-running: 2.3.0
     optionalDependencies:
-      '@types/node': 20.17.14
+      '@types/node': 20.17.30
     transitivePeerDependencies:
       - less
       - lightningcss
@@ -10373,12 +10558,13 @@ snapshots:
       tr46: 0.0.3
       webidl-conversions: 3.0.1
 
-  which-typed-array@1.1.18:
+  which-typed-array@1.1.19:
     dependencies:
       available-typed-arrays: 1.0.7
       call-bind: 1.0.8
-      call-bound: 1.0.3
-      for-each: 0.3.3
+      call-bound: 1.0.4
+      for-each: 0.3.5
+      get-proto: 1.0.1
       gopd: 1.2.0
       has-tostringtag: 1.0.2
 


Test patch:
diff --git a/packages/core/tests/index.test.ts b/packages/core/tests/index.test.ts
index 74917e4f..05a11776 100644
--- a/packages/core/tests/index.test.ts
+++ b/packages/core/tests/index.test.ts
@@ -1,5 +1,5 @@
-import { test } from "vitest";
+import { expect, test } from "vitest";
 
 test("test", () => {
-  console.log("test");
+  expect(true).toBe(true);
 });
diff --git a/packages/core/tests/locales/en.test.ts b/packages/core/tests/locales/en.test.ts
new file mode 100644
index 00000000..b06aaddd
--- /dev/null
+++ b/packages/core/tests/locales/en.test.ts
@@ -0,0 +1,22 @@
+import { expect, test } from "vitest";
+import { parsedType } from "../../src/locales/en.js";
+
+test("parsedType", () => {
+  expect(parsedType("string")).toBe("string");
+  expect(parsedType(1)).toBe("number");
+  expect(parsedType(true)).toBe("boolean");
+  expect(parsedType(null)).toBe("null");
+  expect(parsedType(undefined)).toBe("undefined");
+  expect(parsedType([])).toBe("array");
+  expect(parsedType({})).toBe("object");
+  expect(parsedType(new Date())).toBe("Date");
+  expect(parsedType(new Map())).toBe("Map");
+  expect(parsedType(new Set())).toBe("Set");
+  expect(parsedType(new Error())).toBe("Error");
+
+  const nullPrototype = Object.create(null);
+  expect(parsedType(nullPrototype)).toBe("object");
+
+  const doubleNullPrototype = Object.create(Object.create(null));
+  expect(parsedType(doubleNullPrototype)).toBe("object");
+});
diff --git a/packages/mini/tests/object.test.ts b/packages/mini/tests/object.test.ts
index 3db8f214..d40735da 100644
--- a/packages/mini/tests/object.test.ts
+++ b/packages/mini/tests/object.test.ts
@@ -28,6 +28,12 @@ test("z.object", () => {
   // "test?" is required in ZodObject
   expect(() => z.parse(a, { name: "john", age: "30" })).toThrow();
   expect(() => z.parse(a, "hello")).toThrow();
+
+  // null prototype
+  const schema = z.object({ a: z.string() });
+  const obj = Object.create(null);
+  obj.a = "foo";
+  expect(schema.parse(obj)).toEqual({ a: "foo" });
 });
 
 test("z.strictObject", () => {
diff --git a/packages/mini/tests/registries.test.ts b/packages/mini/tests/registries.test.ts
deleted file mode 100644
index d579f7ea..00000000
--- a/packages/mini/tests/registries.test.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import * as z from "@zod/mini";
-import { expect, expectTypeOf, test } from "vitest";
-
-test("globalRegistry", () => {
-  const reg = z.registry();
-
-  const a = z.string();
-  reg.add(a);
-  expect(reg.has(a)).toEqual(true);
-
-  reg.remove(a);
-  expect(reg.has(a)).toEqual(false);
-
-  a.register(z.globalRegistry, { field: "sup" });
-  expect(z.globalRegistry.has(a)).toEqual(true);
-  expect(z.globalRegistry.get(a)).toEqual({ field: "sup" });
-
-  z.globalRegistry.remove(a);
-  expect(z.globalRegistry.has(a)).toEqual(false);
-});
-
-test("z.registry", () => {
-  const fieldRegistry = z.registry<{ name: string; description: string }>();
-
-  const a = z.string();
-  fieldRegistry.add(a, { name: "hello", description: "world" });
-  const a_meta = fieldRegistry.get(a);
-  expect(a_meta).toEqual({ name: "hello", description: "world" });
-
-  fieldRegistry.remove(a);
-  expect(fieldRegistry.has(a)).toEqual(false);
-  expect(fieldRegistry.get(a)).toEqual(undefined);
-});
-
-test("z.registry no metadata", () => {
-  const fieldRegistry = z.registry();
-
-  const a = z.string();
-  fieldRegistry.add(a);
-  fieldRegistry.add(z.number());
-  expect(fieldRegistry.get(a)).toEqual(undefined);
-  expect(fieldRegistry.has(a)).toEqual(true);
-});
-
-test("z.registry with schema constraints", () => {
-  const fieldRegistry = z.registry<{ name: string; description: string }, z.ZodMiniString>();
-
-  const a = z.string();
-  fieldRegistry.add(a, { name: "hello", description: "world" });
-  // @ts-expect-error
-  fieldRegistry.add(z.number(), { name: "test" });
-  // @ts-expect-error
-  z.number().register(fieldRegistry, { name: "test", description: "test" });
-});
-
-// test("z.namedRegistry", () => {
-//   const namedReg = z
-//     .namedRegistry<{ name: string; description: string }>()
-//     .add(z.string(), { name: "hello", description: "world" })
-//     .add(z.number(), { name: "number", description: "number" });
-
-//   expect(namedReg.get("hello")).toEqual({
-//     name: "hello",
-//     description: "world",
-//   });
-//   expect(namedReg.has("hello")).toEqual(true);
-//   expect(namedReg.get("number")).toEqual({
-//     name: "number",
-//     description: "number",
-//   });
-
-//   // @ts-expect-error
-//   namedReg.get("world");
-//   // @ts-expect-error
-//   expect(namedReg.get("world")).toEqual(undefined);
-
-//   const hello = namedReg.get("hello");
-//   expect(hello).toEqual({ name: "hello", description: "world" });
-//   expectTypeOf<typeof hello>().toEqualTypeOf<{
-//     name: "hello";
-//     description: "world";
-//   }>();
-//   expectTypeOf<typeof namedReg.items>().toEqualTypeOf<{
-//     hello: { name: "hello"; description: "world" };
-//     number: { name: "number"; description: "number" };
-//   }>();
-// });
-
-test("output type in registry meta", () => {
-  const reg = z.registry<z.$output>();
-  const a = z.string();
-  reg.add(a, "asdf");
-  // @ts-expect-error
-  reg.add(a, 1234);
-  expectTypeOf(reg.get(a)).toEqualTypeOf<string | undefined>();
-});
-
-test("output type in registry meta - objects and arrays", () => {
-  const reg = z.registry<{ name: string; examples: z.$output[] }>();
-  const a = z.string();
-  reg.add(a, { name: "hello", examples: ["world"] });
-
-  // @ts-expect-error
-  reg.add(a, { name: "hello", examples: "world" });
-  expectTypeOf(reg.get(a)).toEqualTypeOf<{ name: string; examples: string[] } | undefined>();
-});
-
-test("input type in registry meta", () => {
-  const reg = z.registry<z.$input>();
-  const a = z.pipe(z.number(), z.transform(String));
-  reg.add(a, 1234);
-  // @ts-expect-error
-  reg.add(a, "1234");
-  expectTypeOf(reg.get(a)).toEqualTypeOf<number | undefined>();
-});
-
-test("input type in registry meta - objects and arrays", () => {
-  const reg = z.registry<{ name: string; examples: z.$input[] }>();
-  const a = z.pipe(z.number(), z.transform(String));
-  reg.add(a, { name: "hello", examples: [1234] });
-
-  // @ts-expect-error
-  reg.add(a, { name: "hello", examples: "world" });
-  expectTypeOf(reg.get(a)).toEqualTypeOf<{ name: string; examples: number[] } | undefined>();
-});
diff --git a/packages/zod/tests/async-parsing.test.ts b/packages/zod/tests/async-parsing.test.ts
index f45f1345..a2d2c213 100644
--- a/packages/zod/tests/async-parsing.test.ts
+++ b/packages/zod/tests/async-parsing.test.ts
@@ -331,7 +331,14 @@ test("async validation multiple errors 2", async () => {
     z.object({
       hello: z.string(),
       foo: z.object({
-        bar: z.number().refine(is_async ? async () => false : () => false),
+        bar: z.number().refine(
+          is_async
+            ? async () =>
+                new Promise((resolve) => {
+                  setTimeout(() => resolve(false), 500);
+                })
+            : () => false
+        ),
       }),
     });
 
diff --git a/packages/zod/tests/discriminated-unions.test.ts b/packages/zod/tests/discriminated-unions.test.ts
index 79da6461..7c786bc1 100644
--- a/packages/zod/tests/discriminated-unions.test.ts
+++ b/packages/zod/tests/discriminated-unions.test.ts
@@ -432,7 +432,7 @@ test("branded", () => {
   ]);
 
   type schema = z.infer<typeof schema>;
-  expectTypeOf<schema>().toEqualTypeOf<{ key: "a" } | { key: "b" & { _type: "asdfasdf" } }>();
+  expectTypeOf<schema>().toEqualTypeOf<{ key: "a" } | { key: "b" & z.core.$brand<"asdfasdf"> }>();
 
   schema.parse({ key: "a" });
   schema.parse({ key: "b" });
@@ -476,3 +476,33 @@ test("optional and nullable", () => {
   if (value.key === "b") value.b;
   if (value.key === null) value.b;
 });
+
+test("multple discriminators", () => {
+  const FreeConfig = z.object({
+    type: z.literal("free"),
+    min_cents: z.null(),
+  });
+
+  // console.log(FreeConfig.shape.type);
+  const PricedConfig = z.object({
+    type: z.literal("fiat-price"),
+    // min_cents: z.int().nullable(),
+    min_cents: z.null(),
+  });
+
+  const Config = z.discriminatedUnion([FreeConfig, PricedConfig]);
+
+  Config.parse({
+    min_cents: null,
+    type: "fiat-price",
+    name: "Standard",
+  });
+
+  expect(() => {
+    Config.parse({
+      min_cents: null,
+      type: "not real",
+      name: "Standard",
+    });
+  }).toThrow();
+});
diff --git a/packages/zod/tests/enum.test.ts b/packages/zod/tests/enum.test.ts
index e5f6ddf1..3964fda9 100644
--- a/packages/zod/tests/enum.test.ts
+++ b/packages/zod/tests/enum.test.ts
@@ -114,7 +114,7 @@ test("type signatures", () => {
   const b = z.enum(a.options);
   expectTypeOf(a).toEqualTypeOf(b);
 
-  const c = z.enum({ a: 1, b: 2 });
+  const c = z.enum({ a: 1, b: 2 } as const);
   expectTypeOf(c.enum).toEqualTypeOf<{
     readonly a: 1;
     readonly b: 2;
@@ -127,6 +127,12 @@ test("type signatures", () => {
   }
   const d = z.enum(Fruit);
   expectTypeOf(d.enum).toEqualTypeOf(Fruit);
+
+  const e = z.enum({ a: 1, b: 2 });
+  expectTypeOf(e.enum).toEqualTypeOf<{
+    readonly a: 1;
+    readonly b: 2;
+  }>();
 });
 
 test("extract", () => {
diff --git a/packages/zod/tests/json-schema.test.ts b/packages/zod/tests/json-schema.test.ts
index dcb3da73..5c3114e9 100644
--- a/packages/zod/tests/json-schema.test.ts
+++ b/packages/zod/tests/json-schema.test.ts
@@ -39,54 +39,63 @@ describe("toJSONSchema", () => {
     expect(toJSONSchema(z.email())).toMatchInlineSnapshot(`
       {
         "format": "email",
+        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.iso.datetime())).toMatchInlineSnapshot(`
       {
         "format": "date-time",
+        "pattern": "^((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))T([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?(Z)$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.iso.date())).toMatchInlineSnapshot(`
       {
         "format": "date",
+        "pattern": "^((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.iso.time())).toMatchInlineSnapshot(`
       {
         "format": "time",
+        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.iso.duration())).toMatchInlineSnapshot(`
       {
         "format": "duration",
+        "pattern": "^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.ipv4())).toMatchInlineSnapshot(`
       {
         "format": "ipv4",
+        "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.ipv6())).toMatchInlineSnapshot(`
       {
         "format": "ipv6",
+        "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.uuid())).toMatchInlineSnapshot(`
       {
         "format": "uuid",
+        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.guid())).toMatchInlineSnapshot(`
       {
         "format": "uuid",
+        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
         "type": "string",
       }
     `);
@@ -100,12 +109,14 @@ describe("toJSONSchema", () => {
       {
         "contentEncoding": "base64",
         "format": "base64",
+        "pattern": "^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.cuid())).toMatchInlineSnapshot(`
       {
         "format": "cuid",
+        "pattern": "^[cC][^\\s-]{8,}$",
         "type": "string",
       }
     `);
@@ -113,24 +124,28 @@ describe("toJSONSchema", () => {
     expect(toJSONSchema(z.emoji())).toMatchInlineSnapshot(`
       {
         "format": "emoji",
+        "pattern": "^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.nanoid())).toMatchInlineSnapshot(`
       {
         "format": "nanoid",
+        "pattern": "^[a-zA-Z0-9_-]{21}$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.cuid2())).toMatchInlineSnapshot(`
       {
         "format": "cuid2",
+        "pattern": "^[0-9a-z]+$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.ulid())).toMatchInlineSnapshot(`
       {
         "format": "ulid",
+        "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$",
         "type": "string",
       }
     `);
@@ -219,18 +234,21 @@ describe("toJSONSchema", () => {
     expect(toJSONSchema(z.string().email())).toMatchInlineSnapshot(`
       {
         "format": "email",
+        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.string().uuid())).toMatchInlineSnapshot(`
       {
         "format": "uuid",
+        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.iso.datetime())).toMatchInlineSnapshot(`
       {
         "format": "date-time",
+        "pattern": "^((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))T([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?(Z)$",
         "type": "string",
       }
     `);
@@ -238,18 +256,21 @@ describe("toJSONSchema", () => {
     expect(toJSONSchema(z.iso.date())).toMatchInlineSnapshot(`
       {
         "format": "date",
+        "pattern": "^((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.iso.time())).toMatchInlineSnapshot(`
       {
         "format": "time",
+        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?$",
         "type": "string",
       }
     `);
     expect(toJSONSchema(z.iso.duration())).toMatchInlineSnapshot(`
       {
         "format": "duration",
+        "pattern": "^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$",
         "type": "string",
       }
     `);
@@ -262,6 +283,7 @@ describe("toJSONSchema", () => {
     expect(toJSONSchema(z.ipv4())).toMatchInlineSnapshot(`
       {
         "format": "ipv4",
+        "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$",
         "type": "string",
       }
     `);
@@ -269,6 +291,7 @@ describe("toJSONSchema", () => {
     expect(toJSONSchema(z.ipv6())).toMatchInlineSnapshot(`
       {
         "format": "ipv6",
+        "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$",
         "type": "string",
       }
     `);
@@ -277,6 +300,7 @@ describe("toJSONSchema", () => {
       {
         "contentEncoding": "base64",
         "format": "base64",
+        "pattern": "^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$",
         "type": "string",
       }
     `);
@@ -289,6 +313,14 @@ describe("toJSONSchema", () => {
     expect(toJSONSchema(z.guid())).toMatchInlineSnapshot(`
       {
         "format": "uuid",
+        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
+        "type": "string",
+      }
+    `);
+    expect(toJSONSchema(z.string().regex(/asdf/))).toMatchInlineSnapshot(`
+      {
+        "format": "regex",
+        "pattern": "asdf",
         "type": "string",
       }
     `);
@@ -438,9 +470,7 @@ describe("toJSONSchema", () => {
     const a = z.literal("hello");
     expect(toJSONSchema(a)).toMatchInlineSnapshot(`
       {
-        "enum": [
-          "hello",
-        ],
+        "const": "hello",
       }
     `);
 
@@ -573,6 +603,7 @@ describe("toJSONSchema", () => {
     const schema = z.object({
       required: z.string(),
       optional: z.string().optional(),
+      nonoptional: z.string().optional().nonoptional(),
     });
 
     const result = toJSONSchema(schema);
@@ -580,15 +611,11 @@ describe("toJSONSchema", () => {
     expect(result).toMatchInlineSnapshot(`
       {
         "properties": {
+          "nonoptional": {
+            "type": "string",
+          },
           "optional": {
-            "oneOf": [
-              {
-                "type": "string",
-              },
-              {
-                "type": "null",
-              },
-            ],
+            "type": "string",
           },
           "required": {
             "type": "string",
@@ -596,6 +623,7 @@ describe("toJSONSchema", () => {
         },
         "required": [
           "required",
+          "nonoptional",
         ],
         "type": "object",
       }
diff --git a/packages/zod/tests/object.test.ts b/packages/zod/tests/object.test.ts
index 18344196..46283b7a 100644
--- a/packages/zod/tests/object.test.ts
+++ b/packages/zod/tests/object.test.ts
@@ -440,3 +440,10 @@ test("assignability", () => {
   z.interface({ "a?": z.string() }) satisfies z.ZodInterface;
   z.interface({ "?a": z.string() }) satisfies z.ZodInterface;
 });
+
+test("null prototype", () => {
+  const schema = z.object({ a: z.string() });
+  const obj = Object.create(null);
+  obj.a = "foo";
+  expect(schema.parse(obj)).toEqual({ a: "foo" });
+});
diff --git a/packages/zod/tests/partial-interface.test.ts b/packages/zod/tests/partial-interface.test.ts
index a3e6c159..907ba4c7 100644
--- a/packages/zod/tests/partial-interface.test.ts
+++ b/packages/zod/tests/partial-interface.test.ts
@@ -41,17 +41,17 @@ test("required", () => {
   });
 
   const requiredObject = object.required();
-  expect(requiredObject._zod.shape.name).toBeInstanceOf(z.ZodNonOptional);
-  expect(requiredObject._zod.shape.name.unwrap()).toBeInstanceOf(z.ZodString);
-  expect(requiredObject._zod.shape.age).toBeInstanceOf(z.ZodNonOptional);
-  expect(requiredObject._zod.shape.age.unwrap()).toBeInstanceOf(z.ZodOptional);
-  expect(requiredObject._zod.shape.field).toBeInstanceOf(z.ZodNonOptional);
-  expect(requiredObject._zod.shape.field.unwrap()).toBeInstanceOf(z.ZodDefault);
-  expect(requiredObject._zod.shape.nullableField).toBeInstanceOf(z.ZodNonOptional);
-  expect(requiredObject._zod.shape.nullableField.unwrap()).toBeInstanceOf(z.ZodNullable);
-  expect(requiredObject._zod.shape.nullishField).toBeInstanceOf(z.ZodNonOptional);
-  expect(requiredObject._zod.shape.nullishField.unwrap()).toBeInstanceOf(z.ZodOptional);
-  expect(requiredObject._zod.shape.nullishField.unwrap().unwrap()).toBeInstanceOf(z.ZodNullable);
+  expect(requiredObject._zod.def.shape.name).toBeInstanceOf(z.ZodNonOptional);
+  expect(requiredObject._zod.def.shape.name.unwrap()).toBeInstanceOf(z.ZodString);
+  expect(requiredObject._zod.def.shape.age).toBeInstanceOf(z.ZodNonOptional);
+  expect(requiredObject._zod.def.shape.age.unwrap()).toBeInstanceOf(z.ZodOptional);
+  expect(requiredObject._zod.def.shape.field).toBeInstanceOf(z.ZodNonOptional);
+  expect(requiredObject._zod.def.shape.field.unwrap()).toBeInstanceOf(z.ZodDefault);
+  expect(requiredObject._zod.def.shape.nullableField).toBeInstanceOf(z.ZodNonOptional);
+  expect(requiredObject._zod.def.shape.nullableField.unwrap()).toBeInstanceOf(z.ZodNullable);
+  expect(requiredObject._zod.def.shape.nullishField).toBeInstanceOf(z.ZodNonOptional);
+  expect(requiredObject._zod.def.shape.nullishField.unwrap()).toBeInstanceOf(z.ZodOptional);
+  expect(requiredObject._zod.def.shape.nullishField.unwrap().unwrap()).toBeInstanceOf(z.ZodNullable);
 });
 
 test("required inference", () => {
diff --git a/packages/zod/tests/record.test.ts b/packages/zod/tests/record.test.ts
index 3a20b944..16be8d74 100644
--- a/packages/zod/tests/record.test.ts
+++ b/packages/zod/tests/record.test.ts
@@ -108,7 +108,7 @@ test("literal exhaustiveness", () => {
 });
 
 test("pipe exhaustiveness", () => {
-  const schema = z.record(z.enum(["Tuna", "Salmon"]).pipe(z.string()), z.string());
+  const schema = z.record(z.enum(["Tuna", "Salmon"]).pipe(z.any()), z.string());
   expect(schema.parse({ Tuna: "asdf", Salmon: "asdf" })).toEqual({
     Tuna: "asdf",
     Salmon: "asdf",
diff --git a/packages/zod/tests/registries.test.ts b/packages/zod/tests/registries.test.ts
index a3a3782c..cfca323b 100644
--- a/packages/zod/tests/registries.test.ts
+++ b/packages/zod/tests/registries.test.ts
@@ -87,12 +87,12 @@ test("z.registry with schema constraints", () => {
 // });
 
 test("output type in registry meta", () => {
-  const reg = z.registry<z.$output>();
+  const reg = z.registry<{ out: z.$output }>();
   const a = z.string();
-  reg.add(a, "asdf");
+  reg.add(a, { out: "asdf" });
   // @ts-expect-error
   reg.add(a, 1234);
-  expectTypeOf(reg.get(a)).toEqualTypeOf<string | undefined>();
+  expectTypeOf(reg.get(a)).toEqualTypeOf<{ out: string } | undefined>();
 });
 
 test("output type in registry meta - objects and arrays", () => {
@@ -106,12 +106,12 @@ test("output type in registry meta - objects and arrays", () => {
 });
 
 test("input type in registry meta", () => {
-  const reg = z.registry<z.$input>();
+  const reg = z.registry<{ in: z.$input }>();
   const a = z.pipe(z.number(), z.transform(String));
-  reg.add(a, 1234);
+  reg.add(a, { in: 1234 });
   // @ts-expect-error
   reg.add(a, "1234");
-  expectTypeOf(reg.get(a)).toEqualTypeOf<number | undefined>();
+  expectTypeOf(reg.get(a)).toEqualTypeOf<{ in: number } | undefined>();
 });
 
 test("input type in registry meta - objects and arrays", () => {
diff --git a/packages/zod/tests/standard-schema.test.ts b/packages/zod/tests/standard-schema.test.ts
new file mode 100644
index 00000000..87b37580
--- /dev/null
+++ b/packages/zod/tests/standard-schema.test.ts
@@ -0,0 +1,57 @@
+import { expect, test } from "vitest";
+
+import * as z from "zod";
+
+test("length checks", async () => {
+  const schema = z.string();
+  const result = await schema["~standard"].validate(12);
+  expect(result).toMatchInlineSnapshot(`
+    {
+      "issues": [
+        {
+          "code": "invalid_type",
+          "expected": "string",
+          "message": "Invalid input: expected string, received number",
+          "path": [],
+        },
+      ],
+    }
+  `);
+});
+
+test("length checks", async () => {
+  const schema = z.string();
+  const result = await schema["~standard"].validate("asdf");
+  expect(result).toMatchInlineSnapshot(`
+    {
+      "value": "asdf",
+    }
+  `);
+});
+
+test("length checks", async () => {
+  const schema = z.string().refine(async (val) => val.length > 5);
+  const result = await schema["~standard"].validate(12);
+  expect(result).toMatchInlineSnapshot(`
+    {
+      "issues": [
+        {
+          "code": "invalid_type",
+          "expected": "string",
+          "message": "Invalid input: expected string, received number",
+          "path": [],
+        },
+      ],
+    }
+  `);
+});
+
+test("length checks", async () => {
+  const schema = z.string().refine(async (val) => val.length > 5);
+  const result = await schema["~standard"].validate("234134134");
+  expect(result).toMatchInlineSnapshot(`
+    {
+      "value": "234134134",
+    }
+  `);
+});
diff --git a/packages/zod/tests/string.test.ts b/packages/zod/tests/string.test.ts
index 2295182b..b7388f42 100644
--- a/packages/zod/tests/string.test.ts
+++ b/packages/zod/tests/string.test.ts
@@ -581,6 +581,27 @@ test("regexp error message", () => {
   expect(() => z.string().uuid().parse("purr")).toThrow();
 });
 
+test("regexp error custom message", () => {
+  const result = z
+    .string()
+    .regex(/^moo+$/, { message: "Custom error message" })
+    .safeParse("boooo");
+  expect(result.error!.issues).toMatchInlineSnapshot(`
+    [
+      {
+        "code": "invalid_format",
+        "format": "regex",
+        "message": "Custom error message",
+        "origin": "string",
+        "path": [],
+        "pattern": "/^moo+$/",
+      },
+    ]
+  `);
+
+  expect(() => z.string().uuid().parse("purr")).toThrow();
+});
+
 test("regex lastIndex reset", () => {
   const schema = z.string().regex(/^\d+$/g);
   expect(schema.safeParse("123").success).toEqual(true);
diff --git a/packages/zod/tests/template-literal.test.ts b/packages/zod/tests/template-literal.test.ts
index 4d8f338f..a011d7e3 100644
--- a/packages/zod/tests/template-literal.test.ts
+++ b/packages/zod/tests/template-literal.test.ts
@@ -682,3 +682,87 @@ test("template literal parsing - failure - complex cases", () => {
   expect(() => connectionString.parse("mongodb://host:1234/defaultauthdb?&authSource=admin")).toThrow();
   expect(() => connectionString.parse("mongodb://host:1234/?&authSource=admin")).toThrow();
 });
+
+test("template literal parsing - failure - issue format", () => {
+  expect(anotherNull.safeParse("1null")).toMatchInlineSnapshot(`
+    {
+      "error": ZodError {
+        "issues": [
+          {
+            "code": "invalid_format",
+            "format": "template_literal",
+            "message": "Invalid input",
+            "path": [],
+            "pattern": "^null$",
+          },
+        ],
+      },
+      "success": false,
+    }
+  `);
+  expect(cuidZZZ.safeParse("1cjld2cyuq0000t3rmniod1foyZZZ")).toMatchInlineSnapshot(`
+    {
+      "error": ZodError {
+        "issues": [
+          {
+            "code": "invalid_format",
+            "format": "template_literal",
+            "message": "Invalid input",
+            "path": [],
+            "pattern": "^[cC][^\\s-]{8,}ZZZ$",
+          },
+        ],
+      },
+      "success": false,
+    }
+  `);
+  expect(stringMin5Max10.safeParse("1234")).toMatchInlineSnapshot(`
+    {
+      "error": ZodError {
+        "issues": [
+          {
+            "code": "invalid_format",
+            "format": "template_literal",
+            "message": "Invalid input",
+            "path": [],
+            "pattern": "^[\\s\\S]{5,10}$",
+          },
+        ],
+      },
+      "success": false,
+    }
+  `);
+  expect(connectionString.safeParse("mongodb://host:1234/defaultauthdb?authSourceadmin")).toMatchInlineSnapshot(`
+    {
+      "error": ZodError {
+        "issues": [
+          {
+            "code": "invalid_format",
+            "format": "template_literal",
+            "message": "Invalid input",
+            "path": [],
+            "pattern": "^mongodb:\\/\\/(\\w+:\\w+@)?\\w+:\\d+(\\/(\\w+)?(\\?(\\w+=\\w+(&\\w+=\\w+)*)?)?)?$",
+          },
+        ],
+      },
+      "success": false,
+    }
+  `);
+
+  expect(stringStartsWithMax5.safeParse("1hell")).toMatchInlineSnapshot(`
+    {
+      "error": ZodError {
+        "issues": [
+          {
+            "code": "invalid_format",
+            "format": "template_literal",
+            "message": "Invalid input",
+            "path": [],
+            "pattern": "^hello.*$",
+          },
+        ],
+      },
+      "success": false,
+    }
+  `);
+});
diff --git a/vitest.root.mts b/vitest.root.mts
index fd0f56e7..ecb33611 100644
--- a/vitest.root.mts
+++ b/vitest.root.mts
@@ -6,19 +6,15 @@ export default defineConfig({
   },
   test: {
     watch: false,
-    isolate: true,
+    isolate: false,
     typecheck: {
+      include: ["**/*.test.ts"],
       enabled: true,
       ignoreSourceErrors: false,
+      checker: "tsc",
+      tsconfig: "./tsconfig.json",
     },
-    // coverage: {
-    //   provider: "istanbul", // or 'v8'
-    // },
-    // reporters: [
-    //   // "basic", { summary: false }
-    //   ["basic", { summary: false }],
-    // ],
-    // reporters: false,
+
     silent: true,
   },
 }) as UserConfig;