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