214 lines
5.1 KiB
TypeScript
214 lines
5.1 KiB
TypeScript
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<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,
|
|
>(
|
|
class_: C | JsonifiableSchemableClass<
|
|
SchemaT,
|
|
SchemaUnknownKeys,
|
|
SchemaCatchall,
|
|
|
|
Values,
|
|
DefaultValues,
|
|
|
|
JsonifySchemaT,
|
|
JsonifySchemaUnknownKeys,
|
|
JsonifySchemaCatchall,
|
|
|
|
DejsonifySchemaT,
|
|
DejsonifySchemaUnknownKeys,
|
|
DejsonifySchemaCatchall,
|
|
|
|
JsonifiedValues,
|
|
|
|
"Class"
|
|
>,
|
|
|
|
values: JsonifiedValues,
|
|
params?: Partial<z.ParseParams>,
|
|
) {
|
|
return new class_(
|
|
class_.dejsonifySchema.parse(values, params)
|
|
) as InstanceType<C>
|
|
}
|
|
|
|
|
|
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<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,
|
|
>(
|
|
class_: C | JsonifiableSchemableClass<
|
|
SchemaT,
|
|
SchemaUnknownKeys,
|
|
SchemaCatchall,
|
|
|
|
Values,
|
|
DefaultValues,
|
|
|
|
JsonifySchemaT,
|
|
JsonifySchemaUnknownKeys,
|
|
JsonifySchemaCatchall,
|
|
|
|
DejsonifySchemaT,
|
|
DejsonifySchemaUnknownKeys,
|
|
DejsonifySchemaCatchall,
|
|
|
|
JsonifiedValues,
|
|
|
|
"Class"
|
|
>,
|
|
|
|
values: JsonifiedValues,
|
|
params?: Partial<z.ParseParams>,
|
|
) {
|
|
return new class_(
|
|
await class_.dejsonifySchema.parseAsync(values, params)
|
|
) as InstanceType<C>
|
|
}
|
|
|
|
|
|
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<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,
|
|
>(
|
|
class_: C | JsonifiableSchemableClass<
|
|
SchemaT,
|
|
SchemaUnknownKeys,
|
|
SchemaCatchall,
|
|
|
|
Values,
|
|
DefaultValues,
|
|
|
|
JsonifySchemaT,
|
|
JsonifySchemaUnknownKeys,
|
|
JsonifySchemaCatchall,
|
|
|
|
DejsonifySchemaT,
|
|
DejsonifySchemaUnknownKeys,
|
|
DejsonifySchemaCatchall,
|
|
|
|
JsonifiedValues,
|
|
|
|
"Class"
|
|
>,
|
|
|
|
values: JsonifiedValues,
|
|
params?: Partial<z.ParseParams>,
|
|
) {
|
|
return pipe(
|
|
parseZodTypeEffect(class_.dejsonifySchema, values, params),
|
|
Effect.map(values => new class_(values) as InstanceType<C>),
|
|
)
|
|
}
|