From 24870485140047a592a0cab5d27f6f2efc01ac27 Mon Sep 17 00:00:00 2001 From: Ido Bouskila Date: Sun, 18 Aug 2024 18:23:55 +0300 Subject: [PATCH] refactor: simplify parser mechanism --- src/schema/numberSchema.ts | 11 ++++++----- src/schema/stringSchema.ts | 8 ++++---- src/schema/utils/initializeParsers.ts | 19 +++++++++++-------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/schema/numberSchema.ts b/src/schema/numberSchema.ts index 48f05ef..f01b46d 100644 --- a/src/schema/numberSchema.ts +++ b/src/schema/numberSchema.ts @@ -2,23 +2,24 @@ import initializeParsers from './utils/initializeParsers'; import { ensureNumber, ensureNumberSize } from '../utils/validations'; function numberSchema() { - const { parse, registerParser } = initializeParsers(ensureNumber); + const { parse, safeParse, registerParser } = initializeParsers(ensureNumber); return { parse, + safeParse, min: function (requiredSize: number) { - registerParser((value: unknown) => ensureNumberSize({ + registerParser((value) => ensureNumberSize({ requiredSize, - value: value as number, + value: value, validationType: 'min', })); return this; }, max: function (requiredSize: number) { - registerParser((value: unknown) => ensureNumberSize({ + registerParser((value) => ensureNumberSize({ requiredSize, - value: value as number, + value: value, validationType: 'max', })); diff --git a/src/schema/stringSchema.ts b/src/schema/stringSchema.ts index acf7f0f..57a19cf 100644 --- a/src/schema/stringSchema.ts +++ b/src/schema/stringSchema.ts @@ -7,18 +7,18 @@ function stringSchema() { return { parse, min: function (requiredLength: number) { - registerParser((value: unknown) => ensureStringLength({ + registerParser((value) => ensureStringLength({ + value: value, requiredLength, - value: value as string, validationType: 'min', })); return this; }, max: function (requiredLength: number) { - registerParser((value: unknown) => ensureStringLength({ + registerParser((value) => ensureStringLength({ + value: value, requiredLength, - value: value as string, validationType: 'max', })); diff --git a/src/schema/utils/initializeParsers.ts b/src/schema/utils/initializeParsers.ts index 941bfc6..9306c5e 100644 --- a/src/schema/utils/initializeParsers.ts +++ b/src/schema/utils/initializeParsers.ts @@ -1,18 +1,21 @@ -const initializeParsers = (initialParser: (value: unknown) => T) => { - const parserFunctions = new Set<(value: unknown) => T>([initialParser]); +type RestParsers = (value: T) => T; +type FirstParser = (value: unknown) => T; + +const initializeParsers = (initialParser: FirstParser) => { + const parserFunctions = new Set>([]); const parse = (value: unknown) => { - let validatedValue: T = value as T; + let validatedValue = initialParser(value); - for (const parser of parserFunctions) { - validatedValue = parser(value); - } + for(const parser of parserFunctions) { + validatedValue = parser(validatedValue); + }; return validatedValue; }; - const registerParser = (parser: (value: unknown) => T) => parserFunctions.add(parser); - + const registerParser = (parser: RestParsers) => parserFunctions.add(parser); + return { parse, registerParser,