From 9e8d30394c0eac2bbe4cff3269e8aad1821d09d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 27 Jun 2024 14:37:16 +0200 Subject: [PATCH] Jsonifiable work --- src/effect/schema/Jsonifiable.ts | 21 +++++++++++++++++---- src/effect/schema/class/MobXObservable.ts | 12 +++++------- src/effect/schema/tests.ts | 9 ++------- 3 files changed, 24 insertions(+), 18 deletions(-) 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 }`))