0.1.3 #4

Merged
Thilawyn merged 74 commits from next into master 2024-03-24 22:24:25 +01:00
3 changed files with 36 additions and 48 deletions
Showing only changes of commit 1910c9ff9f - Show all commits

View File

@@ -1,4 +1,4 @@
import { ImplStatic, expression } from "@thilawyn/traitify-ts" import { ImplStatic, expression, implStaticThis } from "@thilawyn/traitify-ts"
import { AbstractClass } from "type-fest" import { AbstractClass } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { Extend, StaticMembers } from "../util" import { Extend, StaticMembers } from "../util"
@@ -18,8 +18,7 @@ export const ExtendableZodSchemaObject = <
.subtrait() .subtrait()
.implement(Super => class ExtendableZodSchemaObjectImpl extends Super { .implement(Super => class ExtendableZodSchemaObjectImpl extends Super {
static extend< static extend<
Self extends AbstractClass<ExtendableZodSchemaObjectImpl & Values, [values: Values]> Self extends AbstractClass<Values, [values: Values]>,
& ImplStatic<typeof ExtendableZodSchemaObjectImpl>,
ExtendedT extends z.ZodRawShape, ExtendedT extends z.ZodRawShape,
ExtendedCatchall extends z.ZodTypeAny, ExtendedCatchall extends z.ZodTypeAny,
@@ -29,12 +28,13 @@ export const ExtendableZodSchemaObject = <
this: Self, this: Self,
schemaWithDefaults: ( schemaWithDefaults: (
schemaWithDefaults: typeof this.schemaWithDefaults schemaWithDefaults: z.ZodObject<T, "strip", Catchall, Values, PartialValues>
) => z.ZodObject<ExtendedT, "strip", ExtendedCatchall, ExtendedValues, ExtendedPartialValues>, ) => z.ZodObject<ExtendedT, "strip", ExtendedCatchall, ExtendedValues, ExtendedPartialValues>,
) { ) {
const t = implStaticThis(ExtendableZodSchemaObjectImpl, this)
return expression return expression
.extends( .extends(
this as unknown as ( t as unknown as (
AbstractClass< AbstractClass<
Omit< Omit<
Extend<[InstanceType<Self>, ExtendedValues]>, Extend<[InstanceType<Self>, ExtendedValues]>,
@@ -45,7 +45,7 @@ export const ExtendableZodSchemaObject = <
Omit<StaticMembers<Self>, keyof ImplStatic<typeof ExtendableZodSchemaObjectImpl>> Omit<StaticMembers<Self>, keyof ImplStatic<typeof ExtendableZodSchemaObjectImpl>>
) )
) )
.expresses(ExtendableZodSchemaObject(schemaWithDefaults(this.schemaWithDefaults))) .expresses(ExtendableZodSchemaObject(schemaWithDefaults(t.schemaWithDefaults)))
} }
}) })
.build() .build()

View File

@@ -1,4 +1,4 @@
import { ImplStatic, TraitInstance, TraitStaticMembers, trait } from "@thilawyn/traitify-ts" import { TraitInstance, TraitStaticMembers, implStaticInstantiableThis, trait } from "@thilawyn/traitify-ts"
import { Class, Jsonifiable } from "type-fest" import { Class, Jsonifiable } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { parseZodSchemaEffect } from "../util" import { parseZodSchemaEffect } from "../util"
@@ -80,45 +80,39 @@ export const JsonifiedZodSchemaObject = <
static jsonify< static jsonify<
Instance extends JsonifiedValues Instance extends JsonifiedValues
>( >(
this: ( this: Class<Instance, [values: JsonifiedValues]>,
Class<Instance, [values: JsonifiedValues]> &
ImplStatic<typeof JsonifiedZodSchemaObjectImpl>
),
values: Values, values: Values,
params?: Partial<z.ParseParams>, params?: Partial<z.ParseParams>,
) { ) {
return this const t = implStaticInstantiableThis(JsonifiedZodSchemaObjectImpl, this)
.pipeSchemaIntoInstance(this.jsonifySchema) return t
.pipeSchemaIntoInstance(t.jsonifySchema)
.parse(values, params) .parse(values, params)
} }
static jsonifyPromise< static jsonifyPromise<
Instance extends JsonifiedValues Instance extends JsonifiedValues
>( >(
this: ( this: Class<Instance, [values: JsonifiedValues]>,
Class<Instance, [values: JsonifiedValues]> &
ImplStatic<typeof JsonifiedZodSchemaObjectImpl>
),
values: Values, values: Values,
params?: Partial<z.ParseParams>, params?: Partial<z.ParseParams>,
) { ) {
return this const t = implStaticInstantiableThis(JsonifiedZodSchemaObjectImpl, this)
.pipeSchemaIntoInstance(this.jsonifySchema) return t
.pipeSchemaIntoInstance(t.jsonifySchema)
.parseAsync(values, params) .parseAsync(values, params)
} }
static jsonifyEffect< static jsonifyEffect<
Instance extends JsonifiedValues Instance extends JsonifiedValues
>( >(
this: ( this: Class<Instance, [values: JsonifiedValues]>,
Class<Instance, [values: JsonifiedValues]> &
ImplStatic<typeof JsonifiedZodSchemaObjectImpl>
),
values: Values, values: Values,
params?: Partial<z.ParseParams>, params?: Partial<z.ParseParams>,
) { ) {
const t = implStaticInstantiableThis(JsonifiedZodSchemaObjectImpl, this)
return parseZodSchemaEffect( return parseZodSchemaEffect(
this.pipeSchemaIntoInstance(this.jsonifySchema), t.pipeSchemaIntoInstance(t.jsonifySchema),
values, values,
params, params,
) )

View File

@@ -1,4 +1,4 @@
import { ImplStatic, trait } from "@thilawyn/traitify-ts" import { implStaticInstantiableThis, trait } from "@thilawyn/traitify-ts"
import { Class, HasRequiredKeys } from "type-fest" import { Class, HasRequiredKeys } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { parseZodSchemaEffect, stripZodObjectDefaults } from "../util" import { parseZodSchemaEffect, stripZodObjectDefaults } from "../util"
@@ -59,42 +59,36 @@ export const ZodSchemaObject = <
static create< static create<
Instance extends Values Instance extends Values
>( >(
this: ( this: Class<Instance, [values: Values]>,
Class<Instance, [values: Values]> &
ImplStatic<typeof ZodSchemaObjectImpl>
),
...[values, params]: CreateArgs<PartialValues> ...[values, params]: CreateArgs<PartialValues>
) { ) {
return this const t = implStaticInstantiableThis(ZodSchemaObjectImpl, this)
.pipeSchemaIntoInstance(this.schemaWithDefaults) return t
.pipeSchemaIntoInstance(t.schemaWithDefaults)
.parse(values, params) .parse(values, params)
} }
static createPromise< static createPromise<
Instance extends Values Instance extends Values
>( >(
this: ( this: Class<Instance, [values: Values]>,
Class<Instance, [values: Values]> &
ImplStatic<typeof ZodSchemaObjectImpl>
),
...[values, params]: CreateArgs<PartialValues> ...[values, params]: CreateArgs<PartialValues>
) { ) {
return this const t = implStaticInstantiableThis(ZodSchemaObjectImpl, this)
.pipeSchemaIntoInstance(this.schemaWithDefaults) return t
.pipeSchemaIntoInstance(t.schemaWithDefaults)
.parseAsync(values, params) .parseAsync(values, params)
} }
static createEffect< static createEffect<
Instance extends Values Instance extends Values
>( >(
this: ( this: Class<Instance, [values: Values]>,
Class<Instance, [values: Values]> &
ImplStatic<typeof ZodSchemaObjectImpl>
),
...[values, params]: CreateArgs<PartialValues> ...[values, params]: CreateArgs<PartialValues>
) { ) {
const t = implStaticInstantiableThis(ZodSchemaObjectImpl, this)
return parseZodSchemaEffect( return parseZodSchemaEffect(
this.pipeSchemaIntoInstance(this.schemaWithDefaults), t.pipeSchemaIntoInstance(t.schemaWithDefaults),
values, values,
params, params,
) )