Is there a good implementation of makeObservable() somewhere? I haven't been able to find one that seemed to work elegantly.
Patching @Output and @Input is supremely painful - I really wish there was some sort of shorthand for that.
I cannot share the code we use directly but we use Object.defineProperty and override the getter and setter for it, tunneling the new setted value through a behavior subject that gets returned. The getter returns the value by synchronous access to the subject.
Inputs into makeObservable are the component class (this) and the requested property name (generics with keyof).
Same about Reactive Forms.
Patching each @Output and @Input through a component by hand is also pretty annoying, especially if they change relatively often. A custom input field for a reactive form gets quite large due to all the in- and outputs.