@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
78 lines • 8.31 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const process_1 = __importDefault(require("process"));
const readline_1 = require("readline");
const lodash_1 = require("lodash");
const LOCK_KEY_PRESS_TIMEOUT = 1000;
let instance;
class LiveModeKeyboardEventObserver {
constructor() {
this.controllers = [];
this.lockKeyPress = false;
if (!instance) {
this._listenKeyEvents();
instance = this;
}
return instance;
}
push(controller) {
this.controllers.push(controller);
if (process_1.default.stdin.isTTY)
this.setRawMode(true);
}
remove(controller) {
lodash_1.pull(this.controllers, controller);
if (!this.controllers.length)
this.setRawMode(false);
}
_listenKeyEvents() {
readline_1.emitKeypressEvents(process_1.default.stdin);
process_1.default.stdin.on('keypress', this._onKeyPress.bind(this));
}
setRawMode(value) {
if (process_1.default.stdin.setRawMode !== void 0)
process_1.default.stdin.setRawMode(value);
}
_onKeyPress(string, key) {
if (this.lockKeyPress)
return;
this.lockKeyPress = true;
setTimeout(() => {
this.lockKeyPress = false;
}, LOCK_KEY_PRESS_TIMEOUT);
if (key && key.ctrl) {
switch (key.name) {
case 's':
this._stop();
return;
case 'r':
this._restart();
return;
case 'c':
this._exit();
return;
case 'w':
this._toggleWatching();
return;
}
}
}
_stop() {
this.controllers.forEach(c => c.stop());
}
_restart() {
this.controllers.forEach(c => c.restart());
}
_exit() {
this.controllers.forEach(c => c.exit());
}
_toggleWatching() {
this.controllers.forEach(c => c.toggleWatching());
}
}
exports.default = LiveModeKeyboardEventObserver;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtb2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGl2ZS9rZXlib2FyZC1vYnNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUE4QjtBQUM5Qix1Q0FBbUQ7QUFDbkQsbUNBQThCO0FBRzlCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBRXBDLElBQUksUUFBdUMsQ0FBQztBQUU1QyxNQUFxQiw2QkFBNkI7SUFJOUM7UUFIUSxnQkFBVyxHQUF5QixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHbEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRXhCLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU0sSUFBSSxDQUFFLFVBQThCO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxDLElBQUksaUJBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNLENBQUUsVUFBOEI7UUFDekMsYUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFUyxnQkFBZ0I7UUFDdEIsNkJBQWtCLENBQUMsaUJBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxpQkFBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLFVBQVUsQ0FBRSxLQUFjO1FBQzlCLElBQUksaUJBQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztZQUNuQyxpQkFBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLFdBQVcsQ0FBRSxNQUFjLEVBQUUsR0FBUTtRQUN6QyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQ2pCLE9BQU87UUFFWCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFM0IsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtZQUNqQixRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2QsS0FBSyxHQUFHO29CQUNKLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDYixPQUFPO2dCQUNYLEtBQUssR0FBRztvQkFDSixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE9BQU87Z0JBQ1gsS0FBSyxHQUFHO29CQUNKLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDYixPQUFPO2dCQUNYLEtBQUssR0FBRztvQkFDSixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLE9BQU87YUFDZDtTQUNKO0lBQ0wsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxRQUFRO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sS0FBSztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0o7QUFsRkQsZ0RBa0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBlbWl0S2V5cHJlc3NFdmVudHMsIEtleSB9IGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCB7IHB1bGwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IExpdmVNb2RlQ29udHJvbGxlciBmcm9tICcuL2NvbnRyb2xsZXInO1xuXG5jb25zdCBMT0NLX0tFWV9QUkVTU19USU1FT1VUID0gMTAwMDtcblxubGV0IGluc3RhbmNlOiBMaXZlTW9kZUtleWJvYXJkRXZlbnRPYnNlcnZlcjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGl2ZU1vZGVLZXlib2FyZEV2ZW50T2JzZXJ2ZXIge1xuICAgIHByaXZhdGUgY29udHJvbGxlcnM6IExpdmVNb2RlQ29udHJvbGxlcltdID0gW107XG4gICAgcHJpdmF0ZSBsb2NrS2V5UHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbktleUV2ZW50cygpO1xuXG4gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIHB1c2ggKGNvbnRyb2xsZXI6IExpdmVNb2RlQ29udHJvbGxlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLnB1c2goY29udHJvbGxlcik7XG5cbiAgICAgICAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpXG4gICAgICAgICAgICB0aGlzLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZSAoY29udHJvbGxlcjogTGl2ZU1vZGVDb250cm9sbGVyKTogdm9pZCB7XG4gICAgICAgIHB1bGwodGhpcy5jb250cm9sbGVycywgY29udHJvbGxlcik7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2xsZXJzLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9saXN0ZW5LZXlFdmVudHMgKCk6IHZvaWQge1xuICAgICAgICBlbWl0S2V5cHJlc3NFdmVudHMocHJvY2Vzcy5zdGRpbik7XG5cbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5vbigna2V5cHJlc3MnLCB0aGlzLl9vbktleVByZXNzLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmF3TW9kZSAodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgcHJvY2Vzcy5zdGRpbi5zZXRSYXdNb2RlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbktleVByZXNzIChzdHJpbmc6IHN0cmluZywga2V5OiBLZXkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubG9ja0tleVByZXNzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMubG9ja0tleVByZXNzID0gdHJ1ZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9ja0tleVByZXNzID0gZmFsc2U7XG4gICAgICAgIH0sIExPQ0tfS0VZX1BSRVNTX1RJTUVPVVQpO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5LmN0cmwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3RhcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGl0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlV2F0Y2hpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RvcCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChjID0+IGMuc3RvcCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXN0YXJ0ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVycy5mb3JFYWNoKGMgPT4gYy5yZXN0YXJ0KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2V4aXQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLmZvckVhY2goYyA9PiBjLmV4aXQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdG9nZ2xlV2F0Y2hpbmcgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLmZvckVhY2goYyA9PiBjLnRvZ2dsZVdhdGNoaW5nKCkpO1xuICAgIH1cbn1cbiJdfQ==