diff --git a/bun.lockb b/bun.lockb index 6e480f4..ab7c9a9 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 7800bca..e70368d 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "decimal.js": "^10.4.3", "effect": "^2.0.2", "lodash-es": "^4.17.21", + "mobx": "^6.12.0", "type-fest": "^4.9.0", "zod": "^3.22.4" }, diff --git a/src/observable/ObservableSchemable.ts b/src/observable/ObservableSchemable.ts new file mode 100644 index 0000000..56be1f5 --- /dev/null +++ b/src/observable/ObservableSchemable.ts @@ -0,0 +1,27 @@ +import { trait } from "@thilawyn/thilatrait" +import { mapValues } from "lodash-es" +import { makeObservable } from "mobx" +import { z } from "zod" + + +export const ObservableSchemable = trait(Parent => { + abstract class ObservableSchemable extends Parent { + abstract readonly schema: z.ZodObject< + z.ZodRawShape, + z.UnknownKeysParam, + z.ZodTypeAny, + z.objectOutputType, + z.objectInputType + > + + // constructor(...args: any[]) { + // super(...args) + + // makeObservable(this, + // mapValues(this.schema.shape, () => observable) as AnnotationsMap<$Config["values"], never> + // ) + // } + } + + return ObservableSchemable +}) diff --git a/src/observable/index.ts b/src/observable/index.ts new file mode 100644 index 0000000..9ccfcad --- /dev/null +++ b/src/observable/index.ts @@ -0,0 +1 @@ +export * from "./ObservableSchemable" diff --git a/src/tests.ts b/src/tests.ts index 5d8ee9f..db106b1 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -2,6 +2,8 @@ import { pipeInto } from "ts-functional-pipe" import { z } from "zod" import { defineDefaultValues, extendSchemableClass, makeSchemableClass, newSchemable } from "." import { dejsonifyBigIntSchema, dejsonifySchemable, jsonifyBigIntSchema, makeJsonifiableSchemableClass } from "./jsonifiable" +import { extendsAndExpresses } from "@thilawyn/thilatrait" +import { ObservableSchemable } from "./observable" const UserLevel = z.enum(["User", "Admin"]) @@ -29,12 +31,16 @@ class User extends pipeInto( id: dejsonifyBigIntSchema(shape.id) }), }), + + v => extendsAndExpresses(v, ObservableSchemable), ) {} -User.defaultValues +User.schema const user1 = newSchemable(User, { id: 1n, name: "User" }) +user1.schema + const jsonifiedUser1 = user1.jsonify() console.log(jsonifiedUser1) console.log(dejsonifySchemable(User, jsonifiedUser1))