From 1fd74bb8510af85bca316aeaa4b0546722a2c47b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 18 Mar 2024 18:00:52 +0100 Subject: [PATCH] jsonifiable -> jsonified --- .../{jsonifiable => jsonified}/bigint.ts | 0 src/schema/{jsonifiable => jsonified}/date.ts | 0 .../{jsonifiable => jsonified}/decimal.ts | 0 .../{jsonifiable => jsonified}/index.ts | 0 src/schema/jsonified/option.ts | 21 +++++++++++++++++++ src/schema/lib.ts | 2 +- src/tests.ts | 2 +- 7 files changed, 23 insertions(+), 2 deletions(-) rename src/schema/{jsonifiable => jsonified}/bigint.ts (100%) rename src/schema/{jsonifiable => jsonified}/date.ts (100%) rename src/schema/{jsonifiable => jsonified}/decimal.ts (100%) rename src/schema/{jsonifiable => jsonified}/index.ts (100%) create mode 100644 src/schema/jsonified/option.ts diff --git a/src/schema/jsonifiable/bigint.ts b/src/schema/jsonified/bigint.ts similarity index 100% rename from src/schema/jsonifiable/bigint.ts rename to src/schema/jsonified/bigint.ts diff --git a/src/schema/jsonifiable/date.ts b/src/schema/jsonified/date.ts similarity index 100% rename from src/schema/jsonifiable/date.ts rename to src/schema/jsonified/date.ts diff --git a/src/schema/jsonifiable/decimal.ts b/src/schema/jsonified/decimal.ts similarity index 100% rename from src/schema/jsonifiable/decimal.ts rename to src/schema/jsonified/decimal.ts diff --git a/src/schema/jsonifiable/index.ts b/src/schema/jsonified/index.ts similarity index 100% rename from src/schema/jsonifiable/index.ts rename to src/schema/jsonified/index.ts diff --git a/src/schema/jsonified/option.ts b/src/schema/jsonified/option.ts new file mode 100644 index 0000000..6bc1598 --- /dev/null +++ b/src/schema/jsonified/option.ts @@ -0,0 +1,21 @@ +import { Option } from "effect" +import { identity } from "lodash-es" +import { z } from "zod" + + +export const jsonifyOption = { + 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), + + none: (_schema?: S) => + z.custom + : unknown + >>(v => Option.isOption(v) && Option.isNone(v), "Not an Option"), +} as const diff --git a/src/schema/lib.ts b/src/schema/lib.ts index 9339106..b7c00ae 100644 --- a/src/schema/lib.ts +++ b/src/schema/lib.ts @@ -1,2 +1,2 @@ export * from "./effect" -export * from "./jsonifiable" +export * from "./jsonified" diff --git a/src/tests.ts b/src/tests.ts index d63a63c..edbf0c7 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -3,7 +3,7 @@ import { Option } from "effect" import { z } from "zod" import { JsonifiedZodSchemaClass } from "./JsonifiedZodSchemaClass" import { ZodSchemaClass } from "./ZodSchemaClass" -import { dejsonify, jsonify } from "./schema/jsonifiable" +import { dejsonify, jsonify } from "./schema/jsonified" import { effect } from "./schema/lib" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject"