0.1.2 #3

Merged
Thilawyn merged 136 commits from next into master 2024-03-11 19:44:21 +01:00
2 changed files with 40 additions and 50 deletions
Showing only changes of commit 718a32052d - Show all commits

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