Data Scheme
Data Model framework based on ECMAScript Decorator proposal



Usage
Installation
npm install data-scheme @babel/polyfill
npm install -D \
@babel/cli \
@babel/core \
@babel/preset-env \
@babel/plugin-proposal-decorators
Configuration
{
"presets": [
"@babel/preset-env"
],
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"decoratorsBeforeExport": true
}
]
]
}
Coding
User.js
import Model, { mapGetter, is, Range, Email, Phone, URL } from 'data-scheme';
@mapGetter
export default class User extends Model {
@is(/^[\w-]{3,20}$/, '')
set name(value) { this.set('name', value); }
@is(Email, '')
set email(value) { this.set('email', value); }
@is( Phone )
set phone(value) { this.set('phone', value); }
@is([0, 1, 2], 2)
set gender(value) { this.set('gender', value); }
@is(Range( 1900 ))
set birthYear(value) { this.set('birthYear', value); }
@is(URL, 'http://example.com/test.jpg')
set avatar(value) { this.set('avatar', value); }
@is( URL )
set URL(value) { this.set('URL', value); }
@is( String )
set description(value) { this.set('description', value); }
}
index.js
import User from './User';
const user = new User({
name: 'test',
email: 'test@example.com'
});
user.phone = '+86-028-88888888';
console.log( user.valueOf() );
Console output
{
"name": "test",
"email": "test@example.com",
"gender": 2,
"avatar": "http://example.com/test.jpg",
"phone": "+86-028-88888888"
}
Scheme Helper
https://tech-query.me/DataScheme/file/source/scheme.js.html
Learn more