Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/zod/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
**/*.d.ts
**/*.d.mts
**/*.d.cts
**/package.json
2 changes: 2 additions & 0 deletions packages/zod/src/v4/classic/tests/string.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,8 @@ test("CIDR v6 validation", () => {
expect(cidrV6.safeParse("not a cidr").success).toBe(false); // Invalid format
expect(cidrV6.safeParse("192.168.0.0/24").success).toBe(false); // IPv4 CIDR in v6 validation
expect(cidrV6.safeParse("2001:0db8:85a3::/64/whatever-after").success).toBe(false);
expect(cidrV6.safeParse("22d9:f4a8:6a90:f3bf:dcaa:2beb:5fba:0000/112").success).toBe(true);
expect(cidrV6.safeParse("22d9:f4a8:6a90:f3bf:dcaa:2beb:5fba:0000/112/268").success).toBe(false);
});

test("E.164 validation", () => {
Expand Down
9 changes: 5 additions & 4 deletions packages/zod/src/v4/core/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -830,10 +830,11 @@ export const $ZodCIDRv6: core.$constructor<$ZodCIDRv6> = /*@__PURE__*/ core.$con
$ZodStringFormat.init(inst, def);

inst._zod.check = (payload) => {
const segments = payload.value.split("/");
const [address, prefix] = segments;
const parts = payload.value.split("/");
try {
if (segments.length !== 2) throw new Error();
if (parts.length !== 2) throw new Error();
const [address, prefix] = parts;
if (!prefix) throw new Error();
const prefixNum = Number(prefix);
if (`${prefixNum}` !== prefix) throw new Error();
if (prefixNum < 0 || prefixNum > 128) throw new Error();
Expand Down Expand Up @@ -1763,7 +1764,7 @@ export interface $ZodObject<
function normalizeDef(def: $ZodObjectDef) {
const keys = Object.keys(def.shape);
for (const k of keys) {
if (!def.shape[k]._zod.traits.has("$ZodType")) {
if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) {
throw new Error(`Invalid element at key "${k}": expected a Zod schema`);
}
}
Expand Down