diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index 5c09c25..32d09df 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -1,9 +1,8 @@ -import { Trait, TraitExpression, TraitExpressionBuilder } from "@thilawyn/traitify-ts" +import { Trait, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts" import { AbstractClass } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" -import { DejsonifiableZodSchemaObject } from "../traits/DejsonifiableZodSchemaObject" import { JsonifiableZodSchemaObject } from "../traits/JsonifiableZodSchemaObject" import { ZodSchemaObject } from "../traits/ZodSchemaObject" import { StaticMembers } from "../util" @@ -105,36 +104,18 @@ export class ZodSchemaClassBuilder< ) => z.ZodObject }, ) { - const jsonifySchema = props.jsonifySchema(this.expression.expressionSuperclass.schema) - const dejsonifySchema = props.dejsonifySchema(this.expression.expressionSuperclass.schema) - - class JsonifiableSchemas extends (this.expression.expressionSuperclass as AbstractClass) { - static readonly jsonifySchema = jsonifySchema - readonly jsonifySchema = jsonifySchema - static readonly dejsonifySchema = dejsonifySchema - readonly dejsonifySchema = dejsonifySchema - } - return new this.constructor( - JsonifiableSchemas as unknown as ( - AbstractClass< - Instance & JsonifiableSchemas, - - // TODO: for some reason, ConstructorParameters does not work here. Maybe try to find a fix? - ConstructorParameters> - > & - StaticMembers & - StaticMembers - ), - - [ - ...this.expressionTraits, - JsonifiableZodSchemaObject, - DejsonifiableZodSchemaObject, - ], + this.expression.expresses( + JsonifiableZodSchemaObject( + this.expression.expressionSuperclass.schema, + this.expression.expressionSuperclass.schemaWithDefaultValues, + props.jsonifySchema(this.expression.expressionSuperclass.schema), + props.dejsonifySchema(this.expression.expressionSuperclass.schema), + ) + ) ) } } -export const zodSchemaClass = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) +export const zodSchemaClass = new ZodSchemaClassBuilder(expression) diff --git a/src/tests.ts b/src/tests.ts index e272e30..296e483 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -18,6 +18,15 @@ const exp = zodSchemaClass id: s.shape.id.default(-1n), }), }) + .jsonifiable({ + jsonifySchema: s => s.extend({ + + }), + + dejsonifySchema: s => s.extend({ + + }), + }) .expression .expresses(MobXObservableZodSchemaObject) .build()