testcafe
Version:
Automated browser testing for the modern web development stack.
49 lines • 6.72 kB
JavaScript
;
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=