0.1.0 #1

Merged
Thilawyn merged 24 commits from next into master 2024-01-05 00:39:33 +01:00
Showing only changes of commit f170714435 - Show all commits

View File

@@ -1,17 +1,19 @@
import { z } from "zod" import { z } from "zod"
import { makeSchemableClass, newSchemable } from "." import { makeSchemableClass, newSchemable } from "."
import { dejsonifyBigIntSchema, jsonifyBigIntSchema, makeJsonifiableSchemableClass } from "./jsonifiable" import { dejsonifyBigIntSchema, dejsonifySchemableSchema, jsonifyBigIntSchema, jsonifySchemableSchema, makeJsonifiableSchemableClass } from "./jsonifiable"
const UserSchema = z.object({ const GroupSchema = z.object({
/** User ID */ /** Group ID */
id: z.bigint().default(-1n) id: z.bigint(),
/** Group name */
name: z.string(),
}) })
const GroupSchemableObject = makeSchemableClass({ schema: GroupSchema })
const UserSchemableObject = makeSchemableClass({ schema: UserSchema }) const GroupJsonifiableSchemableObject = makeJsonifiableSchemableClass(GroupSchemableObject, {
const UserJsonifiableSchemableObject = makeJsonifiableSchemableClass(UserSchemableObject, {
jsonifySchema: ({ schema, s }) => schema.extend({ jsonifySchema: ({ schema, s }) => schema.extend({
id: jsonifyBigIntSchema(s.id) id: jsonifyBigIntSchema(s.id)
}), }),
@@ -21,12 +23,40 @@ const UserJsonifiableSchemableObject = makeJsonifiableSchemableClass(UserSchemab
}), }),
}) })
class Group extends GroupJsonifiableSchemableObject {}
const UserSchema = z.object({
/** User ID */
id: z.bigint(),
/** Name string */
name: z.string(),
/** User group */
group: z.instanceof(Group),
})
const UserSchemableObject = makeSchemableClass({ schema: UserSchema })
const UserJsonifiableSchemableObject = makeJsonifiableSchemableClass(UserSchemableObject, {
jsonifySchema: ({ schema, s }) => schema.extend({
id: jsonifyBigIntSchema(s.id),
group: jsonifySchemableSchema(Group, s.group),
}),
dejsonifySchema: ({ schema, s }) => schema.extend({
id: dejsonifyBigIntSchema(s.id),
group: dejsonifySchemableSchema(Group, s.group),
}),
})
class User extends UserJsonifiableSchemableObject {} class User extends UserJsonifiableSchemableObject {}
const user1 = new User({ id: 1n })
const user2 = newSchemable(User, { id: 2n })
console.log(user1) const group1 = new Group({ id: 1n, name: "Group 1" })
console.log(user2)
console.log(await user2.jsonifyPromise()) const user1 = new User({ id: 1n, name: "User 1", group: group1 })
const user2 = newSchemable(User, { id: 2n, name: "User 2", group: group1 })
console.log(user2.jsonify())