diff --git a/src/SchemableClass.ts b/src/SchemableClass.ts index ece592b..f54a32f 100644 --- a/src/SchemableClass.ts +++ b/src/SchemableClass.ts @@ -1,20 +1,5 @@ -import { AbstractClass, Class as ConcreteClass } from "type-fest" import { z } from "zod" - - -export type ClassType = "AbstractClass" | "Class" - -type Class< - Type extends ClassType, - T, - Arguments extends unknown[] = any[], -> = ( - Type extends "AbstractClass" - ? AbstractClass - : Type extends "Class" - ? ConcreteClass - : never -) +import { Class, ClassType } from "./util" export type SchemableClass< diff --git a/src/jsonifiable/JsonifiableSchemableClass.ts b/src/jsonifiable/JsonifiableSchemableClass.ts new file mode 100644 index 0000000..ea880c6 --- /dev/null +++ b/src/jsonifiable/JsonifiableSchemableClass.ts @@ -0,0 +1,43 @@ +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, + + {}, + + any[] + > +) diff --git a/src/jsonifiable/index.ts b/src/jsonifiable/index.ts index 2662891..4269365 100644 --- a/src/jsonifiable/index.ts +++ b/src/jsonifiable/index.ts @@ -1 +1,2 @@ export * from "./JsonifiableSchemable" +export * from "./JsonifiableSchemableClass" diff --git a/src/util.ts b/src/util.ts index 276cbdd..1f2ea6b 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,7 +1,23 @@ import { Effect, pipe } from "effect" +import { AbstractClass, Class as ConcreteClass } from "type-fest" import { z } from "zod" +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 +) + + /** * Represents the static members of a class. * @template C - The class type.