UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

49 lines 6.72 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const pinkie_1 = __importDefault(require("pinkie")); const events_1 = require("events"); const promisify_event_1 = __importDefault(require("promisify-event")); const time_limit_promise_1 = __importDefault(require("time-limit-promise")); const REMOTE_REDIRECT_TIMEOUT = 10000; const ADDING_CONNECTION_WAITING_TIMEOUT = 10000; class RemotesQueue { constructor() { this.events = new events_1.EventEmitter(); this.shiftingTimeout = pinkie_1.default.resolve(); this.pendingConnections = {}; } add(remoteConnection) { const connectionReadyPromise = promisify_event_1.default(remoteConnection, 'ready') .then(() => this.remove(remoteConnection)); this.pendingConnections[remoteConnection.id] = { connection: remoteConnection, readyPromise: connectionReadyPromise }; this.events.emit('connection-added', remoteConnection.id); } remove(remoteConnection) { delete this.pendingConnections[remoteConnection.id]; } shift() { const shiftingPromise = this.shiftingTimeout .then(async () => { let headId = Object.keys(this.pendingConnections)[0]; if (!headId) headId = await time_limit_promise_1.default(promisify_event_1.default(this.events, 'connection-added'), ADDING_CONNECTION_WAITING_TIMEOUT); return headId ? this.pendingConnections[headId].connection : null; }); this.shiftingTimeout = shiftingPromise .then(connection => { if (!connection) return pinkie_1.default.resolve(); return time_limit_promise_1.default(this.pendingConnections[connection.id].readyPromise, REMOTE_REDIRECT_TIMEOUT); }); return shiftingPromise; } } exports.default = RemotesQueue; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3Rlcy1xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9icm93c2VyL2Nvbm5lY3Rpb24vcmVtb3Rlcy1xdWV1ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE2QjtBQUM3QixtQ0FBc0M7QUFDdEMsc0VBQTZDO0FBQzdDLDRFQUF1RDtBQUd2RCxNQUFNLHVCQUF1QixHQUFhLEtBQUssQ0FBQztBQUNoRCxNQUFNLGlDQUFpQyxHQUFHLEtBQUssQ0FBQztBQUVoRCxNQUFxQixZQUFZO0lBQzdCO1FBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBZSxJQUFJLHFCQUFZLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxHQUFNLGdCQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsR0FBRyxDQUFFLGdCQUFnQjtRQUNqQixNQUFNLHNCQUFzQixHQUFHLHlCQUFjLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDO2FBQ25FLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEdBQUc7WUFDM0MsVUFBVSxFQUFJLGdCQUFnQjtZQUM5QixZQUFZLEVBQUUsc0JBQXNCO1NBQ3ZDLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxDQUFFLGdCQUFnQjtRQUNwQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlO2FBQ3ZDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNiLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckQsSUFBSSxDQUFDLE1BQU07Z0JBQ1AsTUFBTSxHQUFHLE1BQU0sNEJBQXFCLENBQUMseUJBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUU3SCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlO2FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVO2dCQUNYLE9BQU8sZ0JBQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUU3QixPQUFPLDRCQUFxQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDL0csQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0NBQ0o7QUE1Q0QsK0JBNENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb21pc2UgZnJvbSAncGlua2llJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgcHJvbWlzaWZ5RXZlbnQgZnJvbSAncHJvbWlzaWZ5LWV2ZW50JztcbmltcG9ydCBnZXRUaW1lTGltaXRlZFByb21pc2UgZnJvbSAndGltZS1saW1pdC1wcm9taXNlJztcblxuXG5jb25zdCBSRU1PVEVfUkVESVJFQ1RfVElNRU9VVCAgICAgICAgICAgPSAxMDAwMDtcbmNvbnN0IEFERElOR19DT05ORUNUSU9OX1dBSVRJTkdfVElNRU9VVCA9IDEwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW1vdGVzUXVldWUge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgdGhpcy5ldmVudHMgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuc2hpZnRpbmdUaW1lb3V0ICAgID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25zID0ge307XG4gICAgfVxuXG4gICAgYWRkIChyZW1vdGVDb25uZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25SZWFkeVByb21pc2UgPSBwcm9taXNpZnlFdmVudChyZW1vdGVDb25uZWN0aW9uLCAncmVhZHknKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yZW1vdmUocmVtb3RlQ29ubmVjdGlvbikpO1xuXG4gICAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25zW3JlbW90ZUNvbm5lY3Rpb24uaWRdID0ge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogICByZW1vdGVDb25uZWN0aW9uLFxuICAgICAgICAgICAgcmVhZHlQcm9taXNlOiBjb25uZWN0aW9uUmVhZHlQcm9taXNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdCgnY29ubmVjdGlvbi1hZGRlZCcsIHJlbW90ZUNvbm5lY3Rpb24uaWQpO1xuICAgIH1cblxuICAgIHJlbW92ZSAocmVtb3RlQ29ubmVjdGlvbikge1xuICAgICAgICBkZWxldGUgdGhpcy5wZW5kaW5nQ29ubmVjdGlvbnNbcmVtb3RlQ29ubmVjdGlvbi5pZF07XG4gICAgfVxuXG4gICAgc2hpZnQgKCkge1xuICAgICAgICBjb25zdCBzaGlmdGluZ1Byb21pc2UgPSB0aGlzLnNoaWZ0aW5nVGltZW91dFxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBoZWFkSWQgPSBPYmplY3Qua2V5cyh0aGlzLnBlbmRpbmdDb25uZWN0aW9ucylbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAoIWhlYWRJZClcbiAgICAgICAgICAgICAgICAgICAgaGVhZElkID0gYXdhaXQgZ2V0VGltZUxpbWl0ZWRQcm9taXNlKHByb21pc2lmeUV2ZW50KHRoaXMuZXZlbnRzLCAnY29ubmVjdGlvbi1hZGRlZCcpLCBBRERJTkdfQ09OTkVDVElPTl9XQUlUSU5HX1RJTUVPVVQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRJZCA/IHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25zW2hlYWRJZF0uY29ubmVjdGlvbiA6IG51bGw7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNoaWZ0aW5nVGltZW91dCA9IHNoaWZ0aW5nUHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oY29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VGltZUxpbWl0ZWRQcm9taXNlKHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25zW2Nvbm5lY3Rpb24uaWRdLnJlYWR5UHJvbWlzZSwgUkVNT1RFX1JFRElSRUNUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNoaWZ0aW5nUHJvbWlzZTtcbiAgICB9XG59XG4iXX0=