import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" import { zodSchemaClass } from "./builders/ZodSchemaClassBuilder" import { MobXObservableZodSchemaObject } from "./traits/MobXObservableZodSchemaObject" const exp = zodSchemaClass .schema({ schema: z.object({ /** User ID */ id: z.bigint(), /** Username */ name: z.string(), }), schemaWithDefaultValues: s => s.extend({ id: s.shape.id.default(-1n), }), }) .jsonifiable({ jsonifySchema: s => s.extend({ }), dejsonifySchema: s => s.extend({ }), }) .expression .expresses(MobXObservableZodSchemaObject) .build() @exp.staticImplements class User extends exp.extends implements Implements {} const inst = User.create({ id: 1n, name: "User" }, ) // console.log(inst.name) const instEffect = User.createEffect({ id: 1n, name: "User" }) // const jsonifiedUser = await inst.jsonifyPromise() // const AdminUserProto = User.extend() // .schema({ // schema: s => s.extend({ // name: z.literal("Admin"), // prout: z.string(), // }), // defaultValues: v => ({ ...v, name: "Admin" as const }), // }) // .jsonifiable({ // jsonifySchema: (s, json) => json.extend({ // prout: s.shape.prout // }) // }) // class AdminUser extends AdminUserProto.toClass() {} // const subInst = await AdminUser.createPromise({ id: 2n, prout: "" }) // console.log(subInst)