Add toSchema function, to convert any legacy normalizer into a zod schema

This commit is contained in:
Alex Gleason 2023-04-10 12:02:50 -05:00
parent 2315dbdae5
commit 901ff57e13
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7

View file

@ -1,3 +1,5 @@
import z from 'zod';
/** Use new value only if old value is undefined */
export const mergeDefined = (oldVal: any, newVal: any) => oldVal === undefined ? newVal : oldVal;
@ -10,3 +12,18 @@ export const makeEmojiMap = (emojis: any) => emojis.reduce((obj: any, emoji: any
export const normalizeId = (id: any): string | null => {
return typeof id === 'string' ? id : null;
};
export type Normalizer<V, R> = (value: V) => R;
/**
* Allows using any legacy normalizer function as a zod schema.
*
* @example
* ```ts
* const statusSchema = toSchema(normalizeStatus);
* statusSchema.parse(status);
* ```
*/
export const toSchema = <V, R>(normalizer: Normalizer<V, R>) => {
return z.custom<V>().transform<R>(normalizer);
};