"use strict"; const consumable = require("@joepie91/consumable"); module.exports = function createPromiseListener() { let listeners = consumable([]); function consumeListeners() { /* To ensure that a resolve/reject is atomic, and can never apply to the same listener queue twice. */ return listeners.replace([]); } return { listen: function () { return new Promise((resolve, reject) => { listeners.peek().push({ resolve, reject }); }); }, resolve: function (value) { consumeListeners().forEach((listener) => { listener.resolve(value); }); }, reject: function (value) { consumeListeners().forEach((listener) => { listener.reject(value); }); }, } };