sequelize-decorators
v1.0.2
Published
Sequelize + Decorators = ❤
Downloads
132
Readme
Sequelize + Decorators = ❤
A proof of concept for using Sequelize with decorators.
Usage with TypeScript
Installation
npm install --save sequelize sequelize-decorators
Add to your tsconfig.json
:
"experimentalDecorators": true,
"emitDecoratorMetadata": true
The second setting lets sequelize-decorators infer the type of attributes from the type declaration.
Example:
import {Sequelize, Model, DataTypes} from 'sequelize'
import {Options, Attribute} from 'sequelize-decorators'
const sequelize = new Sequelize(process.env.DB)
@Options({
sequelize,
tableName: 'users'
})
export class User extends Model {
@Attribute({
type: DataTypes.STRING,
primaryKey: true
})
public username: string;
@Attribute(DataTypes.STRING)
public firstName: string;
@Attribute() // Type is inferred as DataTypes.STRING
public lastName: string;
get fullName(): string {
return this.firstName + ' ' + this.lastName;
}
set fullName(fullName: string) {
const names = fullName.split(' ');
this.lastName = names.pop();
this.firstName = names.join(' ');
}
}
The @Options
decorator is required and must include the sequelize
option (the connection to use).
Type inference
TypeScript type | Sequelize data type
-----------------|---------------------
string
| STRING
number
| INTEGER
Date
| DATE
Buffer
| BLOB
Usage with Babel
Installation
npm install --save sequelize sequelize-decorators
npm install --save-dev babel-plugin-transform-decorators-legacy
Add to your .babelrc
:
"plugins": ["transform-decorators-legacy"]
Example:
import {Sequelize, Model, DataTypes} from 'sequelize'
import {Options, Attributes} from 'sequelize-decorators'
const sequelize = new Sequelize(process.env.DB)
@Options({
sequelize,
tableName: 'users'
})
@Attributes({
username: {
type: DataTypes.STRING,
primaryKey: true
},
lastName: DataTypes.STRING,
firstName: DataTypes.STRING,
})
export class User extends Model {
get fullName(): string {
return this.firstName + ' ' + this.lastName;
}
set fullName(fullName: string) {
const names = fullName.split(' ');
this.lastName = names.pop();
this.firstName = names.join(' ');
}
}
The @Options
decorator is required and must include the sequelize
option (the connection to use).