0.1.3 #4
@@ -22,8 +22,18 @@ export const option = {
|
||||
|
||||
|
||||
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>>
|
||||
|
||||
export const effectOptionSomeInnerType = <S extends z.ZodTypeAny>(schema: ZodEffectOptionSome<S>): S =>
|
||||
export const effectOptionSomeSchema = <S extends z.ZodTypeAny>(schema: ZodEffectOption<S>): ZodEffectOptionSome<S> =>
|
||||
schema.options[0]
|
||||
|
||||
export const effectOptionNoneSchema = <S extends z.ZodTypeAny>(schema: ZodEffectOption<S>): ZodEffectOptionNone<S> =>
|
||||
schema.options[1]
|
||||
|
||||
|
||||
export type ZodEffectOptionSome<S extends z.ZodTypeAny> = ReturnType<typeof option.some<S>>
|
||||
|
||||
export const effectOptionSomeInnerSchema = <S extends z.ZodTypeAny>(schema: ZodEffectOptionSome<S>): S =>
|
||||
schema._def.schema._def.out.shape.value
|
||||
|
||||
|
||||
export type ZodEffectOptionNone<S extends z.ZodTypeAny> = ReturnType<typeof option.none<S>>
|
||||
|
||||
@@ -3,7 +3,7 @@ import { identity } from "lodash-es"
|
||||
import { Jsonifiable, Opaque } from "type-fest"
|
||||
import { z } from "zod"
|
||||
import { effect } from "../effect"
|
||||
import { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome, effectOptionSomeInnerType } from "../effect/option"
|
||||
import { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome, effectOptionNoneSchema, effectOptionSomeInnerSchema, effectOptionSomeSchema } from "../effect/option"
|
||||
|
||||
|
||||
export type JsonifiedEffectOption<T extends Jsonifiable> = Opaque<T | null, "@thilawyn/zod-schema-class/JsonifiedEffectOption">
|
||||
@@ -17,8 +17,8 @@ export const jsonifyOption = {
|
||||
schema: ZodEffectOption<InnerS>,
|
||||
jsonifySchema: (schema: InnerS) => JsonifiedInnerS = identity,
|
||||
) => z.union([
|
||||
jsonifyOption.some(schema._def.options[0], jsonifySchema),
|
||||
jsonifyOption.none(schema._def.options[1], jsonifySchema),
|
||||
jsonifyOption.some(effectOptionSomeSchema(schema), jsonifySchema),
|
||||
jsonifyOption.none(effectOptionNoneSchema(schema), jsonifySchema),
|
||||
]),
|
||||
|
||||
some: <
|
||||
@@ -29,7 +29,7 @@ export const jsonifyOption = {
|
||||
jsonifySchema: (schema: InnerS) => JsonifiedInnerS = identity,
|
||||
) => schema
|
||||
.transform(v => Option.getOrThrow(v))
|
||||
.pipe(jsonifySchema(effectOptionSomeInnerType(schema))),
|
||||
.pipe(jsonifySchema(effectOptionSomeInnerSchema(schema))),
|
||||
|
||||
none: <
|
||||
InnerS extends z.ZodTypeAny,
|
||||
|
||||
Reference in New Issue
Block a user