Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

sequelize-decorators

1.0.2 • Public • Published

Sequelize + Decorators = ❤

Version Downloads Build Status codecov Dependency Status License

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).

Keywords

none

install

npm i sequelize-decorators

Downloadsweekly downloads

200

version

1.0.2

license

ISC

repository

githubgithub

last publish

collaborators

  • avatar