makeSchemableClassFrom work
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-01-09 05:32:27 +01:00
parent 712057fa1e
commit 2dad6e0873
3 changed files with 65 additions and 2 deletions

View File

@@ -60,14 +60,14 @@ export function extendSchemableClass<
readonly defaultValues = defaultValues readonly defaultValues = defaultValues
} as unknown as ( } as unknown as (
ClassKind< ClassKind<
Omit<C, "schema" | "defaultValues" | keyof ExtendSchemaValues> & Omit<InstanceType<C>, "schema" | "defaultValues" | keyof ExtendSchemaValues> &
{ {
readonly schema: typeof schema, readonly schema: typeof schema,
readonly defaultValues: typeof defaultValues, readonly defaultValues: typeof defaultValues,
} & } &
SchemaValues, SchemaValues,
ConstructorParameters<C> Parameters<(values: SchemaValues) => void>
> & > &
Omit<StaticMembers<C>, "schema" | "defaultValues"> & Omit<StaticMembers<C>, "schema" | "defaultValues"> &

View File

@@ -1,2 +1,3 @@
export * from "./SchemableClass" export * from "./SchemableClass"
export * from "./extendSchemableClass" export * from "./extendSchemableClass"
export * from "./makeSchemableClass"

62
src/makeSchemableClass.ts Normal file
View File

@@ -0,0 +1,62 @@
import { AbstractClass, Class } from "type-fest"
import { z } from "zod"
import { StaticMembers } from "./util"
export function makeSchemableClassFrom<
C extends AbstractClass<any, []>,
SchemaT extends z.ZodRawShape,
SchemaUnknownKeys extends z.UnknownKeysParam,
SchemaCatchall extends z.ZodTypeAny,
SchemaValues extends {},
DefaultValues extends Partial<SchemaValues>,
>(
extend: C,
schema: z.ZodObject<
SchemaT,
SchemaUnknownKeys,
SchemaCatchall,
SchemaValues,
SchemaValues
>,
defaultValues: DefaultValues,
) {
type ClassKind<T, Arguments extends unknown[]> = (
C extends Class<any>
? Class<T, Arguments>
: AbstractClass<T, Arguments>
)
return class extends (extend as unknown as Class<any, []>) {
static readonly schema = schema
readonly schema = schema
static readonly defaultValues = defaultValues
readonly defaultValues = defaultValues
constructor(values: SchemaValues) {
super()
Object.assign(this, values)
}
} as unknown as (
ClassKind<
Omit<InstanceType<C>, "schema" | "defaultValues"> &
{
readonly schema: typeof schema,
readonly defaultValues: typeof defaultValues,
} &
SchemaValues,
Parameters<(values: SchemaValues) => void>
> &
Omit<StaticMembers<C>, "schema" | "defaultValues"> &
{
readonly schema: typeof schema,
readonly defaultValues: typeof defaultValues,
}
)
}