teneturiste
Version:
Execute code when the js-process exits. On all javascript-environments
58 lines (57 loc) • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.add = add;
exports.getSize = getSize;
exports.removeAll = removeAll;
exports.runAll = runAll;
var _browser = require("./browser.js");
var _node = require("./node.js");
/**
* Use the code directly to prevent import problems
* with the detect-node package.
* @link https://github.com/iliakan/detect-node/blob/master/index.js
*/
var isNode = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';
var USE_METHOD = isNode ? _node.addNode : _browser.addBrowser;
var LISTENERS = new Set();
var startedListening = false;
function startListening() {
if (startedListening) {
return;
}
startedListening = true;
USE_METHOD(runAll);
}
function add(fn) {
startListening();
if (typeof fn !== 'function') {
throw new Error('Listener is no function');
}
LISTENERS.add(fn);
var addReturn = {
remove: function remove() {
return LISTENERS["delete"](fn);
},
run: function run() {
LISTENERS["delete"](fn);
return fn();
}
};
return addReturn;
}
function runAll() {
var promises = [];
LISTENERS.forEach(function (fn) {
promises.push(fn());
LISTENERS["delete"](fn);
});
return Promise.all(promises);
}
function removeAll() {
LISTENERS.clear();
}
function getSize() {
return LISTENERS.size;
}