defineDefaultValues
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-01-17 17:39:34 +01:00
parent 222676dfaf
commit 4a27f5c765
5 changed files with 20 additions and 23 deletions

View File

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

View File

@@ -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<DefaultValues>
},
) {
type Class<T, Arguments extends unknown[]> = (

View File

@@ -1,4 +1,5 @@
export * from "./SchemableClass"
export * from "./defineDefaultValues"
export * from "./extendSchemableClass"
export * from "./makeSchemableClass"
export * from "./newSchemable"

View File

@@ -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<DefaultValues>
},
) {
type Class<T, Arguments extends unknown[]> = (
@@ -88,7 +89,7 @@ export function makeSchemableClass<
Values
>
defaultValues: DefaultValues
defaultValues: DefinedDefaultValues<DefaultValues>
}
) {
return makeSchemableClassFrom(Object, props)

View File

@@ -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()