This commit is contained in:
@@ -62,6 +62,58 @@ export class ZodSchemaClassExtender<Superclass extends AbstractClass<object>> {
|
||||
)
|
||||
}
|
||||
|
||||
jsonifiable<
|
||||
Super extends ZodSchemaAbstractClass<SuperInstance, SuperSchemaT, SuperSchemaUnknownKeys, SuperSchemaCatchall, SuperValues, SuperDefaultValues>,
|
||||
SuperInstance extends SuperValues,
|
||||
|
||||
SuperSchemaT extends z.ZodRawShape,
|
||||
SuperSchemaUnknownKeys extends z.UnknownKeysParam,
|
||||
SuperSchemaCatchall extends z.ZodTypeAny,
|
||||
|
||||
SuperValues extends object,
|
||||
SuperDefaultValues extends Partial<SuperValues>,
|
||||
|
||||
SchemaT extends z.ZodRawShape,
|
||||
SchemaUnknownKeys extends z.UnknownKeysParam,
|
||||
SchemaCatchall extends z.ZodTypeAny,
|
||||
|
||||
Values extends SuperValues,
|
||||
DefaultValues extends Partial<Values>,
|
||||
>(
|
||||
this: ZodSchemaClassExtender<
|
||||
Super | ZodSchemaAbstractClass<SuperInstance, SuperSchemaT, SuperSchemaUnknownKeys, SuperSchemaCatchall, SuperValues, SuperDefaultValues>
|
||||
>,
|
||||
|
||||
props: {
|
||||
schema: (schema: Super["schema"]) => z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, Values>
|
||||
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<object, any[]>) {
|
||||
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<Super>,
|
||||
StaticMembers<typeof Schemas>,
|
||||
]>
|
||||
>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
build() {
|
||||
return this.superclass
|
||||
|
||||
Reference in New Issue
Block a user