bare-tty 2.0.1 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/binding.c +50 -0
  2. package/index.js +25 -0
  3. package/package.json +1 -1
package/binding.c CHANGED
@@ -463,6 +463,51 @@ bare_tty_set_mode (js_env_t *env, js_callback_info_t *info) {
463
463
  return NULL;
464
464
  }
465
465
 
466
+ static js_value_t *
467
+ bare_tty_get_window_size (js_env_t *env, js_callback_info_t *info) {
468
+ int err;
469
+
470
+ size_t argc = 1;
471
+ js_value_t *argv[1];
472
+
473
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
474
+ assert(err == 0);
475
+
476
+ assert(argc == 1);
477
+
478
+ bare_tty_t *tty;
479
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
480
+ assert(err == 0);
481
+
482
+ int width, height;
483
+ err = uv_tty_get_winsize(&tty->handle, &width, &height);
484
+
485
+ if (err < 0) {
486
+ js_throw_error(env, uv_err_name(err), uv_strerror(err));
487
+ return NULL;
488
+ }
489
+
490
+ js_value_t *result;
491
+ err = js_create_array_with_length(env, 2, &result);
492
+ assert(err == 0);
493
+
494
+ js_value_t *value;
495
+
496
+ err = js_create_int32(env, width, &value);
497
+ assert(err == 0);
498
+
499
+ err = js_set_element(env, result, 0, value);
500
+ assert(err == 0);
501
+
502
+ err = js_create_int32(env, height, &value);
503
+ assert(err == 0);
504
+
505
+ err = js_set_element(env, result, 1, value);
506
+ assert(err == 0);
507
+
508
+ return result;
509
+ }
510
+
466
511
  static js_value_t *
467
512
  init (js_env_t *env, js_value_t *exports) {
468
513
  {
@@ -500,6 +545,11 @@ init (js_env_t *env, js_value_t *exports) {
500
545
  js_create_function(env, "setMode", -1, bare_tty_set_mode, NULL, &fn);
501
546
  js_set_named_property(env, exports, "setMode", fn);
502
547
  }
548
+ {
549
+ js_value_t *fn;
550
+ js_create_function(env, "getWindowSize", -1, bare_tty_get_window_size, NULL, &fn);
551
+ js_set_named_property(env, exports, "getWindowSize", fn);
552
+ }
503
553
  {
504
554
  js_value_t *val;
505
555
  js_create_uint32(env, UV_TTY_MODE_NORMAL, &val);
package/index.js CHANGED
@@ -25,6 +25,8 @@ exports.ReadStream = class TTYReadStream extends Readable {
25
25
  this._onread,
26
26
  this._onclose
27
27
  )
28
+
29
+ TTYReadStream._streams.add(this)
28
30
  }
29
31
 
30
32
  get isTTY () {
@@ -46,6 +48,7 @@ exports.ReadStream = class TTYReadStream extends Readable {
46
48
  _destroy (cb) {
47
49
  this._pendingDestroy = cb
48
50
  binding.close(this._handle)
51
+ TTYReadStream._streams.delete(this)
49
52
  }
50
53
 
51
54
  _continueDestroy () {
@@ -80,6 +83,8 @@ exports.ReadStream = class TTYReadStream extends Readable {
80
83
  this._handle = null
81
84
  this._continueDestroy()
82
85
  }
86
+
87
+ static _streams = new Set()
83
88
  }
84
89
 
85
90
  exports.WriteStream = class TTYWriteStream extends Writable {
@@ -96,12 +101,18 @@ exports.WriteStream = class TTYWriteStream extends Writable {
96
101
  noop,
97
102
  this._onclose
98
103
  )
104
+
105
+ TTYWriteStream._streams.add(this)
99
106
  }
100
107
 
101
108
  get isTTY () {
102
109
  return true
103
110
  }
104
111
 
112
+ getWindowSize () {
113
+ return binding.getWindowSize(this._handle)
114
+ }
115
+
105
116
  _writev (datas, cb) {
106
117
  this._pendingWrite = cb
107
118
  binding.writev(this._handle, datas)
@@ -115,6 +126,7 @@ exports.WriteStream = class TTYWriteStream extends Writable {
115
126
  _destroy (cb) {
116
127
  this._pendingDestroy = cb
117
128
  binding.close(this._handle)
129
+ TTYWriteStream._streams.delete(this)
118
130
  }
119
131
 
120
132
  _continueWrite (err) {
@@ -171,6 +183,8 @@ exports.WriteStream = class TTYWriteStream extends Writable {
171
183
  this._handle = null
172
184
  this._continueDestroy()
173
185
  }
186
+
187
+ static _streams = new Set()
174
188
  }
175
189
 
176
190
  exports.constants = {
@@ -179,6 +193,17 @@ exports.constants = {
179
193
  MODE_IO: binding.MODE_IO || 0
180
194
  }
181
195
 
196
+ process
197
+ .on('exit', () => {
198
+ for (const stream of exports.ReadStream._streams) {
199
+ stream.destroy()
200
+ }
201
+
202
+ for (const stream of exports.WriteStream._streams) {
203
+ stream.destroy()
204
+ }
205
+ })
206
+
182
207
  const empty = Buffer.alloc(0)
183
208
 
184
209
  function noop () {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-tty",
3
- "version": "2.0.1",
3
+ "version": "2.1.1",
4
4
  "description": "Native TTY streams for JavaScript",
5
5
  "main": "index.js",
6
6
  "files": [