From 2cfe4fc54e4b2368ee0836404468235e6749c87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 03:31:51 +0100 Subject: [PATCH] ZodSchemaClassBuilder work --- src/builders/ZodSchemaClassBuilder.ts | 23 ++-- src/traits/DejsonifiableZodSchemaObject.ts | 122 --------------------- 2 files changed, 11 insertions(+), 134 deletions(-) delete mode 100644 src/traits/DejsonifiableZodSchemaObject.ts diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index e0f5d50..a16ed6f 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -42,6 +42,9 @@ export class ZodSchemaClassBuilder< ) => z.ZodObject }, ) { + const schema = props.schema + const schemaWithDefaultValues = props.schemaWithDefaultValues(props.schema) + abstract class ZodSchemaObjectConstructor { constructor(values: Values) { Object.assign(this, values) @@ -51,12 +54,9 @@ export class ZodSchemaClassBuilder< return new this.constructor( this.expression .extends(ZodSchemaObjectConstructor as AbstractClass) - .expresses(ZodSchemaObject(props.schema, props.schemaWithDefaultValues(props.schema))), + .expresses(ZodSchemaObject(schema, schemaWithDefaultValues)), - { - schema: props.schema, - schemaWithDefaultValues: props.schemaWithDefaultValues(props.schema), - } as const, + { schema, schemaWithDefaultValues } as const, ) } @@ -106,21 +106,20 @@ export class ZodSchemaClassBuilder< ) => z.ZodObject }, ) { + const jsonifySchema = props.jsonifySchema(this.schemas.schema) + const dejsonifySchema = props.dejsonifySchema(this.schemas.schema) + return new this.constructor( this.expression.expresses( JsonifiableZodSchemaObject( this.schemas.schema, this.schemas.schemaWithDefaultValues, - props.jsonifySchema(this.schemas.schema), - props.dejsonifySchema(this.schemas.schema), + jsonifySchema, + dejsonifySchema, ) ), - { - ...this.schemas as S, - jsonifySchema: props.jsonifySchema(this.schemas.schema), - dejsonifySchema: props.dejsonifySchema(this.schemas.schema), - } as const, + { ...this.schemas as S, jsonifySchema, dejsonifySchema } as const, ) } diff --git a/src/traits/DejsonifiableZodSchemaObject.ts b/src/traits/DejsonifiableZodSchemaObject.ts deleted file mode 100644 index cda0026..0000000 --- a/src/traits/DejsonifiableZodSchemaObject.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { trait } from "@thilawyn/traitify-ts" -import { Effect } from "effect" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { JsonifiableZodSchemaClass } from "../shapes/JsonifiableZodSchemaClass" -import { parseZodTypeEffect } from "../util" - - -export const DejsonifiableZodSchemaObject = trait - .implement(Super => class DejsonifiableZodSchemaObject extends Super { - static dejsonify< - Instance extends Values, - - JsonifySchemaT extends z.ZodRawShape, - JsonifySchemaUnknownKeys extends z.UnknownKeysParam, - JsonifySchemaCatchall extends z.ZodTypeAny, - - DejsonifySchemaT extends z.ZodRawShape, - DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, - DejsonifySchemaCatchall extends z.ZodTypeAny, - - JsonifiedValues extends JsonifiableObject, - Values extends object, - >( - this: JsonifiableZodSchemaClass< - Instance, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - >, - - values: JsonifiedValues, - params?: Partial, - ) { - return new this( - this.dejsonifySchema.parse(values, params) - ) - } - - static async dejsonifyPromise< - Instance extends Values, - - JsonifySchemaT extends z.ZodRawShape, - JsonifySchemaUnknownKeys extends z.UnknownKeysParam, - JsonifySchemaCatchall extends z.ZodTypeAny, - - DejsonifySchemaT extends z.ZodRawShape, - DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, - DejsonifySchemaCatchall extends z.ZodTypeAny, - - JsonifiedValues extends JsonifiableObject, - Values extends object, - >( - this: JsonifiableZodSchemaClass< - Instance, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - >, - - values: JsonifiedValues, - params?: Partial, - ) { - return new this( - await this.dejsonifySchema.parseAsync(values, params) - ) - } - - static dejsonifyEffect< - Instance extends Values, - - JsonifySchemaT extends z.ZodRawShape, - JsonifySchemaUnknownKeys extends z.UnknownKeysParam, - JsonifySchemaCatchall extends z.ZodTypeAny, - - DejsonifySchemaT extends z.ZodRawShape, - DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, - DejsonifySchemaCatchall extends z.ZodTypeAny, - - JsonifiedValues extends JsonifiableObject, - Values extends object, - >( - this: JsonifiableZodSchemaClass< - Instance, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - >, - - values: JsonifiedValues, - params?: Partial, - ) { - return parseZodTypeEffect(this.dejsonifySchema, values, params).pipe( - Effect.map(values => new this(values)), - ) - } - }) - .build()