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,