| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Type-R is the modern JS data framework to manage complex domain and UI application state. Features:
Data layer is defined as a superposition of three kinds of building blocks:
Type-R is completely unopinionated on the client-server transport protocol and the view layer technology. It's your perfect M and VM in modern MVVM or MVC architecture.
import { define, Record } from 'type-r'
// Define email attribute type with encapsulated validation check.
const Email = String.has.check( x => x! || x.indexOf( '@' ) >= 0, 'Invalid email' );
@define class User extends Record {
static attributes = {
name : String.isRequired, // should not be empty for the record to be valid.
email : Email.isRequired
}
}
@define class Message extends Record {
static attributes = {
created : Date // = new Date()
author : User, // aggregated User record.
to : User.Collection, // aggregating collection of users
subject : '',
body : ''
}
}
const msg = new Message();
assert( !msg.isValid() ); // Is not valid because msg.author has empty attributes
// Listen for the changes in aggregation tree...
msg.on( 'change', () => console.log( 'change!!!' ) );
msg.transaction( () => { // Prepare to make the sequence of changes on msg
msg.author.name = 'John Dee'; // No 'change' event yet as we're in the transaction.
msg.author.email = 'dee@void.com';
assert( msg.isValid() ); // Now msg is valid as all of its attributes are valid.
}); // Got single 'change!!!' message in the console.Is packed as UMD and ES6 module. No peer dependencies are required.
npm install type-r --save-dev
IE10+, Edge, Safari, Chrome, and Firefox are supported IE9 and Opera may work but has not been tested. IE8 won't work.| Back | FazBrowse Home | New Git URL |