diff --git a/src/defineDefaultValues.ts b/src/defineDefaultValues.ts new file mode 100644 index 0000000..4c860ed --- /dev/null +++ b/src/defineDefaultValues.ts @@ -0,0 +1,8 @@ +import { Opaque } from "type-fest" + + +export type DefinedDefaultValues = Opaque + +export function defineDefaultValues(values: T) { + return values as DefinedDefaultValues +} diff --git a/src/extendSchemableClass.ts b/src/extendSchemableClass.ts index 4c92aac..1b1180b 100644 --- a/src/extendSchemableClass.ts +++ b/src/extendSchemableClass.ts @@ -1,6 +1,6 @@ import { AbstractClass, Class as ConcreteClass } from "type-fest" import { z } from "zod" -import { SchemableClass } from "." +import { DefinedDefaultValues, SchemableClass } from "." import { StaticMembers } from "./util" @@ -53,7 +53,7 @@ export function extendSchemableClass< SchemaValues > - defaultValues: (defaultValues: ExtendDefaultValues) => DefaultValues + defaultValues: (defaultValues: ExtendDefaultValues) => DefinedDefaultValues }, ) { type Class = ( diff --git a/src/index.ts b/src/index.ts index 7df42bc..4b4c248 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,5 @@ export * from "./SchemableClass" +export * from "./defineDefaultValues" export * from "./extendSchemableClass" export * from "./makeSchemableClass" export * from "./newSchemable" diff --git a/src/makeSchemableClass.ts b/src/makeSchemableClass.ts index 544dade..0f0c2cf 100644 --- a/src/makeSchemableClass.ts +++ b/src/makeSchemableClass.ts @@ -1,5 +1,6 @@ import { AbstractClass, Class as ConcreteClass } from "type-fest" import { z } from "zod" +import { DefinedDefaultValues } from "." import { StaticMembers } from "./util" @@ -30,7 +31,7 @@ export function makeSchemableClassFrom< Values > - defaultValues: DefaultValues + defaultValues: DefinedDefaultValues }, ) { type Class = ( @@ -88,7 +89,7 @@ export function makeSchemableClass< Values > - defaultValues: DefaultValues + defaultValues: DefinedDefaultValues } ) { return makeSchemableClassFrom(Object, props) diff --git a/src/tests.ts b/src/tests.ts index 8cbcee3..e022514 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,27 +1,12 @@ import { pipeInto } from "ts-functional-pipe" import { z } from "zod" -import { extendSchemableClass, makeSchemableClass, newSchemable } from "." +import { defineDefaultValues, extendSchemableClass, makeSchemableClass, newSchemable } from "." import { dejsonifyBigIntSchema, dejsonifySchemable, jsonifyBigIntSchema, makeJsonifiableSchemableClass } from "./jsonifiable" const UserLevel = z.enum(["User", "Admin"]) -const UserProto = makeSchemableClass({ - schema: z.object({ - id: z.bigint(), - name: z.string(), - level: UserLevel, - }), - - defaultValues: { - level: "User" - } as const, -}) - -UserProto.defaultValues - - class User extends pipeInto( makeSchemableClass({ schema: z.object({ @@ -30,9 +15,9 @@ class User extends pipeInto( level: UserLevel, }), - defaultValues: { - level: "User" - } as const, + defaultValues: defineDefaultValues({ + level: "User" as const + }), }), v => makeJsonifiableSchemableClass(v, { @@ -46,6 +31,8 @@ class User extends pipeInto( }), ) {} +User.defaultValues + const user1 = newSchemable(User, { id: 1n, name: "User" }) const jsonifiedUser1 = user1.jsonify()