0.1.3 #4

Merged
Thilawyn merged 74 commits from next into master 2024-03-24 22:24:25 +01:00
Showing only changes of commit 7d278f7422 - Show all commits

View File

@@ -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]