ZodSchemaClassOf work
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-01-21 23:29:11 +01:00
parent c073154eeb
commit b6c2c4bec7
3 changed files with 29 additions and 11 deletions

View File

@@ -41,14 +41,21 @@ export type TZodSchemaClass<
readonly schema: Schema
readonly defaultValues: DefaultValues
newPromise<Self extends ConcreteClass<any>>(
instantiate<Self extends ConcreteClass<any>>(
this: Self,
...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues>
>
): InstanceType<Self>
instantiatePromise<Self extends ConcreteClass<any>>(
this: Self,
...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues>
>
): Promise<InstanceType<Self>>
newEffect<Self extends ConcreteClass<any>>(
instantiateEffect<Self extends ConcreteClass<any>>(
this: Self,
...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues>

View File

@@ -4,10 +4,7 @@ import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstance
import { StaticMembers } from "./util"
type ExtendableClass = AbstractClass<{
schema?: never
defaultValues?: never
}, []> & {
type ExtendableClass = AbstractClass<any, []> & {
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<Values, DefaultValues>
>
) {
return new this(
this.schema.parse({ ...this.defaultValues, ...values }, params)
)
}
static async instantiatePromise(
...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues>
>

View File

@@ -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: "" })