mobxjs / serializr

Serialize and deserialize complex object graphs to and from JSON and Javascript classes
MIT License
763 stars 51 forks source link

Design enhancement: a catch-all class decorator for modifications to modelSchema (which would subsume e.g. `serializeAll`) #150

Open peey opened 3 years ago

peey commented 3 years ago

serializeAll is not the only case which is insufficiently supported by class field decorators.

factory is another case. Without decorator support, this is what the user has to write:

getDefaultModelSchema(Todo).factory = context => (...)

but with decorator support, this is what user may instead write

@factory(context => (...))
class Todo {
  ...
}

But this got me thinking, shouldn't there be just one class-decorator to support both of these?

@serializr(() => {factory: ..., {props: {"*": true}}) 

The returned value could just be deep-merged into the model-schema as built-up by field decorators.

It does not save many characters of typing, but it's a much more uniform interface for the library user. Of the two interfaces offered by the library (decorator-based and non-decorator), it'll be ideal if the user using one of the interfaces doesn't have to deal with the other.