kopia lustrzana https://github.com/Stopka/fedisearch
50 wiersze
1.1 KiB
TypeScript
50 wiersze
1.1 KiB
TypeScript
import { ZodSchema } from 'zod'
|
|
|
|
export function preserveUndefined<Source, Target> (cast: (value:Source)=>Target) {
|
|
return (value:Source|undefined):Target|undefined => {
|
|
if (value === undefined) {
|
|
return undefined
|
|
}
|
|
return cast(value)
|
|
}
|
|
}
|
|
|
|
export function preserveNull<Source, Target> (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<Target> (originalSchema:ZodSchema<any>, cast:(value:unknown)=>Target, newSchema:ZodSchema<any>) {
|
|
return originalSchema.refine(
|
|
value => {
|
|
try {
|
|
value = cast(value)
|
|
newSchema.parse(value)
|
|
} catch (err) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
).transform(cast)
|
|
}
|