
Security News
Suno Breached via Shai-Hulud Worm, Leaked Code Exposes AI Music Scraping
A Shai-Hulud infection exposed Suno's source code, which shows the AI music startup stream-ripped tracks to train its models.
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
The npm package sequelizejs-decorators receives a total of 51 weekly downloads. As such, sequelizejs-decorators popularity was classified as not popular.
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
A Shai-Hulud infection exposed Suno's source code, which shows the AI music startup stream-ripped tracks to train its models.

Security News
Vercel is formalizing a monthly release program for Next.js. The change follows React2Shell and a sharp rise in AI-assisted vulnerability discovery.

Research
/Security News
11 malicious NuGet tools pose as game cheats to deploy Windows payloads, track hosts, and use Google Sheets for telemetry and control.