Skip to content
Closed
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
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
* [marshal](https://github.com/marcj/marshal.ts)
* [myzod](https://github.com/davidmdm/myzod)
* [purify-ts](https://github.com/gigobyte/purify)
* [quartet](https://github.com/whiteand/ts-quartet)
* [runtypes](https://github.com/pelotom/runtypes)
* [toi](https://github.com/hf/toi)
* [ts-json-validator](https://github.com/ostrowr/ts-json-validator)
Expand Down Expand Up @@ -61,27 +62,27 @@ const res = isMyDataValid(data)

![Bar Graph - Node 10.x](./results/data-type-10.x.svg)

#### Node 12.x ([JSON](./results/data-type-12.x.json), [CSV](./results/data-type-12.x.csv), [SVG](./results/data-type-12.x.svg))
#### Node 12.x ([JSON](./results/data-type-v12.14.0.json), [CSV](./results/data-type-v12.14.0.csv), [SVG](./results/data-type-v12.14.0.svg))

![Bar Graph - Node 12.x](./results/data-type-12.x.svg)
![Bar Graph - Node 12.x](./results/data-type-v12.14.0.svg)

#### Node 13.x ([JSON](./results/data-type-13.x.json), [CSV](./results/data-type-13.x.csv), [SVG](./results/data-type-13.x.svg))

![Bar Graph - Node 13.x](./results/data-type-13.x.svg)

### Data Type Checks Sans `ts-json-validator`

Because `ts-json-validator` is so performant it makes it difficult to see the benchmarks for other packages.
This benchmark run includes all of the above packages, but excludes `ts-json-validator`.
Because `ts-json-validator` and `quartet` are so performant it makes it difficult to see the benchmarks for other packages.
This benchmark run includes all of the above packages, but excludes `ts-json-validator` and `quartet`.

#### Node 10.x ([JSON](./results/data-type-sans-ts-json-validator-10.x.json), [CSV](./results/data-type-sans-ts-json-validator-10.x.csv), [SVG](./results/data-type-sans-ts-json-validator-10.x.svg))
#### Node 10.x ([JSON](./results/data-type-sans-ts-json-validator-and-quartet-10.x.json), [CSV](./results/data-type-sans-ts-json-validator-and-quartet-10.x.csv), [SVG](./results/data-type-sans-ts-json-validator-and-quartet-10.x.svg))

![Bar Graph - Node 10.x](./results/data-type-sans-ts-json-validator-10.x.svg)
![Bar Graph - Node 10.x](./results/data-type-sans-ts-json-validator-and-quartet-10.x.svg)

#### Node 12.x ([JSON](./results/data-type-sans-ts-json-validator-12.x.json), [CSV](./results/data-type-sans-ts-json-validator-12.x.csv), [SVG](./results/data-type-sans-ts-json-validator-12.x.svg))
#### Node 12.x ([JSON](./results/data-type-sans-ts-json-validator-and-quartet-12.x.json), [CSV](./results/data-type-sans-ts-json-validator-and-quartet-12.x.csv), [SVG](./results/data-type-sans-ts-json-validator-and-quartet-12.x.svg))

![Bar Graph - Node 12.x](./results/data-type-sans-ts-json-validator-12.x.svg)
![Bar Graph - Node 12.x](./results/data-type-sans-ts-json-validator-and-quartet-12.x.svg)

#### Node 13.x ([JSON](./results/data-type-sans-ts-json-validator-13.x.json), [CSV](./results/data-type-sans-ts-json-validator-13.x.csv), [SVG](./results/data-type-sans-ts-json-validator-13.x.svg))
#### Node 13.x ([JSON](./results/data-type-sans-ts-json-validator-and-quartet-13.x.json), [CSV](./results/data-type-sans-ts-json-validator-and-quartet-13.x.csv), [SVG](./results/data-type-sans-ts-json-validator-and-quartet-13.x.svg))

![Bar Graph - Node 13.x](./results/data-type-sans-ts-json-validator-13.x.svg)
![Bar Graph - Node 13.x](./results/data-type-sans-ts-json-validator-and-quartet-13.x.svg)
2 changes: 2 additions & 0 deletions cases/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { JsonDecoderCase } from './json-decoder';
import { MarshalCase } from './marshal';
import { MyzodCase } from './myzod';
import { PurifyCase } from './purify-ts';
import { QuartetCase } from './quartet';
import { RuntypesCase } from './runtypes';
import { ToiCase } from './toi';
import { TsJsonValidatorCase } from './ts-json-validator';
Expand All @@ -23,6 +24,7 @@ export const cases = [
MarshalCase,
MyzodCase,
PurifyCase,
QuartetCase,
RuntypesCase,
ToiCase,
TsJsonValidatorCase,
Expand Down
31 changes: 31 additions & 0 deletions cases/quartet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { v } from 'quartet';
import { Case } from './abstract';
import { Data } from '../data';

const checkData = v<Data>({
number: v.safeInteger,
negNumber: v.number,
maxNumber: v.number,
string: v.string,
longString: v.string,
boolean: v.boolean,
deeplyNested: {
foo: v.string,
num: v.number,
bool: v.boolean,
},
});

export class QuartetCase extends Case implements Case {
name = 'quartet';

validate() {
const { data } = this;

if (checkData(data)) {
return data;
}

throw new Error('Invalid');
}
}
17 changes: 11 additions & 6 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { DATA } from './data';
import { cases } from './cases';
import { Case } from './cases/abstract';
import { TsJsonValidatorCase } from './cases/ts-json-validator';
import { QuartetCase } from './cases/quartet';

const caseInstances: Case[] = cases.map(caseClass => new caseClass(DATA));

Expand All @@ -16,7 +17,7 @@ const NODE_VERSION = process.env.NODE_VERSION || process.version;

async function main() {
await suiteDataTypeValidation();
await suiteDataTypeValidationSansTsJsonValidator();
await suiteDataTypeValidationSansTsJsonValidatorAndQuartet();
}
main();

Expand All @@ -30,17 +31,21 @@ async function suiteDataTypeValidation() {
}

/**
* Benchmarking suite that performs data type validation only, but skips ts-json-validator
* because it is such an outlier and it is difficult to look at the performance of other packages.
* Benchmarking suite that performs data type validation only, but skips ts-json-validator and quartet
* because they are such an outlier and it is difficult to look at the performance of other packages.
*
* https://en.wikipedia.org/wiki/Data_validation#Data-type_check
*/
async function suiteDataTypeValidationSansTsJsonValidator() {
async function suiteDataTypeValidationSansTsJsonValidatorAndQuartet() {
const cases = caseInstances.filter(
caseInstance => !(caseInstance instanceof TsJsonValidatorCase)
caseInstance =>
!(
caseInstance instanceof TsJsonValidatorCase ||
caseInstance instanceof QuartetCase
)
);

await run('data-type-sans-ts-json-validator', cases, 'validate');
await run('data-type-sans-ts-json-validator-and-quartet', cases, 'validate');
}

async function run(name: string, cases: Case[], methodName: keyof Case) {
Expand Down
14 changes: 0 additions & 14 deletions results/data-type-12.x.csv

This file was deleted.

93 changes: 0 additions & 93 deletions results/data-type-12.x.json

This file was deleted.

13 changes: 0 additions & 13 deletions results/data-type-sans-ts-json-validator-12.x.csv

This file was deleted.

87 changes: 0 additions & 87 deletions results/data-type-sans-ts-json-validator-12.x.json

This file was deleted.

13 changes: 13 additions & 0 deletions results/data-type-sans-ts-json-validator-and-quartet-12.x.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name,ops
class-transformer-validator-async,30387
class-transformer-validator-sync,37256
funval,716488
io-ts,2456649
json-decoder,673800
marshal,3361295
myzod,505149
purify-ts,707137
runtypes,698838
toi,383729
ts-utils,91293
zod,47967
Loading