0.1.6 (#7)
Some checks failed
Publish / publish (push) Failing after 14s
Lint / lint (push) Successful in 12s

Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: #7
This commit was merged in pull request #7.
This commit is contained in:
Julien Valverdé
2024-07-29 18:42:05 +02:00
parent 511f43e3f8
commit 7179913d6d
30 changed files with 232 additions and 250 deletions

View File

@@ -0,0 +1,26 @@
import { Schema } from "@effect/schema"
import { makeObservable, observable, type CreateObservableOptions } from "mobx"
import { mapValues } from "remeda"
interface ObservableClassSelf {
new(...args: any[]): Schema.Struct.Type<Schema.Struct.Fields>
readonly fields: { readonly [K in keyof Schema.Struct.Fields]: Schema.Struct.Fields[K] }
}
export const ObservableClass = <Self extends ObservableClassSelf>(
self: Self,
options?: Omit<CreateObservableOptions, "proxy">,
) =>
class Observable extends self {
declare ["constructor"]: typeof Observable
constructor(...args: any[]) {
super(...args)
makeObservable(this,
mapValues(this.constructor.fields, () => observable),
options,
)
}
} as Self