0.1.1 #2
@@ -1,36 +1,55 @@
|
|||||||
import { AbstractClass } from "type-fest"
|
import { AbstractClass, Class as ConcreteClass } from "type-fest"
|
||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
|
|
||||||
|
|
||||||
|
export type ClassType = "AbstractClass" | "Class"
|
||||||
|
|
||||||
|
type Class<
|
||||||
|
Type extends ClassType,
|
||||||
|
T,
|
||||||
|
Arguments extends unknown[] = any[],
|
||||||
|
> = (
|
||||||
|
Type extends "AbstractClass"
|
||||||
|
? AbstractClass<T, Arguments>
|
||||||
|
: Type extends "Class"
|
||||||
|
? ConcreteClass<T, Arguments>
|
||||||
|
: never
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
export type SchemableClass<
|
export type SchemableClass<
|
||||||
SchemaT extends z.ZodRawShape,
|
SchemaT extends z.ZodRawShape,
|
||||||
SchemaUnknownKeys extends z.UnknownKeysParam,
|
SchemaUnknownKeys extends z.UnknownKeysParam,
|
||||||
SchemaCatchall extends z.ZodTypeAny,
|
SchemaCatchall extends z.ZodTypeAny,
|
||||||
SchemaValues extends {},
|
|
||||||
|
|
||||||
DefaultValues extends Partial<SchemaValues>,
|
Values extends {},
|
||||||
|
DefaultValues extends Partial<Values>,
|
||||||
|
|
||||||
|
Type extends ClassType = "AbstractClass"
|
||||||
> = (
|
> = (
|
||||||
AbstractClass<
|
Class<
|
||||||
|
Type,
|
||||||
|
|
||||||
{
|
{
|
||||||
readonly schema: z.ZodObject<
|
readonly schema: z.ZodObject<
|
||||||
SchemaT,
|
SchemaT,
|
||||||
SchemaUnknownKeys,
|
SchemaUnknownKeys,
|
||||||
SchemaCatchall,
|
SchemaCatchall,
|
||||||
SchemaValues,
|
Values,
|
||||||
SchemaValues
|
Values
|
||||||
>
|
>
|
||||||
|
|
||||||
readonly defaultValues: DefaultValues
|
readonly defaultValues: DefaultValues
|
||||||
} & SchemaValues,
|
} & Values,
|
||||||
|
|
||||||
Parameters<(values: SchemaValues) => void>
|
Parameters<(values: Values) => never>
|
||||||
> & {
|
> & {
|
||||||
readonly schema: z.ZodObject<
|
readonly schema: z.ZodObject<
|
||||||
SchemaT,
|
SchemaT,
|
||||||
SchemaUnknownKeys,
|
SchemaUnknownKeys,
|
||||||
SchemaCatchall,
|
SchemaCatchall,
|
||||||
SchemaValues,
|
Values,
|
||||||
SchemaValues
|
Values
|
||||||
>
|
>
|
||||||
|
|
||||||
readonly defaultValues: DefaultValues
|
readonly defaultValues: DefaultValues
|
||||||
@@ -39,12 +58,12 @@ export type SchemableClass<
|
|||||||
|
|
||||||
|
|
||||||
export type SchemableClassInput<
|
export type SchemableClassInput<
|
||||||
SchemaValues extends {},
|
Values extends {},
|
||||||
DefaultValues extends Partial<SchemaValues>,
|
DefaultValues extends Partial<Values>,
|
||||||
> = {
|
> = {
|
||||||
[Key in Exclude<keyof SchemaValues, keyof DefaultValues>]: SchemaValues[Key]
|
[Key in Exclude<keyof Values, keyof DefaultValues>]: Values[Key]
|
||||||
} & {
|
} & {
|
||||||
[Key in keyof DefaultValues]?: Key extends keyof SchemaValues
|
[Key in keyof DefaultValues]?: Key extends keyof Values
|
||||||
? SchemaValues[Key]
|
? Values[Key]
|
||||||
: never
|
: never
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
export * from "./SchemableClass"
|
export * from "./SchemableClass"
|
||||||
export * from "./extendSchemableClass"
|
export * from "./extendSchemableClass"
|
||||||
export * from "./makeSchemableClass"
|
export * from "./makeSchemableClass"
|
||||||
|
export * from "./newSchemable"
|
||||||
|
|||||||
@@ -18,29 +18,34 @@ export const newSchemable = <
|
|||||||
SchemaT,
|
SchemaT,
|
||||||
SchemaUnknownKeys,
|
SchemaUnknownKeys,
|
||||||
SchemaCatchall,
|
SchemaCatchall,
|
||||||
SchemaValues,
|
Values,
|
||||||
DefaultValues
|
DefaultValues,
|
||||||
|
"Class"
|
||||||
>,
|
>,
|
||||||
|
|
||||||
SchemaT extends z.ZodRawShape,
|
SchemaT extends z.ZodRawShape,
|
||||||
SchemaUnknownKeys extends z.UnknownKeysParam,
|
SchemaUnknownKeys extends z.UnknownKeysParam,
|
||||||
SchemaCatchall extends z.ZodTypeAny,
|
SchemaCatchall extends z.ZodTypeAny,
|
||||||
SchemaValues extends {},
|
|
||||||
DefaultValues extends Partial<SchemaValues>,
|
Values extends {},
|
||||||
|
DefaultValues extends Partial<Values>,
|
||||||
>(
|
>(
|
||||||
class_: C | SchemableClass<
|
class_: C | SchemableClass<
|
||||||
SchemaT,
|
SchemaT,
|
||||||
SchemaUnknownKeys,
|
SchemaUnknownKeys,
|
||||||
SchemaCatchall,
|
SchemaCatchall,
|
||||||
SchemaValues,
|
Values,
|
||||||
DefaultValues
|
DefaultValues,
|
||||||
|
"Class"
|
||||||
>,
|
>,
|
||||||
|
|
||||||
...[values, params]: NewSchemableArgs<
|
...[values, params]: NewSchemableArgs<
|
||||||
SchemableClassInput<SchemaValues, DefaultValues>
|
SchemableClassInput<Values, DefaultValues>
|
||||||
>
|
>
|
||||||
) =>
|
) =>
|
||||||
new class_()
|
new class_(
|
||||||
|
class_.schema.parse({ ...class_.defaultValues, ...values }, params)
|
||||||
|
) as InstanceType<C>
|
||||||
|
|
||||||
|
|
||||||
// export const newSchemablePromise = async <
|
// export const newSchemablePromise = async <
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
import { SchemableClassInput, extendSchemableClass, makeSchemableClass, makeSchemableClassFrom } from "."
|
import { SchemableClassInput, extendSchemableClass, makeSchemableClass, makeSchemableClassFrom, newSchemable } from "."
|
||||||
|
|
||||||
|
|
||||||
// class Test1 {
|
// class Test1 {
|
||||||
@@ -33,7 +33,8 @@ new Test2({ prout: "ruquier", ruquier: 69 })
|
|||||||
class Test3 extends Test2 {
|
class Test3 extends Test2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(new Test3({ prout: "ruquier", ruquier: 69 }))
|
|
||||||
|
|
||||||
|
|
||||||
type Test = SchemableClassInput<z.output<typeof Test3.schema>, typeof Test3.defaultValues>
|
type Test = SchemableClassInput<z.output<typeof Test3.schema>, typeof Test3.defaultValues>
|
||||||
|
|
||||||
|
const test3inst = newSchemable(Test3, { ruquier: 48 })
|
||||||
|
console.log(test3inst)
|
||||||
|
|||||||
Reference in New Issue
Block a user