This commit is contained in:
@@ -4,3 +4,5 @@ import { option } from "./option"
|
||||
export const effect = {
|
||||
option,
|
||||
} as const
|
||||
|
||||
export { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome } from "./option"
|
||||
|
||||
@@ -19,3 +19,7 @@ export const option = {
|
||||
: unknown
|
||||
>>(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 ZodEffectOptionSome<S extends z.ZodTypeAny> = ReturnType<typeof option.some<S>>
|
||||
export type ZodEffectOptionNone<S extends z.ZodTypeAny> = ReturnType<typeof option.none<S>>
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
import { Option } from "effect"
|
||||
import { identity } from "lodash-es"
|
||||
import { Jsonifiable, Opaque } from "type-fest"
|
||||
import { z } from "zod"
|
||||
import { effect } from "../effect"
|
||||
import { Opaque } from "type-fest"
|
||||
import { identity } from "lodash-es"
|
||||
import { ZodEffectOption } from "../effect/option"
|
||||
|
||||
|
||||
export type JsonifiedEffectOption<T> = Opaque<T | null, "@thilawyn/zod-schema-class/JsonifiedEffectOption">
|
||||
export type JsonifiedEffectOption<T extends Jsonifiable> = Opaque<T | null, "@thilawyn/zod-schema-class/JsonifiedEffectOption">
|
||||
|
||||
|
||||
export const jsonifyOption = {
|
||||
option: <
|
||||
S extends ReturnType<typeof effect.option.option<T>>,
|
||||
S extends ZodEffectOption<T>,
|
||||
T extends z.ZodTypeAny,
|
||||
Jsonify,
|
||||
>(
|
||||
schema: S | ReturnType<typeof effect.option.option<T>>
|
||||
schema: S | ZodEffectOption<T>,
|
||||
) =>
|
||||
(schema as S).transform(v => Option.getOrNull(v)),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user