From aef4d23b92905fb7979d2097264b9c9ecdb916c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 17 Jan 2024 18:45:00 +0100 Subject: [PATCH] Fixed default values --- src/defineDefaultValues.ts | 4 ++-- src/extendSchemableClass.ts | 14 +++++++------- src/makeSchemableClass.ts | 34 ++++++++++------------------------ src/tests.ts | 4 ++-- 4 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/defineDefaultValues.ts b/src/defineDefaultValues.ts index 4c860ed..634d83a 100644 --- a/src/defineDefaultValues.ts +++ b/src/defineDefaultValues.ts @@ -1,8 +1,8 @@ import { Opaque } from "type-fest" -export type DefinedDefaultValues = Opaque +export type DefinedDefaultValuesTag = "@thilawyn/schemable-class/DefinedDefaultValues" export function defineDefaultValues(values: T) { - return values as DefinedDefaultValues + return values as Opaque } diff --git a/src/extendSchemableClass.ts b/src/extendSchemableClass.ts index 1b1180b..bb392e1 100644 --- a/src/extendSchemableClass.ts +++ b/src/extendSchemableClass.ts @@ -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 { DefinedDefaultValues, SchemableClass } from "." +import { DefinedDefaultValuesTag, SchemableClass } from "." import { StaticMembers } from "./util" @@ -53,7 +53,7 @@ export function extendSchemableClass< SchemaValues > - defaultValues: (defaultValues: ExtendDefaultValues) => DefinedDefaultValues + defaultValues: (defaultValues: ExtendDefaultValues) => Opaque }, ) { type Class = ( @@ -78,8 +78,8 @@ export function extendSchemableClass< Class< Omit, "schema" | "defaultValues" | keyof ExtendSchemaValues> & { - readonly schema: typeof schema, - readonly defaultValues: typeof defaultValues, + readonly schema: z.ZodObject, + readonly defaultValues: DefaultValues, } & SchemaValues, @@ -88,8 +88,8 @@ export function extendSchemableClass< Omit, "schema" | "defaultValues"> & { - readonly schema: typeof schema, - readonly defaultValues: typeof defaultValues, + readonly schema: z.ZodObject, + readonly defaultValues: DefaultValues, } ) } diff --git a/src/makeSchemableClass.ts b/src/makeSchemableClass.ts index 0f0c2cf..0345eb7 100644 --- a/src/makeSchemableClass.ts +++ b/src/makeSchemableClass.ts @@ -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 { DefinedDefaultValues } from "." +import { DefinedDefaultValuesTag } from "." import { StaticMembers } from "./util" @@ -23,15 +23,8 @@ export function makeSchemableClassFrom< extend: C, { schema, defaultValues }: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - defaultValues: DefinedDefaultValues + schema: z.ZodObject + defaultValues: Opaque }, ) { type Class = ( @@ -55,8 +48,8 @@ export function makeSchemableClassFrom< Class< InstanceType & { - readonly schema: typeof schema, - readonly defaultValues: typeof defaultValues, + readonly schema: z.ZodObject, + readonly defaultValues: DefaultValues, } & Values, @@ -65,8 +58,8 @@ export function makeSchemableClassFrom< StaticMembers & { - readonly schema: typeof schema, - readonly defaultValues: typeof defaultValues, + readonly schema: z.ZodObject, + readonly defaultValues: DefaultValues, } ) } @@ -81,15 +74,8 @@ export function makeSchemableClass< DefaultValues extends Partial, >( props: { - schema: z.ZodObject< - SchemaT, - SchemaUnknownKeys, - SchemaCatchall, - Values, - Values - > - - defaultValues: DefinedDefaultValues + schema: z.ZodObject + defaultValues: Opaque } ) { return makeSchemableClassFrom(Object, props) diff --git a/src/tests.ts b/src/tests.ts index e022514..5d8ee9f 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -45,13 +45,13 @@ const UserWithPhone = extendSchemableClass(User, { phone: z.string() }), - defaultValues: defaultValues => ({ + defaultValues: defaultValues => defineDefaultValues({ ...defaultValues, phone: "+33600000000", }), }) -UserWithPhone.schema +UserWithPhone.defaultValues // const user2 = newSchemable(UserWithPhone, { id: 1n, name: "User" })