import { trait } from "@thilawyn/traitify-ts" import { mapValues } from "lodash-es" import { makeObservable, observable } from "mobx" import { z } from "zod" 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()