From fc95a5d53a7392086c9a5610f45ae8769f6bfc5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 20 Jan 2024 22:02:14 +0100 Subject: [PATCH 001/136] Moved current version to legacy --- package.json | 2 +- src/SchemableClass.ts | 54 ---- src/index.ts | 5 - src/jsonifiable/JsonifiableSchemableClass.ts | 80 ------ src/jsonifiable/dejsonifySchemable.ts | 213 ---------------- src/jsonifiable/index.ts | 4 - .../makeJsonifiableSchemableClass.ts | 134 ---------- src/jsonifiable/schema/bigint.ts | 28 --- src/jsonifiable/schema/date.ts | 28 --- src/jsonifiable/schema/decimal.ts | 33 --- src/jsonifiable/schema/index.ts | 4 - src/jsonifiable/schema/schemable.ts | 139 ----------- src/legacy/SchemableClass.ts | 122 ++++----- src/{ => legacy}/defineDefaultValues.ts | 0 src/{ => legacy}/extendSchemableClass.ts | 2 +- src/legacy/index.ts | 2 + .../jsonifiable/JsonifiableSchemableClass.ts | 124 +++++----- src/legacy/jsonifiable/dejsonifySchemable.ts | 232 +++++++++++++++--- .../makeJsonifiableSchemableClass.ts | 114 ++++++--- src/legacy/jsonifiable/schema/bigint.ts | 38 +-- src/legacy/jsonifiable/schema/date.ts | 38 +-- src/legacy/jsonifiable/schema/decimal.ts | 42 ++-- src/legacy/jsonifiable/schema/schemable.ts | 152 ++++++++++-- src/legacy/makeSchemableClass.ts | 115 +++++---- src/legacy/newSchemable.ts | 168 ++++++++----- src/{ => legacy}/observable/index.ts | 0 .../makeSchemableClassObservable.ts | 0 src/legacy/tests.ts | 64 ----- src/legacy/util.ts | 82 ------- src/makeSchemableClass.ts | 82 ------- src/newSchemable.ts | 127 ---------- src/tests.ts | 63 ----- 32 files changed, 782 insertions(+), 1509 deletions(-) delete mode 100644 src/SchemableClass.ts delete mode 100644 src/index.ts delete mode 100644 src/jsonifiable/JsonifiableSchemableClass.ts delete mode 100644 src/jsonifiable/dejsonifySchemable.ts delete mode 100644 src/jsonifiable/index.ts delete mode 100644 src/jsonifiable/makeJsonifiableSchemableClass.ts delete mode 100644 src/jsonifiable/schema/bigint.ts delete mode 100644 src/jsonifiable/schema/date.ts delete mode 100644 src/jsonifiable/schema/decimal.ts delete mode 100644 src/jsonifiable/schema/index.ts delete mode 100644 src/jsonifiable/schema/schemable.ts rename src/{ => legacy}/defineDefaultValues.ts (100%) rename src/{ => legacy}/extendSchemableClass.ts (98%) rename src/{ => legacy}/observable/index.ts (100%) rename src/{ => legacy}/observable/makeSchemableClassObservable.ts (100%) delete mode 100644 src/legacy/tests.ts delete mode 100644 src/legacy/util.ts delete mode 100644 src/makeSchemableClass.ts delete mode 100644 src/newSchemable.ts diff --git a/package.json b/package.json index 2ab619a..fdbbe23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thilawyn/schemable-class", - "version": "0.1.1", + "version": "0.1.2", "type": "module", "publishConfig": { "registry": "https://git.jvalver.de/api/packages/thilawyn/npm/" diff --git a/src/SchemableClass.ts b/src/SchemableClass.ts deleted file mode 100644 index f54a32f..0000000 --- a/src/SchemableClass.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { z } from "zod" -import { Class, ClassType } from "./util" - - -export type SchemableClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, - - Type extends ClassType = "AbstractClass" -> = ( - Class< - Type, - - { - readonly schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - readonly defaultValues: DefaultValues - } & Values, - - Parameters<(values: Values) => never> - > & { - readonly schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - readonly defaultValues: DefaultValues - } -) - - -export type SchemableClassInput< - Values extends {}, - DefaultValues extends Partial, -> = { - [Key in Exclude]: Values[Key] -} & { - [Key in keyof DefaultValues]?: Key extends keyof Values - ? Values[Key] - : never -} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 4b4c248..0000000 --- a/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./SchemableClass" -export * from "./defineDefaultValues" -export * from "./extendSchemableClass" -export * from "./makeSchemableClass" -export * from "./newSchemable" diff --git a/src/jsonifiable/JsonifiableSchemableClass.ts b/src/jsonifiable/JsonifiableSchemableClass.ts deleted file mode 100644 index da145d6..0000000 --- a/src/jsonifiable/JsonifiableSchemableClass.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Effect } from "effect" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { SchemableClass } from ".." -import { Class, ClassType } from "../util" - - -export type JsonifiableSchemableClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, - - Type extends ClassType = "AbstractClass" -> = ( - SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - Type - > & - - Class< - Type, - - { - readonly jsonifySchema: z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > - - readonly dejsonifySchema: z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > - - jsonify(): JsonifiedValues - jsonifyPromise(): Promise - jsonifyEffect(): Effect.Effect, JsonifiedValues> - }, - - any[] - > & { - readonly jsonifySchema: z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > - - readonly dejsonifySchema: z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > - } -) diff --git a/src/jsonifiable/dejsonifySchemable.ts b/src/jsonifiable/dejsonifySchemable.ts deleted file mode 100644 index b8e7f80..0000000 --- a/src/jsonifiable/dejsonifySchemable.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { Effect, pipe } from "effect" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { JsonifiableSchemableClass } from "." -import { parseZodTypeEffect } from "../util" - - -export function dejsonifySchemable< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - values: JsonifiedValues, - params?: Partial, -) { - return new class_( - class_.dejsonifySchema.parse(values, params) - ) as InstanceType -} - - -export async function dejsonifySchemablePromise< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - values: JsonifiedValues, - params?: Partial, -) { - return new class_( - await class_.dejsonifySchema.parseAsync(values, params) - ) as InstanceType -} - - -export function dejsonifySchemableEffect< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - values: JsonifiedValues, - params?: Partial, -) { - return pipe( - parseZodTypeEffect(class_.dejsonifySchema, values, params), - Effect.map(values => new class_(values) as InstanceType), - ) -} diff --git a/src/jsonifiable/index.ts b/src/jsonifiable/index.ts deleted file mode 100644 index 74e7d23..0000000 --- a/src/jsonifiable/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./JsonifiableSchemableClass" -export * from "./dejsonifySchemable" -export * from "./makeJsonifiableSchemableClass" -export * from "./schema" diff --git a/src/jsonifiable/makeJsonifiableSchemableClass.ts b/src/jsonifiable/makeJsonifiableSchemableClass.ts deleted file mode 100644 index 691a3f2..0000000 --- a/src/jsonifiable/makeJsonifiableSchemableClass.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { Effect } from "effect" -import { AbstractClass, Class as ConcreteClass } from "type-fest" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { SchemableClass } from ".." -import { StaticMembers, parseZodTypeEffect } from "../util" - - -export function makeJsonifiableSchemableClass< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - extend: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues - >, - - props: { - jsonifySchema: (props: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - shape: SchemaT - }) => z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > - - dejsonifySchema: (props: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - shape: SchemaT - }) => z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > - }, -) { - type Class = ( - C extends ConcreteClass - ? ConcreteClass - : AbstractClass - ) - - const jsonifySchema = props.jsonifySchema({ - schema: extend.schema, - shape: extend.schema.shape, - }) - - const dejsonifySchema = props.dejsonifySchema({ - schema: extend.schema, - shape: extend.schema.shape, - }) - - return class extends extend { - static readonly jsonifySchema = jsonifySchema - readonly jsonifySchema = jsonifySchema - - static readonly dejsonifySchema = dejsonifySchema - readonly dejsonifySchema = dejsonifySchema - - jsonify() { - return this.jsonifySchema.parse(this) - } - - jsonifyPromise() { - return this.jsonifySchema.parseAsync(this) - } - - jsonifyEffect() { - return parseZodTypeEffect(this.jsonifySchema, this) - } - } as unknown as ( - Class< - InstanceType & { - readonly jsonifySchema: z.ZodObject, - readonly dejsonifySchema: z.ZodObject, - - jsonify(): JsonifiedValues - jsonifyPromise(): Promise - jsonifyEffect(): Effect.Effect, JsonifiedValues> - }, - - ConstructorParameters - > & - - StaticMembers & { - readonly jsonifySchema: z.ZodObject, - readonly dejsonifySchema: z.ZodObject, - } - ) -} diff --git a/src/jsonifiable/schema/bigint.ts b/src/jsonifiable/schema/bigint.ts deleted file mode 100644 index 76a605d..0000000 --- a/src/jsonifiable/schema/bigint.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Opaque } from "type-fest" -import { z } from "zod" -import { identity } from "../../util" - - -export type JsonifiedBigInt = Opaque - - -export function jsonifyBigIntSchema(schema: S) { - return schema.transform(v => v.toString() as JsonifiedBigInt) -} - -export function dejsonifyBigIntSchema(schema: S) { - return z - .custom(identity) - .pipe(z - .string() - .transform(v => { - try { - return BigInt(v) - } - catch (e) { - return v - } - }) - .pipe(schema) - ) -} diff --git a/src/jsonifiable/schema/date.ts b/src/jsonifiable/schema/date.ts deleted file mode 100644 index c70b2ed..0000000 --- a/src/jsonifiable/schema/date.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Opaque } from "type-fest" -import { z } from "zod" -import { identity } from "../../util" - - -export type JsonifiedDate = Opaque - - -export function jsonifyDateSchema(schema: S) { - return schema.transform(v => v.toString() as JsonifiedDate) -} - -export function dejsonifyDateSchema(schema: S) { - return z - .custom(identity) - .pipe(z - .string() - .transform(v => { - try { - return new Date(v) - } - catch (e) { - return v - } - }) - .pipe(schema) - ) -} diff --git a/src/jsonifiable/schema/decimal.ts b/src/jsonifiable/schema/decimal.ts deleted file mode 100644 index be387ee..0000000 --- a/src/jsonifiable/schema/decimal.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Decimal } from "decimal.js" -import { Opaque } from "type-fest" -import { z } from "zod" -import { identity } from "../../util" - - -export type JsonifiedDecimal = Opaque - - -export function jsonifyDecimalSchema< - S extends z.ZodType ->(schema: S) { - return schema.transform(v => v.toJSON() as JsonifiedDecimal) -} - -export function dejsonifyDecimalSchema< - S extends z.ZodType ->(schema: S) { - return z - .custom(identity) - .pipe(z - .string() - .transform(v => { - try { - return new Decimal(v) - } - catch (e) { - return v - } - }) - .pipe(schema) - ) -} diff --git a/src/jsonifiable/schema/index.ts b/src/jsonifiable/schema/index.ts deleted file mode 100644 index 08ecef8..0000000 --- a/src/jsonifiable/schema/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./bigint" -export * from "./date" -export * from "./decimal" -export * from "./schemable" diff --git a/src/jsonifiable/schema/schemable.ts b/src/jsonifiable/schema/schemable.ts deleted file mode 100644 index b0a72bc..0000000 --- a/src/jsonifiable/schema/schemable.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { JsonifiableSchemableClass } from ".." - - -export function jsonifySchemableSchema< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, - - S extends z.ZodType, z.ZodTypeDef, InstanceType>, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - schema: S, -) { - return schema.pipe(class_.jsonifySchema) -} - - -export function dejsonifySchemableSchema< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, - - S extends z.ZodType, z.ZodTypeDef, InstanceType>, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - schema: S, -) { - return class_.dejsonifySchema.transform(v => new class_(v)).pipe(schema) -} diff --git a/src/legacy/SchemableClass.ts b/src/legacy/SchemableClass.ts index f85216c..5716471 100644 --- a/src/legacy/SchemableClass.ts +++ b/src/legacy/SchemableClass.ts @@ -1,90 +1,54 @@ -import { Class } from "type-fest" import { z } from "zod" +import { Class, ClassType } from "../util" -/** - * Configuration for creating a schemable object with validation schemas. - * @template Values - The type representing the expected values. - * @template Input - The type representing the input values. - * @template SchemaT - The type representing the base validation schema. - * @template SchemaUnknownKeys - The type representing the unknown keys behavior in the base validation schema. - * @template SchemaCatchall - The type representing the catchall behavior in the base validation schema. - * @template SchemaWithDefaultValuesT - The type representing the validation schema with default values. - * @template SchemaWithDefaultValuesUnknownKeys - The type representing the unknown keys behavior in the validation schema with default values. - * @template SchemaWithDefaultValuesCatchall - The type representing the catchall behavior in the validation schema with default values. - */ -export type SchemableConfig< - Values extends {} = {}, - Input extends {} = {}, - - SchemaT extends z.ZodRawShape = z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam = z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny = z.ZodTypeAny, - - SchemaWithDefaultValuesT extends z.ZodRawShape = z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam = z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny = z.ZodTypeAny, -> = { - readonly values: Values - readonly input: Input - - readonly schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - readonly schemaWithDefaultValues: z.ZodObject< - SchemaWithDefaultValuesT, - SchemaWithDefaultValuesUnknownKeys, - SchemaWithDefaultValuesCatchall, - Values, - Input - > -} - - -/** - * Represents a class with validation schemas. - * @template $Config - The configuration type for the schemable object. - */ export type SchemableClass< - $Config extends SchemableConfig + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + + Type extends ClassType = "AbstractClass" > = ( Class< - SchemableObject<$Config>, - SchemableClassConstructorParams<$Config> + Type, + + { + readonly schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > + + readonly defaultValues: DefaultValues + } & Values, + + Parameters<(values: Values) => never> > & { - readonly $schemableConfig: $Config - readonly schema: $Config["schema"] - readonly schemaWithDefaultValues: $Config["schemaWithDefaultValues"] + readonly schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > + + readonly defaultValues: DefaultValues } ) -/** - * Represents the constructor parameters for the schemable object class. - * @template $Config - The configuration type for the schemable object. - */ -export type SchemableClassConstructorParams< - $Config extends SchemableConfig -> = ( - Parameters< - (data: $Config["values"]) => void - > -) -/** - * Represents an object with validation schemas. - * @template $Config - The configuration type for the schemable object. - */ -export type SchemableObject< - $Config extends SchemableConfig -> = ( - { - readonly $schemableConfig: $Config - readonly schema: $Config["schema"] - readonly schemaWithDefaultValues: $Config["schemaWithDefaultValues"] - } & $Config["values"] -) +export type SchemableClassInput< + Values extends {}, + DefaultValues extends Partial, +> = { + [Key in Exclude]: Values[Key] +} & { + [Key in keyof DefaultValues]?: Key extends keyof Values + ? Values[Key] + : never +} diff --git a/src/defineDefaultValues.ts b/src/legacy/defineDefaultValues.ts similarity index 100% rename from src/defineDefaultValues.ts rename to src/legacy/defineDefaultValues.ts diff --git a/src/extendSchemableClass.ts b/src/legacy/extendSchemableClass.ts similarity index 98% rename from src/extendSchemableClass.ts rename to src/legacy/extendSchemableClass.ts index bb392e1..2c630b9 100644 --- a/src/extendSchemableClass.ts +++ b/src/legacy/extendSchemableClass.ts @@ -1,7 +1,7 @@ import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag, SchemableClass } from "." -import { StaticMembers } from "./util" +import { StaticMembers } from "../util" export function extendSchemableClass< diff --git a/src/legacy/index.ts b/src/legacy/index.ts index 17d8b56..4b4c248 100644 --- a/src/legacy/index.ts +++ b/src/legacy/index.ts @@ -1,3 +1,5 @@ export * from "./SchemableClass" +export * from "./defineDefaultValues" +export * from "./extendSchemableClass" export * from "./makeSchemableClass" export * from "./newSchemable" diff --git a/src/legacy/jsonifiable/JsonifiableSchemableClass.ts b/src/legacy/jsonifiable/JsonifiableSchemableClass.ts index c0dc3c0..b0612c4 100644 --- a/src/legacy/jsonifiable/JsonifiableSchemableClass.ts +++ b/src/legacy/jsonifiable/JsonifiableSchemableClass.ts @@ -1,66 +1,80 @@ import { Effect } from "effect" -import { Class } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" -import { SchemableClassConstructorParams, SchemableConfig } from ".." - - -export type JsonifiableSchemableConfig< - $SchemableConfig extends SchemableConfig = SchemableConfig, - - JsonifiedValues extends JsonifiableObject = {}, - - JsonifySchemaT extends z.ZodRawShape = z.ZodRawShape, - JsonifySchemaUnknownKeys extends z.UnknownKeysParam = z.UnknownKeysParam, - JsonifySchemaCatchall extends z.ZodTypeAny = z.ZodTypeAny, - - DejsonifySchemaT extends z.ZodRawShape = z.ZodRawShape, - DejsonifySchemaUnknownKeys extends z.UnknownKeysParam = z.UnknownKeysParam, - DejsonifySchemaCatchall extends z.ZodTypeAny = z.ZodTypeAny, -> = { - readonly $schemableConfig: $SchemableConfig - - readonly jsonifiedValues: JsonifiedValues - - readonly jsonifySchema: z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - $SchemableConfig["values"] - > - - readonly dejsonifySchema: z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - $SchemableConfig["values"], - JsonifiedValues - > -} +import { SchemableClass } from ".." +import { Class, ClassType } from "../../util" export type JsonifiableSchemableClass< - $Config extends JsonifiableSchemableConfig + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues 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, + + Type extends ClassType = "AbstractClass" > = ( + SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + Type + > & + Class< - JsonifiableSchemableObject<$Config>, - SchemableClassConstructorParams<$Config["$schemableConfig"]> + Type, + + { + readonly jsonifySchema: z.ZodObject< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + JsonifiedValues, + Values + > + + readonly dejsonifySchema: z.ZodObject< + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + Values, + JsonifiedValues + > + + jsonify(): JsonifiedValues + jsonifyPromise(): Promise + jsonifyEffect(): Effect.Effect, JsonifiedValues> + }, + + any[] > & { - readonly $jsonifiableSchemableConfig: $Config - readonly jsonifySchema: $Config["jsonifySchema"] - readonly dejsonifySchema: $Config["dejsonifySchema"] + readonly jsonifySchema: z.ZodObject< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + JsonifiedValues, + Values + > + + readonly dejsonifySchema: z.ZodObject< + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + Values, + JsonifiedValues + > } ) - -export type JsonifiableSchemableObject< - $Config extends JsonifiableSchemableConfig -> = { - readonly $jsonifiableSchemableConfig: $Config - readonly jsonifySchema: $Config["jsonifySchema"] - readonly dejsonifySchema: $Config["dejsonifySchema"] - - jsonify(): $Config["jsonifiedValues"] - jsonifyPromise(): Promise<$Config["jsonifiedValues"]> - jsonifyEffect(): Effect.Effect, $Config["jsonifiedValues"]> -} diff --git a/src/legacy/jsonifiable/dejsonifySchemable.ts b/src/legacy/jsonifiable/dejsonifySchemable.ts index 35ceafb..b5395db 100644 --- a/src/legacy/jsonifiable/dejsonifySchemable.ts +++ b/src/legacy/jsonifiable/dejsonifySchemable.ts @@ -1,47 +1,213 @@ import { Effect, pipe } from "effect" +import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" -import { JsonifiableSchemableClass, JsonifiableSchemableConfig } from "." -import { parseZodTypeEffect } from "../util" +import { JsonifiableSchemableClass } from "." +import { parseZodTypeEffect } from "../../util" -export const dejsonifySchemable = < - C extends JsonifiableSchemableClass<$Config>, - $Config extends JsonifiableSchemableConfig, +export function dejsonifySchemable< + C extends JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues 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, >( - class_: C | JsonifiableSchemableClass<$Config>, - values: $Config["jsonifiedValues"], + class_: C | JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + values: JsonifiedValues, params?: Partial, -) => - new class_(class_.dejsonifySchema.parse(values, params)) as InstanceType +) { + return new class_( + class_.dejsonifySchema.parse(values, params) + ) as InstanceType +} -export const dejsonifySchemablePromise = async < - C extends JsonifiableSchemableClass<$Config>, - $Config extends JsonifiableSchemableConfig, +export async function dejsonifySchemablePromise< + C extends JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues 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, >( - class_: C | JsonifiableSchemableClass<$Config>, - values: $Config["jsonifiedValues"], + class_: C | JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + values: JsonifiedValues, params?: Partial, -) => - new class_(await class_.dejsonifySchema.parseAsync(values, params)) as InstanceType +) { + return new class_( + await class_.dejsonifySchema.parseAsync(values, params) + ) as InstanceType +} -export const dejsonifySchemableEffect = < - C extends JsonifiableSchemableClass<$Config>, - $Config extends JsonifiableSchemableConfig, +export function dejsonifySchemableEffect< + C extends JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues 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, >( - class_: C | JsonifiableSchemableClass<$Config>, - values: $Config["jsonifiedValues"], - params?: Partial, -) => pipe( - parseZodTypeEffect< - z.output, - z.input - >( - class_.dejsonifySchema, - values, - params, - ), + class_: C | JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, - Effect.map(values => new class_(values) as InstanceType), -) + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + values: JsonifiedValues, + params?: Partial, +) { + return pipe( + parseZodTypeEffect(class_.dejsonifySchema, values, params), + Effect.map(values => new class_(values) as InstanceType), + ) +} diff --git a/src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts b/src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts index a956b0b..d8b47ff 100644 --- a/src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts +++ b/src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts @@ -1,16 +1,26 @@ -import { Class } from "type-fest" +import { Effect } from "effect" +import { AbstractClass, Class as ConcreteClass } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" -import { JsonifiableSchemableClass, JsonifiableSchemableConfig, JsonifiableSchemableObject } from "." -import { SchemableClass, SchemableConfig } from ".." -import { StaticMembers, parseZodTypeEffect } from "../util" +import { SchemableClass } from ".." +import { StaticMembers, parseZodTypeEffect } from "../../util" export function makeJsonifiableSchemableClass< - C extends SchemableClass<$SchemableConfig>, - $SchemableConfig extends SchemableConfig, + C extends SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues + >, - JsonifiedValues extends JsonifiableObject, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, @@ -19,59 +29,77 @@ export function makeJsonifiableSchemableClass< DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, + + JsonifiedValues extends JsonifiableObject, >( - class_: C | SchemableClass<$SchemableConfig>, + extend: C | SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues + >, props: { jsonifySchema: (props: { - schema: $SchemableConfig["schema"] - s: $SchemableConfig["schema"]["shape"] + schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > + + shape: SchemaT }) => z.ZodObject< JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, JsonifiedValues, - $SchemableConfig["values"] + Values > dejsonifySchema: (props: { - schema: $SchemableConfig["schema"] - s: $SchemableConfig["schema"]["shape"] + schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > + + shape: SchemaT }) => z.ZodObject< DejsonifySchemaT, DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, - $SchemableConfig["values"], + Values, JsonifiedValues > }, ) { + type Class = ( + C extends ConcreteClass + ? ConcreteClass + : AbstractClass + ) const jsonifySchema = props.jsonifySchema({ - schema: class_.schema, - s: class_.schema.shape, + schema: extend.schema, + shape: extend.schema.shape, }) const dejsonifySchema = props.dejsonifySchema({ - schema: class_.schema, - s: class_.schema.shape, + schema: extend.schema, + shape: extend.schema.shape, }) - const $jsonifiableSchemableConfig = { - $schemableConfig: class_.$schemableConfig, - jsonifiedValues: undefined as unknown as JsonifiedValues, - jsonifySchema: undefined as unknown as typeof jsonifySchema, - dejsonifySchema: undefined as unknown as typeof dejsonifySchema, - } as const satisfies JsonifiableSchemableConfig + return class extends extend { + static readonly jsonifySchema = jsonifySchema + readonly jsonifySchema = jsonifySchema - const jsonifiableClass = class JsonifiableSchemableObject extends class_ { - static readonly $jsonifiableSchemableConfig = $jsonifiableSchemableConfig - static readonly jsonifySchema = jsonifySchema - static readonly dejsonifySchema = dejsonifySchema - - readonly $jsonifiableSchemableConfig = $jsonifiableSchemableConfig - readonly jsonifySchema = jsonifySchema - readonly dejsonifySchema = dejsonifySchema + static readonly dejsonifySchema = dejsonifySchema + readonly dejsonifySchema = dejsonifySchema jsonify() { return this.jsonifySchema.parse(this) @@ -84,15 +112,23 @@ export function makeJsonifiableSchemableClass< jsonifyEffect() { return parseZodTypeEffect(this.jsonifySchema, this) } - } satisfies JsonifiableSchemableClass - - return jsonifiableClass as unknown as ( + } as unknown as ( Class< - InstanceType & JsonifiableSchemableObject, + InstanceType & { + readonly jsonifySchema: z.ZodObject, + readonly dejsonifySchema: z.ZodObject, + + jsonify(): JsonifiedValues + jsonifyPromise(): Promise + jsonifyEffect(): Effect.Effect, JsonifiedValues> + }, + ConstructorParameters > & - StaticMembers & - StaticMembers> - ) + StaticMembers & { + readonly jsonifySchema: z.ZodObject, + readonly dejsonifySchema: z.ZodObject, + } + ) } diff --git a/src/legacy/jsonifiable/schema/bigint.ts b/src/legacy/jsonifiable/schema/bigint.ts index b0f0093..aece7e4 100644 --- a/src/legacy/jsonifiable/schema/bigint.ts +++ b/src/legacy/jsonifiable/schema/bigint.ts @@ -1,18 +1,28 @@ +import { Opaque } from "type-fest" import { z } from "zod" +import { identity } from "../../../util" -export const jsonifyBigIntSchema = (schema: S) => - schema.transform(v => v.toString()) +export type JsonifiedBigInt = Opaque -export const dejsonifyBigIntSchema = (schema: S) => - z - .string() - .transform(v => { - try { - return BigInt(v) - } - catch (e) { - return v - } - }) - .pipe(schema) + +export function jsonifyBigIntSchema(schema: S) { + return schema.transform(v => v.toString() as JsonifiedBigInt) +} + +export function dejsonifyBigIntSchema(schema: S) { + return z + .custom(identity) + .pipe(z + .string() + .transform(v => { + try { + return BigInt(v) + } + catch (e) { + return v + } + }) + .pipe(schema) + ) +} diff --git a/src/legacy/jsonifiable/schema/date.ts b/src/legacy/jsonifiable/schema/date.ts index b5ac677..eddc7eb 100644 --- a/src/legacy/jsonifiable/schema/date.ts +++ b/src/legacy/jsonifiable/schema/date.ts @@ -1,18 +1,28 @@ +import { Opaque } from "type-fest" import { z } from "zod" +import { identity } from "../../../util" -export const jsonifyDateSchema = (schema: S) => - schema.transform(v => v.toString()) +export type JsonifiedDate = Opaque -export const dejsonifyDateSchema = (schema: S) => - z - .string() - .transform(v => { - try { - return new Date(v) - } - catch (e) { - return v - } - }) - .pipe(schema) + +export function jsonifyDateSchema(schema: S) { + return schema.transform(v => v.toString() as JsonifiedDate) +} + +export function dejsonifyDateSchema(schema: S) { + return z + .custom(identity) + .pipe(z + .string() + .transform(v => { + try { + return new Date(v) + } + catch (e) { + return v + } + }) + .pipe(schema) + ) +} diff --git a/src/legacy/jsonifiable/schema/decimal.ts b/src/legacy/jsonifiable/schema/decimal.ts index 58c492d..ea7f4ee 100644 --- a/src/legacy/jsonifiable/schema/decimal.ts +++ b/src/legacy/jsonifiable/schema/decimal.ts @@ -1,19 +1,33 @@ import { Decimal } from "decimal.js" +import { Opaque } from "type-fest" import { z } from "zod" +import { identity } from "../../../util" -export const jsonifyDecimalSchema = >(schema: S) => - schema.transform(v => v.toJSON()) +export type JsonifiedDecimal = Opaque -export const dejsonifyDecimalSchema = >(schema: S) => - z - .string() - .transform(v => { - try { - return new Decimal(v) - } - catch (e) { - return v - } - }) - .pipe(schema) + +export function jsonifyDecimalSchema< + S extends z.ZodType +>(schema: S) { + return schema.transform(v => v.toJSON() as JsonifiedDecimal) +} + +export function dejsonifyDecimalSchema< + S extends z.ZodType +>(schema: S) { + return z + .custom(identity) + .pipe(z + .string() + .transform(v => { + try { + return new Decimal(v) + } + catch (e) { + return v + } + }) + .pipe(schema) + ) +} diff --git a/src/legacy/jsonifiable/schema/schemable.ts b/src/legacy/jsonifiable/schema/schemable.ts index c6e2a2d..b0a72bc 100644 --- a/src/legacy/jsonifiable/schema/schemable.ts +++ b/src/legacy/jsonifiable/schema/schemable.ts @@ -1,25 +1,139 @@ +import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" -import { JsonifiableSchemableClass, JsonifiableSchemableConfig } from ".." +import { JsonifiableSchemableClass } from ".." -// TODO: try to find a way to get rid of the 'class_' arg -export const jsonifySchemableSchema = < - C extends JsonifiableSchemableClass<$Config>, - $Config extends JsonifiableSchemableConfig, - S extends z.ZodType, z.ZodTypeDef, InstanceType>, +export function jsonifySchemableSchema< + C extends JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues 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, + + S extends z.ZodType, z.ZodTypeDef, InstanceType>, >( - class_: C | JsonifiableSchemableClass<$Config>, - schema: S, -) => - schema.pipe(class_.jsonifySchema) + class_: C | JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, -// TODO: try to find a way to get rid of the 'class_' arg -export const dejsonifySchemableSchema = < - C extends JsonifiableSchemableClass<$Config>, - $Config extends JsonifiableSchemableConfig, - S extends z.ZodType, z.ZodTypeDef, InstanceType>, + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + schema: S, +) { + return schema.pipe(class_.jsonifySchema) +} + + +export function dejsonifySchemableSchema< + C extends JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues 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, + + S extends z.ZodType, z.ZodTypeDef, InstanceType>, >( - class_: C | JsonifiableSchemableClass<$Config>, - schema: S, -) => - class_.dejsonifySchema.transform(v => new class_(v)).pipe(schema) + class_: C | JsonifiableSchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + + "Class" + >, + + schema: S, +) { + return class_.dejsonifySchema.transform(v => new class_(v)).pipe(schema) +} diff --git a/src/legacy/makeSchemableClass.ts b/src/legacy/makeSchemableClass.ts index 88bcf72..5962882 100644 --- a/src/legacy/makeSchemableClass.ts +++ b/src/legacy/makeSchemableClass.ts @@ -1,49 +1,82 @@ +import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" import { z } from "zod" -import { SchemableClass, SchemableConfig } from "." -import { zodObjectRemoveDefaults } from "./util" +import { DefinedDefaultValuesTag } from "." +import { StaticMembers } from "../util" + + +export function makeSchemableClassFrom< + C extends AbstractClass<{ + schema?: never + defaultValues?: never + }, []> & { + schema?: never + defaultValues?: never + }, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +>( + extend: C, + + { schema, defaultValues }: { + schema: z.ZodObject + defaultValues: Opaque + }, +) { + type Class = ( + C extends ConcreteClass + ? ConcreteClass + : AbstractClass + ) + + return class extends (extend as unknown as ConcreteClass) { + static readonly schema = schema + readonly schema = schema + + static readonly defaultValues = defaultValues + readonly defaultValues = defaultValues + + constructor(values: Values) { + super() + Object.assign(this, values) + } + } as unknown as ( + Class< + InstanceType & + { + readonly schema: z.ZodObject, + readonly defaultValues: DefaultValues, + } & + Values, + + Parameters<(values: Values) => void> + > & + + StaticMembers & + { + readonly schema: z.ZodObject, + readonly defaultValues: DefaultValues, + } + ) +} export function makeSchemableClass< - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - SchemaWithDefaultValuesOutput extends SchemaWithDefaultValuesInput, // TODO: apply "StripSchemaInputDefaults"? - SchemaWithDefaultValuesInput extends {}, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, >( - { - schema: schemaWithDefaultValues - }: { - schema: z.ZodObject< - SchemaWithDefaultValuesT, - SchemaWithDefaultValuesUnknownKeys, - SchemaWithDefaultValuesCatchall, - SchemaWithDefaultValuesOutput, - SchemaWithDefaultValuesInput - > + props: { + schema: z.ZodObject + defaultValues: Opaque } ) { - - const schema = zodObjectRemoveDefaults(schemaWithDefaultValues) - - const $schemableConfig = { - values: undefined as unknown as z.output, - input: undefined as unknown as z.input, - schema: undefined as unknown as typeof schema, - schemaWithDefaultValues: undefined as unknown as typeof schemaWithDefaultValues, - } as const satisfies SchemableConfig - - return class SchemableObject { - static readonly $schemableConfig = $schemableConfig - static readonly schema = schema - static readonly schemaWithDefaultValues = schemaWithDefaultValues - - readonly $schemableConfig = $schemableConfig - readonly schema = schema - readonly schemaWithDefaultValues = schemaWithDefaultValues - - constructor(data: z.output) { - Object.assign(this, data) - } - } as SchemableClass - + return makeSchemableClassFrom(Object, props) } diff --git a/src/legacy/newSchemable.ts b/src/legacy/newSchemable.ts index da0be36..628b632 100644 --- a/src/legacy/newSchemable.ts +++ b/src/legacy/newSchemable.ts @@ -1,77 +1,127 @@ import { Effect, pipe } from "effect" import { HasRequiredKeys } from "type-fest" import { z } from "zod" -import { SchemableClass, SchemableConfig } from "." -import { parseZodTypeEffect } from "./util" +import { SchemableClass, SchemableClassInput } from "." +import { parseZodTypeEffect } from "../util" -type ParamsArgs = [] | [Partial] +type ParamsArgs = [] | [params: Partial] type NewSchemableArgs = HasRequiredKeys extends true - ? [Input, ...ParamsArgs] - : [] | [Input, ...ParamsArgs] + ? [values: Input, ...args: ParamsArgs] + : [] | [values: Input, ...args: ParamsArgs] -/** - * Creates a new instance of a SchemableClass with default values. - * - * @param class_ - The SchemableClass. - * @param values - The values to be parsed and used to create the instance. - * @param params - Optional parameters for parsing. - * @returns A new instance of the specified SchemableClass. - */ -export const newSchemable = < - C extends SchemableClass<$Config>, - $Config extends SchemableConfig, +export function newSchemable< + C extends SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, >( - class_: C | SchemableClass<$Config>, - ...[values, params]: NewSchemableArgs<$Config["input"]> -) => - new class_(class_.schemaWithDefaultValues.parse(values || {}, params)) as InstanceType + class_: C | SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + ...[values, params]: NewSchemableArgs< + SchemableClassInput + > +) { + return new class_( + class_.schema.parse({ ...class_.defaultValues, ...values }, params) + ) as InstanceType +} -/** - * Creates a new instance of a SchemableClass with default values asynchronously. - * - * @param class_ - The SchemableClass. - * @param values - The values to be parsed and used to create the instance. - * @param params - Optional parameters for parsing. - * @returns A Promise resolving to a new instance of the specified SchemableClass. - */ -export const newSchemablePromise = async < - C extends SchemableClass<$Config>, - $Config extends SchemableConfig, +export async function newSchemablePromise< + C extends SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, >( - class_: C | SchemableClass<$Config>, - ...[values, params]: NewSchemableArgs<$Config["input"]> -) => - new class_(await class_.schemaWithDefaultValues.parseAsync(values || {}, params)) as InstanceType + class_: C | SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + ...[values, params]: NewSchemableArgs< + SchemableClassInput + > +) { + return new class_( + await class_.schema.parseAsync({ ...class_.defaultValues, ...values }, params) + ) as InstanceType +} -/** - * Creates a new instance of a SchemableClass with default values as an Effect. - * - * @param class_ - The SchemableClass. - * @param values - The values to be parsed and used to create the instance. - * @param params - Optional parameters for parsing. - * @returns An Effect producing a new instance of the specified SchemableClass. - */ -export const newSchemableEffect = < - C extends SchemableClass<$Config>, - $Config extends SchemableConfig, +export function newSchemableEffect< + C extends SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, >( - class_: C | SchemableClass<$Config>, - ...[values, params]: NewSchemableArgs<$Config["input"]> -) => pipe( - parseZodTypeEffect< - z.output, - z.input - >( - class_.schemaWithDefaultValues, - values || {}, - params, - ), + class_: C | SchemableClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + DefaultValues, + "Class" + >, - Effect.map(values => new class_(values) as InstanceType), -) + ...[values, params]: NewSchemableArgs< + SchemableClassInput + > +) { + return pipe( + parseZodTypeEffect( + class_.schema, + { ...class_.defaultValues, ...values }, + params, + ), + + Effect.map(values => new class_(values) as InstanceType), + ) +} diff --git a/src/observable/index.ts b/src/legacy/observable/index.ts similarity index 100% rename from src/observable/index.ts rename to src/legacy/observable/index.ts diff --git a/src/observable/makeSchemableClassObservable.ts b/src/legacy/observable/makeSchemableClassObservable.ts similarity index 100% rename from src/observable/makeSchemableClassObservable.ts rename to src/legacy/observable/makeSchemableClassObservable.ts diff --git a/src/legacy/tests.ts b/src/legacy/tests.ts deleted file mode 100644 index c19daf7..0000000 --- a/src/legacy/tests.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { z } from "zod" -import { makeSchemableClass, newSchemable } from "." -import { dejsonifyBigIntSchema, dejsonifySchemable, dejsonifySchemableSchema, jsonifyBigIntSchema, jsonifySchemableSchema, makeJsonifiableSchemableClass } from "./jsonifiable" - - -const GroupSchema = z.object({ - /** Group ID */ - id: z.bigint(), - - /** Group name */ - name: z.string(), -}) - -const GroupSchemableObject = makeSchemableClass({ schema: GroupSchema }) - -const GroupJsonifiableSchemableObject = makeJsonifiableSchemableClass(GroupSchemableObject, { - jsonifySchema: ({ schema, s }) => schema.extend({ - id: jsonifyBigIntSchema(s.id) - }), - - dejsonifySchema: ({ schema, s }) => schema.extend({ - id: dejsonifyBigIntSchema(s.id) - }), -}) - -class Group extends GroupJsonifiableSchemableObject {} - - -const UserSchema = z.object({ - /** User ID */ - id: z.bigint(), - - /** Name string */ - name: z.string(), - - /** User group */ - group: z.instanceof(Group), -}) - -const UserSchemableObject = makeSchemableClass({ schema: UserSchema }) - -const UserJsonifiableSchemableObject = makeJsonifiableSchemableClass(UserSchemableObject, { - jsonifySchema: ({ schema, s }) => schema.extend({ - id: jsonifyBigIntSchema(s.id), - group: jsonifySchemableSchema(Group, s.group), - }), - - dejsonifySchema: ({ schema, s }) => schema.extend({ - id: dejsonifyBigIntSchema(s.id), - group: dejsonifySchemableSchema(Group, s.group), - }), -}) - -class User extends UserJsonifiableSchemableObject {} - - -const group1 = new Group({ id: 1n, name: "Group 1" }) - -const user1 = new User({ id: 1n, name: "User 1", group: group1 }) -const user2 = newSchemable(User, { id: 2n, name: "User 2", group: group1 }) - -const jsonifiedUser2 = user2.jsonify() -const dejsonifiedUser2 = dejsonifySchemable(User, jsonifiedUser2) -console.log(dejsonifiedUser2) diff --git a/src/legacy/util.ts b/src/legacy/util.ts deleted file mode 100644 index 2cf7b08..0000000 --- a/src/legacy/util.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Effect, pipe } from "effect" -import { mapValues } from "lodash-es" -import { z } from "zod" - - -/** - * Represents the static members of a class. - * @template C - The class type. - */ -export type StaticMembers = { - [Key in keyof C as Key extends "prototype" ? never : Key]: C[Key] -} - - -/** - * Removes default values from a ZodObject schema and returns a new schema. - * - * @param schema - The ZodObject schema to process. - * @returns A new ZodObject schema with default values removed. - */ -export const zodObjectRemoveDefaults = < - T extends z.ZodRawShape, - UnknownKeys extends z.UnknownKeysParam, - Catchall extends z.ZodTypeAny, - Output extends {}, - Input extends {}, ->( - schema: z.ZodObject< - T, - UnknownKeys, - Catchall, - Output, - Input - > -) => - schema.extend(zodShapeRemoveDefaults(schema.shape)) - -/** - * Removes default values from a ZodObject shape and returns a new shape. - * - * @param shape - The ZodObject shape to process. - * @returns A new shape with default values removed. - */ -export const zodShapeRemoveDefaults = < - Shape extends z.ZodRawShape ->( - shape: Shape -): { - [K in keyof Shape]: - Shape[K] extends z.ZodDefault - ? T - : Shape[K] -} => - mapValues(shape, el => - el instanceof z.ZodDefault - ? el.removeDefault() - : el - ) - - -/** - * Parses a value using a ZodType schema wrapped in an Effect monad. - * - * @param schema - The ZodType schema to use for parsing. - * @param args - The arguments to pass to the `safeParseAsync` method of the schema. - * @returns An Effect monad representing the parsing result. - */ -export const parseZodTypeEffect = < - Output, - Input, ->( - schema: z.ZodType, - ...args: Parameters -) => pipe( - Effect.promise(() => schema.safeParseAsync(...args)), - - Effect.flatMap(response => - response.success - ? Effect.succeed(response.data) - : Effect.fail(response.error) - ), -) diff --git a/src/makeSchemableClass.ts b/src/makeSchemableClass.ts deleted file mode 100644 index 0345eb7..0000000 --- a/src/makeSchemableClass.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" -import { z } from "zod" -import { DefinedDefaultValuesTag } from "." -import { StaticMembers } from "./util" - - -export function makeSchemableClassFrom< - C extends AbstractClass<{ - schema?: never - defaultValues?: never - }, []> & { - schema?: never - defaultValues?: never - }, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - extend: C, - - { schema, defaultValues }: { - schema: z.ZodObject - defaultValues: Opaque - }, -) { - type Class = ( - C extends ConcreteClass - ? ConcreteClass - : AbstractClass - ) - - return class extends (extend as unknown as ConcreteClass) { - static readonly schema = schema - readonly schema = schema - - static readonly defaultValues = defaultValues - readonly defaultValues = defaultValues - - constructor(values: Values) { - super() - Object.assign(this, values) - } - } as unknown as ( - Class< - InstanceType & - { - readonly schema: z.ZodObject, - readonly defaultValues: DefaultValues, - } & - Values, - - Parameters<(values: Values) => void> - > & - - StaticMembers & - { - readonly schema: z.ZodObject, - readonly defaultValues: DefaultValues, - } - ) -} - - -export function makeSchemableClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - props: { - schema: z.ZodObject - defaultValues: Opaque - } -) { - return makeSchemableClassFrom(Object, props) -} diff --git a/src/newSchemable.ts b/src/newSchemable.ts deleted file mode 100644 index 98a5498..0000000 --- a/src/newSchemable.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { Effect, pipe } from "effect" -import { HasRequiredKeys } from "type-fest" -import { z } from "zod" -import { SchemableClass, SchemableClassInput } from "." -import { parseZodTypeEffect } from "./util" - - -type ParamsArgs = [] | [params: Partial] - -type NewSchemableArgs = - HasRequiredKeys extends true - ? [values: Input, ...args: ParamsArgs] - : [] | [values: Input, ...args: ParamsArgs] - - -export function newSchemable< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - class_: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - ...[values, params]: NewSchemableArgs< - SchemableClassInput - > -) { - return new class_( - class_.schema.parse({ ...class_.defaultValues, ...values }, params) - ) as InstanceType -} - - -export async function newSchemablePromise< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - class_: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - ...[values, params]: NewSchemableArgs< - SchemableClassInput - > -) { - return new class_( - await class_.schema.parseAsync({ ...class_.defaultValues, ...values }, params) - ) as InstanceType -} - - -export function newSchemableEffect< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - class_: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - ...[values, params]: NewSchemableArgs< - SchemableClassInput - > -) { - return pipe( - parseZodTypeEffect( - class_.schema, - { ...class_.defaultValues, ...values }, - params, - ), - - Effect.map(values => new class_(values) as InstanceType), - ) -} diff --git a/src/tests.ts b/src/tests.ts index 6015710..e69de29 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,63 +0,0 @@ -import { pipeInto } from "ts-functional-pipe" -import { z } from "zod" -import { defineDefaultValues, extendSchemableClass, makeSchemableClass, newSchemable } from "." -import { dejsonifyBigIntSchema, dejsonifySchemable, jsonifyBigIntSchema, makeJsonifiableSchemableClass } from "./jsonifiable" -import { makeSchemableClassObservable } from "./observable" - - -const UserLevel = z.enum(["User", "Admin"]) - - -class User extends pipeInto( - makeSchemableClass({ - schema: z.object({ - id: z.bigint(), - name: z.string(), - level: UserLevel, - }), - - defaultValues: defineDefaultValues({ - level: "User" as const - }), - }), - - v => makeSchemableClassObservable(v), - - v => makeJsonifiableSchemableClass(v, { - jsonifySchema: ({ schema, shape }) => schema.extend({ - id: jsonifyBigIntSchema(shape.id) - }), - - dejsonifySchema: ({ schema, shape }) => schema.extend({ - id: dejsonifyBigIntSchema(shape.id) - }), - }), -) {} - -User.schema - - -const user1 = newSchemable(User, { id: 1n, name: "User" }) -user1.schema - -const jsonifiedUser1 = user1.jsonify() -console.log(jsonifiedUser1) -console.log(dejsonifySchemable(User, jsonifiedUser1)) - - -const UserWithPhone = extendSchemableClass(User, { - schema: ({ schema }) => schema.extend({ - phone: z.string() - }), - - defaultValues: defaultValues => defineDefaultValues({ - ...defaultValues, - phone: "+33600000000", - }), -}) - -UserWithPhone.defaultValues - - -// const user2 = newSchemable(UserWithPhone, { id: 1n, name: "User" }) -// console.log(user2.jsonify()) -- 2.49.1 From 6873fae86bb8c104cb20aed387003edb91dd07d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 21 Jan 2024 20:15:25 +0100 Subject: [PATCH 002/136] ZodSchemaClass --- src/ZodSchemaClass.ts | 176 +++++++++++++++++++++++++++++++++++++ src/defineDefaultValues.ts | 8 ++ src/index.ts | 2 + src/tests.ts | 26 ++++++ 4 files changed, 212 insertions(+) create mode 100644 src/ZodSchemaClass.ts create mode 100644 src/defineDefaultValues.ts create mode 100644 src/index.ts diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts new file mode 100644 index 0000000..4dc580d --- /dev/null +++ b/src/ZodSchemaClass.ts @@ -0,0 +1,176 @@ +import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" +import { z } from "zod" +import { DefinedDefaultValuesTag } from "." +import { StaticMembers } from "./util" + + +export type TZodSchemaClass< + Schema extends z.ZodObject, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +> = ( + AbstractClass< + { + readonly schema: Schema + readonly defaultValues: DefaultValues + } & Values, + + [values: Values] + > & { + readonly schema: Schema + readonly defaultValues: DefaultValues + + newPromise>(this: Self): Promise> + + extend< + Parent + >( + this: Parent + ): Parent + } +) + + +type ExtendableClass = AbstractClass<{ + schema?: never + defaultValues?: never +}, []> & { + schema?: never + defaultValues?: never +} + +function makeClass< + Self, + Parent extends ExtendableClass, + + Schema extends z.ZodObject, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +>( + { of, schema, defaultValues }: { + self: Self, + of: Parent, + schema: Schema | z.ZodObject + defaultValues: Opaque + }, +) { + type Class = ( + Parent extends ConcreteClass + ? ConcreteClass + : AbstractClass + ) + + type ZodClass = TZodSchemaClass< + Schema, + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues + > + + return class extends (of as unknown as ConcreteClass) { + static readonly schema = schema + readonly schema = schema + + static readonly defaultValues = defaultValues + readonly defaultValues = defaultValues + + constructor(values: Values) { + super() + Object.assign(this, values) + } + } as unknown as ( + Class< + InstanceType & + InstanceType, + + ConstructorParameters + > & + + StaticMembers & + StaticMembers + ) +} + + +export function ZodSchemaClassOf() { + return < + Parent extends ExtendableClass, + + Schema extends z.ZodObject, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + >( + of: Parent, + props: Omit< + Parameters< + typeof makeClass< + Self, + Parent, + + Schema, + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues + > + >[0], "self" | "of" + >, + ) => makeClass({ + ...props, + self: {} as Self, + of, + }) +} + + +const DefaultParent = Object + +export function ZodSchemaClass() { + return < + Schema extends z.ZodObject, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + >( + props: Omit< + Parameters< + typeof makeClass< + Self, + typeof DefaultParent, + + Schema, + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues + > + >[0], "self" | "of" + >, + ) => makeClass({ + ...props, + self: {} as Self, + of: DefaultParent, + }) +} diff --git a/src/defineDefaultValues.ts b/src/defineDefaultValues.ts new file mode 100644 index 0000000..634d83a --- /dev/null +++ b/src/defineDefaultValues.ts @@ -0,0 +1,8 @@ +import { Opaque } from "type-fest" + + +export type DefinedDefaultValuesTag = "@thilawyn/schemable-class/DefinedDefaultValues" + +export function defineDefaultValues(values: T) { + return values as Opaque +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..8302d95 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export * from "./ZodSchemaClass" +export * from "./defineDefaultValues" diff --git a/src/tests.ts b/src/tests.ts index e69de29..39bfb8f 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -0,0 +1,26 @@ +import { z } from "zod" +import { ZodSchemaClassOf, defineDefaultValues } from "." + + +class Test extends ZodSchemaClassOf()(Object, { + schema: z.object({ + id: z.bigint() + }), + + defaultValues: defineDefaultValues({ id: -1n }), +}) {} +Test.newPromise() +Test.extend() + +new Test({ id: 1n }).id + + +const Test2 = ZodSchemaClassOf()(Object, { + schema: z.object({ + id: z.bigint() + }), + + defaultValues: defineDefaultValues({ id: -1n }), +}) + +Test2.extend() -- 2.49.1 From c073154eebb46adba431a3ff662404a06d4521b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 21 Jan 2024 22:58:44 +0100 Subject: [PATCH 003/136] Working new implementation --- src/TZodSchemaClass.ts | 64 +++++++++++++++++++ src/ZodSchemaClass.ts | 136 ++++++----------------------------------- src/index.ts | 1 + src/tests.ts | 23 +++---- 4 files changed, 93 insertions(+), 131 deletions(-) create mode 100644 src/TZodSchemaClass.ts diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts new file mode 100644 index 0000000..7762a7e --- /dev/null +++ b/src/TZodSchemaClass.ts @@ -0,0 +1,64 @@ +import { Class as ConcreteClass, HasRequiredKeys } from "type-fest" +import { z } from "zod" +import { Class, ClassType } from "./util" + + +export type NewZodSchemaInstanceInput< + Values extends {}, + DefaultValues extends Partial, +> = { + [Key in Exclude]: Values[Key] +} & { + [Key in keyof DefaultValues]?: Key extends keyof Values + ? Values[Key] + : never +} + +export type ParseParamsArgs = [] | [params: Partial] + +export type NewZodSchemaInstanceArgs = + HasRequiredKeys extends true + ? [values: Input, ...args: ParseParamsArgs] + : [] | [values: Input, ...args: ParseParamsArgs] + + +export type TZodSchemaClass< + Schema extends z.ZodObject, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + + Type extends ClassType = "AbstractClass" +> = ( + Class< + Type, + Values, + [values: Values] + > & { + readonly schema: Schema + readonly defaultValues: DefaultValues + + newPromise>( + this: Self, + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ): Promise> + + newEffect>( + this: Self, + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ): Promise> + + extend< + Parent + >( + this: Parent + ): Parent + } +) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 4dc580d..31513db 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,40 +1,9 @@ import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" import { z } from "zod" -import { DefinedDefaultValuesTag } from "." +import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." import { StaticMembers } from "./util" -export type TZodSchemaClass< - Schema extends z.ZodObject, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, -> = ( - AbstractClass< - { - readonly schema: Schema - readonly defaultValues: DefaultValues - } & Values, - - [values: Values] - > & { - readonly schema: Schema - readonly defaultValues: DefaultValues - - newPromise>(this: Self): Promise> - - extend< - Parent - >( - this: Parent - ): Parent - } -) - - type ExtendableClass = AbstractClass<{ schema?: never defaultValues?: never @@ -43,8 +12,7 @@ type ExtendableClass = AbstractClass<{ defaultValues?: never } -function makeClass< - Self, +export function ZodSchemaClassOf< Parent extends ExtendableClass, Schema extends z.ZodObject, @@ -55,9 +23,9 @@ function makeClass< Values extends {}, DefaultValues extends Partial, >( - { of, schema, defaultValues }: { - self: Self, - of: Parent, + of: Parent, + + { schema, defaultValues }: { schema: Schema | z.ZodObject defaultValues: Opaque }, @@ -68,7 +36,7 @@ function makeClass< : AbstractClass ) - type ZodClass = TZodSchemaClass< + type TZodSchemaClassImpl = TZodSchemaClass< Schema, SchemaT, SchemaUnknownKeys, @@ -80,97 +48,31 @@ function makeClass< return class extends (of as unknown as ConcreteClass) { static readonly schema = schema - readonly schema = schema - static readonly defaultValues = defaultValues - readonly defaultValues = defaultValues constructor(values: Values) { super() Object.assign(this, values) } + + static async newPromise( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) + ) + } } as unknown as ( Class< InstanceType & - InstanceType, + InstanceType, - ConstructorParameters + ConstructorParameters > & StaticMembers & - StaticMembers + StaticMembers ) } - - -export function ZodSchemaClassOf() { - return < - Parent extends ExtendableClass, - - Schema extends z.ZodObject, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, - >( - of: Parent, - props: Omit< - Parameters< - typeof makeClass< - Self, - Parent, - - Schema, - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues - > - >[0], "self" | "of" - >, - ) => makeClass({ - ...props, - self: {} as Self, - of, - }) -} - - -const DefaultParent = Object - -export function ZodSchemaClass() { - return < - Schema extends z.ZodObject, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, - >( - props: Omit< - Parameters< - typeof makeClass< - Self, - typeof DefaultParent, - - Schema, - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues - > - >[0], "self" | "of" - >, - ) => makeClass({ - ...props, - self: {} as Self, - of: DefaultParent, - }) -} diff --git a/src/index.ts b/src/index.ts index 8302d95..8c02ebc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,3 @@ +export * from "./TZodSchemaClass" export * from "./ZodSchemaClass" export * from "./defineDefaultValues" diff --git a/src/tests.ts b/src/tests.ts index 39bfb8f..c314056 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -2,25 +2,20 @@ import { z } from "zod" import { ZodSchemaClassOf, defineDefaultValues } from "." -class Test extends ZodSchemaClassOf()(Object, { +class Test extends ZodSchemaClassOf(Object, { schema: z.object({ - id: z.bigint() + id: z.bigint(), + name: z.string(), }), defaultValues: defineDefaultValues({ id: -1n }), }) {} -Test.newPromise() -Test.extend() +Test.defaultValues +const inst = await Test.newPromise({ id: 1n, name: "" }) +// Test.extend() -new Test({ id: 1n }).id +console.log(inst) +// class ChildTest extends Test {} -const Test2 = ZodSchemaClassOf()(Object, { - schema: z.object({ - id: z.bigint() - }), - - defaultValues: defineDefaultValues({ id: -1n }), -}) - -Test2.extend() +// ChildTest.newPromise() -- 2.49.1 From b6c2c4bec751f7e10f6156b25402bfc332793785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 21 Jan 2024 23:29:11 +0100 Subject: [PATCH 004/136] ZodSchemaClassOf work --- src/TZodSchemaClass.ts | 11 +++++++++-- src/ZodSchemaClass.ts | 17 ++++++++++++----- src/tests.ts | 12 ++++++++---- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts index 7762a7e..be2a64a 100644 --- a/src/TZodSchemaClass.ts +++ b/src/TZodSchemaClass.ts @@ -41,14 +41,21 @@ export type TZodSchemaClass< readonly schema: Schema readonly defaultValues: DefaultValues - newPromise>( + instantiate>( + this: Self, + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ): InstanceType + + instantiatePromise>( this: Self, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > ): Promise> - newEffect>( + instantiateEffect>( this: Self, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 31513db..3664b57 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -4,10 +4,7 @@ import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstance import { StaticMembers } from "./util" -type ExtendableClass = AbstractClass<{ - schema?: never - defaultValues?: never -}, []> & { +type ExtendableClass = AbstractClass & { schema?: never defaultValues?: never } @@ -55,7 +52,17 @@ export function ZodSchemaClassOf< Object.assign(this, values) } - static async newPromise( + static async instantiate( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + this.schema.parse({ ...this.defaultValues, ...values }, params) + ) + } + + static async instantiatePromise( ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > diff --git a/src/tests.ts b/src/tests.ts index c314056..7f4befd 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -2,7 +2,11 @@ import { z } from "zod" import { ZodSchemaClassOf, defineDefaultValues } from "." -class Test extends ZodSchemaClassOf(Object, { +class Root { +} + + +class Test extends ZodSchemaClassOf(Root, { schema: z.object({ id: z.bigint(), name: z.string(), @@ -11,11 +15,11 @@ class Test extends ZodSchemaClassOf(Object, { defaultValues: defineDefaultValues({ id: -1n }), }) {} Test.defaultValues -const inst = await Test.newPromise({ id: 1n, name: "" }) +const inst = await Test.instantiatePromise({ id: 1n, name: "" }) // Test.extend() console.log(inst) -// class ChildTest extends Test {} +class ChildTest extends Test {} -// ChildTest.newPromise() +ChildTest.instantiate({ name: "" }) -- 2.49.1 From 338c750a4b3facd771496268a7a7176e7ca3fecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 24 Jan 2024 19:06:05 +0100 Subject: [PATCH 005/136] TZodSchemaClass work --- src/TZodSchemaClass.ts | 69 +++++++++++++++++++++++++++++++++++++----- src/ZodSchemaClass.ts | 57 ++++++++++++++++++++++++++++++---- src/tests.ts | 20 +++++++++--- 3 files changed, 128 insertions(+), 18 deletions(-) diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts index be2a64a..72e665f 100644 --- a/src/TZodSchemaClass.ts +++ b/src/TZodSchemaClass.ts @@ -1,6 +1,8 @@ -import { Class as ConcreteClass, HasRequiredKeys } from "type-fest" +import { Effect } from "effect" +import { AbstractClass, Class as ConcreteClass, HasRequiredKeys, Opaque } from "type-fest" import { z } from "zod" -import { Class, ClassType } from "./util" +import { DefinedDefaultValuesTag } from "." +import { Class, ClassType, StaticMembers } from "./util" export type NewZodSchemaInstanceInput< @@ -22,8 +24,23 @@ export type NewZodSchemaInstanceArgs = : [] | [values: Input, ...args: ParseParamsArgs] +type ExtendZodSchemaClass< + Parent extends AbstractClass, + Self extends AbstractClass, +> = ( + AbstractClass< + Omit, keyof InstanceType> & + InstanceType, + + ConstructorParameters + > & + + Omit & + StaticMembers +) + + export type TZodSchemaClass< - Schema extends z.ZodObject, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -38,7 +55,7 @@ export type TZodSchemaClass< Values, [values: Values] > & { - readonly schema: Schema + readonly schema: z.ZodObject readonly defaultValues: DefaultValues instantiate>( @@ -60,12 +77,48 @@ export type TZodSchemaClass< ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > - ): Promise> + ): Effect.Effect, Values> extend< - Parent + Parent extends AbstractClass, + + ExtendedSchemaT extends z.ZodRawShape, + ExtendedSchemaUnknownKeys extends z.UnknownKeysParam, + ExtendedSchemaCatchall extends z.ZodTypeAny, + + ExtendedValues extends Values, + ExtendedDefaultValues extends Partial, >( - this: Parent - ): Parent + this: Parent, + + props: { + schema: (props: { + schema: z.ZodObject + shape: SchemaT + }) => z.ZodObject + + defaultValues: (defaultValues: DefaultValues) => Opaque + }, + ): ExtendZodSchemaClass< + Parent, + + TZodSchemaClass< + ExtendedSchemaT, + ExtendedSchemaUnknownKeys, + ExtendedSchemaCatchall, + + ExtendedValues, + ExtendedDefaultValues + > + > } ) + +export type DefaultZodSchemaClass = TZodSchemaClass< + z.ZodRawShape, + z.UnknownKeysParam, + z.ZodTypeAny, + + {}, + {} +> diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 3664b57..39c3c9a 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,7 +1,8 @@ +import { Effect, pipe } from "effect" import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." -import { StaticMembers } from "./util" +import { StaticMembers, parseZodTypeEffect } from "./util" type ExtendableClass = AbstractClass & { @@ -12,7 +13,6 @@ type ExtendableClass = AbstractClass & { export function ZodSchemaClassOf< Parent extends ExtendableClass, - Schema extends z.ZodObject, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -23,7 +23,7 @@ export function ZodSchemaClassOf< of: Parent, { schema, defaultValues }: { - schema: Schema | z.ZodObject + schema: z.ZodObject defaultValues: Opaque }, ) { @@ -34,7 +34,6 @@ export function ZodSchemaClassOf< ) type TZodSchemaClassImpl = TZodSchemaClass< - Schema, SchemaT, SchemaUnknownKeys, SchemaCatchall, @@ -44,7 +43,7 @@ export function ZodSchemaClassOf< > return class extends (of as unknown as ConcreteClass) { - static readonly schema = schema + static readonly schema = schema static readonly defaultValues = defaultValues constructor(values: Values) { @@ -52,7 +51,7 @@ export function ZodSchemaClassOf< Object.assign(this, values) } - static async instantiate( + static instantiate( ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > @@ -71,6 +70,52 @@ export function ZodSchemaClassOf< await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) ) } + + static instantiateEffect( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return pipe( + parseZodTypeEffect( + this.schema, + { ...this.defaultValues, ...values }, + params, + ), + + Effect.map(values => new this(values)), + ) + } + + static extend< + ExtendedSchemaT extends z.ZodRawShape, + ExtendedSchemaUnknownKeys extends z.UnknownKeysParam, + ExtendedSchemaCatchall extends z.ZodTypeAny, + + ExtendedValues extends Values, + ExtendedDefaultValues extends Partial, + >( + props: { + schema: (props: { + schema: z.ZodObject + shape: SchemaT + }) => z.ZodObject + + defaultValues: (defaultValues: DefaultValues) => Opaque + }, + ) { + const schema = props.schema({ + schema: this.schema, + shape: this.schema.shape, + }) + + const defaultValues = props.defaultValues(this.defaultValues) + + return class extends (this as unknown as ConcreteClass) { + static readonly schema = schema + static readonly defaultValues = defaultValues + } + } } as unknown as ( Class< InstanceType & diff --git a/src/tests.ts b/src/tests.ts index 7f4befd..de23363 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -14,12 +14,24 @@ class Test extends ZodSchemaClassOf(Root, { defaultValues: defineDefaultValues({ id: -1n }), }) {} + Test.defaultValues const inst = await Test.instantiatePromise({ id: 1n, name: "" }) -// Test.extend() -console.log(inst) +class SubTest extends Test.extend({ + schema: ({ schema }) => schema.extend({ + prout: z.string() + }), -class ChildTest extends Test {} + defaultValues: defaultValues => defineDefaultValues({ + ...defaultValues + }), +}) {} -ChildTest.instantiate({ name: "" }) +const subInst = await SubTest.instantiatePromise({ name: "", prout: "" }) + +console.log(subInst) + +// class ChildTest extends Test {} + +// ChildTest.instantiate({ name: "" }) -- 2.49.1 From 516ce0ade2a34728fb73608f467a02d91a763a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 24 Jan 2024 21:40:27 +0100 Subject: [PATCH 006/136] Class type detection --- src/TZodSchemaClass.ts | 6 ++++-- src/ZodSchemaClass.ts | 17 +++++++++++++++++ src/tests.ts | 9 +++------ src/util.ts | 8 ++++++++ 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts index 72e665f..4dd40c7 100644 --- a/src/TZodSchemaClass.ts +++ b/src/TZodSchemaClass.ts @@ -2,7 +2,7 @@ import { Effect } from "effect" import { AbstractClass, Class as ConcreteClass, HasRequiredKeys, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag } from "." -import { Class, ClassType, StaticMembers } from "./util" +import { Class, ClassType, GetClassType, StaticMembers } from "./util" export type NewZodSchemaInstanceInput< @@ -28,7 +28,9 @@ type ExtendZodSchemaClass< Parent extends AbstractClass, Self extends AbstractClass, > = ( - AbstractClass< + Class< + GetClassType, + Omit, keyof InstanceType> & InstanceType, diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 39c3c9a..9886e1f 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -128,3 +128,20 @@ export function ZodSchemaClassOf< StaticMembers ) } + + +export function ZodSchemaClass< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +>( + props: { + schema: z.ZodObject + defaultValues: Opaque + }, +) { + return ZodSchemaClassOf(Object, props) +} diff --git a/src/tests.ts b/src/tests.ts index de23363..7c72022 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,12 +1,8 @@ import { z } from "zod" -import { ZodSchemaClassOf, defineDefaultValues } from "." +import { ZodSchemaClass, defineDefaultValues } from "." -class Root { -} - - -class Test extends ZodSchemaClassOf(Root, { +class Test extends ZodSchemaClass({ schema: z.object({ id: z.bigint(), name: z.string(), @@ -18,6 +14,7 @@ class Test extends ZodSchemaClassOf(Root, { Test.defaultValues const inst = await Test.instantiatePromise({ id: 1n, name: "" }) + class SubTest extends Test.extend({ schema: ({ schema }) => schema.extend({ prout: z.string() diff --git a/src/util.ts b/src/util.ts index a1c11d4..338309f 100644 --- a/src/util.ts +++ b/src/util.ts @@ -22,6 +22,14 @@ export type Class< : never ) +export type GetClassType = ( + C extends ConcreteClass + ? "Class" + : C extends AbstractClass + ? "AbstractClass" + : never +) + /** * Represents the static members of a class. -- 2.49.1 From 147034e95d443ea2f86c4f65a93b6139bf6563ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 24 Jan 2024 21:49:19 +0100 Subject: [PATCH 007/136] ZodSchemaClassOf refactoring --- src/ZodSchemaClass.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 9886e1f..d2dbf62 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -2,7 +2,7 @@ import { Effect, pipe } from "effect" import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." -import { StaticMembers, parseZodTypeEffect } from "./util" +import { Class, GetClassType, StaticMembers, parseZodTypeEffect } from "./util" type ExtendableClass = AbstractClass & { @@ -27,12 +27,6 @@ export function ZodSchemaClassOf< defaultValues: Opaque }, ) { - type Class = ( - Parent extends ConcreteClass - ? ConcreteClass - : AbstractClass - ) - type TZodSchemaClassImpl = TZodSchemaClass< SchemaT, SchemaUnknownKeys, @@ -118,6 +112,8 @@ export function ZodSchemaClassOf< } } as unknown as ( Class< + GetClassType, + InstanceType & InstanceType, -- 2.49.1 From ab328f2cb5a4583ed6c5a80e530518dcc29576ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 28 Jan 2024 01:08:15 +0100 Subject: [PATCH 008/136] Util refactoring --- src/util.ts | 64 ------------------------- src/util/class.ts | 101 ++++++++++++++++++++++++++++++++++++++++ src/util/effect.ts | 26 +++++++++++ src/util/index.ts | 4 ++ src/util/inheritance.ts | 40 ++++++++++++++++ src/util/misc.ts | 3 ++ 6 files changed, 174 insertions(+), 64 deletions(-) delete mode 100644 src/util.ts create mode 100644 src/util/class.ts create mode 100644 src/util/effect.ts create mode 100644 src/util/index.ts create mode 100644 src/util/inheritance.ts create mode 100644 src/util/misc.ts diff --git a/src/util.ts b/src/util.ts deleted file mode 100644 index 338309f..0000000 --- a/src/util.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Effect, pipe } from "effect" -import { AbstractClass, Class as ConcreteClass } from "type-fest" -import { z } from "zod" - - -export function identity(value: T) { - return value -} - - -export type ClassType = "AbstractClass" | "Class" - -export type Class< - Type extends ClassType, - T, - Arguments extends unknown[] = any[], -> = ( - Type extends "AbstractClass" - ? AbstractClass - : Type extends "Class" - ? ConcreteClass - : never -) - -export type GetClassType = ( - C extends ConcreteClass - ? "Class" - : C extends AbstractClass - ? "AbstractClass" - : never -) - - -/** - * Represents the static members of a class. - * @template C - The class type. - */ -export type StaticMembers = { - [Key in keyof C as Key extends "prototype" ? never : Key]: C[Key] -} - - -/** - * Parses a value using a ZodType schema wrapped in an Effect monad. - * - * @param schema - The ZodType schema to use for parsing. - * @param args - The arguments to pass to the `safeParseAsync` method of the schema. - * @returns An Effect monad representing the parsing result. - */ -export const parseZodTypeEffect = < - Output, - Input, ->( - schema: z.ZodType, - ...args: Parameters -) => pipe( - Effect.promise(() => schema.safeParseAsync(...args)), - - Effect.flatMap(response => - response.success - ? Effect.succeed(response.data) - : Effect.fail(response.error) - ), -) diff --git a/src/util/class.ts b/src/util/class.ts new file mode 100644 index 0000000..616f709 --- /dev/null +++ b/src/util/class.ts @@ -0,0 +1,101 @@ +import { AbstractClass, Class as ConcreteClass } from "type-fest" + + +/** + * Represents the possible types of a class. + */ +export type ClassType = "AbstractClass" | "Class" + +/** + * Represents a class based on the specified type. + * @template Type - The type of the class ("AbstractClass" or "Class"). + * @template T - The type parameter of the class. + * @template Arguments - The type of arguments the class constructor takes. + */ +export type Class< + Type extends ClassType, + T, + Arguments extends unknown[] = any[], +> = ( + Type extends "AbstractClass" + ? AbstractClass + : Type extends "Class" + ? ConcreteClass + : never +) + +/** + * Gets the type of a class (either "Class" or "AbstractClass"). + * @template C - The class type to determine. + */ +export type GetClassType = ( + C extends ConcreteClass + ? "Class" + : C extends AbstractClass + ? "AbstractClass" + : never +) + +/** + * Represents an array of instances corresponding to the provided classes. + * @template Classes - An array of classes extending AbstractClass. + */ +export type ClassesInstances[]> = ( + Classes extends [infer Class, ...infer Rest] + ? Class extends AbstractClass + ? Rest extends AbstractClass[] + ? [InstanceType, ...ClassesInstances] + : never + : never + : [] +) + +/** + * Represents an intersection of instances of the provided classes. + * @template Classes - An array of classes extending AbstractClass. + */ +export type ClassesInstancesIntersection[]> = ( + Classes extends [infer Class, ...infer Rest] + ? Class extends AbstractClass + ? Rest extends AbstractClass[] + ? InstanceType & ClassesInstancesIntersection + : never + : never + : {} +) + +/** + * Represents the static members of a class. + * @template Class - A class extending AbstractClass. + */ +export type StaticMembers> = ( + Omit +) + +/** + * Represents an array of static members corresponding to the provided classes. + * @template Classes - An array of classes extending AbstractClass. + */ +export type ClassesStaticMembers[]> = ( + Classes extends [infer Class, ...infer Rest] + ? Class extends AbstractClass + ? Rest extends AbstractClass[] + ? [StaticMembers, ...ClassesStaticMembers] + : never + : never + : [] +) + +/** + * Represents an intersection of static members of the provided classes. + * @template Classes - An array of classes extending AbstractClass. + */ +export type ClassesStaticMembersIntersection[]> = ( + Classes extends [infer Class, ...infer Rest] + ? Class extends AbstractClass + ? Rest extends AbstractClass[] + ? StaticMembers & ClassesStaticMembersIntersection + : never + : never + : {} +) diff --git a/src/util/effect.ts b/src/util/effect.ts new file mode 100644 index 0000000..f7ce9eb --- /dev/null +++ b/src/util/effect.ts @@ -0,0 +1,26 @@ +import { Effect, pipe } from "effect" +import { z } from "zod" + + +/** + * Parses a value using a ZodType schema wrapped in an Effect monad. + * + * @param schema - The ZodType schema to use for parsing. + * @param args - The arguments to pass to the `safeParseAsync` method of the schema. + * @returns An Effect monad representing the parsing result. + */ +export const parseZodTypeEffect = < + Output, + Input, +>( + schema: z.ZodType, + ...args: Parameters +) => pipe( + Effect.promise(() => schema.safeParseAsync(...args)), + + Effect.flatMap(response => + response.success + ? Effect.succeed(response.data) + : Effect.fail(response.error) + ), +) diff --git a/src/util/index.ts b/src/util/index.ts new file mode 100644 index 0000000..f7d0c08 --- /dev/null +++ b/src/util/index.ts @@ -0,0 +1,4 @@ +export * from "./class" +export * from "./effect" +export * from "./inheritance" +export * from "./misc" diff --git a/src/util/inheritance.ts b/src/util/inheritance.ts new file mode 100644 index 0000000..a179d78 --- /dev/null +++ b/src/util/inheritance.ts @@ -0,0 +1,40 @@ +/** + * Represents the common keys between two types. + * @template A - The first type. + * @template B - The second type. + */ +export type CommonKeys = Extract + +/** + * Merges an inheritance tree defined by an array of types, considering overrides. + * @template T - An array of types representing the inheritance tree. + */ +export type MergeInheritanceTree = ( + T extends [infer Super, infer Self, ...infer Rest] + ? Pick> extends Pick> + ? MergeInheritanceTree<[ + Omit> & Self, + ...Rest, + ]> + : never + : T extends [infer Self] + ? Self + : void +) + +/** + * Merges an inheritance tree defined by an array of types without allowing overrides. + * @template T - An array of types representing the inheritance tree. + */ +export type MergeInheritanceTreeWithoutOverriding = ( + T extends [infer Super, infer Self, ...infer Rest] + ? Pick> extends Pick> + ? MergeInheritanceTreeWithoutOverriding<[ + Super & Self, + ...Rest, + ]> + : never + : T extends [infer Self] + ? Self + : void +) diff --git a/src/util/misc.ts b/src/util/misc.ts new file mode 100644 index 0000000..f381be2 --- /dev/null +++ b/src/util/misc.ts @@ -0,0 +1,3 @@ +export function identity(value: T) { + return value +} -- 2.49.1 From d34885a6e48c638b11a808de794d33ecccd74156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 28 Jan 2024 01:39:10 +0100 Subject: [PATCH 009/136] Dependencies upgrade --- bun.lockb | Bin 160294 -> 160295 bytes package.json | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bun.lockb b/bun.lockb index a8be37ec9a258a1b8ffb32b87f1705fd70b7789f..190bfe8314200fc5f363d89775bb29e55e41a91d 100755 GIT binary patch delta 15298 zcmcJ0d0bS-()Q_*5e|qE0TD;sH&hT5oI%vVYur#kMU5-SCXRw2xWtt)iP1>hax@(y zuJNiQ8ZK_Q#$DqU1=qOm5fv5JB*yqXb^090`u%?2AD{1gr~0X`uCA`CuI?E+t8dF| zZp-uh>yC6^G0I`n)k>`+<{iuX=%T}NDK+}%p-I2qJ-D>EQe+K(K0j(&);xnGRgxsT zM+Hf$0-BT=Kh~C#C?y*usVZZ_UZ6B#I}JAmB?TU!WWZY(=n47&lqNU}O8t8^oTn^ejk9vzkt82* z?VvS56EqwS>J8i!v<_$`&|0APD@#&6&|{#rLDy+?4k-1fX*e2`^jSbnpkc0(g#WkK z(&#go6GpB%Q5U^8GD)CyZ6V0Q;5`UXN|{)cc1$!8{|j!VjrB)959enMPI ziY;@D^gjAY-j*4kHb#=96ivPqgJ@hnRz-Sh){rD;DT@M_5SJ2{n6wHVn9Dv7l>F5L z1Idq8P~!W6lD|DcF{k|sw2|CVP?CF%<&xo#KuP|FMr|;H;?NrIq49cub71EzFlxb% z&Y)F6$wJ*DcYxt_dq!GH%Gh*C`u`ECEX-m5Yph14r}|~4WsK<$%iYjl&`1~((^$AR zTBGS>)8il_c{UOJPT(Wl_Lac25augrMgmDm(qiZ#Po>&M*-{ZJkSw)h0t6{$k1&t~ z4m1^t+BFjjW`UB2nt+lkYc?11Re&iJ$!eq}=>tC@KOB?{8K>bvpsv76{6+r)PzqHq zKg>^x!yrH_^#dgXUbPSkYHIug0YZV!ADJ{^99cdiP#E$*^iwV@1f?XdgmG0!4-6%P zE4C8&Ct%{6HBZ^9XZpe0*ivASU}}(bM)}IOuq?n8KWv`xKC?gZV@O= zyB*XO^f0IkXr4y9X#Ca|A-4-A)4FRaM~scLs2$Z}z z0R5!hMWed5myjo|B^td2`bRx~)jzzQTG{H^^$EU(0i;0BkLkdaKhetkie6bcR*`*a zVPcW#abt%2Apn_>qWu)vK}^>Xl*~)kMrYVkGvbCxQgTXKJjH6qe?&iJUwT|-rd~K2 zK%Qpb-%-p{{avx#FCY(oZ+ku%6tq>KE+~=HC{u*v{C&*E2B4Dqe-I@(h_Z>l7HwWMm6Xyw9Nn}Io%x{AW!ZH03|Ex zfRfcaq6JQf!~YFWk_Pq>tI7k#ImK-&hB2UIAa-He_)(IyZ-_AD zc0(bTo{^T|*C!<{ISdm}MtXpf0&}b|fG!9qcA1xB#5Qa>RJgc>X3%b68do2fCLDsQ z>H_*o32|=BoRv6dudKgjX_rLdJ=>_^Ng1{=nYK~GQf$e?$Gk!c(h}n`VX`we7Y%&YP^^2zh_Pg^grcC*+e)cR<8HsC z3n`W%ycM4jmym=UoTTBspp+8s;E}eMqs1(?Oh0ucN5OXn|E>~O$!kE=7-4i3Ohxe> z3`+TN4x`BCL|cYBtjRc`?Ga`tn=ipe(q5#|VYX3;ez*z5j2HdUN+GmIzc0`sNRjqk zn)F6cvLSkcu(dPRN7`-xliUSR!umx^=i|&!t*WhbaP5@Vqq6^T|SwWXBtE~6#n>O1Pa!_g8W^3jS=NBmyK>*6FyQ7Z3qv_$VMw1k$X zaGDsKiI$jcYZ;HhNn%7KT3wXXI&B@$=&q`}j#f9N1T2JCNR2~FXxohz7FMgRl3U-( zdMd^E{6O(-U}X-9t%23J4Jk8FNo^2nbVt(kS6d^|61;k2RZvPzX7-g*+}z6U zD!zVJW>IYTv@5yz+@TcXlPSLbR=H12L`fY#x`|m{4AdFOsFeDeS$(D0-^zw4zAdb5 znPS7|MI{%XU6o>dE>L^}tn8d(3$V&fYL{8j!psttV)U$1d;_iQxnc{ny0)o<#D`u7 z+Jj2IrI~WQhLh_ka0mX4`#re*|HiFT_n%}Zg4_FVvd6(4`ZsQKl*Pe+m6E4uGHY4MB~Bz^U{`gQ$_pzbuN?!-(aiTFw`)d>UJbI z)my2uvZ6*~_)d0eBmz}Y869PDYAi|ZA*Du5UZWv3d*nMn0q8?U_?qQ9O@yS{XN&=Q zSMjrk%HN_D1}P`X8`;%Ypo&UqfSE-oxn`^U5qOc1Fc8mJ1Y}Xxn?rFr+bon_xfZKD zuBnhQDuKv?BE>hv%DO2wd@fLOL#*;#XvC6}miwH8+zO6tlAW=yP z3^2=c{Dd8_J<;L>@GiQ<=Bw(jchOet4fG$?xcnAoIaljr3ZY^k+FEc9mR29y+X9KD z#VWaNt#U4Skt&aL8R0E44{ZUM-_9x*f=BwD)a~gWC?te~-vc5CJ1C=@n&r=cC=@Um z3pfSTQ|+U<>$H?4+~H_j2U9iowOZxf;L-LoDx;@boLY%;k0YS13WVMH7Bl-o@eQ-e zmmxsgNG%hrijo^`-(NabA%u;eYS>=52Xd#YDetU}(#*+%9ED}2r zO^U0dioVv6P<0oGlG~`{M_Zh5GLwz65*T8ZrvOo~C1o_iwO8w_s3y)^4LPX0pq=8| z)hfS_IcQR`rVSdxq!|4Wh)h7=V2k40%_?W%iym==89OwDM1=G!AlmgpQv^&Rt3-lj zqe-)fs2l{M^c3UV@okV6gMAodaRQ)WFd)oqJP6cM@oNz(zoM2ZM9%hwJQa1-mGWdD z%4M3^;shWfjs#^dmE0ayWB(4YTJZ}Al^38z>Jg>-X1NH6W(GoZ>p=&_2Z@Wl+)pWv zu(CsnZ=_YO)=}tmq%@Z!f#68Hvl^IBfM{hh87vn83B$-EjSvWmg{TfAl-wxwq>Qr4 z6*}pmM%^&3C8SoZn`n`J4oZF}v+M^|v@nB`pI~tUAlD0HHv@GAQjbOX4UiZ{nG=fb z2ZjiQaT-upWxa2x@iJPGsyBl$RP$yxvpfcfHW1PRqrV0s2dZU}-BfJRR@tMQB%zLx zA#ht55Y46r+Bg%at&)lu9YBk;BFG)h@=G914;FTkp^f-u{aEb3G6OZNsXT&C&Se++(k?HXLK{O+#pJ%3F;y2O9X0;F(UWo0f`NP zK+4B~M8GKgl~El~-e@agt`0zD{$LZ7;sI9UX7Iw5^&z3gw`jeqda+|Kku>lw*1r%4 zHG*`6m<<RU;V`G4X)AKRMEFcj?TJb(5 zcPMsLf3Yh?+C&3UV1Z!oQXr}~sN&G|5QuiH=xa1UpNFhZ1j6DdwITTkXrPKHoL$k3 zFGF7gkza9^AWY7K#5m#CnLtB@WW2>`u(%GW=O>$}6en2a{os*vv7fNbZ~!qfvyBSMLE?)X8Y6bAgc5_R4CuKLMh%*jdRRV{wWV zs}VMS4MfA#yfEGb>Z#^SC=3_gDfKtYV}WRuIFc+DCje|MESaqKi4#_fqBtC=z1m0a zSPeue3Fn}^RfN}CDyi{pozS2;aZ;fqECv!$Ctsfg3P2y!bu$}lBv8?!{EbJ8_*go| zdLA8No?p|3}@mwP3O-6*LC(rh4_4nD-~L5k{m1QJWQ{?RNFWZX;EvWd=>~944srh&63Mv1(XU@9>*0xv;o9j ziVZK@IM~JsK;$!6*3;rt2FTSffoM7$_wZDZO^*--d;$>pN4?X?xj@1{lp0rnXcr*- z7}sQkki0>Y7w)zXBmQ^f`qr`bn9l!7n~W`7414kTjaG)mtq zSiEr*P@;OGT|tXnq#7xk(*AIw8G8{@)|*1*8EBDaYvMxX* zD~io@tvNJ$!l@e2^vC0@YSN$#% zuM|(P$_s%>4ylDyJ_dwq25pOuW@F8CK> z?-(E&hZy49Opf9^72hJj)2?IzW`oxR^^}a8pl{jySTkFq_-0vIiDJX2zmkhj_y(Vg z6<@oRT~=)PY_83ylSo}dvQ&`EOBXMmeZaZPw_EFbvBjaP!i<;EF zcHoTrsanI&+^OZfc3w7{+MvbMbzdy1)8^#5Q`!Ev?;nv@+<33&*R_9a)BR1L(rM}U zVbkZnDrx5PBmb#rSG%3&U7H)d)7QUCVzs-2?8hA*{ZJ>nP_p>mIdX3D*8cYwX8i2E z&2{XQ&u?U81YCBEd382!LywIS%hvj2onDkVufdkB4*XP;Y_CQarVI!O-mu7|bn3Wb zZDHRHD_QiAafPR|`t&=zykCQ#wsf?Y_Hhf zzqr@B_l0G0)A-w#c!$;5dAk?9F50lhTEFA!{pnZgG=D$hWzP7J6)Ry6tfQZ3B^;b( z{~Uh3J}2YFFwf2{`m}jjvUbDvtbWrL1#KR`Bhs{S#k+g9ckUMIu&rhOV(&%15p8OY zoqM9?4QF2 zUwmA&N)A5f(09$$b9I_muXx=sZt~p7gCiELspC+`(lRH+a?CBEop*k<-vc+b?03kJ ze z??B}>W1e=8tF$KHf8mseYxYd&baLfhSKn*?-z#per9BQFYT&9_X9va6U-r+TPy4Tz z)SfcVTj@C9laD?f@%gRPmxoLSyU(%jeoFS_F<~yh_dUnq0^IP9v=RI^&Zne`<-Uq$UMtVL!x9s@m*Q=js?(^l4 z&=bYYf4l$m)*>%u{oeGjgmGVWFZI3E_4uumBb$3=zBI2`_N2$Gn3NY!EbW@UOw1V_ zKC*lN2CF-N<8)z~_w#eF0$cf)u7CI_ETt&+lTqfx9vg@3vyNo__!2)B#Zn4N{FupL zd;yofQ&8&1PBQ#x=)kWBGAH9HFZ`v8gPBY`PyJm;LW<3w{>*5=%JK_RTe97Zy(sVt zVqT0@Dd-f;9#nMw24|cziu7jCDx~5oQsJZjrMW8ZFW8oLQlbArt7-vj$0jk)rd`EQ z>Kj3S%}-5{hVl9B8E1YRzlNKP<8W_r<}3X0Q#zE&sUz`cA>17{@l-3zHnxk|Cap1X4c&yFu*^M zH{Qa6**rdE3v0zZ`1~!*o8|FuKur2WqwgJi^3L~C_c<`ghxi8uN@w{s2n6ddldAvv zYhdrAt&_?H^tVe(O#$0a7bgrX@A2S%1<SxlG7hc zUHWiX=fKY|?k$%a&+{MBfhNUKTg7qh2d+*F&>+aR% zRk?uvi0u29_S%zI^;ODy`tTDpMKb?sD;$56yOpwPwOUG&{wgVYi&NF!dEpxjEGE#O z{4SO9sBM@`e@AsC`?UAYm8XtDprt=VBuRg1Rgl~0-t5AC$I%mno>q9+#g|~HNq?Gk ze9_dz&t20T#v|Y=bosy!Lj?)E~RAG8|a#_j;Xn=bfJ8!P>Vo`{VK@ z4MUF`dL|vWY?}V!(fRV8@jMknO>-eo8v+rV4zIrMI&Va|z_)w_1Xuyzv7I$D?S~x2 zXgQS9#$49W-n`lLr1&cAB4;~TU6cO&Y==j+szc^3`oMt&`6C4(9?jeBfTA?MY!CA^ z5@!w{O`LT+8^okPaI-v_6jiy(jKcDf_xWy;tHkT>WuCQZr2a_G+<3jErTif@HEJ(v)FkD;^go_M1*JgoSm$yyu?F14|v9Ncd};k?||M|6X#bTY102pJHN%i z*^M^03!%W85!qI)J-OR1sPf~@Kur2`wWZ^B`q_$%8IUvk2UC!G@K}-)dElAKrx^e#l>wv>W&Qj!4c;$%F83fbF78OnNSW;N z5Atsv5V(p@`3@TLIfn*TlOF>z>E$-vvCYvuKw(drMkvYd&o^YxPg+0{mN3 z2B7(Qjy4p@K|NaTQB%!5&k$KfUw2v^dkxE&c_guX4lPqjNX=AF6E*dxhch!4H@-5no2w?z zx9w#0Y?#5O>*!3@GB(eL$D^07AF!>% z>C9h%Y0{sOZ1D~4=KgEjqvY*C)Sy7A0pEL)RpSHpGcz)M{(cDSFR0dj?tST`Q}q=P zZiNkj*mvdE_CslZ{>y$AVbULjEoj&&_BU?_RVj1^Nm3?{I{>-qd=iLBf2ZbC??(MS za=mTPXBL%lG0!6b{heCD6WQIp!i)48bih2u-kdj}iXRO|vu-~)WcVTf1ZJ3vhO3(CrYg}1jI2%_Dk9uN3w zmp>-CSzP`elhowxzK6K}UNN~%`^YnyzjcLpu)n&!Uh&Zoz>2d;PJbu4)WbES@{EtS zklFwUS|mTd8v?=l1IwXRXEglwvxy%;fKDB3qh5YugEc9=`Z&|;NdbCV3(E&_*CWua zKju7GBmMk~_TKM8KnwFY-T?ya13u{gF1LWsg+Q?W`qN`nrIxK${G3EaYKv(hPO2Th zedA^gT9vF$p`M8g`4!Ur??(QQyB$T;^oOB;(4eKp0Ump_+(`YwXsU0m_^%hlM;REc zh0c(Qd_Ck$@kmP-?7f?E^McfrX3xr3o62t-Wyy%l=$nw!pLQ0#clPGBr}Gw+%k|+? zjzK_wtlQ!AC8_$*QR^XqQ-G$*XgU4JTL)=E8kWK&}2rvhV4K4JM{l8345wv6%+& zUJ$^TkwoV6YZ%Iw^JPH6Wlv2HweEdC{FjFqMQKDg4E$n4etDQUu1lK=V>G z|LO;x@&P9yK9kP|GHGu|?R#o8thgg~ z=yiy<^l#-KEQvbSEO-UJD$w0qf0R1C%HWigk5~=_QSB&9`g_bL2d1RwoIifrz>K^u zTvcBms=rqqu=|lQ=V}R^S=yGb&WAwIq`y~P`t@fIs(BVohkykc0GH+S`Q&sFHd7z` zzE=gd{QT>r;rse8_^*Mr1Bb3v!nL*ufOL^d9I$`i(sz~{4J;8HPjLP{%8MaE*MmUk z(g#gDdpH=_3~+FzDSJj7*<#;H@1y%YV3xL3wAiVksa6X?s)Jv|NJ;$Y2JOOJ-m#P~ zF^%UHVu{iCB1T!!b85=Y%lRAEL4fW=7++dya&{WNdc{qr5nq`{5%J(Bu7O#fFF~J4 zf5%z)@szQ~_J=8n$kDJOj2Du4Z(i~f#AA8wGa%_a67Y~4w-6uP!^*K-i~=OdCbrYi4n4wI=B$(z;Tb4gr(#=9ypcFM{g zY0=O}2@ZW7xDOfS#(Q04&7Cx6ICnb_W`DlyBFHelw-{tRk0qwIifP>O9&66C&M-%I znIAq6FIVR+F0jpP22Z=kBK-6h#z*qnZ%^#gwhpGG`vCGze{=kcYrV~$VauNw;Kk7qc4t;YAk22J*U>(4EIa1yPG)Q=SH7(%&pQebUkK+E**vVIJCB z@Y*c?)g`Rhle=7ouhpPY8O#Lwm(bAdr9Iz^;Nn|2U1A)d=FdU@_n3;TU|ac+D;SUO z%^-Z<6)aM)O!{Ny*U>TFKVF@6wLHE;822o89YbTd`&F2zzj`t{BoLGS2HMe@GHZLC?-Er9s3+nGo>wl%1meG4Wi?FtyXeJ>j@B5Ry43|^ z=jn!l z=})AS)ANc4E!@)_bJ48Y+agcKdH>`!xsGxoK-f&rQDK2GpnXvo}!N^|!=d z_AGol@Q2Tx)wQaJ&P?9!CgjAC3-hyY;+Leie9$eJ*nsEWLZ36gLS#R8yA4Z4+)1{)r0+Cj&idkz2zOAAn~9?oO`S-&xZlQ`hV*2 zCWZYkz23VQ4eSGGr^;T8Um)pQS+{Tedyd;Mg*Gu&OgQf;e|ra+q`w2-QFJ$cZRRFX zQYqJ^zC7YCeDQ!M--Tz?s^sU0uUr_c)+TiW{6Cf_+U58nBDSq~aYRZwC z3$VODZT5dET*+FM!fzG3?!n5_{QNywDRY-%klWl!B}1!;f1319btHm4=I`9c!J_|H z5JO_ZUHlGDnWb3*H|6p9_n}I=Y?URA`vWywx;#J%74wB4CjF`Urz8BllrNWEgAVP2 zt0lfh)U4HvL*0DHjI0GudI){0F?xaK#~-ptEJ59Jk9cqi1b*SR5>%~oys!i|-Q^F6 zyyV75=wm#Di1>DG(qFi@d$uS4XqDjMFosT4gmo`pfv?}#1v^OmD1S^Sip!6&1pOs@ zcH)BkofnT_2~;j|yy9ol(T^cFm}i5S^cU{mUf%JrZf5fu(5{{R(R??_#qb|VpZ=!3 z#hUhe?oN-#j}tgT)bgWdvNwz7gPuU&-+vTosvQ^?_*@7C>yO&yw6=%t_xf@N6yXa@ zYZSbHA9{mdA>Fm{mp!_CH0*i!UZWjPVS}z){k6@T?d8o%A*a85fA`$}MYnfXr~Mct zZl)J_ECdkd38k!4{io1Jmn!`~C;4i`xUmy{ALIjhd=)~(rSAL&$@k^2iG0aDpE8A2 z=DANx`T;k`u8wLns;iD=TYKyi%UtZBrkuNhCoOqUp!AIxX4F+dk$HCw& z7(slLgQ1z;sSf$U!O&Rmyyj_Wp?CgX(cr?nRx>ovJKt8r1Z%1p>i>bEjZ|m<<49j! r3+8v^LmUltDz^3?lRVL%e;Q|Kzyl%-4t!{J!&nwnaIU(c=YanM-R$q7 delta 15295 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 E0k*aA{r~^~ diff --git a/package.json b/package.json index fdbbe23..28b3c09 100644 --- a/package.json +++ b/package.json @@ -49,19 +49,19 @@ }, "dependencies": { "decimal.js": "^10.4.3", - "effect": "^2.1.1", + "effect": "^2.2.2", "lodash-es": "^4.17.21", "mobx": "^6.12.0", - "type-fest": "^4.9.0", + "type-fest": "^4.10.1", "zod": "^3.22.4" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.3", "@types/lodash-es": "^4.17.12", "bun-types": "latest", - "npm-check-updates": "^16.14.12", + "npm-check-updates": "^16.14.14", "npm-sort": "^0.0.4", - "rollup": "^4.9.5", + "rollup": "^4.9.6", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-ts": "^3.4.5", "ts-functional-pipe": "^3.1.2", -- 2.49.1 From a4b8166af811eba173d6d3ec8951486d90de5811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 28 Jan 2024 01:57:58 +0100 Subject: [PATCH 010/136] Inheritance logic refactoring --- src/ZodSchemaClass.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index d2dbf62..ff4569f 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -2,16 +2,11 @@ import { Effect, pipe } from "effect" import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." -import { Class, GetClassType, StaticMembers, parseZodTypeEffect } from "./util" +import { Class, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, StaticMembers, parseZodTypeEffect } from "./util" -type ExtendableClass = AbstractClass & { - schema?: never - defaultValues?: never -} - export function ZodSchemaClassOf< - Parent extends ExtendableClass, + Parent extends AbstractClass, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -114,14 +109,18 @@ export function ZodSchemaClassOf< Class< GetClassType, - InstanceType & - InstanceType, + MergeInheritanceTreeWithoutOverriding<[ + InstanceType, + InstanceType, + ]> & ConstructorParameters > & - StaticMembers & - StaticMembers + MergeInheritanceTree<[ + StaticMembers, + StaticMembers, + ]> ) } -- 2.49.1 From e35db63da8c829e21274b6800d7029174c17e30e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 28 Jan 2024 02:33:05 +0100 Subject: [PATCH 011/136] Refactoring --- src/TZodSchemaClass.ts | 24 +++++++++++++----------- src/ZodSchemaClass.ts | 14 ++++++++------ 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts index 4dd40c7..3697473 100644 --- a/src/TZodSchemaClass.ts +++ b/src/TZodSchemaClass.ts @@ -2,7 +2,7 @@ import { Effect } from "effect" import { AbstractClass, Class as ConcreteClass, HasRequiredKeys, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag } from "." -import { Class, ClassType, GetClassType, StaticMembers } from "./util" +import { Class, ClassType, ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree } from "./util" export type NewZodSchemaInstanceInput< @@ -25,20 +25,22 @@ export type NewZodSchemaInstanceArgs = type ExtendZodSchemaClass< - Parent extends AbstractClass, - Self extends AbstractClass, + Super extends AbstractClass, + Self extends AbstractClass, > = ( Class< - GetClassType, + GetClassType, - Omit, keyof InstanceType> & - InstanceType, + MergeInheritanceTree< + ClassesInstances<[Super, Self]> + >, ConstructorParameters > & - Omit & - StaticMembers + MergeInheritanceTree< + ClassesStaticMembers<[Super, Self]> + > ) @@ -82,7 +84,7 @@ export type TZodSchemaClass< ): Effect.Effect, Values> extend< - Parent extends AbstractClass, + Super extends AbstractClass, ExtendedSchemaT extends z.ZodRawShape, ExtendedSchemaUnknownKeys extends z.UnknownKeysParam, @@ -91,7 +93,7 @@ export type TZodSchemaClass< ExtendedValues extends Values, ExtendedDefaultValues extends Partial, >( - this: Parent, + this: Super, props: { schema: (props: { @@ -102,7 +104,7 @@ export type TZodSchemaClass< defaultValues: (defaultValues: DefaultValues) => Opaque }, ): ExtendZodSchemaClass< - Parent, + Super, TZodSchemaClass< ExtendedSchemaT, diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index ff4569f..bb1e85d 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -6,7 +6,7 @@ import { Class, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutO export function ZodSchemaClassOf< - Parent extends AbstractClass, + Super extends AbstractClass, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -15,7 +15,7 @@ export function ZodSchemaClassOf< Values extends {}, DefaultValues extends Partial, >( - of: Parent, + of: Super, { schema, defaultValues }: { schema: z.ZodObject @@ -107,10 +107,10 @@ export function ZodSchemaClassOf< } } as unknown as ( Class< - GetClassType, + GetClassType, MergeInheritanceTreeWithoutOverriding<[ - InstanceType, + InstanceType, InstanceType, ]> & @@ -118,13 +118,15 @@ export function ZodSchemaClassOf< > & MergeInheritanceTree<[ - StaticMembers, + StaticMembers, StaticMembers, ]> ) } +class DefaultRoot {} + export function ZodSchemaClass< SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -138,5 +140,5 @@ export function ZodSchemaClass< defaultValues: Opaque }, ) { - return ZodSchemaClassOf(Object, props) + return ZodSchemaClassOf(DefaultRoot, props) } -- 2.49.1 From d867a3b83a52fb526b1bbfd32335f16a4723db4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 28 Jan 2024 16:31:44 +0100 Subject: [PATCH 012/136] Refactoring --- src/ZodSchemaClass.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index bb1e85d..6fab497 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -2,7 +2,7 @@ import { Effect, pipe } from "effect" import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." -import { Class, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, StaticMembers, parseZodTypeEffect } from "./util" +import { Class, ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, parseZodTypeEffect } from "./util" export function ZodSchemaClassOf< @@ -109,18 +109,22 @@ export function ZodSchemaClassOf< Class< GetClassType, - MergeInheritanceTreeWithoutOverriding<[ - InstanceType, - InstanceType, - ]> & + MergeInheritanceTreeWithoutOverriding< + ClassesInstances<[ + Super, + TZodSchemaClassImpl, + ]> + > & ConstructorParameters > & - MergeInheritanceTree<[ - StaticMembers, - StaticMembers, - ]> + MergeInheritanceTree< + ClassesStaticMembers<[ + Super, + TZodSchemaClassImpl, + ]> + > ) } -- 2.49.1 From 9ba149fb4c34c784320fc2edf2e158f5268e6a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 28 Jan 2024 16:36:02 +0100 Subject: [PATCH 013/136] instantiate -> create --- src/TZodSchemaClass.ts | 6 +++--- src/ZodSchemaClass.ts | 6 +++--- src/tests.ts | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts index 3697473..1efc5ef 100644 --- a/src/TZodSchemaClass.ts +++ b/src/TZodSchemaClass.ts @@ -62,21 +62,21 @@ export type TZodSchemaClass< readonly schema: z.ZodObject readonly defaultValues: DefaultValues - instantiate>( + create>( this: Self, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > ): InstanceType - instantiatePromise>( + createPromise>( this: Self, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > ): Promise> - instantiateEffect>( + createEffect>( this: Self, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 6fab497..3b79414 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -40,7 +40,7 @@ export function ZodSchemaClassOf< Object.assign(this, values) } - static instantiate( + static create( ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > @@ -50,7 +50,7 @@ export function ZodSchemaClassOf< ) } - static async instantiatePromise( + static async createPromise( ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > @@ -60,7 +60,7 @@ export function ZodSchemaClassOf< ) } - static instantiateEffect( + static createEffect( ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput > diff --git a/src/tests.ts b/src/tests.ts index 7c72022..11c510f 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -12,7 +12,7 @@ class Test extends ZodSchemaClass({ }) {} Test.defaultValues -const inst = await Test.instantiatePromise({ id: 1n, name: "" }) +const inst = await Test.createPromise({ id: 1n, name: "" }) class SubTest extends Test.extend({ @@ -25,7 +25,7 @@ class SubTest extends Test.extend({ }), }) {} -const subInst = await SubTest.instantiatePromise({ name: "", prout: "" }) +const subInst = await SubTest.createPromise({ name: "", prout: "" }) console.log(subInst) -- 2.49.1 From ff9bbb37e8b7fcdd5a0e4f476db08fb4eba9429f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 6 Feb 2024 03:30:23 +0100 Subject: [PATCH 014/136] Dependencies --- bun.lockb | Bin 160295 -> 160800 bytes package.json | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index 190bfe8314200fc5f363d89775bb29e55e41a91d..9deffd24124341322b68eff9f5b8e66aa557f043 100755 GIT binary patch delta 29805 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 delta 29374 zcmeI5d0xlmj3FV$7!!#h3E?DBiX2l+(W)T`VkXqwL|eD2qb@8Rv}m>3 zx-D%LHKwS!L}^vghElUqQzw3(XAkA}x_#gG{@&m3ue;mte%A9{!(Pu?&wAG0ImbQ= zPkZ0`-urxXonfUHjSTqcSh2Vc&+mHw@xuWNT_d{Q?3ek=sjaV`Db}%Kv>xMj$+38L zdPL4k3k*}SPGK%r?&MJeO=Uf2FZzg4{U-|Xk*#MA8k9L;oXhnNdJy>wZ8!pST;L#5 z3gp@P`-RjyMr6(_C0wpb(7DKP!hyhOCS{TioTUhTMgWKrXZ8vq;Gw zW$Rs$(p~~mCLlT3<>LR`%C`K8J{5Jja&j9($cSn>D+TMJ%M2yaSqkKqMi==zg{1$F zF)C6%J9EUtnPXk9kWj1qq>SOiv$DszCXz4Zv$Fe-8pkXSx65CqlGIy)Rnks)MVaXw znZf}X!!rhEzCi}p%6%Rw1J<63GLT6~;iHf;;$@LsGxsR1Nx7X!DfcVpO2;oErF?-c zv*?6OL>$8-^_~3s=t1Htl^I9zxl%~!p)(>U(HZsJv7?3$A3xgV`hPK1Ib0+6&vP|$ z^oXeJQDevTq~{^zuZpxf(x;X+v|VjEdi>}Ninz+ww)ocYOn2^LbTP!JW67}tq?F6` zGVRDnjmR3AHG;W97WJ$KW+7#SY9nPR!|Pk+OQOqE3^r%l z<$5&ADnA4%9eLQ+dm)3-7erh6bC5DsX;EBX8cwEwSQ>?t4%}#9H4tv|TVkvR9DZ2l zq=%*FPsCasSx&zA!d#>{aWU$Zly>N-bhvOMOaB2~_;`DyvU0Mc7;TmmgcKan*t&3k zWKnd6$Q+@p?5F{f8juy0HFD4>S9yC1hGb+%P0AQMvY4%Ri?a;bkCYC5f(%A(LrQz^ z+p>+#hr}gV1)abcuD> zr@RdG1zVm#-rdfh+aJ=xjCw=``vULL0cpT-of+ujT3wT@3r-l4HDCzil9in~F%$U; zysVi~$(G%tGsX>xVz#oWCyTFRiq(PpkkaA7c6(#9MvToEmzx(kdXn zIyxge+X*u@s30BMe4llp&{oz6%%{BYE6`%$~mp*jyTYVavId1GE_{_0mqXvu`m^s1DA7r=F z6Iq<{skY11T(y=N?v2ATvOCONIe?u}| z4|cN#^?jrmJ34AahV->=cZ;8el(ES{N`5Nkq#Z8?h@OmY#`IELpg2U?bSq3zS11e8AcjS0iQD>vz z7ZATKgOvL5eXS12T?g?q`$!*a`8Moljc^0XRhAxYgpi8WA>@L+iPS}rH&Rt(8E8#p*2p25W3$F(6KaNM4IVP?HfusE6RPNw%QcUsCXEix7(ZB6UGqU! zy;!7_%YkH<%&mbg!<&IQ{pr9ccp1(sw1G7_x!qa2G7N2Oc@8NJoS}d?%*aur$I-qk zqksRgnGX}2ZO_im9-Ae+1S1;+j)zJr5~ER2oiNygtUd5<7xv%}#i!cM4v5HYg)| z97)&M%<xP zC_zZULrA%xbLZ#qY*nUZ5h^XXe8cWjts752Qkpw6#j14(8G`=OG|RrdHlH^|y%g;G z@N{sMVB<684NLM~qrF5*2B`dw@kWe#GAzl+P&>ksJo4DkSnX+=XymJQ;YmhC<*k(D z?(bHqm3-b;+%6ZJWv*L=REl>WaI2k=HMpB@3u&nQ+VP$VXbCE~TJr#p%hg(SsGR88 zK&p+I@)UNt+L@`2q^w-^2X};&RjzswCwB-btHuga9n8A7{@~gKx?G)1ZXPKs_XH`c zmAZ_iRX3ZIb+y%ha0Vl1)#ymdsxg<8-)!$YQtec5mF5BXfmQ5bQti|;7G<_(1gLg3 zlH8q(saZ9A?njHMoi%)L-kM3CHTc(qD!68%r!*ef(@YH`WpP_cbuqc}%vV1%HG$Ma zX6g%41I<)C;j53Cn)^rUCsJ0qPWZHy`*%{-H9Tcpt{zgu-K&h+S=;AcVG5(X^43Xm z_b97U>-gLslvT6p_`Dv%IX5fJCKKmQEvJI&`rMC|Q>k@*-aPWyNywWW9`AmxyxK|L z(ef&&p3hs6?Lq1lmU`Z9Xt<}i60OV%RXgkX+&e;5P<@~K*HD#;Xjwtcs_*k`tKf2V zS9`(}y$vc7FsWm@jC)u`l^W%9zg|(zLY%6oc1HP(1m%rRa_5Gr)M%f3ZJ3%B?K2Fu zBRa|3Eu85xD~HsH_r8pFKbl86YE)NGHb`>!uB3K0@VQ^Bq=I66?!%Q-Dxz&=H48DP zvf7FGva$+_^?7SY{LzsH@$P{UYF4bz{YHe^iMSe}f*SgaW~yDoB+tkyGIt#sCVIA$ z>S?B`RCTz?q`H{gZc_csRDELOLuP6wsexwdJgGirDz&FO zQiFxKqe+r`P)!vS=ktCRX<5w_bWRAY<#PF)A@IIsYvz1-Pol+;S4f7(Tcx&D(#q?D z){49$<~+WKmW&pt(xT$M!F4RHu$mnk@9t1Xr6%~ik3)8(2u=|j@7a%*pgJTZvXgq7 zCNX2}nkIQ4u4|R?sC-6re_ge+sn6Z6o(gKl*w<63&3xW{^<1v@G{fvSh&O7f9nF%w zgX%MaCMW$|jn)9In97fd_dFX#U(}x3iJs3%wK7wsqHWIGg;YzkQ)w~r-nWIf+8Lb? zh$4>aF-@vYi{f;aNqrlr)D}MP+mIbiQheFNP|1jxqvdWFqk?=sZ$6}4AkZA9(y>+% zYY5ZPWOxHqNWFOP3urPCRF94K?nCQr=E;CoY3OosrzOjzNxXLgT3a-0=r^K?N8`iP zE7!=%Ge_Cm2hFyjX}o)WBegTx=RE@1mB6ADz%l*`!S@{ajCQx@$Ref5`es^Y#7!s$OylLCgvC_ErlHQQ%oE4UGnyS?Meclz2()A+dR7TK*v=V4~^+1v`u|-Vn9b2;+JB23xfD6=! z_a?FDNe8_uziGU88k)?uONB7(d3Ii5C4O|<)&gWoj23D~+a%9KF4D{#oDU>rU6GpS z(d7EpwAbeOO|Hmz;>kH^l4td1t*x08?YV*0!)&huosxc8F7^~jY29+Mt!Uz*R-MvG zrr$S6^!6bob+9@m-m?|0q1pp~LsIbO@OkUd6$y{lU`|ao_k<0}X289U=-~78OreWv zPfVg`4k@47li56wgtdy8NN+W~Unaz(LSo|GJzA<+9ewW4TB@BLecp2SSyP82bXL&s(UqRgckV5bs@T zYt~XZjwV(IsI>dzy-_qs=de!NoP;K0ZK&C;5&}@#st!?!-rq@CRR}GfL>AipW(b*1 ziV}4bJx54&l)>{fW>Gd&!E90ENLkyO1f+M+@LcOc?&ED$P&c2qOgop0Kn00!d6Ll> zJfhT0Qq5IxOrm!SDVYmq^1gWQbu_yX#v?k_TIS{mcyrNMd$}b{U;LZjTDFBvZ3CK& zKP4ICD`-|L;?Z>pq@op4X`SP}{cVllD{Bo+3^(_1?;*55mX)^{Pj$p6W{NrWwnvjz z7`c}5-fd`HB)6!!)?UE*=$sv@PN7-e6;eOmTcgt-zRrd)5Usv?2KOOhIlWBaZZvC> zLJ|@J2?Yc%*4*r{cy9{YA0y(P)LG4X(C1kRnW{Q8OZ40()yf>m`_e3TDP#`8Tr}c= zEZk=C#v%3OgGt_)E>>5}$?%Rwv)l{UbAQxD&3ee^xdhovJrkSgt<%-A$qKmHXcCOA zQQM8i!erEB487f4E}~j)h=epx7Mkfi-cLwbP9>#oqRFUOE4FEO%hRnrSEGsfR^HcW z)|^PpDc|ERAMo@=^GT5PE+EyII@Ugv-$SML^LeYVeMnV8CsWo3tv(v|){XbhLbE3j zdp}KAsTr)Jp4Mu#{H80K%qki^eicok3Za_D&ZEgnwelh#a4saSKM)P`=!;C|MYIP^ zO;%i6lKubC-a!*jVavczgL+x@tWlkb*3W8%Jnuu+Zf{0R_vDAvtbso7W=NK*Sj5uy z_O|A;kSqaryWT1_)8~B_QpUxao4sfj-%my()PfFKzeQs&uoTZJertkg{OQpRu)D}uPbF( zy|%*P5Hz2eCj;^(n)oEcLo0U{xC>M(`W`3y~ZOzUm9FB_KRO&e&fNfsUx_Y9g`kAZ9w@7_941r7Ik ze}|OrT3(QtX*FndcQIPBRRQlgj%NEihTT8NiMtZzG@7(x#pHu%I5TaEFV!3T$Bf~$ zBhc>5<{~s%h1P%=L;hGpL^=8UrVO2B+*^NWGUV6M%*;<&3hH2soF6%$(s$=(rjO@wi3-62Z`u6(AdJM&BFG?jgYNLwz0=a z$&}J3?A(Bsie}D^CvYUQWA2wXL!1QZgG&M!*{JHE6PP6_pwGxX0ib(i3lEQno`T$9sl|raIi8 z=ze943YzHi79DFj4Yx^{(*{inTR~=qoyRJAAR!P%=E7Q+;n`N7t-FC9X!hJQa&yq) zD9Jq=792p6O^ER#Ae0=(sLI2NyZ<;fYqHNf7eWf-m;(|5QMj?7EFSC$A1|XB%n}<$ zN-Q8GBf=3gD(GwCQHcj*Vu=xepyj|7@EBX@cOsyJnQc6gsqu3$=*s6tZrB_ zC<{&MS*^TfYnJz(M6=?Pcy^_URz0rHsP{o*=LlzXC#s!~@PGhe--r=C%TJPx)tfQN zS*L0J;@t}-shv4K_k~F+DA#91t9H5knP;+^mFsiAJX!5T9GR?wru&Tgs@?P?@6ajM z^9wg9JZG0tJK)Amb-7sI;^=hgFq#ZFF4Kyqm}%C4n0cPgXzc0S61`1IhLjr?7Vjmy z6jR2dU>)`3V~IH-F7vNgoc}#phWKbM*1akb_(!TzGs{uC`>I_770dk0x4t5oVL!{{4MB%tw2BG&cSxZW} zoW7hS(GSSc&ph8-29P%p$ego(n8*L6%rP61h6&^5aW5$sB*2;-C2*RDNZ|=s=5e8UK4{{O|BpxaeXazOo$1AyPWHLZr<92S5&ylJOys5m{yHt8IN9 zQjWipQhz;=k=X>qS3U)Dh?M-zqHu^b{ZA4_!RJ5<>;-b%Ev2D+ll^Nc_4nK5L>2*G z+xp#7${jX$RV!f@f%qpW1;4TRzmjg%duBwIl>XK(eJ|-D?|UHQdm2djGeC}eNy$G8 zM4kh3m{J{`8Ico+b`{8I-vCnTCXhp<@V|<}aW5(5e=~FMEhYbVAni!wq8oCuB=<&E z;$KQB>*gd4c#xtOmXj?dS;W@wmNMI3n>VGp@MQTM8N3p(k{e>@-YtbH#YtpoJ71)f zFKg=}3!{f2rB{`ak`-agDxz?RlzP={9clWiNyzL)+8K9Cp=#N@NJ-YVb&=9wU0eSv zS&DMaDJLCmX_s$l46qt#1tDB(J42)-@3(c4l5E3CMyx$j0#GlcSlkCG9qEUZ<8EoF zX-`F{IZu_$k<3g^Vybwx=tFHeOcV~0k{oX9cT2g#NO-y87&~8NG4yFjp&qfNTuk&_ zPEzktXRJw>he%02X3NKIIm4EJv*i;=IYdfBPa>rQPuu#lcK+Q`@@KA+%m$$H(EZ`kETN^*&zz`dmOxGDKkB$1Oe*xZ&aZ0VCs4v~_dWXoim7b(e> zHh&*dEqks?tW>(+Cfi5}j=z#_b@aLNX5{eOwc6XY?jfUZ^-P8Kl6NVDUoF$ z5U2acM-ayUABq2&E)5R@a@zmIg(!l@ZS%l)|Gl}ezp986X_ag|Zsf+Xd z>qimm`ep%XV87Jj5Gj%B?q?9;MVE5-di0R|yLl=1SC1f4{u^`8`_Hq8j0GbrLuN}! zx;e>8@gPMnEGJt^vWTtUEoHj@^DOe8XA#>q{_`yIpJ$P~pFt#ih%WB&pJ$Q(Jd51@ zED|lwArB@0B*k0){0!1p{k&jz@`V?7WHg(+W>3PJ$J@3W*1zxQ{k0>$-EyGxzRE)m zoU9zQ^!cZZM`|>9WZC=|t2EoYY~NGS-=E##T~v_X`JITboB4l_Ri4+jC(n59#)W#7 zzSckNU*BR~{Q8xVCAvqq8CdRAuiV`M7eBA^RK6>r&dD8LPF>ye?A)<8E363~KW$#Y z*s(E3iuAd0Fyn*vDtO^&6}8B(wl54;GZy*zcNY1J($&O8!K%q(zfn|8U!1OLFAi2G z(SlX%>*+>u^(5yKs(^Dz)%1;YBSg*STuPncTw0|pN#}#47de+zmpPYH?cPl1o2rXA zhpL}BS5RqhrSr|lw>gI?V`;h(t{&iANv+^qS$W@1HzHI9=PGIq=c+2?ophs`%HmvI z<#Dc|D!iL+)Kp{MO;@4s2CIYb`i)wu>aujBwwlDbj>_j;SJnA@x=~L}=UiWX%{fZN zzL(CYVo!2zpb9w0sHX3y8?kCO=Z5MG=SC`JdAiY9y~w$Vy39FFwOf&H#H&Rs(pB3P z!OHW2pHF<#K1f$L(N>}*D&xa+we*8vmHDBc@0G1U>-k}@D*KV&NKzRerK`Y?g4I^E z6cw^EU9CnNztV5qr}EH-tPEB)KlU4~)tHa5=VR|&_W~}lX?NmP6#8u48 zYQN!E(^oSutC<(H4k~s{x;lh5ca7iZqzcext_fDHKk*xBYW64TD&do0bq%enN?Dt( zPNOYZ>o>Zq%V_i02CMGt{6@N3v<~~$Vc&Yc@qkKOk9}w>(RwLk1NN=Qz72k(w_33w z-RPsd8`F)xDuZ)BwT5$s3fYuy^jBG&2dF&G1675*bR$!Z;XFv~;5=AW{WRSeq9$?9 zQu&;Rsyds~jbUo~W-Qu_MVtM`2o<{pi_qq7@f)L50ou$hShUq|j8U_|X3co4eO zzp+5AK^q2kXp2_c0LwpJP6 zV&5_B`_^x)S1ZtZev5tI`HhV#<2&s84*SsZR7e5#p^Y!_8=F-g+K>Y5JMK5Osxim0 z?>P3MZBtcGU?19y6Mkcd%14`c0{g!A8@tr>@3HTD>_gk5Vozcp+T4?VW3MVen|TuZ zPWkx<7PC)b-zn@v`$DDsfPH97e()Oy)n&B#KVaW!zwwn?bQ=3kW8WFS@wG}jgMDZ# z(Y{f}S?oK5eP{i~QMCfC=UMDK=QqAp8RxL?9QL6VsF3s6hc^Da-#DT2(1x7Hz6*Zi zq#APp`z~M~+7GJgMeIYHanWy_QTb>SFJj*%zj01Yzl434un+Bmiv1D$(B}T=H!i6H zw3$C*-(|mXSy$o-_;7Vp4YJNy5D`;WrAY zJhUM4e7Gi!NM0YPlyk6vm zXzPXW1VJ>_X+aP-g;*&>qBe>`EDeIlEDF&=uMnbVQHZj|Ad+-OF^Iro5L<;v(ILSQ ztA!XJ3~`^%6Jkg(M9tz5t@W7V5TV5(4hqpmS1kdtU5FVaAlm7CAtsi9Xi^fwucw!U zs9h4`q!1l+YzV|5A?AiabkYSv%nX5OT?!&i&n^X#PzvIj5M6ajX^7K8EGZ4qU0)Vr zerbsAWgyb^qB5M?mVxk;g?K=xm4&z|#7ZH0X`>v((y|blL|>gz z9wM+j#8x3PbVw+~Y9YplLJZJ(LJSFos96CbQ;(?t5n2J_pb&#~)rt_?g_uzhB1`8B zF|i^Ui;N*4$*GaRCIC5SP4b|r{}N=9*gy^@h? zWb2g55T`3qVo7C6jMtZim|q#9dj!M;y(j{rZ3Kj;3dAIxRt4gw5G#e4qK&E$ORGR+ zR)v_RR|wIwDn!|85IH)d8bn|ci-PlzGaA!^oun4!nifC#Mt zaZrdSbk&*=+l81>6XHpoFT})}5KST>p3>7JA!j|}tscZp zAyx|UvNq~NEUgETSs!A7ULi!!`VeKKAYRiMQ4oPq5L<;OZ*-XkMiqAtw|+L& zX!$}|fS%gG2=ol+4`D@D%}zCnx`kWU1nycepA`$Y*MJLlUOBOkZ&3wn=)th%oEJ+B z7@id^|E5?TZ&p-TRk*RS!MM{x5oy8eyjh{-s-tnnxx&HkCRzW8aV4^(wD`JQd#cX} ztWc_@^{*bKIp?3Pnw<1!n6##gB~z|$TdN5vH&k8*Fk-lC5L|I-?m3DP&+?LuF!#f$ z`dG3N>G{Y{1<9NuJ<84+oIP&T*vuBIW~UgvJe8at{gPq*qfBXbB>xsXYVf4d39Gzq zjJ}3ZLua)$-tx$+3Cs~QdlS@_zr$B_@ef!>u3}(|2N>Q}3pyHeI|qHYKpyY-YQ|#y z>T8CNzX;#DZ5_f6CsXp}qdhqsT`nwtA(mr=T}J*^>3r5DpQcMa`2(->x!EY2laB#k z0&tU1R%{w+11~K&<>2PO__mD?pA_Hdll6PbPEcI|wz=kK3H{eS}E#9Op9&=gSGTAUD&H zSR`Lmkc-p?TWxL~Qmm^3N=qikCY!5ETE5C8o!SB?+4aCRAf1vngsTtiFI45YKC{Uv z$bF=x1KVs){zh|=v~*xQQZC#8d_!7}-AEak7$9FBl1_b&lx+EgyqwMLwYi3Hp*APi zGQZ0rOR1tw<|AdfGzQy%9L~2bnvh;)GIzdt5r%_Wd7 zZFBN%3@O(XoRIY=79F<9W~9YirT1c`6ift_NJvMI*j#hc8-N@~ZLS6BjV9xA9kV%! z36;38bo5)BOCl{JCwY<`42fhG*jyD^e;iBS(T}`g3~DIRt~=-f(m_w~0FY1q zCF*qoox!8jc?>-6(#4k;4|}soj|1cNGfRv{Arkl`&dC6Y?J+uki4kUg+gPH+5Re7r zPjm9!frmhEAYrQmkZ(D(1<{}Zhyk&nA!r2TyBd*nygsr$QX*SN&unzB`zYj)(F`ysF0R6!L&<%74JwQ5m5cC4QL1)kf zNW_!~SzbTzmeDmwLW>00-;uXKJH|%7J<=F70dXJ!NKhOD9tKmvNH7XW43wBR1Z05z zpf@N5a=~;^oBH*De8;95km#`=6<{%lQfLb636a~eB z8x#WP>HGz72}sy3915#gJnQrAYbjg3eEwEao>ZJT;KHr_z-*qRs#7N zPAeea?2&K%$Tx(B(!d@dF>Ei$2m8T!AYntIghU020hhYdhEh zb^^WhZKGJuI#LqAT5~1&9+Ctn30_6ODbhcHqd;PZgoW?HA|PA+)8H_5_k)ArOYjxg z3-*EaU<23)R)bG~e8=fa>QzRb5hpk+3Xsp$Hv#$jSOgeBT7r?>tjM>D`XEPvkst-M z1owefpf$K3v;l2FJCF+epgrgSx`KbM$0Yn$75}-?e_iJ`7aNZenP4Co0PY8mfn}ft z2nGQXPJX2DW#A(HH}EJJ23ms6Kz7LOU>Eoh%m=MO2~ZOJOjX%ouYptGD3GXq5nKh= z!Ec}}C}^snM^0zK0SGt4>;bY-$;MOwcfu|x7D)%gKscxb@}bs%wLtch3ZM*- zat=NvnFn^mNvGsGhu-1D(d{Ec=e%Lmtob6k1}^~F2xQJ5k^&$S)Bu6H;9VmkxERSG z-~~l>rDaBX461%IcXvKD%SW#D^bl(kl6DC5HA`9MuHKb zfO6td5=tbNNi34d6Bm@pKLbvKli(N-584gHo?T!&$OG?#O>%#{k;HKDcOacu2wnrP zf>*$Npus#a2FSvd#$@r1u+yWF5`c5TB#;fH%s4O+OaKpq@nAB@0n@+~Nlhgo1s(x& zfdVgpr@)h7CU^oo4ju)Mf$4VoZ^#*77MKmB-1FdB@Cn#9HiIqTGq4lv0DHhU-~h-6d%@>mpPk;1`~rLl4g%*w(h0eSbnGi| z2uKHn`&wq=FbTQ%5pV(&fbYP!;5hgm`~XgYA%=CUAaPLch=PFJB3vRb8Yy>5a@Q0E z>Vse4WdoH>;V05pz&UUk{0J_|{9hn(9;ASawsg{BrGzIZRFx-v6;5_zxwy=AAhHN3 z3_L(OBO&WH;uiQFNJp*#>A=rG480C+%KYE3iQkaF0_lW6E*?Nb(m@0128Dp+IgNPH zowVF0$Y{t^Nk^o<+-Eu+ktOPkKvB}gK#n+DaS{^!WfyQRoCNPgd9hw1eFY#rml2St zFMi;Rj&M@03XnZlIw9$5wq6fe8%Vp=k+nb#*|Z}`)U*^+)*)RNhy~K9Gn{f)EF&TF zEORRjij)Q$AY<%wL!=nd7%3f*@=`_+M_M|ai4-4dD$mE_90@=?egLvRNCdJhyCb`T z)}R@XM#O<+g-DrJ;6Bh&@_=l{&4CXj16dI%Na2O+08&94a6f1-o3ca}$6 zbV+wXb_8;f&Y%-W1Kof)Voz`{N0d>J`A-M8N&ndyd%)*NA;H~_){l(7z*#1}Nk0T+ zN}NWW24&@lWAy?uLei*=&;!T^f%wwNG>XC zTIO0VB1_3BI~-l|XMo2*HW&-WfYIPlFcnM!!i@vtK^kp5jGQ3zKas>_Fa^kTOaqSq zshkU@gU7)v@FaK&JPn=!GCi}AbHN;-?DRb3e9)QvMaYHVRj>fO1mrJ*vKn5ICH69S z4b1$A6G!wFox0M9EJSkEsFg-_LofT-hze*(WYz_%56Ln6CK+$IyUBcx1O`gXc*_bzqxXw`!h~Yo?Fdr^ofm*iH>25;3B0k z^VqSC3*K$GzG;AARgHD!71F=0GD5?hHz{}V?W-4FDdep?CC(MnF{_QxCeFK;Uk!`- zb)?-?})OS_k67D-Wwe+;rMuj-%ea@e{F1Cq0<4(R)zQ2sp0KJ>bhCA7soITuc}i6wxoQ zF)D;P@4i-v=c^BW=B1f;3PkI@6o^aqux#nq_UpM3Q{U*W?i4WJr%g^^h_BviW6th7 zIfFgA@+U^aaOd^Qo4;yxe)1pxtLzQ0r`6|y%0Ujd872I zw%YBY|Hjc!ET)9w~5>s|3d^F?Q#joy^m_SY_ zIb{czJl45x>Z&_A&jsrZ)D3@+5?)HocxZdS>FtBgN{Lvr^;N<8%37nYdvma^ybj9_ z2kV4&MinDLFUm8@n*UP8d8hNr+vl$YRoq!Kz-S!J0-$T7itA^k(zC_&k9kHJv$XRT z?+P%5B1Zw&uABy-rU#(Q2g*Dy2L#FbP|M>FGL&a1jx%q!Vt`PD@^rf)Qgj^}nr zXKXMkxRc83sT2%%-t~Q~`lcQ?eP@(8)$!4d;#{`#lyP1o-spt^lk*lVoaQ$Ame)r% z7**U8%j;VkjD}&(i^&%zHvFyT-}WS$-N9j+xI(mlqtU4IKR59hW-!TrymI_pVn)V} zh8?}OC2=va&P&Nxg>F5vZ{Mx&$!Ump$2R68CjI$FqoEP5jZG{e=ToRr^Y@l`WM+F^ z(uk~Rxlcj3brD}5_qqd@0>8EUMX0+Nt~+mHHhvA)LpK?9y#bZjW9UwOy?`c-IK66< z(a24y^OOp^=W=M+gwZUeBl75i^B(gpPpta(=9JPhh!Rs-i6?2bgxFc;{nanNRX*6Z zFM(Uza6K{)D@@O=;O<&nughaToVUoQy>#(n^1}REmQTdtEtc1Y#@*XvrG)cl`h*{+ zbShr*2|n!?&zGFD#kKEKBh)ZGwyZ}e(`zfZQ%mTl$q64oFByc~N|QSoC#N3Fy;Iln z*iiQ?CG_D>jfUlvwIwi@l-gCq4L zTM16iOR?vb%uQ+3`@Pm?&zeLxjCDD$*{+)O)THd-En~D1-RbZ7 z6E1vJp$R1(A_aefb_n!}ld}9BP{lAMf zuiRL+-`2Hs(cjseWyo;uDadm;GR@RkKRtxFGuPP+i_^;E%R5qNA%dV@sS`ZG-P6EvZTJe zodr-^7u~^tI&YyL^S4?rZgYLNo^s4UbZo3^Rz01(gU&hcqfbcPd9mTk6(_oJIhvxS zAL{F8cW^D|MerpmT!?NmKRw}2=Zfh(F2XYYMy}<&fIfK4v-edz@$^l~#aU)1N9mF~ z8IZIn9leVQaNcR(zJBC~uSZsGX!o9r4vErzC>id&{XXN%g8hZ37Nk+4k=53tQF=LT zxSf)Jybu3GT23qP>R-&>iI=$+MC z!%~-v?N2{={M#$f&oO&%I*;?d{NS1!o43kukZI?zZ@Kr(;d$4Y!rM)CmCv~?lfPKVO+sF& z#A|)qzp#rEcpf9=a^A)7Is9wu5zF^1w=YlY<@AWp@ipg_^c@>~y12s5&1EPMXZb&k z`}Sfhi+vpz30v6A>ga>UE8pCIPvf# zO72&Zbn$(xiEoy0fm0@j5T|Xc1civUcr39F}f%L?l z(eQ4q&5!tVZ~ii6$frH$EO8qxVC1&lnT|>5#nA^ou=&$hODy!bje#&_VeFZG8CCo} zHt6!Xy7!j}a2rp+$UW2p&GaMt2vkMy+Rt1& zzg&>t^PPR|uD*7Xhbsw(>}Tc_nJc8?7sep>jyC#HWSsMp1&hy3t~c(XpPsO1hn3>I zHT}ryx9Y!SWGo=ZULl)Ob>#yL*YQ-#u+~5C3H&lQ?ULOaocKnn?s9-T2d|!SfQ_Y$ zPCU+|hV#1ni&JiORbTXzm>zF=LIZu_0P~RS*MSGwbG!KU@V!36?|ABq`kpo6yCq5cgbi`?Pf*AenS6GtL(OTGHX@@(X zKKo{*-3XS4=;;@*_vLT!t)xRnk#OfN_;Wv5-~QupZ%2ySfxc%)ee5iK9@J6)Nbzvz z7ahiWhMhW{{Jd;0G0}1I=wpwEdwNIhJ7d)Inl~{q{6vJlb%;P3sx!YfR=S@^)8U7W z_KlrieAw~6?~{Sunpd&gVZGPrVma2&!PQolOtV^=tPr!VeV?hW4|?n{Z7>(8S9kq}3BF@>ggdpHUWYmEe>87Uob&q;z5ApV zjoLPC)}4WHeo>;^o0H$GJhk>4vxXgjn*AngzTNpZ%Vv0pxf`a-aCnB+3sQ8yH)tJLs@mp z2gJJUmcyN2nMjrXI>9Jpx--2So_x{u0E)L6K}OjhRQu=%(v)$dg;_} z8UNwE^dsou&JR*dPOf*nQB=30cdl`@*Sznj(CZ<+TM9bAWD&Wm#+r@aotE25+sW*L zLm$!=zoX?(d+Ux=WWv%e;?CxXH2Mo4J<><-qn^Ejb$9{8Y4=ulE-)JN)!7*ZMhByz z{-S_Qb7Md2?=u^kzm;=+==E&+VJ}$QRI8y5VZAe~O=0lp_s{g2yQ%)2f@Y|%;69t7 zHyp>p2$;|-^rwy!`xV|5M%;TtyJfm?&)uM*gax)7*@ferU-$^_ zeZBU$f%*OI#);woT=!A>C7aQi!8-g0#`nr#9rpu&b8~*=W9|M^{g-BcWbFgyU8eIh zAd4G)+3~d{KgXM`oA(#zhUizRYnbt}QJC{POSc=3>Dcz&vn44g&oZ-N&hm{=4URi{HAR- zJL#QZ7pniEmw)P=E_u#q?7lQq@4G;V?sLxQ=zg%9e(xOX^&Sz=Ua!s_?HxyLcb<4= z-LSNGpBb)qpT`lMpEh}VXjFOi(rfZ}1G@nyrr0v){vi@SjKPg%`PVuz#Z@_o;z%R;)X`L%Lu;hMpQ@`ToZGFCR|q z9-3+no$0aH$LQvl7-K_^x;(y+inKsbQ!RnW$>GnSv zp+OU`SRW$XyrM_`WF+h5KN&H6F~8s^BcfTCn$~^siA$xY9!mJiHFCgsb2y4GcxK?b x4_mDMbAIigthSyTqnlkd_UVXge969aBXJBR=P diff --git a/package.json b/package.json index 28b3c09..6f2f43d 100644 --- a/package.json +++ b/package.json @@ -48,11 +48,12 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { + "@thilawyn/traitify-ts": "^0.1.0", "decimal.js": "^10.4.3", - "effect": "^2.2.2", + "effect": "^2.2.3", "lodash-es": "^4.17.21", "mobx": "^6.12.0", - "type-fest": "^4.10.1", + "type-fest": "^4.10.2", "zod": "^3.22.4" }, "devDependencies": { -- 2.49.1 From 5297468d170259345f828ef2a08a467351b6ca18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 6 Feb 2024 03:32:52 +0100 Subject: [PATCH 015/136] ZodSchemaClass.old.ts --- src/ZodSchemaClass.old.ts | 148 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 src/ZodSchemaClass.old.ts diff --git a/src/ZodSchemaClass.old.ts b/src/ZodSchemaClass.old.ts new file mode 100644 index 0000000..3b79414 --- /dev/null +++ b/src/ZodSchemaClass.old.ts @@ -0,0 +1,148 @@ +import { Effect, pipe } from "effect" +import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" +import { z } from "zod" +import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." +import { Class, ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, parseZodTypeEffect } from "./util" + + +export function ZodSchemaClassOf< + Super extends AbstractClass, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +>( + of: Super, + + { schema, defaultValues }: { + schema: z.ZodObject + defaultValues: Opaque + }, +) { + type TZodSchemaClassImpl = TZodSchemaClass< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + Values, + DefaultValues + > + + return class extends (of as unknown as ConcreteClass) { + static readonly schema = schema + static readonly defaultValues = defaultValues + + constructor(values: Values) { + super() + Object.assign(this, values) + } + + static create( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + this.schema.parse({ ...this.defaultValues, ...values }, params) + ) + } + + static async createPromise( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) + ) + } + + static createEffect( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return pipe( + parseZodTypeEffect( + this.schema, + { ...this.defaultValues, ...values }, + params, + ), + + Effect.map(values => new this(values)), + ) + } + + static extend< + ExtendedSchemaT extends z.ZodRawShape, + ExtendedSchemaUnknownKeys extends z.UnknownKeysParam, + ExtendedSchemaCatchall extends z.ZodTypeAny, + + ExtendedValues extends Values, + ExtendedDefaultValues extends Partial, + >( + props: { + schema: (props: { + schema: z.ZodObject + shape: SchemaT + }) => z.ZodObject + + defaultValues: (defaultValues: DefaultValues) => Opaque + }, + ) { + const schema = props.schema({ + schema: this.schema, + shape: this.schema.shape, + }) + + const defaultValues = props.defaultValues(this.defaultValues) + + return class extends (this as unknown as ConcreteClass) { + static readonly schema = schema + static readonly defaultValues = defaultValues + } + } + } as unknown as ( + Class< + GetClassType, + + MergeInheritanceTreeWithoutOverriding< + ClassesInstances<[ + Super, + TZodSchemaClassImpl, + ]> + > & + + ConstructorParameters + > & + + MergeInheritanceTree< + ClassesStaticMembers<[ + Super, + TZodSchemaClassImpl, + ]> + > + ) +} + + +class DefaultRoot {} + +export function ZodSchemaClass< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +>( + props: { + schema: z.ZodObject + defaultValues: Opaque + }, +) { + return ZodSchemaClassOf(DefaultRoot, props) +} -- 2.49.1 From 6ee9337426b266131348bb8e2c5b02df5bb2a10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 6 Feb 2024 05:24:00 +0100 Subject: [PATCH 016/136] Trait work --- bun.lockb | Bin 160800 -> 160800 bytes package.json | 2 +- src/ZodSchemaClass.ts | 51 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 9deffd24124341322b68eff9f5b8e66aa557f043..c13519a2388570810df42e364bd8b2bfd96b2ec2 100755 GIT binary patch delta 162 zcmV;T0A2r}=n0_c36L%zT0O=jmEX#*4I4zzR`CmS>woH9yceyGVh;mmh|R^1u}(@H zlUOYx>nJDnf`ib zDA#fy^a^wX#bM`%D!sx;TrwG6eX)bRptrrC0q7M0F}J3+0WLrjF)ws-VQF+}W_c}i Qb1g6~F)lH;=k@_PeSWYcWpq`d&{>5I, +>() => trait( + abstract(), + + Super => class InstantiableZodSchemaObject extends Super { + static create( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + this.schema.parse({ ...this.defaultValues, ...values }, params) + ) + } + + static async createPromise( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) + ) + } + + static createEffect( + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return pipe( + parseZodTypeEffect( + this.schema, + { ...this.defaultValues, ...values }, + params, + ), + + Effect.map(values => new this(values)), + ) + } + }, +) export function ZodSchemaClassOf< -- 2.49.1 From f40bebbc9b6fab690629ce30ab61860c808413e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 7 Feb 2024 00:32:23 +0100 Subject: [PATCH 017/136] InstantiableZodSchemaObject --- src/ZodSchemaClass.ts | 54 +------------ src/traits/InstantiableZodSchemaObject.ts | 95 +++++++++++++++++++++++ 2 files changed, 99 insertions(+), 50 deletions(-) create mode 100644 src/traits/InstantiableZodSchemaObject.ts diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 8dd08e1..b0f43d7 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,59 +1,13 @@ import { Effect, pipe } from "effect" -import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" +import { AbstractClass, Class, Opaque } from "type-fest" import { z } from "zod" import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." -import { Class, ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, parseZodTypeEffect } from "./util" -import { abstract, trait } from "@thilawyn/traitify-ts" +import { ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, parseZodTypeEffect } from "./util" +import { Trait, abstract, trait } from "@thilawyn/traitify-ts" -export const InstantiableZodSchemaObject = < - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - Values extends {}, - DefaultValues extends Partial, ->() => trait( - abstract(), - - Super => class InstantiableZodSchemaObject extends Super { - static create( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return new this( - this.schema.parse({ ...this.defaultValues, ...values }, params) - ) - } - - static async createPromise( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return new this( - await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) - ) - } - - static createEffect( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return pipe( - parseZodTypeEffect( - this.schema, - { ...this.defaultValues, ...values }, - params, - ), - - Effect.map(values => new this(values)), - ) - } - }, -) +type T = Trait.Class export function ZodSchemaClassOf< diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts new file mode 100644 index 0000000..2701350 --- /dev/null +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -0,0 +1,95 @@ +import { abstract, trait } from "@thilawyn/traitify-ts" +import { Effect, pipe } from "effect" +import { Class } from "type-fest" +import { z } from "zod" +import { NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput } from ".." +import { parseZodTypeEffect } from "../util" + + +type ZodSchemaClassStatic< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +> = { + readonly schema: z.ZodObject + readonly defaultValues: DefaultValues +} + + +export const InstantiableZodSchemaObject = trait( + abstract(), + + Super => class InstantiableZodSchemaObject extends Super { + static create< + Self extends Class & ZodSchemaClassStatic, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + >( + this: Self, + + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + this.schema.parse({ ...this.defaultValues, ...values }, params) + ) as InstanceType + } + + static async createPromise< + Self extends Class & ZodSchemaClassStatic, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + >( + this: Self, + + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return new this( + await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) + ) as Promise> + } + + static createEffect< + Self extends Class & ZodSchemaClassStatic, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, + >( + this: Self, + + ...[values, params]: NewZodSchemaInstanceArgs< + NewZodSchemaInstanceInput + > + ) { + return pipe( + parseZodTypeEffect( + this.schema, + { ...this.defaultValues, ...values }, + params, + ), + + Effect.map(values => new this(values) as InstanceType), + ) + } + }, +) -- 2.49.1 From fa7d222f76246cb39be3b66db2be3ca369e2d75d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 7 Feb 2024 00:39:37 +0100 Subject: [PATCH 018/136] ZodSchemaClass work --- src/ZodSchemaClass.ts | 130 +++++------------------------------------- 1 file changed, 14 insertions(+), 116 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index b0f43d7..42425ae 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,136 +1,34 @@ -import { Effect, pipe } from "effect" -import { AbstractClass, Class, Opaque } from "type-fest" +import { expression } from "@thilawyn/traitify-ts" +import { NoInfer } from "effect/Types" +import { AbstractClass, Opaque } from "type-fest" import { z } from "zod" -import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." -import { ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, parseZodTypeEffect } from "./util" -import { Trait, abstract, trait } from "@thilawyn/traitify-ts" - - - -type T = Trait.Class +import { DefinedDefaultValuesTag } from "." +import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" export function ZodSchemaClassOf< - Super extends AbstractClass, + Superclass extends AbstractClass<{}, []>, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, Values extends {}, - DefaultValues extends Partial, + DefaultValues extends NoInfer>, >( - of: Super, + of: Superclass, { schema, defaultValues }: { schema: z.ZodObject - defaultValues: Opaque + defaultValues: DefaultValues }, ) { - type TZodSchemaClassImpl = TZodSchemaClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, + const exp = expression + .extends(of) + .expresses(InstantiableZodSchemaObject) + .build() - Values, - DefaultValues - > - - return class extends (of as unknown as ConcreteClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues - - constructor(values: Values) { - super() - Object.assign(this, values) - } - - static create( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return new this( - this.schema.parse({ ...this.defaultValues, ...values }, params) - ) - } - - static async createPromise( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return new this( - await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) - ) - } - - static createEffect( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return pipe( - parseZodTypeEffect( - this.schema, - { ...this.defaultValues, ...values }, - params, - ), - - Effect.map(values => new this(values)), - ) - } - - static extend< - ExtendedSchemaT extends z.ZodRawShape, - ExtendedSchemaUnknownKeys extends z.UnknownKeysParam, - ExtendedSchemaCatchall extends z.ZodTypeAny, - - ExtendedValues extends Values, - ExtendedDefaultValues extends Partial, - >( - props: { - schema: (props: { - schema: z.ZodObject - shape: SchemaT - }) => z.ZodObject - - defaultValues: (defaultValues: DefaultValues) => Opaque - }, - ) { - const schema = props.schema({ - schema: this.schema, - shape: this.schema.shape, - }) - - const defaultValues = props.defaultValues(this.defaultValues) - - return class extends (this as unknown as ConcreteClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues - } - } - } as unknown as ( - Class< - GetClassType, - - MergeInheritanceTreeWithoutOverriding< - ClassesInstances<[ - Super, - TZodSchemaClassImpl, - ]> - > & - - ConstructorParameters - > & - - MergeInheritanceTree< - ClassesStaticMembers<[ - Super, - TZodSchemaClassImpl, - ]> - > - ) + return exp } -- 2.49.1 From ffce582e03d5b1d0bcda901a7aef7a6abc3e695b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 01:17:01 +0100 Subject: [PATCH 019/136] ZodSchemaClass work --- src/ZodSchemaClass.ts | 26 +++++++++++++++++++------- src/tests.ts | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 42425ae..765d5c5 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,9 +1,9 @@ import { expression } from "@thilawyn/traitify-ts" import { NoInfer } from "effect/Types" -import { AbstractClass, Opaque } from "type-fest" +import { AbstractClass, Class } from "type-fest" import { z } from "zod" -import { DefinedDefaultValuesTag } from "." import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" +import { StaticMembers } from "./util" export function ZodSchemaClassOf< @@ -14,21 +14,33 @@ export function ZodSchemaClassOf< SchemaCatchall extends z.ZodTypeAny, Values extends {}, - DefaultValues extends NoInfer>, + DefaultValues extends Partial, >( of: Superclass, { schema, defaultValues }: { schema: z.ZodObject - defaultValues: DefaultValues + defaultValues: NoInfer }, ) { const exp = expression - .extends(of) + .extends(class extends (of as AbstractClass<{}, []>) { + static readonly schema = schema + static readonly defaultValues = defaultValues + + constructor(values: Values) { + super() + Object.assign(this, values) + } + }) .expresses(InstantiableZodSchemaObject) .build() - return exp + return exp.extends as Class< + InstanceType & Values, + ConstructorParameters + > & + StaticMembers } @@ -44,7 +56,7 @@ export function ZodSchemaClass< >( props: { schema: z.ZodObject - defaultValues: Opaque + defaultValues: NoInfer }, ) { return ZodSchemaClassOf(DefaultRoot, props) diff --git a/src/tests.ts b/src/tests.ts index 11c510f..235964b 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -8,7 +8,7 @@ class Test extends ZodSchemaClass({ name: z.string(), }), - defaultValues: defineDefaultValues({ id: -1n }), + defaultValues: { id: -1n }, }) {} Test.defaultValues -- 2.49.1 From ed3f8fb6431bf6f8ad86a87c82d7ba01fb689e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 02:39:38 +0100 Subject: [PATCH 020/136] ZodSchemaClassOf extend --- src/ZodSchemaClass.ts | 18 +++++++++++++----- src/util/{inheritance.ts => extend.ts} | 8 ++++---- src/util/index.ts | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) rename src/util/{inheritance.ts => extend.ts} (83%) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 765d5c5..53a6cdc 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,9 +1,9 @@ import { expression } from "@thilawyn/traitify-ts" import { NoInfer } from "effect/Types" -import { AbstractClass, Class } from "type-fest" +import { AbstractClass } from "type-fest" import { z } from "zod" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" -import { StaticMembers } from "./util" +import { Extend, StaticMembers } from "./util" export function ZodSchemaClassOf< @@ -36,11 +36,19 @@ export function ZodSchemaClassOf< .expresses(InstantiableZodSchemaObject) .build() - return exp.extends as Class< - InstanceType & Values, + return exp.extends as AbstractClass< + Extend<[ + InstanceType, + InstanceType, + Values, + ]>, + ConstructorParameters > & - StaticMembers + Extend<[ + StaticMembers, + StaticMembers, + ]> } diff --git a/src/util/inheritance.ts b/src/util/extend.ts similarity index 83% rename from src/util/inheritance.ts rename to src/util/extend.ts index a179d78..21aa4ab 100644 --- a/src/util/inheritance.ts +++ b/src/util/extend.ts @@ -9,10 +9,10 @@ export type CommonKeys = Extract * Merges an inheritance tree defined by an array of types, considering overrides. * @template T - An array of types representing the inheritance tree. */ -export type MergeInheritanceTree = ( +export type Extend = ( T extends [infer Super, infer Self, ...infer Rest] ? Pick> extends Pick> - ? MergeInheritanceTree<[ + ? Extend<[ Omit> & Self, ...Rest, ]> @@ -26,10 +26,10 @@ export type MergeInheritanceTree = ( * Merges an inheritance tree defined by an array of types without allowing overrides. * @template T - An array of types representing the inheritance tree. */ -export type MergeInheritanceTreeWithoutOverriding = ( +export type ExtendWithoutOverriding = ( T extends [infer Super, infer Self, ...infer Rest] ? Pick> extends Pick> - ? MergeInheritanceTreeWithoutOverriding<[ + ? ExtendWithoutOverriding<[ Super & Self, ...Rest, ]> diff --git a/src/util/index.ts b/src/util/index.ts index f7d0c08..7bc5968 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -1,4 +1,4 @@ export * from "./class" export * from "./effect" -export * from "./inheritance" +export * from "./extend" export * from "./misc" -- 2.49.1 From ae4abf6b9c5b520b8c694b135b80da064920ad1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 02:42:02 +0100 Subject: [PATCH 021/136] defaultValues fix --- src/ZodSchemaClass.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 53a6cdc..7199b57 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,5 +1,4 @@ import { expression } from "@thilawyn/traitify-ts" -import { NoInfer } from "effect/Types" import { AbstractClass } from "type-fest" import { z } from "zod" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" @@ -20,7 +19,7 @@ export function ZodSchemaClassOf< { schema, defaultValues }: { schema: z.ZodObject - defaultValues: NoInfer + defaultValues: DefaultValues }, ) { const exp = expression @@ -64,7 +63,7 @@ export function ZodSchemaClass< >( props: { schema: z.ZodObject - defaultValues: NoInfer + defaultValues: DefaultValues }, ) { return ZodSchemaClassOf(DefaultRoot, props) -- 2.49.1 From e1c298c08af9f52453e98173924f6fbb024e5fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 02:50:16 +0100 Subject: [PATCH 022/136] Fixed InstantiableZodSchemaObject --- src/tests.ts | 31 +++++++++++++++-------- src/traits/InstantiableZodSchemaObject.ts | 8 +++--- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index 235964b..d623794 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -11,23 +11,32 @@ class Test extends ZodSchemaClass({ defaultValues: { id: -1n }, }) {} +const Test2 = ZodSchemaClass({ + schema: z.object({ + id: z.bigint(), + name: z.string(), + }), + + defaultValues: { id: -1n }, +}) + Test.defaultValues -const inst = await Test.createPromise({ id: 1n, name: "" }) +const inst = Test.create({ id: 1n, name: "" }) -class SubTest extends Test.extend({ - schema: ({ schema }) => schema.extend({ - prout: z.string() - }), +// class SubTest extends Test.extend({ +// schema: ({ schema }) => schema.extend({ +// prout: z.string() +// }), - defaultValues: defaultValues => defineDefaultValues({ - ...defaultValues - }), -}) {} +// defaultValues: defaultValues => defineDefaultValues({ +// ...defaultValues +// }), +// }) {} -const subInst = await SubTest.createPromise({ name: "", prout: "" }) +// const subInst = await SubTest.createPromise({ name: "", prout: "" }) -console.log(subInst) +// console.log(subInst) // class ChildTest extends Test {} diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 2701350..fbfe244 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -6,7 +6,7 @@ import { NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput } from ".." import { parseZodTypeEffect } from "../util" -type ZodSchemaClassStatic< +export type ZodSchemaClassStatic< SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -33,7 +33,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self, + this: Self | Class & ZodSchemaClassStatic, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -54,7 +54,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self, + this: Self | Class & ZodSchemaClassStatic, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -75,7 +75,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self, + this: Self | Class & ZodSchemaClassStatic, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput -- 2.49.1 From 408d3a7f3a335000f997541ef1bdd7d86772fc95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 02:52:27 +0100 Subject: [PATCH 023/136] Tests --- src/tests.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tests.ts b/src/tests.ts index d623794..682c96a 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -23,6 +23,8 @@ const Test2 = ZodSchemaClass({ Test.defaultValues const inst = Test.create({ id: 1n, name: "" }) +console.log(inst) + // class SubTest extends Test.extend({ // schema: ({ schema }) => schema.extend({ -- 2.49.1 From 9adfe2366c6a688b89a0a0e1c665ee464f1d3454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 03:11:11 +0100 Subject: [PATCH 024/136] Refactoring --- src/traits/InstantiableZodSchemaObject.ts | 29 +++++------------ src/types/ZodSchemaClass.ts | 39 +++++++++++++++++++++++ 2 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 src/types/ZodSchemaClass.ts diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index fbfe244..2560cfc 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -1,30 +1,17 @@ import { abstract, trait } from "@thilawyn/traitify-ts" import { Effect, pipe } from "effect" -import { Class } from "type-fest" import { z } from "zod" import { NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput } from ".." +import { ZodSchemaClass } from "../types/ZodSchemaClass" import { parseZodTypeEffect } from "../util" -export type ZodSchemaClassStatic< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, -> = { - readonly schema: z.ZodObject - readonly defaultValues: DefaultValues -} - - export const InstantiableZodSchemaObject = trait( abstract(), Super => class InstantiableZodSchemaObject extends Super { static create< - Self extends Class & ZodSchemaClassStatic, + Self extends ZodSchemaClass, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -33,7 +20,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | Class & ZodSchemaClassStatic, + this: Self | ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -45,7 +32,7 @@ export const InstantiableZodSchemaObject = trait( } static async createPromise< - Self extends Class & ZodSchemaClassStatic, + Self extends ZodSchemaClass, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -54,7 +41,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | Class & ZodSchemaClassStatic, + this: Self | ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -62,11 +49,11 @@ export const InstantiableZodSchemaObject = trait( ) { return new this( await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) - ) as Promise> + ) as InstanceType } static createEffect< - Self extends Class & ZodSchemaClassStatic, + Self extends ZodSchemaClass, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -75,7 +62,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | Class & ZodSchemaClassStatic, + this: Self | ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput diff --git a/src/types/ZodSchemaClass.ts b/src/types/ZodSchemaClass.ts new file mode 100644 index 0000000..ab678da --- /dev/null +++ b/src/types/ZodSchemaClass.ts @@ -0,0 +1,39 @@ +import { AbstractClass, Class } from "type-fest" +import { z } from "zod" + + +export type ZodSchemaClass< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +> = ( + Class & + ZodSchemaClassStatic +) + +export type ZodSchemaAbstractClass< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +> = ( + AbstractClass & + ZodSchemaClassStatic +) + +export type ZodSchemaClassStatic< + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends {}, + DefaultValues extends Partial, +> = { + readonly schema: z.ZodObject + readonly defaultValues: DefaultValues +} -- 2.49.1 From 041b3f566ec3cd6461d24d9f0a0d62eb48b1ca1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 03:25:10 +0100 Subject: [PATCH 025/136] ExtendableZodSchemaObject work --- src/ZodSchemaClass.ts | 8 ++--- src/traits/ExtendableZodSchemaObject.ts | 39 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/traits/ExtendableZodSchemaObject.ts diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 7199b57..697cf68 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -6,7 +6,7 @@ import { Extend, StaticMembers } from "./util" export function ZodSchemaClassOf< - Superclass extends AbstractClass<{}, []>, + Super extends AbstractClass<{}, []>, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -15,7 +15,7 @@ export function ZodSchemaClassOf< Values extends {}, DefaultValues extends Partial, >( - of: Superclass, + of: Super, { schema, defaultValues }: { schema: z.ZodObject @@ -37,7 +37,7 @@ export function ZodSchemaClassOf< return exp.extends as AbstractClass< Extend<[ - InstanceType, + InstanceType, InstanceType, Values, ]>, @@ -45,7 +45,7 @@ export function ZodSchemaClassOf< ConstructorParameters > & Extend<[ - StaticMembers, + StaticMembers, StaticMembers, ]> } diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts new file mode 100644 index 0000000..ab1be36 --- /dev/null +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -0,0 +1,39 @@ +import { abstract, trait } from "@thilawyn/traitify-ts" +import { z } from "zod" +import { ZodSchemaAbstractClass } from "../types/ZodSchemaClass" + + +export const ExtendableZodSchemaObject = trait( + abstract(), + + Super => class ExtendableZodSchemaObject extends Super { + static extend< + Super extends ZodSchemaAbstractClass, + + SuperSchemaT extends z.ZodRawShape, + SuperSchemaUnknownKeys extends z.UnknownKeysParam, + SuperSchemaCatchall extends z.ZodTypeAny, + SuperValues extends {}, + SuperDefaultValues extends Partial, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + Values extends SuperValues, + DefaultValues extends Partial, + >( + this: Super | ZodSchemaAbstractClass, + + props: { + schema: (props: { + schema: Super["schema"] + shape: Super["schema"]["shape"] + }) => z.ZodObject + + defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues + }, + ) { + + } + }, +) -- 2.49.1 From 5f7fd30459aa2b10b13b1fa4147007275a8bdedf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 18:26:37 +0100 Subject: [PATCH 026/136] Working extendable --- src/ZodSchemaClass.ts | 6 +++++- src/tests.ts | 18 +++++++++--------- src/traits/ExtendableZodSchemaObject.ts | 20 ++++++++++++++++++++ src/traits/InstantiableZodSchemaObject.ts | 22 +++++++++++++++++++++- 4 files changed, 55 insertions(+), 11 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 697cf68..d968ecf 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,6 +1,7 @@ import { expression } from "@thilawyn/traitify-ts" import { AbstractClass } from "type-fest" import { z } from "zod" +import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" import { Extend, StaticMembers } from "./util" @@ -32,7 +33,10 @@ export function ZodSchemaClassOf< Object.assign(this, values) } }) - .expresses(InstantiableZodSchemaObject) + .expresses( + InstantiableZodSchemaObject, + ExtendableZodSchemaObject, + ) .build() return exp.extends as AbstractClass< diff --git a/src/tests.ts b/src/tests.ts index 682c96a..ded48e8 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -26,17 +26,17 @@ const inst = Test.create({ id: 1n, name: "" }) console.log(inst) -// class SubTest extends Test.extend({ -// schema: ({ schema }) => schema.extend({ -// prout: z.string() -// }), +class SubTest extends Test.extend({ + schema: ({ schema }) => schema.extend({ + prout: z.string() + }), -// defaultValues: defaultValues => defineDefaultValues({ -// ...defaultValues -// }), -// }) {} + defaultValues: defaultValues => ({ + ...defaultValues + }), +}) {} -// const subInst = await SubTest.createPromise({ name: "", prout: "" }) +const subInst = await SubTest.createPromise({ name: "", prout: "" }) // console.log(subInst) diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index ab1be36..dacb7bb 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -1,6 +1,8 @@ import { abstract, trait } from "@thilawyn/traitify-ts" +import { AbstractClass } from "type-fest" import { z } from "zod" import { ZodSchemaAbstractClass } from "../types/ZodSchemaClass" +import { Extend, StaticMembers } from "../util" export const ExtendableZodSchemaObject = trait( @@ -32,8 +34,26 @@ export const ExtendableZodSchemaObject = trait( defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues }, + ): ( + AbstractClass< + Extend<[InstanceType, Values]>, + [values: Values] + > & + Extend<[ + StaticMembers, + { + readonly schema: z.ZodObject, + readonly defaultValues: DefaultValues, + }, + ]> ) { + const schema = props.schema({ schema: this.schema, shape: this.schema.shape }) + const defaultValues = props.defaultValues(this.defaultValues) + return class extends this { + static readonly schema = schema + static readonly defaultValues = defaultValues + } as any } }, ) diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 2560cfc..fb70ca9 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -1,11 +1,31 @@ import { abstract, trait } from "@thilawyn/traitify-ts" import { Effect, pipe } from "effect" +import { HasRequiredKeys } from "type-fest" import { z } from "zod" -import { NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput } from ".." import { ZodSchemaClass } from "../types/ZodSchemaClass" import { parseZodTypeEffect } from "../util" +type NewZodSchemaInstanceInput< + Values extends {}, + DefaultValues extends Partial, +> = { + [Key in Exclude]: Values[Key] +} & { + [Key in keyof DefaultValues]?: Key extends keyof Values + ? Values[Key] + : never +} + +type ParseParamsArgs = [] | [params: Partial] + +type NewZodSchemaInstanceArgs = ( + HasRequiredKeys extends true + ? [values: Input, ...args: ParseParamsArgs] + : [] | [values: Input, ...args: ParseParamsArgs] +) + + export const InstantiableZodSchemaObject = trait( abstract(), -- 2.49.1 From 99f071147de0d4707ee85b9de299df27a7de361b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 18:28:39 +0100 Subject: [PATCH 027/136] Cleanup --- src/TZodSchemaClass.ts | 128 -------------------------------- src/ZodSchemaClass.old.ts | 148 ------------------------------------- src/defineDefaultValues.ts | 8 -- src/index.ts | 3 - src/lib.ts | 0 src/tests.ts | 2 +- 6 files changed, 1 insertion(+), 288 deletions(-) delete mode 100644 src/TZodSchemaClass.ts delete mode 100644 src/ZodSchemaClass.old.ts delete mode 100644 src/defineDefaultValues.ts delete mode 100644 src/index.ts create mode 100644 src/lib.ts diff --git a/src/TZodSchemaClass.ts b/src/TZodSchemaClass.ts deleted file mode 100644 index 1efc5ef..0000000 --- a/src/TZodSchemaClass.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Effect } from "effect" -import { AbstractClass, Class as ConcreteClass, HasRequiredKeys, Opaque } from "type-fest" -import { z } from "zod" -import { DefinedDefaultValuesTag } from "." -import { Class, ClassType, ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree } from "./util" - - -export type NewZodSchemaInstanceInput< - Values extends {}, - DefaultValues extends Partial, -> = { - [Key in Exclude]: Values[Key] -} & { - [Key in keyof DefaultValues]?: Key extends keyof Values - ? Values[Key] - : never -} - -export type ParseParamsArgs = [] | [params: Partial] - -export type NewZodSchemaInstanceArgs = - HasRequiredKeys extends true - ? [values: Input, ...args: ParseParamsArgs] - : [] | [values: Input, ...args: ParseParamsArgs] - - -type ExtendZodSchemaClass< - Super extends AbstractClass, - Self extends AbstractClass, -> = ( - Class< - GetClassType, - - MergeInheritanceTree< - ClassesInstances<[Super, Self]> - >, - - ConstructorParameters - > & - - MergeInheritanceTree< - ClassesStaticMembers<[Super, Self]> - > -) - - -export type TZodSchemaClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, - - Type extends ClassType = "AbstractClass" -> = ( - Class< - Type, - Values, - [values: Values] - > & { - readonly schema: z.ZodObject - readonly defaultValues: DefaultValues - - create>( - this: Self, - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ): InstanceType - - createPromise>( - this: Self, - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ): Promise> - - createEffect>( - this: Self, - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ): Effect.Effect, Values> - - extend< - Super extends AbstractClass, - - ExtendedSchemaT extends z.ZodRawShape, - ExtendedSchemaUnknownKeys extends z.UnknownKeysParam, - ExtendedSchemaCatchall extends z.ZodTypeAny, - - ExtendedValues extends Values, - ExtendedDefaultValues extends Partial, - >( - this: Super, - - props: { - schema: (props: { - schema: z.ZodObject - shape: SchemaT - }) => z.ZodObject - - defaultValues: (defaultValues: DefaultValues) => Opaque - }, - ): ExtendZodSchemaClass< - Super, - - TZodSchemaClass< - ExtendedSchemaT, - ExtendedSchemaUnknownKeys, - ExtendedSchemaCatchall, - - ExtendedValues, - ExtendedDefaultValues - > - > - } -) - -export type DefaultZodSchemaClass = TZodSchemaClass< - z.ZodRawShape, - z.UnknownKeysParam, - z.ZodTypeAny, - - {}, - {} -> diff --git a/src/ZodSchemaClass.old.ts b/src/ZodSchemaClass.old.ts deleted file mode 100644 index 3b79414..0000000 --- a/src/ZodSchemaClass.old.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { Effect, pipe } from "effect" -import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" -import { z } from "zod" -import { DefinedDefaultValuesTag, NewZodSchemaInstanceArgs, NewZodSchemaInstanceInput, TZodSchemaClass } from "." -import { Class, ClassesInstances, ClassesStaticMembers, GetClassType, MergeInheritanceTree, MergeInheritanceTreeWithoutOverriding, parseZodTypeEffect } from "./util" - - -export function ZodSchemaClassOf< - Super extends AbstractClass, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - of: Super, - - { schema, defaultValues }: { - schema: z.ZodObject - defaultValues: Opaque - }, -) { - type TZodSchemaClassImpl = TZodSchemaClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues - > - - return class extends (of as unknown as ConcreteClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues - - constructor(values: Values) { - super() - Object.assign(this, values) - } - - static create( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return new this( - this.schema.parse({ ...this.defaultValues, ...values }, params) - ) - } - - static async createPromise( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return new this( - await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) - ) - } - - static createEffect( - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > - ) { - return pipe( - parseZodTypeEffect( - this.schema, - { ...this.defaultValues, ...values }, - params, - ), - - Effect.map(values => new this(values)), - ) - } - - static extend< - ExtendedSchemaT extends z.ZodRawShape, - ExtendedSchemaUnknownKeys extends z.UnknownKeysParam, - ExtendedSchemaCatchall extends z.ZodTypeAny, - - ExtendedValues extends Values, - ExtendedDefaultValues extends Partial, - >( - props: { - schema: (props: { - schema: z.ZodObject - shape: SchemaT - }) => z.ZodObject - - defaultValues: (defaultValues: DefaultValues) => Opaque - }, - ) { - const schema = props.schema({ - schema: this.schema, - shape: this.schema.shape, - }) - - const defaultValues = props.defaultValues(this.defaultValues) - - return class extends (this as unknown as ConcreteClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues - } - } - } as unknown as ( - Class< - GetClassType, - - MergeInheritanceTreeWithoutOverriding< - ClassesInstances<[ - Super, - TZodSchemaClassImpl, - ]> - > & - - ConstructorParameters - > & - - MergeInheritanceTree< - ClassesStaticMembers<[ - Super, - TZodSchemaClassImpl, - ]> - > - ) -} - - -class DefaultRoot {} - -export function ZodSchemaClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - props: { - schema: z.ZodObject - defaultValues: Opaque - }, -) { - return ZodSchemaClassOf(DefaultRoot, props) -} diff --git a/src/defineDefaultValues.ts b/src/defineDefaultValues.ts deleted file mode 100644 index 634d83a..0000000 --- a/src/defineDefaultValues.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Opaque } from "type-fest" - - -export type DefinedDefaultValuesTag = "@thilawyn/schemable-class/DefinedDefaultValues" - -export function defineDefaultValues(values: T) { - return values as Opaque -} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 8c02ebc..0000000 --- a/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./TZodSchemaClass" -export * from "./ZodSchemaClass" -export * from "./defineDefaultValues" diff --git a/src/lib.ts b/src/lib.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/tests.ts b/src/tests.ts index ded48e8..2036676 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,5 +1,5 @@ import { z } from "zod" -import { ZodSchemaClass, defineDefaultValues } from "." +import { ZodSchemaClass } from "./ZodSchemaClass" class Test extends ZodSchemaClass({ -- 2.49.1 From 65602eac7d576ebaf3b573f44500ca5047b1001f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 18:33:58 +0100 Subject: [PATCH 028/136] types -> shapes --- src/{types => shapes}/ZodSchemaClass.ts | 0 src/traits/ExtendableZodSchemaObject.ts | 2 +- src/traits/InstantiableZodSchemaObject.ts | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename src/{types => shapes}/ZodSchemaClass.ts (100%) diff --git a/src/types/ZodSchemaClass.ts b/src/shapes/ZodSchemaClass.ts similarity index 100% rename from src/types/ZodSchemaClass.ts rename to src/shapes/ZodSchemaClass.ts diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index dacb7bb..199c6d9 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -1,7 +1,7 @@ import { abstract, trait } from "@thilawyn/traitify-ts" import { AbstractClass } from "type-fest" import { z } from "zod" -import { ZodSchemaAbstractClass } from "../types/ZodSchemaClass" +import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" import { Extend, StaticMembers } from "../util" diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index fb70ca9..7f1b7ca 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -2,7 +2,7 @@ import { abstract, trait } from "@thilawyn/traitify-ts" import { Effect, pipe } from "effect" import { HasRequiredKeys } from "type-fest" import { z } from "zod" -import { ZodSchemaClass } from "../types/ZodSchemaClass" +import { ZodSchemaClass } from "../shapes/ZodSchemaClass" import { parseZodTypeEffect } from "../util" -- 2.49.1 From 443ae01d2dfb69fd8a0ecacd1309589c826338f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 18:35:16 +0100 Subject: [PATCH 029/136] Tests --- src/tests.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index 2036676..9c4d37f 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -22,7 +22,6 @@ const Test2 = ZodSchemaClass({ Test.defaultValues const inst = Test.create({ id: 1n, name: "" }) - console.log(inst) @@ -37,8 +36,7 @@ class SubTest extends Test.extend({ }) {} const subInst = await SubTest.createPromise({ name: "", prout: "" }) - -// console.log(subInst) +console.log(subInst) // class ChildTest extends Test {} -- 2.49.1 From 0d20e7ad69248791eb3d7e7c11fabd7219d78d5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 8 Feb 2024 20:04:45 +0100 Subject: [PATCH 030/136] Package upgrade --- bun.lockb | Bin 160800 -> 160800 bytes package.json | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index c13519a2388570810df42e364bd8b2bfd96b2ec2..4cdef8d06e0fd5c7ec6023f47cdb02616e58357f 100755 GIT binary patch delta 259 zcmV+e0sQ`;=n0_c36L%zd2s?+bd>!#OrXv2MQgKhap+IYGl-S3JZ}Q#yN?Cnu};bx zlT=_Rk{bwJ%%G{S;pyYy((iexRBZLo$|S4H`dz%TR}{(&w;C0@d}V6?^UfCM6$YxY>$Jz zptrrC0q7M0Gnb~e0W$$Lx7xM=XFr!xECL{xVfF!Y6EiP#a$#w7X=ZsXbaO2*E-@}M Jx99c&IeleEcr*Y2 delta 256 zcmV+b0ssD>=n0_c36L%zT0O=jmEX#*4I4zzR`CmS>woH9yceyGVh;mmh|R^1u};bx zlh{cxlSmv;lUOYzfRgNh`ywDb- z8|BXDZvEyGqj_p4J%3I$F^^q&11nRQjlz27ln9dzpm0DB`=?P13llemFIj6E)cmiD zu-_W$(|a}!D-{@IrSVZuW4cz+f0_PzXDHWlAM^@z1I1zIhbq0oNL(@*UVX8Hy`Z8d0cSs#Qepximtpn+a}zNybaG*7bZKUJEp&4&FfK7JF}LUT G0XcmMaB Date: Fri, 9 Feb 2024 01:15:23 +0100 Subject: [PATCH 031/136] Fixed instance inference --- src/shapes/ZodSchemaClass.ts | 8 ++++++-- src/traits/ExtendableZodSchemaObject.ts | 5 +++-- src/traits/InstantiableZodSchemaObject.ts | 22 +++++++++++++--------- src/traits/ObservableZodSchemaObject.ts | 12 ++++++++++++ 4 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 src/traits/ObservableZodSchemaObject.ts diff --git a/src/shapes/ZodSchemaClass.ts b/src/shapes/ZodSchemaClass.ts index ab678da..22d059e 100644 --- a/src/shapes/ZodSchemaClass.ts +++ b/src/shapes/ZodSchemaClass.ts @@ -3,6 +3,8 @@ import { z } from "zod" export type ZodSchemaClass< + Instance extends Values, + SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -10,11 +12,13 @@ export type ZodSchemaClass< Values extends {}, DefaultValues extends Partial, > = ( - Class & + Class & ZodSchemaClassStatic ) export type ZodSchemaAbstractClass< + Instance extends Values, + SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -22,7 +26,7 @@ export type ZodSchemaAbstractClass< Values extends {}, DefaultValues extends Partial, > = ( - AbstractClass & + AbstractClass & ZodSchemaClassStatic ) diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index 199c6d9..f22d191 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -10,7 +10,8 @@ export const ExtendableZodSchemaObject = trait( Super => class ExtendableZodSchemaObject extends Super { static extend< - Super extends ZodSchemaAbstractClass, + Super extends ZodSchemaAbstractClass, + SuperInstance extends SuperValues, SuperSchemaT extends z.ZodRawShape, SuperSchemaUnknownKeys extends z.UnknownKeysParam, @@ -24,7 +25,7 @@ export const ExtendableZodSchemaObject = trait( Values extends SuperValues, DefaultValues extends Partial, >( - this: Super | ZodSchemaAbstractClass, + this: Super | ZodSchemaAbstractClass, props: { schema: (props: { diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 7f1b7ca..19952f8 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -31,7 +31,7 @@ export const InstantiableZodSchemaObject = trait( Super => class InstantiableZodSchemaObject extends Super { static create< - Self extends ZodSchemaClass, + Instance extends Values, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -40,7 +40,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | ZodSchemaClass, + this: ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -48,11 +48,11 @@ export const InstantiableZodSchemaObject = trait( ) { return new this( this.schema.parse({ ...this.defaultValues, ...values }, params) - ) as InstanceType + ) } static async createPromise< - Self extends ZodSchemaClass, + Instance extends Values, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -61,7 +61,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | ZodSchemaClass, + this: ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -69,11 +69,11 @@ export const InstantiableZodSchemaObject = trait( ) { return new this( await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) - ) as InstanceType + ) } static createEffect< - Self extends ZodSchemaClass, + Instance extends Values, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -82,7 +82,7 @@ export const InstantiableZodSchemaObject = trait( Values extends {}, DefaultValues extends Partial, >( - this: Self | ZodSchemaClass, + this: ZodSchemaClass, ...[values, params]: NewZodSchemaInstanceArgs< NewZodSchemaInstanceInput @@ -95,8 +95,12 @@ export const InstantiableZodSchemaObject = trait( params, ), - Effect.map(values => new this(values) as InstanceType), + Effect.map(values => new this(values)), ) } + + protected static initialize() { + + } }, ) diff --git a/src/traits/ObservableZodSchemaObject.ts b/src/traits/ObservableZodSchemaObject.ts new file mode 100644 index 0000000..acdddc9 --- /dev/null +++ b/src/traits/ObservableZodSchemaObject.ts @@ -0,0 +1,12 @@ +import { abstract, trait } from "@thilawyn/traitify-ts" + + +export const ObservableZodSchemaObject = trait( + abstract(), + + Super => class ObservableZodSchemaObject extends Super { + constructor(...args: any[]) { + super(...args) + } + }, +) -- 2.49.1 From 880d77019d596a0b5000f52bb9ddd088797c6447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 9 Feb 2024 01:16:36 +0100 Subject: [PATCH 032/136] Fix --- src/traits/ExtendableZodSchemaObject.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index f22d191..8e5347a 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -37,7 +37,7 @@ export const ExtendableZodSchemaObject = trait( }, ): ( AbstractClass< - Extend<[InstanceType, Values]>, + Extend<[SuperInstance, Values]>, [values: Values] > & Extend<[ -- 2.49.1 From 3bf22f1f49486ce58e9eccc80605bc4dcace600b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 00:55:21 +0100 Subject: [PATCH 033/136] Traitify API update --- src/traits/ExtendableZodSchemaObject.ts | 12 +++++------- src/traits/InstantiableZodSchemaObject.ts | 12 +++++------- src/traits/ObservableZodSchemaObject.ts | 12 +++++------- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index 8e5347a..10b2746 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -1,14 +1,12 @@ -import { abstract, trait } from "@thilawyn/traitify-ts" +import { trait } from "@thilawyn/traitify-ts" import { AbstractClass } from "type-fest" import { z } from "zod" import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" import { Extend, StaticMembers } from "../util" -export const ExtendableZodSchemaObject = trait( - abstract(), - - Super => class ExtendableZodSchemaObject extends Super { +export const ExtendableZodSchemaObject = trait + .implement(Super => class ExtendableZodSchemaObject extends Super { static extend< Super extends ZodSchemaAbstractClass, SuperInstance extends SuperValues, @@ -56,5 +54,5 @@ export const ExtendableZodSchemaObject = trait( static readonly defaultValues = defaultValues } as any } - }, -) + }) + .build() diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 19952f8..7fd1a0a 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -1,4 +1,4 @@ -import { abstract, trait } from "@thilawyn/traitify-ts" +import { trait } from "@thilawyn/traitify-ts" import { Effect, pipe } from "effect" import { HasRequiredKeys } from "type-fest" import { z } from "zod" @@ -26,10 +26,8 @@ type NewZodSchemaInstanceArgs = ( ) -export const InstantiableZodSchemaObject = trait( - abstract(), - - Super => class InstantiableZodSchemaObject extends Super { +export const InstantiableZodSchemaObject = trait + .implement(Super => class InstantiableZodSchemaObject extends Super { static create< Instance extends Values, @@ -102,5 +100,5 @@ export const InstantiableZodSchemaObject = trait( protected static initialize() { } - }, -) + }) + .build() diff --git a/src/traits/ObservableZodSchemaObject.ts b/src/traits/ObservableZodSchemaObject.ts index acdddc9..8b6d624 100644 --- a/src/traits/ObservableZodSchemaObject.ts +++ b/src/traits/ObservableZodSchemaObject.ts @@ -1,12 +1,10 @@ -import { abstract, trait } from "@thilawyn/traitify-ts" +import { trait } from "@thilawyn/traitify-ts" -export const ObservableZodSchemaObject = trait( - abstract(), - - Super => class ObservableZodSchemaObject extends Super { +export const ObservableZodSchemaObject = trait + .implement(Super => class ObservableZodSchemaObject extends Super { constructor(...args: any[]) { super(...args) } - }, -) + }) + .build() -- 2.49.1 From 93f1038e272c1f3515da6f53811c48d2cd9fb57e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 01:08:22 +0100 Subject: [PATCH 034/136] ZodSchemaClassOf --- src/ZodSchemaClass.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index d968ecf..d2397c9 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -7,7 +7,7 @@ import { Extend, StaticMembers } from "./util" export function ZodSchemaClassOf< - Super extends AbstractClass<{}, []>, + Super extends AbstractClass, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, -- 2.49.1 From 73ce4e11fff840d2106cd49d746230e80a84a684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 01:19:51 +0100 Subject: [PATCH 035/136] Cleanup --- src/lib.ts | 1 + src/util/extend.ts | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/lib.ts b/src/lib.ts index e69de29..ea1ff40 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -0,0 +1 @@ +export { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" diff --git a/src/util/extend.ts b/src/util/extend.ts index 21aa4ab..baa104d 100644 --- a/src/util/extend.ts +++ b/src/util/extend.ts @@ -5,12 +5,12 @@ */ export type CommonKeys = Extract -/** - * Merges an inheritance tree defined by an array of types, considering overrides. - * @template T - An array of types representing the inheritance tree. - */ -export type Extend = ( - T extends [infer Super, infer Self, ...infer Rest] +export type Extend = ( + T extends [ + infer Super, + infer Self, + ...infer Rest extends object[], + ] ? Pick> extends Pick> ? Extend<[ Omit> & Self, @@ -19,7 +19,7 @@ export type Extend = ( : never : T extends [infer Self] ? Self - : void + : {} ) /** -- 2.49.1 From f2d932f5348df6803e454c382bbd1f669bdf1e5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 01:44:13 +0100 Subject: [PATCH 036/136] Package upgrade --- bun.lockb | Bin 160800 -> 160490 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 4cdef8d06e0fd5c7ec6023f47cdb02616e58357f..f258a60b9864187171074be851b2c5417a7d7c88 100755 GIT binary patch delta 22180 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 delta 22634 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 VOLQIxTXh`u8R(gB9rc}K{|{X!M<4(I -- 2.49.1 From 7af7fe9b65f598f702686d71fa3445af20cd4dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 01:44:19 +0100 Subject: [PATCH 037/136] Package upgrade --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c66cea9..5fab85e 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,9 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.3", + "@thilawyn/traitify-ts": "^0.1.4", "decimal.js": "^10.4.3", - "effect": "^2.2.5", + "effect": "^2.3.7", "lodash-es": "^4.17.21", "mobx": "^6.12.0", "type-fest": "^4.10.2", @@ -60,13 +60,13 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@types/lodash-es": "^4.17.12", "bun-types": "latest", - "npm-check-updates": "^16.14.14", + "npm-check-updates": "^16.14.15", "npm-sort": "^0.0.4", - "rollup": "^4.9.6", + "rollup": "^4.12.0", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-ts": "^3.4.5", "ts-functional-pipe": "^3.1.2", - "tsx": "^4.7.0", + "tsx": "^4.7.1", "typescript": "^5.3.3" } } -- 2.49.1 From 0e609f7185308275d2a8d6deeead6884c84dbbde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 01:48:55 +0100 Subject: [PATCH 038/136] Fix --- src/ZodSchemaClass.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index d2397c9..3a5d8ba 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -24,7 +24,7 @@ export function ZodSchemaClassOf< }, ) { const exp = expression - .extends(class extends (of as AbstractClass<{}, []>) { + .extends(class extends (of as AbstractClass) { static readonly schema = schema static readonly defaultValues = defaultValues -- 2.49.1 From a788f0ddb242e85a4a4da2d5f06561fd8e90877e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 01:59:03 +0100 Subject: [PATCH 039/136] Dependencies upgrade --- bun.lockb | Bin 160490 -> 160490 bytes package.json | 2 +- src/ZodSchemaClass.ts | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index f258a60b9864187171074be851b2c5417a7d7c88..5068fe4f5e1097f8c7fe72faa9620ac23da1b6aa 100755 GIT binary patch delta 162 zcmV;T0A2s;VQF+}W_c}i Qb1g6~F)lT?=k);teWssFegFUf delta 162 zcmV;T0A2s;8d9jOjX2QwxJ#ptoJ10Z0`AG`FU;0WLrjG%s{=VQF+}W_c}i Qb1g6~F)lQ>=k);teT=$DxBvhE diff --git a/package.json b/package.json index 5fab85e..fc94fe6 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.4", + "@thilawyn/traitify-ts": "^0.1.5", "decimal.js": "^10.4.3", "effect": "^2.3.7", "lodash-es": "^4.17.21", diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 3a5d8ba..efd0b3b 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -40,8 +40,8 @@ export function ZodSchemaClassOf< .build() return exp.extends as AbstractClass< + InstanceType & Extend<[ - InstanceType, InstanceType, Values, ]>, -- 2.49.1 From ad197fe5857a8a5d4f02c906651af9bb6cb4e2ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 02:06:24 +0100 Subject: [PATCH 040/136] Changed constraints --- src/ZodSchemaClass.ts | 4 ++-- src/shapes/ZodSchemaClass.ts | 6 +++--- src/traits/ExtendableZodSchemaObject.ts | 2 +- src/traits/InstantiableZodSchemaObject.ts | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index efd0b3b..e7420c6 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -13,7 +13,7 @@ export function ZodSchemaClassOf< SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, >( of: Super, @@ -62,7 +62,7 @@ export function ZodSchemaClass< SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, >( props: { diff --git a/src/shapes/ZodSchemaClass.ts b/src/shapes/ZodSchemaClass.ts index 22d059e..682e3b2 100644 --- a/src/shapes/ZodSchemaClass.ts +++ b/src/shapes/ZodSchemaClass.ts @@ -9,7 +9,7 @@ export type ZodSchemaClass< SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, > = ( Class & @@ -23,7 +23,7 @@ export type ZodSchemaAbstractClass< SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, > = ( AbstractClass & @@ -35,7 +35,7 @@ export type ZodSchemaClassStatic< SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, > = { readonly schema: z.ZodObject diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index 10b2746..06a2e79 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -14,7 +14,7 @@ export const ExtendableZodSchemaObject = trait SuperSchemaT extends z.ZodRawShape, SuperSchemaUnknownKeys extends z.UnknownKeysParam, SuperSchemaCatchall extends z.ZodTypeAny, - SuperValues extends {}, + SuperValues extends object, SuperDefaultValues extends Partial, SchemaT extends z.ZodRawShape, diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 7fd1a0a..9737ee4 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -7,7 +7,7 @@ import { parseZodTypeEffect } from "../util" type NewZodSchemaInstanceInput< - Values extends {}, + Values extends object, DefaultValues extends Partial, > = { [Key in Exclude]: Values[Key] @@ -35,7 +35,7 @@ export const InstantiableZodSchemaObject = trait SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, >( this: ZodSchemaClass, @@ -56,7 +56,7 @@ export const InstantiableZodSchemaObject = trait SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, >( this: ZodSchemaClass, @@ -77,7 +77,7 @@ export const InstantiableZodSchemaObject = trait SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - Values extends {}, + Values extends object, DefaultValues extends Partial, >( this: ZodSchemaClass, -- 2.49.1 From 021928da8cfa543f8902f1596315ea45e0b8bb30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 02:07:50 +0100 Subject: [PATCH 041/136] Made ObservableZodSchemaObject into a subtrait --- src/traits/ObservableZodSchemaObject.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/traits/ObservableZodSchemaObject.ts b/src/traits/ObservableZodSchemaObject.ts index 8b6d624..13bed4d 100644 --- a/src/traits/ObservableZodSchemaObject.ts +++ b/src/traits/ObservableZodSchemaObject.ts @@ -1,10 +1,14 @@ -import { trait } from "@thilawyn/traitify-ts" +import { expression } from "@thilawyn/traitify-ts" +import { InstantiableZodSchemaObject } from "./InstantiableZodSchemaObject" -export const ObservableZodSchemaObject = trait - .implement(Super => class ObservableZodSchemaObject extends Super { - constructor(...args: any[]) { - super(...args) - } - }) +export const ObservableZodSchemaObject = expression + .expresses(InstantiableZodSchemaObject) .build() + .subtrait() + .implement(Super => class ObservableZodSchemaObject extends Super { + constructor(...args: any[]) { + super(...args) + } + }) + .build() -- 2.49.1 From 43876391fecb2ea8ea4069ff9a06798f3a3b20d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 03:21:39 +0100 Subject: [PATCH 042/136] Tests --- src/tests.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/tests.ts b/src/tests.ts index 9c4d37f..c29ce40 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,5 +1,9 @@ +import { expression } from "@thilawyn/traitify-ts" +import { AbstractClass } from "type-fest" import { z } from "zod" import { ZodSchemaClass } from "./ZodSchemaClass" +import { ExtendableZodSchemaObject } from "./lib" +import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" class Test extends ZodSchemaClass({ @@ -41,3 +45,19 @@ console.log(subInst) // class ChildTest extends Test {} // ChildTest.instantiate({ name: "" }) + + +class Gneugneu { +} + +export function getExpression>(class_: C) { + return expression + .extends(class_) + .expresses( + InstantiableZodSchemaObject, + ExtendableZodSchemaObject, + ) + .build() +} + +const exp = getExpression(Gneugneu) -- 2.49.1 From c00fc1f5175d0e8c48e93cb9bc64ebb925c18160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 03:39:20 +0100 Subject: [PATCH 043/136] Tests --- src/tests.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index c29ce40..f9b5d76 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -48,6 +48,7 @@ console.log(subInst) class Gneugneu { + } export function getExpression>(class_: C) { @@ -57,7 +58,6 @@ export function getExpression>(class_: C) { InstantiableZodSchemaObject, ExtendableZodSchemaObject, ) - .build() } -const exp = getExpression(Gneugneu) +const exp = getExpression(Gneugneu).build() -- 2.49.1 From 82976854534b13d697265480e66a645c40d434be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 03:56:39 +0100 Subject: [PATCH 044/136] Dependencies upgrade --- bun.lockb | Bin 160490 -> 160490 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 5068fe4f5e1097f8c7fe72faa9620ac23da1b6aa..b1173bfa4cc9507a2165d099a1580b19b6642840 100755 GIT binary patch delta 162 zcmV;T0A2s;^5va}5Nj@I5<{g7wptoJ10Z0`AHn*m=0WLrjHZOE?VQF+}W_c}i Qb1g6~F)lW@=k);teIXD=JOBUy delta 162 zcmV;T0A2s;VQF+}W_c}i Qb1g6~F)lT?=k);teWssFegFUf diff --git a/package.json b/package.json index fc94fe6..5398640 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.5", + "@thilawyn/traitify-ts": "^0.1.6", "decimal.js": "^10.4.3", "effect": "^2.3.7", "lodash-es": "^4.17.21", -- 2.49.1 From eaaef3bfd11434a8a11786e594cb407d649d2f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 16:40:05 +0100 Subject: [PATCH 045/136] ZodSchemaClassOf refactoring --- src/ZodSchemaClass.ts | 53 ++++++++++++++++++++++--------------------- src/tests.ts | 35 ++++------------------------ 2 files changed, 32 insertions(+), 56 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index e7420c6..acd27ae 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -7,7 +7,7 @@ import { Extend, StaticMembers } from "./util" export function ZodSchemaClassOf< - Super extends AbstractClass, + Superclass extends AbstractClass, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -16,42 +16,43 @@ export function ZodSchemaClassOf< Values extends object, DefaultValues extends Partial, >( - of: Super, + of: Superclass, { schema, defaultValues }: { schema: z.ZodObject defaultValues: DefaultValues }, ) { - const exp = expression - .extends(class extends (of as AbstractClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues + class Schemas extends (of as AbstractClass) { + static readonly schema = schema + static readonly defaultValues = defaultValues - constructor(values: Values) { - super() - Object.assign(this, values) - } - }) + constructor(values: Values) { + super() + Object.assign(this, values) + } + } + + return expression + .extends(Schemas as unknown as ( + AbstractClass< + InstanceType & + Extend<[ + InstanceType, + Values, + ]>, + + ConstructorParameters + > & + Extend<[ + StaticMembers, + StaticMembers, + ]> + )) .expresses( InstantiableZodSchemaObject, ExtendableZodSchemaObject, ) - .build() - - return exp.extends as AbstractClass< - InstanceType & - Extend<[ - InstanceType, - Values, - ]>, - - ConstructorParameters - > & - Extend<[ - StaticMembers, - StaticMembers, - ]> } diff --git a/src/tests.ts b/src/tests.ts index f9b5d76..9f0657e 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,28 +1,19 @@ -import { expression } from "@thilawyn/traitify-ts" -import { AbstractClass } from "type-fest" +import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" import { ZodSchemaClass } from "./ZodSchemaClass" -import { ExtendableZodSchemaObject } from "./lib" -import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" -class Test extends ZodSchemaClass({ +const TestExp = ZodSchemaClass({ schema: z.object({ id: z.bigint(), name: z.string(), }), defaultValues: { id: -1n }, -}) {} +}).build() -const Test2 = ZodSchemaClass({ - schema: z.object({ - id: z.bigint(), - name: z.string(), - }), - - defaultValues: { id: -1n }, -}) +@TestExp.implementsStatic +class Test extends TestExp.extends implements Implements {} Test.defaultValues const inst = Test.create({ id: 1n, name: "" }) @@ -45,19 +36,3 @@ console.log(subInst) // class ChildTest extends Test {} // ChildTest.instantiate({ name: "" }) - - -class Gneugneu { - -} - -export function getExpression>(class_: C) { - return expression - .extends(class_) - .expresses( - InstantiableZodSchemaObject, - ExtendableZodSchemaObject, - ) -} - -const exp = getExpression(Gneugneu).build() -- 2.49.1 From 4020f99d18e7b768337678d86aafc88a0588d456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 20 Feb 2024 16:45:37 +0100 Subject: [PATCH 046/136] Fix --- src/ZodSchemaClass.ts | 21 +++++++++++---------- src/tests.ts | 1 + 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index acd27ae..3745878 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,5 +1,5 @@ import { expression } from "@thilawyn/traitify-ts" -import { AbstractClass } from "type-fest" +import { AbstractClass, Simplify } from "type-fest" import { z } from "zod" import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" @@ -36,18 +36,19 @@ export function ZodSchemaClassOf< return expression .extends(Schemas as unknown as ( AbstractClass< - InstanceType & - Extend<[ - InstanceType, - Values, - ]>, + InstanceType & + Simplify< + Extend<[Schemas, Values]> + >, ConstructorParameters > & - Extend<[ - StaticMembers, - StaticMembers, - ]> + Simplify< + Extend<[ + StaticMembers, + StaticMembers, + ]> + > )) .expresses( InstantiableZodSchemaObject, diff --git a/src/tests.ts b/src/tests.ts index 9f0657e..3de2948 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -5,6 +5,7 @@ import { ZodSchemaClass } from "./ZodSchemaClass" const TestExp = ZodSchemaClass({ schema: z.object({ + /** Object ID */ id: z.bigint(), name: z.string(), }), -- 2.49.1 From 1b9fa091869c034504ef94564dfac4d99d1efd5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 21 Feb 2024 04:45:43 +0100 Subject: [PATCH 047/136] ObservableZodSchemaObject --- src/tests.ts | 19 +++++++++++++++-- src/traits/ObservableZodSchemaObject.ts | 28 +++++++++++++++---------- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index 3de2948..b242b84 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,6 +1,7 @@ import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" import { ZodSchemaClass } from "./ZodSchemaClass" +import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" const TestExp = ZodSchemaClass({ @@ -11,12 +12,14 @@ const TestExp = ZodSchemaClass({ }), defaultValues: { id: -1n }, -}).build() +}) + .expresses(ObservableZodSchemaObject) + .buildAnyway() @TestExp.implementsStatic class Test extends TestExp.extends implements Implements {} -Test.defaultValues +Test.schema const inst = Test.create({ id: 1n, name: "" }) console.log(inst) @@ -37,3 +40,15 @@ console.log(subInst) // class ChildTest extends Test {} // ChildTest.instantiate({ name: "" }) + +const testSchema = { schema: Test.schema } + +declare const testGenericSchema: { + schema: z.ZodObject +} + +type U = T + +interface ExtendTest extends U { + schema: z.ZodObject +} diff --git a/src/traits/ObservableZodSchemaObject.ts b/src/traits/ObservableZodSchemaObject.ts index 13bed4d..f63f33f 100644 --- a/src/traits/ObservableZodSchemaObject.ts +++ b/src/traits/ObservableZodSchemaObject.ts @@ -1,14 +1,20 @@ -import { expression } from "@thilawyn/traitify-ts" -import { InstantiableZodSchemaObject } from "./InstantiableZodSchemaObject" +import { trait } from "@thilawyn/traitify-ts" +import { mapValues } from "lodash-es" +import { makeObservable, observable } from "mobx" +import { z } from "zod" -export const ObservableZodSchemaObject = expression - .expresses(InstantiableZodSchemaObject) +export const ObservableZodSchemaObject = trait + .staticAbstract(Super => class extends Super { + declare readonly schema: z.ZodObject + }) + .implement(Super => class ObservableZodSchemaObject extends Super { + constructor(...args: any[]) { + super(...args) + + makeObservable(this, + mapValues(ObservableZodSchemaObject.schema.shape, () => observable) + ) + } + }) .build() - .subtrait() - .implement(Super => class ObservableZodSchemaObject extends Super { - constructor(...args: any[]) { - super(...args) - } - }) - .build() -- 2.49.1 From 0c7e1d2ab5e889fec6e8846ef79ebd72c8b74208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 21 Feb 2024 04:46:20 +0100 Subject: [PATCH 048/136] Dependencies upgrade --- bun.lockb | Bin 160490 -> 160490 bytes package.json | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index b1173bfa4cc9507a2165d099a1580b19b6642840..7197cbd5a7a4628940c0d0bc2a12d403a6116056 100755 GIT binary patch delta 256 zcmV+b0ssE$k+E+k1fo~KOSerRFjU+I)oP4CTN>kBj{nlM!B#eu}-=h zlgKzQlQQ%Ev+z1%wMU4QYOU84p5$( zAkrAd?H>C?7@|T4M9_oaiugQ90`-m_S`!+h8uyc}pKw5#^vvpG?z{cP?Y0Z2$!t|% zkLIJ7tb{o>5DclJA`GNCzoWdz8+$qG7BPyIDh#CsuRJm>XzPKNau*``tuph2U7)vJ zpaDn~0XLVXwE;5$IJerh0cSs#5)=X;mtpk*a}zf&baG*7bZKUJEp&4&FfK7JH@D~Y G0Rw&agmZxa delta 264 zcmV+j0r&pu4St3sLj$zJ|48@ z9fMtX0Rw&c4sXZ+ diff --git a/package.json b/package.json index 5398640..075862b 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,9 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.6", + "@thilawyn/traitify-ts": "^0.1.7", "decimal.js": "^10.4.3", - "effect": "^2.3.7", + "effect": "^2.3.8", "lodash-es": "^4.17.21", "mobx": "^6.12.0", "type-fest": "^4.10.2", -- 2.49.1 From 79c763fe152c2ad57f891761f2db2423192cfeed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 21 Feb 2024 04:48:14 +0100 Subject: [PATCH 049/136] Tests fix --- src/tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests.ts b/src/tests.ts index b242b84..3d5e878 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -14,7 +14,7 @@ const TestExp = ZodSchemaClass({ defaultValues: { id: -1n }, }) .expresses(ObservableZodSchemaObject) - .buildAnyway() + .build() @TestExp.implementsStatic class Test extends TestExp.extends implements Implements {} -- 2.49.1 From e18817be0f1c76537aa4588e5ae97b6df77a9c1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 21 Feb 2024 05:48:43 +0100 Subject: [PATCH 050/136] Cleanup --- src/traits/InstantiableZodSchemaObject.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 9737ee4..dbb2b82 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -97,8 +97,5 @@ export const InstantiableZodSchemaObject = trait ) } - protected static initialize() { - - } }) .build() -- 2.49.1 From cf12c2f617707035bf5fc456f2536f57314dd98b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 21 Feb 2024 17:46:16 +0100 Subject: [PATCH 051/136] Dependencies upgrade --- bun.lockb | Bin 160490 -> 160490 bytes package.json | 4 ++-- src/tests.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun.lockb b/bun.lockb index 7197cbd5a7a4628940c0d0bc2a12d403a6116056..5b3db08667547b0466db92515b25fd397439ed82 100755 GIT binary patch delta 262 zcmV+h0r~#wtpJ7DB2|;@_Q0ldYd{Kz=8x3cyk+E+k1fo~KOSerRFjU+I)oP4CTN>kBj{nlM!B#eu}-!d zlf*bQlQQ%Ev+z1%wMU4QYOU84p5$( zAkrAd?H>C?7@|T4M9_oaiugQ90`-m_S`!+h8uyc}pKw5#^vvpG?z{cP?Y0Z2$!t|% zkLIJ7tb{o>5DclJA`GNCzoWdz8+$qG7BPyIDh#CsuRJm>XzPKNau*``tuph2U7)vJ zpaDn~0XLVXwE-~$GcGu{+O+{?KLInB5flO;mtpk*a}zf&baG*7bZKUJEp&4&FfK7J KH@D~Y0Rw%b33Lzu diff --git a/package.json b/package.json index 075862b..6b24c93 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,9 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.7", + "@thilawyn/traitify-ts": "^0.1.8", "decimal.js": "^10.4.3", - "effect": "^2.3.8", + "effect": "^2.4.0", "lodash-es": "^4.17.21", "mobx": "^6.12.0", "type-fest": "^4.10.2", diff --git a/src/tests.ts b/src/tests.ts index 3d5e878..36c5c74 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -16,7 +16,7 @@ const TestExp = ZodSchemaClass({ .expresses(ObservableZodSchemaObject) .build() -@TestExp.implementsStatic +@TestExp.staticImplements class Test extends TestExp.extends implements Implements {} Test.schema -- 2.49.1 From 5f18d2310c5c01f259ccdb77c004e7e408b8788d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 21 Feb 2024 21:22:56 +0100 Subject: [PATCH 052/136] JsonifiableZodSchemaClass --- src/shapes/JsonifiableZodSchemaClass.ts | 78 +++++++++++++++++++++++ src/traits/InstantiableZodSchemaObject.ts | 1 - 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/shapes/JsonifiableZodSchemaClass.ts diff --git a/src/shapes/JsonifiableZodSchemaClass.ts b/src/shapes/JsonifiableZodSchemaClass.ts new file mode 100644 index 0000000..0f15bd2 --- /dev/null +++ b/src/shapes/JsonifiableZodSchemaClass.ts @@ -0,0 +1,78 @@ +import { AbstractClass, Class } from "type-fest" +import { JsonifiableObject } from "type-fest/source/jsonifiable" +import { z } from "zod" + + +export type JsonifiableZodSchemaClass< + Instance extends Values, + + Values extends object, + JsonifiedValues extends JsonifiableObject, + + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, +> = ( + Class & + JsonifiableZodSchemaClassStatic< + Values, + JsonifiedValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall + > +) + +export type JsonifiableZodSchemaAbstractClass< + Instance extends Values, + + Values extends object, + JsonifiedValues extends JsonifiableObject, + + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, +> = ( + AbstractClass & + JsonifiableZodSchemaClassStatic< + Values, + JsonifiedValues, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall + > +) + +export type JsonifiableZodSchemaClassStatic< + Values extends object, + JsonifiedValues extends JsonifiableObject, + + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, +> = { + readonly jsonifySchema: z.ZodObject + readonly dejsonifySchema: z.ZodObject +} diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index dbb2b82..d567034 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -96,6 +96,5 @@ export const InstantiableZodSchemaObject = trait Effect.map(values => new this(values)), ) } - }) .build() -- 2.49.1 From a6214c470eeb4bfc3fed4655d6877dbf8caab20c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 01:10:18 +0100 Subject: [PATCH 053/136] Dependencies upgrade --- bun.lockb | Bin 160490 -> 160490 bytes package.json | 2 +- src/ZodSchemaClass.ts | 10 +++++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index 5b3db08667547b0466db92515b25fd397439ed82..195f56ac2c96883ca308b15bd71d30c848728992 100755 GIT binary patch delta 162 zcmV;T0A2s;1cqG-0Ivk! zd9VLyq$x&aRI{+{(PHN_DBG6PK}~~QptoJ10Z0`AIk%>@0WLrjIWKf_VQF+}W_c}i Qb1g6~F)lf`=k);teFg4I, + const Traits extends Trait[], +> +extends TraitExpressionBuilder { +} + + export function ZodSchemaClassOf< Superclass extends AbstractClass, -- 2.49.1 From 586eddc8982911bb7305edcae9095d0576a616e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 04:00:39 +0100 Subject: [PATCH 054/136] ZodSchemaClassBuilder --- bun.lockb | Bin 160490 -> 160492 bytes package.json | 2 +- src/ZodSchemaClass.ts | 75 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/bun.lockb b/bun.lockb index 195f56ac2c96883ca308b15bd71d30c848728992..31a1b1655f3add0bde014d20776b3662a481f3f6 100755 GIT binary patch delta 13848 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 delta 13835 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, - const Traits extends Trait[], -> -extends TraitExpressionBuilder { + Exp extends TraitExpressionBuilder +> { + constructor( + private readonly expressionBuilder: Exp + ) {} + + extends< + This extends ZodSchemaClassBuilder< + TraitExpressionBuilder< + typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass + any + > + >, + Super extends AbstractClass, + >( + this: This, + superclass: Super, + ) { + return new ZodSchemaClassBuilder( + this.expressionBuilder.extends(superclass) + ) + } + + schema< + This extends ZodSchemaClassBuilder< + TraitExpressionBuilder< + any, + any + > + >, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends object, + DefaultValues extends Partial, + >( + this: This, + schema: z.ZodObject, + defaultValues: DefaultValues, + ) { + class Schemas extends (this.expressionBuilder.expressionSuperclass as AbstractClass) { + static readonly schema = schema + static readonly defaultValues = defaultValues + + constructor(values: Values) { + super() + Object.assign(this, values) + } + } + + return new ZodSchemaClassBuilder( + this.expressionBuilder + .extends() + .expresses( + InstantiableZodSchemaObject, + ExtendableZodSchemaObject, + ) + ) + } + + jsonifiable() { + + } + + toBuilder() { + return this.expressionBuilder + } } -- 2.49.1 From 26453038a2f4e27e0d0ea653c112ae03fc422c07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 04:35:41 +0100 Subject: [PATCH 055/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 39 +++++++++++++++++++++++---------------- src/tests.ts | 16 ++++++++++++++-- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 7df9fd8..971167f 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,4 +1,4 @@ -import { TraitExpression, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts" +import { Trait, TraitExpression, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts" import { AbstractClass, Simplify } from "type-fest" import { z } from "zod" import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" @@ -7,18 +7,17 @@ import { Extend, StaticMembers } from "./util" export class ZodSchemaClassBuilder< - Exp extends TraitExpressionBuilder + Superclass extends AbstractClass, + const Traits extends Trait[], > { constructor( - private readonly expressionBuilder: Exp + private readonly expressionBuilder: TraitExpressionBuilder ) {} extends< This extends ZodSchemaClassBuilder< - TraitExpressionBuilder< - typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass - any - > + typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass + Traits >, Super extends AbstractClass, >( @@ -31,13 +30,6 @@ export class ZodSchemaClassBuilder< } schema< - This extends ZodSchemaClassBuilder< - TraitExpressionBuilder< - any, - any - > - >, - SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -45,7 +37,7 @@ export class ZodSchemaClassBuilder< Values extends object, DefaultValues extends Partial, >( - this: This, + // this: This, schema: z.ZodObject, defaultValues: DefaultValues, ) { @@ -61,7 +53,22 @@ export class ZodSchemaClassBuilder< return new ZodSchemaClassBuilder( this.expressionBuilder - .extends() + .extends(Schemas as unknown as ( + AbstractClass< + InstanceType & + Simplify< + Extend<[Schemas, Values]> + >, + + ConstructorParameters + > & + Simplify< + Extend<[ + StaticMembers, + StaticMembers, + ]> + > + )) .expresses( InstantiableZodSchemaObject, ExtendableZodSchemaObject, diff --git a/src/tests.ts b/src/tests.ts index 36c5c74..228c13c 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,9 +1,21 @@ -import { Implements } from "@thilawyn/traitify-ts" +import { Implements, expression } from "@thilawyn/traitify-ts" import { z } from "zod" -import { ZodSchemaClass } from "./ZodSchemaClass" +import { ZodSchemaClass, ZodSchemaClassBuilder } from "./ZodSchemaClass" import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" +const newTestExp = new ZodSchemaClassBuilder(expression) + .schema( + z.object({ + id: z.bigint() + }), + + { id: -1n }, + ) + .toBuilder() + .expressionSuperclass + + const TestExp = ZodSchemaClass({ schema: z.object({ /** Object ID */ -- 2.49.1 From 718a32052d798678f99588536d0c51106b6079df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 04:44:24 +0100 Subject: [PATCH 056/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 85 +++++++++++++++++++------------------------ src/tests.ts | 5 +-- 2 files changed, 40 insertions(+), 50 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 971167f..5145db6 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -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 { z } from "zod" import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" @@ -9,25 +9,22 @@ import { Extend, StaticMembers } from "./util" export class ZodSchemaClassBuilder< Superclass extends AbstractClass, const Traits extends Trait[], -> { - constructor( - private readonly expressionBuilder: TraitExpressionBuilder - ) {} - - extends< - This extends ZodSchemaClassBuilder< - typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass - Traits - >, - Super extends AbstractClass, - >( - this: This, - superclass: Super, - ) { - return new ZodSchemaClassBuilder( - this.expressionBuilder.extends(superclass) - ) - } +> +extends TraitExpressionBuilder { + // extends< + // This extends ZodSchemaClassBuilder< + // typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass + // Traits + // >, + // Super extends AbstractClass, + // >( + // this: This, + // superclass: Super, + // ) { + // return new ZodSchemaClassBuilder( + // this.expressionBuilder.extends(superclass) + // ) + // } schema< SchemaT extends z.ZodRawShape, @@ -41,7 +38,7 @@ export class ZodSchemaClassBuilder< schema: z.ZodObject, defaultValues: DefaultValues, ) { - class Schemas extends (this.expressionBuilder.expressionSuperclass as AbstractClass) { + class Schemas extends (this.expressionSuperclass as AbstractClass) { static readonly schema = schema static readonly defaultValues = defaultValues @@ -51,38 +48,32 @@ export class ZodSchemaClassBuilder< } } - return new ZodSchemaClassBuilder( - this.expressionBuilder - .extends(Schemas as unknown as ( - AbstractClass< - InstanceType & - Simplify< - Extend<[Schemas, Values]> - >, - - ConstructorParameters - > & + return this + .extends(Schemas as unknown as ( + AbstractClass< + InstanceType & Simplify< - Extend<[ - StaticMembers, - StaticMembers, - ]> - > - )) - .expresses( - InstantiableZodSchemaObject, - ExtendableZodSchemaObject, - ) - ) + Extend<[Schemas, Values]> + >, + + ConstructorParameters + > & + Simplify< + Extend<[ + StaticMembers, + StaticMembers, + ]> + > + )) + .expresses( + InstantiableZodSchemaObject, + ExtendableZodSchemaObject, + ) } jsonifiable() { } - - toBuilder() { - return this.expressionBuilder - } } diff --git a/src/tests.ts b/src/tests.ts index 228c13c..4ed7404 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,10 +1,10 @@ -import { Implements, expression } from "@thilawyn/traitify-ts" +import { Implements, TraitExpression } from "@thilawyn/traitify-ts" import { z } from "zod" import { ZodSchemaClass, ZodSchemaClassBuilder } from "./ZodSchemaClass" import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" -const newTestExp = new ZodSchemaClassBuilder(expression) +const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) .schema( z.object({ id: z.bigint() @@ -12,7 +12,6 @@ const newTestExp = new ZodSchemaClassBuilder(expression) { id: -1n }, ) - .toBuilder() .expressionSuperclass -- 2.49.1 From a58b441094cb1a54d2d0fc4a83660ab46b969798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 04:52:36 +0100 Subject: [PATCH 057/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 13 ++++++++----- src/tests.ts | 12 +++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 5145db6..db17a1c 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -48,8 +48,8 @@ extends TraitExpressionBuilder { } } - return this - .extends(Schemas as unknown as ( + return new ZodSchemaClassBuilder( + Schemas as unknown as ( AbstractClass< InstanceType & Simplify< @@ -64,11 +64,14 @@ extends TraitExpressionBuilder { StaticMembers, ]> > - )) - .expresses( + ), + + [ + ...this.expressionTraits, InstantiableZodSchemaObject, ExtendableZodSchemaObject, - ) + ], + ) } jsonifiable() { diff --git a/src/tests.ts b/src/tests.ts index 4ed7404..b99ef6b 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -7,13 +7,15 @@ import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) .schema( z.object({ - id: z.bigint() + /** Object ID */ + id: z.bigint(), + name: z.string(), }), { id: -1n }, ) - .expressionSuperclass - + .expresses(ObservableZodSchemaObject) + .build() const TestExp = ZodSchemaClass({ schema: z.object({ @@ -27,8 +29,8 @@ const TestExp = ZodSchemaClass({ .expresses(ObservableZodSchemaObject) .build() -@TestExp.staticImplements -class Test extends TestExp.extends implements Implements {} +@newTestExp.staticImplements +class Test extends newTestExp.extends implements Implements {} Test.schema const inst = Test.create({ id: 1n, name: "" }) -- 2.49.1 From 46461cd37358a5f944afd0590a1ade3f8eb0c22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 05:37:17 +0100 Subject: [PATCH 058/136] ZodSchemaClassBuilder.schema fix --- src/ZodSchemaClass.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index db17a1c..07c0342 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -27,6 +27,8 @@ extends TraitExpressionBuilder { // } schema< + Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, + SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -34,7 +36,7 @@ extends TraitExpressionBuilder { Values extends object, DefaultValues extends Partial, >( - // this: This, + this: ZodSchemaClassBuilder, schema: z.ZodObject, defaultValues: DefaultValues, ) { -- 2.49.1 From 55d8bb0c1b3f11f1615e59efc7ec5a2332f28882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 06:06:40 +0100 Subject: [PATCH 059/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 26 ++++++++++++++++++++++---- src/tests.ts | 24 ++++++------------------ 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 07c0342..d18c100 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,5 +1,6 @@ import { Trait, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts" import { AbstractClass, Simplify } from "type-fest" +import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" @@ -36,9 +37,12 @@ extends TraitExpressionBuilder { Values extends object, DefaultValues extends Partial, >( - this: ZodSchemaClassBuilder, - schema: z.ZodObject, - defaultValues: DefaultValues, + this: ZodSchemaClassBuilder, + + { schema, defaultValues }: { + schema: z.ZodObject + defaultValues: DefaultValues + }, ) { class Schemas extends (this.expressionSuperclass as AbstractClass) { static readonly schema = schema @@ -76,7 +80,21 @@ extends TraitExpressionBuilder { ) } - jsonifiable() { + jsonifiable< + Superclass extends AbstractClass, + + JsonifiedValues extends JsonifiableObject, + + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, + >( + this: ZodSchemaClassBuilder, + ) { } } diff --git a/src/tests.ts b/src/tests.ts index b99ef6b..40a523c 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,38 +1,26 @@ import { Implements, TraitExpression } from "@thilawyn/traitify-ts" import { z } from "zod" -import { ZodSchemaClass, ZodSchemaClassBuilder } from "./ZodSchemaClass" +import { ZodSchemaClassBuilder } from "./ZodSchemaClass" import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) - .schema( - z.object({ + .schema({ + schema: z.object({ /** Object ID */ id: z.bigint(), name: z.string(), }), - { id: -1n }, - ) - .expresses(ObservableZodSchemaObject) - .build() - -const TestExp = ZodSchemaClass({ - schema: z.object({ - /** Object ID */ - id: z.bigint(), - name: z.string(), - }), - - defaultValues: { id: -1n }, -}) + defaultValues: { id: -1n }, + }) .expresses(ObservableZodSchemaObject) .build() @newTestExp.staticImplements class Test extends newTestExp.extends implements Implements {} -Test.schema +Test.defaultValues const inst = Test.create({ id: 1n, name: "" }) console.log(inst) -- 2.49.1 From bddbe428a7f63207e2c674edd2eaa0072b522fbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 21:00:14 +0100 Subject: [PATCH 060/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 159 +++++++++++++++++++++++------------------- 1 file changed, 87 insertions(+), 72 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index d18c100..ff34b2e 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,7 +1,8 @@ -import { Trait, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts" +import { Trait, TraitExpressionBuilder } from "@thilawyn/traitify-ts" import { AbstractClass, Simplify } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" +import { ZodSchemaClass } from "./shapes/ZodSchemaClass" import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" import { Extend, StaticMembers } from "./util" @@ -81,7 +82,15 @@ extends TraitExpressionBuilder { } jsonifiable< - Superclass extends AbstractClass, + Superclass extends ZodSchemaClass, + Instance extends Values, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends object, + DefaultValues extends Partial, JsonifiedValues extends JsonifiableObject, @@ -93,78 +102,84 @@ extends TraitExpressionBuilder { DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, >( - this: ZodSchemaClassBuilder, - ) { + this: ZodSchemaClassBuilder< + Superclass | ZodSchemaClass, + Traits + >, - } -} + props: { + jsonifySchema: (props: { + schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > - -export function ZodSchemaClassOf< - Superclass extends AbstractClass, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends object, - DefaultValues extends Partial, ->( - of: Superclass, - - { schema, defaultValues }: { - schema: z.ZodObject - defaultValues: DefaultValues - }, -) { - class Schemas extends (of as AbstractClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues - - constructor(values: Values) { - super() - Object.assign(this, values) - } - } - - return expression - .extends(Schemas as unknown as ( - AbstractClass< - InstanceType & - Simplify< - Extend<[Schemas, Values]> - >, - - ConstructorParameters - > & - Simplify< - Extend<[ - StaticMembers, - StaticMembers, - ]> + shape: SchemaT + }) => z.ZodObject< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + JsonifiedValues, + Values > - )) - .expresses( - InstantiableZodSchemaObject, - ExtendableZodSchemaObject, + + dejsonifySchema: (props: { + schema: z.ZodObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + Values, + Values + > + + shape: SchemaT + }) => z.ZodObject< + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + Values, + JsonifiedValues + > + }, + ) { + 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, + }) + + class Schemas extends this.expressionSuperclass { + static readonly jsonifySchema = jsonifySchema + static readonly dejsonifySchema = dejsonifySchema + } + + return new ZodSchemaClassBuilder( + Schemas as unknown as ( + AbstractClass< + InstanceType & + Simplify< + Extend<[Schemas, Values]> + >, + + ConstructorParameters + > & + Simplify< + Extend<[ + StaticMembers, + StaticMembers, + ]> + > + ), + + [ + ...this.expressionTraits, + ], ) -} - - -class DefaultRoot {} - -export function ZodSchemaClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends object, - DefaultValues extends Partial, ->( - props: { - schema: z.ZodObject - defaultValues: DefaultValues - }, -) { - return ZodSchemaClassOf(DefaultRoot, props) + } } -- 2.49.1 From 70012fdaf29c3ed2e81042a07f3f6a9a55368ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 21:24:37 +0100 Subject: [PATCH 061/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 60 ++++++++++--------------------------------- 1 file changed, 13 insertions(+), 47 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index ff34b2e..4b38b2b 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -29,7 +29,7 @@ extends TraitExpressionBuilder { // } schema< - Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, + Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -58,11 +58,7 @@ extends TraitExpressionBuilder { return new ZodSchemaClassBuilder( Schemas as unknown as ( AbstractClass< - InstanceType & - Simplify< - Extend<[Schemas, Values]> - >, - + InstanceType & Values, ConstructorParameters > & Simplify< @@ -109,40 +105,14 @@ extends TraitExpressionBuilder { props: { jsonifySchema: (props: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - shape: SchemaT - }) => z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > + schema: z.ZodObject + shape: SchemaT + }) => z.ZodObject dejsonifySchema: (props: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - shape: SchemaT - }) => z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > + schema: z.ZodObject + shape: SchemaT + }) => z.ZodObject }, ) { const jsonifySchema = props.jsonifySchema({ @@ -154,25 +124,21 @@ extends TraitExpressionBuilder { shape: this.expressionSuperclass.schema.shape, }) - class Schemas extends this.expressionSuperclass { + class JsonifiableSchemas extends (this.expressionSuperclass as AbstractClass) { static readonly jsonifySchema = jsonifySchema static readonly dejsonifySchema = dejsonifySchema } return new ZodSchemaClassBuilder( - Schemas as unknown as ( + JsonifiableSchemas as unknown as ( AbstractClass< - InstanceType & - Simplify< - Extend<[Schemas, Values]> - >, - - ConstructorParameters + InstanceType, + ConstructorParameters > & Simplify< Extend<[ StaticMembers, - StaticMembers, + StaticMembers, ]> > ), -- 2.49.1 From 68b39f4997ae4f9ecd94181a33d99f8bf7aeb4e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 21:42:35 +0100 Subject: [PATCH 062/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 20 +++++--------------- src/tests.ts | 4 ++++ 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 4b38b2b..f8fe517 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -2,7 +2,7 @@ import { Trait, TraitExpressionBuilder } from "@thilawyn/traitify-ts" import { AbstractClass, Simplify } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" -import { ZodSchemaClass } from "./shapes/ZodSchemaClass" +import { ZodSchemaAbstractClass } from "./shapes/ZodSchemaClass" import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" import { Extend, StaticMembers } from "./util" @@ -78,7 +78,8 @@ extends TraitExpressionBuilder { } jsonifiable< - Superclass extends ZodSchemaClass, + Superclass extends ZodSchemaAbstractClass + & { jsonifySchema?: never, dejsonifySchema?: never }, Instance extends Values, SchemaT extends z.ZodRawShape, @@ -99,7 +100,7 @@ extends TraitExpressionBuilder { DejsonifySchemaCatchall extends z.ZodTypeAny, >( this: ZodSchemaClassBuilder< - Superclass | ZodSchemaClass, + Superclass | ZodSchemaAbstractClass, Traits >, @@ -130,18 +131,7 @@ extends TraitExpressionBuilder { } return new ZodSchemaClassBuilder( - JsonifiableSchemas as unknown as ( - AbstractClass< - InstanceType, - ConstructorParameters - > & - Simplify< - Extend<[ - StaticMembers, - StaticMembers, - ]> - > - ), + JsonifiableSchemas as unknown as Superclass & StaticMembers, [ ...this.expressionTraits, diff --git a/src/tests.ts b/src/tests.ts index 40a523c..3a49e24 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -14,6 +14,10 @@ const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) defaultValues: { id: -1n }, }) + .jsonifiable({ + jsonifySchema: ({ schema }) => schema.extend({}), + dejsonifySchema: ({ schema }) => schema.extend({}), + }) .expresses(ObservableZodSchemaObject) .build() -- 2.49.1 From 6c6e2cce7c031fcc92e3e813df8367aa9936d892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 22 Feb 2024 23:59:28 +0100 Subject: [PATCH 063/136] Jsonifiable schemas --- src/schema/jsonify/bigint.ts | 28 ++++++++++++++++++++++++++++ src/schema/jsonify/date.ts | 28 ++++++++++++++++++++++++++++ src/schema/jsonify/decimal.ts | 33 +++++++++++++++++++++++++++++++++ src/schema/jsonify/index.ts | 16 ++++++++++++++++ src/tests.ts | 9 +++++++-- 5 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 src/schema/jsonify/bigint.ts create mode 100644 src/schema/jsonify/date.ts create mode 100644 src/schema/jsonify/decimal.ts create mode 100644 src/schema/jsonify/index.ts diff --git a/src/schema/jsonify/bigint.ts b/src/schema/jsonify/bigint.ts new file mode 100644 index 0000000..513eaa0 --- /dev/null +++ b/src/schema/jsonify/bigint.ts @@ -0,0 +1,28 @@ +import { identity } from "lodash-es" +import { Opaque } from "type-fest" +import { z } from "zod" + + +export type JsonifiedBigInt = Opaque + + +export function jsonifyBigIntSchema(schema: S) { + return schema.transform(v => v.toString() as JsonifiedBigInt) +} + +export function dejsonifyBigIntSchema(schema: S) { + return z + .custom(identity) + .pipe(z + .string() + .transform(v => { + try { + return BigInt(v) + } + catch (e) { + return v + } + }) + .pipe(schema) + ) +} diff --git a/src/schema/jsonify/date.ts b/src/schema/jsonify/date.ts new file mode 100644 index 0000000..a84dc61 --- /dev/null +++ b/src/schema/jsonify/date.ts @@ -0,0 +1,28 @@ +import { identity } from "lodash-es" +import { Opaque } from "type-fest" +import { z } from "zod" + + +export type JsonifiedDate = Opaque + + +export function jsonifyDateSchema(schema: S) { + return schema.transform(v => v.toString() as JsonifiedDate) +} + +export function dejsonifyDateSchema(schema: S) { + return z + .custom(identity) + .pipe(z + .string() + .transform(v => { + try { + return new Date(v) + } + catch (e) { + return v + } + }) + .pipe(schema) + ) +} diff --git a/src/schema/jsonify/decimal.ts b/src/schema/jsonify/decimal.ts new file mode 100644 index 0000000..4a4e67e --- /dev/null +++ b/src/schema/jsonify/decimal.ts @@ -0,0 +1,33 @@ +import { Decimal } from "decimal.js" +import { identity } from "lodash-es" +import { Opaque } from "type-fest" +import { z } from "zod" + + +export type JsonifiedDecimal = Opaque + + +export function jsonifyDecimalSchema< + S extends z.ZodType +>(schema: S) { + return schema.transform(v => v.toJSON() as JsonifiedDecimal) +} + +export function dejsonifyDecimalSchema< + S extends z.ZodType +>(schema: S) { + return z + .custom(identity) + .pipe(z + .string() + .transform(v => { + try { + return new Decimal(v) + } + catch (e) { + return v + } + }) + .pipe(schema) + ) +} diff --git a/src/schema/jsonify/index.ts b/src/schema/jsonify/index.ts new file mode 100644 index 0000000..753d3a3 --- /dev/null +++ b/src/schema/jsonify/index.ts @@ -0,0 +1,16 @@ +import { dejsonifyBigIntSchema, jsonifyBigIntSchema } from "./bigint" +import { dejsonifyDateSchema, jsonifyDateSchema } from "./date" +import { dejsonifyDecimalSchema, jsonifyDecimalSchema } from "./decimal" + + +export const jsonify = { + bigint: jsonifyBigIntSchema, + date: jsonifyDateSchema, + decimal: jsonifyDecimalSchema, +} + +export const dejsonify = { + bigint: dejsonifyBigIntSchema, + date: dejsonifyDateSchema, + decimal: dejsonifyDecimalSchema, +} diff --git a/src/tests.ts b/src/tests.ts index 3a49e24..a43865c 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,6 +1,7 @@ import { Implements, TraitExpression } from "@thilawyn/traitify-ts" import { z } from "zod" import { ZodSchemaClassBuilder } from "./ZodSchemaClass" +import { dejsonify, jsonify } from "./schema/jsonify" import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" @@ -15,8 +16,12 @@ const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) defaultValues: { id: -1n }, }) .jsonifiable({ - jsonifySchema: ({ schema }) => schema.extend({}), - dejsonifySchema: ({ schema }) => schema.extend({}), + jsonifySchema: ({ schema, shape }) => schema.extend({ + id: jsonify.bigint(shape.id) + }), + dejsonifySchema: ({ schema, shape }) => schema.extend({ + id: dejsonify.bigint(shape.id) + }), }) .expresses(ObservableZodSchemaObject) .build() -- 2.49.1 From 03b769b74f07e7028d6a2262bed0685175eac6d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 23 Feb 2024 18:01:51 +0100 Subject: [PATCH 064/136] DejsonifiableZodSchemaObject --- src/tests.ts | 1 + src/traits/DejsonifiableZodSchemaObject.ts | 95 ++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 src/traits/DejsonifiableZodSchemaObject.ts diff --git a/src/tests.ts b/src/tests.ts index a43865c..f812a71 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -19,6 +19,7 @@ const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) jsonifySchema: ({ schema, shape }) => schema.extend({ id: jsonify.bigint(shape.id) }), + dejsonifySchema: ({ schema, shape }) => schema.extend({ id: dejsonify.bigint(shape.id) }), diff --git a/src/traits/DejsonifiableZodSchemaObject.ts b/src/traits/DejsonifiableZodSchemaObject.ts new file mode 100644 index 0000000..4ff593d --- /dev/null +++ b/src/traits/DejsonifiableZodSchemaObject.ts @@ -0,0 +1,95 @@ +import { trait } from "@thilawyn/traitify-ts" +import { Effect, pipe } from "effect" +import { HasRequiredKeys } from "type-fest" +import { z } from "zod" +import { ZodSchemaClass } from "../shapes/ZodSchemaClass" +import { parseZodTypeEffect } from "../util" +import { JsonifiableZodSchemaClass } from "../shapes/JsonifiableZodSchemaClass" +import { JsonifiableObject } from "type-fest/source/jsonifiable" + + +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, + + Values extends object, + JsonifiedValues extends JsonifiableObject, + >( + this: JsonifiableZodSchemaClass< + Instance, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + Values, + JsonifiedValues + >, + ) { + return new this( + this.schema.parse({ ...this.defaultValues, ...values }, params) + ) + } + + // static async createPromise< + // Instance extends Values, + + // SchemaT extends z.ZodRawShape, + // SchemaUnknownKeys extends z.UnknownKeysParam, + // SchemaCatchall extends z.ZodTypeAny, + + // Values extends object, + // DefaultValues extends Partial, + // >( + // this: ZodSchemaClass, + + // ...[values, params]: NewZodSchemaInstanceArgs< + // NewZodSchemaInstanceInput + // > + // ) { + // return new this( + // await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) + // ) + // } + + // static createEffect< + // Instance extends Values, + + // SchemaT extends z.ZodRawShape, + // SchemaUnknownKeys extends z.UnknownKeysParam, + // SchemaCatchall extends z.ZodTypeAny, + + // Values extends object, + // DefaultValues extends Partial, + // >( + // this: ZodSchemaClass, + + // ...[values, params]: NewZodSchemaInstanceArgs< + // NewZodSchemaInstanceInput + // > + // ) { + // return pipe( + // parseZodTypeEffect( + // this.schema, + // { ...this.defaultValues, ...values }, + // params, + // ), + + // Effect.map(values => new this(values)), + // ) + // } + }) + .build() -- 2.49.1 From cffc56e7f6ad80de36aaf56f1f4073ab1a52ba88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 23 Feb 2024 20:11:06 +0100 Subject: [PATCH 065/136] DejsonifiableZodSchemaObject --- src/ZodSchemaClass.ts | 2 + src/shapes/JsonifiableZodSchemaClass.ts | 34 +++--- src/tests.ts | 1 + src/traits/DejsonifiableZodSchemaObject.ts | 119 +++++++++++++-------- 4 files changed, 93 insertions(+), 63 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index f8fe517..fee8c37 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -3,6 +3,7 @@ import { AbstractClass, Simplify } 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 { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" import { Extend, StaticMembers } from "./util" @@ -135,6 +136,7 @@ extends TraitExpressionBuilder { [ ...this.expressionTraits, + DejsonifiableZodSchemaObject, ], ) } diff --git a/src/shapes/JsonifiableZodSchemaClass.ts b/src/shapes/JsonifiableZodSchemaClass.ts index 0f15bd2..36abdfc 100644 --- a/src/shapes/JsonifiableZodSchemaClass.ts +++ b/src/shapes/JsonifiableZodSchemaClass.ts @@ -6,9 +6,6 @@ import { z } from "zod" export type JsonifiableZodSchemaClass< Instance extends Values, - Values extends object, - JsonifiedValues extends JsonifiableObject, - JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, @@ -16,28 +13,28 @@ export type JsonifiableZodSchemaClass< DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, + + Values extends object, + JsonifiedValues extends JsonifiableObject, > = ( Class & JsonifiableZodSchemaClassStatic< - Values, - JsonifiedValues, - JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall + DejsonifySchemaCatchall, + + Values, + JsonifiedValues > ) export type JsonifiableZodSchemaAbstractClass< Instance extends Values, - Values extends object, - JsonifiedValues extends JsonifiableObject, - JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, @@ -45,26 +42,26 @@ export type JsonifiableZodSchemaAbstractClass< DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, + + Values extends object, + JsonifiedValues extends JsonifiableObject, > = ( AbstractClass & JsonifiableZodSchemaClassStatic< - Values, - JsonifiedValues, - JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall + DejsonifySchemaCatchall, + + Values, + JsonifiedValues > ) export type JsonifiableZodSchemaClassStatic< - Values extends object, - JsonifiedValues extends JsonifiableObject, - JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, @@ -72,6 +69,9 @@ export type JsonifiableZodSchemaClassStatic< DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, + + Values extends object, + JsonifiedValues extends JsonifiableObject, > = { readonly jsonifySchema: z.ZodObject readonly dejsonifySchema: z.ZodObject diff --git a/src/tests.ts b/src/tests.ts index f812a71..0f80ec8 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -33,6 +33,7 @@ class Test extends newTestExp.extends implements Implements { Test.defaultValues const inst = Test.create({ id: 1n, name: "" }) console.log(inst) +Test.dejsonify({ id: 1n }) class SubTest extends Test.extend({ diff --git a/src/traits/DejsonifiableZodSchemaObject.ts b/src/traits/DejsonifiableZodSchemaObject.ts index 4ff593d..9f38dc3 100644 --- a/src/traits/DejsonifiableZodSchemaObject.ts +++ b/src/traits/DejsonifiableZodSchemaObject.ts @@ -1,11 +1,9 @@ import { trait } from "@thilawyn/traitify-ts" -import { Effect, pipe } from "effect" -import { HasRequiredKeys } from "type-fest" -import { z } from "zod" -import { ZodSchemaClass } from "../shapes/ZodSchemaClass" -import { parseZodTypeEffect } from "../util" -import { JsonifiableZodSchemaClass } from "../shapes/JsonifiableZodSchemaClass" +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 @@ -38,58 +36,87 @@ export const DejsonifiableZodSchemaObject = trait Values, JsonifiedValues >, + + values: JsonifiedValues, + params?: Partial, ) { return new this( - this.schema.parse({ ...this.defaultValues, ...values }, params) + this.dejsonifySchema.parse(values, params) ) } - // static async createPromise< - // Instance extends Values, + static async dejsonifyPromise< + Instance extends Values, - // SchemaT extends z.ZodRawShape, - // SchemaUnknownKeys extends z.UnknownKeysParam, - // SchemaCatchall extends z.ZodTypeAny, + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, - // Values extends object, - // DefaultValues extends Partial, - // >( - // this: ZodSchemaClass, + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, - // ...[values, params]: NewZodSchemaInstanceArgs< - // NewZodSchemaInstanceInput - // > - // ) { - // return new this( - // await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) - // ) - // } + Values extends object, + JsonifiedValues extends JsonifiableObject, + >( + this: JsonifiableZodSchemaClass< + Instance, - // static createEffect< - // Instance extends Values, + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, - // SchemaT extends z.ZodRawShape, - // SchemaUnknownKeys extends z.UnknownKeysParam, - // SchemaCatchall extends z.ZodTypeAny, + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, - // Values extends object, - // DefaultValues extends Partial, - // >( - // this: ZodSchemaClass, + Values, + JsonifiedValues + >, - // ...[values, params]: NewZodSchemaInstanceArgs< - // NewZodSchemaInstanceInput - // > - // ) { - // return pipe( - // parseZodTypeEffect( - // this.schema, - // { ...this.defaultValues, ...values }, - // params, - // ), + values: JsonifiedValues, + params?: Partial, + ) { + return new this( + await this.dejsonifySchema.parseAsync(values, params) + ) + } - // Effect.map(values => new this(values)), - // ) - // } + 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, + + Values extends object, + JsonifiedValues extends JsonifiableObject, + >( + this: JsonifiableZodSchemaClass< + Instance, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + Values, + JsonifiedValues + >, + + values: JsonifiedValues, + params?: Partial, + ) { + return parseZodTypeEffect(this.dejsonifySchema, values, params).pipe( + Effect.map(values => new this(values)), + ) + } }) .build() -- 2.49.1 From ed6b8c597924ac655cb882e9fea68da483b2cc30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 23 Feb 2024 21:35:22 +0100 Subject: [PATCH 066/136] Tests --- src/schema/jsonify/index.ts | 4 ++-- src/tests.ts | 37 ++++++++++--------------------------- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/src/schema/jsonify/index.ts b/src/schema/jsonify/index.ts index 753d3a3..6bff7ae 100644 --- a/src/schema/jsonify/index.ts +++ b/src/schema/jsonify/index.ts @@ -7,10 +7,10 @@ export const jsonify = { bigint: jsonifyBigIntSchema, date: jsonifyDateSchema, decimal: jsonifyDecimalSchema, -} +} as const export const dejsonify = { bigint: dejsonifyBigIntSchema, date: dejsonifyDateSchema, decimal: dejsonifyDecimalSchema, -} +} as const diff --git a/src/tests.ts b/src/tests.ts index 0f80ec8..52cc5cc 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -5,11 +5,13 @@ import { dejsonify, jsonify } from "./schema/jsonify" import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" -const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) +const exp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) .schema({ schema: z.object({ - /** Object ID */ + /** User ID */ id: z.bigint(), + + /** Username */ name: z.string(), }), @@ -27,40 +29,21 @@ const newTestExp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) .expresses(ObservableZodSchemaObject) .build() -@newTestExp.staticImplements -class Test extends newTestExp.extends implements Implements {} +@exp.staticImplements +class User extends exp.extends implements Implements {} -Test.defaultValues -const inst = Test.create({ id: 1n, name: "" }) +User.defaultValues +const inst = User.create({ id: 1n, name: "" }) console.log(inst) -Test.dejsonify({ id: 1n }) -class SubTest extends Test.extend({ +class SubTest extends User.extend({ schema: ({ schema }) => schema.extend({ prout: z.string() }), - defaultValues: defaultValues => ({ - ...defaultValues - }), + defaultValues: v => v, }) {} const subInst = await SubTest.createPromise({ name: "", prout: "" }) console.log(subInst) - -// class ChildTest extends Test {} - -// ChildTest.instantiate({ name: "" }) - -const testSchema = { schema: Test.schema } - -declare const testGenericSchema: { - schema: z.ZodObject -} - -type U = T - -interface ExtendTest extends U { - schema: z.ZodObject -} -- 2.49.1 From dce10c3b6d98f84f810fef58d5dd5e10c2d3a4ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 23 Feb 2024 22:49:52 +0100 Subject: [PATCH 067/136] JsonifiableZodSchemaObject --- src/shapes/JsonifiableZodSchemaClass.ts | 6 +- src/traits/JsonifiableZodSchemaObject.ts | 115 +++++++++++++++++++++++ 2 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 src/traits/JsonifiableZodSchemaObject.ts diff --git a/src/shapes/JsonifiableZodSchemaClass.ts b/src/shapes/JsonifiableZodSchemaClass.ts index 36abdfc..107fc5c 100644 --- a/src/shapes/JsonifiableZodSchemaClass.ts +++ b/src/shapes/JsonifiableZodSchemaClass.ts @@ -18,7 +18,7 @@ export type JsonifiableZodSchemaClass< JsonifiedValues extends JsonifiableObject, > = ( Class & - JsonifiableZodSchemaClassStatic< + JsonifiableZodSchemas< JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, @@ -47,7 +47,7 @@ export type JsonifiableZodSchemaAbstractClass< JsonifiedValues extends JsonifiableObject, > = ( AbstractClass & - JsonifiableZodSchemaClassStatic< + JsonifiableZodSchemas< JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, @@ -61,7 +61,7 @@ export type JsonifiableZodSchemaAbstractClass< > ) -export type JsonifiableZodSchemaClassStatic< +export type JsonifiableZodSchemas< JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts new file mode 100644 index 0000000..9cc7866 --- /dev/null +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -0,0 +1,115 @@ +import { trait } from "@thilawyn/traitify-ts" +import { Effect } from "effect" +import { JsonifiableObject } from "type-fest/source/jsonifiable" +import { z } from "zod" +import { JsonifiableZodSchemaClass, JsonifiableZodSchemas } from "../shapes/JsonifiableZodSchemaClass" +import { parseZodTypeEffect } from "../util" + + +export const JsonifiableZodSchemaObject = trait + .implement(Super => class JsonifiableZodSchemaObject extends Super { + jsonify< + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, + + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, + + Values extends object, + JsonifiedValues extends JsonifiableObject, + >( + this: Values & JsonifiableZodSchemas< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + Values, + JsonifiedValues + >, + + params?: Partial, + ) { + return this.jsonifySchema.parse(this, 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, + + Values extends object, + JsonifiedValues extends JsonifiableObject, + >( + this: JsonifiableZodSchemaClass< + Instance, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + Values, + JsonifiedValues + >, + + 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, + + Values extends object, + JsonifiedValues extends JsonifiableObject, + >( + this: JsonifiableZodSchemaClass< + Instance, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + Values, + JsonifiedValues + >, + + values: JsonifiedValues, + params?: Partial, + ) { + return parseZodTypeEffect(this.dejsonifySchema, values, params).pipe( + Effect.map(values => new this(values)), + ) + } + }) + .build() -- 2.49.1 From 53bd30aa7a395452b86a7f6510294ee0f9363b5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 23 Feb 2024 23:45:03 +0100 Subject: [PATCH 068/136] ZodSchemaClass work --- src/ZodSchemaClass.ts | 21 ++++++++++++++------- src/tests.ts | 1 + 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index fee8c37..7de5ed8 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -6,6 +6,7 @@ import { ZodSchemaAbstractClass } from "./shapes/ZodSchemaClass" import { DejsonifiableZodSchemaObject } from "./traits/DejsonifiableZodSchemaObject" import { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" +import { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" import { Extend, StaticMembers } from "./util" @@ -62,12 +63,8 @@ extends TraitExpressionBuilder { InstanceType & Values, ConstructorParameters > & - Simplify< - Extend<[ - StaticMembers, - StaticMembers, - ]> - > + StaticMembers & + StaticMembers ), [ @@ -128,14 +125,24 @@ extends TraitExpressionBuilder { class JsonifiableSchemas extends (this.expressionSuperclass as AbstractClass) { static readonly jsonifySchema = jsonifySchema + readonly jsonifySchema = jsonifySchema static readonly dejsonifySchema = dejsonifySchema + readonly dejsonifySchema = dejsonifySchema } return new ZodSchemaClassBuilder( - JsonifiableSchemas as unknown as Superclass & StaticMembers, + JsonifiableSchemas as unknown as ( + AbstractClass< + InstanceType & JsonifiableSchemas, + ConstructorParameters + > & + StaticMembers & + StaticMembers + ), [ ...this.expressionTraits, + JsonifiableZodSchemaObject, DejsonifiableZodSchemaObject, ], ) diff --git a/src/tests.ts b/src/tests.ts index 52cc5cc..36fbdd6 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -35,6 +35,7 @@ class User extends exp.extends implements Implements {} User.defaultValues const inst = User.create({ id: 1n, name: "" }) console.log(inst) +inst.jsonify() class SubTest extends User.extend({ -- 2.49.1 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 069/136] 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({ -- 2.49.1 From 3e8dbce5742a163668a597ee2dcb8f99a4c88b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 00:37:18 +0100 Subject: [PATCH 070/136] ZodSchemaClass fix --- src/ZodSchemaClass.ts | 4 ++-- src/shapes/JsonifiableZodSchemaClass.ts | 14 +++++++------- src/shapes/ZodSchemaClass.ts | 6 +++--- src/traits/DejsonifiableZodSchemaObject.ts | 18 +++++++++--------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 1a11590..72d10c9 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -87,8 +87,6 @@ extends TraitExpressionBuilder { Values extends object, DefaultValues extends Partial, - JsonifiedValues extends JsonifiableObject, - JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, @@ -96,6 +94,8 @@ extends TraitExpressionBuilder { DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, + + JsonifiedValues extends JsonifiableObject, >( this: ZodSchemaClassBuilder< Superclass | ZodSchemaAbstractClass, diff --git a/src/shapes/JsonifiableZodSchemaClass.ts b/src/shapes/JsonifiableZodSchemaClass.ts index 107fc5c..2f35971 100644 --- a/src/shapes/JsonifiableZodSchemaClass.ts +++ b/src/shapes/JsonifiableZodSchemaClass.ts @@ -14,8 +14,8 @@ export type JsonifiableZodSchemaClass< DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - Values extends object, JsonifiedValues extends JsonifiableObject, + Values extends object, > = ( Class & JsonifiableZodSchemas< @@ -27,8 +27,8 @@ export type JsonifiableZodSchemaClass< DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, - Values, - JsonifiedValues + JsonifiedValues, + Values > ) @@ -43,8 +43,8 @@ export type JsonifiableZodSchemaAbstractClass< DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - Values extends object, JsonifiedValues extends JsonifiableObject, + Values extends object, > = ( AbstractClass & JsonifiableZodSchemas< @@ -56,8 +56,8 @@ export type JsonifiableZodSchemaAbstractClass< DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, - Values, - JsonifiedValues + JsonifiedValues, + Values > ) @@ -70,8 +70,8 @@ export type JsonifiableZodSchemas< DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - Values extends object, 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 index 682e3b2..0b33a2d 100644 --- a/src/shapes/ZodSchemaClass.ts +++ b/src/shapes/ZodSchemaClass.ts @@ -13,7 +13,7 @@ export type ZodSchemaClass< DefaultValues extends Partial, > = ( Class & - ZodSchemaClassStatic + ZodSchemas ) export type ZodSchemaAbstractClass< @@ -27,10 +27,10 @@ export type ZodSchemaAbstractClass< DefaultValues extends Partial, > = ( AbstractClass & - ZodSchemaClassStatic + ZodSchemas ) -export type ZodSchemaClassStatic< +export type ZodSchemas< SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, diff --git a/src/traits/DejsonifiableZodSchemaObject.ts b/src/traits/DejsonifiableZodSchemaObject.ts index 9f38dc3..cda0026 100644 --- a/src/traits/DejsonifiableZodSchemaObject.ts +++ b/src/traits/DejsonifiableZodSchemaObject.ts @@ -19,8 +19,8 @@ export const DejsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - Values extends object, JsonifiedValues extends JsonifiableObject, + Values extends object, >( this: JsonifiableZodSchemaClass< Instance, @@ -33,8 +33,8 @@ export const DejsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, - Values, - JsonifiedValues + JsonifiedValues, + Values >, values: JsonifiedValues, @@ -56,8 +56,8 @@ export const DejsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - Values extends object, JsonifiedValues extends JsonifiableObject, + Values extends object, >( this: JsonifiableZodSchemaClass< Instance, @@ -70,8 +70,8 @@ export const DejsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, - Values, - JsonifiedValues + JsonifiedValues, + Values >, values: JsonifiedValues, @@ -93,8 +93,8 @@ export const DejsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - Values extends object, JsonifiedValues extends JsonifiableObject, + Values extends object, >( this: JsonifiableZodSchemaClass< Instance, @@ -107,8 +107,8 @@ export const DejsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, - Values, - JsonifiedValues + JsonifiedValues, + Values >, values: JsonifiedValues, -- 2.49.1 From 5009537839d3c20c92d016da2f3ce3872c962307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 00:47:56 +0100 Subject: [PATCH 071/136] Fix --- src/traits/JsonifiableZodSchemaObject.ts | 80 +----------------------- 1 file changed, 3 insertions(+), 77 deletions(-) diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts index 9cc7866..258e69f 100644 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -17,8 +17,8 @@ export const JsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - Values extends object, JsonifiedValues extends JsonifiableObject, + Values extends object, >( this: Values & JsonifiableZodSchemas< JsonifySchemaT, @@ -29,87 +29,13 @@ export const JsonifiableZodSchemaObject = trait DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, - Values, - JsonifiedValues + JsonifiedValues, + Values >, params?: Partial, ) { return this.jsonifySchema.parse(this, 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, - - Values extends object, - JsonifiedValues extends JsonifiableObject, - >( - this: JsonifiableZodSchemaClass< - Instance, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - Values, - JsonifiedValues - >, - - 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, - - Values extends object, - JsonifiedValues extends JsonifiableObject, - >( - this: JsonifiableZodSchemaClass< - Instance, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - Values, - JsonifiedValues - >, - - values: JsonifiedValues, - params?: Partial, - ) { - return parseZodTypeEffect(this.dejsonifySchema, values, params).pipe( - Effect.map(values => new this(values)), - ) - } }) .build() -- 2.49.1 From f731ed407f1e122d81b6bd10fe9208a7bcfd1698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 00:54:46 +0100 Subject: [PATCH 072/136] JsonifiableZodSchemaObject --- src/traits/JsonifiableZodSchemaObject.ts | 63 +++++++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts index 258e69f..ab0f02e 100644 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -1,8 +1,7 @@ import { trait } from "@thilawyn/traitify-ts" -import { Effect } from "effect" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" -import { JsonifiableZodSchemaClass, JsonifiableZodSchemas } from "../shapes/JsonifiableZodSchemaClass" +import { JsonifiableZodSchemas } from "../shapes/JsonifiableZodSchemaClass" import { parseZodTypeEffect } from "../util" @@ -37,5 +36,65 @@ export const JsonifiableZodSchemaObject = trait ) { return this.jsonifySchema.parse(this, params) } + + async jsonifyPromise< + 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: Values & JsonifiableZodSchemas< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + Values + >, + + params?: Partial, + ) { + return this.dejsonifySchema.parseAsync(this, params) + } + + jsonifyEffect< + 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: Values & JsonifiableZodSchemas< + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + Values + >, + + params?: Partial, + ) { + return parseZodTypeEffect(this.jsonifySchema, this, params) + } }) .build() -- 2.49.1 From 466b51aa79a7f61f765a9ed159f20e0dfbdf9363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 01:00:57 +0100 Subject: [PATCH 073/136] Legacy cleanup --- src/legacy/SchemableClass.ts | 54 ----- src/legacy/defineDefaultValues.ts | 8 - src/legacy/extendSchemableClass.ts | 95 -------- src/legacy/index.ts | 5 - .../jsonifiable/JsonifiableSchemableClass.ts | 80 ------- src/legacy/jsonifiable/dejsonifySchemable.ts | 213 ------------------ src/legacy/jsonifiable/index.ts | 4 - .../makeJsonifiableSchemableClass.ts | 134 ----------- src/legacy/jsonifiable/schema/bigint.ts | 28 --- src/legacy/jsonifiable/schema/date.ts | 28 --- src/legacy/jsonifiable/schema/decimal.ts | 33 --- src/legacy/jsonifiable/schema/index.ts | 4 - src/legacy/jsonifiable/schema/schemable.ts | 139 ------------ src/legacy/makeSchemableClass.ts | 82 ------- src/legacy/newSchemable.ts | 127 ----------- src/legacy/observable/index.ts | 1 - .../makeSchemableClassObservable.ts | 29 --- src/tests.ts | 2 +- 18 files changed, 1 insertion(+), 1065 deletions(-) delete mode 100644 src/legacy/SchemableClass.ts delete mode 100644 src/legacy/defineDefaultValues.ts delete mode 100644 src/legacy/extendSchemableClass.ts delete mode 100644 src/legacy/index.ts delete mode 100644 src/legacy/jsonifiable/JsonifiableSchemableClass.ts delete mode 100644 src/legacy/jsonifiable/dejsonifySchemable.ts delete mode 100644 src/legacy/jsonifiable/index.ts delete mode 100644 src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts delete mode 100644 src/legacy/jsonifiable/schema/bigint.ts delete mode 100644 src/legacy/jsonifiable/schema/date.ts delete mode 100644 src/legacy/jsonifiable/schema/decimal.ts delete mode 100644 src/legacy/jsonifiable/schema/index.ts delete mode 100644 src/legacy/jsonifiable/schema/schemable.ts delete mode 100644 src/legacy/makeSchemableClass.ts delete mode 100644 src/legacy/newSchemable.ts delete mode 100644 src/legacy/observable/index.ts delete mode 100644 src/legacy/observable/makeSchemableClassObservable.ts diff --git a/src/legacy/SchemableClass.ts b/src/legacy/SchemableClass.ts deleted file mode 100644 index 5716471..0000000 --- a/src/legacy/SchemableClass.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { z } from "zod" -import { Class, ClassType } from "../util" - - -export type SchemableClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, - - Type extends ClassType = "AbstractClass" -> = ( - Class< - Type, - - { - readonly schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - readonly defaultValues: DefaultValues - } & Values, - - Parameters<(values: Values) => never> - > & { - readonly schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - readonly defaultValues: DefaultValues - } -) - - -export type SchemableClassInput< - Values extends {}, - DefaultValues extends Partial, -> = { - [Key in Exclude]: Values[Key] -} & { - [Key in keyof DefaultValues]?: Key extends keyof Values - ? Values[Key] - : never -} diff --git a/src/legacy/defineDefaultValues.ts b/src/legacy/defineDefaultValues.ts deleted file mode 100644 index 634d83a..0000000 --- a/src/legacy/defineDefaultValues.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Opaque } from "type-fest" - - -export type DefinedDefaultValuesTag = "@thilawyn/schemable-class/DefinedDefaultValues" - -export function defineDefaultValues(values: T) { - return values as Opaque -} diff --git a/src/legacy/extendSchemableClass.ts b/src/legacy/extendSchemableClass.ts deleted file mode 100644 index 2c630b9..0000000 --- a/src/legacy/extendSchemableClass.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" -import { z } from "zod" -import { DefinedDefaultValuesTag, SchemableClass } from "." -import { StaticMembers } from "../util" - - -export function extendSchemableClass< - C extends SchemableClass< - ExtendSchemaT, - ExtendSchemaUnknownKeys, - ExtendSchemaCatchall, - ExtendSchemaValues, - ExtendDefaultValues - >, - - ExtendSchemaT extends z.ZodRawShape, - ExtendSchemaUnknownKeys extends z.UnknownKeysParam, - ExtendSchemaCatchall extends z.ZodTypeAny, - ExtendSchemaValues extends {}, - ExtendDefaultValues extends Partial, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - SchemaValues extends ExtendSchemaValues, - - DefaultValues extends Partial, ->( - extend: C | SchemableClass< - ExtendSchemaT, - ExtendSchemaUnknownKeys, - ExtendSchemaCatchall, - ExtendSchemaValues, - ExtendDefaultValues - >, - - props: { - schema: (props: { - schema: z.ZodObject< - ExtendSchemaT, - ExtendSchemaUnknownKeys, - ExtendSchemaCatchall, - ExtendSchemaValues, - ExtendSchemaValues - > - - shape: ExtendSchemaT - }) => z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - SchemaValues, - SchemaValues - > - - defaultValues: (defaultValues: ExtendDefaultValues) => Opaque - }, -) { - type Class = ( - C extends ConcreteClass - ? ConcreteClass - : AbstractClass - ) - - const schema = props.schema({ - schema: extend.schema, - shape: extend.schema.shape, - }) - const defaultValues = props.defaultValues(extend.defaultValues) - - return class extends extend { - static readonly schema = schema - readonly schema = schema - - static readonly defaultValues = defaultValues - readonly defaultValues = defaultValues - } as unknown as ( - Class< - Omit, "schema" | "defaultValues" | keyof ExtendSchemaValues> & - { - readonly schema: z.ZodObject, - readonly defaultValues: DefaultValues, - } & - SchemaValues, - - Parameters<(values: SchemaValues) => void> - > & - - Omit, "schema" | "defaultValues"> & - { - readonly schema: z.ZodObject, - readonly defaultValues: DefaultValues, - } - ) -} diff --git a/src/legacy/index.ts b/src/legacy/index.ts deleted file mode 100644 index 4b4c248..0000000 --- a/src/legacy/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./SchemableClass" -export * from "./defineDefaultValues" -export * from "./extendSchemableClass" -export * from "./makeSchemableClass" -export * from "./newSchemable" diff --git a/src/legacy/jsonifiable/JsonifiableSchemableClass.ts b/src/legacy/jsonifiable/JsonifiableSchemableClass.ts deleted file mode 100644 index b0612c4..0000000 --- a/src/legacy/jsonifiable/JsonifiableSchemableClass.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Effect } from "effect" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { SchemableClass } from ".." -import { Class, ClassType } from "../../util" - - -export type JsonifiableSchemableClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, - - Type extends ClassType = "AbstractClass" -> = ( - SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - Type - > & - - Class< - Type, - - { - readonly jsonifySchema: z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > - - readonly dejsonifySchema: z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > - - jsonify(): JsonifiedValues - jsonifyPromise(): Promise - jsonifyEffect(): Effect.Effect, JsonifiedValues> - }, - - any[] - > & { - readonly jsonifySchema: z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > - - readonly dejsonifySchema: z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > - } -) diff --git a/src/legacy/jsonifiable/dejsonifySchemable.ts b/src/legacy/jsonifiable/dejsonifySchemable.ts deleted file mode 100644 index b5395db..0000000 --- a/src/legacy/jsonifiable/dejsonifySchemable.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { Effect, pipe } from "effect" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { JsonifiableSchemableClass } from "." -import { parseZodTypeEffect } from "../../util" - - -export function dejsonifySchemable< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - values: JsonifiedValues, - params?: Partial, -) { - return new class_( - class_.dejsonifySchema.parse(values, params) - ) as InstanceType -} - - -export async function dejsonifySchemablePromise< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - values: JsonifiedValues, - params?: Partial, -) { - return new class_( - await class_.dejsonifySchema.parseAsync(values, params) - ) as InstanceType -} - - -export function dejsonifySchemableEffect< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - values: JsonifiedValues, - params?: Partial, -) { - return pipe( - parseZodTypeEffect(class_.dejsonifySchema, values, params), - Effect.map(values => new class_(values) as InstanceType), - ) -} diff --git a/src/legacy/jsonifiable/index.ts b/src/legacy/jsonifiable/index.ts deleted file mode 100644 index 74e7d23..0000000 --- a/src/legacy/jsonifiable/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./JsonifiableSchemableClass" -export * from "./dejsonifySchemable" -export * from "./makeJsonifiableSchemableClass" -export * from "./schema" diff --git a/src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts b/src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts deleted file mode 100644 index d8b47ff..0000000 --- a/src/legacy/jsonifiable/makeJsonifiableSchemableClass.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { Effect } from "effect" -import { AbstractClass, Class as ConcreteClass } from "type-fest" -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { SchemableClass } from ".." -import { StaticMembers, parseZodTypeEffect } from "../../util" - - -export function makeJsonifiableSchemableClass< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, ->( - extend: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues - >, - - props: { - jsonifySchema: (props: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - shape: SchemaT - }) => z.ZodObject< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - JsonifiedValues, - Values - > - - dejsonifySchema: (props: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - shape: SchemaT - }) => z.ZodObject< - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - Values, - JsonifiedValues - > - }, -) { - type Class = ( - C extends ConcreteClass - ? ConcreteClass - : AbstractClass - ) - - const jsonifySchema = props.jsonifySchema({ - schema: extend.schema, - shape: extend.schema.shape, - }) - - const dejsonifySchema = props.dejsonifySchema({ - schema: extend.schema, - shape: extend.schema.shape, - }) - - return class extends extend { - static readonly jsonifySchema = jsonifySchema - readonly jsonifySchema = jsonifySchema - - static readonly dejsonifySchema = dejsonifySchema - readonly dejsonifySchema = dejsonifySchema - - jsonify() { - return this.jsonifySchema.parse(this) - } - - jsonifyPromise() { - return this.jsonifySchema.parseAsync(this) - } - - jsonifyEffect() { - return parseZodTypeEffect(this.jsonifySchema, this) - } - } as unknown as ( - Class< - InstanceType & { - readonly jsonifySchema: z.ZodObject, - readonly dejsonifySchema: z.ZodObject, - - jsonify(): JsonifiedValues - jsonifyPromise(): Promise - jsonifyEffect(): Effect.Effect, JsonifiedValues> - }, - - ConstructorParameters - > & - - StaticMembers & { - readonly jsonifySchema: z.ZodObject, - readonly dejsonifySchema: z.ZodObject, - } - ) -} diff --git a/src/legacy/jsonifiable/schema/bigint.ts b/src/legacy/jsonifiable/schema/bigint.ts deleted file mode 100644 index aece7e4..0000000 --- a/src/legacy/jsonifiable/schema/bigint.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Opaque } from "type-fest" -import { z } from "zod" -import { identity } from "../../../util" - - -export type JsonifiedBigInt = Opaque - - -export function jsonifyBigIntSchema(schema: S) { - return schema.transform(v => v.toString() as JsonifiedBigInt) -} - -export function dejsonifyBigIntSchema(schema: S) { - return z - .custom(identity) - .pipe(z - .string() - .transform(v => { - try { - return BigInt(v) - } - catch (e) { - return v - } - }) - .pipe(schema) - ) -} diff --git a/src/legacy/jsonifiable/schema/date.ts b/src/legacy/jsonifiable/schema/date.ts deleted file mode 100644 index eddc7eb..0000000 --- a/src/legacy/jsonifiable/schema/date.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Opaque } from "type-fest" -import { z } from "zod" -import { identity } from "../../../util" - - -export type JsonifiedDate = Opaque - - -export function jsonifyDateSchema(schema: S) { - return schema.transform(v => v.toString() as JsonifiedDate) -} - -export function dejsonifyDateSchema(schema: S) { - return z - .custom(identity) - .pipe(z - .string() - .transform(v => { - try { - return new Date(v) - } - catch (e) { - return v - } - }) - .pipe(schema) - ) -} diff --git a/src/legacy/jsonifiable/schema/decimal.ts b/src/legacy/jsonifiable/schema/decimal.ts deleted file mode 100644 index ea7f4ee..0000000 --- a/src/legacy/jsonifiable/schema/decimal.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Decimal } from "decimal.js" -import { Opaque } from "type-fest" -import { z } from "zod" -import { identity } from "../../../util" - - -export type JsonifiedDecimal = Opaque - - -export function jsonifyDecimalSchema< - S extends z.ZodType ->(schema: S) { - return schema.transform(v => v.toJSON() as JsonifiedDecimal) -} - -export function dejsonifyDecimalSchema< - S extends z.ZodType ->(schema: S) { - return z - .custom(identity) - .pipe(z - .string() - .transform(v => { - try { - return new Decimal(v) - } - catch (e) { - return v - } - }) - .pipe(schema) - ) -} diff --git a/src/legacy/jsonifiable/schema/index.ts b/src/legacy/jsonifiable/schema/index.ts deleted file mode 100644 index 08ecef8..0000000 --- a/src/legacy/jsonifiable/schema/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./bigint" -export * from "./date" -export * from "./decimal" -export * from "./schemable" diff --git a/src/legacy/jsonifiable/schema/schemable.ts b/src/legacy/jsonifiable/schema/schemable.ts deleted file mode 100644 index b0a72bc..0000000 --- a/src/legacy/jsonifiable/schema/schemable.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { JsonifiableObject } from "type-fest/source/jsonifiable" -import { z } from "zod" -import { JsonifiableSchemableClass } from ".." - - -export function jsonifySchemableSchema< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, - - S extends z.ZodType, z.ZodTypeDef, InstanceType>, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - schema: S, -) { - return schema.pipe(class_.jsonifySchema) -} - - -export function dejsonifySchemableSchema< - C extends JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues 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, - - S extends z.ZodType, z.ZodTypeDef, InstanceType>, ->( - class_: C | JsonifiableSchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - - Values, - DefaultValues, - - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - - "Class" - >, - - schema: S, -) { - return class_.dejsonifySchema.transform(v => new class_(v)).pipe(schema) -} diff --git a/src/legacy/makeSchemableClass.ts b/src/legacy/makeSchemableClass.ts deleted file mode 100644 index 5962882..0000000 --- a/src/legacy/makeSchemableClass.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest" -import { z } from "zod" -import { DefinedDefaultValuesTag } from "." -import { StaticMembers } from "../util" - - -export function makeSchemableClassFrom< - C extends AbstractClass<{ - schema?: never - defaultValues?: never - }, []> & { - schema?: never - defaultValues?: never - }, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - extend: C, - - { schema, defaultValues }: { - schema: z.ZodObject - defaultValues: Opaque - }, -) { - type Class = ( - C extends ConcreteClass - ? ConcreteClass - : AbstractClass - ) - - return class extends (extend as unknown as ConcreteClass) { - static readonly schema = schema - readonly schema = schema - - static readonly defaultValues = defaultValues - readonly defaultValues = defaultValues - - constructor(values: Values) { - super() - Object.assign(this, values) - } - } as unknown as ( - Class< - InstanceType & - { - readonly schema: z.ZodObject, - readonly defaultValues: DefaultValues, - } & - Values, - - Parameters<(values: Values) => void> - > & - - StaticMembers & - { - readonly schema: z.ZodObject, - readonly defaultValues: DefaultValues, - } - ) -} - - -export function makeSchemableClass< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - props: { - schema: z.ZodObject - defaultValues: Opaque - } -) { - return makeSchemableClassFrom(Object, props) -} diff --git a/src/legacy/newSchemable.ts b/src/legacy/newSchemable.ts deleted file mode 100644 index 628b632..0000000 --- a/src/legacy/newSchemable.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { Effect, pipe } from "effect" -import { HasRequiredKeys } from "type-fest" -import { z } from "zod" -import { SchemableClass, SchemableClassInput } from "." -import { parseZodTypeEffect } from "../util" - - -type ParamsArgs = [] | [params: Partial] - -type NewSchemableArgs = - HasRequiredKeys extends true - ? [values: Input, ...args: ParamsArgs] - : [] | [values: Input, ...args: ParamsArgs] - - -export function newSchemable< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - class_: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - ...[values, params]: NewSchemableArgs< - SchemableClassInput - > -) { - return new class_( - class_.schema.parse({ ...class_.defaultValues, ...values }, params) - ) as InstanceType -} - - -export async function newSchemablePromise< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - class_: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - ...[values, params]: NewSchemableArgs< - SchemableClassInput - > -) { - return new class_( - await class_.schema.parseAsync({ ...class_.defaultValues, ...values }, params) - ) as InstanceType -} - - -export function newSchemableEffect< - C extends SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - class_: C | SchemableClass< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - DefaultValues, - "Class" - >, - - ...[values, params]: NewSchemableArgs< - SchemableClassInput - > -) { - return pipe( - parseZodTypeEffect( - class_.schema, - { ...class_.defaultValues, ...values }, - params, - ), - - Effect.map(values => new class_(values) as InstanceType), - ) -} diff --git a/src/legacy/observable/index.ts b/src/legacy/observable/index.ts deleted file mode 100644 index 6f219a5..0000000 --- a/src/legacy/observable/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./makeSchemableClassObservable" diff --git a/src/legacy/observable/makeSchemableClassObservable.ts b/src/legacy/observable/makeSchemableClassObservable.ts deleted file mode 100644 index 7b5fcb7..0000000 --- a/src/legacy/observable/makeSchemableClassObservable.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { mapValues } from "lodash-es" -import { makeObservable, observable } from "mobx" -import { AbstractConstructor } from "type-fest" -import { z } from "zod" -import { SchemableClass } from ".." - - -export function makeSchemableClassObservable< - C extends SchemableClass, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends {}, - DefaultValues extends Partial, ->( - extend: C | SchemableClass -) { - return class extends (extend as AbstractConstructor) { - constructor(...args: any[]) { - super(...args) - - makeObservable(this, - mapValues(this.schema.shape, () => observable) - ) - } - } as unknown as C -} diff --git a/src/tests.ts b/src/tests.ts index 4a695f3..c2860d7 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -35,7 +35,7 @@ class User extends exp.extends implements Implements {} User.defaultValues const inst = User.create({ id: 1n, name: "" }) console.log(inst) -const jsonifiedUser = inst.jsonify() +const jsonifiedUser = await inst.jsonifyPromise() class SubTest extends User.extend({ -- 2.49.1 From eb071bfe86e82e427ba32214160a141a71749cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 02:21:42 +0100 Subject: [PATCH 074/136] ZodSchemaClassBuilder.extends --- src/ZodSchemaClass.ts | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 72d10c9..50fb98a 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,4 +1,4 @@ -import { Trait, TraitExpressionBuilder } from "@thilawyn/traitify-ts" +import { Trait, TraitExpression, TraitExpressionBuilder } from "@thilawyn/traitify-ts" import { AbstractClass } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" @@ -15,20 +15,18 @@ export class ZodSchemaClassBuilder< const Traits extends Trait[], > extends TraitExpressionBuilder { - // extends< - // This extends ZodSchemaClassBuilder< - // typeof TraitExpression.NullSuperclass, // Ensures `extends` can only be called when the expression does not have a superclass - // Traits - // >, - // Super extends AbstractClass, - // >( - // this: This, - // superclass: Super, - // ) { - // return new ZodSchemaClassBuilder( - // this.expressionBuilder.extends(superclass) - // ) - // } + extends< + Super extends AbstractClass + >( + // \/ Ensures `extends` can only be called once at the beginning + this: ZodSchemaClassBuilder, + superclass: Super, + ) { + return new ZodSchemaClassBuilder( + superclass, + this.expressionTraits, + ) + } schema< Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, -- 2.49.1 From 9e18a4a0ee3a83e925bb486014a05f284194a42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 03:03:43 +0100 Subject: [PATCH 075/136] Generic tests --- src/tests.ts | 29 ++++++++++++++++++++++-- src/traits/JsonifiableZodSchemaObject.ts | 2 +- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index c2860d7..1d32cae 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -3,6 +3,7 @@ import { z } from "zod" import { ZodSchemaClassBuilder } from "./ZodSchemaClass" import { dejsonify, jsonify } from "./schema/jsonify" import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" +import { AbstractClass, Class } from "type-fest" const exp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) @@ -34,7 +35,7 @@ class User extends exp.extends implements Implements {} User.defaultValues const inst = User.create({ id: 1n, name: "" }) -console.log(inst) +// console.log(inst) const jsonifiedUser = await inst.jsonifyPromise() @@ -47,4 +48,28 @@ class SubTest extends User.extend({ }) {} const subInst = await SubTest.createPromise({ name: "", prout: "" }) -console.log(subInst) +// console.log(subInst) + + +class BaseClass { + declare ["constructor"]: typeof BaseClass + + static readonly issou = "gneugneu" + + otherMethod() { + return "prout" as const + } + + method( + this: Omit & { ["constructor"]: Class } + ) { + this.otherMethod() + return new this.constructor() + } +} + +class Superclass extends BaseClass { + declare ["constructor"]: typeof Superclass +} + +console.log(new Superclass().method()) diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts index ab0f02e..2ed27fe 100644 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -64,7 +64,7 @@ export const JsonifiableZodSchemaObject = trait params?: Partial, ) { - return this.dejsonifySchema.parseAsync(this, params) + return this.jsonifySchema.parseAsync(this, params) } jsonifyEffect< -- 2.49.1 From 7da3d50bcc8dd173d8fc52d2c792643974728102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 04:10:01 +0100 Subject: [PATCH 076/136] Box tests --- src/tests.ts | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index 1d32cae..df65161 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -51,25 +51,28 @@ const subInst = await SubTest.createPromise({ name: "", prout: "" }) // console.log(subInst) -class BaseClass { - declare ["constructor"]: typeof BaseClass - - static readonly issou = "gneugneu" +class Box { + declare ["constructor"]: typeof Box + constructor(public value: T) {} otherMethod() { return "prout" as const } - method( - this: Omit & { ["constructor"]: Class } + method< + C extends typeof Box & Class, + I extends Box + >( + // this: Omit, "constructor"> & { ["constructor"]: Class } + this: { ["constructor"]: C } ) { - this.otherMethod() - return new this.constructor() + // this.otherMethod() + return new this.constructor(69) } } -class Superclass extends BaseClass { - declare ["constructor"]: typeof Superclass +class SuperBox extends Box { + declare ["constructor"]: typeof SuperBox } console.log(new Superclass().method()) -- 2.49.1 From 9a9b0edf5bce5295de6c4c28324e8fa89405a15b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 05:27:17 +0100 Subject: [PATCH 077/136] Tests --- src/tests.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index df65161..9471198 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -59,20 +59,24 @@ class Box { return "prout" as const } - method< - C extends typeof Box & Class, - I extends Box + newBox< + C extends Class>, + I extends Box, + T, >( // this: Omit, "constructor"> & { ["constructor"]: Class } - this: { ["constructor"]: C } + this: { ["constructor"]: C | Class> }, + value: T, ) { // this.otherMethod() - return new this.constructor(69) + return new this.constructor(value) } } +class UnrelatedClass {} + class SuperBox extends Box { declare ["constructor"]: typeof SuperBox } -console.log(new Superclass().method()) +const value = new SuperBox(69).newBox(69) -- 2.49.1 From ac5e6e444e1f67b4afdc465ad297c8703cdb0924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 05:48:07 +0100 Subject: [PATCH 078/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 53 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 50fb98a..70d1be3 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,5 +1,5 @@ import { Trait, TraitExpression, TraitExpressionBuilder } from "@thilawyn/traitify-ts" -import { AbstractClass } from "type-fest" +import { AbstractClass, IsEqual } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { ZodSchemaAbstractClass } from "./shapes/ZodSchemaClass" @@ -10,6 +10,38 @@ import { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" import { StaticMembers } from "./util" +type SpreadSupertraits = ( + Traits extends [ + infer El extends Trait, + ...infer Rest, + ] + ? [ + ...Trait.Supertraits, + El, + ...SpreadSupertraits, + ] + : [] +) + +type TraitsUniq = ( + Traits extends [ + ...infer Rest, + infer El extends Trait, + ] + ? IsTraitInTupleFromRight extends true + ? TraitsUniq + : [...TraitsUniq, El] + : [] +) +type IsTraitInTupleFromRight = ( + Traits extends [...infer Rest, infer El] + ? IsEqual extends true + ? true + : IsTraitInTupleFromRight + : false +) + + export class ZodSchemaClassBuilder< Superclass extends AbstractClass, const Traits extends Trait[], @@ -28,6 +60,25 @@ extends TraitExpressionBuilder { ) } + expresses< + const T extends Trait< + TraitExpression< + typeof TraitExpression.NullSuperclass, + Trait[] + >, + any, + any, + any + >[] + >( + ...traits: T + ): TraitExpressionBuilder< + Superclass, + TraitsUniq<[...Traits, ...SpreadSupertraits]> + > { + return super.expresses(...traits) + } + schema< Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, -- 2.49.1 From aa15e053a7f61f053aeea68c44a3ec41a6b1d7a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 23:11:24 +0100 Subject: [PATCH 079/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 85 +++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 56 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 70d1be3..b53c7a7 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -1,5 +1,5 @@ import { Trait, TraitExpression, TraitExpressionBuilder } from "@thilawyn/traitify-ts" -import { AbstractClass, IsEqual } from "type-fest" +import { AbstractClass } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { ZodSchemaAbstractClass } from "./shapes/ZodSchemaClass" @@ -10,43 +10,13 @@ import { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" import { StaticMembers } from "./util" -type SpreadSupertraits = ( - Traits extends [ - infer El extends Trait, - ...infer Rest, - ] - ? [ - ...Trait.Supertraits, - El, - ...SpreadSupertraits, - ] - : [] -) - -type TraitsUniq = ( - Traits extends [ - ...infer Rest, - infer El extends Trait, - ] - ? IsTraitInTupleFromRight extends true - ? TraitsUniq - : [...TraitsUniq, El] - : [] -) -type IsTraitInTupleFromRight = ( - Traits extends [...infer Rest, infer El] - ? IsEqual extends true - ? true - : IsTraitInTupleFromRight - : false -) - - export class ZodSchemaClassBuilder< Superclass extends AbstractClass, - const Traits extends Trait[], + const Traits extends readonly Trait[], > extends TraitExpressionBuilder { + declare ["constructor"]: typeof ZodSchemaClassBuilder + extends< Super extends AbstractClass >( @@ -54,31 +24,12 @@ extends TraitExpressionBuilder { this: ZodSchemaClassBuilder, superclass: Super, ) { - return new ZodSchemaClassBuilder( + return new this.constructor( superclass, this.expressionTraits, ) } - expresses< - const T extends Trait< - TraitExpression< - typeof TraitExpression.NullSuperclass, - Trait[] - >, - any, - any, - any - >[] - >( - ...traits: T - ): TraitExpressionBuilder< - Superclass, - TraitsUniq<[...Traits, ...SpreadSupertraits]> - > { - return super.expresses(...traits) - } - schema< Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, @@ -106,7 +57,7 @@ extends TraitExpressionBuilder { } } - return new ZodSchemaClassBuilder( + return new this.constructor( Schemas as unknown as ( AbstractClass< InstanceType & Values, @@ -171,7 +122,7 @@ extends TraitExpressionBuilder { readonly dejsonifySchema = dejsonifySchema } - return new ZodSchemaClassBuilder( + return new this.constructor( JsonifiableSchemas as unknown as ( AbstractClass< InstanceType & JsonifiableSchemas, @@ -191,3 +142,25 @@ extends TraitExpressionBuilder { ) } } + +export interface ZodSchemaClassBuilder< + Superclass extends AbstractClass, + Traits extends readonly Trait[], +> { + expresses< + const T extends readonly Trait< + TraitExpression< + typeof TraitExpression.NullSuperclass, + readonly Trait[] + >, + any, + any, + any + >[] + >( + ...traits: T + ): ZodSchemaClassBuilder< + Superclass, + TraitExpressionBuilder.ExpressesReturnTypeTraits + > +} -- 2.49.1 From 957cfdf6b8f60362d77fcfa50465bc8886f93e47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 23:25:50 +0100 Subject: [PATCH 080/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 21 ++++++++------------- src/tests.ts | 1 + 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index b53c7a7..1bc86c4 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -17,19 +17,6 @@ export class ZodSchemaClassBuilder< extends TraitExpressionBuilder { declare ["constructor"]: typeof ZodSchemaClassBuilder - extends< - Super extends AbstractClass - >( - // \/ Ensures `extends` can only be called once at the beginning - this: ZodSchemaClassBuilder, - superclass: Super, - ) { - return new this.constructor( - superclass, - this.expressionTraits, - ) - } - schema< Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, @@ -147,6 +134,14 @@ export interface ZodSchemaClassBuilder< Superclass extends AbstractClass, Traits extends readonly Trait[], > { + extends< + Super extends AbstractClass + >( + // \/ Ensures `extends` can only be called once at the beginning + this: ZodSchemaClassBuilder, + superclass: Super, + ): InstanceType> + expresses< const T extends readonly Trait< TraitExpression< diff --git a/src/tests.ts b/src/tests.ts index 9471198..ac09859 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -7,6 +7,7 @@ import { AbstractClass, Class } from "type-fest" const exp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) + .extends(class {}) .schema({ schema: z.object({ /** User ID */ -- 2.49.1 From 4672a7e0b8b296da0f49349080761b983f7f8e71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 23:37:42 +0100 Subject: [PATCH 081/136] ZodSchemaClassBuilder work --- src/ZodSchemaClass.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/ZodSchemaClass.ts b/src/ZodSchemaClass.ts index 1bc86c4..bb9e065 100644 --- a/src/ZodSchemaClass.ts +++ b/src/ZodSchemaClass.ts @@ -140,7 +140,7 @@ export interface ZodSchemaClassBuilder< // \/ Ensures `extends` can only be called once at the beginning this: ZodSchemaClassBuilder, superclass: Super, - ): InstanceType> + ): ZodSchemaClassBuilder expresses< const T extends readonly Trait< @@ -158,4 +158,21 @@ export interface ZodSchemaClassBuilder< Superclass, TraitExpressionBuilder.ExpressesReturnTypeTraits > + + expressesFirst< + const T extends readonly Trait< + TraitExpression< + typeof TraitExpression.NullSuperclass, + readonly Trait[] + >, + any, + any, + any + >[] + >( + ...traits: T + ): ZodSchemaClassBuilder< + Superclass, + TraitExpressionBuilder.ExpressesFirstReturnTypeTraits + > } -- 2.49.1 From af279116bc71ab573ab0e6001b8daab34782b529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 23:43:51 +0100 Subject: [PATCH 082/136] Dependencies upgrade --- bun.lockb | Bin 160492 -> 160492 bytes package.json | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index 31a1b1655f3add0bde014d20776b3662a481f3f6..cdde7074cb6b11106cb2b1703bb122a1cf56edd4 100755 GIT binary patch delta 271 zcmV+q0r39p}RFTfdMm@DYgMk0W-IEwgD+VmvT!2Ah*Eu0TlrhF)ws-VQF+} VW_c}ib1g6~F)lGNx9Rl(1AU7HfbReR delta 273 zcmV+s0q*|n%|ZXvo)h{DUd?)rPo=Y zE;u}cU7)vJpaDr00Wg=RwE=+vGM6c~0Zjoiw|BMyDL$7HKmsAR!Sn$X0TeJVbaG*7 XbZKUJEp&4&FfK7JF)+93^#KEYHoA61 diff --git a/package.json b/package.json index 6cc1892..28497bd 100644 --- a/package.json +++ b/package.json @@ -48,12 +48,12 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.10", + "@thilawyn/traitify-ts": "^0.1.11", "decimal.js": "^10.4.3", "effect": "^2.4.0", "lodash-es": "^4.17.21", "mobx": "^6.12.0", - "type-fest": "^4.10.2", + "type-fest": "^4.10.3", "zod": "^3.22.4" }, "devDependencies": { -- 2.49.1 From 997ea4a95b4c062aaf73600ac576e39bcaaf2c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 23:48:09 +0100 Subject: [PATCH 083/136] ZodSchemaClassBuilder --- .../ZodSchemaClassBuilder.ts} | 15 +++-- src/tests.ts | 56 +++++++++---------- 2 files changed, 36 insertions(+), 35 deletions(-) rename src/{ZodSchemaClass.ts => builders/ZodSchemaClassBuilder.ts} (92%) diff --git a/src/ZodSchemaClass.ts b/src/builders/ZodSchemaClassBuilder.ts similarity index 92% rename from src/ZodSchemaClass.ts rename to src/builders/ZodSchemaClassBuilder.ts index bb9e065..75b85f1 100644 --- a/src/ZodSchemaClass.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -2,12 +2,12 @@ import { Trait, TraitExpression, TraitExpressionBuilder } from "@thilawyn/traiti 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 { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" -import { InstantiableZodSchemaObject } from "./traits/InstantiableZodSchemaObject" -import { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" -import { StaticMembers } from "./util" +import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" +import { DejsonifiableZodSchemaObject } from "../traits/DejsonifiableZodSchemaObject" +import { ExtendableZodSchemaObject } from "../traits/ExtendableZodSchemaObject" +import { InstantiableZodSchemaObject } from "../traits/InstantiableZodSchemaObject" +import { JsonifiableZodSchemaObject } from "../traits/JsonifiableZodSchemaObject" +import { StaticMembers } from "../util" export class ZodSchemaClassBuilder< @@ -176,3 +176,6 @@ export interface ZodSchemaClassBuilder< TraitExpressionBuilder.ExpressesFirstReturnTypeTraits > } + + +export const zodSchemaClass = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) diff --git a/src/tests.ts b/src/tests.ts index ac09859..8183320 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,13 +1,11 @@ -import { Implements, TraitExpression } from "@thilawyn/traitify-ts" +import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" -import { ZodSchemaClassBuilder } from "./ZodSchemaClass" +import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" import { dejsonify, jsonify } from "./schema/jsonify" import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" -import { AbstractClass, Class } from "type-fest" -const exp = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) - .extends(class {}) +const exp = zodSchemaClass .schema({ schema: z.object({ /** User ID */ @@ -52,32 +50,32 @@ const subInst = await SubTest.createPromise({ name: "", prout: "" }) // console.log(subInst) -class Box { - declare ["constructor"]: typeof Box - constructor(public value: T) {} +// class Box { +// declare ["constructor"]: typeof Box +// constructor(public value: T) {} - otherMethod() { - return "prout" as const - } +// otherMethod() { +// return "prout" as const +// } - newBox< - C extends Class>, - I extends Box, - T, - >( - // this: Omit, "constructor"> & { ["constructor"]: Class } - this: { ["constructor"]: C | Class> }, - value: T, - ) { - // this.otherMethod() - return new this.constructor(value) - } -} +// newBox< +// C extends Class>, +// I extends Box, +// T, +// >( +// // this: Omit, "constructor"> & { ["constructor"]: Class } +// this: { ["constructor"]: C | Class> }, +// value: T, +// ) { +// // this.otherMethod() +// return new this.constructor(value) +// } +// } -class UnrelatedClass {} +// class UnrelatedClass {} -class SuperBox extends Box { - declare ["constructor"]: typeof SuperBox -} +// class SuperBox extends Box { +// declare ["constructor"]: typeof SuperBox +// } -const value = new SuperBox(69).newBox(69) +// const value = new SuperBox(69).newBox(69) -- 2.49.1 From 34ae4b9375124bbf86a2b7ccc7077e9e030f3715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 03:35:01 +0100 Subject: [PATCH 084/136] Dependencies upgrade --- bun.lockb | Bin 160492 -> 160492 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index cdde7074cb6b11106cb2b1703bb122a1cf56edd4..0bb321a16500ade34cedbc5d29e0fa34b38cb2a1 100755 GIT binary patch delta 163 zcmV;U09^m<6v#=a(gFr36Mi7eSZM#TUC delta 163 zcmV;U09^m< Date: Sun, 25 Feb 2024 04:32:09 +0100 Subject: [PATCH 085/136] ZodSchemaClassExtender --- src/builders/ZodSchemaClassBuilder.ts | 18 ++++---- src/builders/ZodSchemaClassExtender.ts | 59 ++++++++++++++++++++++++++ src/util/extend.ts | 8 ++-- 3 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 src/builders/ZodSchemaClassExtender.ts diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index 75b85f1..fe12b66 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -18,7 +18,7 @@ extends TraitExpressionBuilder { declare ["constructor"]: typeof ZodSchemaClassBuilder schema< - Superclass extends AbstractClass & { schema?: never, defaultValues?: never }, + Super extends AbstractClass & { schema?: never, defaultValues?: never }, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -27,7 +27,7 @@ extends TraitExpressionBuilder { Values extends object, DefaultValues extends Partial, >( - this: ZodSchemaClassBuilder, + this: ZodSchemaClassBuilder, { schema, defaultValues }: { schema: z.ZodObject @@ -47,10 +47,10 @@ extends TraitExpressionBuilder { return new this.constructor( Schemas as unknown as ( AbstractClass< - InstanceType & Values, + InstanceType & Values, ConstructorParameters > & - StaticMembers & + StaticMembers & StaticMembers ), @@ -63,7 +63,7 @@ extends TraitExpressionBuilder { } jsonifiable< - Superclass extends ZodSchemaAbstractClass + Super extends ZodSchemaAbstractClass & { jsonifySchema?: never, dejsonifySchema?: never }, Instance extends Values, @@ -85,7 +85,7 @@ extends TraitExpressionBuilder { JsonifiedValues extends JsonifiableObject, >( this: ZodSchemaClassBuilder< - Superclass | ZodSchemaAbstractClass, + Super | ZodSchemaAbstractClass, Traits >, @@ -112,12 +112,12 @@ extends TraitExpressionBuilder { return new this.constructor( JsonifiableSchemas as unknown as ( AbstractClass< - InstanceType & JsonifiableSchemas, + Instance & JsonifiableSchemas, - // TODO: for some reason, ConstructorParameters does not work here. Maybe try to find a fix? + // TODO: for some reason, ConstructorParameters does not work here. Maybe try to find a fix? ConstructorParameters> > & - StaticMembers & + StaticMembers & StaticMembers ), diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts new file mode 100644 index 0000000..d365476 --- /dev/null +++ b/src/builders/ZodSchemaClassExtender.ts @@ -0,0 +1,59 @@ +import { AbstractClass } from "type-fest" +import { z } from "zod" +import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" +import { Extend, StaticMembers } from "../util" + + +export class ZodSchemaClassExtender> { + declare ["constructor"]: typeof ZodSchemaClassExtender + + constructor(readonly superclass: Superclass) {} + + + schema< + Super extends ZodSchemaAbstractClass, + SuperInstance extends SuperValues, + + 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 + >, + + 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 unknown as AbstractClass< + Extend<[SuperInstance, Schemas]>, + [values: Values] + > & + Extend<[ + StaticMembers, + StaticMembers, + ]> + ) + } +} diff --git a/src/util/extend.ts b/src/util/extend.ts index baa104d..5cab210 100644 --- a/src/util/extend.ts +++ b/src/util/extend.ts @@ -6,18 +6,18 @@ export type CommonKeys = Extract export type Extend = ( - T extends [ + T extends readonly [ infer Super, infer Self, - ...infer Rest extends object[], + ...infer Rest extends readonly object[], ] ? Pick> extends Pick> - ? Extend<[ + ? Extend> & Self, ...Rest, ]> : never - : T extends [infer Self] + : T extends readonly [infer Self] ? Self : {} ) -- 2.49.1 From bf429fc63b41f8d3835352d5b1e97326443f62ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 04:45:58 +0100 Subject: [PATCH 086/136] ExtendableZodSchemaObject --- src/builders/ZodSchemaClassExtender.ts | 5 +++ src/tests.ts | 21 +++++++--- src/traits/ExtendableZodSchemaObject.ts | 52 +++---------------------- 3 files changed, 25 insertions(+), 53 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index d365476..24331a8 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -56,4 +56,9 @@ export class ZodSchemaClassExtender> { ]> ) } + + + build() { + return this.superclass + } } diff --git a/src/tests.ts b/src/tests.ts index 8183320..dd2cecd 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -38,13 +38,22 @@ const inst = User.create({ id: 1n, name: "" }) const jsonifiedUser = await inst.jsonifyPromise() -class SubTest extends User.extend({ - schema: ({ schema }) => schema.extend({ - prout: z.string() - }), +const extended = User.extend() + .schema({ + schema: s => s.extend({ + name: z.literal("Admin") + }), + defaultValues: v => v, + }) - defaultValues: v => v, -}) {} + +class SubTest extends User.extend() + .schema({ + schema: s => s.extend({}), + defaultValues: v => v, + }) + .build() +{} const subInst = await SubTest.createPromise({ name: "", prout: "" }) // console.log(subInst) diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index 06a2e79..d9803a3 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -1,58 +1,16 @@ import { trait } from "@thilawyn/traitify-ts" -import { AbstractClass } from "type-fest" -import { z } from "zod" -import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" -import { Extend, StaticMembers } from "../util" +import { ZodSchemaClassExtender } from "../builders/ZodSchemaClassExtender" +import { ZodSchemaClass } from "../shapes/ZodSchemaClass" export const ExtendableZodSchemaObject = trait .implement(Super => class ExtendableZodSchemaObject extends Super { static extend< - Super extends ZodSchemaAbstractClass, - SuperInstance extends SuperValues, - - 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, + Self extends ZodSchemaClass, >( - this: Super | ZodSchemaAbstractClass, - - props: { - schema: (props: { - schema: Super["schema"] - shape: Super["schema"]["shape"] - }) => z.ZodObject - - defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues - }, - ): ( - AbstractClass< - Extend<[SuperInstance, Values]>, - [values: Values] - > & - Extend<[ - StaticMembers, - { - readonly schema: z.ZodObject, - readonly defaultValues: DefaultValues, - }, - ]> + this: Self ) { - const schema = props.schema({ schema: this.schema, shape: this.schema.shape }) - const defaultValues = props.defaultValues(this.defaultValues) - - return class extends this { - static readonly schema = schema - static readonly defaultValues = defaultValues - } as any + return new ZodSchemaClassExtender(this) } }) .build() -- 2.49.1 From 1a6bd44c055739752a6d6f7a7131cff7ca30ce35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 04:49:04 +0100 Subject: [PATCH 087/136] Extend work --- src/builders/ZodSchemaClassExtender.ts | 2 +- src/tests.ts | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index 24331a8..f2233bf 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -47,7 +47,7 @@ export class ZodSchemaClassExtender> { return new this.constructor( this.superclass as unknown as AbstractClass< - Extend<[SuperInstance, Schemas]>, + Extend<[SuperInstance, Values]>, [values: Values] > & Extend<[ diff --git a/src/tests.ts b/src/tests.ts index dd2cecd..9498792 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -41,21 +41,16 @@ const jsonifiedUser = await inst.jsonifyPromise() const extended = User.extend() .schema({ schema: s => s.extend({ - name: z.literal("Admin") + prout: z.string() }), defaultValues: v => v, }) -class SubTest extends User.extend() - .schema({ - schema: s => s.extend({}), - defaultValues: v => v, - }) - .build() -{} +class SubTest extends extended.build() {} const subInst = await SubTest.createPromise({ name: "", prout: "" }) + // console.log(subInst) -- 2.49.1 From 29d539ec32a1b5a0d84264aab80b8453a295e1e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 05:21:35 +0100 Subject: [PATCH 088/136] Override --- src/util/extend.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/util/extend.ts b/src/util/extend.ts index 5cab210..fb28207 100644 --- a/src/util/extend.ts +++ b/src/util/extend.ts @@ -22,6 +22,21 @@ export type Extend = ( : {} ) +export type Override = ( + T extends readonly [ + infer Super, + infer Self, + ...infer Rest extends readonly object[], + ] + ? Override> & Self, + ...Rest, + ]> + : T extends readonly [infer Self] + ? Self + : {} +) + /** * Merges an inheritance tree defined by an array of types without allowing overrides. * @template T - An array of types representing the inheritance tree. -- 2.49.1 From 93edcde25815004462d874d089d146825e62860e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 05:38:27 +0100 Subject: [PATCH 089/136] Extend fix --- src/builders/ZodSchemaClassExtender.ts | 6 +++--- src/tests.ts | 15 +++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index f2233bf..1922c2d 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -1,7 +1,7 @@ import { AbstractClass } from "type-fest" import { z } from "zod" import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" -import { Extend, StaticMembers } from "../util" +import { Extend, Override, StaticMembers } from "../util" export class ZodSchemaClassExtender> { @@ -46,11 +46,11 @@ export class ZodSchemaClassExtender> { } return new this.constructor( - this.superclass as unknown as AbstractClass< + Schemas as unknown as AbstractClass< Extend<[SuperInstance, Values]>, [values: Values] > & - Extend<[ + Override<[ StaticMembers, StaticMembers, ]> diff --git a/src/tests.ts b/src/tests.ts index 9498792..63a6827 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -38,20 +38,19 @@ const inst = User.create({ id: 1n, name: "" }) const jsonifiedUser = await inst.jsonifyPromise() -const extended = User.extend() +const AdminUserProto = User.extend() .schema({ schema: s => s.extend({ - prout: z.string() + name: z.literal("Admin"), + prout: z.string(), }), - defaultValues: v => v, + defaultValues: v => ({ ...v, name: "Admin" as const }), }) -class SubTest extends extended.build() {} - -const subInst = await SubTest.createPromise({ name: "", prout: "" }) - -// console.log(subInst) +class AdminUser extends AdminUserProto.build() {} +const subInst = await AdminUser.createPromise({ id: 2n, prout: "" }) +console.log(subInst) // class Box { -- 2.49.1 From 8ca2805f4fb0816a3842b7707af48f016b3095a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 05:49:50 +0100 Subject: [PATCH 090/136] MobXObservableZodSchemaObject --- src/tests.ts | 4 ++-- ...bleZodSchemaObject.ts => MobXObservableZodSchemaObject.ts} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/traits/{ObservableZodSchemaObject.ts => MobXObservableZodSchemaObject.ts} (92%) diff --git a/src/tests.ts b/src/tests.ts index 63a6827..103f99c 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -2,7 +2,7 @@ import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" import { dejsonify, jsonify } from "./schema/jsonify" -import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" +import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" const exp = zodSchemaClass @@ -26,7 +26,7 @@ const exp = zodSchemaClass id: dejsonify.bigint(s.shape.id) }), }) - .expresses(ObservableZodSchemaObject) + .expresses(MobXObservableZodSchemaObject) .build() @exp.staticImplements diff --git a/src/traits/ObservableZodSchemaObject.ts b/src/traits/MobXObservableZodSchemaObject.ts similarity index 92% rename from src/traits/ObservableZodSchemaObject.ts rename to src/traits/MobXObservableZodSchemaObject.ts index f63f33f..110cb91 100644 --- a/src/traits/ObservableZodSchemaObject.ts +++ b/src/traits/MobXObservableZodSchemaObject.ts @@ -4,7 +4,7 @@ import { makeObservable, observable } from "mobx" import { z } from "zod" -export const ObservableZodSchemaObject = trait +export const MobXObservableZodSchemaObject = trait .staticAbstract(Super => class extends Super { declare readonly schema: z.ZodObject }) -- 2.49.1 From e5e7d48b4c5f9eb4e1560db5e572853450c078c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 06:06:35 +0100 Subject: [PATCH 091/136] Fixed MobXObservableZodSchemaObject --- src/traits/MobXObservableZodSchemaObject.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/traits/MobXObservableZodSchemaObject.ts b/src/traits/MobXObservableZodSchemaObject.ts index 110cb91..c9913da 100644 --- a/src/traits/MobXObservableZodSchemaObject.ts +++ b/src/traits/MobXObservableZodSchemaObject.ts @@ -13,7 +13,10 @@ export const MobXObservableZodSchemaObject = trait super(...args) makeObservable(this, - mapValues(ObservableZodSchemaObject.schema.shape, () => observable) + mapValues( + (this.constructor as typeof ObservableZodSchemaObject).schema.shape, + () => observable, + ) ) } }) -- 2.49.1 From b7030be720a6f634e73b40bd884e04a11be6a0e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 06:18:13 +0100 Subject: [PATCH 092/136] Fix --- src/builders/ZodSchemaClassExtender.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index 1922c2d..e0a5e3a 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -1,4 +1,4 @@ -import { AbstractClass } from "type-fest" +import { AbstractClass, Simplify } from "type-fest" import { z } from "zod" import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" import { Extend, Override, StaticMembers } from "../util" @@ -47,13 +47,18 @@ export class ZodSchemaClassExtender> { return new this.constructor( Schemas as unknown as AbstractClass< - Extend<[SuperInstance, Values]>, + Simplify< + Extend<[SuperInstance, Values]> + >, + [values: Values] > & - Override<[ - StaticMembers, - StaticMembers, - ]> + Simplify< + Override<[ + StaticMembers, + StaticMembers, + ]> + > ) } -- 2.49.1 From 2ad276b84d78c68a31f8165cdb8ec24bbfb8a1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 18:11:48 +0100 Subject: [PATCH 093/136] jsonifiable --- src/builders/ZodSchemaClassExtender.ts | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index e0a5e3a..b545638 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -62,6 +62,58 @@ export class ZodSchemaClassExtender> { ) } + jsonifiable< + Super extends ZodSchemaAbstractClass, + SuperInstance extends SuperValues, + + 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 + >, + + 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( + Schemas as unknown as AbstractClass< + Simplify< + Extend<[SuperInstance, Values]> + >, + + [values: Values] + > & + Simplify< + Override<[ + StaticMembers, + StaticMembers, + ]> + > + ) + } + build() { return this.superclass -- 2.49.1 From f79143d821bf7b44e5bf3147ab45a7d99640a99f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 23:13:27 +0100 Subject: [PATCH 094/136] jsonifiable --- src/builders/ZodSchemaClassExtender.ts | 67 ++++++++++++++++++++------ src/tests.ts | 2 +- 2 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index b545638..5ba03b9 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -1,7 +1,10 @@ +import { expression } from "@thilawyn/traitify-ts" import { AbstractClass, Simplify } from "type-fest" import { z } from "zod" import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" import { Extend, Override, StaticMembers } from "../util" +import { JsonifiableZodSchemaAbstractClass, JsonifiableZodSchemaClass } from "../shapes/JsonifiableZodSchemaClass" +import { JsonifiableObject } from "type-fest/source/jsonifiable" export class ZodSchemaClassExtender> { @@ -63,30 +66,58 @@ export class ZodSchemaClassExtender> { } jsonifiable< - Super extends ZodSchemaAbstractClass, - SuperInstance extends SuperValues, + Super extends JsonifiableZodSchemaAbstractClass< + Instance, - SuperSchemaT extends z.ZodRawShape, - SuperSchemaUnknownKeys extends z.UnknownKeysParam, - SuperSchemaCatchall extends z.ZodTypeAny, + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, - SuperValues extends object, - SuperDefaultValues extends Partial, + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + JsonifiedValues, + Values + >, + Instance extends Values, - Values extends SuperValues, - DefaultValues 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, + Values extends object, >( this: ZodSchemaClassExtender< - Super | ZodSchemaAbstractClass + Super | JsonifiableZodSchemaAbstractClass< + Instance, + + JsonifySchemaT, + JsonifySchemaUnknownKeys, + JsonifySchemaCatchall, + + DejsonifySchemaT, + DejsonifySchemaUnknownKeys, + DejsonifySchemaCatchall, + + JsonifiedValues, + Values + > >, props: { - schema: (schema: Super["schema"]) => z.ZodObject - defaultValues: (defaultValues: SuperDefaultValues) => DefaultValues + jsonifySchema: ( + schema: z.ZodObject + ) => z.ZodObject + + dejsonifySchema: ( + schema: z.ZodObject + ) => z.ZodObject }, ) { const schema = props.schema(this.superclass.schema) @@ -115,7 +146,11 @@ export class ZodSchemaClassExtender> { } - build() { + toClass() { return this.superclass } + + toExpressionBuilder() { + return expression.extends(this.superclass) + } } diff --git a/src/tests.ts b/src/tests.ts index 103f99c..fe55b25 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -48,7 +48,7 @@ const AdminUserProto = User.extend() }) -class AdminUser extends AdminUserProto.build() {} +class AdminUser extends AdminUserProto.toClass() {} const subInst = await AdminUser.createPromise({ id: 2n, prout: "" }) console.log(subInst) -- 2.49.1 From 0b0af7b128967a739bbc8a5a8cb0eef35812e5b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 23:57:46 +0100 Subject: [PATCH 095/136] ZodSchemaClassExtender.jsonifiable work --- src/builders/ZodSchemaClassExtender.ts | 107 ++++++++++++++++--------- 1 file changed, 69 insertions(+), 38 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index 5ba03b9..fc24961 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -1,10 +1,10 @@ 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" -import { JsonifiableZodSchemaAbstractClass, JsonifiableZodSchemaClass } from "../shapes/JsonifiableZodSchemaClass" -import { JsonifiableObject } from "type-fest/source/jsonifiable" export class ZodSchemaClassExtender> { @@ -66,22 +66,44 @@ export class ZodSchemaClassExtender> { } jsonifiable< - Super extends JsonifiableZodSchemaAbstractClass< - Instance, + Super extends ( + ZodSchemaAbstractClass & + JsonifiableZodSchemaAbstractClass< + SuperInstance, - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, + SuperJsonifySchemaT, + SuperJsonifySchemaUnknownKeys, + SuperJsonifySchemaCatchall, - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, + SuperDejsonifySchemaT, + SuperDejsonifySchemaUnknownKeys, + SuperDejsonifySchemaCatchall, - JsonifiedValues, - Values - >, - Instance extends Values, + SuperJsonifiedValues, + SuperValues + > + ), + SuperInstance extends SuperValues, + + SuperSchemaT extends z.ZodRawShape, + SuperSchemaUnknownKeys extends z.UnknownKeysParam, + SuperSchemaCatchall extends z.ZodTypeAny, + + SuperValues extends object, + SuperDefaultValues extends Partial, + + 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, + + /* New jsonifiable schemas */ JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, @@ -90,56 +112,65 @@ export class ZodSchemaClassExtender> { DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, - JsonifiedValues extends JsonifiableObject, - Values extends object, + JsonifiedValues extends SuperJsonifiedValues, + Values extends SuperValues, >( this: ZodSchemaClassExtender< - Super | JsonifiableZodSchemaAbstractClass< - Instance, + Super | ( + ZodSchemaAbstractClass & + JsonifiableZodSchemaAbstractClass< + SuperInstance, - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, + SuperJsonifySchemaT, + SuperJsonifySchemaUnknownKeys, + SuperJsonifySchemaCatchall, - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, + SuperDejsonifySchemaT, + SuperDejsonifySchemaUnknownKeys, + SuperDejsonifySchemaCatchall, - JsonifiedValues, - Values - > + SuperJsonifiedValues, + SuperValues + > + ) >, props: { jsonifySchema: ( - schema: z.ZodObject + schema: Super["schema"], + jsonifySchema: Super["jsonifySchema"], ) => z.ZodObject dejsonifySchema: ( - schema: z.ZodObject + schema: Super["schema"], + dejsonifySchema: Super["dejsonifySchema"], ) => z.ZodObject }, ) { - const schema = props.schema(this.superclass.schema) - const defaultValues = props.defaultValues(this.superclass.defaultValues) + const jsonifySchema = props.jsonifySchema(this.superclass.schema, this.superclass.jsonifySchema) + const dejsonifySchema = props.dejsonifySchema(this.superclass.schema, this.superclass.dejsonifySchema) - class Schemas extends (this.superclass as AbstractClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues + class JsonifiableSchemas extends (this.superclass as AbstractClass) { + static readonly jsonifySchema = jsonifySchema + readonly jsonifySchema = jsonifySchema + static readonly dejsonifySchema = dejsonifySchema + readonly dejsonifySchema = dejsonifySchema } return new this.constructor( - Schemas as unknown as AbstractClass< + JsonifiableSchemas as unknown as AbstractClass< Simplify< - Extend<[SuperInstance, Values]> + Override<[SuperInstance, JsonifiableSchemas]> >, - [values: Values] + ConstructorParameters< + ZodSchemaAbstractClass + > > & Simplify< Override<[ StaticMembers, - StaticMembers, + StaticMembers, ]> > ) -- 2.49.1 From fdd267adb0cb22696c563fbd78c2299b94d00000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 26 Feb 2024 00:54:21 +0100 Subject: [PATCH 096/136] ZodSchemaClassExtender work --- src/builders/ZodSchemaClassExtender.ts | 153 +++++++++++++----------- src/tests.ts | 3 + src/traits/ExtendableZodSchemaObject.ts | 2 +- 3 files changed, 85 insertions(+), 73 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index fc24961..cfd2eaa 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -7,15 +7,20 @@ import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" import { Extend, Override, StaticMembers } from "../util" -export class ZodSchemaClassExtender> { +export class ZodSchemaClassExtender< + Superclass extends AbstractClass, + Subclass extends AbstractClass, +> { declare ["constructor"]: typeof ZodSchemaClassExtender - constructor(readonly superclass: Superclass) {} + constructor( + readonly superclass: Superclass, + readonly subclass: Subclass, + ) {} schema< - Super extends ZodSchemaAbstractClass, - SuperInstance extends SuperValues, + Super extends ZodSchemaAbstractClass, SuperSchemaT extends z.ZodRawShape, SuperSchemaUnknownKeys extends z.UnknownKeysParam, @@ -32,7 +37,8 @@ export class ZodSchemaClassExtender> { DefaultValues extends Partial, >( this: ZodSchemaClassExtender< - Super | ZodSchemaAbstractClass + Super | ZodSchemaAbstractClass, + any >, props: { @@ -49,9 +55,11 @@ export class ZodSchemaClassExtender> { } return new this.constructor( + this.superclass, + Schemas as unknown as AbstractClass< Simplify< - Extend<[SuperInstance, Values]> + Extend<[InstanceType, Values]> >, [values: Values] @@ -66,10 +74,58 @@ export class ZodSchemaClassExtender> { } jsonifiable< - Super extends ( - ZodSchemaAbstractClass & - JsonifiableZodSchemaAbstractClass< - SuperInstance, + /** 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, @@ -81,76 +137,27 @@ export class ZodSchemaClassExtender> { SuperJsonifiedValues, SuperValues - > - ), + >, - SuperInstance extends SuperValues, - - SuperSchemaT extends z.ZodRawShape, - SuperSchemaUnknownKeys extends z.UnknownKeysParam, - SuperSchemaCatchall extends z.ZodTypeAny, - - SuperValues extends object, - SuperDefaultValues extends Partial, - - 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, - - /* 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 SuperValues, - >( - this: ZodSchemaClassExtender< - Super | ( - ZodSchemaAbstractClass & - JsonifiableZodSchemaAbstractClass< - SuperInstance, - - SuperJsonifySchemaT, - SuperJsonifySchemaUnknownKeys, - SuperJsonifySchemaCatchall, - - SuperDejsonifySchemaT, - SuperDejsonifySchemaUnknownKeys, - SuperDejsonifySchemaCatchall, - - SuperJsonifiedValues, - SuperValues - > - ) + Self | ZodSchemaAbstractClass >, props: { jsonifySchema: ( - schema: Super["schema"], + schema: Self["schema"], jsonifySchema: Super["jsonifySchema"], ) => z.ZodObject dejsonifySchema: ( - schema: Super["schema"], + schema: Self["schema"], dejsonifySchema: Super["dejsonifySchema"], ) => z.ZodObject }, ) { - const jsonifySchema = props.jsonifySchema(this.superclass.schema, this.superclass.jsonifySchema) - const dejsonifySchema = props.dejsonifySchema(this.superclass.schema, this.superclass.dejsonifySchema) + const jsonifySchema = props.jsonifySchema(this.subclass.schema, this.superclass.jsonifySchema) + const dejsonifySchema = props.dejsonifySchema(this.subclass.schema, this.superclass.dejsonifySchema) - class JsonifiableSchemas extends (this.superclass as AbstractClass) { + class JsonifiableSchemas extends (this.subclass as AbstractClass) { static readonly jsonifySchema = jsonifySchema readonly jsonifySchema = jsonifySchema static readonly dejsonifySchema = dejsonifySchema @@ -158,30 +165,32 @@ export class ZodSchemaClassExtender> { } return new this.constructor( + this.superclass, + JsonifiableSchemas as unknown as AbstractClass< Simplify< - Override<[SuperInstance, JsonifiableSchemas]> + Override<[InstanceType, JsonifiableSchemas]> >, ConstructorParameters< - ZodSchemaAbstractClass + ZodSchemaAbstractClass > > & Simplify< Override<[ - StaticMembers, + StaticMembers, StaticMembers, ]> - > + >, ) } toClass() { - return this.superclass + return this.subclass } toExpressionBuilder() { - return expression.extends(this.superclass) + return expression.extends(this.subclass) } } diff --git a/src/tests.ts b/src/tests.ts index fe55b25..fcb3f79 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -46,6 +46,9 @@ const AdminUserProto = User.extend() }), defaultValues: v => ({ ...v, name: "Admin" as const }), }) + .jsonifiable({ + + }) class AdminUser extends AdminUserProto.toClass() {} diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index d9803a3..243e1b4 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -10,7 +10,7 @@ export const ExtendableZodSchemaObject = trait >( this: Self ) { - return new ZodSchemaClassExtender(this) + return new ZodSchemaClassExtender(this, this) } }) .build() -- 2.49.1 From c652aae2386c5d60664fc69841bedbf16565324c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 26 Feb 2024 00:59:58 +0100 Subject: [PATCH 097/136] ZodSchemaClassExtender work --- src/builders/ZodSchemaClassExtender.ts | 4 ++-- src/tests.ts | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index cfd2eaa..0fea1d6 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -55,7 +55,7 @@ export class ZodSchemaClassExtender< } return new this.constructor( - this.superclass, + this.superclass as Super, Schemas as unknown as AbstractClass< Simplify< @@ -165,7 +165,7 @@ export class ZodSchemaClassExtender< } return new this.constructor( - this.superclass, + this.superclass as Super, JsonifiableSchemas as unknown as AbstractClass< Simplify< diff --git a/src/tests.ts b/src/tests.ts index fcb3f79..3a392ad 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -3,6 +3,7 @@ import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" import { dejsonify, jsonify } from "./schema/jsonify" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" +import { StaticMembers } from "./util" const exp = zodSchemaClass @@ -47,7 +48,9 @@ const AdminUserProto = User.extend() defaultValues: v => ({ ...v, name: "Admin" as const }), }) .jsonifiable({ - + jsonifySchema: (s, json) => json.extend({ + prout: s.shape.prout + }) }) -- 2.49.1 From 055caf1320bac538aff6eca5e390da86e6efb9d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 26 Feb 2024 22:55:44 +0100 Subject: [PATCH 098/136] SchemaWithDefaultValues --- src/builders/ZodSchemaClassBuilder.ts | 65 ++++++++++-------- src/shapes/ZodSchemaClass.ts | 54 +++++++++------ src/tests.ts | 12 +++- src/traits/ExtendableZodSchemaObject.ts | 2 +- src/traits/InstantiableZodSchemaObject.ts | 83 +++++++++++------------ 5 files changed, 121 insertions(+), 95 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index fe12b66..52e6dbd 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -18,25 +18,32 @@ extends TraitExpressionBuilder { declare ["constructor"]: typeof ZodSchemaClassBuilder schema< - Super extends AbstractClass & { schema?: never, defaultValues?: never }, + Super extends AbstractClass & { schema?: never, schemaWithDefaultValues?: never }, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, >( this: ZodSchemaClassBuilder, - { schema, defaultValues }: { - schema: z.ZodObject - defaultValues: DefaultValues + props: { + schema: z.ZodObject + + schemaWithDefaultValues: ( + schema: z.ZodObject + ) => z.ZodObject }, ) { class Schemas extends (this.expressionSuperclass as AbstractClass) { - static readonly schema = schema - static readonly defaultValues = defaultValues + static readonly schema = props.schema + static readonly schemaWithDefaultValues = props.schemaWithDefaultValues(props.schema) constructor(values: Values) { super() @@ -63,29 +70,33 @@ extends TraitExpressionBuilder { } jsonifiable< - Super extends ZodSchemaAbstractClass + Super extends ZodSchemaAbstractClass & { jsonifySchema?: never, dejsonifySchema?: never }, - Instance extends Values, + Instance extends Values, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - JsonifySchemaT extends z.ZodRawShape, - JsonifySchemaUnknownKeys extends z.UnknownKeysParam, - JsonifySchemaCatchall extends z.ZodTypeAny, + Values extends object, + PartialValues extends Partial, - DejsonifySchemaT extends z.ZodRawShape, - DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, - DejsonifySchemaCatchall extends z.ZodTypeAny, + JsonifySchemaT extends z.ZodRawShape, + JsonifySchemaUnknownKeys extends z.UnknownKeysParam, + JsonifySchemaCatchall extends z.ZodTypeAny, - JsonifiedValues extends JsonifiableObject, + DejsonifySchemaT extends z.ZodRawShape, + DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, + DejsonifySchemaCatchall extends z.ZodTypeAny, + + JsonifiedValues extends JsonifiableObject, >( this: ZodSchemaClassBuilder< - Super | ZodSchemaAbstractClass, + Super | ZodSchemaAbstractClass, Traits >, @@ -115,7 +126,7 @@ extends TraitExpressionBuilder { Instance & JsonifiableSchemas, // TODO: for some reason, ConstructorParameters does not work here. Maybe try to find a fix? - ConstructorParameters> + ConstructorParameters> > & StaticMembers & StaticMembers diff --git a/src/shapes/ZodSchemaClass.ts b/src/shapes/ZodSchemaClass.ts index 0b33a2d..680c59a 100644 --- a/src/shapes/ZodSchemaClass.ts +++ b/src/shapes/ZodSchemaClass.ts @@ -3,41 +3,53 @@ import { z } from "zod" export type ZodSchemaClass< - Instance extends Values, + Instance extends Values, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, > = ( Class & - ZodSchemas + ZodSchemas ) export type ZodSchemaAbstractClass< - Instance extends Values, + Instance extends Values, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, > = ( AbstractClass & - ZodSchemas + ZodSchemas ) export type ZodSchemas< - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, > = { - readonly schema: z.ZodObject - readonly defaultValues: DefaultValues + readonly schema: z.ZodObject + readonly schemaWithDefaultValues: z.ZodObject } diff --git a/src/tests.ts b/src/tests.ts index 3a392ad..ddcafe7 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -3,7 +3,6 @@ import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" import { dejsonify, jsonify } from "./schema/jsonify" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" -import { StaticMembers } from "./util" const exp = zodSchemaClass @@ -16,7 +15,9 @@ const exp = zodSchemaClass name: z.string(), }), - defaultValues: { id: -1n }, + schemaWithDefaultValues: s => s.extend({ + id: s.shape.id.default(-1n) + }), }) .jsonifiable({ jsonifySchema: s => s.extend({ @@ -33,7 +34,12 @@ const exp = zodSchemaClass @exp.staticImplements class User extends exp.extends implements Implements {} -User.defaultValues +const test = User.schema.extend({ + prout: z.string() +}).merge( + User.schemaWithDefaultValues +) + const inst = User.create({ id: 1n, name: "" }) // console.log(inst) const jsonifiedUser = await inst.jsonifyPromise() diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index 243e1b4..2b232fb 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -6,7 +6,7 @@ import { ZodSchemaClass } from "../shapes/ZodSchemaClass" export const ExtendableZodSchemaObject = trait .implement(Super => class ExtendableZodSchemaObject extends Super { static extend< - Self extends ZodSchemaClass, + Self extends ZodSchemaClass, >( this: Self ) { diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index d567034..9b70483 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -1,5 +1,5 @@ import { trait } from "@thilawyn/traitify-ts" -import { Effect, pipe } from "effect" +import { Effect } from "effect" import { HasRequiredKeys } from "type-fest" import { z } from "zod" import { ZodSchemaClass } from "../shapes/ZodSchemaClass" @@ -29,70 +29,67 @@ type NewZodSchemaInstanceArgs = ( export const InstantiableZodSchemaObject = trait .implement(Super => class InstantiableZodSchemaObject extends Super { static create< - Instance extends Values, + Instance extends Values, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, >( - this: ZodSchemaClass, - - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > + this: ZodSchemaClass, + ...[values, params]: NewZodSchemaInstanceArgs ) { return new this( - this.schema.parse({ ...this.defaultValues, ...values }, params) + this.schemaWithDefaultValues.parse(values, params) ) } static async createPromise< - Instance extends Values, + Instance extends Values, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, >( - this: ZodSchemaClass, - - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > + this: ZodSchemaClass, + ...[values, params]: NewZodSchemaInstanceArgs ) { return new this( - await this.schema.parseAsync({ ...this.defaultValues, ...values }, params) + await this.schemaWithDefaultValues.parseAsync(values, params) ) } static createEffect< - Instance extends Values, + Instance extends Values, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, - Values extends object, - DefaultValues extends Partial, + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, >( - this: ZodSchemaClass, - - ...[values, params]: NewZodSchemaInstanceArgs< - NewZodSchemaInstanceInput - > + this: ZodSchemaClass, + ...[values, params]: NewZodSchemaInstanceArgs ) { - return pipe( - parseZodTypeEffect( - this.schema, - { ...this.defaultValues, ...values }, - params, - ), - + return parseZodTypeEffect(this.schemaWithDefaultValues, values, params).pipe( Effect.map(values => new this(values)), ) } -- 2.49.1 From a6414b680c0918c7850343eb8b1f72fa411c2edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 27 Feb 2024 02:49:53 +0100 Subject: [PATCH 099/136] InstantiableZodSchemaObject work --- src/tests.ts | 2 +- src/traits/InstantiableZodSchemaObject.ts | 30 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/tests.ts b/src/tests.ts index ddcafe7..ae935a1 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -16,7 +16,7 @@ const exp = zodSchemaClass }), schemaWithDefaultValues: s => s.extend({ - id: s.shape.id.default(-1n) + id: s.shape.id.default(-1n), }), }) .jsonifiable({ diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 9b70483..09c2fc8 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -28,6 +28,36 @@ type NewZodSchemaInstanceArgs = ( export const InstantiableZodSchemaObject = trait .implement(Super => class InstantiableZodSchemaObject extends Super { + static instantiationSchema< + Instance extends Values, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends object, + >( + this: ZodSchemaClass, + ) { + return this.schema.transform(values => new this(values)) + } + + static instantiationSchemaWithDefaultValues< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ZodSchemaClass, + ) { + return this.schemaWithDefaultValues.transform(values => new this(values)) + } + + static create< Instance extends Values, -- 2.49.1 From 2d69785add794a108bba785313bd519377bf0c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 27 Feb 2024 03:44:08 +0100 Subject: [PATCH 100/136] InstantiableZodSchemaObject work --- src/builders/ZodSchemaClassBuilder.ts | 1 + src/traits/InstantiableZodSchemaObject.ts | 164 +++++++----------- .../ZodSchemaObjectInstantiationSchemas.ts | 37 ++++ 3 files changed, 102 insertions(+), 100 deletions(-) create mode 100644 src/traits/ZodSchemaObjectInstantiationSchemas.ts diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index 52e6dbd..ba1d94e 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -63,6 +63,7 @@ extends TraitExpressionBuilder { [ ...this.expressionTraits, + // ZodSchemaObjectInstantiationSchemas, InstantiableZodSchemaObject, ExtendableZodSchemaObject, ], diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 09c2fc8..898ca9e 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -1,9 +1,9 @@ -import { trait } from "@thilawyn/traitify-ts" -import { Effect } from "effect" +import { TraitStaticMembers, expression } from "@thilawyn/traitify-ts" import { HasRequiredKeys } from "type-fest" import { z } from "zod" import { ZodSchemaClass } from "../shapes/ZodSchemaClass" import { parseZodTypeEffect } from "../util" +import { ZodSchemaObjectInstantiationSchemas } from "./ZodSchemaObjectInstantiationSchemas" type NewZodSchemaInstanceInput< @@ -26,102 +26,66 @@ type NewZodSchemaInstanceArgs = ( ) -export const InstantiableZodSchemaObject = trait - .implement(Super => class InstantiableZodSchemaObject extends Super { - static instantiationSchema< - Instance extends Values, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends object, - >( - this: ZodSchemaClass, - ) { - return this.schema.transform(values => new this(values)) - } - - static instantiationSchemaWithDefaultValues< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ZodSchemaClass, - ) { - return this.schemaWithDefaultValues.transform(values => new this(values)) - } - - - static create< - 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, - >( - this: ZodSchemaClass, - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return new this( - this.schemaWithDefaultValues.parse(values, params) - ) - } - - static async createPromise< - 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, - >( - this: ZodSchemaClass, - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return new this( - await this.schemaWithDefaultValues.parseAsync(values, params) - ) - } - - static createEffect< - 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, - >( - this: ZodSchemaClass, - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return parseZodTypeEffect(this.schemaWithDefaultValues, values, params).pipe( - Effect.map(values => new this(values)), - ) - } - }) +export const InstantiableZodSchemaObject = expression + .expresses(ZodSchemaObjectInstantiationSchemas) .build() + .subtrait() + .implement(Super => class InstantiableZodSchemaObject extends Super { + static create< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ( + ZodSchemaClass & + TraitStaticMembers + ), + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return this.instantiationSchemaWithDefaultValues().parse(values, params) + } + + static async createPromise< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ( + ZodSchemaClass & + TraitStaticMembers + ), + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return this.instantiationSchemaWithDefaultValues().parseAsync(values, params) + } + + static createEffect< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ( + ZodSchemaClass & + TraitStaticMembers + ), + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return parseZodTypeEffect(this.instantiationSchemaWithDefaultValues(), values, params) + } + }) + .build() diff --git a/src/traits/ZodSchemaObjectInstantiationSchemas.ts b/src/traits/ZodSchemaObjectInstantiationSchemas.ts new file mode 100644 index 0000000..4af87cb --- /dev/null +++ b/src/traits/ZodSchemaObjectInstantiationSchemas.ts @@ -0,0 +1,37 @@ +import { trait } from "@thilawyn/traitify-ts" +import { z } from "zod" +import { ZodSchemaClass } from "../shapes/ZodSchemaClass" + + +export const ZodSchemaObjectInstantiationSchemas = trait + .implement(Super => class ZodSchemaObjectInstantiationSchemas extends Super { + static instantiationSchema< + Instance extends Values, + + SchemaT extends z.ZodRawShape, + SchemaUnknownKeys extends z.UnknownKeysParam, + SchemaCatchall extends z.ZodTypeAny, + + Values extends object, + >( + this: ZodSchemaClass, + ) { + return this.schema.transform(values => new this(values)) + } + + static instantiationSchemaWithDefaultValues< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ZodSchemaClass, + ) { + return this.schemaWithDefaultValues.transform(values => new this(values)) + } + }) + .build() -- 2.49.1 From 0e956c0c78348adfcb7c5952181e0944f1730219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 27 Feb 2024 03:59:21 +0100 Subject: [PATCH 101/136] InstantiableZodSchemaObject fix --- src/builders/ZodSchemaClassBuilder.ts | 3 +- src/tests.ts | 2 + src/traits/InstantiableZodSchemaObject.ts | 125 +++++++++++----------- 3 files changed, 66 insertions(+), 64 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index ba1d94e..1ad8caa 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -7,6 +7,7 @@ import { DejsonifiableZodSchemaObject } from "../traits/DejsonifiableZodSchemaOb import { ExtendableZodSchemaObject } from "../traits/ExtendableZodSchemaObject" import { InstantiableZodSchemaObject } from "../traits/InstantiableZodSchemaObject" import { JsonifiableZodSchemaObject } from "../traits/JsonifiableZodSchemaObject" +import { ZodSchemaObjectInstantiationSchemas } from "../traits/ZodSchemaObjectInstantiationSchemas" import { StaticMembers } from "../util" @@ -63,7 +64,7 @@ extends TraitExpressionBuilder { [ ...this.expressionTraits, - // ZodSchemaObjectInstantiationSchemas, + ZodSchemaObjectInstantiationSchemas, InstantiableZodSchemaObject, ExtendableZodSchemaObject, ], diff --git a/src/tests.ts b/src/tests.ts index ae935a1..f233e7f 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -41,6 +41,8 @@ const test = User.schema.extend({ ) const inst = User.create({ id: 1n, name: "" }) +const instEffect = User.createEffect({ id: 1n, name: "" }) + // console.log(inst) const jsonifiedUser = await inst.jsonifyPromise() diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts index 898ca9e..1817ab6 100644 --- a/src/traits/InstantiableZodSchemaObject.ts +++ b/src/traits/InstantiableZodSchemaObject.ts @@ -1,4 +1,4 @@ -import { TraitStaticMembers, expression } from "@thilawyn/traitify-ts" +import { TraitStaticMembers, trait } from "@thilawyn/traitify-ts" import { HasRequiredKeys } from "type-fest" import { z } from "zod" import { ZodSchemaClass } from "../shapes/ZodSchemaClass" @@ -6,6 +6,8 @@ import { parseZodTypeEffect } from "../util" import { ZodSchemaObjectInstantiationSchemas } from "./ZodSchemaObjectInstantiationSchemas" +type ZodSchemaObjectInstantiationSchemasStaticMembers = TraitStaticMembers + type NewZodSchemaInstanceInput< Values extends object, DefaultValues extends Partial, @@ -26,66 +28,63 @@ type NewZodSchemaInstanceArgs = ( ) -export const InstantiableZodSchemaObject = expression - .expresses(ZodSchemaObjectInstantiationSchemas) +export const InstantiableZodSchemaObject = trait + .implement(Super => class InstantiableZodSchemaObject extends Super { + static create< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ( + ZodSchemaClass & + ZodSchemaObjectInstantiationSchemasStaticMembers + ), + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return this.instantiationSchemaWithDefaultValues().parse(values, params) + } + + static async createPromise< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ( + ZodSchemaClass & + ZodSchemaObjectInstantiationSchemasStaticMembers + ), + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return this.instantiationSchemaWithDefaultValues().parseAsync(values, params) + } + + static createEffect< + Instance extends Values, + + SchemaWithDefaultValuesT extends z.ZodRawShape, + SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, + SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, + + Values extends object, + PartialValues extends Partial, + >( + this: ( + ZodSchemaClass & + ZodSchemaObjectInstantiationSchemasStaticMembers + ), + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return parseZodTypeEffect(this.instantiationSchemaWithDefaultValues(), values, params) + } + }) .build() - .subtrait() - .implement(Super => class InstantiableZodSchemaObject extends Super { - static create< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ( - ZodSchemaClass & - TraitStaticMembers - ), - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return this.instantiationSchemaWithDefaultValues().parse(values, params) - } - - static async createPromise< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ( - ZodSchemaClass & - TraitStaticMembers - ), - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return this.instantiationSchemaWithDefaultValues().parseAsync(values, params) - } - - static createEffect< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ( - ZodSchemaClass & - TraitStaticMembers - ), - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return parseZodTypeEffect(this.instantiationSchemaWithDefaultValues(), values, params) - } - }) - .build() -- 2.49.1 From 9f8cc4f895a78509eb035a1573fe3f0d32f91fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 27 Feb 2024 04:01:08 +0100 Subject: [PATCH 102/136] Cleanup --- src/tests.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tests.ts b/src/tests.ts index f233e7f..bc2f258 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -46,7 +46,6 @@ const instEffect = User.createEffect({ id: 1n, name: "" }) // console.log(inst) const jsonifiedUser = await inst.jsonifyPromise() - const AdminUserProto = User.extend() .schema({ schema: s => s.extend({ -- 2.49.1 From af8d4e5f863401ecdbd4be2e485fdfae5ff47c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 27 Feb 2024 05:25:55 +0100 Subject: [PATCH 103/136] Cleanup --- src/tests.ts | 71 +++++++++++++++------------------------------------- 1 file changed, 20 insertions(+), 51 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index bc2f258..2b5265a 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -40,58 +40,27 @@ const test = User.schema.extend({ User.schemaWithDefaultValues ) -const inst = User.create({ id: 1n, name: "" }) -const instEffect = User.createEffect({ id: 1n, name: "" }) +const inst = User.create({ id: 1n, name: "User" }) +// console.log(inst.name) +const instEffect = User.createEffect({ id: 1n, name: "User" }) -// console.log(inst) -const jsonifiedUser = await inst.jsonifyPromise() +// const jsonifiedUser = await inst.jsonifyPromise() -const AdminUserProto = User.extend() - .schema({ - schema: s => s.extend({ - name: z.literal("Admin"), - prout: z.string(), - }), - defaultValues: v => ({ ...v, name: "Admin" as const }), - }) - .jsonifiable({ - jsonifySchema: (s, json) => json.extend({ - prout: s.shape.prout - }) - }) +// const AdminUserProto = User.extend() +// .schema({ +// schema: s => s.extend({ +// name: z.literal("Admin"), +// prout: z.string(), +// }), +// defaultValues: v => ({ ...v, name: "Admin" as const }), +// }) +// .jsonifiable({ +// jsonifySchema: (s, json) => json.extend({ +// prout: s.shape.prout +// }) +// }) -class AdminUser extends AdminUserProto.toClass() {} -const subInst = await AdminUser.createPromise({ id: 2n, prout: "" }) -console.log(subInst) - - -// class Box { -// declare ["constructor"]: typeof Box -// constructor(public value: T) {} - -// otherMethod() { -// return "prout" as const -// } - -// newBox< -// C extends Class>, -// I extends Box, -// T, -// >( -// // this: Omit, "constructor"> & { ["constructor"]: Class } -// this: { ["constructor"]: C | Class> }, -// value: T, -// ) { -// // this.otherMethod() -// return new this.constructor(value) -// } -// } - -// class UnrelatedClass {} - -// class SuperBox extends Box { -// declare ["constructor"]: typeof SuperBox -// } - -// const value = new SuperBox(69).newBox(69) +// class AdminUser extends AdminUserProto.toClass() {} +// const subInst = await AdminUser.createPromise({ id: 2n, prout: "" }) +// console.log(subInst) -- 2.49.1 From b1f73a26713514fd8ee106bac3679b705358f425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 01:29:36 +0100 Subject: [PATCH 104/136] Traitify upgrade --- bun.lockb | Bin 160492 -> 160492 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 0bb321a16500ade34cedbc5d29e0fa34b38cb2a1..5d5ba8ca8ef2f27140dfcde9cf679840c5c9a59e 100755 GIT binary patch delta 163 zcmV;U09^m<xaXw0H{sO+tWr>I)~tYF_2Z<*u}(T1 zlgK$Rv$z~(gFs0p@*R8JVj^LsxtDiQ#Z*iomwcVR!i|tq!1=13Ephf#!w2VOzpS%e z%@YIU8~5d{_|grVv%+Yo1vn|3Aj*SXptoJ10ZA1BGq6v#=a(gFr36Mi7eSZM#TUC diff --git a/package.json b/package.json index f32178e..4bb4542 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.12", + "@thilawyn/traitify-ts": "^0.1.13", "decimal.js": "^10.4.3", "effect": "^2.4.0", "lodash-es": "^4.17.21", -- 2.49.1 From 1956aae555ebbe967076cef3a4bc1756306dadaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 01:59:33 +0100 Subject: [PATCH 105/136] ZodSchemaObject --- src/traits/ZodSchemaObject.ts | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/traits/ZodSchemaObject.ts diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts new file mode 100644 index 0000000..20d5fba --- /dev/null +++ b/src/traits/ZodSchemaObject.ts @@ -0,0 +1,73 @@ +import { ImplStaticThis, trait } from "@thilawyn/traitify-ts" +import { Class, HasRequiredKeys } from "type-fest" +import { z } from "zod" +import { StaticMembers } from "../util" + + +type ParseParamsArgs = [] | [params: Partial] + +type NewZodSchemaInstanceArgs = ( + HasRequiredKeys extends true + ? [values: Input, ...args: ParseParamsArgs] + : [] | [values: Input, ...args: ParseParamsArgs] +) + + +export const ZodSchemaObject = < + 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, +>( + schema: z.ZodObject, + + schemaWithDefaultValues: ( + schema: z.ZodObject + ) => z.ZodObject, +) => trait + .implement(Super => class ZodSchemaObject extends Super { + static readonly schema = schema + static readonly schemaWithDefaultsValues = schemaWithDefaultValues(schema) + + static instantiationSchema< + Instance extends Values + >( + this: ( + Class & + StaticMembers> + ) + ) { + return this.schema.transform(values => new this(values)) + } + + static instantiationSchemaWithDefaultValues< + Instance extends Values + >( + this: ( + Class & + StaticMembers> + ) + ) { + return this.schema.transform(values => new this(values)) + } + + + static create< + Instance extends Values + >( + this: ( + Class & + StaticMembers> + ), + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return this.instantiationSchema().parse(values, params) + } + }) + .build() -- 2.49.1 From d204b71a051d0aaab79e245dab677db9cb87db44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 02:44:02 +0100 Subject: [PATCH 106/136] ZodSchemaObject work --- src/tests.ts | 92 +++++++++++++++++++++++------------ src/traits/ZodSchemaObject.ts | 18 +++---- 2 files changed, 68 insertions(+), 42 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index 2b5265a..302199c 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,45 +1,75 @@ -import { Implements } from "@thilawyn/traitify-ts" +import { Implements, expression } from "@thilawyn/traitify-ts" +import { Class } from "type-fest" import { z } from "zod" -import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" -import { dejsonify, jsonify } from "./schema/jsonify" -import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" +import { ZodSchemaObject } from "./traits/ZodSchemaObject" +import { StaticMembers } from "./util" -const exp = zodSchemaClass - .schema({ - schema: z.object({ - /** User ID */ - id: z.bigint(), +// const exp = zodSchemaClass +// .schema({ +// schema: z.object({ +// /** User ID */ +// id: z.bigint(), - /** Username */ - name: z.string(), - }), +// /** Username */ +// name: z.string(), +// }), - schemaWithDefaultValues: s => s.extend({ - id: s.shape.id.default(-1n), - }), - }) - .jsonifiable({ - jsonifySchema: s => s.extend({ - id: jsonify.bigint(s.shape.id) - }), +// schemaWithDefaultValues: s => s.extend({ +// id: s.shape.id.default(-1n), +// }), +// }) +// .jsonifiable({ +// jsonifySchema: s => s.extend({ +// id: jsonify.bigint(s.shape.id) +// }), - dejsonifySchema: s => s.extend({ - id: dejsonify.bigint(s.shape.id) - }), - }) - .expresses(MobXObservableZodSchemaObject) +// dejsonifySchema: s => s.extend({ +// id: dejsonify.bigint(s.shape.id) +// }), +// }) +// .expresses(MobXObservableZodSchemaObject) +// .build() + +const schema = z.object({ + /** User ID */ + id: z.bigint(), + + /** Username */ + name: z.string(), +}) +const schemaWithDefaultsValues = schema.extend({ + id: schema.shape.id.default(-1n), +}) +class UserSchemas { + static readonly schema = schema + static readonly schemaWithDefaultValues = schemaWithDefaultsValues + + constructor(values: z.output) { + Object.assign(this, values) + } +} + +const exp = expression + .extends(UserSchemas as ( + Class> & + StaticMembers + )) + .expresses( + ZodSchemaObject( + schema, + + s => s.extend({ + id: s.shape.id.default(-1n), + }), + ) + ) .build() + @exp.staticImplements class User extends exp.extends implements Implements {} -const test = User.schema.extend({ - prout: z.string() -}).merge( - User.schemaWithDefaultValues -) - const inst = User.create({ id: 1n, name: "User" }) // console.log(inst.name) const instEffect = User.createEffect({ id: 1n, name: "User" }) diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index 20d5fba..b39d34c 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -36,23 +36,19 @@ export const ZodSchemaObject = < static readonly schemaWithDefaultsValues = schemaWithDefaultValues(schema) static instantiationSchema< - Instance extends Values + Self extends StaticMembers>, + Instance extends Values, >( - this: ( - Class & - StaticMembers> - ) + this: Class & Self ) { return this.schema.transform(values => new this(values)) } static instantiationSchemaWithDefaultValues< - Instance extends Values + Self extends StaticMembers>, + Instance extends Values, >( - this: ( - Class & - StaticMembers> - ) + this: Class & Self ) { return this.schema.transform(values => new this(values)) } @@ -67,7 +63,7 @@ export const ZodSchemaObject = < ), ...[values, params]: NewZodSchemaInstanceArgs ) { - return this.instantiationSchema().parse(values, params) + return this.instantiationSchemaWithDefaultValues().parse(values, params) } }) .build() -- 2.49.1 From c3c454eb15d80169913493bad0ab37c46462748a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 02:57:30 +0100 Subject: [PATCH 107/136] ZodSchemaObject work --- src/traits/ZodSchemaObject.ts | 32 +++++++++++++++++++++++++------- src/util/effect.ts | 9 +++------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index b39d34c..b4f1e29 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -1,7 +1,7 @@ import { ImplStaticThis, trait } from "@thilawyn/traitify-ts" import { Class, HasRequiredKeys } from "type-fest" import { z } from "zod" -import { StaticMembers } from "../util" +import { StaticMembers, parseZodSchemaEffect } from "../util" type ParseParamsArgs = [] | [params: Partial] @@ -50,20 +50,38 @@ export const ZodSchemaObject = < >( this: Class & Self ) { - return this.schema.transform(values => new this(values)) + return this.schemaWithDefaultsValues.transform(values => new this(values)) } static create< - Instance extends Values + Self extends StaticMembers>, + Instance extends Values, >( - this: ( - Class & - StaticMembers> - ), + this: Class & Self, ...[values, params]: NewZodSchemaInstanceArgs ) { return this.instantiationSchemaWithDefaultValues().parse(values, params) } + + static createPromise< + Self extends StaticMembers>, + Instance extends Values, + >( + this: Class & Self, + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return this.instantiationSchemaWithDefaultValues().parseAsync(values, params) + } + + static createEffect< + Self extends StaticMembers>, + Instance extends Values, + >( + this: Class & Self, + ...[values, params]: NewZodSchemaInstanceArgs + ) { + return parseZodSchemaEffect(this.instantiationSchemaWithDefaultValues(), values, params) + } }) .build() diff --git a/src/util/effect.ts b/src/util/effect.ts index f7ce9eb..b4da92b 100644 --- a/src/util/effect.ts +++ b/src/util/effect.ts @@ -3,16 +3,13 @@ import { z } from "zod" /** - * Parses a value using a ZodType schema wrapped in an Effect monad. + * Parses a value using a Zod schema wrapped in an Effect monad. * - * @param schema - The ZodType schema to use for parsing. + * @param schema - The Zod schema to use for parsing. * @param args - The arguments to pass to the `safeParseAsync` method of the schema. * @returns An Effect monad representing the parsing result. */ -export const parseZodTypeEffect = < - Output, - Input, ->( +export const parseZodSchemaEffect = ( schema: z.ZodType, ...args: Parameters ) => pipe( -- 2.49.1 From 0edbe3f45ce96cb1b2890ee7a8df2d59b12aeb13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 04:02:14 +0100 Subject: [PATCH 108/136] ZodSchemaClassBuilder work --- src/builders/ZodSchemaClassBuilder.ts | 25 ++---- src/tests.ts | 77 ++++------------ src/traits/InstantiableZodSchemaObject.ts | 90 ------------------- .../ZodSchemaObjectInstantiationSchemas.ts | 37 -------- 4 files changed, 23 insertions(+), 206 deletions(-) delete mode 100644 src/traits/InstantiableZodSchemaObject.ts delete mode 100644 src/traits/ZodSchemaObjectInstantiationSchemas.ts diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index 1ad8caa..0445816 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -4,10 +4,8 @@ import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { ZodSchemaAbstractClass } from "../shapes/ZodSchemaClass" import { DejsonifiableZodSchemaObject } from "../traits/DejsonifiableZodSchemaObject" -import { ExtendableZodSchemaObject } from "../traits/ExtendableZodSchemaObject" -import { InstantiableZodSchemaObject } from "../traits/InstantiableZodSchemaObject" import { JsonifiableZodSchemaObject } from "../traits/JsonifiableZodSchemaObject" -import { ZodSchemaObjectInstantiationSchemas } from "../traits/ZodSchemaObjectInstantiationSchemas" +import { ZodSchemaObject } from "../traits/ZodSchemaObject" import { StaticMembers } from "../util" @@ -34,7 +32,7 @@ extends TraitExpressionBuilder { >( this: ZodSchemaClassBuilder, - props: { + { schema, schemaWithDefaultValues }: { schema: z.ZodObject schemaWithDefaultValues: ( @@ -42,10 +40,7 @@ extends TraitExpressionBuilder { ) => z.ZodObject }, ) { - class Schemas extends (this.expressionSuperclass as AbstractClass) { - static readonly schema = props.schema - static readonly schemaWithDefaultValues = props.schemaWithDefaultValues(props.schema) - + class ZodSchemaObjectConstructor extends (this.expressionSuperclass as AbstractClass) { constructor(values: Values) { super() Object.assign(this, values) @@ -53,21 +48,15 @@ extends TraitExpressionBuilder { } return new this.constructor( - Schemas as unknown as ( + ZodSchemaObjectConstructor as unknown as ( AbstractClass< InstanceType & Values, - ConstructorParameters + [values: Values] > & - StaticMembers & - StaticMembers + StaticMembers ), - [ - ...this.expressionTraits, - ZodSchemaObjectInstantiationSchemas, - InstantiableZodSchemaObject, - ExtendableZodSchemaObject, - ], + [...this.expressionTraits, ZodSchemaObject(schema, schemaWithDefaultValues)], ) } diff --git a/src/tests.ts b/src/tests.ts index 302199c..fa638e9 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,69 +1,24 @@ -import { Implements, expression } from "@thilawyn/traitify-ts" -import { Class } from "type-fest" +import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" -import { ZodSchemaObject } from "./traits/ZodSchemaObject" -import { StaticMembers } from "./util" +import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" +import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" -// const exp = zodSchemaClass -// .schema({ -// schema: z.object({ -// /** User ID */ -// id: z.bigint(), +const exp = zodSchemaClass + .schema({ + schema: z.object({ + /** User ID */ + id: z.bigint(), -// /** Username */ -// name: z.string(), -// }), + /** Username */ + name: z.string(), + }), -// schemaWithDefaultValues: s => s.extend({ -// id: s.shape.id.default(-1n), -// }), -// }) -// .jsonifiable({ -// jsonifySchema: s => s.extend({ -// id: jsonify.bigint(s.shape.id) -// }), - -// dejsonifySchema: s => s.extend({ -// id: dejsonify.bigint(s.shape.id) -// }), -// }) -// .expresses(MobXObservableZodSchemaObject) -// .build() - -const schema = z.object({ - /** User ID */ - id: z.bigint(), - - /** Username */ - name: z.string(), -}) -const schemaWithDefaultsValues = schema.extend({ - id: schema.shape.id.default(-1n), -}) -class UserSchemas { - static readonly schema = schema - static readonly schemaWithDefaultValues = schemaWithDefaultsValues - - constructor(values: z.output) { - Object.assign(this, values) - } -} - -const exp = expression - .extends(UserSchemas as ( - Class> & - StaticMembers - )) - .expresses( - ZodSchemaObject( - schema, - - s => s.extend({ - id: s.shape.id.default(-1n), - }), - ) - ) + schemaWithDefaultValues: s => s.extend({ + id: s.shape.id.default(-1n), + }), + }) + .expresses(MobXObservableZodSchemaObject) .build() diff --git a/src/traits/InstantiableZodSchemaObject.ts b/src/traits/InstantiableZodSchemaObject.ts deleted file mode 100644 index 1817ab6..0000000 --- a/src/traits/InstantiableZodSchemaObject.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { TraitStaticMembers, trait } from "@thilawyn/traitify-ts" -import { HasRequiredKeys } from "type-fest" -import { z } from "zod" -import { ZodSchemaClass } from "../shapes/ZodSchemaClass" -import { parseZodTypeEffect } from "../util" -import { ZodSchemaObjectInstantiationSchemas } from "./ZodSchemaObjectInstantiationSchemas" - - -type ZodSchemaObjectInstantiationSchemasStaticMembers = TraitStaticMembers - -type NewZodSchemaInstanceInput< - Values extends object, - DefaultValues extends Partial, -> = { - [Key in Exclude]: Values[Key] -} & { - [Key in keyof DefaultValues]?: Key extends keyof Values - ? Values[Key] - : never -} - -type ParseParamsArgs = [] | [params: Partial] - -type NewZodSchemaInstanceArgs = ( - HasRequiredKeys extends true - ? [values: Input, ...args: ParseParamsArgs] - : [] | [values: Input, ...args: ParseParamsArgs] -) - - -export const InstantiableZodSchemaObject = trait - .implement(Super => class InstantiableZodSchemaObject extends Super { - static create< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ( - ZodSchemaClass & - ZodSchemaObjectInstantiationSchemasStaticMembers - ), - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return this.instantiationSchemaWithDefaultValues().parse(values, params) - } - - static async createPromise< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ( - ZodSchemaClass & - ZodSchemaObjectInstantiationSchemasStaticMembers - ), - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return this.instantiationSchemaWithDefaultValues().parseAsync(values, params) - } - - static createEffect< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ( - ZodSchemaClass & - ZodSchemaObjectInstantiationSchemasStaticMembers - ), - ...[values, params]: NewZodSchemaInstanceArgs - ) { - return parseZodTypeEffect(this.instantiationSchemaWithDefaultValues(), values, params) - } - }) - .build() diff --git a/src/traits/ZodSchemaObjectInstantiationSchemas.ts b/src/traits/ZodSchemaObjectInstantiationSchemas.ts deleted file mode 100644 index 4af87cb..0000000 --- a/src/traits/ZodSchemaObjectInstantiationSchemas.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { trait } from "@thilawyn/traitify-ts" -import { z } from "zod" -import { ZodSchemaClass } from "../shapes/ZodSchemaClass" - - -export const ZodSchemaObjectInstantiationSchemas = trait - .implement(Super => class ZodSchemaObjectInstantiationSchemas extends Super { - static instantiationSchema< - Instance extends Values, - - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, - - Values extends object, - >( - this: ZodSchemaClass, - ) { - return this.schema.transform(values => new this(values)) - } - - static instantiationSchemaWithDefaultValues< - Instance extends Values, - - SchemaWithDefaultValuesT extends z.ZodRawShape, - SchemaWithDefaultValuesUnknownKeys extends z.UnknownKeysParam, - SchemaWithDefaultValuesCatchall extends z.ZodTypeAny, - - Values extends object, - PartialValues extends Partial, - >( - this: ZodSchemaClass, - ) { - return this.schemaWithDefaultValues.transform(values => new this(values)) - } - }) - .build() -- 2.49.1 From 98ae430249a81211a5731d18b994cdf73e57acd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 04:30:33 +0100 Subject: [PATCH 109/136] ZodSchemaObject work --- src/traits/JsonifiableZodSchemaObject.ts | 89 ------------------------ src/traits/ZodSchemaObject.ts | 29 ++++++++ 2 files changed, 29 insertions(+), 89 deletions(-) diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts index 2ed27fe..b9b4a15 100644 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -7,94 +7,5 @@ import { parseZodTypeEffect } from "../util" export const JsonifiableZodSchemaObject = trait .implement(Super => class JsonifiableZodSchemaObject extends Super { - jsonify< - 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: Values & JsonifiableZodSchemas< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - >, - - params?: Partial, - ) { - return this.jsonifySchema.parse(this, params) - } - - async jsonifyPromise< - 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: Values & JsonifiableZodSchemas< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - >, - - params?: Partial, - ) { - return this.jsonifySchema.parseAsync(this, params) - } - - jsonifyEffect< - 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: Values & JsonifiableZodSchemas< - JsonifySchemaT, - JsonifySchemaUnknownKeys, - JsonifySchemaCatchall, - - DejsonifySchemaT, - DejsonifySchemaUnknownKeys, - DejsonifySchemaCatchall, - - JsonifiedValues, - Values - >, - - params?: Partial, - ) { - return parseZodTypeEffect(this.jsonifySchema, this, params) - } }) .build() diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index b4f1e29..be4daf9 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -85,3 +85,32 @@ export const ZodSchemaObject = < } }) .build() + + +export type ZodSchemaObjectTrait< + 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, +> = ( + ReturnType< + typeof ZodSchemaObject< + SchemaT, + SchemaUnknownKeys, + SchemaCatchall, + + SchemaWithDefaultValuesT, + SchemaWithDefaultValuesUnknownKeys, + SchemaWithDefaultValuesCatchall, + + Values, + PartialValues + > + > +) -- 2.49.1 From 69d47ba3cfb6efe809c26eb248e7633e82c1f708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 04:50:55 +0100 Subject: [PATCH 110/136] instantiationTransform --- src/traits/ZodSchemaObject.ts | 37 ++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index be4daf9..48b2f44 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -35,22 +35,19 @@ export const ZodSchemaObject = < static readonly schema = schema static readonly schemaWithDefaultsValues = schemaWithDefaultValues(schema) - static instantiationSchema< - Self extends StaticMembers>, - Instance extends Values, - >( - this: Class & Self - ) { - return this.schema.transform(values => new this(values)) - } + static instantiationTransform< + Instance extends Values, - static instantiationSchemaWithDefaultValues< - Self extends StaticMembers>, - Instance extends Values, + T extends z.ZodRawShape, + UnknownKeys extends z.UnknownKeysParam, + Catchall extends z.ZodTypeAny, + Output extends Values, + Input, >( - this: Class & Self + this: Class, + schema: z.ZodObject, ) { - return this.schemaWithDefaultsValues.transform(values => new this(values)) + return schema.transform(values => new this(values)) } @@ -61,7 +58,9 @@ export const ZodSchemaObject = < this: Class & Self, ...[values, params]: NewZodSchemaInstanceArgs ) { - return this.instantiationSchemaWithDefaultValues().parse(values, params) + return this + .instantiationTransform(this.schemaWithDefaultsValues) + .parse(values, params) } static createPromise< @@ -71,7 +70,9 @@ export const ZodSchemaObject = < this: Class & Self, ...[values, params]: NewZodSchemaInstanceArgs ) { - return this.instantiationSchemaWithDefaultValues().parseAsync(values, params) + return this + .instantiationTransform(this.schemaWithDefaultsValues) + .parseAsync(values, params) } static createEffect< @@ -81,7 +82,11 @@ export const ZodSchemaObject = < this: Class & Self, ...[values, params]: NewZodSchemaInstanceArgs ) { - return parseZodSchemaEffect(this.instantiationSchemaWithDefaultValues(), values, params) + return parseZodSchemaEffect( + this.instantiationTransform(this.schemaWithDefaultsValues), + values, + params, + ) } }) .build() -- 2.49.1 From aefca6657b54ccca9badf05d6d347b4a674e0433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 04:53:33 +0100 Subject: [PATCH 111/136] ZodSchemaObject fix --- src/builders/ZodSchemaClassBuilder.ts | 2 +- src/traits/ZodSchemaObject.ts | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index 0445816..ddadfde 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -56,7 +56,7 @@ extends TraitExpressionBuilder { StaticMembers ), - [...this.expressionTraits, ZodSchemaObject(schema, schemaWithDefaultValues)], + [...this.expressionTraits, ZodSchemaObject(schema, schemaWithDefaultValues(schema))], ) } diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index 48b2f44..860c68a 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -25,15 +25,12 @@ export const ZodSchemaObject = < Values extends object, PartialValues extends Partial, >( - schema: z.ZodObject, - - schemaWithDefaultValues: ( - schema: z.ZodObject - ) => z.ZodObject, + schema: z.ZodObject, + schemaWithDefaultValues: z.ZodObject, ) => trait .implement(Super => class ZodSchemaObject extends Super { static readonly schema = schema - static readonly schemaWithDefaultsValues = schemaWithDefaultValues(schema) + static readonly schemaWithDefaultsValues = schemaWithDefaultValues static instantiationTransform< Instance extends Values, -- 2.49.1 From 4392d43211e640368f0e21ccb565801159df4f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 28 Feb 2024 05:02:50 +0100 Subject: [PATCH 112/136] ZodSchemaObject work --- src/traits/ZodSchemaObject.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index 860c68a..fcecae9 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -49,10 +49,12 @@ export const ZodSchemaObject = < static create< - Self extends StaticMembers>, - Instance extends Values, + Instance extends Values >( - this: Class & Self, + this: ( + Class & + StaticMembers> + ), ...[values, params]: NewZodSchemaInstanceArgs ) { return this @@ -61,10 +63,12 @@ export const ZodSchemaObject = < } static createPromise< - Self extends StaticMembers>, - Instance extends Values, + Instance extends Values >( - this: Class & Self, + this: ( + Class & + StaticMembers> + ), ...[values, params]: NewZodSchemaInstanceArgs ) { return this @@ -73,10 +77,12 @@ export const ZodSchemaObject = < } static createEffect< - Self extends StaticMembers>, - Instance extends Values, + Instance extends Values >( - this: Class & Self, + this: ( + Class & + StaticMembers> + ), ...[values, params]: NewZodSchemaInstanceArgs ) { return parseZodSchemaEffect( -- 2.49.1 From b680295b6c728853d37cf17383ea13c37c330fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 8 Mar 2024 20:11:14 +0100 Subject: [PATCH 113/136] Dependencies upgrade --- bun.lockb | Bin 160492 -> 160864 bytes package.json | 10 +++++----- src/traits/ZodSchemaObject.ts | 18 +++++++++--------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/bun.lockb b/bun.lockb index 5d5ba8ca8ef2f27140dfcde9cf679840c5c9a59e..a6c5f621b3ece0ff49703537fb66babfe2366431 100755 GIT binary patch delta 19858 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 Km3F#k1OE?@2P6Cd delta 19270 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] @@ -32,7 +32,7 @@ export const ZodSchemaObject = < static readonly schema = schema static readonly schemaWithDefaultsValues = schemaWithDefaultValues - static instantiationTransform< + static transform< Instance extends Values, T extends z.ZodRawShape, @@ -53,12 +53,12 @@ export const ZodSchemaObject = < >( this: ( Class & - StaticMembers> + ImplStatic ), ...[values, params]: NewZodSchemaInstanceArgs ) { return this - .instantiationTransform(this.schemaWithDefaultsValues) + .transform(this.schemaWithDefaultsValues) .parse(values, params) } @@ -67,12 +67,12 @@ export const ZodSchemaObject = < >( this: ( Class & - StaticMembers> + ImplStatic ), ...[values, params]: NewZodSchemaInstanceArgs ) { return this - .instantiationTransform(this.schemaWithDefaultsValues) + .transform(this.schemaWithDefaultsValues) .parseAsync(values, params) } @@ -81,12 +81,12 @@ export const ZodSchemaObject = < >( this: ( Class & - StaticMembers> + ImplStatic ), ...[values, params]: NewZodSchemaInstanceArgs ) { return parseZodSchemaEffect( - this.instantiationTransform(this.schemaWithDefaultsValues), + this.transform(this.schemaWithDefaultsValues), values, params, ) -- 2.49.1 From ce66ffd0c583c86ff293f5e02eb778ca22d1a938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 8 Mar 2024 23:59:07 +0100 Subject: [PATCH 114/136] JsonifiableZodSchemaObject work --- src/builders/ZodSchemaClassBuilder.ts | 81 +++++---------------- src/tests.ts | 1 + src/traits/JsonifiableZodSchemaObject.ts | 92 ++++++++++++++++++++++-- 3 files changed, 106 insertions(+), 68 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index ddadfde..5c09c25 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -12,10 +12,12 @@ import { StaticMembers } from "../util" export class ZodSchemaClassBuilder< Superclass extends AbstractClass, const Traits extends readonly Trait[], -> -extends TraitExpressionBuilder { +> { declare ["constructor"]: typeof ZodSchemaClassBuilder + constructor(readonly expression: TraitExpressionBuilder) {} + + schema< Super extends AbstractClass & { schema?: never, schemaWithDefaultValues?: never }, @@ -40,7 +42,7 @@ extends TraitExpressionBuilder { ) => z.ZodObject }, ) { - class ZodSchemaObjectConstructor extends (this.expressionSuperclass as AbstractClass) { + class ZodSchemaObjectConstructor extends (this.expression.expressionSuperclass as AbstractClass) { constructor(values: Values) { super() Object.assign(this, values) @@ -48,15 +50,17 @@ extends TraitExpressionBuilder { } return new this.constructor( - ZodSchemaObjectConstructor as unknown as ( - AbstractClass< - InstanceType & Values, - [values: Values] - > & - StaticMembers - ), - - [...this.expressionTraits, ZodSchemaObject(schema, schemaWithDefaultValues(schema))], + this.expression + .extends( + ZodSchemaObjectConstructor as unknown as ( + AbstractClass< + InstanceType & Values, + [values: Values] + > & + StaticMembers + ) + ) + .expresses(ZodSchemaObject(schema, schemaWithDefaultValues(schema))) ) } @@ -101,10 +105,10 @@ extends TraitExpressionBuilder { ) => z.ZodObject }, ) { - const jsonifySchema = props.jsonifySchema(this.expressionSuperclass.schema) - const dejsonifySchema = props.dejsonifySchema(this.expressionSuperclass.schema) + const jsonifySchema = props.jsonifySchema(this.expression.expressionSuperclass.schema) + const dejsonifySchema = props.dejsonifySchema(this.expression.expressionSuperclass.schema) - class JsonifiableSchemas extends (this.expressionSuperclass as AbstractClass) { + class JsonifiableSchemas extends (this.expression.expressionSuperclass as AbstractClass) { static readonly jsonifySchema = jsonifySchema readonly jsonifySchema = jsonifySchema static readonly dejsonifySchema = dejsonifySchema @@ -132,52 +136,5 @@ extends TraitExpressionBuilder { } } -export interface ZodSchemaClassBuilder< - Superclass extends AbstractClass, - Traits extends readonly Trait[], -> { - extends< - Super extends AbstractClass - >( - // \/ Ensures `extends` can only be called once at the beginning - this: ZodSchemaClassBuilder, - superclass: Super, - ): ZodSchemaClassBuilder - - expresses< - const T extends readonly Trait< - TraitExpression< - typeof TraitExpression.NullSuperclass, - readonly Trait[] - >, - any, - any, - any - >[] - >( - ...traits: T - ): ZodSchemaClassBuilder< - Superclass, - TraitExpressionBuilder.ExpressesReturnTypeTraits - > - - expressesFirst< - const T extends readonly Trait< - TraitExpression< - typeof TraitExpression.NullSuperclass, - readonly Trait[] - >, - any, - any, - any - >[] - >( - ...traits: T - ): ZodSchemaClassBuilder< - Superclass, - TraitExpressionBuilder.ExpressesFirstReturnTypeTraits - > -} - export const zodSchemaClass = new ZodSchemaClassBuilder(TraitExpression.NullSuperclass, []) diff --git a/src/tests.ts b/src/tests.ts index fa638e9..2c15f27 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -18,6 +18,7 @@ const exp = zodSchemaClass id: s.shape.id.default(-1n), }), }) + .expression .expresses(MobXObservableZodSchemaObject) .build() diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts index b9b4a15..d4e915e 100644 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -1,11 +1,91 @@ -import { trait } from "@thilawyn/traitify-ts" +import { ImplStatic, expression } from "@thilawyn/traitify-ts" +import { Class } from "type-fest" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" -import { JsonifiableZodSchemas } from "../shapes/JsonifiableZodSchemaClass" -import { parseZodTypeEffect } from "../util" +import { parseZodSchemaEffect } from "../util" +import { ZodSchemaObject } from "./ZodSchemaObject" -export const JsonifiableZodSchemaObject = trait - .implement(Super => class JsonifiableZodSchemaObject extends Super { - }) +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 { + static readonly jsonifySchema = jsonifySchema + static readonly dejsonifySchema = dejsonifySchema + + + 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() -- 2.49.1 From dd0610264d0418408603c1cb5ec5221a725dfdc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 00:18:05 +0100 Subject: [PATCH 115/136] CreateArgs --- src/tests.ts | 2 +- src/traits/ZodSchemaObject.ts | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/tests.ts b/src/tests.ts index 2c15f27..e272e30 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -26,7 +26,7 @@ const exp = zodSchemaClass @exp.staticImplements class User extends exp.extends implements Implements {} -const inst = User.create({ id: 1n, name: "User" }) +const inst = User.create({ id: 1n, name: "User" }, ) // console.log(inst.name) const instEffect = User.createEffect({ id: 1n, name: "User" }) diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index 08b3680..18cc34e 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -4,12 +4,10 @@ import { z } from "zod" import { parseZodSchemaEffect } from "../util" -type ParseParamsArgs = [] | [params: Partial] - -type NewZodSchemaInstanceArgs = ( +type CreateArgs = ( HasRequiredKeys extends true - ? [values: Input, ...args: ParseParamsArgs] - : [] | [values: Input, ...args: ParseParamsArgs] + ? [values: Input, params?: Partial] + : [] | [values: Input, params?: Partial] ) @@ -55,7 +53,7 @@ export const ZodSchemaObject = < Class & ImplStatic ), - ...[values, params]: NewZodSchemaInstanceArgs + ...[values, params]: CreateArgs ) { return this .transform(this.schemaWithDefaultsValues) @@ -69,7 +67,7 @@ export const ZodSchemaObject = < Class & ImplStatic ), - ...[values, params]: NewZodSchemaInstanceArgs + ...[values, params]: CreateArgs ) { return this .transform(this.schemaWithDefaultsValues) @@ -83,7 +81,7 @@ export const ZodSchemaObject = < Class & ImplStatic ), - ...[values, params]: NewZodSchemaInstanceArgs + ...[values, params]: CreateArgs ) { return parseZodSchemaEffect( this.transform(this.schemaWithDefaultsValues), -- 2.49.1 From 24b549ffaaf97d68c83ef5bdfa75f54d209fb63e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 00:31:10 +0100 Subject: [PATCH 116/136] JsonifiableZodSchemaObject done --- src/traits/JsonifiableZodSchemaObject.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts index d4e915e..4dbd88a 100644 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -41,6 +41,27 @@ export const JsonifiableZodSchemaObject = < static readonly dejsonifySchema = dejsonifySchema + jsonify(params?: Partial) { + return (this.constructor as unknown as ImplStatic) + .jsonifySchema + .parse(this, params) + } + + jsonifyPromise(params?: Partial) { + return (this.constructor as unknown as ImplStatic) + .jsonifySchema + .parseAsync(this, params) + } + + jsonifyEffect(params?: Partial) { + return parseZodSchemaEffect( + (this.constructor as unknown as ImplStatic).jsonifySchema, + this, + params, + ) + } + + static dejsonify< Instance extends Values >( -- 2.49.1 From 81efdaab01c35d0ae6a9bbc2b8546ccb51f97b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 00:43:53 +0100 Subject: [PATCH 117/136] ZodSchemaClassBuilder work --- src/builders/ZodSchemaClassBuilder.ts | 39 +++++++-------------------- src/tests.ts | 9 +++++++ 2 files changed, 19 insertions(+), 29 deletions(-) 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() -- 2.49.1 From 12b73e39e30adb22ea2f29d5b62e5f6848de4a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 01:29:38 +0100 Subject: [PATCH 118/136] ZodSchemaClassBuilder work --- src/builders/ZodSchemaClassBuilder.ts | 12 +++++------- src/tests.ts | 12 ++++++------ src/traits/ZodSchemaObject.ts | 10 +++++----- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index 32d09df..eb5dceb 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -1,10 +1,9 @@ -import { Trait, TraitExpressionBuilder, expression } from "@thilawyn/traitify-ts" +import { Trait, TraitClass, 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 { JsonifiableZodSchemaObject } from "../traits/JsonifiableZodSchemaObject" -import { ZodSchemaObject } from "../traits/ZodSchemaObject" +import { ZodSchemaObject, ZodSchemaObjectTrait } from "../traits/ZodSchemaObject" import { StaticMembers } from "../util" @@ -64,9 +63,8 @@ export class ZodSchemaClassBuilder< } jsonifiable< - Super extends ZodSchemaAbstractClass - & { jsonifySchema?: never, dejsonifySchema?: never }, - Instance extends Values, + Super extends TraitClass> + & { jsonifySchema?: never, dejsonifySchema?: never }, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -90,7 +88,7 @@ export class ZodSchemaClassBuilder< JsonifiedValues extends JsonifiableObject, >( this: ZodSchemaClassBuilder< - Super | ZodSchemaAbstractClass, + Super | TraitClass>, Traits >, diff --git a/src/tests.ts b/src/tests.ts index 296e483..676f6c4 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -18,15 +18,15 @@ const exp = zodSchemaClass id: s.shape.id.default(-1n), }), }) - .jsonifiable({ - jsonifySchema: s => s.extend({ + // .jsonifiable({ + // jsonifySchema: s => s.extend({ - }), + // }), - dejsonifySchema: s => s.extend({ + // dejsonifySchema: s => s.extend({ - }), - }) + // }), + // }) .expression .expresses(MobXObservableZodSchemaObject) .build() diff --git a/src/traits/ZodSchemaObject.ts b/src/traits/ZodSchemaObject.ts index 18cc34e..e866fdf 100644 --- a/src/traits/ZodSchemaObject.ts +++ b/src/traits/ZodSchemaObject.ts @@ -27,8 +27,8 @@ export const ZodSchemaObject = < schemaWithDefaultValues: z.ZodObject, ) => trait .implement(Super => class ZodSchemaObject extends Super { - static readonly schema = schema - static readonly schemaWithDefaultsValues = schemaWithDefaultValues + static readonly schema = schema + static readonly schemaWithDefaultValues = schemaWithDefaultValues static transform< Instance extends Values, @@ -56,7 +56,7 @@ export const ZodSchemaObject = < ...[values, params]: CreateArgs ) { return this - .transform(this.schemaWithDefaultsValues) + .transform(this.schemaWithDefaultValues) .parse(values, params) } @@ -70,7 +70,7 @@ export const ZodSchemaObject = < ...[values, params]: CreateArgs ) { return this - .transform(this.schemaWithDefaultsValues) + .transform(this.schemaWithDefaultValues) .parseAsync(values, params) } @@ -84,7 +84,7 @@ export const ZodSchemaObject = < ...[values, params]: CreateArgs ) { return parseZodSchemaEffect( - this.transform(this.schemaWithDefaultsValues), + this.transform(this.schemaWithDefaultValues), values, params, ) -- 2.49.1 From 732780342dc4ea1c8de654c3936d10615054886b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 01:52:17 +0100 Subject: [PATCH 119/136] ZodSchemaClassBuilder work --- src/builders/ZodSchemaClassBuilder.ts | 18 ++++-------------- src/tests.ts | 12 ++++++------ 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index eb5dceb..6c701d2 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -4,11 +4,10 @@ import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { JsonifiableZodSchemaObject } from "../traits/JsonifiableZodSchemaObject" import { ZodSchemaObject, ZodSchemaObjectTrait } from "../traits/ZodSchemaObject" -import { StaticMembers } from "../util" export class ZodSchemaClassBuilder< - Superclass extends AbstractClass, + Superclass extends AbstractClass, const Traits extends readonly Trait[], > { declare ["constructor"]: typeof ZodSchemaClassBuilder @@ -17,8 +16,6 @@ export class ZodSchemaClassBuilder< schema< - Super extends AbstractClass & { schema?: never, schemaWithDefaultValues?: never }, - SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, @@ -30,7 +27,7 @@ export class ZodSchemaClassBuilder< Values extends object, PartialValues extends Partial, >( - this: ZodSchemaClassBuilder, + this: ZodSchemaClassBuilder, { schema, schemaWithDefaultValues }: { schema: z.ZodObject @@ -40,9 +37,8 @@ export class ZodSchemaClassBuilder< ) => z.ZodObject }, ) { - class ZodSchemaObjectConstructor extends (this.expression.expressionSuperclass as AbstractClass) { + abstract class ZodSchemaObjectConstructor { constructor(values: Values) { - super() Object.assign(this, values) } } @@ -50,13 +46,7 @@ export class ZodSchemaClassBuilder< return new this.constructor( this.expression .extends( - ZodSchemaObjectConstructor as unknown as ( - AbstractClass< - InstanceType & Values, - [values: Values] - > & - StaticMembers - ) + ZodSchemaObjectConstructor as AbstractClass ) .expresses(ZodSchemaObject(schema, schemaWithDefaultValues(schema))) ) diff --git a/src/tests.ts b/src/tests.ts index 676f6c4..296e483 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -18,15 +18,15 @@ const exp = zodSchemaClass id: s.shape.id.default(-1n), }), }) - // .jsonifiable({ - // jsonifySchema: s => s.extend({ + .jsonifiable({ + jsonifySchema: s => s.extend({ - // }), + }), - // dejsonifySchema: s => s.extend({ + dejsonifySchema: s => s.extend({ - // }), - // }) + }), + }) .expression .expresses(MobXObservableZodSchemaObject) .build() -- 2.49.1 From f57360645b51825f48ae05b75d6add18345a79ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 02:07:56 +0100 Subject: [PATCH 120/136] ZodSchemaClassBuilder work --- src/builders/ZodSchemaClassBuilder.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index 6c701d2..c70acbd 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -1,4 +1,4 @@ -import { Trait, TraitClass, TraitExpressionBuilder, expression } 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" @@ -53,8 +53,8 @@ export class ZodSchemaClassBuilder< } jsonifiable< - Super extends TraitClass> - & { jsonifySchema?: never, dejsonifySchema?: never }, + Super extends AbstractClass, + T extends readonly [ZodSchemaObjectTrait], SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -78,8 +78,8 @@ export class ZodSchemaClassBuilder< JsonifiedValues extends JsonifiableObject, >( this: ZodSchemaClassBuilder< - Super | TraitClass>, - Traits + Super, + T | readonly [ZodSchemaObjectTrait] >, props: { -- 2.49.1 From b7e224d89b3f391ee51141e4885ad59417147772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 03:17:12 +0100 Subject: [PATCH 121/136] ZodSchemaClassBuilder work --- src/builders/ZodSchemaClassBuilder.ts | 67 ++++++++++++++++++--------- src/tests.ts | 10 ++-- 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/src/builders/ZodSchemaClassBuilder.ts b/src/builders/ZodSchemaClassBuilder.ts index c70acbd..e0f5d50 100644 --- a/src/builders/ZodSchemaClassBuilder.ts +++ b/src/builders/ZodSchemaClassBuilder.ts @@ -1,18 +1,23 @@ 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, ZodSchemaObjectTrait } from "../traits/ZodSchemaObject" +import { ZodSchemaObject } from "../traits/ZodSchemaObject" export class ZodSchemaClassBuilder< - Superclass extends AbstractClass, + Superclass extends AbstractClass, const Traits extends readonly Trait[], + Schemas extends object, > { declare ["constructor"]: typeof ZodSchemaClassBuilder - constructor(readonly expression: TraitExpressionBuilder) {} + constructor( + protected readonly expression: TraitExpressionBuilder, + protected readonly schemas: Schemas, + ) {} schema< @@ -27,9 +32,9 @@ export class ZodSchemaClassBuilder< Values extends object, PartialValues extends Partial, >( - this: ZodSchemaClassBuilder, + this: ZodSchemaClassBuilder, - { schema, schemaWithDefaultValues }: { + props: { schema: z.ZodObject schemaWithDefaultValues: ( @@ -45,16 +50,23 @@ export class ZodSchemaClassBuilder< return new this.constructor( this.expression - .extends( - ZodSchemaObjectConstructor as AbstractClass - ) - .expresses(ZodSchemaObject(schema, schemaWithDefaultValues(schema))) + .extends(ZodSchemaObjectConstructor as AbstractClass) + .expresses(ZodSchemaObject(props.schema, props.schemaWithDefaultValues(props.schema))), + + { + schema: props.schema, + schemaWithDefaultValues: props.schemaWithDefaultValues(props.schema), + } as const, ) } jsonifiable< - Super extends AbstractClass, - T extends readonly [ZodSchemaObjectTrait], + S extends { + readonly schema: z.ZodObject, + readonly schemaWithDefaultValues: z.ZodObject, + jsonifySchema?: never + dejsonifySchema?: never + }, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, @@ -77,10 +89,12 @@ export class ZodSchemaClassBuilder< JsonifiedValues extends JsonifiableObject, >( - this: ZodSchemaClassBuilder< - Super, - T | readonly [ZodSchemaObjectTrait] - >, + this: ZodSchemaClassBuilder, + readonly schemaWithDefaultValues: z.ZodObject, + jsonifySchema?: never + dejsonifySchema?: never + }>, props: { jsonifySchema: ( @@ -95,15 +109,26 @@ export class ZodSchemaClassBuilder< return new this.constructor( this.expression.expresses( JsonifiableZodSchemaObject( - this.expression.expressionSuperclass.schema, - this.expression.expressionSuperclass.schemaWithDefaultValues, - props.jsonifySchema(this.expression.expressionSuperclass.schema), - props.dejsonifySchema(this.expression.expressionSuperclass.schema), + this.schemas.schema, + this.schemas.schemaWithDefaultValues, + props.jsonifySchema(this.schemas.schema), + props.dejsonifySchema(this.schemas.schema), ) - ) + ), + + { + ...this.schemas as S, + jsonifySchema: props.jsonifySchema(this.schemas.schema), + dejsonifySchema: props.dejsonifySchema(this.schemas.schema), + } as const, ) } + + + toExpression() { + return this.expression + } } -export const zodSchemaClass = new ZodSchemaClassBuilder(expression) +export const zodSchemaClass = new ZodSchemaClassBuilder(expression, {}) diff --git a/src/tests.ts b/src/tests.ts index 296e483..2f2644d 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,6 +1,7 @@ import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" +import { dejsonify, jsonify } from "./schema/jsonify" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" @@ -20,14 +21,14 @@ const exp = zodSchemaClass }) .jsonifiable({ jsonifySchema: s => s.extend({ - + id: jsonify.bigint(s.shape.id) }), dejsonifySchema: s => s.extend({ - + id: dejsonify.bigint(s.shape.id) }), }) - .expression + .toExpression() .expresses(MobXObservableZodSchemaObject) .build() @@ -39,7 +40,8 @@ const inst = User.create({ id: 1n, name: "User" }, ) // console.log(inst.name) const instEffect = User.createEffect({ id: 1n, name: "User" }) -// const jsonifiedUser = await inst.jsonifyPromise() +const jsonifiedUser = await inst.jsonifyPromise() + // const AdminUserProto = User.extend() // .schema({ -- 2.49.1 From 34f57f017fba9da9d4118d61136d730f451971dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 03:22:15 +0100 Subject: [PATCH 122/136] Tests --- src/tests.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tests.ts b/src/tests.ts index 2f2644d..69916cb 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -41,6 +41,7 @@ const inst = User.create({ id: 1n, name: "User" }, ) const instEffect = User.createEffect({ id: 1n, name: "User" }) const jsonifiedUser = await inst.jsonifyPromise() +const dejsonifiedInst = await User.dejsonifyPromise(jsonifiedUser) // const AdminUserProto = User.extend() -- 2.49.1 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 123/136] 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() -- 2.49.1 From 663db5fab2cb246672d3cb17f0ab5ab1fc40fb46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 03:45:13 +0100 Subject: [PATCH 124/136] Build system work --- package.json | 28 +++++++++------------------- rollup.config.ts | 5 ++--- src/lib.ts | 4 ++++ src/schema/lib.ts | 1 + 4 files changed, 16 insertions(+), 22 deletions(-) create mode 100644 src/schema/lib.ts diff --git a/package.json b/package.json index abd207c..a67f328 100644 --- a/package.json +++ b/package.json @@ -11,32 +11,22 @@ "exports": { ".": { "import": { - "types": "./dist/schemable.d.mts", - "default": "./dist/schemable.mjs" + "types": "./dist/lib.d.mts", + "default": "./dist/lib.mjs" }, "require": { - "types": "./dist/schemable.d.cts", - "default": "./dist/schemable.cjs" + "types": "./dist/lib.d.cts", + "default": "./dist/lib.cjs" } }, - "./jsonifiable": { + "./schema": { "import": { - "types": "./dist/jsonifiable.d.mts", - "default": "./dist/jsonifiable.mjs" + "types": "./dist/schema.d.mts", + "default": "./dist/schema.mjs" }, "require": { - "types": "./dist/jsonifiable.d.cts", - "default": "./dist/jsonifiable.cjs" - } - }, - "./observable": { - "import": { - "types": "./dist/observable.d.mts", - "default": "./dist/observable.mjs" - }, - "require": { - "types": "./dist/observable.d.cts", - "default": "./dist/observable.cjs" + "types": "./dist/schema.d.cts", + "default": "./dist/schema.cjs" } } }, diff --git a/rollup.config.ts b/rollup.config.ts index 292a90c..803378f 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -38,7 +38,6 @@ export const createBundleConfig = ( export default [ - createBundleConfig("src/index.ts", "."), - createBundleConfig("src/jsonifiable/index.ts", "./jsonifiable"), - createBundleConfig("src/observable/index.ts", "./observable"), + createBundleConfig("src/lib.ts", "."), + createBundleConfig("src/schema/lib.ts", "."), ] diff --git a/src/lib.ts b/src/lib.ts index ea1ff40..f2bd6a8 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -1 +1,5 @@ +export { ZodSchemaClassBuilder } from "./builders/ZodSchemaClassBuilder" export { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" +export { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" +export { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" +export { ZodSchemaObject, ZodSchemaObjectTrait } from "./traits/ZodSchemaObject" diff --git a/src/schema/lib.ts b/src/schema/lib.ts new file mode 100644 index 0000000..6e045e6 --- /dev/null +++ b/src/schema/lib.ts @@ -0,0 +1 @@ +export * from "./jsonify" -- 2.49.1 From b98a7cf3fc612db7ac9d805b14f79b9fb6b6bf52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 03:52:54 +0100 Subject: [PATCH 125/136] Build work --- rollup.config.ts | 2 +- src/builders/ZodSchemaClassExtender.ts | 312 ++++++++++++------------ src/lib.ts | 2 +- src/traits/ExtendableZodSchemaObject.ts | 28 +-- 4 files changed, 172 insertions(+), 172 deletions(-) diff --git a/rollup.config.ts b/rollup.config.ts index 803378f..566206a 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -39,5 +39,5 @@ export const createBundleConfig = ( export default [ createBundleConfig("src/lib.ts", "."), - createBundleConfig("src/schema/lib.ts", "."), + createBundleConfig("src/schema/lib.ts", "./schema"), ] diff --git a/src/builders/ZodSchemaClassExtender.ts b/src/builders/ZodSchemaClassExtender.ts index 0fea1d6..d78a3c4 100644 --- a/src/builders/ZodSchemaClassExtender.ts +++ b/src/builders/ZodSchemaClassExtender.ts @@ -1,196 +1,196 @@ -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" +// 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 +// export class ZodSchemaClassExtender< +// Superclass extends AbstractClass, +// Subclass extends AbstractClass, +// > { +// declare ["constructor"]: typeof ZodSchemaClassExtender - constructor( - readonly superclass: Superclass, - readonly subclass: Subclass, - ) {} +// constructor( +// readonly superclass: Superclass, +// readonly subclass: Subclass, +// ) {} - schema< - Super extends ZodSchemaAbstractClass, +// schema< +// Super extends ZodSchemaAbstractClass, - SuperSchemaT extends z.ZodRawShape, - SuperSchemaUnknownKeys extends z.UnknownKeysParam, - SuperSchemaCatchall extends z.ZodTypeAny, +// SuperSchemaT extends z.ZodRawShape, +// SuperSchemaUnknownKeys extends z.UnknownKeysParam, +// SuperSchemaCatchall extends z.ZodTypeAny, - SuperValues extends object, - SuperDefaultValues extends Partial, +// SuperValues extends object, +// SuperDefaultValues extends Partial, - SchemaT extends z.ZodRawShape, - SchemaUnknownKeys extends z.UnknownKeysParam, - SchemaCatchall extends z.ZodTypeAny, +// SchemaT extends z.ZodRawShape, +// SchemaUnknownKeys extends z.UnknownKeysParam, +// SchemaCatchall extends z.ZodTypeAny, - Values extends SuperValues, - DefaultValues extends Partial, - >( - this: ZodSchemaClassExtender< - Super | ZodSchemaAbstractClass, - any - >, +// 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) +// 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 - } +// class Schemas extends (this.superclass as AbstractClass) { +// static readonly schema = schema +// static readonly defaultValues = defaultValues +// } - return new this.constructor( - this.superclass as Super, +// return new this.constructor( +// this.superclass as Super, - Schemas as unknown as AbstractClass< - Simplify< - Extend<[InstanceType, Values]> - >, +// Schemas as unknown as AbstractClass< +// Simplify< +// Extend<[InstanceType, Values]> +// >, - [values: Values] - > & - Simplify< - Override<[ - StaticMembers, - StaticMembers, - ]> - > - ) - } +// [values: Values] +// > & +// Simplify< +// Override<[ +// StaticMembers, +// StaticMembers, +// ]> +// > +// ) +// } - jsonifiable< - /** Superclass jsonifiable schemas */ - Super extends JsonifiableZodSchemaAbstractClass< - any, +// jsonifiable< +// /** Superclass jsonifiable schemas */ +// Super extends JsonifiableZodSchemaAbstractClass< +// any, - SuperJsonifySchemaT, - SuperJsonifySchemaUnknownKeys, - SuperJsonifySchemaCatchall, +// SuperJsonifySchemaT, +// SuperJsonifySchemaUnknownKeys, +// SuperJsonifySchemaCatchall, - SuperDejsonifySchemaT, - SuperDejsonifySchemaUnknownKeys, - SuperDejsonifySchemaCatchall, +// SuperDejsonifySchemaT, +// SuperDejsonifySchemaUnknownKeys, +// SuperDejsonifySchemaCatchall, - SuperJsonifiedValues, - SuperValues - >, +// SuperJsonifiedValues, +// SuperValues +// >, - SuperJsonifySchemaT extends z.ZodRawShape, - SuperJsonifySchemaUnknownKeys extends z.UnknownKeysParam, - SuperJsonifySchemaCatchall extends z.ZodTypeAny, +// SuperJsonifySchemaT extends z.ZodRawShape, +// SuperJsonifySchemaUnknownKeys extends z.UnknownKeysParam, +// SuperJsonifySchemaCatchall extends z.ZodTypeAny, - SuperDejsonifySchemaT extends z.ZodRawShape, - SuperDejsonifySchemaUnknownKeys extends z.UnknownKeysParam, - SuperDejsonifySchemaCatchall extends z.ZodTypeAny, +// SuperDejsonifySchemaT extends z.ZodRawShape, +// SuperDejsonifySchemaUnknownKeys extends z.UnknownKeysParam, +// SuperDejsonifySchemaCatchall extends z.ZodTypeAny, - SuperJsonifiedValues extends JsonifiableObject, - SuperValues extends object, +// SuperJsonifiedValues extends JsonifiableObject, +// SuperValues extends object, - /** New schemas */ - Self extends ZodSchemaAbstractClass, +// /** New schemas */ +// Self extends ZodSchemaAbstractClass, - SelfSchemaT extends z.ZodRawShape, - SelfSchemaUnknownKeys extends z.UnknownKeysParam, - SelfSchemaCatchall extends z.ZodTypeAny, +// SelfSchemaT extends z.ZodRawShape, +// SelfSchemaUnknownKeys extends z.UnknownKeysParam, +// SelfSchemaCatchall extends z.ZodTypeAny, - SelfValues extends object, - SelfDefaultValues extends Partial, +// SelfValues extends object, +// SelfDefaultValues extends Partial, - /* New jsonifiable schemas */ - JsonifySchemaT extends z.ZodRawShape, - JsonifySchemaUnknownKeys extends z.UnknownKeysParam, - JsonifySchemaCatchall extends z.ZodTypeAny, +// /* 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, +// DejsonifySchemaT extends z.ZodRawShape, +// DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, +// DejsonifySchemaCatchall extends z.ZodTypeAny, - JsonifiedValues extends SuperJsonifiedValues, - Values extends SelfValues, - >( - this: ZodSchemaClassExtender< - Super | JsonifiableZodSchemaAbstractClass< - any, +// JsonifiedValues extends SuperJsonifiedValues, +// Values extends SelfValues, +// >( +// this: ZodSchemaClassExtender< +// Super | JsonifiableZodSchemaAbstractClass< +// any, - SuperJsonifySchemaT, - SuperJsonifySchemaUnknownKeys, - SuperJsonifySchemaCatchall, +// SuperJsonifySchemaT, +// SuperJsonifySchemaUnknownKeys, +// SuperJsonifySchemaCatchall, - SuperDejsonifySchemaT, - SuperDejsonifySchemaUnknownKeys, - SuperDejsonifySchemaCatchall, +// SuperDejsonifySchemaT, +// SuperDejsonifySchemaUnknownKeys, +// SuperDejsonifySchemaCatchall, - SuperJsonifiedValues, - SuperValues - >, +// SuperJsonifiedValues, +// SuperValues +// >, - Self | ZodSchemaAbstractClass - >, +// Self | ZodSchemaAbstractClass +// >, - props: { - jsonifySchema: ( - schema: Self["schema"], - jsonifySchema: Super["jsonifySchema"], - ) => z.ZodObject +// 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) +// 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 - } +// 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, +// return new this.constructor( +// this.superclass as Super, - JsonifiableSchemas as unknown as AbstractClass< - Simplify< - Override<[InstanceType, JsonifiableSchemas]> - >, +// JsonifiableSchemas as unknown as AbstractClass< +// Simplify< +// Override<[InstanceType, JsonifiableSchemas]> +// >, - ConstructorParameters< - ZodSchemaAbstractClass - > - > & - Simplify< - Override<[ - StaticMembers, - StaticMembers, - ]> - >, - ) - } +// ConstructorParameters< +// ZodSchemaAbstractClass +// > +// > & +// Simplify< +// Override<[ +// StaticMembers, +// StaticMembers, +// ]> +// >, +// ) +// } - toClass() { - return this.subclass - } +// toClass() { +// return this.subclass +// } - toExpressionBuilder() { - return expression.extends(this.subclass) - } -} +// toExpressionBuilder() { +// return expression.extends(this.subclass) +// } +// } diff --git a/src/lib.ts b/src/lib.ts index f2bd6a8..fa3a059 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -1,5 +1,5 @@ export { ZodSchemaClassBuilder } from "./builders/ZodSchemaClassBuilder" -export { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" +// export { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" export { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" export { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" export { ZodSchemaObject, ZodSchemaObjectTrait } from "./traits/ZodSchemaObject" diff --git a/src/traits/ExtendableZodSchemaObject.ts b/src/traits/ExtendableZodSchemaObject.ts index 2b232fb..0fc0891 100644 --- a/src/traits/ExtendableZodSchemaObject.ts +++ b/src/traits/ExtendableZodSchemaObject.ts @@ -1,16 +1,16 @@ -import { trait } from "@thilawyn/traitify-ts" -import { ZodSchemaClassExtender } from "../builders/ZodSchemaClassExtender" -import { ZodSchemaClass } from "../shapes/ZodSchemaClass" +// import { trait } from "@thilawyn/traitify-ts" +// import { ZodSchemaClassExtender } from "../builders/ZodSchemaClassExtender" +// import { ZodSchemaClass } from "../shapes/ZodSchemaClass" -export const ExtendableZodSchemaObject = trait - .implement(Super => class ExtendableZodSchemaObject extends Super { - static extend< - Self extends ZodSchemaClass, - >( - this: Self - ) { - return new ZodSchemaClassExtender(this, this) - } - }) - .build() +// export const ExtendableZodSchemaObject = trait +// .implement(Super => class ExtendableZodSchemaObject extends Super { +// static extend< +// Self extends ZodSchemaClass, +// >( +// this: Self +// ) { +// return new ZodSchemaClassExtender(this, this) +// } +// }) +// .build() -- 2.49.1 From 4061e26e358082f0e04e71a9a1bed17d6743f53b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 05:18:51 +0100 Subject: [PATCH 126/136] Dependencies upgrade --- bun.lockb | Bin 160864 -> 160864 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index a6c5f621b3ece0ff49703537fb66babfe2366431..2b12418ee244995c950c03e9a57efc3d88abf015 100755 GIT binary patch delta 165 zcmV;W09yax=n3HH36L%zm*aL-ekGDrXF^@V$A@UfRSdDC8*v!0yfC}QZ89~&u}(@H z0S}YG8Yi>B9KC};d3_L4s~^4Y#RJ2q63YecCd88C^AAkC$LrdhiQ1BJ)gCz+yoE%x z8#H66f`x&VXZI@g#%Er5ZUW-6J{p#kgT0`)y`TZ%6#+H3pSA&RKom7EbaG*7bZKUJ TEp&4&FfK7JF*Ua#_W?hBV312F delta 165 zcmV;W09yax=n3HH36L%zd@$;NUp=F2={BI5^OKgD6`-g5vXz}xxryjEFpMa7u}(@H z0S=SF8Yi>B9KC};-4(fAua6^=d&Hx-MM_*5y9%%!!^(y0eSb3*!omRwz;zIQh@C*J zp}(q;T&^@9b~D(hzS1wDnq1t$MhLqygT0`)y`TZ%6#+E2pSA&RKom4DbaG*7bZKUJ TEp&4&FfK7JF*LU!_W?hB>ZnV7 diff --git a/package.json b/package.json index a67f328..ed46bd8 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "@thilawyn/traitify-ts": "^0.1.14", + "@thilawyn/traitify-ts": "^0.1.15", "decimal.js": "^10.4.3", "effect": "^2.4.1", "lodash-es": "^4.17.21", -- 2.49.1 From bea12d3c6611845ce5e8efed253214eca3301b99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 05:32:46 +0100 Subject: [PATCH 127/136] Fix --- src/traits/JsonifiableZodSchemaObject.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/traits/JsonifiableZodSchemaObject.ts b/src/traits/JsonifiableZodSchemaObject.ts index 4dbd88a..c747a8b 100644 --- a/src/traits/JsonifiableZodSchemaObject.ts +++ b/src/traits/JsonifiableZodSchemaObject.ts @@ -37,25 +37,23 @@ export const JsonifiableZodSchemaObject = < .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 as unknown as ImplStatic) - .jsonifySchema - .parse(this, params) + return this.constructor.jsonifySchema.parse(this, params) } jsonifyPromise(params?: Partial) { - return (this.constructor as unknown as ImplStatic) - .jsonifySchema - .parseAsync(this, params) + return this.constructor.jsonifySchema.parseAsync(this, params) } jsonifyEffect(params?: Partial) { return parseZodSchemaEffect( - (this.constructor as unknown as ImplStatic).jsonifySchema, + this.constructor.jsonifySchema, this, params, ) -- 2.49.1 From 87ffcb1ab681ff0168bd4e2344b0cd0eb1861555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 05:39:16 +0100 Subject: [PATCH 128/136] Cleanup --- src/tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests.ts b/src/tests.ts index 69916cb..cd79ad3 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -36,7 +36,7 @@ const exp = zodSchemaClass @exp.staticImplements class User extends exp.extends implements Implements {} -const inst = User.create({ id: 1n, name: "User" }, ) +const inst = User.create({ id: 1n, name: "User" }) // console.log(inst.name) const instEffect = User.createEffect({ id: 1n, name: "User" }) -- 2.49.1 From abac0f3747895a32d12c2ac5598a09f7ad2729ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Mar 2024 21:38:37 +0100 Subject: [PATCH 129/136] jsonify -> jsonifiable --- src/schema/{jsonify => jsonifiable}/bigint.ts | 0 src/schema/{jsonify => jsonifiable}/date.ts | 0 src/schema/{jsonify => jsonifiable}/decimal.ts | 0 src/schema/{jsonify => jsonifiable}/index.ts | 0 src/schema/lib.ts | 2 +- src/tests.ts | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) rename src/schema/{jsonify => jsonifiable}/bigint.ts (100%) rename src/schema/{jsonify => jsonifiable}/date.ts (100%) rename src/schema/{jsonify => jsonifiable}/decimal.ts (100%) rename src/schema/{jsonify => jsonifiable}/index.ts (100%) diff --git a/src/schema/jsonify/bigint.ts b/src/schema/jsonifiable/bigint.ts similarity index 100% rename from src/schema/jsonify/bigint.ts rename to src/schema/jsonifiable/bigint.ts diff --git a/src/schema/jsonify/date.ts b/src/schema/jsonifiable/date.ts similarity index 100% rename from src/schema/jsonify/date.ts rename to src/schema/jsonifiable/date.ts diff --git a/src/schema/jsonify/decimal.ts b/src/schema/jsonifiable/decimal.ts similarity index 100% rename from src/schema/jsonify/decimal.ts rename to src/schema/jsonifiable/decimal.ts diff --git a/src/schema/jsonify/index.ts b/src/schema/jsonifiable/index.ts similarity index 100% rename from src/schema/jsonify/index.ts rename to src/schema/jsonifiable/index.ts diff --git a/src/schema/lib.ts b/src/schema/lib.ts index 6e045e6..4ddb6dc 100644 --- a/src/schema/lib.ts +++ b/src/schema/lib.ts @@ -1 +1 @@ -export * from "./jsonify" +export * from "./jsonifiable" diff --git a/src/tests.ts b/src/tests.ts index cd79ad3..dff7e44 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,7 +1,7 @@ import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" -import { dejsonify, jsonify } from "./schema/jsonify" +import { dejsonify, jsonify } from "./schema/jsonifiable" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" -- 2.49.1 From 037d11aa2ab7b06eecade20109d3ddf3ab6b845d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 11 Mar 2024 00:50:05 +0100 Subject: [PATCH 130/136] Option type --- src/schema/effect/index.ts | 6 ++++++ src/schema/effect/option.ts | 21 +++++++++++++++++++++ src/schema/lib.ts | 1 + src/tests.ts | 5 +++++ 4 files changed, 33 insertions(+) create mode 100644 src/schema/effect/index.ts create mode 100644 src/schema/effect/option.ts diff --git a/src/schema/effect/index.ts b/src/schema/effect/index.ts new file mode 100644 index 0000000..904b057 --- /dev/null +++ b/src/schema/effect/index.ts @@ -0,0 +1,6 @@ +import { option } from "./option" + + +export const effect = { + option, +} as const diff --git a/src/schema/effect/option.ts b/src/schema/effect/option.ts new file mode 100644 index 0000000..b23f0b9 --- /dev/null +++ b/src/schema/effect/option.ts @@ -0,0 +1,21 @@ +import { Option } from "effect" +import { identity } from "lodash-es" +import { z } from "zod" + + +export const option = { + some: (schema: S) => z + .custom(v => Option.isOption(v) && Option.isSome(v), "Not an Option") + .pipe(z.object({ value: schema }).passthrough()) + .transform>>(identity), + + none: (_schema?: S) => + z.custom + : unknown + >>(v => Option.isOption(v) && Option.isNone(v), "Not an Option"), + + option: (schema: S) => + z.union([option.some(schema), option.none(schema)]), +} as const diff --git a/src/schema/lib.ts b/src/schema/lib.ts index 4ddb6dc..9339106 100644 --- a/src/schema/lib.ts +++ b/src/schema/lib.ts @@ -1 +1,2 @@ +export * from "./effect" export * from "./jsonifiable" diff --git a/src/tests.ts b/src/tests.ts index dff7e44..a9cd7f0 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -3,6 +3,11 @@ import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" import { dejsonify, jsonify } from "./schema/jsonifiable" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" +import { effect } from "./schema/effect" + + +const stringOption = effect.option.option(z.string()) +type T = z.output const exp = zodSchemaClass -- 2.49.1 From 2d2eb92f3a32573ba3bf6a00544ccde0313488c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 11 Mar 2024 00:56:18 +0100 Subject: [PATCH 131/136] Fix --- src/schema/effect/option.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/schema/effect/option.ts b/src/schema/effect/option.ts index b23f0b9..82becf6 100644 --- a/src/schema/effect/option.ts +++ b/src/schema/effect/option.ts @@ -4,6 +4,9 @@ import { z } from "zod" export const option = { + option: (schema: S) => + z.union([option.some(schema), option.none(schema)]), + some: (schema: S) => z .custom(v => Option.isOption(v) && Option.isSome(v), "Not an Option") .pipe(z.object({ value: schema }).passthrough()) @@ -15,7 +18,4 @@ export const option = { ? z.output : unknown >>(v => Option.isOption(v) && Option.isNone(v), "Not an Option"), - - option: (schema: S) => - z.union([option.some(schema), option.none(schema)]), } as const -- 2.49.1 From 52090cc7b1381e71a10ce17435c157837494c520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 11 Mar 2024 01:09:59 +0100 Subject: [PATCH 132/136] Fix --- src/schema/effect/option.ts | 2 +- src/tests.ts | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/schema/effect/option.ts b/src/schema/effect/option.ts index 82becf6..53b6abf 100644 --- a/src/schema/effect/option.ts +++ b/src/schema/effect/option.ts @@ -8,7 +8,7 @@ export const option = { z.union([option.some(schema), option.none(schema)]), some: (schema: S) => z - .custom(v => Option.isOption(v) && Option.isSome(v), "Not an Option") + .custom>>(v => Option.isOption(v) && Option.isSome(v), "Not an Option") .pipe(z.object({ value: schema }).passthrough()) .transform>>(identity), diff --git a/src/tests.ts b/src/tests.ts index a9cd7f0..dff7e44 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -3,11 +3,6 @@ import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" import { dejsonify, jsonify } from "./schema/jsonifiable" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" -import { effect } from "./schema/effect" - - -const stringOption = effect.option.option(z.string()) -type T = z.output const exp = zodSchemaClass -- 2.49.1 From acff9fa92ce9e1610b90462053d6b7dc4aedf158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 11 Mar 2024 03:16:30 +0100 Subject: [PATCH 133/136] Package name change --- bun.lockb | Bin 160864 -> 160864 bytes package.json | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index 2b12418ee244995c950c03e9a57efc3d88abf015..bbd8a7cb4cfb0c79ead0245ed81fa0209956e596 100755 GIT binary patch delta 153 zcmV;K0A~N-=n3HH36L%z9>c5t=HAnLsabtb-C%0YQN>@`b51C6rl6XES~jk$u};bx zlh_^U6o+PwsJ~1P*+YD)G(~Mlcj@K_O`evQ~+eVCAz~ z1E;_@F7uKa)ss|}h@M`UILL@;n}>r9ptlX60mK#pG60u5w*ecs?zRDoKbK+w0wA}U H_5sIznm Date: Mon, 11 Mar 2024 19:33:16 +0100 Subject: [PATCH 134/136] Added exports --- src/lib.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib.ts b/src/lib.ts index fa3a059..ef4a60b 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -1,5 +1,4 @@ -export { ZodSchemaClassBuilder } from "./builders/ZodSchemaClassBuilder" -// export { ExtendableZodSchemaObject } from "./traits/ExtendableZodSchemaObject" +export { ZodSchemaClassBuilder, zodSchemaClass } from "./builders/ZodSchemaClassBuilder" export { JsonifiableZodSchemaObject } from "./traits/JsonifiableZodSchemaObject" export { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" export { ZodSchemaObject, ZodSchemaObjectTrait } from "./traits/ZodSchemaObject" -- 2.49.1 From 126489790007db64886ebe83e6e313f2e9b1d8d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 11 Mar 2024 19:39:47 +0100 Subject: [PATCH 135/136] Project name change --- README.md | 2 +- src/schema/jsonifiable/bigint.ts | 2 +- src/schema/jsonifiable/date.ts | 2 +- src/schema/jsonifiable/decimal.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index adb9b58..5005fab 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# schemable-class +# zod-schema-class Create TypeScript classes out of Zod schemas diff --git a/src/schema/jsonifiable/bigint.ts b/src/schema/jsonifiable/bigint.ts index 513eaa0..b6d02d0 100644 --- a/src/schema/jsonifiable/bigint.ts +++ b/src/schema/jsonifiable/bigint.ts @@ -3,7 +3,7 @@ import { Opaque } from "type-fest" import { z } from "zod" -export type JsonifiedBigInt = Opaque +export type JsonifiedBigInt = Opaque export function jsonifyBigIntSchema(schema: S) { diff --git a/src/schema/jsonifiable/date.ts b/src/schema/jsonifiable/date.ts index a84dc61..e147a5d 100644 --- a/src/schema/jsonifiable/date.ts +++ b/src/schema/jsonifiable/date.ts @@ -3,7 +3,7 @@ import { Opaque } from "type-fest" import { z } from "zod" -export type JsonifiedDate = Opaque +export type JsonifiedDate = Opaque export function jsonifyDateSchema(schema: S) { diff --git a/src/schema/jsonifiable/decimal.ts b/src/schema/jsonifiable/decimal.ts index 4a4e67e..ca87662 100644 --- a/src/schema/jsonifiable/decimal.ts +++ b/src/schema/jsonifiable/decimal.ts @@ -4,7 +4,7 @@ import { Opaque } from "type-fest" import { z } from "zod" -export type JsonifiedDecimal = Opaque +export type JsonifiedDecimal = Opaque export function jsonifyDecimalSchema< -- 2.49.1 From 24d9f6f36d4816c58eccf5032eb073199e0665bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 11 Mar 2024 19:40:28 +0100 Subject: [PATCH 136/136] Dependencies upgrade --- bun.lockb | Bin 160864 -> 160864 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index bbd8a7cb4cfb0c79ead0245ed81fa0209956e596..6409dc584fc1f2037ea68159368bd3086dfe4393 100755 GIT binary patch delta 153 zcmV;K0A~N-=n3HH36L%z%m`2$qD1o_@$Ved0mHzKI#O9Ow~jq)4^{T2FOP{ju};bx zlUN)uvq&6;gFrfBAbi*mF`E##nR}?TDlFwOA$q%#?>|JX*1vM<#UVD#%#_w)*P;GU zdmyduZ){%u)w(WrQn@v~TLgD&Gckh=ptlX60mK#pGXR%6w*ecs?zRDoKbN8r0wA}U H_5sIzWA#Q0 delta 153 zcmV;K0A~N-=n3HH36L%z9>c5t=HAnLsabtb-C%0YQN>@`b51C6rl6XES~jk$u};bx zlh_^U6o+PwsJ~1P*+YD)G(~Mlcj@K_O`evQ~+eVCAz~ z1E;_@F7uKa)ss|}h@M`UILL@;n}>r9ptlX60mK#pG60u5w*ecs?zRDoKbK+w0wA}U H_5sIznm