@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
48 lines • 7.18 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
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 = Promise.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 Promise.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3Rlcy1xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9icm93c2VyL2Nvbm5lY3Rpb24vcmVtb3Rlcy1xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFzQztBQUN0QyxzRUFBNkM7QUFDN0MsNEVBQXVEO0FBSXZELE1BQU0sdUJBQXVCLEdBQWEsS0FBSyxDQUFDO0FBQ2hELE1BQU0saUNBQWlDLEdBQUcsS0FBSyxDQUFDO0FBT2hELE1BQXFCLFlBQVk7SUFLN0I7UUFDSSxJQUFJLENBQUMsTUFBTSxHQUFlLElBQUkscUJBQVksRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxlQUFlLEdBQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLEdBQUcsQ0FBRSxnQkFBbUM7UUFDM0MsTUFBTSxzQkFBc0IsR0FBRyx5QkFBYyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQzthQUNuRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxHQUFHO1lBQzNDLFVBQVUsRUFBSSxnQkFBZ0I7WUFDOUIsWUFBWSxFQUFFLHNCQUFzQjtTQUN2QyxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLE1BQU0sQ0FBRSxnQkFBbUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLEtBQUs7UUFDUixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZTthQUN2QyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDYixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJELElBQUksQ0FBQyxNQUFNO2dCQUNQLE1BQU0sR0FBRyxNQUFNLDRCQUFxQixDQUFDLHlCQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7WUFFN0gsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZTthQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVTtnQkFDWCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUU3QixPQUFPLDRCQUFxQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDL0csQ0FBQyxDQUFDLENBQUM7UUFFUCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0NBQ0o7QUFoREQsK0JBZ0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBwcm9taXNpZnlFdmVudCBmcm9tICdwcm9taXNpZnktZXZlbnQnO1xuaW1wb3J0IGdldFRpbWVMaW1pdGVkUHJvbWlzZSBmcm9tICd0aW1lLWxpbWl0LXByb21pc2UnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi9pbmRleCc7XG5cbmNvbnN0IFJFTU9URV9SRURJUkVDVF9USU1FT1VUICAgICAgICAgICA9IDEwMDAwO1xuY29uc3QgQURESU5HX0NPTk5FQ1RJT05fV0FJVElOR19USU1FT1VUID0gMTAwMDA7XG5cbmludGVyZmFjZSBQZW5kaW5nQ29ubmVjdGlvbiB7XG4gICAgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb247XG4gICAgcmVhZHlQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW1vdGVzUXVldWUge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRzOiBFdmVudEVtaXR0ZXI7XG4gICAgcHJpdmF0ZSBzaGlmdGluZ1RpbWVvdXQ6IFByb21pc2U8dm9pZD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nQ29ubmVjdGlvbnM6IERpY3Rpb25hcnk8UGVuZGluZ0Nvbm5lY3Rpb24+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgdGhpcy5ldmVudHMgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuc2hpZnRpbmdUaW1lb3V0ICAgID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25zID0ge307XG4gICAgfVxuXG4gICAgcHVibGljIGFkZCAocmVtb3RlQ29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblJlYWR5UHJvbWlzZSA9IHByb21pc2lmeUV2ZW50KHJlbW90ZUNvbm5lY3Rpb24sICdyZWFkeScpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnJlbW92ZShyZW1vdGVDb25uZWN0aW9uKSk7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvbnNbcmVtb3RlQ29ubmVjdGlvbi5pZF0gPSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uOiAgIHJlbW90ZUNvbm5lY3Rpb24sXG4gICAgICAgICAgICByZWFkeVByb21pc2U6IGNvbm5lY3Rpb25SZWFkeVByb21pc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KCdjb25uZWN0aW9uLWFkZGVkJywgcmVtb3RlQ29ubmVjdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZSAocmVtb3RlQ29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25zW3JlbW90ZUNvbm5lY3Rpb24uaWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaGlmdCAoKTogUHJvbWlzZTxCcm93c2VyQ29ubmVjdGlvbiB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc2hpZnRpbmdQcm9taXNlID0gdGhpcy5zaGlmdGluZ1RpbWVvdXRcbiAgICAgICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaGVhZElkID0gT2JqZWN0LmtleXModGhpcy5wZW5kaW5nQ29ubmVjdGlvbnMpWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoZWFkSWQpXG4gICAgICAgICAgICAgICAgICAgIGhlYWRJZCA9IGF3YWl0IGdldFRpbWVMaW1pdGVkUHJvbWlzZShwcm9taXNpZnlFdmVudCh0aGlzLmV2ZW50cywgJ2Nvbm5lY3Rpb24tYWRkZWQnKSwgQURESU5HX0NPTk5FQ1RJT05fV0FJVElOR19USU1FT1VUKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBoZWFkSWQgPyB0aGlzLnBlbmRpbmdDb25uZWN0aW9uc1toZWFkSWRdLmNvbm5lY3Rpb24gOiBudWxsO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zaGlmdGluZ1RpbWVvdXQgPSBzaGlmdGluZ1Byb21pc2VcbiAgICAgICAgICAgIC50aGVuKGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFRpbWVMaW1pdGVkUHJvbWlzZSh0aGlzLnBlbmRpbmdDb25uZWN0aW9uc1tjb25uZWN0aW9uLmlkXS5yZWFkeVByb21pc2UsIFJFTU9URV9SRURJUkVDVF9USU1FT1VUKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzaGlmdGluZ1Byb21pc2U7XG4gICAgfVxufVxuIl19