From f7be70d3d30f92c8c65212bb07eb86592e2df547 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Thu, 10 Apr 2025 17:06:24 -0700 Subject: [PATCH 1/4] Add Zod 4 test case --- README.md | 3 +- cases/index.ts | 1 + cases/zod4.ts | 90 +++++++++++++++++++++++++++++++++++++++ docs/results/node-22.json | 2 +- package-lock.json | 50 +++++++++++++++++++--- package.json | 3 +- 6 files changed, 139 insertions(+), 10 deletions(-) create mode 100644 cases/zod4.ts diff --git a/README.md b/README.md index dcf61e2fa..8389fda2b 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,8 @@ * [valita](https://github.com/badrap/valita) * [Vality](https://github.com/jeengbe/vality) * [yup](https://github.com/jquense/yup) -* [zod](https://github.com/vriad/zod) +* [zod](https://github.com/colinhacks/zod) +* [zod (v4)](https://github.com/colinhacks/zod/tree/v4) ## Criteria diff --git a/cases/index.ts b/cases/index.ts index c9e547624..a4a9ccc27 100644 --- a/cases/index.ts +++ b/cases/index.ts @@ -54,6 +54,7 @@ export const cases = [ 'vality', 'yup', 'zod', + 'zod4', 'deepkit', 'effect-schema', 'ts-auto-guard', diff --git a/cases/zod4.ts b/cases/zod4.ts new file mode 100644 index 000000000..15b2072d8 --- /dev/null +++ b/cases/zod4.ts @@ -0,0 +1,90 @@ +import * as z from 'zod4'; +import { createCase } from '../benchmarks'; + +createCase('zod4', 'parseSafe', () => { + const dataType = z.interface({ + number: z.number(), + negNumber: z.number(), + maxNumber: z.number(), + string: z.string(), + longString: z.string(), + boolean: z.boolean(), + deeplyNested: z.interface({ + foo: z.string(), + num: z.number(), + bool: z.boolean(), + }), + }); + + return data => { + return dataType.parse(data); + }; +}); + +createCase('zod4', 'parseStrict', () => { + const dataType = z + .interface({ + number: z.number(), + negNumber: z.number(), + maxNumber: z.number(), + string: z.string(), + longString: z.string(), + boolean: z.boolean(), + deeplyNested: z + .interface({ + foo: z.string(), + num: z.number(), + bool: z.boolean(), + }) + .strict(), + }) + .strict(); + + return data => { + return dataType.parse(data); + }; +}); + +createCase('zod4', 'assertLoose', () => { + const dataType = z.looseInterface({ + number: z.number(), + negNumber: z.number(), + maxNumber: z.number(), + string: z.string(), + longString: z.string(), + boolean: z.boolean(), + deeplyNested: z.looseInterface({ + foo: z.string(), + num: z.number(), + bool: z.boolean(), + }), + }); + + return data => { + dataType.parse(data); + + return true; + }; +}); + +createCase('zod4', 'assertStrict', () => { + const dataType = z.strictInterface({ + number: z.number(), + negNumber: z.number(), + maxNumber: z.number(), + string: z.string(), + longString: z.string(), + boolean: z.boolean(), + deeplyNested: z.strictInterface({ + foo: z.string(), + num: z.number(), + bool: z.boolean(), + }), + }); + + return data => { + dataType.parse(data); + + return true; + }; +}); diff --git a/docs/results/node-22.json b/docs/results/node-22.json index 35a039a5c..672f3465e 100644 --- a/docs/results/node-22.json +++ b/docs/results/node-22.json @@ -1 +1 @@ -{"results":[{"benchmark":"parseSafe","name":"aeria","ops":994532,"margin":0.66,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"aeria","ops":1007503,"margin":0.55,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"aeria","ops":989871,"margin":0.59,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"aeria","ops":1015557,"margin":0.39,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ajv","ops":36111389,"margin":1.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"ajv","ops":19772915,"margin":1.05,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"arktype","ops":60306280,"margin":0.85,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"banditypes","ops":2655625,"margin":0.61,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"banditypes","ops":2651422,"margin":0.64,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"bueno","ops":283641,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"bueno","ops":282350,"margin":0.36,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"bueno","ops":507300,"margin":0.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"bueno","ops":499540,"margin":0.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"caketype","ops":169669,"margin":0.23,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"caketype","ops":217837,"margin":0.31,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"caketype","ops":167074,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"class-transformer-validator-sync","ops":91634,"margin":2.18,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"cleaners","ops":2662470,"margin":0.68,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"computed-types","ops":1451550,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"computed-types","ops":1228924,"margin":0.41,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"computed-types","ops":1230171,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"decoders","ops":383037,"margin":0.42,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"decoders","ops":231639,"margin":0.29,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"decoders","ops":231309,"margin":0.48,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"io-ts","ops":2818441,"margin":0.27,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"io-ts","ops":1152561,"margin":0.17,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"joi","ops":239502,"margin":0.24,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"joi","ops":244033,"margin":0.12,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"joi","ops":242778,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"joi","ops":226945,"margin":0.26,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"jointz","ops":662608,"margin":0.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"jointz","ops":661281,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"jointz","ops":875106,"margin":1.07,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"json-decoder","ops":1623940,"margin":0.56,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"$mol_data","ops":3065190,"margin":0.7,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"$mol_data","ops":3055814,"margin":0.48,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"@mojotech/json-type-validation","ops":2411032,"margin":0.62,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"mondrian-framework","ops":567592,"margin":0.68,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"mondrian-framework","ops":523597,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"mondrian-framework","ops":572180,"margin":0.71,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"mondrian-framework","ops":490345,"margin":2.89,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"myzod","ops":2352120,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"myzod","ops":2685878,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"myzod","ops":2731040,"margin":0.54,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"ok-computer","ops":215256,"margin":0.22,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ok-computer","ops":225278,"margin":0.25,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"parse-dont-validate (chained function)","ops":694771,"margin":0.59,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"parse-dont-validate (named parameters)","ops":2054264,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"paseri","ops":5744808,"margin":0.36,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"paseri","ops":5751693,"margin":0.39,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"paseri","ops":5730993,"margin":0.71,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"paseri","ops":5745424,"margin":0.65,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"pure-parse (JIT compiled)","ops":22981889,"margin":0.95,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"pure-parse","ops":2850188,"margin":0.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"pure-parse","ops":2262857,"margin":0.25,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"pure-parse (JIT compiled)","ops":7876592,"margin":0.58,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"pure-parse (JIT compiled)","ops":46451290,"margin":1.27,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"pure-parse","ops":4013853,"margin":0.75,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"purify-ts","ops":1839262,"margin":0.83,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"r-assign","ops":1834847,"margin":1.45,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"r-assign","ops":1543294,"margin":0.16,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"r-assign","ops":1834427,"margin":0.47,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"r-assign","ops":1552377,"margin":0.32,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"rescript-schema","ops":61495517,"margin":2.22,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"rescript-schema","ops":26001358,"margin":0.82,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"rescript-schema","ops":62354757,"margin":1.77,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"rescript-schema","ops":23746233,"margin":0.82,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"rulr","ops":1144489,"margin":0.81,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"runtypes","ops":179865,"margin":0.4,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"@sapphire/shapeshift","ops":314088,"margin":0.41,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"@sapphire/shapeshift","ops":300434,"margin":0.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sapphire/shapeshift","ops":268916,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sapphire/shapeshift","ops":301224,"margin":0.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"simple-runtypes","ops":2687722,"margin":0.6,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"simple-runtypes","ops":3516520,"margin":0.81,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"simple-runtypes","ops":3457226,"margin":0.47,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typebox-(ahead-of-time)","ops":83684125,"margin":3.21,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typebox-(ahead-of-time)","ops":31839313,"margin":1.03,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typebox-(dynamic)","ops":876287,"margin":0.98,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typebox-(dynamic)","ops":778796,"margin":0.24,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typebox-(just-in-time)","ops":72616312,"margin":2.52,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typebox-(just-in-time)","ops":29171763,"margin":1.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typemap/valibot","ops":64656796,"margin":2.2,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typemap/valibot","ops":27445296,"margin":1.05,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typemap/zod","ops":64866951,"margin":2.06,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typemap/zod","ops":27228439,"margin":1.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"spectypes","ops":32690096,"margin":1.16,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"spectypes","ops":26073470,"margin":1.06,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"spectypes","ops":77250662,"margin":3.02,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"spectypes","ops":24148198,"margin":0.85,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"stnl (composition)","ops":6695884,"margin":0.5,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"stnl (just-in-time)","ops":70918350,"margin":2.59,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"succulent","ops":516712,"margin":0.46,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"succulent","ops":908952,"margin":0.33,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"succulent","ops":515047,"margin":0.34,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"superstruct","ops":164393,"margin":0.34,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"superstruct","ops":208068,"margin":0.79,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"superstruct","ops":163374,"margin":0.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"suretype","ops":44145395,"margin":1.8,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"tiny-schema-validator","ops":1917395,"margin":0.66,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"tiny-schema-validator","ops":1903574,"margin":0.56,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"to-typed","ops":4442594,"margin":0.78,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"to-typed","ops":3413144,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"to-typed","ops":116387,"margin":0.45,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"to-typed","ops":3307742,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"toi","ops":1137187,"margin":0.32,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"toi","ops":1138339,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-interface-checker","ops":4031335,"margin":0.34,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-json-validator","ops":44590800,"margin":2.25,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"ts-runtime-checks","ops":29948448,"margin":1.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"ts-runtime-checks","ops":30235892,"margin":1.19,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-runtime-checks","ops":83878271,"margin":2.97,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"ts-utils","ops":331058,"margin":0.46,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"tson","ops":704630,"margin":0.29,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"tson","ops":803413,"margin":0.56,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"tson","ops":807741,"margin":0.53,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"tson","ops":807502,"margin":0.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@typeofweb/schema","ops":1604338,"margin":0.69,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"@typeofweb/schema","ops":1631218,"margin":0.39,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"typia","ops":67786317,"margin":2.61,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"typia","ops":29502109,"margin":1.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"typia","ops":27074550,"margin":1.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"typia","ops":74561011,"margin":2.8,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"unknownutil","ops":3794513,"margin":0.58,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"unknownutil","ops":3774587,"margin":0.81,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"unknownutil","ops":5361005,"margin":0.7,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"valibot","ops":1110513,"margin":0.76,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"valibot","ops":929276,"margin":0.57,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"valibot","ops":1122982,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"valibot","ops":933809,"margin":0.54,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"valita","ops":6224484,"margin":0.35,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"valita","ops":6159753,"margin":0.45,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"valita","ops":5727996,"margin":0.57,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"valita","ops":6183821,"margin":0.62,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"vality","ops":219731,"margin":0.5,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"vality","ops":209530,"margin":0.22,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"vality","ops":214770,"margin":0.51,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"vality","ops":208446,"margin":0.42,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"yup","ops":71984,"margin":0.14,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"yup","ops":67827,"margin":0.35,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"zod","ops":774215,"margin":0.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"zod","ops":679678,"margin":0.35,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"zod","ops":697203,"margin":0.58,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"zod","ops":691144,"margin":0.47,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"deepkit","ops":2612326,"margin":0.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"deepkit","ops":23519940,"margin":1.12,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"effect-schema","ops":1519137,"margin":0.63,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"effect-schema","ops":327673,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"effect-schema","ops":1331676,"margin":0.86,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"effect-schema","ops":289663,"margin":0.55,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-auto-guard","ops":80282499,"margin":3.76,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"type-predicate-generator","ops":79815238,"margin":2.33,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"jet-validators","ops":1625504,"margin":0.36,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"jet-validators","ops":1643115,"margin":0.21,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"jet-validators","ops":1974153,"margin":0.61,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"jet-validators","ops":1629451,"margin":0.46,"runtime":"node","runtimeVersion":"v22.14.0"}]} \ No newline at end of file +{"results":[{"benchmark":"parseSafe","name":"zod","ops":1173462,"margin":0.22,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod","ops":1084412,"margin":0.27,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod","ops":1079875,"margin":0.27,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod","ops":1075707,"margin":0.28,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseSafe","name":"zod4","ops":8309324,"margin":0.24,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod4","ops":3469559,"margin":0.22,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod4","ops":3408040,"margin":2.51,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod4","ops":3445247,"margin":0.24,"runtime":"node","runtimeVersion":"v22.13.0"}]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 627fba27a..d9fc95ff0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,7 +84,8 @@ "vega": "5.33.0", "vega-lite": "5.11.0", "yup": "1.6.1", - "zod": "3.24.2" + "zod": "3.24.2", + "zod4": "npm:zod@next" }, "devDependencies": { "@babel/cli": "7.27.0", @@ -3683,6 +3684,15 @@ "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==" }, + "node_modules/@zod/core": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@zod/core/-/core-0.3.2.tgz", + "integrity": "sha512-plINlZ/OAUdZM35RHLKPTHjWGOAs+fXzoQTAxDe2s6+znaaqa39NhN0i1oLja37OsuxeGsGYosITKOyYa+OSCg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -8748,9 +8758,9 @@ "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -11212,6 +11222,19 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zod4": { + "name": "zod", + "version": "4.0.0-beta.20250410T230029", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.0-beta.20250410T230029.tgz", + "integrity": "sha512-2ZXbCLP3iFVLblfxE9mknmFL8pMuAQvGEVM1KYHE06oOU3wDoLfeuQ2ObIOnYgiv+Y2kuDQHNhAYBbjd+UGRXg==", + "license": "MIT", + "dependencies": { + "@zod/core": "0.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -13559,6 +13582,11 @@ "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==" }, + "@zod/core": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@zod/core/-/core-0.3.2.tgz", + "integrity": "sha512-plINlZ/OAUdZM35RHLKPTHjWGOAs+fXzoQTAxDe2s6+znaaqa39NhN0i1oLja37OsuxeGsGYosITKOyYa+OSCg==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -17074,9 +17102,9 @@ "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, "semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" }, "serve": { "version": "14.2.4", @@ -18809,6 +18837,14 @@ "version": "3.24.2", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==" + }, + "zod4": { + "version": "npm:zod@4.0.0-beta.20250410T230029", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.0-beta.20250410T230029.tgz", + "integrity": "sha512-2ZXbCLP3iFVLblfxE9mknmFL8pMuAQvGEVM1KYHE06oOU3wDoLfeuQ2ObIOnYgiv+Y2kuDQHNhAYBbjd+UGRXg==", + "requires": { + "@zod/core": "0.3.2" + } } } } diff --git a/package.json b/package.json index 70c81a173..e4ff10e0d 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,8 @@ "vega": "5.33.0", "vega-lite": "5.11.0", "yup": "1.6.1", - "zod": "3.24.2" + "zod": "3.24.2", + "zod4": "npm:zod@next" }, "devDependencies": { "@babel/cli": "7.27.0", From d6d5bb299ff8f6380cc856fb7077c53dba686af3 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Thu, 10 Apr 2025 18:15:20 -0700 Subject: [PATCH 2/4] Add Zod 4 --- docs/results/node-22.json | 2 +- package-lock.json | 29 +++++++++++++++-------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/results/node-22.json b/docs/results/node-22.json index 672f3465e..4c9f3703b 100644 --- a/docs/results/node-22.json +++ b/docs/results/node-22.json @@ -1 +1 @@ -{"results":[{"benchmark":"parseSafe","name":"zod","ops":1173462,"margin":0.22,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod","ops":1084412,"margin":0.27,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod","ops":1079875,"margin":0.27,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod","ops":1075707,"margin":0.28,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseSafe","name":"zod4","ops":8309324,"margin":0.24,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod4","ops":3469559,"margin":0.22,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod4","ops":3408040,"margin":2.51,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod4","ops":3445247,"margin":0.24,"runtime":"node","runtimeVersion":"v22.13.0"}]} \ No newline at end of file +{"results":[{"benchmark":"parseSafe","name":"zod","ops":1109349,"margin":0.31,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod","ops":1014695,"margin":0.16,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod","ops":1012187,"margin":0.25,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod","ops":1013137,"margin":0.23,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseSafe","name":"zod4","ops":9433576,"margin":0.32,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod4","ops":4439774,"margin":0.44,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod4","ops":4620124,"margin":0.2,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod4","ops":4385374,"margin":0.2,"runtime":"node","runtimeVersion":"v22.13.0"}]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d9fc95ff0..765df6a5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3685,9 +3685,9 @@ "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==" }, "node_modules/@zod/core": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@zod/core/-/core-0.3.2.tgz", - "integrity": "sha512-plINlZ/OAUdZM35RHLKPTHjWGOAs+fXzoQTAxDe2s6+znaaqa39NhN0i1oLja37OsuxeGsGYosITKOyYa+OSCg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@zod/core/-/core-0.3.3.tgz", + "integrity": "sha512-zXp0/K9zynk8ZP5hdUN2i0xePJ6uULX5rvBC/54bWNF4FL9YHxTjQg/zPFNj+WE8g0QTKX+fty7n073bgp6wNw==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -11219,18 +11219,19 @@ "version": "3.24.2", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod4": { "name": "zod", - "version": "4.0.0-beta.20250410T230029", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.0-beta.20250410T230029.tgz", - "integrity": "sha512-2ZXbCLP3iFVLblfxE9mknmFL8pMuAQvGEVM1KYHE06oOU3wDoLfeuQ2ObIOnYgiv+Y2kuDQHNhAYBbjd+UGRXg==", + "version": "4.0.0-beta.20250411T005215", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.0-beta.20250411T005215.tgz", + "integrity": "sha512-FgvuS7Gb0kzI9Rsd1ihOulGSFT9LVj0JdejbkvjXIski9F/DheDIBV9uZkbAIiS6bOsthAMWHFtSsM1o+hmhig==", "license": "MIT", "dependencies": { - "@zod/core": "0.3.2" + "@zod/core": "0.3.3" }, "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -13583,9 +13584,9 @@ "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==" }, "@zod/core": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@zod/core/-/core-0.3.2.tgz", - "integrity": "sha512-plINlZ/OAUdZM35RHLKPTHjWGOAs+fXzoQTAxDe2s6+znaaqa39NhN0i1oLja37OsuxeGsGYosITKOyYa+OSCg==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@zod/core/-/core-0.3.3.tgz", + "integrity": "sha512-zXp0/K9zynk8ZP5hdUN2i0xePJ6uULX5rvBC/54bWNF4FL9YHxTjQg/zPFNj+WE8g0QTKX+fty7n073bgp6wNw==" }, "accepts": { "version": "1.3.8", @@ -18839,11 +18840,11 @@ "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==" }, "zod4": { - "version": "npm:zod@4.0.0-beta.20250410T230029", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.0-beta.20250410T230029.tgz", - "integrity": "sha512-2ZXbCLP3iFVLblfxE9mknmFL8pMuAQvGEVM1KYHE06oOU3wDoLfeuQ2ObIOnYgiv+Y2kuDQHNhAYBbjd+UGRXg==", + "version": "npm:zod@4.0.0-beta.20250411T005215", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.0-beta.20250411T005215.tgz", + "integrity": "sha512-FgvuS7Gb0kzI9Rsd1ihOulGSFT9LVj0JdejbkvjXIski9F/DheDIBV9uZkbAIiS6bOsthAMWHFtSsM1o+hmhig==", "requires": { - "@zod/core": "0.3.2" + "@zod/core": "0.3.3" } } } From df2025d06196e870028f7bd23ab11b6212d87e08 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Thu, 10 Apr 2025 18:22:03 -0700 Subject: [PATCH 3/4] Undo results changes --- docs/results/node-22.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/results/node-22.json b/docs/results/node-22.json index 4c9f3703b..35a039a5c 100644 --- a/docs/results/node-22.json +++ b/docs/results/node-22.json @@ -1 +1 @@ -{"results":[{"benchmark":"parseSafe","name":"zod","ops":1109349,"margin":0.31,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod","ops":1014695,"margin":0.16,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod","ops":1012187,"margin":0.25,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod","ops":1013137,"margin":0.23,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseSafe","name":"zod4","ops":9433576,"margin":0.32,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"parseStrict","name":"zod4","ops":4439774,"margin":0.44,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertLoose","name":"zod4","ops":4620124,"margin":0.2,"runtime":"node","runtimeVersion":"v22.13.0"},{"benchmark":"assertStrict","name":"zod4","ops":4385374,"margin":0.2,"runtime":"node","runtimeVersion":"v22.13.0"}]} \ No newline at end of file +{"results":[{"benchmark":"parseSafe","name":"aeria","ops":994532,"margin":0.66,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"aeria","ops":1007503,"margin":0.55,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"aeria","ops":989871,"margin":0.59,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"aeria","ops":1015557,"margin":0.39,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ajv","ops":36111389,"margin":1.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"ajv","ops":19772915,"margin":1.05,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"arktype","ops":60306280,"margin":0.85,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"banditypes","ops":2655625,"margin":0.61,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"banditypes","ops":2651422,"margin":0.64,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"bueno","ops":283641,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"bueno","ops":282350,"margin":0.36,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"bueno","ops":507300,"margin":0.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"bueno","ops":499540,"margin":0.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"caketype","ops":169669,"margin":0.23,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"caketype","ops":217837,"margin":0.31,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"caketype","ops":167074,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"class-transformer-validator-sync","ops":91634,"margin":2.18,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"cleaners","ops":2662470,"margin":0.68,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"computed-types","ops":1451550,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"computed-types","ops":1228924,"margin":0.41,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"computed-types","ops":1230171,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"decoders","ops":383037,"margin":0.42,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"decoders","ops":231639,"margin":0.29,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"decoders","ops":231309,"margin":0.48,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"io-ts","ops":2818441,"margin":0.27,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"io-ts","ops":1152561,"margin":0.17,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"joi","ops":239502,"margin":0.24,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"joi","ops":244033,"margin":0.12,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"joi","ops":242778,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"joi","ops":226945,"margin":0.26,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"jointz","ops":662608,"margin":0.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"jointz","ops":661281,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"jointz","ops":875106,"margin":1.07,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"json-decoder","ops":1623940,"margin":0.56,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"$mol_data","ops":3065190,"margin":0.7,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"$mol_data","ops":3055814,"margin":0.48,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"@mojotech/json-type-validation","ops":2411032,"margin":0.62,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"mondrian-framework","ops":567592,"margin":0.68,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"mondrian-framework","ops":523597,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"mondrian-framework","ops":572180,"margin":0.71,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"mondrian-framework","ops":490345,"margin":2.89,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"myzod","ops":2352120,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"myzod","ops":2685878,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"myzod","ops":2731040,"margin":0.54,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"ok-computer","ops":215256,"margin":0.22,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ok-computer","ops":225278,"margin":0.25,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"parse-dont-validate (chained function)","ops":694771,"margin":0.59,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"parse-dont-validate (named parameters)","ops":2054264,"margin":0.37,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"paseri","ops":5744808,"margin":0.36,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"paseri","ops":5751693,"margin":0.39,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"paseri","ops":5730993,"margin":0.71,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"paseri","ops":5745424,"margin":0.65,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"pure-parse (JIT compiled)","ops":22981889,"margin":0.95,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"pure-parse","ops":2850188,"margin":0.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"pure-parse","ops":2262857,"margin":0.25,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"pure-parse (JIT compiled)","ops":7876592,"margin":0.58,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"pure-parse (JIT compiled)","ops":46451290,"margin":1.27,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"pure-parse","ops":4013853,"margin":0.75,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"purify-ts","ops":1839262,"margin":0.83,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"r-assign","ops":1834847,"margin":1.45,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"r-assign","ops":1543294,"margin":0.16,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"r-assign","ops":1834427,"margin":0.47,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"r-assign","ops":1552377,"margin":0.32,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"rescript-schema","ops":61495517,"margin":2.22,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"rescript-schema","ops":26001358,"margin":0.82,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"rescript-schema","ops":62354757,"margin":1.77,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"rescript-schema","ops":23746233,"margin":0.82,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"rulr","ops":1144489,"margin":0.81,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"runtypes","ops":179865,"margin":0.4,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"@sapphire/shapeshift","ops":314088,"margin":0.41,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"@sapphire/shapeshift","ops":300434,"margin":0.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sapphire/shapeshift","ops":268916,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sapphire/shapeshift","ops":301224,"margin":0.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"simple-runtypes","ops":2687722,"margin":0.6,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"simple-runtypes","ops":3516520,"margin":0.81,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"simple-runtypes","ops":3457226,"margin":0.47,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typebox-(ahead-of-time)","ops":83684125,"margin":3.21,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typebox-(ahead-of-time)","ops":31839313,"margin":1.03,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typebox-(dynamic)","ops":876287,"margin":0.98,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typebox-(dynamic)","ops":778796,"margin":0.24,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typebox-(just-in-time)","ops":72616312,"margin":2.52,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typebox-(just-in-time)","ops":29171763,"margin":1.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typemap/valibot","ops":64656796,"margin":2.2,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typemap/valibot","ops":27445296,"margin":1.05,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@sinclair/typemap/zod","ops":64866951,"margin":2.06,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"@sinclair/typemap/zod","ops":27228439,"margin":1.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"spectypes","ops":32690096,"margin":1.16,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"spectypes","ops":26073470,"margin":1.06,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"spectypes","ops":77250662,"margin":3.02,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"spectypes","ops":24148198,"margin":0.85,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"stnl (composition)","ops":6695884,"margin":0.5,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"stnl (just-in-time)","ops":70918350,"margin":2.59,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"succulent","ops":516712,"margin":0.46,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"succulent","ops":908952,"margin":0.33,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"succulent","ops":515047,"margin":0.34,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"superstruct","ops":164393,"margin":0.34,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"superstruct","ops":208068,"margin":0.79,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"superstruct","ops":163374,"margin":0.3,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"suretype","ops":44145395,"margin":1.8,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"tiny-schema-validator","ops":1917395,"margin":0.66,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"tiny-schema-validator","ops":1903574,"margin":0.56,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"to-typed","ops":4442594,"margin":0.78,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"to-typed","ops":3413144,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"to-typed","ops":116387,"margin":0.45,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"to-typed","ops":3307742,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"toi","ops":1137187,"margin":0.32,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"toi","ops":1138339,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-interface-checker","ops":4031335,"margin":0.34,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-json-validator","ops":44590800,"margin":2.25,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"ts-runtime-checks","ops":29948448,"margin":1.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"ts-runtime-checks","ops":30235892,"margin":1.19,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-runtime-checks","ops":83878271,"margin":2.97,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"ts-utils","ops":331058,"margin":0.46,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"tson","ops":704630,"margin":0.29,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"tson","ops":803413,"margin":0.56,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"tson","ops":807741,"margin":0.53,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"tson","ops":807502,"margin":0.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"@typeofweb/schema","ops":1604338,"margin":0.69,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"@typeofweb/schema","ops":1631218,"margin":0.39,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"typia","ops":67786317,"margin":2.61,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"typia","ops":29502109,"margin":1.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"typia","ops":27074550,"margin":1.28,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"typia","ops":74561011,"margin":2.8,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"unknownutil","ops":3794513,"margin":0.58,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"unknownutil","ops":3774587,"margin":0.81,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"unknownutil","ops":5361005,"margin":0.7,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"valibot","ops":1110513,"margin":0.76,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"valibot","ops":929276,"margin":0.57,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"valibot","ops":1122982,"margin":0.38,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"valibot","ops":933809,"margin":0.54,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"valita","ops":6224484,"margin":0.35,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"valita","ops":6159753,"margin":0.45,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"valita","ops":5727996,"margin":0.57,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"valita","ops":6183821,"margin":0.62,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"vality","ops":219731,"margin":0.5,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"vality","ops":209530,"margin":0.22,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"vality","ops":214770,"margin":0.51,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"vality","ops":208446,"margin":0.42,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"yup","ops":71984,"margin":0.14,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"yup","ops":67827,"margin":0.35,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"zod","ops":774215,"margin":0.67,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"zod","ops":679678,"margin":0.35,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"zod","ops":697203,"margin":0.58,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"zod","ops":691144,"margin":0.47,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"deepkit","ops":2612326,"margin":0.43,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"deepkit","ops":23519940,"margin":1.12,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"effect-schema","ops":1519137,"margin":0.63,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"effect-schema","ops":327673,"margin":0.44,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"effect-schema","ops":1331676,"margin":0.86,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"effect-schema","ops":289663,"margin":0.55,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"ts-auto-guard","ops":80282499,"margin":3.76,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"type-predicate-generator","ops":79815238,"margin":2.33,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseSafe","name":"jet-validators","ops":1625504,"margin":0.36,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"parseStrict","name":"jet-validators","ops":1643115,"margin":0.21,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertLoose","name":"jet-validators","ops":1974153,"margin":0.61,"runtime":"node","runtimeVersion":"v22.14.0"},{"benchmark":"assertStrict","name":"jet-validators","ops":1629451,"margin":0.46,"runtime":"node","runtimeVersion":"v22.14.0"}]} \ No newline at end of file From e9554c7e6531042b52547f4cd257823c6cf89f51 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Fri, 11 Apr 2025 15:55:29 -0700 Subject: [PATCH 4/4] Add to tests --- test/benchmarks.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/benchmarks.test.ts b/test/benchmarks.test.ts index acfe8bee7..02c9a0242 100644 --- a/test/benchmarks.test.ts +++ b/test/benchmarks.test.ts @@ -58,6 +58,7 @@ import '../cases/valita'; import '../cases/vality'; import '../cases/yup'; import '../cases/zod'; +import '../cases/zod4'; import '../cases/deepkit'; import '../cases/effect-schema'; import '../cases/ts-auto-guard';