diff --git a/src/jsonifiable/makeJsonifiableSchemableClass.ts b/src/jsonifiable/makeJsonifiableSchemableClass.ts index 6d7843f..943f744 100644 --- a/src/jsonifiable/makeJsonifiableSchemableClass.ts +++ b/src/jsonifiable/makeJsonifiableSchemableClass.ts @@ -5,13 +5,69 @@ import { SchemableClass } from ".." import { Class, ClassType, StaticMembers, parseZodTypeEffect } from "../util" +export type MakeJsonifiableSchemableClassProps< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, + + JsonifiedValues extends JsonifiableObject, +> = { + jsonifySchema: (props: { + schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > + + shape: SchemaT + }) => z.ZodObject< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + JsonifiedValues, + Values + > + + dejsonifySchema: (props: { + schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > + + shape: SchemaT + }) => z.ZodObject< + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + Values, + JsonifiedValues + > +} + + export function makeJsonifiableSchemableClass< C extends SchemableClass< SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, - DefaultValues + DefaultValues, + Type >, SchemaT extends z.ZodRawShape, @@ -31,7 +87,7 @@ export function makeJsonifiableSchemableClass< JsonifiedValues extends JsonifiableObject, - Type extends ClassType = "AbstractClass" + Type extends ClassType = "AbstractClass", >( extend: C | SchemableClass< SchemaT, @@ -42,29 +98,23 @@ export function makeJsonifiableSchemableClass< Type >, - props: { - jsonifySchema: (props: { - schema: C["schema"] - shape: C["schema"]["shape"] - }) => z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > + props: MakeJsonifiableSchemableClassProps< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, - dejsonifySchema: (props: { - schema: C["schema"] - shape: C["schema"]["shape"] - }) => z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > - }, + Values, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues + >, ) { const jsonifySchema = props.jsonifySchema({ schema: extend.schema, @@ -116,3 +166,63 @@ export function makeJsonifiableSchemableClass< } ) } + + +export function pipeMakeJsonifiableSchemableClass< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, + + JsonifiedValues extends JsonifiableObject, +>( + props: MakeJsonifiableSchemableClassProps< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues + > +) { + return < + C extends SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + Type + >, + + Type extends ClassType = "AbstractClass", + >( + extend: C | SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + Type + > + ) => makeJsonifiableSchemableClass(extend, props) +}