This commit is contained in:
@@ -3,25 +3,23 @@ import { identity } from "lodash-es"
|
|||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
|
|
||||||
|
|
||||||
export const option = {
|
export const option = <S extends z.ZodTypeAny>(schema: S) =>
|
||||||
option: <S extends z.ZodTypeAny>(schema: S) =>
|
z.union([option.some(schema), option.none(schema)])
|
||||||
z.union([option.some(schema), option.none(schema)]),
|
|
||||||
|
|
||||||
some: <S extends z.ZodTypeAny>(schema: S) => z
|
option.some = <S extends z.ZodTypeAny>(schema: S) => z
|
||||||
.custom<Option.Some<z.output<S>>>(v => Option.isOption(v) && Option.isSome(v), "Not an Option")
|
.custom<Option.Some<z.output<S>>>(v => Option.isOption(v) && Option.isSome(v), "Not an Option")
|
||||||
.pipe(z.object({ value: schema }).passthrough())
|
.pipe(z.object({ value: schema }).passthrough())
|
||||||
.transform<Option.Some<z.output<S>>>(identity),
|
.transform<Option.Some<z.output<S>>>(identity)
|
||||||
|
|
||||||
none: <S extends z.ZodTypeAny | unknown = unknown>(_schema?: S) =>
|
option.none = <S extends z.ZodTypeAny | unknown = unknown>(_schema?: S) =>
|
||||||
z.custom<Option.None<
|
z.custom<Option.None<
|
||||||
S extends z.ZodTypeAny
|
S extends z.ZodTypeAny
|
||||||
? z.output<S>
|
? z.output<S>
|
||||||
: unknown
|
: unknown
|
||||||
>>(v => Option.isOption(v) && Option.isNone(v), "Not an Option"),
|
>>(v => Option.isOption(v) && Option.isNone(v), "Not an Option")
|
||||||
} as const
|
|
||||||
|
|
||||||
|
|
||||||
export type ZodEffectOption<S extends z.ZodTypeAny> = ReturnType<typeof option.option<S>>
|
export type ZodEffectOption<S extends z.ZodTypeAny> = ReturnType<typeof option<S>>
|
||||||
|
|
||||||
export const effectOptionSomeSchema = <S extends z.ZodTypeAny>(schema: ZodEffectOption<S>): ZodEffectOptionSome<S> =>
|
export const effectOptionSomeSchema = <S extends z.ZodTypeAny>(schema: ZodEffectOption<S>): ZodEffectOptionSome<S> =>
|
||||||
schema.options[0]
|
schema.options[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user