0.1.3 #4

Merged
Thilawyn merged 74 commits from next into master 2024-03-24 22:24:25 +01:00
2 changed files with 17 additions and 7 deletions
Showing only changes of commit 389bc696aa - Show all commits

View File

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