0.1.1 #2

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

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 { AbstractClass, Class as ConcreteClass } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { SchemableClass } from "." import { DefinedDefaultValues, SchemableClass } from "."
import { StaticMembers } from "./util" import { StaticMembers } from "./util"
@@ -53,7 +53,7 @@ export function extendSchemableClass<
SchemaValues SchemaValues
> >
defaultValues: (defaultValues: ExtendDefaultValues) => DefaultValues defaultValues: (defaultValues: ExtendDefaultValues) => DefinedDefaultValues<DefaultValues>
}, },
) { ) {
type Class<T, Arguments extends unknown[]> = ( type Class<T, Arguments extends unknown[]> = (

View File

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

View File

@@ -1,5 +1,6 @@
import { AbstractClass, Class as ConcreteClass } from "type-fest" import { AbstractClass, Class as ConcreteClass } from "type-fest"
import { z } from "zod" import { z } from "zod"
import { DefinedDefaultValues } from "."
import { StaticMembers } from "./util" import { StaticMembers } from "./util"
@@ -30,7 +31,7 @@ export function makeSchemableClassFrom<
Values Values
> >
defaultValues: DefaultValues defaultValues: DefinedDefaultValues<DefaultValues>
}, },
) { ) {
type Class<T, Arguments extends unknown[]> = ( type Class<T, Arguments extends unknown[]> = (
@@ -88,7 +89,7 @@ export function makeSchemableClass<
Values Values
> >
defaultValues: DefaultValues defaultValues: DefinedDefaultValues<DefaultValues>
} }
) { ) {
return makeSchemableClassFrom(Object, props) return makeSchemableClassFrom(Object, props)

View File

@@ -1,27 +1,12 @@
import { pipeInto } from "ts-functional-pipe" import { pipeInto } from "ts-functional-pipe"
import { z } from "zod" import { z } from "zod"
import { extendSchemableClass, makeSchemableClass, newSchemable } from "." import { defineDefaultValues, extendSchemableClass, makeSchemableClass, newSchemable } from "."
import { dejsonifyBigIntSchema, dejsonifySchemable, jsonifyBigIntSchema, makeJsonifiableSchemableClass } from "./jsonifiable" import { dejsonifyBigIntSchema, dejsonifySchemable, jsonifyBigIntSchema, makeJsonifiableSchemableClass } from "./jsonifiable"
const UserLevel = z.enum(["User", "Admin"]) 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( class User extends pipeInto(
makeSchemableClass({ makeSchemableClass({
schema: z.object({ schema: z.object({
@@ -30,9 +15,9 @@ class User extends pipeInto(
level: UserLevel, level: UserLevel,
}), }),
defaultValues: { defaultValues: defineDefaultValues({
level: "User" level: "User" as const
} as const, }),
}), }),
v => makeJsonifiableSchemableClass(v, { v => makeJsonifiableSchemableClass(v, {
@@ -46,6 +31,8 @@ class User extends pipeInto(
}), }),
) {} ) {}
User.defaultValues
const user1 = newSchemable(User, { id: 1n, name: "User" }) const user1 = newSchemable(User, { id: 1n, name: "User" })
const jsonifiedUser1 = user1.jsonify() const jsonifiedUser1 = user1.jsonify()