"use strict"; 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; }