From d6907c8e28885fa67baec8a886eb2de04f58b757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 21 Mar 2024 17:42:59 +0100 Subject: [PATCH] Schema work --- src/schema/effect/index.ts | 10 +++- .../option.ts => effect/jsonifiedOption.ts} | 2 +- src/schema/jsonified/index.ts | 3 -- src/tests.ts | 47 +++++-------------- 4 files changed, 22 insertions(+), 40 deletions(-) rename src/schema/{jsonified/option.ts => effect/jsonifiedOption.ts} (98%) diff --git a/src/schema/effect/index.ts b/src/schema/effect/index.ts index 65e5538..38ea322 100644 --- a/src/schema/effect/index.ts +++ b/src/schema/effect/index.ts @@ -1,8 +1,14 @@ +import { dejsonifyOption, jsonifyOption } from "./jsonifiedOption" import { option } from "./option" export const effect = { option, -} as const -export { effectOptionNoneSchema, effectOptionSomeInnerSchema, effectOptionSomeSchema, type ZodEffectOption, type ZodEffectOptionNone, type ZodEffectOptionSome } from "./option" + jsonify: { + option: jsonifyOption + } as const, + dejsonify: { + option: dejsonifyOption + } as const, +} as const diff --git a/src/schema/jsonified/option.ts b/src/schema/effect/jsonifiedOption.ts similarity index 98% rename from src/schema/jsonified/option.ts rename to src/schema/effect/jsonifiedOption.ts index c2b45a4..e693878 100644 --- a/src/schema/jsonified/option.ts +++ b/src/schema/effect/jsonifiedOption.ts @@ -1,7 +1,7 @@ import { Option } from "effect" import { identity } from "lodash-es" import { z } from "zod" -import { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome, effectOptionNoneSchema, effectOptionSomeInnerSchema, effectOptionSomeSchema } from "../effect" +import { ZodEffectOption, ZodEffectOptionNone, ZodEffectOptionSome, effectOptionNoneSchema, effectOptionSomeInnerSchema, effectOptionSomeSchema } from "./option" export type JsonifiedEffectOptionSomeBrand = "@thilawyn/zod-schema-class/JsonifiedEffectOptionSome" diff --git a/src/schema/jsonified/index.ts b/src/schema/jsonified/index.ts index a70a3b9..6bff7ae 100644 --- a/src/schema/jsonified/index.ts +++ b/src/schema/jsonified/index.ts @@ -1,19 +1,16 @@ import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint" import { dejsonifyDateSchema, jsonifyDateSchema } from "./date" import { dejsonifyDecimalSchema, jsonifyDecimalSchema } from "./decimal" -import { dejsonifyOption, jsonifyOption } from "./option" export const jsonify = { bigint: jsonifyBigIntSchema, date: jsonifyDateSchema, decimal: jsonifyDecimalSchema, - option: jsonifyOption, } as const export const dejsonify = { bigint: dejsonifyBigIntSchema, date: dejsonifyDateSchema, decimal: dejsonifyDecimalSchema, - option: dejsonifyOption, } as const diff --git a/src/tests.ts b/src/tests.ts index 95bded1..229b1fc 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,8 +1,8 @@ import { Implements } from "@thilawyn/traitify-ts" import { Option } from "effect" import { z } from "zod" +import { JsonifiedZodSchemaClass } from "./JsonifiedZodSchemaClass" import { ZodSchemaClass } from "./ZodSchemaClass" -import { dejsonify, jsonify } from "./schema/jsonified" import { s } from "./schema/lib" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" @@ -29,42 +29,21 @@ const userInst = User.create({ id: Option.some(1n), name: "User" }) const userInstEffect = User.createEffect({ id: Option.some(1n), name: "User" }) -const jsonifiedBigIntOption = jsonify.option.option( - s.effect.option.option(z.bigint()), - s.jsonify.bigint, -) +const jsonifiedUserExp = JsonifiedZodSchemaClass(User, { + jsonifySchema: schema => schema.extend({ + id: s.effect.jsonify.option.option(schema.shape.id, s.jsonify.bigint) + }), -const jsonifiedBigIntOptionSome = jsonify.option.some( - s.effect.option.some(z.bigint()), - s.jsonify.bigint, -) -const dejsonifiedBigIntOptionSome = dejsonify.option.some( - s.effect.option.some(z.bigint()), - s.dejsonify.bigint, -) -type T2 = z.output + dejsonifySchema: schema => schema.extend({ + id: s.effect.dejsonify.option.option(schema.shape.id, s.dejsonify.bigint) + }), +}).build() -const jsonifiedBigIntOptionNone = jsonify.option.none( - s.effect.option.none(z.bigint()), - s.jsonify.bigint, -) +@jsonifiedUserExp.staticImplements +class JsonifiedUser extends jsonifiedUserExp.extends implements Implements {} - -// const jsonifiedUserExp = JsonifiedZodSchemaClass(User, { -// jsonifySchema: s => s.extend({ -// id: jsonify.bigint(s.shape.id) -// }), - -// dejsonifySchema: s => s.extend({ -// id: dejsonify.bigint(s.shape.id) -// }), -// }).build() - -// @jsonifiedUserExp.staticImplements -// class JsonifiedUser extends jsonifiedUserExp.extends implements Implements {} - -// const jsonifiedUserInst = JsonifiedUser.jsonify(userInst) -// console.log(JSON.stringify(jsonifiedUserInst)) +const jsonifiedUserInst = JsonifiedUser.jsonify(userInst) +console.log(JSON.stringify(jsonifiedUserInst)) // jsonifiedUserInst.dejsonify()