DEV Community

Cover image for I made 1,000x faster TypeScript Validator Library

I made 1,000x faster TypeScript Validator Library

Jeongho Nam on October 08, 2022

Hello, I'm developer of typescript-json and have measure a benchmark comparing performance with other competitive libraries. By the benchmark, my l...
Collapse
 
crobinson42 profile image
Cory Robinson

Suretype is an excellent library that folks forget to mention.

Collapse
 
dagnelies profile image
Arnaud Dagnelies

Thanks again for suggesting this library which I used in the end. Instead of deriving the validation from the types like here, they go the other way around. You define the validation rules, which can define more precise rules than mere type definitions, and it deduces the type directly. That way, you don't need the intermediate code generation step like in this article, you get more precise validation and full typing support. Truly the best of both worlds.

Collapse
 
aderchox profile image
aderchox

It's not even packaged as an NPM module? (I know it can be npm installed from GitHub directly, but that's not nice...).

Collapse
 
marcus-sa profile image
Marcus S. Abildskov
Collapse
 
dagnelies profile image
Arnaud Dagnelies

Interesting. I was just looking for a json/ts validation library, what a coincidence! Well, I might as well try this out. ;) By the way, as a humble developer, performance is nice but simplicity is key. Thanks for the lib.

Collapse
 
dagnelies profile image
Arnaud Dagnelies

Hmmm.... My first attempt failed. no transform has been configured. I guess the generation of schemas during the compilation step is missing. Btw, I'm using wrangler which is a toolchain of its own, so I have no idea how to incorporate the step.

Collapse
 
samchon profile image
Jeongho Nam

The wrangler is something like cra or vite? If you can configure webpack, then you can use this typescript-json following README article. If configuring custom webpack is too hard, I recommend to use vite instead because its configuration is the easiest one.

If you wanna detailed help or guide, you also can write an issue on the repo. Then I or another developer may help you.

Thread Thread
 
amenadiel profile image
Felipe Figueroa

Wrangler should delegate to whatever is executed by package.json's build script . Usually it's either esbuild or webpack.

Collapse
 
samchon profile image
Jeongho Nam

As I've promised, wrote an article introducing how to use typia in NestJS.

dev.to/samchon/nestia-boost-up-you...

Collapse
 
yongchanghe profile image
Yongchang He

Congrats!

Collapse
 
chema profile image
José María CL

wow! congrats!

Collapse
 
marcus-sa profile image
Marcus S. Abildskov

deepkit.io/library/type
Still a long way to go 😉

Collapse
 
samchon profile image
Jeongho Nam • Edited

I know that library and also benchmarked it. However, it requires too much compilation time and does not support any complicate type like generic. I will report bug soon.

Collapse
 
marcus-sa profile image
Marcus S. Abildskov • Edited

"too much compilation time" are you transpiling code on a potato? I've had no issues whatsoever.
"complicate type like generic" I've still had no issues whatsoever.

Anyway, it's like comparing a quantum computer to a potato 🤷‍♂️

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
cmcnicholas profile image
Craig McNicholas

Written by a guy who has never had to hand validate hundreds of dependant models, discriminated types and deeply nested model heirarchies.

Collapse
 
hakimio profile image
Tomas Rimkus

No, it's not "clean architecture". It's "Dunning–Kruger effect".

Collapse
 
h_sifat profile image
Muhammad Sifat Hossain • Edited

Well, I'm still a junior, please don't judge me, I'm still learning! Whenever I'm doing my whole entity validation with joi, zod or something else, my business logic becomes coupled to it. And when I read the clean architecture book it says, that the core entities should not directly depend on anything. But I understand it's not a law.

Collapse
 
dashmug profile image
Noel Martin Llevares

Can you use typescript-json to validate based on JSON schemas like what ajv does?

Collapse
 
samchon profile image
Jeongho Nam

Use TSON.application() function. It may what you want.

Collapse
 
lioness100 profile image
Lioness100

You should benchmark against @sapphire/shapeshift!

Collapse
 
samchon profile image
Jeongho Nam

Welcome your PR.

Collapse
 
patroza profile image
Patrick Roza

What about more advanced runtime validations, like basic regex?

Collapse
 
samchon profile image
Jeongho Nam

github.com/samchon/typescript-json...

Is this what you want?

Collapse
 
patroza profile image
Patrick Roza • Edited

That looks great. if you could combine this with branded types, so instead of email: string
you would have email: Email
And an Email type that would carry the email validation rules. And has eg type string & Brand<EmailBrand>

Collapse
 
thejaredwilcurt profile image
The Jared Wilcurt

My dead grandma's dead dog is faster than TypeScript. low bar

Collapse
 
kostyatretyak profile image
Костя Третяк

What do you mean when you write, for example, typescript-json 28.579% and zod - 100%?

Collapse
 
samchon profile image
Jeongho Nam • Edited

github.com/samchon/typescript-json...

Slowest feature as 100% and 0% means failure.

If you wanna detailed measurement, click above link. The number means that how many jobs have done in one second.

Collapse
 
crobinson42 profile image
Cory Robinson

@samchon do you plan to support ts to json-schema export in this library or an extension of this library?

Collapse
 
samchon profile image
Jeongho Nam

What about using TSON.application() function? It generates JSON schema.

Collapse
 
rickhoro profile image
Rick Horowitz

Two questions...

  1. Have you benchmarked against yup?
  2. Do you plan to implement a resolver for react-hook-form? Thanks!!
Collapse
 
samchon profile image
Jeongho Nam • Edited
  1. No plan to measure yup because it does not support even union type

  2. No plan to make it. But welcome if you make and publish it as your own.

By the way, I made a react library which requires only TypeScript type like below. It would be published after styling, clear API designing with documentation. This may be what you want.

Image description

Collapse
 
marcus-sa profile image
Marcus S. Abildskov
Collapse
 
fxrahul7 profile image
fxrahul7

Will it work with tRPC?

Collapse
 
samchon profile image
Jeongho Nam

I don't know about tRPC, but it may work if calling TSON function is possible