makeJsonifiableSchemableClass refactoring
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-01-15 15:35:27 +01:00
parent 5723829257
commit 629b61c545

View File

@@ -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<Values>,
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)
}