-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
52 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
paseri-lib/README.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
[![Release](https://github.com/vbudovski/paseri/actions/workflows/release.yml/badge.svg)](https://github.com/vbudovski/paseri/actions/workflows/release.yml) | ||
[![Coverage](https://gist.githubusercontent.com/vbudovski/80548a1b87f9f00fe1ae426ca6a2a517/raw/vbudovski_paseri_main-coverage.svg)](https://github.com/vbudovski/paseri/actions/workflows/release.yml) | ||
|
||
--- | ||
|
||
# Paseri | ||
|
||
A TypeScript parsing, and validation library for structured data. Ensure that untrusted input from users or external | ||
APIs conforms to the expected format. | ||
|
||
Why the name? It's the Japanese name for parsley (パセリ), and also a play on words on parse/parsing, which is the goal | ||
of this library. | ||
|
||
## Acknowledgements | ||
|
||
### Zod | ||
|
||
This library wouldn't exist without [Zod](https://github.com/colinhacks/zod) as a source of inspiration, with its incredibly expressive, and | ||
straightforward API. Zod is an excellent, and very mature library, and if the highest possible performance isn't a key | ||
requirement, then it is a great choice. | ||
|
||
### Valita | ||
|
||
It sets an incredibly high bar for parsing performance, and is the current benchmark for this implementation. Some of | ||
the goals of this library differ from the goals of [Valita](https://github.com/badrap/valita), but it is nonetheless an excellent project. | ||
|
||
## Goals | ||
|
||
The list may be expanded in time, but for now the objectives are the following: | ||
|
||
* Parsing and validation of untrusted input to ensure it conforms to the expected format. A successful result will | ||
be typed with the narrowest possible definition to obviate the need to do additional validation at the point of | ||
usage[^1]. | ||
* High performance[^2], and usability in a strict | ||
[Content Security Policy (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) environment. | ||
* An API that is *reasonably* close to that of Zod. One-to-one compatibility is not the intention. | ||
* Immutability of schemas. This avoids a lot of bugs caused by mutating references to non-primitive types. | ||
|
||
## Documentation | ||
|
||
https://paseri.dev | ||
|
||
--- | ||
|
||
[^1]: An [excellent article](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/) on the concept of | ||
type-driven design. | ||
|
||
[^2]: It's certainly possible to create much faster parsers using dynamic code execution or ahead-of-time compilation, | ||
but they each have drawbacks in the form of potential | ||
[security issues](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#never_use_direct_eval!) | ||
or added complexity from requiring a manual compilation step. |