UNPKG

@browserstack/testcafe

Version:

Automated browser testing for the modern web development stack.

78 lines 8.31 kB
"use strict"; 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==