diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index b545638..5ba03b9 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -1,7 +1,10 @@ +import { expression } from "@thilawyn/traitify-ts" import { AbstractClass, Simplify } from "type-fest" import { z } from "zod" import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" import { Extend, Override, StaticMembers } from "../util" +import { JsonifiableZodSchemaAbstractClass, JsonifiableZodSchemaClass } from "../shapes/JsonifiableZodSchemaClass" +import { JsonifiableObject } from "type-fest/source/jsonifiable" export class ZodSchemaClassExtender> { @@ -63,30 +66,58 @@ export class ZodSchemaClassExtender> { } jsonifiable< - Super extends ZodSchemaAbstractClass, - SuperInstance extends SuperValues, + Super extends JsonifiableZodSchemaAbstractClass< + Instance, - SuperSchemaT extends z.ZodRawShape, - SuperSchemaUnknownKeys extends z.UnknownKeysParam, - SuperSchemaCatchall extends z.ZodTypeAny, + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, - SuperValues extends object, - SuperDefaultValues extends Partial, + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + JsonifiedValues, + Values + >, + Instance extends Values, - Values extends SuperValues, - 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, + Values extends object, >( this: ZodSchemaClassExtender< - Super | ZodSchemaAbstractClass + Super | JsonifiableZodSchemaAbstractClass< + Instance, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + Values + > >, props: { - schema: (schema: Super["schema"]) => z.ZodObject - defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues + jsonifySchema: ( + schema: z.ZodObject + ) => z.ZodObject + + dejsonifySchema: ( + schema: z.ZodObject + ) => z.ZodObject }, ) { const schema = props.schema(this.superclass.schema) @@ -115,7 +146,11 @@ export class ZodSchemaClassExtender> { } - build() { + toClass() { return this.superclass } + + toExpressionBuilder() { + return expression.extends(this.superclass) + } } diff --git a/src/tests.ts b/src/tests.ts index 103f99c..fe55b25 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -48,7 +48,7 @@ const AdminUserProto = User.extend() }) -class AdminUser extends AdminUserProto.build() {} +class AdminUser extends AdminUserProto.toClass() {} const subInst = await AdminUser.createPromise({ id: 2n, prout: "" }) console.log(subInst)