From a4d4c87f542719118fa272372ec6f92a2239e016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 9 Feb 2024 01:15:23 +0100 Subject: [PATCH] Fixed instance inference --- src/shapes/ZodSchemaClass.ts | 8 ++++++-- src/traits/ExtendableZodSchemaObject.ts | 5 +++-- src/traits/InstantiableZodSchemaObject.ts | 22 +++++++++++++--------- src/traits/ObservableZodSchemaObject.ts | 12 ++++++++++++ 4 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 src/traits/ObservableZodSchemaObject.ts diff --git a/src/shapes/ZodSchemaClass.ts b/src/shapes/ZodSchemaClass.ts index ab678da..22d059e 100644 --- a/src/shapes/ZodSchemaClass.ts +++ b/src/shapes/ZodSchemaClass.ts @@ -3,6 +3,8 @@ import { z } from "zod" export type ZodSchemaClass< + Instance extends Values, + SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -10,11 +12,13 @@ export type ZodSchemaClass< Values extends {}, DefaultValues extends Partial, > = ( - Class & + Class & ZodSchemaClassStatic ) export type ZodSchemaAbstractClass< + Instance extends Values, + SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -22,7 +26,7 @@ export type ZodSchemaAbstractClass< Values extends {}, DefaultValues extends Partial, > = ( - AbstractClass & + AbstractClass & ZodSchemaClassStatic ) diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index 199c6d9..f22d191 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -10,7 +10,8 @@ export const ExtendableZodSchemaObject = trait( Super => class ExtendableZodSchemaObject extends Super { static extend< - Super extends ZodSchemaAbstractClass, + Super extends ZodSchemaAbstractClass, + SuperInstance extends SuperValues, SuperSchemaT extends z.ZodRawShape, SuperSchemaUnknownKeys extends z.UnknownKeysParam, @@ -24,7 +25,7 @@ export const ExtendableZodSchemaObject = trait( Values extends SuperValues, DefaultValues extends Partial, >( - this: Super | ZodSchemaAbstractClass, + this: Super | ZodSchemaAbstractClass, props: { schema: (props: { diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 7f1b7ca..19952f8 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -31,7 +31,7 @@ export const InstantiableZodSchemaObject = trait( Super => class InstantiableZodSchemaObject extends Super { static create< - Self extends ZodSchemaClass, + Instance extends Values, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -40,7 +40,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | ZodSchemaClass, + this: ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -48,11 +48,11 @@ export const InstantiableZodSchemaObject = trait( ) { return new this( this.schema.parse({ ...this.defaultValues, ...values }, params) - ) as InstanceType + ) } static async createPromise< - Self extends ZodSchemaClass, + Instance extends Values, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -61,7 +61,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | ZodSchemaClass, + this: ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -69,11 +69,11 @@ export const InstantiableZodSchemaObject = trait( ) { return new this( await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) - ) as InstanceType + ) } static createEffect< - Self extends ZodSchemaClass, + Instance extends Values, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -82,7 +82,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | ZodSchemaClass, + this: ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -95,8 +95,12 @@ export const InstantiableZodSchemaObject = trait( params, ), - Effect.map(values => new this(values) as InstanceType), + Effect.map(values => new this(values)), ) } + + protected static initialize() { + + } }, ) diff --git a/src/traits/ObservableZodSchemaObject.ts b/src/traits/ObservableZodSchemaObject.ts new file mode 100644 index 0000000..acdddc9 --- /dev/null +++ b/src/traits/ObservableZodSchemaObject.ts @@ -0,0 +1,12 @@ +import { abstract, trait } from "@thilawyn/traitify-ts" + + +export const ObservableZodSchemaObject = trait( + abstract(), + + Super => class ObservableZodSchemaObject extends Super { + constructor(...args: any[]) { + super(...args) + } + }, +)