diff --git a/src/schema/jsonified/index.ts b/src/schema/jsonified/index.ts index 6bff7ae..983b523 100644 --- a/src/schema/jsonified/index.ts +++ b/src/schema/jsonified/index.ts @@ -1,12 +1,14 @@ import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint" import { dejsonifyDateSchema, jsonifyDateSchema } from "./date" import { dejsonifyDecimalSchema, jsonifyDecimalSchema } from "./decimal" +import { jsonifyOption } from "./option" export const jsonify = { bigint: jsonifyBigIntSchema, date: jsonifyDateSchema, decimal: jsonifyDecimalSchema, + option: jsonifyOption, } as const export const dejsonify = { diff --git a/src/schema/jsonified/option.ts b/src/schema/jsonified/option.ts index 6bc1598..11c5500 100644 --- a/src/schema/jsonified/option.ts +++ b/src/schema/jsonified/option.ts @@ -1,16 +1,19 @@ import { Option } from "effect" -import { identity } from "lodash-es" import { z } from "zod" +import { effect } from "../effect" export const jsonifyOption = { - option: (schema: S) => - z.union([option.some(schema), option.none(schema)]), + // option: (schema: S) => + // z.union([option.some(schema), option.none(schema)]), - some: (schema: S) => z - .custom>>(v => Option.isOption(v) && Option.isSome(v), "Not an Option") - .pipe(z.object({ value: schema }).passthrough()) - .transform>>(identity), + some: < + S extends ReturnType>, + T extends z.ZodSchema, + >( + schema: S | ReturnType> + ) => + (schema as S).transform(v => Option.getOrThrow(v)), none: (_schema?: S) => z.custom s.extend({ id: jsonify.bigint(s.shape.id)