diff --git a/README.md b/README.md index c75b0105c..789892600 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ * [deepkit](https://deepkit.io/) * [@effect/schema](https://github.com/Effect-TS/effect/blob/main/packages/schema/README.md) * [io-ts](https://github.com/gcanti/io-ts) -* [jet-schema](https://github.com/seanpmaxwell/jet-schema) +* [jet-validators](https://github.com/seanpmaxwell/jet-validators) * [joi] (https://github.com/hapijs/joi) * [jointz](https://github.com/moodysalem/jointz) * [json-decoder](https://github.com/venil7/json-decoder) diff --git a/bun.lock b/bun.lock index d64857795..105bd0e6c 100644 --- a/bun.lock +++ b/bun.lock @@ -36,7 +36,7 @@ "decoders": "1.25.5", "fp-ts": "2.16.9", "io-ts": "2.2.22", - "jet-schema": "1.4.3", + "jet-validators": "1.4.3", "joi": "17.13.3", "jointz": "7.0.4", "json-decoder": "1.4.1", @@ -1039,7 +1039,7 @@ "jackspeak": ["jackspeak@4.1.0", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw=="], - "jet-schema": ["jet-schema@1.4.3", "", {}, "sha512-BDA5Z8Kkk1SppmV9KOuTwY3OExHGt37tTZumsoKwNfp+0XXsEXPfk9oZfVqM7na0EUsMB/zcvsjQBU7Qu6YQ0A=="], + "jet-validators": ["jet-validators@1.4.3", "", {}, "sha512-BDA5Z8Kkk1SppmV9KOuTwY3OExHGt37tTZumsoKwNfp+0XXsEXPfk9oZfVqM7na0EUsMB/zcvsjQBU7Qu6YQ0A=="], "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="], diff --git a/cases/index.ts b/cases/index.ts index 40d8635e9..3e589ec7d 100644 --- a/cases/index.ts +++ b/cases/index.ts @@ -56,7 +56,7 @@ export const cases = [ 'effect-schema', 'ts-auto-guard', 'type-predicate-generator', - 'jet-schema', + 'jet-validators', ] as const; export type CaseName = (typeof cases)[number]; diff --git a/cases/jet-schema.ts b/cases/jet-schema.ts deleted file mode 100644 index 272e55ff0..000000000 --- a/cases/jet-schema.ts +++ /dev/null @@ -1,110 +0,0 @@ -import jetSchema from 'jet-schema'; -import { createCase } from '../benchmarks'; - -// **** Init Schema **** // - -const schema = jetSchema({ - globals: [ - { vf: isNum, default: 0 }, - { vf: isStr, default: '' }, - { vf: isBool, default: false }, - ], -}); - -const Schema = schema({ - number: isNum, - negNumber: isNum, - maxNumber: isNum, - string: isStr, - longString: isStr, - boolean: isBool, - deeplyNested: schema({ - foo: isStr, - num: isNum, - bool: isBool, - }), -}); - -const LooseSchema = schema( - { - number: isNum, - negNumber: isNum, - maxNumber: isNum, - string: isStr, - longString: isStr, - boolean: isBool, - deeplyNested: schema( - { - foo: isStr, - num: isNum, - bool: isBool, - }, - { safety: 'pass' }, - ), - }, - { safety: 'pass' }, -); - -const StrictSchema = schema( - { - number: isNum, - negNumber: isNum, - maxNumber: isNum, - string: isStr, - longString: isStr, - boolean: isBool, - deeplyNested: schema( - { - foo: isStr, - num: isNum, - bool: isBool, - }, - { safety: 'strict' }, - ), - }, - { safety: 'strict' }, -); - -function isNum(arg: unknown): arg is number { - return typeof arg === 'number'; -} - -function isStr(arg: unknown): arg is string { - return typeof arg === 'string'; -} - -function isBool(arg: unknown): arg is boolean { - return typeof arg === 'boolean'; -} - -// **** Run Tests **** // - -// Parse "safe" -createCase('jet-schema', 'parseSafe', () => { - return data => { - return Schema.parse(data); - }; -}); - -// Parse "strict" -createCase('jet-schema', 'parseStrict', () => { - return data => { - return StrictSchema.parse(data); - }; -}); - -// Test "loose" -createCase('jet-schema', 'assertLoose', () => { - return data => { - LooseSchema.test(data); - return true; - }; -}); - -// Test "loose" -createCase('jet-schema', 'assertStrict', () => { - return data => { - StrictSchema.test(data); - return true; - }; -}); diff --git a/cases/jet-validators.ts b/cases/jet-validators.ts new file mode 100644 index 000000000..90575f83e --- /dev/null +++ b/cases/jet-validators.ts @@ -0,0 +1,99 @@ +import { isString, isNumber, isBoolean } from 'jet-validators'; + +import { + parseObject, + testObject, + looseTestObject, + strictParseObject, + strictTestObject, +} from 'jet-validators/utils'; + +import { createCase } from '../benchmarks'; + +// **** Init Schema **** // + +const safeParse = parseObject({ + number: isNumber, + negNumber: isNumber, + maxNumber: isNumber, + string: isString, + longString: isString, + boolean: isBoolean, + deeplyNested: testObject({ + foo: isString, + num: isNumber, + bool: isBoolean, + }), +}); + +const looseTest = looseTestObject({ + number: isNumber, + negNumber: isNumber, + maxNumber: isNumber, + string: isString, + longString: isString, + boolean: isBoolean, + deeplyNested: looseTestObject({ + foo: isString, + num: isNumber, + bool: isBoolean, + }), +}); + +const strictParse = strictParseObject({ + number: isNumber, + negNumber: isNumber, + maxNumber: isNumber, + string: isString, + longString: isString, + boolean: isBoolean, + deeplyNested: strictTestObject({ + foo: isString, + num: isNumber, + bool: isBoolean, + }), +}); + +const strictTest = strictTestObject({ + number: isNumber, + negNumber: isNumber, + maxNumber: isNumber, + string: isString, + longString: isString, + boolean: isBoolean, + deeplyNested: strictTestObject({ + foo: isString, + num: isNumber, + bool: isBoolean, + }), +}); + +const checkFailed = (arg: unknown) => { + if (arg === false) { + throw new Error('Validation failed'); + } else { + return arg; + } +}; + +// **** Run Tests **** // + +// Parse "safe" +createCase('jet-validators', 'parseSafe', () => { + return data => checkFailed(safeParse(data)); +}); + +// Parse "strict" +createCase('jet-validators', 'parseStrict', () => { + return data => checkFailed(strictParse(data)); +}); + +// Test "loose" +createCase('jet-validators', 'assertLoose', () => { + return data => checkFailed(looseTest(data)); +}); + +// Test "strict" +createCase('jet-validators', 'assertStrict', () => { + return data => checkFailed(strictTest(data)); +}); diff --git a/package-lock.json b/package-lock.json index f960d824a..c5e4f4ca0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "fp-ts": "2.16.9", "io-ts": "2.2.22", "jet-schema": "1.4.3", + "jet-validators": "1.3.7", "joi": "17.13.3", "jointz": "7.0.4", "json-decoder": "1.4.1", @@ -6843,6 +6844,11 @@ "resolved": "https://registry.npmjs.org/jet-schema/-/jet-schema-1.4.3.tgz", "integrity": "sha512-BDA5Z8Kkk1SppmV9KOuTwY3OExHGt37tTZumsoKwNfp+0XXsEXPfk9oZfVqM7na0EUsMB/zcvsjQBU7Qu6YQ0A==" }, + "node_modules/jet-validators": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/jet-validators/-/jet-validators-1.3.7.tgz", + "integrity": "sha512-b6rVpSbANrH+PFTRZ95D8zpTwRn27pooxniCBpo+uEM6PGd02idyRriKSlBbyot8+ncUlJ3N8ZKOziFOySfxaw==" + }, "node_modules/joi": { "version": "17.13.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", @@ -15667,6 +15673,11 @@ "resolved": "https://registry.npmjs.org/jet-schema/-/jet-schema-1.4.3.tgz", "integrity": "sha512-BDA5Z8Kkk1SppmV9KOuTwY3OExHGt37tTZumsoKwNfp+0XXsEXPfk9oZfVqM7na0EUsMB/zcvsjQBU7Qu6YQ0A==" }, + "jet-validators": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/jet-validators/-/jet-validators-1.3.7.tgz", + "integrity": "sha512-b6rVpSbANrH+PFTRZ95D8zpTwRn27pooxniCBpo+uEM6PGd02idyRriKSlBbyot8+ncUlJ3N8ZKOziFOySfxaw==" + }, "joi": { "version": "17.13.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", diff --git a/package.json b/package.json index 52534dbae..d84a271eb 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "fp-ts": "2.16.9", "io-ts": "2.2.22", "jet-schema": "1.4.3", + "jet-validators": "1.3.7", "joi": "17.13.3", "jointz": "7.0.4", "json-decoder": "1.4.1", diff --git a/test/benchmarks.test.ts b/test/benchmarks.test.ts index bcff5a319..ff1cb956f 100644 --- a/test/benchmarks.test.ts +++ b/test/benchmarks.test.ts @@ -61,7 +61,7 @@ import '../cases/effect-schema'; import '../cases/ts-auto-guard'; import '../cases/type-predicate-generator'; import '../cases/tiny-schema-validator'; -import '../cases/jet-schema'; +import '../cases/jet-validators'; test('all cases must have been imported in tests', () => { expect(