import { ZodSchema } from 'zod' export function preserveUndefined (cast: (value:Source)=>Target) { return (value:Source|undefined):Target|undefined => { if (value === undefined) { return undefined } return cast(value) } } export function preserveNull (cast: (value:Source)=>Target) { return (value:Source|null):Target|null => { if (value === null) { return null } return cast(value) } } export function stringToInt (value: string): number { return parseInt(value) } export function stringToBool (value:string):boolean { switch (value) { case 'true': case '1': case 'on': case 'yes': return true default: return false } } export function transform (originalSchema:ZodSchema, cast:(value:unknown)=>Target, newSchema:ZodSchema) { return originalSchema.refine( value => { try { value = cast(value) newSchema.parse(value) } catch (err) { return false } return true } ).transform(cast) }