const callbacks = exports = module.exports = {};
callbacks.initCallbacks = function init() {
this.callbacks = {}
};
callbacks.addCallback = function addCallback(hook, callback) {
// if callback array doesn't exist yet, initialize it
if (typeof this.callbacks[hook] === 'undefined') {
this.callbacks[hook] = [];
}
this.callbacks[hook].push(callback);
}
callbacks.runCallbacks = function runCallbacks(hook, item, ...args) {
const callbackQueue = this.callbacks[hook];
// if the hook exists, and contains callbacks to run
if (typeof callbackQueue !== "undefined" && !!callbackQueue.length) {
return callbackQueue.reduce(function(result, callback) {
const newArguments = [result, ...args];
return callback.apply(this, newArguments);
}, item);
}
return item;
}