diff --git a/src/tests.ts b/src/tests.ts index 3de2948..b242b84 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,6 +1,7 @@ import { Implements } from "@thilawyn/traitify-ts" import { z } from "zod" import { ZodSchemaClass } from "./ZodSchemaClass" +import { ObservableZodSchemaObject } from "./traits/ObservableZodSchemaObject" const TestExp = ZodSchemaClass({ @@ -11,12 +12,14 @@ const TestExp = ZodSchemaClass({ }), defaultValues: { id: -1n }, -}).build() +}) + .expresses(ObservableZodSchemaObject) + .buildAnyway() @TestExp.implementsStatic class Test extends TestExp.extends implements Implements {} -Test.defaultValues +Test.schema const inst = Test.create({ id: 1n, name: "" }) console.log(inst) @@ -37,3 +40,15 @@ console.log(subInst) // class ChildTest extends Test {} // ChildTest.instantiate({ name: "" }) + +const testSchema = { schema: Test.schema } + +declare const testGenericSchema: { + schema: z.ZodObject +} + +type U = T + +interface ExtendTest extends U { + schema: z.ZodObject +} diff --git a/src/traits/ObservableZodSchemaObject.ts b/src/traits/ObservableZodSchemaObject.ts index 13bed4d..f63f33f 100644 --- a/src/traits/ObservableZodSchemaObject.ts +++ b/src/traits/ObservableZodSchemaObject.ts @@ -1,14 +1,20 @@ -import { expression } from "@thilawyn/traitify-ts" -import { InstantiableZodSchemaObject } from "./InstantiableZodSchemaObject" +import { trait } from "@thilawyn/traitify-ts" +import { mapValues } from "lodash-es" +import { makeObservable, observable } from "mobx" +import { z } from "zod" -export const ObservableZodSchemaObject = expression - .expresses(InstantiableZodSchemaObject) +export const ObservableZodSchemaObject = trait + .staticAbstract(Super => class extends Super { + declare readonly schema: z.ZodObject + }) + .implement(Super => class ObservableZodSchemaObject extends Super { + constructor(...args: any[]) { + super(...args) + + makeObservable(this, + mapValues(ObservableZodSchemaObject.schema.shape, () => observable) + ) + } + }) .build() - .subtrait() - .implement(Super => class ObservableZodSchemaObject extends Super { - constructor(...args: any[]) { - super(...args) - } - }) - .build()