0.1.1 #2

Merged
Thilawyn merged 47 commits from next into master 2024-01-17 20:47:13 +01:00
4 changed files with 21 additions and 35 deletions
Showing only changes of commit aef4d23b92 - Show all commits

View File

@@ -1,8 +1,8 @@
import { Opaque } from "type-fest" import { Opaque } from "type-fest"
export type DefinedDefaultValues<T> = Opaque<T, "@thilawyn/schemable-class/DefinedDefaultValues"> export type DefinedDefaultValuesTag = "@thilawyn/schemable-class/DefinedDefaultValues"
export function defineDefaultValues<T>(values: T) { export function defineDefaultValues<T>(values: T) {
return values as DefinedDefaultValues<T> return values as Opaque<T, DefinedDefaultValuesTag>
} }

View File

@@ -1,6 +1,6 @@
import { AbstractClass, Class as ConcreteClass } from "type-fest" import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { DefinedDefaultValues, SchemableClass } from "." import { DefinedDefaultValuesTag, SchemableClass } from "."
import { StaticMembers } from "./util" import { StaticMembers } from "./util"
@@ -53,7 +53,7 @@ export function extendSchemableClass<
SchemaValues SchemaValues
> >
defaultValues: (defaultValues: ExtendDefaultValues) => DefinedDefaultValues<DefaultValues> defaultValues: (defaultValues: ExtendDefaultValues) => Opaque<DefaultValues, DefinedDefaultValuesTag>
}, },
) { ) {
type Class<T, Arguments extends unknown[]> = ( type Class<T, Arguments extends unknown[]> = (
@@ -78,8 +78,8 @@ export function extendSchemableClass<
Class< Class<
Omit<InstanceType<C>, "schema" | "defaultValues" | keyof ExtendSchemaValues> & Omit<InstanceType<C>, "schema" | "defaultValues" | keyof ExtendSchemaValues> &
{ {
readonly schema: typeof schema, readonly schema: z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, SchemaValues, SchemaValues>,
readonly defaultValues: typeof defaultValues, readonly defaultValues: DefaultValues,
} & } &
SchemaValues, SchemaValues,
@@ -88,8 +88,8 @@ export function extendSchemableClass<
Omit<StaticMembers<C>, "schema" | "defaultValues"> & Omit<StaticMembers<C>, "schema" | "defaultValues"> &
{ {
readonly schema: typeof schema, readonly schema: z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, SchemaValues, SchemaValues>,
readonly defaultValues: typeof defaultValues, readonly defaultValues: DefaultValues,
} }
) )
} }

View File

@@ -1,6 +1,6 @@
import { AbstractClass, Class as ConcreteClass } from "type-fest" import { AbstractClass, Class as ConcreteClass, Opaque } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { DefinedDefaultValues } from "." import { DefinedDefaultValuesTag } from "."
import { StaticMembers } from "./util" import { StaticMembers } from "./util"
@@ -23,15 +23,8 @@ export function makeSchemableClassFrom<
extend: C, extend: C,
{ schema, defaultValues }: { { schema, defaultValues }: {
schema: z.ZodObject< schema: z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, Values>
SchemaT, defaultValues: Opaque<DefaultValues, DefinedDefaultValuesTag>
SchemaUnknownKeys,
SchemaCatchall,
Values,
Values
>
defaultValues: DefinedDefaultValues<DefaultValues>
}, },
) { ) {
type Class<T, Arguments extends unknown[]> = ( type Class<T, Arguments extends unknown[]> = (
@@ -55,8 +48,8 @@ export function makeSchemableClassFrom<
Class< Class<
InstanceType<C> & InstanceType<C> &
{ {
readonly schema: typeof schema, readonly schema: z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, Values>,
readonly defaultValues: typeof defaultValues, readonly defaultValues: DefaultValues,
} & } &
Values, Values,
@@ -65,8 +58,8 @@ export function makeSchemableClassFrom<
StaticMembers<C> & StaticMembers<C> &
{ {
readonly schema: typeof schema, readonly schema: z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, Values>,
readonly defaultValues: typeof defaultValues, readonly defaultValues: DefaultValues,
} }
) )
} }
@@ -81,15 +74,8 @@ export function makeSchemableClass<
DefaultValues extends Partial<Values>, DefaultValues extends Partial<Values>,
>( >(
props: { props: {
schema: z.ZodObject< schema: z.ZodObject<SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, Values>
SchemaT, defaultValues: Opaque<DefaultValues, DefinedDefaultValuesTag>
SchemaUnknownKeys,
SchemaCatchall,
Values,
Values
>
defaultValues: DefinedDefaultValues<DefaultValues>
} }
) { ) {
return makeSchemableClassFrom(Object, props) return makeSchemableClassFrom(Object, props)

View File

@@ -45,13 +45,13 @@ const UserWithPhone = extendSchemableClass(User, {
phone: z.string() phone: z.string()
}), }),
defaultValues: defaultValues => ({ defaultValues: defaultValues => defineDefaultValues({
...defaultValues, ...defaultValues,
phone: "+33600000000", phone: "+33600000000",
}), }),
}) })
UserWithPhone.schema UserWithPhone.defaultValues
// const user2 = newSchemable(UserWithPhone, { id: 1n, name: "User" }) // const user2 = newSchemable(UserWithPhone, { id: 1n, name: "User" })