diff --git a/README.md b/README.md index 0cc626373..4423011db 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ * [marshal](https://github.com/marcj/marshal.ts) * [@mojotech/json-type-validaton](https://github.com/mojotech/json-type-validation) * [myzod](https://github.com/davidmdm/myzod) +* [ok-computer](https://github.com/richardscarrott/ok-computer) * [purify-ts](https://github.com/gigobyte/purify) * [rulr](https://github.com/ryansmith94/rulr) * [runtypes](https://github.com/pelotom/runtypes) diff --git a/cases/index.ts b/cases/index.ts index 9536dd34a..7d75246e7 100644 --- a/cases/index.ts +++ b/cases/index.ts @@ -9,6 +9,7 @@ import './json-decoder'; import './marshal'; import './mojotech-json-type-validation'; import './myzod'; +import './ok-computer'; import './purify-ts'; import './rulr'; import './runtypes'; diff --git a/cases/ok-computer.ts b/cases/ok-computer.ts new file mode 100644 index 000000000..2b783f7c7 --- /dev/null +++ b/cases/ok-computer.ts @@ -0,0 +1,46 @@ +import { boolean, number, object, string, assert } from 'ok-computer'; +import { UnknownData, addCase } from '../benchmarks'; + +const dataType = object({ + number: number, + negNumber: number, + maxNumber: number, + string: string, + longString: string, + boolean: boolean, + deeplyNested: object({ + foo: string, + num: number, + bool: boolean, + }), +}); + +const dataTypeLoose = object( + { + number: number, + negNumber: number, + maxNumber: number, + string: string, + longString: string, + boolean: boolean, + deeplyNested: object( + { + foo: string, + num: number, + bool: boolean, + }, + { allowUnknown: true } + ), + }, + { allowUnknown: true } +); + +addCase('ok-computer', 'assertStrict', (data: UnknownData) => { + assert(dataType(data)); + return true; +}); + +addCase('ok-computer', 'assertLoose', (data: UnknownData) => { + assert(dataTypeLoose(data)); + return true; +}); diff --git a/docs/results/node-16.json b/docs/results/node-16.json index 2cd5c1bc9..bf66b2a8f 100644 --- a/docs/results/node-16.json +++ b/docs/results/node-16.json @@ -1 +1 @@ -{"results":[{"benchmark":"assertLoose","name":"ajv","ops":17150181,"margin":0.15,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"bueno","ops":274837,"margin":0.3,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"class-transformer-validator-sync","ops":44885,"margin":17.65,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"io-ts","ops":1086967,"margin":0.38,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"jointz","ops":596262,"margin":0.22,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"marshal","ops":16151263,"margin":0.69,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"runtypes","ops":97001,"margin":0.46,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"spectypes","ops":32611713,"margin":0.41,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"superstruct","ops":105528,"margin":0.96,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"suretype","ops":19625467,"margin":2.05,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"tson","ops":392634,"margin":0.4,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"ts-interface-checker","ops":1764274,"margin":0.32,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"ts-json-validator","ops":16963963,"margin":1.09,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"@typeofweb/schema","ops":675394,"margin":0.37,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"valita","ops":2673962,"margin":0.38,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"yup","ops":27002,"margin":0.37,"nodeVersion":"v16.14.2"},{"benchmark":"assertLoose","name":"zod","ops":77595,"margin":0.3,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"ajv","ops":8991858,"margin":0.65,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"bueno","ops":260699,"margin":0.26,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"computed-types","ops":523275,"margin":0.24,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"decoders","ops":116802,"margin":0.29,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"jointz","ops":569777,"margin":0.28,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"myzod","ops":1090018,"margin":0.27,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"simple-runtypes","ops":1292544,"margin":0.17,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"spectypes","ops":10603614,"margin":0.76,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"superstruct","ops":86332,"margin":0.75,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"toi","ops":448342,"margin":0.26,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"tson","ops":392628,"margin":0.31,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"valita","ops":2326739,"margin":0.16,"nodeVersion":"v16.14.2"},{"benchmark":"assertStrict","name":"zod","ops":75618,"margin":0.48,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"bueno","ops":141362,"margin":0.46,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"computed-types","ops":621692,"margin":0.21,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"decoders","ops":184459,"margin":0.4,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"json-decoder","ops":553676,"margin":10.78,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"@mojotech/json-type-validation","ops":978066,"margin":0.37,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"myzod","ops":921644,"margin":0.3,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"purify-ts","ops":564794,"margin":0.3,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"rulr","ops":471304,"margin":0.27,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"simple-runtypes","ops":993025,"margin":8.01,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"spectypes","ops":12755755,"margin":1.2,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"tson","ops":345142,"margin":0.47,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"ts-utils","ops":176008,"margin":0.19,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"valita","ops":2265565,"margin":4.04,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"yup","ops":20712,"margin":36.22,"nodeVersion":"v16.14.2"},{"benchmark":"parseSafe","name":"zod","ops":76224,"margin":0.41,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"bueno","ops":142133,"margin":0.34,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"computed-types","ops":513406,"margin":0.43,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"decoders","ops":115846,"margin":0.72,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"jointz","ops":1084025,"margin":0.22,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"myzod","ops":1148888,"margin":0.45,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"simple-runtypes","ops":1263306,"margin":5.14,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"spectypes","ops":12335849,"margin":0.3,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"superstruct","ops":91441,"margin":0.3,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"toi","ops":477104,"margin":0.32,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"tson","ops":398794,"margin":0.26,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"@typeofweb/schema","ops":704251,"margin":0.35,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"valita","ops":2334119,"margin":0.3,"nodeVersion":"v16.14.2"},{"benchmark":"parseStrict","name":"zod","ops":72216,"margin":11.38,"nodeVersion":"v16.14.2"}]} \ No newline at end of file +{"results":[{"benchmark":"assertLoose","name":"ajv","ops":54172586,"margin":1.17,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"bueno","ops":735746,"margin":1.74,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"class-transformer-validator-sync","ops":137918,"margin":0.22,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"io-ts","ops":3128480,"margin":0.21,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"jointz","ops":1570041,"margin":0.24,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"marshal","ops":45222491,"margin":0.18,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"ok-computer","ops":13728,"margin":0.41,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"runtypes","ops":251167,"margin":1.52,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"spectypes","ops":84194182,"margin":1.55,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"superstruct","ops":249001,"margin":0.21,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"suretype","ops":55414661,"margin":1.2,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"tson","ops":1051321,"margin":1.09,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"ts-interface-checker","ops":4655662,"margin":1.25,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"ts-json-validator","ops":55568578,"margin":1.16,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"@typeofweb/schema","ops":1978225,"margin":1.01,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"valita","ops":7215936,"margin":0.32,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"yup","ops":71119,"margin":0.3,"nodeVersion":"v16.13.0"},{"benchmark":"assertLoose","name":"zod","ops":197877,"margin":0.32,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"ajv","ops":20512318,"margin":1.06,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"bueno","ops":620194,"margin":1.71,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"computed-types","ops":1276381,"margin":1.16,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"decoders","ops":289037,"margin":0.53,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"jointz","ops":1487201,"margin":0.48,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"myzod","ops":3167942,"margin":0.29,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"ok-computer","ops":13434,"margin":2.88,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"simple-runtypes","ops":3287081,"margin":0.6,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"spectypes","ops":24549012,"margin":0.75,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"superstruct","ops":192391,"margin":2.97,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"toi","ops":1217176,"margin":0.34,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"tson","ops":1020658,"margin":0.55,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"valita","ops":5963090,"margin":0.3,"nodeVersion":"v16.13.0"},{"benchmark":"assertStrict","name":"zod","ops":195434,"margin":0.32,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"bueno","ops":379878,"margin":0.31,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"computed-types","ops":1564675,"margin":0.41,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"decoders","ops":448487,"margin":2.32,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"json-decoder","ops":1561126,"margin":1.42,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"@mojotech/json-type-validation","ops":2718765,"margin":3.17,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"myzod","ops":2454308,"margin":0.53,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"purify-ts","ops":1530739,"margin":3.74,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"rulr","ops":1296095,"margin":2.05,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"simple-runtypes","ops":2860201,"margin":2.61,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"spectypes","ops":30428822,"margin":0.69,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"tson","ops":852959,"margin":0.2,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"ts-utils","ops":420946,"margin":1.01,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"valita","ops":5838957,"margin":1.49,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"yup","ops":63798,"margin":0.73,"nodeVersion":"v16.13.0"},{"benchmark":"parseSafe","name":"zod","ops":187215,"margin":1.29,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"bueno","ops":371467,"margin":0.26,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"computed-types","ops":1237875,"margin":1.67,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"decoders","ops":277524,"margin":1.25,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"jointz","ops":3104278,"margin":0.24,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"myzod","ops":3105564,"margin":0.27,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"simple-runtypes","ops":3270804,"margin":0.26,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"spectypes","ops":24157539,"margin":2.67,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"superstruct","ops":174137,"margin":4.45,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"toi","ops":1155719,"margin":0.43,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"tson","ops":989236,"margin":0.44,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"@typeofweb/schema","ops":1893751,"margin":0.31,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"valita","ops":5962057,"margin":0.33,"nodeVersion":"v16.13.0"},{"benchmark":"parseStrict","name":"zod","ops":178106,"margin":8.88,"nodeVersion":"v16.13.0"}]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 673025acd..72b7574de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "jointz": "6.1.1", "json-decoder": "1.4.0", "myzod": "1.8.6", + "ok-computer": "1.0.0", "preact": "10.6.5", "purify-ts": "1.1.0", "reflect-metadata": "0.1.13", @@ -7885,6 +7886,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ok-computer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ok-computer/-/ok-computer-1.0.0.tgz", + "integrity": "sha512-shFgXYoe4wuL1CrQ5Z8mM92xiIkcuEEQNzfOanwhM1Q1UT//p+WsboA8RA1LePrA58qO+S+bStkAMPlMMwziUw==" + }, "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -16875,6 +16881,11 @@ "object-keys": "^1.1.1" } }, + "ok-computer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ok-computer/-/ok-computer-1.0.0.tgz", + "integrity": "sha512-shFgXYoe4wuL1CrQ5Z8mM92xiIkcuEEQNzfOanwhM1Q1UT//p+WsboA8RA1LePrA58qO+S+bStkAMPlMMwziUw==" + }, "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", diff --git a/package.json b/package.json index 3643657a0..31eb9636f 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "jointz": "6.1.1", "json-decoder": "1.4.0", "myzod": "1.8.6", + "ok-computer": "1.0.0", "preact": "10.6.5", "purify-ts": "1.1.0", "reflect-metadata": "0.1.13",