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,