diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index e0a5e3a..b545638 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -62,6 +62,58 @@ export class ZodSchemaClassExtender> { ) } + jsonifiable< + Super extends ZodSchemaAbstractClass, + SuperInstance extends SuperValues, + + SuperSchemaT extends z.ZodRawShape, + SuperSchemaUnknownKeys extends z.UnknownKeysParam, + SuperSchemaCatchall extends z.ZodTypeAny, + + SuperValues extends object, + SuperDefaultValues extends Partial, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends SuperValues, + DefaultValues extends Partial, + >( + this: ZodSchemaClassExtender< + Super | ZodSchemaAbstractClass + >, + + props: { + schema: (schema: Super["schema"]) => z.ZodObject + defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues + }, + ) { + const schema = props.schema(this.superclass.schema) + const defaultValues = props.defaultValues(this.superclass.defaultValues) + + class Schemas extends (this.superclass as AbstractClass) { + static readonly schema = schema + static readonly defaultValues = defaultValues + } + + return new this.constructor( + Schemas as unknown as AbstractClass< + Simplify< + Extend<[SuperInstance, Values]> + >, + + [values: Values] + > & + Simplify< + Override<[ + StaticMembers, + StaticMembers, + ]> + > + ) + } + build() { return this.superclass