From a6414b680c0918c7850343eb8b1f72fa411c2edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 27 Feb 2024 02:49:53 +0100 Subject: [PATCH] InstantiableZodSchemaObject work --- src/tests.ts | 2 +- src/traits/InstantiableZodSchemaObject.ts | 30 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/tests.ts b/src/tests.ts index ddcafe7..ae935a1 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -16,7 +16,7 @@ const exp = zodSchemaClass }), schemaWithDefaultValues: s => s.extend({ - id: s.shape.id.default(-1n) + id: s.shape.id.default(-1n), }), }) .jsonifiable({ diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 9b70483..09c2fc8 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -28,6 +28,36 @@ type NewZodSchemaInstanceArgs = ( export const InstantiableZodSchemaObject = trait .implement(Super => class InstantiableZodSchemaObject extends Super { + static instantiationSchema< + Instance extends Values, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends object, + >( + this: ZodSchemaClass, + ) { + return this.schema.transform(values => new this(values)) + } + + static instantiationSchemaWithDefaultValues< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ZodSchemaClass, + ) { + return this.schemaWithDefaultValues.transform(values => new this(values)) + } + + static create< Instance extends Values,