diff --git a/src/effect/schema/Jsonifiable.ts b/src/effect/schema/Jsonifiable.ts
index d1efbbb..14603f6 100644
--- a/src/effect/schema/Jsonifiable.ts
+++ b/src/effect/schema/Jsonifiable.ts
@@ -12,15 +12,28 @@ import type * as TF from "type-fest"
// return jsonifiable.pipe(S.compose(schema))
// }
-export function Jsonifiable<
- JsonifiableA extends I,
+export function Jsonifiable(
+ schema: S.Schema
+) {
+ return <
+ JsonifiableA extends I,
+ JsonifiableI extends TF.Jsonifiable,
+ JsonifiableR,
+ >(
+ jsonifiable: S.Schema
+ ) =>
+ jsonifiable.pipe(S.compose(schema))
+}
+
+export function Jsonifiable2<
+ JsonifiableA,
JsonifiableI extends TF.Jsonifiable,
JsonifiableR,
>(
jsonifiable: S.Schema
) {
- return (
- schema: S.Schema
+ return (
+ schema: S.Schema
) =>
jsonifiable.pipe(S.compose(schema))
}
diff --git a/src/effect/schema/class/MobXObservable.ts b/src/effect/schema/class/MobXObservable.ts
index cc47903..f967df0 100644
--- a/src/effect/schema/class/MobXObservable.ts
+++ b/src/effect/schema/class/MobXObservable.ts
@@ -3,18 +3,16 @@ import { makeObservable, observable, type CreateObservableOptions } from "mobx"
import { mapValues } from "remeda"
-interface MobXObservableInput {
+interface MobXObservableA {
new(...args: any[]): S.Struct.Type
readonly fields: { readonly [K in keyof S.Struct.Fields]: S.Struct.Fields[K] }
}
-export function MobXObservable<
- This extends MobXObservableInput
->(
- class_: This,
+export function MobXObservable(
+ self: A,
options?: Omit,
) {
- return class MobXObservable extends class_ {
+ return class MobXObservable extends self {
declare ["constructor"]: typeof MobXObservable
constructor(...args: any[]) {
@@ -25,5 +23,5 @@ export function MobXObservable<
options,
)
}
- } as This
+ } as A
}
diff --git a/src/effect/schema/tests.ts b/src/effect/schema/tests.ts
index 139187d..93e28f4 100644
--- a/src/effect/schema/tests.ts
+++ b/src/effect/schema/tests.ts
@@ -1,6 +1,6 @@
import { Schema as S } from "@effect/schema"
import { reaction, runInAction } from "mobx"
-import { Jsonifiable } from "./Jsonifiable"
+import { Jsonifiable2 } from "./Jsonifiable"
import { MobXObservable, MutableTaggedClass } from "./class"
@@ -12,17 +12,12 @@ class User extends MutableTaggedClass()("User", {
) {}
const JsonifiableUser = User.pipe(
- Jsonifiable(S.Struct({
+ Jsonifiable2(S.Struct({
...User.fields,
id: S.BigInt,
}))
)
-const JsonifiableUser2 = Jsonifiable(User)(S.Struct({
- ...User.fields,
- id: S.BigInt,
-}))
-
const user1 = new User({ id: -1n, role: "BasicUser" })
reaction(() => user1.id, id => console.log(`user1 id changed: ${ id }`))