From 176057d77ad0101decb6372521272f20c664dccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 31 Dec 2023 03:15:06 +0100 Subject: [PATCH] makeJsonifiableSchemableClass --- src/JsonifiableSchemable.ts | 11 ----- src/makeJsonifiableSchemableClass.ts | 62 ++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 11 deletions(-) delete mode 100644 src/JsonifiableSchemable.ts create mode 100644 src/makeJsonifiableSchemableClass.ts diff --git a/src/JsonifiableSchemable.ts b/src/JsonifiableSchemable.ts deleted file mode 100644 index d64e34e..0000000 --- a/src/JsonifiableSchemable.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { trait } from "@thilawyn/thilatrait" - - -export const JsonifiableSchemable = () => - trait(Parent => { - abstract class JsonifiableSchemable extends Parent { - - } - - return JsonifiableSchemable - }) diff --git a/src/makeJsonifiableSchemableClass.ts b/src/makeJsonifiableSchemableClass.ts new file mode 100644 index 0000000..84a9261 --- /dev/null +++ b/src/makeJsonifiableSchemableClass.ts @@ -0,0 +1,62 @@ +import { JsonifiableObject } from "type-fest/source/jsonifiable" +import { z } from "zod" +import { SchemableClass, SchemableConfig } from "." + + +export function makeJsonifiableSchemableClass< + C extends SchemableClass<$Config>, + $Config extends SchemableConfig, + + JsonifiedValues extends JsonifiableObject, + + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, +>( + class_: C | SchemableClass<$Config>, + + props: { + jsonifySchema: (props: { + schema: $Config["schema"] + s: $Config["schema"]["shape"] + }) => z.ZodObject< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + JsonifiedValues, + $Config["values"] + > + + dejsonifySchema: (props: { + schema: $Config["schema"] + s: $Config["schema"]["shape"] + }) => z.ZodObject< + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + $Config["values"], + JsonifiedValues + > + }, +) { + + const jsonifySchema = props.jsonifySchema({ + schema: class_.schema, + s: class_.schema.shape, + }) + + const dejsonifySchema = props.dejsonifySchema({ + schema: class_.schema, + s: class_.schema.shape, + }) + + + return class JsonifiableSchemableObject { + + } + +}