diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 7199b57..697cf68 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -6,7 +6,7 @@ import { Extend, StaticMembers } from "./util" export function ZodSchemaClassOf< - Superclass extends AbstractClass<{}, []>, + Super extends AbstractClass<{}, []>, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -15,7 +15,7 @@ export function ZodSchemaClassOf< Values extends {}, DefaultValues extends Partial, >( - of: Superclass, + of: Super, { schema, defaultValues }: { schema: z.ZodObject @@ -37,7 +37,7 @@ export function ZodSchemaClassOf< return exp.extends as AbstractClass< Extend<[ - InstanceType, + InstanceType, InstanceType, Values, ]>, @@ -45,7 +45,7 @@ export function ZodSchemaClassOf< ConstructorParameters > & Extend<[ - StaticMembers, + StaticMembers, StaticMembers, ]> } diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts new file mode 100644 index 0000000..ab1be36 --- /dev/null +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -0,0 +1,39 @@ +import { abstract, trait } from "@thilawyn/traitify-ts" +import { z } from "zod" +import { ZodSchemaAbstractClass } from "../types/ZodSchemaClass" + + +export const ExtendableZodSchemaObject = trait( + abstract(), + + Super => class ExtendableZodSchemaObject extends Super { + static extend< + Super extends ZodSchemaAbstractClass, + + SuperSchemaT extends z.ZodRawShape, + SuperSchemaUnknownKeys extends z.UnknownKeysParam, + SuperSchemaCatchall extends z.ZodTypeAny, + SuperValues extends {}, + SuperDefaultValues extends Partial, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + Values extends SuperValues, + DefaultValues extends Partial, + >( + this: Super | ZodSchemaAbstractClass, + + props: { + schema: (props: { + schema: Super["schema"] + shape: Super["schema"]["shape"] + }) => z.ZodObject + + defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues + }, + ) { + + } + }, +)