0.1.2 #3

Merged
Thilawyn merged 136 commits from next into master 2024-03-11 19:44:21 +01:00
3 changed files with 29 additions and 11 deletions
Showing only changes of commit b6c2c4bec7 - Show all commits

View File

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

View File

@@ -4,10 +4,7 @@ import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstance
import { StaticMembers } from "./util" import { StaticMembers } from "./util"
type ExtendableClass = AbstractClass<{ type ExtendableClass = AbstractClass<any, []> & {
schema?: never
defaultValues?: never
}, []> & {
schema?: never schema?: never
defaultValues?: never defaultValues?: never
} }
@@ -55,7 +52,17 @@ export function ZodSchemaClassOf<
Object.assign(this, values) 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< ...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues> NewZodSchemaInstanceInput<Values, DefaultValues>
> >

View File

@@ -2,7 +2,11 @@ import { z } from "zod"
import { ZodSchemaClassOf, defineDefaultValues } from "." import { ZodSchemaClassOf, defineDefaultValues } from "."
class Test extends ZodSchemaClassOf(Object, { class Root {
}
class Test extends ZodSchemaClassOf(Root, {
schema: z.object({ schema: z.object({
id: z.bigint(), id: z.bigint(),
name: z.string(), name: z.string(),
@@ -11,11 +15,11 @@ class Test extends ZodSchemaClassOf(Object, {
defaultValues: defineDefaultValues({ id: -1n }), defaultValues: defineDefaultValues({ id: -1n }),
}) {} }) {}
Test.defaultValues Test.defaultValues
const inst = await Test.newPromise({ id: 1n, name: "" }) const inst = await Test.instantiatePromise({ id: 1n, name: "" })
// Test.extend() // Test.extend()
console.log(inst) console.log(inst)
// class ChildTest extends Test {} class ChildTest extends Test {}
// ChildTest.newPromise() ChildTest.instantiate({ name: "" })