From ec2b940f5cd08803d403c7a58691ba0b41885b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 00:11:06 +0100 Subject: [PATCH] ZodSchemaClass work --- src/ZodSchemaClass.ts | 32 +++++++++++++------------------- src/tests.ts | 10 +++++----- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 7de5ed8..1a11590 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,5 +1,5 @@ import { Trait, TraitExpressionBuilder } from "@thilawyn/traitify-ts" -import { AbstractClass, Simplify } from "type-fest" +import { AbstractClass } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { ZodSchemaAbstractClass } from "./shapes/ZodSchemaClass" @@ -7,7 +7,7 @@ import { DejsonifiableZodSchemaObject } from "./traits/DejsonifiableZodSchemaObj import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" import { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" -import { Extend, StaticMembers } from "./util" +import { StaticMembers } from "./util" export class ZodSchemaClassBuilder< @@ -103,25 +103,17 @@ extends TraitExpressionBuilder { >, props: { - jsonifySchema: (props: { - schema: z.ZodObject - shape: SchemaT - }) => z.ZodObject + jsonifySchema: ( + schema: z.ZodObject + ) => z.ZodObject - dejsonifySchema: (props: { - schema: z.ZodObject - shape: SchemaT - }) => z.ZodObject + dejsonifySchema: ( + schema: z.ZodObject + ) => z.ZodObject }, ) { - const jsonifySchema = props.jsonifySchema({ - schema: this.expressionSuperclass.schema, - shape: this.expressionSuperclass.schema.shape, - }) - const dejsonifySchema = props.dejsonifySchema({ - schema: this.expressionSuperclass.schema, - shape: this.expressionSuperclass.schema.shape, - }) + const jsonifySchema = props.jsonifySchema(this.expressionSuperclass.schema) + const dejsonifySchema = props.dejsonifySchema(this.expressionSuperclass.schema) class JsonifiableSchemas extends (this.expressionSuperclass as AbstractClass) { static readonly jsonifySchema = jsonifySchema @@ -134,7 +126,9 @@ extends TraitExpressionBuilder { JsonifiableSchemas as unknown as ( AbstractClass< InstanceType & JsonifiableSchemas, - ConstructorParameters + + // TODO: for some reason, ConstructorParameters does not work here. Maybe try to find a fix? + ConstructorParameters> > & StaticMembers & StaticMembers diff --git a/src/tests.ts b/src/tests.ts index 36fbdd6..4a695f3 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -18,12 +18,12 @@ const exp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) defaultValues: { id: -1n }, }) .jsonifiable({ - jsonifySchema: ({ schema, shape }) => schema.extend({ - id: jsonify.bigint(shape.id) + jsonifySchema: s => s.extend({ + id: jsonify.bigint(s.shape.id) }), - dejsonifySchema: ({ schema, shape }) => schema.extend({ - id: dejsonify.bigint(shape.id) + dejsonifySchema: s => s.extend({ + id: dejsonify.bigint(s.shape.id) }), }) .expresses(ObservableZodSchemaObject) @@ -35,7 +35,7 @@ class User extends exp.extends implements Implements {} User.defaultValues const inst = User.create({ id: 1n, name: "" }) console.log(inst) -inst.jsonify() +const jsonifiedUser = inst.jsonify() class SubTest extends User.extend({