diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts index 7762a7e..be2a64a 100644 --- a/src/TZodSchemaClass.ts +++ b/src/TZodSchemaClass.ts @@ -41,14 +41,21 @@ export type TZodSchemaClass< readonly schema: Schema readonly defaultValues: DefaultValues - newPromise>( + instantiate>( + this: Self, + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ): InstanceType + + instantiatePromise>( this: Self, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > ): Promise> - newEffect>( + instantiateEffect>( this: Self, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 31513db..3664b57 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -4,10 +4,7 @@ import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstance import { StaticMembers } from "./util" -type ExtendableClass = AbstractClass<{ - schema?: never - defaultValues?: never -}, []> & { +type ExtendableClass = AbstractClass & { schema?: never defaultValues?: never } @@ -55,7 +52,17 @@ export function ZodSchemaClassOf< Object.assign(this, values) } - static async newPromise( + static async instantiate( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + this.schema.parse({ ...this.defaultValues, ...values }, params) + ) + } + + static async instantiatePromise( ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > diff --git a/src/tests.ts b/src/tests.ts index c314056..7f4befd 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -2,7 +2,11 @@ import { z } from "zod" import { ZodSchemaClassOf, defineDefaultValues } from "." -class Test extends ZodSchemaClassOf(Object, { +class Root { +} + + +class Test extends ZodSchemaClassOf(Root, { schema: z.object({ id: z.bigint(), name: z.string(), @@ -11,11 +15,11 @@ class Test extends ZodSchemaClassOf(Object, { defaultValues: defineDefaultValues({ id: -1n }), }) {} Test.defaultValues -const inst = await Test.newPromise({ id: 1n, name: "" }) +const inst = await Test.instantiatePromise({ id: 1n, name: "" }) // Test.extend() console.log(inst) -// class ChildTest extends Test {} +class ChildTest extends Test {} -// ChildTest.newPromise() +ChildTest.instantiate({ name: "" })