0.1.3 #4

Merged
Thilawyn merged 74 commits from next into master 2024-03-24 22:24:25 +01:00
4 changed files with 19 additions and 6 deletions
Showing only changes of commit 4ac60d3b18 - Show all commits

View File

@@ -4,3 +4,5 @@ import { option } from "./option"
export const effect = { export const effect = {
option, option,
} as const } as const
export { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome } from "./option"

View File

@@ -19,3 +19,7 @@ export const option = {
: unknown : unknown
>>(v => Option.isOption(v) && Option.isNone(v), "Not an Option"), >>(v => Option.isOption(v) && Option.isNone(v), "Not an Option"),
} as const } 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>>

View File

@@ -1,19 +1,21 @@
import { Option } from "effect" import { Option } from "effect"
import { identity } from "lodash-es"
import { Jsonifiable, Opaque } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { effect } from "../effect" import { effect } from "../effect"
import { Opaque } from "type-fest" import { ZodEffectOption } from "../effect/option"
import { identity } from "lodash-es"
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 = { export const jsonifyOption = {
option: < option: <
S extends ReturnType<typeof effect.option.option<T>>, S extends ZodEffectOption<T>,
T extends z.ZodTypeAny, 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)), (schema as S).transform(v => Option.getOrNull(v)),

View File

@@ -4,8 +4,9 @@ import { z } from "zod"
import { JsonifiedZodSchemaClass } from "./JsonifiedZodSchemaClass" import { JsonifiedZodSchemaClass } from "./JsonifiedZodSchemaClass"
import { ZodSchemaClass } from "./ZodSchemaClass" import { ZodSchemaClass } from "./ZodSchemaClass"
import { dejsonify, jsonify } from "./schema/jsonified" import { dejsonify, jsonify } from "./schema/jsonified"
import { effect } from "./schema/lib" import { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome, effect } from "./schema/lib"
import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject"
import { satisfies } from "effect/Function"
const userExp = ZodSchemaClass( const userExp = ZodSchemaClass(
@@ -30,6 +31,10 @@ const userInst = User.create({ id: Option.some(1n), name: "User" })
const userInstEffect = User.createEffect({ id: Option.some(1n), name: "User" }) const userInstEffect = User.createEffect({ id: Option.some(1n), name: "User" })
const t = z.literal("prout")
const optionT = effect.option.option(t)
const someT = optionT._def.options[0] satisfies ZodEffectOptionSome<typeof t>
const jsonifiedOption = jsonify.option.some( const jsonifiedOption = jsonify.option.some(
effect.option.some(z.literal("prout")) effect.option.some(z.literal("prout"))
) )