Linux websever 5.15.0-153-generic #163-Ubuntu SMP Thu Aug 7 16:37:18 UTC 2025 x86_64
Apache/2.4.52 (Ubuntu)
: 192.168.3.70 | : 192.168.1.99
Cant Read [ /etc/named.conf ]
8.1.2-1ubuntu2.23
urlab
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
var /
www /
html /
cqt /
node_modules /
zod /
src /
v3 /
tests /
[ HOME SHELL ]
Name
Size
Permission
Action
Mocker.ts
1.31
KB
-rw-r--r--
all-errors.test.ts
4.64
KB
-rw-r--r--
anyunknown.test.ts
673
B
-rw-r--r--
array.test.ts
1.89
KB
-rw-r--r--
async-parsing.test.ts
12.34
KB
-rw-r--r--
async-refinements.test.ts
1.57
KB
-rw-r--r--
base.test.ts
782
B
-rw-r--r--
bigint.test.ts
1.93
KB
-rw-r--r--
branded.test.ts
1.69
KB
-rw-r--r--
catch.test.ts
6.4
KB
-rw-r--r--
coerce.test.ts
6.49
KB
-rw-r--r--
complex.test.ts
1.87
KB
-rw-r--r--
custom.test.ts
950
B
-rw-r--r--
date.test.ts
983
B
-rw-r--r--
deepmasking.test.ts
5.09
KB
-rw-r--r--
default.test.ts
3.44
KB
-rw-r--r--
description.test.ts
1.29
KB
-rw-r--r--
discriminated-unions.test.ts
8.34
KB
-rw-r--r--
enum.test.ts
2.67
KB
-rw-r--r--
error.test.ts
16.42
KB
-rw-r--r--
firstparty.test.ts
2.33
KB
-rw-r--r--
firstpartyschematypes.test.ts
788
B
-rw-r--r--
function.test.ts
6.42
KB
-rw-r--r--
generics.test.ts
1.49
KB
-rw-r--r--
instanceof.test.ts
1.13
KB
-rw-r--r--
intersection.test.ts
3.02
KB
-rw-r--r--
language-server.source.ts
1.25
KB
-rw-r--r--
language-server.test.ts
8.12
KB
-rw-r--r--
literal.test.ts
1.04
KB
-rw-r--r--
map.test.ts
3.46
KB
-rw-r--r--
masking.test.ts
85
B
-rw-r--r--
mocker.test.ts
389
B
-rw-r--r--
nan.test.ts
587
B
-rw-r--r--
nativeEnum.test.ts
2.29
KB
-rw-r--r--
nullable.test.ts
1.14
KB
-rw-r--r--
number.test.ts
6.22
KB
-rw-r--r--
object-augmentation.test.ts
569
B
-rw-r--r--
object-in-es5-env.test.ts
778
B
-rw-r--r--
object.test.ts
11.5
KB
-rw-r--r--
optional.test.ts
1.19
KB
-rw-r--r--
parseUtil.test.ts
869
B
-rw-r--r--
parser.test.ts
1.1
KB
-rw-r--r--
partials.test.ts
6.83
KB
-rw-r--r--
pickomit.test.ts
3.54
KB
-rw-r--r--
pipeline.test.ts
823
B
-rw-r--r--
preprocess.test.ts
4.42
KB
-rw-r--r--
primitive.test.ts
11.93
KB
-rw-r--r--
promise.test.ts
2.43
KB
-rw-r--r--
readonly.test.ts
7.17
KB
-rw-r--r--
record.test.ts
3.65
KB
-rw-r--r--
recursive.test.ts
3.85
KB
-rw-r--r--
refine.test.ts
7.98
KB
-rw-r--r--
safeparse.test.ts
628
B
-rw-r--r--
set.test.ts
4.68
KB
-rw-r--r--
standard-schema.test.ts
2.53
KB
-rw-r--r--
string.test.ts
64.08
KB
-rw-r--r--
transformer.test.ts
5.55
KB
-rw-r--r--
tuple.test.ts
2.63
KB
-rw-r--r--
unions.test.ts
1.5
KB
-rw-r--r--
validations.test.ts
3.74
KB
-rw-r--r--
void.test.ts
349
B
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : refine.test.ts
// @ts-ignore TS6133 import { expect, test } from "vitest"; import * as z from "zod/v3"; import { ZodIssueCode } from "../ZodError.js"; import { util } from "../helpers/util.js"; test("refinement", () => { const obj1 = z.object({ first: z.string(), second: z.string(), }); const obj2 = obj1.partial().strict(); const obj3 = obj2.refine((data) => data.first || data.second, "Either first or second should be filled in."); expect(obj1 === (obj2 as any)).toEqual(false); expect(obj2 === (obj3 as any)).toEqual(false); expect(() => obj1.parse({})).toThrow(); expect(() => obj2.parse({ third: "adsf" })).toThrow(); expect(() => obj3.parse({})).toThrow(); obj3.parse({ first: "a" }); obj3.parse({ second: "a" }); obj3.parse({ first: "a", second: "a" }); }); test("refinement 2", () => { const validationSchema = z .object({ email: z.string().email(), password: z.string(), confirmPassword: z.string(), }) .refine((data) => data.password === data.confirmPassword, "Both password and confirmation must match"); expect(() => validationSchema.parse({ email: "aaaa@gmail.com", password: "aaaaaaaa", confirmPassword: "bbbbbbbb", }) ).toThrow(); }); test("refinement type guard", () => { const validationSchema = z.object({ a: z.string().refine((s): s is "a" => s === "a"), }); type Input = z.input<typeof validationSchema>; type Schema = z.infer<typeof validationSchema>; util.assertEqual<"a", Input["a"]>(false); util.assertEqual<string, Input["a"]>(true); util.assertEqual<"a", Schema["a"]>(true); util.assertEqual<string, Schema["a"]>(false); }); test("refinement Promise", async () => { const validationSchema = z .object({ email: z.string().email(), password: z.string(), confirmPassword: z.string(), }) .refine( (data) => Promise.resolve().then(() => data.password === data.confirmPassword), "Both password and confirmation must match" ); await validationSchema.parseAsync({ email: "aaaa@gmail.com", password: "password", confirmPassword: "password", }); }); test("custom path", async () => { const result = await z .object({ password: z.string(), confirm: z.string(), }) .refine((data) => data.confirm === data.password, { path: ["confirm"] }) .spa({ password: "asdf", confirm: "qewr" }); expect(result.success).toEqual(false); if (!result.success) { expect(result.error.issues[0].path).toEqual(["confirm"]); } }); test("use path in refinement context", async () => { const noNested = z.string()._refinement((_val, ctx) => { if (ctx.path.length > 0) { ctx.addIssue({ code: ZodIssueCode.custom, message: `schema cannot be nested. path: ${ctx.path.join(".")}`, }); return false; } else { return true; } }); const data = z.object({ foo: noNested, }); const t1 = await noNested.spa("asdf"); const t2 = await data.spa({ foo: "asdf" }); expect(t1.success).toBe(true); expect(t2.success).toBe(false); if (t2.success === false) { expect(t2.error.issues[0].message).toEqual("schema cannot be nested. path: foo"); } }); test("superRefine", () => { const Strings = z.array(z.string()).superRefine((val, ctx) => { if (val.length > 3) { ctx.addIssue({ code: z.ZodIssueCode.too_big, maximum: 3, type: "array", inclusive: true, exact: true, message: "Too many items 😡", }); } if (val.length !== new Set(val).size) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: `No duplicates allowed.`, }); } }); const result = Strings.safeParse(["asfd", "asfd", "asfd", "asfd"]); expect(result.success).toEqual(false); if (!result.success) expect(result.error.issues.length).toEqual(2); Strings.parse(["asfd", "qwer"]); }); test("superRefine async", async () => { const Strings = z.array(z.string()).superRefine(async (val, ctx) => { if (val.length > 3) { ctx.addIssue({ code: z.ZodIssueCode.too_big, maximum: 3, type: "array", inclusive: true, exact: true, message: "Too many items 😡", }); } if (val.length !== new Set(val).size) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: `No duplicates allowed.`, }); } }); const result = await Strings.safeParseAsync(["asfd", "asfd", "asfd", "asfd"]); expect(result.success).toEqual(false); if (!result.success) expect(result.error.issues.length).toEqual(2); Strings.parseAsync(["asfd", "qwer"]); }); test("superRefine - type narrowing", () => { type NarrowType = { type: string; age: number }; const schema = z .object({ type: z.string(), age: z.number(), }) .nullable() .superRefine((arg, ctx): arg is NarrowType => { if (!arg) { // still need to make a call to ctx.addIssue ctx.addIssue({ code: z.ZodIssueCode.custom, message: "cannot be null", fatal: true, }); return false; } return true; }); util.assertEqual<z.infer<typeof schema>, NarrowType>(true); expect(schema.safeParse({ type: "test", age: 0 }).success).toEqual(true); expect(schema.safeParse(null).success).toEqual(false); }); test("chained mixed refining types", () => { type firstRefinement = { first: string; second: number; third: true }; type secondRefinement = { first: "bob"; second: number; third: true }; type thirdRefinement = { first: "bob"; second: 33; third: true }; const schema = z .object({ first: z.string(), second: z.number(), third: z.boolean(), }) .nullable() .refine((arg): arg is firstRefinement => !!arg?.third) .superRefine((arg, ctx): arg is secondRefinement => { util.assertEqual<typeof arg, firstRefinement>(true); if (arg.first !== "bob") { ctx.addIssue({ code: z.ZodIssueCode.custom, message: "`first` property must be `bob`", }); return false; } return true; }) .refine((arg): arg is thirdRefinement => { util.assertEqual<typeof arg, secondRefinement>(true); return arg.second === 33; }); util.assertEqual<z.infer<typeof schema>, thirdRefinement>(true); }); test("get inner type", () => { z.string() .refine(() => true) .innerType() .parse("asdf"); }); test("chained refinements", () => { const objectSchema = z .object({ length: z.number(), size: z.number(), }) .refine(({ length }) => length > 5, { path: ["length"], message: "length greater than 5", }) .refine(({ size }) => size > 7, { path: ["size"], message: "size greater than 7", }); const r1 = objectSchema.safeParse({ length: 4, size: 9, }); expect(r1.success).toEqual(false); if (!r1.success) expect(r1.error.issues.length).toEqual(1); const r2 = objectSchema.safeParse({ length: 4, size: 3, }); expect(r2.success).toEqual(false); if (!r2.success) expect(r2.error.issues.length).toEqual(2); }); test("fatal superRefine", () => { const Strings = z .string() .superRefine((val, ctx) => { if (val === "") { ctx.addIssue({ code: z.ZodIssueCode.custom, message: "foo", fatal: true, }); } }) .superRefine((val, ctx) => { if (val !== " ") { ctx.addIssue({ code: z.ZodIssueCode.custom, message: "bar", }); } }); const result = Strings.safeParse(""); expect(result.success).toEqual(false); if (!result.success) expect(result.error.issues.length).toEqual(1); }); test("superRefine after skipped transform", () => { const schema = z .string() .regex(/^\d+$/) .transform((val) => Number(val)) .superRefine((val) => { if (typeof val !== "number") { throw new Error("Called without transform"); } }); const result = schema.safeParse(""); expect(result.success).toEqual(false); });
Close