diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts deleted file mode 100644 index a16ed6f..0000000 --- a/src/builders/ZodSchemaClassBuilder.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { Trait, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts" -import { AbstractClass } from "type-fest" -import { EmptyObject } from "type-fest/source/empty-object" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { JsonifiableZodSchemaObject } from "../traits/JsonifiableZodSchemaObject" -import { ZodSchemaObject } from "../traits/ZodSchemaObject" - - -export class ZodSchemaClassBuilder< - Superclass extends AbstractClass, - const Traits extends readonly Trait[], - Schemas extends object, -> { - declare ["constructor"]: typeof ZodSchemaClassBuilder - - constructor( - protected readonly expression: TraitExpressionBuilder, - protected readonly schemas: Schemas, - ) {} - - - schema< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ZodSchemaClassBuilder, - - props: { - schema: z.ZodObject - - schemaWithDefaultValues: ( - schema: z.ZodObject - ) => z.ZodObject - }, - ) { - const schema = props.schema - const schemaWithDefaultValues = props.schemaWithDefaultValues(props.schema) - - abstract class ZodSchemaObjectConstructor { - constructor(values: Values) { - Object.assign(this, values) - } - } - - return new this.constructor( - this.expression - .extends(ZodSchemaObjectConstructor as AbstractClass) - .expresses(ZodSchemaObject(schema, schemaWithDefaultValues)), - - { schema, schemaWithDefaultValues } as const, - ) - } - - jsonifiable< - S extends { - readonly schema: z.ZodObject, - readonly schemaWithDefaultValues: z.ZodObject, - jsonifySchema?: never - dejsonifySchema?: never - }, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - - 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, - >( - this: ZodSchemaClassBuilder, - readonly schemaWithDefaultValues: z.ZodObject, - jsonifySchema?: never - dejsonifySchema?: never - }>, - - props: { - jsonifySchema: ( - schema: z.ZodObject - ) => z.ZodObject - - dejsonifySchema: ( - schema: z.ZodObject - ) => 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, - jsonifySchema, - dejsonifySchema, - ) - ), - - { ...this.schemas as S, jsonifySchema, dejsonifySchema } as const, - ) - } - - - toExpression() { - return this.expression - } -} - - -export const zodSchemaClass = new ZodSchemaClassBuilder(expression, {}) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts deleted file mode 100644 index d78a3c4..0000000 --- a/src/builders/ZodSchemaClassExtender.ts +++ /dev/null @@ -1,196 +0,0 @@ -// import { expression } from "@thilawyn/traitify-ts" -// import { AbstractClass, Simplify } from "type-fest" -// import { JsonifiableObject } from "type-fest/source/jsonifiable" -// import { z } from "zod" -// import { JsonifiableZodSchemaAbstractClass } from "../shapes/JsonifiableZodSchemaClass" -// import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" -// import { Extend, Override, StaticMembers } from "../util" - - -// export class ZodSchemaClassExtender< -// Superclass extends AbstractClass, -// Subclass extends AbstractClass, -// > { -// declare ["constructor"]: typeof ZodSchemaClassExtender - -// constructor( -// readonly superclass: Superclass, -// readonly subclass: Subclass, -// ) {} - - -// schema< -// Super extends ZodSchemaAbstractClass, - -// SuperSchemaT extends z.ZodRawShape, -// SuperSchemaUnknownKeys extends z.UnknownKeysParam, -// SuperSchemaCatchall extends z.ZodTypeAny, - -// SuperValues extends object, -// SuperDefaultValues extends Partial, - -// SchemaT extends z.ZodRawShape, -// SchemaUnknownKeys extends z.UnknownKeysParam, -// SchemaCatchall extends z.ZodTypeAny, - -// Values extends SuperValues, -// DefaultValues extends Partial, -// >( -// this: ZodSchemaClassExtender< -// Super | ZodSchemaAbstractClass, -// any -// >, - -// props: { -// schema: (schema: Super["schema"]) => z.ZodObject -// defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues -// }, -// ) { -// const schema = props.schema(this.superclass.schema) -// const defaultValues = props.defaultValues(this.superclass.defaultValues) - -// class Schemas extends (this.superclass as AbstractClass) { -// static readonly schema = schema -// static readonly defaultValues = defaultValues -// } - -// return new this.constructor( -// this.superclass as Super, - -// Schemas as unknown as AbstractClass< -// Simplify< -// Extend<[InstanceType, Values]> -// >, - -// [values: Values] -// > & -// Simplify< -// Override<[ -// StaticMembers, -// StaticMembers, -// ]> -// > -// ) -// } - -// jsonifiable< -// /** Superclass jsonifiable schemas */ -// Super extends JsonifiableZodSchemaAbstractClass< -// any, - -// SuperJsonifySchemaT, -// SuperJsonifySchemaUnknownKeys, -// SuperJsonifySchemaCatchall, - -// SuperDejsonifySchemaT, -// SuperDejsonifySchemaUnknownKeys, -// SuperDejsonifySchemaCatchall, - -// SuperJsonifiedValues, -// SuperValues -// >, - -// SuperJsonifySchemaT extends z.ZodRawShape, -// SuperJsonifySchemaUnknownKeys extends z.UnknownKeysParam, -// SuperJsonifySchemaCatchall extends z.ZodTypeAny, - -// SuperDejsonifySchemaT extends z.ZodRawShape, -// SuperDejsonifySchemaUnknownKeys extends z.UnknownKeysParam, -// SuperDejsonifySchemaCatchall extends z.ZodTypeAny, - -// SuperJsonifiedValues extends JsonifiableObject, -// SuperValues extends object, - -// /** New schemas */ -// Self extends ZodSchemaAbstractClass, - -// SelfSchemaT extends z.ZodRawShape, -// SelfSchemaUnknownKeys extends z.UnknownKeysParam, -// SelfSchemaCatchall extends z.ZodTypeAny, - -// SelfValues extends object, -// SelfDefaultValues extends Partial, - -// /* New jsonifiable schemas */ -// 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 SuperJsonifiedValues, -// Values extends SelfValues, -// >( -// this: ZodSchemaClassExtender< -// Super | JsonifiableZodSchemaAbstractClass< -// any, - -// SuperJsonifySchemaT, -// SuperJsonifySchemaUnknownKeys, -// SuperJsonifySchemaCatchall, - -// SuperDejsonifySchemaT, -// SuperDejsonifySchemaUnknownKeys, -// SuperDejsonifySchemaCatchall, - -// SuperJsonifiedValues, -// SuperValues -// >, - -// Self | ZodSchemaAbstractClass -// >, - -// props: { -// jsonifySchema: ( -// schema: Self["schema"], -// jsonifySchema: Super["jsonifySchema"], -// ) => z.ZodObject - -// dejsonifySchema: ( -// schema: Self["schema"], -// dejsonifySchema: Super["dejsonifySchema"], -// ) => z.ZodObject -// }, -// ) { -// const jsonifySchema = props.jsonifySchema(this.subclass.schema, this.superclass.jsonifySchema) -// const dejsonifySchema = props.dejsonifySchema(this.subclass.schema, this.superclass.dejsonifySchema) - -// class JsonifiableSchemas extends (this.subclass as AbstractClass) { -// static readonly jsonifySchema = jsonifySchema -// readonly jsonifySchema = jsonifySchema -// static readonly dejsonifySchema = dejsonifySchema -// readonly dejsonifySchema = dejsonifySchema -// } - -// return new this.constructor( -// this.superclass as Super, - -// JsonifiableSchemas as unknown as AbstractClass< -// Simplify< -// Override<[InstanceType, JsonifiableSchemas]> -// >, - -// ConstructorParameters< -// ZodSchemaAbstractClass -// > -// > & -// Simplify< -// Override<[ -// StaticMembers, -// StaticMembers, -// ]> -// >, -// ) -// } - - -// toClass() { -// return this.subclass -// } - -// toExpressionBuilder() { -// return expression.extends(this.subclass) -// } -// } diff --git a/src/lib.ts b/src/lib.ts index ef4a60b..593f780 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -1,4 +1,5 @@ -export { ZodSchemaClassBuilder, zodSchemaClass } from "./builders/ZodSchemaClassBuilder" -export { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" +export { JsonifiedZodSchemaClass } from "./JsonifiedZodSchemaClass" +export { ZodSchemaClass } from "./ZodSchemaClass" +export { JsonifiedZodSchemaObject } from "./traits/JsonifiedZodSchemaObject" export { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" export { ZodSchemaObject, ZodSchemaObjectTrait } from "./traits/ZodSchemaObject" diff --git a/src/shapes/JsonifiableZodSchemaClass.ts b/src/shapes/JsonifiableZodSchemaClass.ts deleted file mode 100644 index 2f35971..0000000 --- a/src/shapes/JsonifiableZodSchemaClass.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { AbstractClass, Class } from "type-fest" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" - - -export type JsonifiableZodSchemaClass< - 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, -> = ( - Class & - JsonifiableZodSchemas< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - > -) - -export type JsonifiableZodSchemaAbstractClass< - 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, -> = ( - AbstractClass & - JsonifiableZodSchemas< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - > -) - -export type JsonifiableZodSchemas< - 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, -> = { - readonly jsonifySchema: z.ZodObject - readonly dejsonifySchema: z.ZodObject -} diff --git a/src/shapes/ZodSchemaClass.ts b/src/shapes/ZodSchemaClass.ts deleted file mode 100644 index 680c59a..0000000 --- a/src/shapes/ZodSchemaClass.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { AbstractClass, Class } from "type-fest" -import { z } from "zod" - - -export type ZodSchemaClass< - Instance extends Values, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, -> = ( - Class & - ZodSchemas -) - -export type ZodSchemaAbstractClass< - Instance extends Values, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, -> = ( - AbstractClass & - ZodSchemas -) - -export type ZodSchemas< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, -> = { - readonly schema: z.ZodObject - readonly schemaWithDefaultValues: z.ZodObject -} diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts deleted file mode 100644 index c747a8b..0000000 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { ImplStatic, expression } from "@thilawyn/traitify-ts" -import { Class } from "type-fest" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { parseZodSchemaEffect } from "../util" -import { ZodSchemaObject } from "./ZodSchemaObject" - - -export const JsonifiableZodSchemaObject = < - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - - 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, ->( - schema: z.ZodObject, - schemaWithDefaultValues: z.ZodObject, - jsonifySchema: z.ZodObject, - dejsonifySchema: z.ZodObject, -) => expression - .expresses(ZodSchemaObject(schema, schemaWithDefaultValues)) - .build() - .subtrait() - .implement(Super => class JsonifiableZodSchemaObject extends Super { - declare ["constructor"]: typeof JsonifiableZodSchemaObject - - static readonly jsonifySchema = jsonifySchema - static readonly dejsonifySchema = dejsonifySchema - - - jsonify(params?: Partial) { - return this.constructor.jsonifySchema.parse(this, params) - } - - jsonifyPromise(params?: Partial) { - return this.constructor.jsonifySchema.parseAsync(this, params) - } - - jsonifyEffect(params?: Partial) { - return parseZodSchemaEffect( - this.constructor.jsonifySchema, - this, - params, - ) - } - - - static dejsonify< - Instance extends Values - >( - this: ( - Class & - ImplStatic - ), - values: JsonifiedValues, - params?: Partial, - ) { - return this - .transform(this.dejsonifySchema) - .parse(values, params) - } - - static dejsonifyPromise< - Instance extends Values - >( - this: ( - Class & - ImplStatic - ), - values: JsonifiedValues, - params?: Partial, - ) { - return this - .transform(this.dejsonifySchema) - .parseAsync(values, params) - } - - static dejsonifyEffect< - Instance extends Values - >( - this: ( - Class & - ImplStatic - ), - values: JsonifiedValues, - params?: Partial, - ) { - return parseZodSchemaEffect( - this.transform(this.dejsonifySchema), - values, - params, - ) - } - }) - .build()