1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const process_1 = __importDefault(require("process"));
|
7 | const readline_1 = require("readline");
|
8 | const lodash_1 = require("lodash");
|
9 | const LOCK_KEY_PRESS_TIMEOUT = 1000;
|
10 | let instance;
|
11 | class LiveModeKeyboardEventObserver {
|
12 | constructor() {
|
13 | this.controllers = [];
|
14 | this.lockKeyPress = false;
|
15 | if (!instance) {
|
16 | this._listenKeyEvents();
|
17 | instance = this;
|
18 | }
|
19 | return instance;
|
20 | }
|
21 | push(controller) {
|
22 | this.controllers.push(controller);
|
23 | if (process_1.default.stdin.isTTY)
|
24 | this.setRawMode(true);
|
25 | }
|
26 | remove(controller) {
|
27 | lodash_1.pull(this.controllers, controller);
|
28 | if (!this.controllers.length)
|
29 | this.setRawMode(false);
|
30 | }
|
31 | _listenKeyEvents() {
|
32 | readline_1.emitKeypressEvents(process_1.default.stdin);
|
33 | process_1.default.stdin.on('keypress', this._onKeyPress.bind(this));
|
34 | }
|
35 | setRawMode(value) {
|
36 | if (process_1.default.stdin.setRawMode !== void 0)
|
37 | process_1.default.stdin.setRawMode(value);
|
38 | }
|
39 | _onKeyPress(string, key) {
|
40 | if (this.lockKeyPress)
|
41 | return;
|
42 | this.lockKeyPress = true;
|
43 | setTimeout(() => {
|
44 | this.lockKeyPress = false;
|
45 | }, LOCK_KEY_PRESS_TIMEOUT);
|
46 | if (key && key.ctrl) {
|
47 | switch (key.name) {
|
48 | case 's':
|
49 | this._stop();
|
50 | return;
|
51 | case 'r':
|
52 | this._restart();
|
53 | return;
|
54 | case 'c':
|
55 | this._exit();
|
56 | return;
|
57 | case 'w':
|
58 | this._toggleWatching();
|
59 | return;
|
60 | }
|
61 | }
|
62 | }
|
63 | _stop() {
|
64 | this.controllers.forEach(c => c.stop());
|
65 | }
|
66 | _restart() {
|
67 | this.controllers.forEach(c => c.restart());
|
68 | }
|
69 | _exit() {
|
70 | this.controllers.forEach(c => c.exit());
|
71 | }
|
72 | _toggleWatching() {
|
73 | this.controllers.forEach(c => c.toggleWatching());
|
74 | }
|
75 | }
|
76 | exports.default = LiveModeKeyboardEventObserver;
|
77 | module.exports = exports.default;
|
78 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtb2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGl2ZS9rZXlib2FyZC1vYnNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUE4QjtBQUM5Qix1Q0FBbUQ7QUFDbkQsbUNBQThCO0FBRzlCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBRXBDLElBQUksUUFBdUMsQ0FBQztBQUU1QyxNQUFxQiw2QkFBNkI7SUFJOUM7UUFIUSxnQkFBVyxHQUF5QixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHbEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRXhCLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU0sSUFBSSxDQUFFLFVBQThCO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxDLElBQUksaUJBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSztZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNLENBQUUsVUFBOEI7UUFDekMsYUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFUyxnQkFBZ0I7UUFDdEIsNkJBQWtCLENBQUMsaUJBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxpQkFBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLFVBQVUsQ0FBRSxLQUFjO1FBQzlCLElBQUksaUJBQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztZQUNuQyxpQkFBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLFdBQVcsQ0FBRSxNQUFjLEVBQUUsR0FBUTtRQUN6QyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQ2pCLE9BQU87UUFFWCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFM0IsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtZQUNqQixRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2QsS0FBSyxHQUFHO29CQUNKLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDYixPQUFPO2dCQUNYLEtBQUssR0FBRztvQkFDSixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE9BQU87Z0JBQ1gsS0FBSyxHQUFHO29CQUNKLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDYixPQUFPO2dCQUNYLEtBQUssR0FBRztvQkFDSixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLE9BQU87YUFDZDtTQUNKO0lBQ0wsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxRQUFRO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sS0FBSztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0o7QUFsRkQsZ0RBa0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBlbWl0S2V5cHJlc3NFdmVudHMsIEtleSB9IGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCB7IHB1bGwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IExpdmVNb2RlQ29udHJvbGxlciBmcm9tICcuL2NvbnRyb2xsZXInO1xuXG5jb25zdCBMT0NLX0tFWV9QUkVTU19USU1FT1VUID0gMTAwMDtcblxubGV0IGluc3RhbmNlOiBMaXZlTW9kZUtleWJvYXJkRXZlbnRPYnNlcnZlcjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGl2ZU1vZGVLZXlib2FyZEV2ZW50T2JzZXJ2ZXIge1xuICAgIHByaXZhdGUgY29udHJvbGxlcnM6IExpdmVNb2RlQ29udHJvbGxlcltdID0gW107XG4gICAgcHJpdmF0ZSBsb2NrS2V5UHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbktleUV2ZW50cygpO1xuXG4gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIHB1c2ggKGNvbnRyb2xsZXI6IExpdmVNb2RlQ29udHJvbGxlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLnB1c2goY29udHJvbGxlcik7XG5cbiAgICAgICAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpXG4gICAgICAgICAgICB0aGlzLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZSAoY29udHJvbGxlcjogTGl2ZU1vZGVDb250cm9sbGVyKTogdm9pZCB7XG4gICAgICAgIHB1bGwodGhpcy5jb250cm9sbGVycywgY29udHJvbGxlcik7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2xsZXJzLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9saXN0ZW5LZXlFdmVudHMgKCk6IHZvaWQge1xuICAgICAgICBlbWl0S2V5cHJlc3NFdmVudHMocHJvY2Vzcy5zdGRpbik7XG5cbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5vbigna2V5cHJlc3MnLCB0aGlzLl9vbktleVByZXNzLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmF3TW9kZSAodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgcHJvY2Vzcy5zdGRpbi5zZXRSYXdNb2RlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbktleVByZXNzIChzdHJpbmc6IHN0cmluZywga2V5OiBLZXkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubG9ja0tleVByZXNzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMubG9ja0tleVByZXNzID0gdHJ1ZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9ja0tleVByZXNzID0gZmFsc2U7XG4gICAgICAgIH0sIExPQ0tfS0VZX1BSRVNTX1RJTUVPVVQpO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5LmN0cmwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3RhcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9leGl0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlV2F0Y2hpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RvcCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlcnMuZm9yRWFjaChjID0+IGMuc3RvcCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXN0YXJ0ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVycy5mb3JFYWNoKGMgPT4gYy5yZXN0YXJ0KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2V4aXQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLmZvckVhY2goYyA9PiBjLmV4aXQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdG9nZ2xlV2F0Y2hpbmcgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLmZvckVhY2goYyA9PiBjLnRvZ2dsZVdhdGNoaW5nKCkpO1xuICAgIH1cbn1cbiJdfQ== |
\ | No newline at end of file |