From 27a8fc1c9bddf212d7425b9d07ea3117d244fae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 18 Mar 2024 18:32:27 +0100 Subject: [PATCH] jsonifyOption work --- src/schema/jsonified/index.ts | 2 ++ src/schema/jsonified/option.ts | 17 ++++++++++------- src/tests.ts | 4 ++++ 3 files changed, 16 insertions(+), 7 deletions(-) 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)