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({