Fixed instance inference
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-02-09 01:15:23 +01:00
parent 0d20e7ad69
commit a4d4c87f54
4 changed files with 34 additions and 13 deletions

View File

@@ -3,6 +3,8 @@ import { z } from "zod"
export type ZodSchemaClass< export type ZodSchemaClass<
Instance extends Values,
SchemaT extends z.ZodRawShape, SchemaT extends z.ZodRawShape,
SchemaUnknownKeys extends z.UnknownKeysParam, SchemaUnknownKeys extends z.UnknownKeysParam,
SchemaCatchall extends z.ZodTypeAny, SchemaCatchall extends z.ZodTypeAny,
@@ -10,11 +12,13 @@ export type ZodSchemaClass<
Values extends {}, Values extends {},
DefaultValues extends Partial<Values>, DefaultValues extends Partial<Values>,
> = ( > = (
Class<Values, [values: Values]> & Class<Instance, [values: Values]> &
ZodSchemaClassStatic<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues> ZodSchemaClassStatic<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>
) )
export type ZodSchemaAbstractClass< export type ZodSchemaAbstractClass<
Instance extends Values,
SchemaT extends z.ZodRawShape, SchemaT extends z.ZodRawShape,
SchemaUnknownKeys extends z.UnknownKeysParam, SchemaUnknownKeys extends z.UnknownKeysParam,
SchemaCatchall extends z.ZodTypeAny, SchemaCatchall extends z.ZodTypeAny,
@@ -22,7 +26,7 @@ export type ZodSchemaAbstractClass<
Values extends {}, Values extends {},
DefaultValues extends Partial<Values>, DefaultValues extends Partial<Values>,
> = ( > = (
AbstractClass<Values, [values: Values]> & AbstractClass<Instance, [values: Values]> &
ZodSchemaClassStatic<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues> ZodSchemaClassStatic<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>
) )

View File

@@ -10,7 +10,8 @@ export const ExtendableZodSchemaObject = trait(
Super => class ExtendableZodSchemaObject extends Super { Super => class ExtendableZodSchemaObject extends Super {
static extend< static extend<
Super extends ZodSchemaAbstractClass<SuperSchemaT, SuperSchemaUnknownKeys, SuperSchemaCatchall, SuperValues, SuperDefaultValues>, Super extends ZodSchemaAbstractClass<SuperInstance, SuperSchemaT, SuperSchemaUnknownKeys, SuperSchemaCatchall, SuperValues, SuperDefaultValues>,
SuperInstance extends SuperValues,
SuperSchemaT extends z.ZodRawShape, SuperSchemaT extends z.ZodRawShape,
SuperSchemaUnknownKeys extends z.UnknownKeysParam, SuperSchemaUnknownKeys extends z.UnknownKeysParam,
@@ -24,7 +25,7 @@ export const ExtendableZodSchemaObject = trait(
Values extends SuperValues, Values extends SuperValues,
DefaultValues extends Partial<Values>, DefaultValues extends Partial<Values>,
>( >(
this: Super | ZodSchemaAbstractClass<SuperSchemaT, SuperSchemaUnknownKeys, SuperSchemaCatchall, SuperValues, SuperDefaultValues>, this: Super | ZodSchemaAbstractClass<SuperInstance, SuperSchemaT, SuperSchemaUnknownKeys, SuperSchemaCatchall, SuperValues, SuperDefaultValues>,
props: { props: {
schema: (props: { schema: (props: {

View File

@@ -31,7 +31,7 @@ export const InstantiableZodSchemaObject = trait(
Super => class InstantiableZodSchemaObject extends Super { Super => class InstantiableZodSchemaObject extends Super {
static create< static create<
Self extends ZodSchemaClass<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>, Instance extends Values,
SchemaT extends z.ZodRawShape, SchemaT extends z.ZodRawShape,
SchemaUnknownKeys extends z.UnknownKeysParam, SchemaUnknownKeys extends z.UnknownKeysParam,
@@ -40,7 +40,7 @@ export const InstantiableZodSchemaObject = trait(
Values extends {}, Values extends {},
DefaultValues extends Partial<Values>, DefaultValues extends Partial<Values>,
>( >(
this: Self | ZodSchemaClass<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>, this: ZodSchemaClass<Instance, SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>,
...[values, params]: NewZodSchemaInstanceArgs< ...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues> NewZodSchemaInstanceInput<Values, DefaultValues>
@@ -48,11 +48,11 @@ export const InstantiableZodSchemaObject = trait(
) { ) {
return new this( return new this(
this.schema.parse({ ...this.defaultValues, ...values }, params) this.schema.parse({ ...this.defaultValues, ...values }, params)
) as InstanceType<Self> )
} }
static async createPromise< static async createPromise<
Self extends ZodSchemaClass<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>, Instance extends Values,
SchemaT extends z.ZodRawShape, SchemaT extends z.ZodRawShape,
SchemaUnknownKeys extends z.UnknownKeysParam, SchemaUnknownKeys extends z.UnknownKeysParam,
@@ -61,7 +61,7 @@ export const InstantiableZodSchemaObject = trait(
Values extends {}, Values extends {},
DefaultValues extends Partial<Values>, DefaultValues extends Partial<Values>,
>( >(
this: Self | ZodSchemaClass<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>, this: ZodSchemaClass<Instance, SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>,
...[values, params]: NewZodSchemaInstanceArgs< ...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues> NewZodSchemaInstanceInput<Values, DefaultValues>
@@ -69,11 +69,11 @@ export const InstantiableZodSchemaObject = trait(
) { ) {
return new this( return new this(
await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) await this.schema.parseAsync({ ...this.defaultValues, ...values }, params)
) as InstanceType<Self> )
} }
static createEffect< static createEffect<
Self extends ZodSchemaClass<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>, Instance extends Values,
SchemaT extends z.ZodRawShape, SchemaT extends z.ZodRawShape,
SchemaUnknownKeys extends z.UnknownKeysParam, SchemaUnknownKeys extends z.UnknownKeysParam,
@@ -82,7 +82,7 @@ export const InstantiableZodSchemaObject = trait(
Values extends {}, Values extends {},
DefaultValues extends Partial<Values>, DefaultValues extends Partial<Values>,
>( >(
this: Self | ZodSchemaClass<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>, this: ZodSchemaClass<Instance, SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues>,
...[values, params]: NewZodSchemaInstanceArgs< ...[values, params]: NewZodSchemaInstanceArgs<
NewZodSchemaInstanceInput<Values, DefaultValues> NewZodSchemaInstanceInput<Values, DefaultValues>
@@ -95,8 +95,12 @@ export const InstantiableZodSchemaObject = trait(
params, params,
), ),
Effect.map(values => new this(values) as InstanceType<Self>), Effect.map(values => new this(values)),
) )
} }
protected static initialize() {
}
}, },
) )

View File

@@ -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)
}
},
)