The ``data-modeling`` library contains TypeScript interfaces that help describe complex domains with [Generics](https://www.typescriptlang.org/docs/handbook/2/generics.html), [Mapped types](https://www.typescriptlang.org/docs/handbook/2/mapped-types.htm
npm install data-modelingdata-modeling library contains TypeScript interfaces that help describe complex domains with
Generics, Mapped types,
and concepts from storage paradigms such as redux.
From a JavaScript perspective, there is nothing in this library, data modeling has no opinion about what happens
at runtime while enabling programmers to derive complex structures from simple ones and providing mental scaffolds
at design time.
We like to think about data-modeling as experiences cast into flexible interfaces geared towards
building sophisticated data-handling in application systems relying on TypeScript.
Features
The following examples demonstrate the features of data-modeling and rely
on a User and a Group to do so.
``typescript
export interface User {
userId: number;
groupId?: number;
label: string;
age?: number;
}
export interface Group {
groupId: number;
}
export interface Entities {
user: User;
group: Group;
}
``
$3
Express additional information about models such as descriptions,
display names, or allowed sizes of numbers and labels.
Even relationships between models can be expressed.
``typescript
import { ModelMetadata } from "data-modeling";
export const userMetadata: ModelMetadata = {
id: x => x.userId.toString(),
label: "User",
description: "A user of the application",
attributes: {
label: {
label: "Name",
icon: "label",
min: 4,
max: 64,
required: true
},
age: {
label: "Age",
min: 0,
max: 120,
step: 1
}
},
relationships: {
toGroup: (user, state) => state.group.entities[user.groupId]
}
};
``
$3
Tbd
$3
Utilities for working with collections and handling mutability.
``typescript
import { Immutable, KVS, Many, Matrix, Mutable, OneOrMany } from "data-modeling";
```