import { Schema as S } from "@effect/schema" import { MutableClass } from "./MutableClass" import { pipe } from "remeda" import { Mutable } from "./Mutable" import { MobXObservable } from "./MobXObservable" import { Class } from "./Class" const UserSuper = () => pipe( Class("User")({ id: S.BigIntFromSelf, role: S.Union(S.Literal("BasicUser"), S.Literal("Admin")), }), Mutable, MobXObservable, ) class User extends UserSuper() {} const user1 = new User({ id: 1n, role: "BasicUser" }) user1.id = 1n class Admin extends User.extend("Admin")({ role: S.Literal("Admin") }) {} const user2 = new Admin({ id: 2n, role: "Admin" }) user2.id = 2n