From 586eddc8982911bb7305edcae9095d0576a616e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 04:00:39 +0100 Subject: [PATCH] ZodSchemaClassBuilder --- bun.lockb | Bin 160490 -> 160492 bytes package.json | 2 +- src/ZodSchemaClass.ts | 75 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/bun.lockb b/bun.lockb index 195f56ac2c96883ca308b15bd71d30c848728992..31a1b1655f3add0bde014d20776b3662a481f3f6 100755 GIT binary patch delta 13848 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 delta 13835 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, - const Traits extends Trait[], -> -extends TraitExpressionBuilder { + Exp extends TraitExpressionBuilder +> { + constructor( + private readonly expressionBuilder: Exp + ) {} + + extends< + This extends ZodSchemaClassBuilder< + TraitExpressionBuilder< + typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass + any + > + >, + Super extends AbstractClass, + >( + this: This, + superclass: Super, + ) { + return new ZodSchemaClassBuilder( + this.expressionBuilder.extends(superclass) + ) + } + + schema< + This extends ZodSchemaClassBuilder< + TraitExpressionBuilder< + any, + any + > + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends object, + DefaultValues extends Partial, + >( + this: This, + schema: z.ZodObject, + defaultValues: DefaultValues, + ) { + class Schemas extends (this.expressionBuilder.expressionSuperclass as AbstractClass) { + static readonly schema = schema + static readonly defaultValues = defaultValues + + constructor(values: Values) { + super() + Object.assign(this, values) + } + } + + return new ZodSchemaClassBuilder( + this.expressionBuilder + .extends() + .expresses( + InstantiableZodSchemaObject, + ExtendableZodSchemaObject, + ) + ) + } + + jsonifiable() { + + } + + toBuilder() { + return this.expressionBuilder + } }