
Security News
Frontier AI Is Now Critical Infrastructure
The Fable shutdown shows how quickly model access can become a business continuity risk for AI-dependent engineering teams.
sequelizejs-decorators
Advanced tools
Decorators for use with sequelize ORM. Version now follows the Sequelize library version (5.* -> 5.*) from version 5 onward.
$ npm install sequelizejs-decorators sequelize
you will want need to add the following to your tsconfig.json compiler options
"emitDecoratorMetadata": true,
"experimentalDecorators": true
Player.ts
import {
Entity,
PrimaryGeneratedColumn,
Index,
Column,
CreatedDateColumn,
UpdatedDateColumn,
DataType,
BelongsTo
} from 'sequelizejs-decorators';
import {Team} from './Team';
import {IncludeAssociation, Model, Instance} from 'sequelize';
@Entity()
export class Player {
@PrimaryGeneratedColumn()
public id: number;
@Column({
type: DataType.STRING(100),
allowNull: false
})
public name: string;
@Column({
type: DataType.INTEGER
})
public number: string;
@CreatedDateColumn()
public created: Date;
@UpdatedDateColumn()
public updated: Date;
@BelongsTo(() => Team)
public team: Team;
}
export interface PlayerInstance extends Instance<Player>, Player {
setTeam(team: Team);
}
export interface PlayerModel extends Model<PlayerInstance, Player> {
team: IncludeAssociation;
}
Team.ts
import {
Entity,
PrimaryGeneratedColumn,
Index,
Column,
CreatedDateColumn,
UpdatedDateColumn,
DataType,
HasMany,
ManyToMany
} from 'sequelizejs-decorators';
import {Player} from './Player';
import {IncludeAssociation, Model, Instance} from 'sequelize';
@Entity()
export class Team {
@PrimaryGeneratedColumn()
public id: number;
@Index({
unique: true
})
@Column({
type: DataType.STRING(100),
unique: true,
allowNull: false
})
public name: string;
@CreatedDateColumn()
public created: Date;
@UpdatedDateColumn()
public updated: Date;
@HasMany(() => Player)
public players: Player[];
@ManyToMany(() => Game, { through: 'TeamGames' })
public games: Game[];
}
export interface TeamInstance extends Instance<Team>, Team {
addPlayer(player: Player);
addGame(game: Game);
}
export interface TeamModel extends Model<TeamInstance, Team> {
players: IncludeAssociation;
games: IncludeAssociation;
}
Game.ts
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreatedDateColumn,
UpdatedDateColumn,
DataType,
ManyToMany
} from 'sequelizejs-decorators';
import {Team} from './Team';
import {IncludeAssociation, Model, Instance} from 'sequelize';
@Entity()
export class Game {
@PrimaryGeneratedColumn()
public id: number;
@Column({
type: DataType.STRING(200),
allowNull: false
})
public location: string;
@Column({
type: DataType.DATE
})
pubilc time: Date;
@CreatedDateColumn()
public created: Date;
@UpdatedDateColumn()
public updated: Date;
@ManyToMany(() => Team, { through: 'TeamGames' })
public teams: Team[];
}
export interface GameInstance extends Instance<Game>, Game {
addTeam(team: Team);
}
export interface GameModel extends Model<GameInstance, Game> {
teams: IncludeAssociation;
}
Database.ts
import { Options, Sequelize } from 'sequelize';
import SequelizeDb = require('sequelize');
import { Player, PlayerModel } from './Player';
import { Team, TeamModel } from './Team';
import { Game, GameModel } from './Game';
import { registerEntities } from 'sequelizejs-decorators';
export class Database {
private _db: Sequelize;
private _models: Models;
/**
* constructor
* @param config database config options
*/
public constructor(config: Options) {
config.operatorsAliases = {};
this._db = new SequelizeDb(config);
}
public get player(): PlayerModel {
this.checkIfTableNull(this._models.Player);
return this._models.Player as PlayerModel;
}
public get team(): TeamModel {
this.checkIfTableNull(this._models.Team);
return this._models.Team as TeamModel;
}
public get game(): GameModel {
this.checkIfTableNull(this._models.Game);
return this._models.Game as GameModel;
}
/**
* initiates the database connection
*/
public connect(): Promise<boolean> {
return new Promise((resolve, reject) => {
this._db.authenticate().then(() => {
this._models = registerEntities(this._db, [
Player,
Team,
Game
]);
this._db.sync().then(() => {
resolve(true);
}).catch((ex: Error) => {
reject(ex);
});
}).catch((ex: Error) => {
reject(ex);
});
});
}
/**
* closes the database connection
*/
public close(): Promise<void> {
return new Promise((resolve, reject) => {
this._db.close().then(() => {
resolve();
}).catch((ex: Error) => {
reject(ex);
});
});
}
public async testConnection(): Promise<boolean> {
await this._db.authenticate().catch(() => false);
return true;
}
private checkIfTableNull(table: any): void {
if (table == null) { throw new Error('database not initialized'); }
}
}
index.ts
import { Options, Sequelize } from 'sequelize';
import {Database} from './Database';
let dbOptions = {
// sequelize options here
} as Options;
let dbInstance: Database = new Database(dbOptions);
dbInstance.connect().then(async () => {
// now you can use db instance as your data access
let player = await dbInstance.player.create({
name: 'Michael Jordan',
number: 23
});
// or
let team = await dbInstance.team.create({
name: 'Chicago Bulls',
players: [
{
name: 'Michael Jordan',
number: 23
}
]
}, {
include: [
{ association: dbInstance.team.players }
]
});
});
FAQs
decorators for sequelize v6* ORM for NodeJS
We found that sequelizejs-decorators demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Fable shutdown shows how quickly model access can become a business continuity risk for AI-dependent engineering teams.

Security News
AI agents are pulling packages into environments no scanner is watching, creating exposure before security teams can see it.

Security News
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.