1.0.3 • Published 3 years ago

sequelize-extension v1.0.3

Weekly downloads
5
License
MIT
Repository
github
Last release
3 years ago

sequelize-extension

Build Status codecov GitHub license

This module provides pre-built extensions and an interface to extend sequelize models.

Installation

$ npm install --save sequelize
$ npm install --save sequelize-extension

Usage

const Sequelize = require('sequelize');
const extendSequelize = require('sequelize-extension');

const sequelize = new Sequelize(...);

// Load Models
const db = {};
fs
  .readdirSync(__dirname)
  .filter(file => (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'))
  .forEach((file) => {
    const model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  });
  
// Associate Models
db.forEach((model) => {
  if (model.associate) {
    model.associate(db);
  }
});

extendSequelize(db, {
  myCustomExtension: (db, hooks, settings) => {
    const { utils } = settings;
    _.each(db, (model) => {
      if (utils.isModel(model)) {
        _.each(utils.getAssociations(model), (association) => {
          if (utils.isListAssociation(association)) {
            // do something...
          }
        });
      }
    });
  },
});

Built-in Extensions

The built-in extensions are disabled by default. In order to enable, you can call like below:

extendSequelize(db, {
  createdBy: {},
  deletedBy: {},
  updatedBy: {},
  graphql: { gts },
  tracking: { log: console.log },
});

The built-in extensions are:

Custom Extensions

Hooks

extendSequelize(db, {
  extensionName: (db, hooks, settings) => {
    hooks.beforeUpdate.push(async (instance, options) => {
      // do something
    });
  },
});

Single instance triggers:

  • beforeUpdate (instance: Model, options: Object)
  • afterUpdate (instance: Model, options: Object)
  • beforeCreate (instance: Model, options: Object)
  • afterCreate (instance: Model, options: Object)
  • beforeDestroy (instance: Model, options: Object)
  • afterDestroy (instance: Model, options: Object)

For bulk triggers, you can pull the bulked instances using utils.getBulkedInstances(model, options). It will make at maximum one call to the database and cache the result in the options.

  • beforeBulkUpdate (options: Object)
  • afterBulkUpdate (options: Object)
  • beforeBulkCreate (options: Object)
  • afterBulkCreate (options: Object)
  • beforeBulkDestroy (options: Object)
  • afterBulkDestroy (options: Object)
1.0.3

3 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

0.1.13

4 years ago

0.1.12

4 years ago

0.1.11

4 years ago

0.1.10

4 years ago

0.1.9

6 years ago

0.1.8

6 years ago

0.1.7

6 years ago

0.1.6

6 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago