Option schema wor
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-03-20 14:43:47 +01:00
parent 53dfd254f7
commit 389bc696aa
2 changed files with 17 additions and 7 deletions

View File

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

View File

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