# Decsera (Previously @matchlighter/mobx_model)

A modern decorator-based, extensible library for building client-side data models for easy hydration of JSON data.

## Defining Models

```ts

import { Model, field } from '@matchlighter/decsera';

class User extends Model {
    @field full_name: string;
    @field({ /* options */ }) username: string;

    @collection({ type: 'local' }) projects: Project[] = [];
}

```

## MobX
This library was originally built with MobX support built in out of the box.
However, MobX support was refactored to a separate module before the first public release.
MobX support can be enabled like such:
```js
// ES6
import "@matchlighter/decsera/mobx"; // Must be placed *before* any other imports of DecSera

// CommonJS
require('@matchlighter/decsera/mobx');
```

With MobX support enabled,
- `@field` automatically applies MobX `@observable`
- `@observable` / `@computed` are automatically applied in other appropriate locations
- Some other optimizations are made for supporting MobX & other features
