strapi/packages/core/database/lib/lifecycles.js
2021-08-04 17:47:38 +02:00

55 lines
1.2 KiB
JavaScript

'use strict';
const createLifecyclesManager = db => {
const lifecycleManager = {
_subscribers: [],
subscribe(subscriber) {
// TODO: verify subscriber
this._subscribers.push(subscriber);
return () => {
this._subscribers.splice(this._subscribers.indexOf(subscriber), 1);
};
},
createEvent(action, uid, properties) {
const model = db.metadata.get(uid);
return {
action,
model,
...properties,
};
},
async run(action, uid, properties) {
for (const subscriber of this._subscribers) {
if (typeof subscriber === 'function') {
const event = this.createEvent(action, uid, properties);
return await subscriber(event);
}
const hasAction = action in subscriber;
const hasModel = !subscriber.models || subscriber.models.includes(uid);
if (hasAction && hasModel) {
const event = this.createEvent(action, uid, properties);
await subscriber[action](event);
}
}
},
clear() {
this._subscribers = [];
},
};
return lifecycleManager;
};
module.exports = {
createLifecyclesManager,
};