ZodSchemaClassBuilder work
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-02-22 04:44:24 +01:00
parent 26453038a2
commit 718a32052d
2 changed files with 40 additions and 50 deletions

View File

@@ -1,4 +1,4 @@
import { Trait, TraitExpression, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts"
import { Trait, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts"
import { AbstractClass, Simplify } from "type-fest"
import { z } from "zod"
import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject"
@@ -9,25 +9,22 @@ import { Extend, StaticMembers } from "./util"
export class ZodSchemaClassBuilder<
Superclass extends AbstractClass<object>,
const Traits extends Trait<any, any, any, any>[],
> {
constructor(
private readonly expressionBuilder: TraitExpressionBuilder<Superclass, Traits>
) {}
extends<
This extends ZodSchemaClassBuilder<
typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass
Traits
>,
Super extends AbstractClass<object, []>,
>(
this: This,
superclass: Super,
) {
return new ZodSchemaClassBuilder(
this.expressionBuilder.extends(superclass)
)
}
>
extends TraitExpressionBuilder<Superclass, Traits> {
// extends<
// This extends ZodSchemaClassBuilder<
// typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass
// Traits
// >,
// Super extends AbstractClass<object, []>,
// >(
// this: This,
// superclass: Super,
// ) {
// return new ZodSchemaClassBuilder(
// this.expressionBuilder.extends(superclass)
// )
// }
schema<
SchemaT extends z.ZodRawShape,
@@ -41,7 +38,7 @@ export class ZodSchemaClassBuilder<
schema: z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, Values>,
defaultValues: DefaultValues,
) {
class Schemas extends (this.expressionBuilder.expressionSuperclass as AbstractClass<object, []>) {
class Schemas extends (this.expressionSuperclass as AbstractClass<object, []>) {
static readonly schema = schema
static readonly defaultValues = defaultValues
@@ -51,38 +48,32 @@ export class ZodSchemaClassBuilder<
}
}
return new ZodSchemaClassBuilder(
this.expressionBuilder
.extends(Schemas as unknown as (
AbstractClass<
InstanceType<Superclass> &
Simplify<
Extend<[Schemas, Values]>
>,
ConstructorParameters<typeof Schemas>
> &
return this
.extends(Schemas as unknown as (
AbstractClass<
InstanceType<Superclass> &
Simplify<
Extend<[
StaticMembers<Superclass>,
StaticMembers<typeof Schemas>,
]>
>
))
.expresses(
InstantiableZodSchemaObject,
ExtendableZodSchemaObject,
)
)
Extend<[Schemas, Values]>
>,
ConstructorParameters<typeof Schemas>
> &
Simplify<
Extend<[
StaticMembers<Superclass>,
StaticMembers<typeof Schemas>,
]>
>
))
.expresses(
InstantiableZodSchemaObject,
ExtendableZodSchemaObject,
)
}
jsonifiable() {
}
toBuilder() {
return this.expressionBuilder
}
}

View File

@@ -1,10 +1,10 @@
import { Implements, expression } from "@thilawyn/traitify-ts"
import { Implements, TraitExpression } from "@thilawyn/traitify-ts"
import { z } from "zod"
import { ZodSchemaClass, ZodSchemaClassBuilder } from "./ZodSchemaClass"
import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject"
const newTestExp = new ZodSchemaClassBuilder(expression)
const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, [])
.schema(
z.object({
id: z.bigint()
@@ -12,7 +12,6 @@ const newTestExp = new ZodSchemaClassBuilder(expression)
{ id: -1n },
)
.toBuilder()
.expressionSuperclass