bare-tty 5.0.0 → 5.0.2

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.
package/binding.c CHANGED
@@ -20,8 +20,10 @@ typedef struct {
20
20
  js_ref_t *on_read;
21
21
  js_ref_t *on_close;
22
22
 
23
- js_deferred_teardown_t *teardown;
23
+ bool closing;
24
24
  bool exiting;
25
+
26
+ js_deferred_teardown_t *teardown;
25
27
  } bare_tty_t;
26
28
 
27
29
  static void
@@ -30,6 +32,8 @@ bare_tty__on_write(uv_write_t *req, int status) {
30
32
 
31
33
  bare_tty_t *tty = (bare_tty_t *) req->data;
32
34
 
35
+ if (tty->exiting) return;
36
+
33
37
  js_env_t *env = tty->env;
34
38
 
35
39
  js_handle_scope_t *scope;
@@ -77,6 +81,8 @@ bare_tty__on_read(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
77
81
 
78
82
  bare_tty_t *tty = (bare_tty_t *) stream;
79
83
 
84
+ if (tty->exiting) return;
85
+
80
86
  js_env_t *env = tty->env;
81
87
 
82
88
  js_handle_scope_t *scope;
@@ -129,7 +135,7 @@ bare_tty__on_close(uv_handle_t *handle) {
129
135
 
130
136
  js_env_t *env = tty->env;
131
137
 
132
- if (tty->exiting) goto finalize;
138
+ js_deferred_teardown_t *teardown = tty->teardown;
133
139
 
134
140
  js_handle_scope_t *scope;
135
141
  err = js_open_handle_scope(env, &scope);
@@ -143,15 +149,6 @@ bare_tty__on_close(uv_handle_t *handle) {
143
149
  err = js_get_reference_value(env, tty->on_close, &callback);
144
150
  assert(err == 0);
145
151
 
146
- js_call_function(env, ctx, callback, 0, NULL, NULL);
147
-
148
- err = js_close_handle_scope(env, scope);
149
- assert(err == 0);
150
-
151
- finalize:
152
- err = js_finish_deferred_teardown_callback(tty->teardown);
153
- assert(err == 0);
154
-
155
152
  err = js_delete_reference(env, tty->on_write);
156
153
  assert(err == 0);
157
154
 
@@ -163,6 +160,14 @@ finalize:
163
160
 
164
161
  err = js_delete_reference(env, tty->ctx);
165
162
  assert(err == 0);
163
+
164
+ if (!tty->exiting) js_call_function(env, ctx, callback, 0, NULL, NULL);
165
+
166
+ err = js_close_handle_scope(env, scope);
167
+ assert(err == 0);
168
+
169
+ err = js_finish_deferred_teardown_callback(teardown);
170
+ assert(err == 0);
166
171
  }
167
172
 
168
173
  static void
@@ -171,6 +176,8 @@ bare_tty__on_teardown(js_deferred_teardown_t *handle, void *data) {
171
176
 
172
177
  tty->exiting = true;
173
178
 
179
+ if (tty->closing) return;
180
+
174
181
  uv_close((uv_handle_t *) &tty->handle, bare_tty__on_close);
175
182
  }
176
183
 
@@ -194,7 +201,8 @@ bare_tty_init(js_env_t *env, js_callback_info_t *info) {
194
201
  assert(argc == 6);
195
202
 
196
203
  uv_loop_t *loop;
197
- js_get_env_loop(env, &loop);
204
+ err = js_get_env_loop(env, &loop);
205
+ assert(err == 0);
198
206
 
199
207
  js_value_t *handle;
200
208
 
@@ -219,6 +227,7 @@ bare_tty_init(js_env_t *env, js_callback_info_t *info) {
219
227
  (void) err;
220
228
 
221
229
  tty->env = env;
230
+ tty->closing = false;
222
231
  tty->exiting = false;
223
232
 
224
233
  err = js_get_typedarray_info(env, argv[1], NULL, (void **) &tty->read.base, (size_t *) &tty->read.len, NULL, NULL);
@@ -266,16 +275,24 @@ bare_tty_writev(js_env_t *env, js_callback_info_t *info) {
266
275
 
267
276
  uv_buf_t *bufs = malloc(sizeof(uv_buf_t) * bufs_len);
268
277
 
278
+ js_value_t **elements = malloc(sizeof(js_value_t *) * bufs_len);
279
+
280
+ uint32_t fetched;
281
+ err = js_get_array_elements(env, arr, elements, bufs_len, 0, &fetched);
282
+ assert(err == 0);
283
+ assert(fetched == bufs_len);
284
+
285
+
269
286
  for (uint32_t i = 0; i < bufs_len; i++) {
270
- js_value_t *item;
271
- err = js_get_element(env, arr, i, &item);
272
- assert(err == 0);
287
+ js_value_t *item = elements[i];
273
288
 
274
289
  uv_buf_t *buf = &bufs[i];
275
290
  err = js_get_typedarray_info(env, item, NULL, (void **) &buf->base, (size_t *) &buf->len, NULL, NULL);
276
291
  assert(err == 0);
277
292
  }
278
293
 
294
+ free(elements);
295
+
279
296
  uv_write_t *req = &tty->requests.write;
280
297
 
281
298
  req->data = tty;
@@ -366,6 +383,8 @@ bare_tty_close(js_env_t *env, js_callback_info_t *info) {
366
383
  // close an output stream.
367
384
  (void) err;
368
385
 
386
+ tty->closing = true;
387
+
369
388
  uv_close((uv_handle_t *) &tty->handle, bare_tty__on_close);
370
389
 
371
390
  return NULL;
package/index.d.ts ADDED
@@ -0,0 +1,47 @@
1
+ import {
2
+ Readable,
3
+ ReadableOptions,
4
+ Writable,
5
+ WritableEvents,
6
+ WritableOptions
7
+ } from 'bare-stream'
8
+
9
+ interface ReadStream extends Readable {
10
+ readonly isTTY: true
11
+
12
+ setMode(mode: number): this
13
+
14
+ setRawMode(mode: boolean): this
15
+ }
16
+
17
+ declare class ReadStream extends Readable {
18
+ constructor(fd: number, opts?: ReadableOptions)
19
+ }
20
+
21
+ interface WriteStreamEvents extends WritableEvents {
22
+ resize: []
23
+ }
24
+
25
+ interface WriteStream<M extends WriteStreamEvents = WriteStreamEvents>
26
+ extends Writable<M> {
27
+ readonly isTTY: true
28
+ readonly columns: number
29
+ readonly rows: number
30
+
31
+ getWindowSize(): [width: number, height: number]
32
+ }
33
+
34
+ declare class WriteStream<
35
+ M extends WriteStreamEvents = WriteStreamEvents
36
+ > extends Writable<M> {
37
+ constructor(fd: number, opts?: WritableOptions)
38
+ }
39
+
40
+ declare function isTTY(fd: number): boolean
41
+
42
+ declare const constants: {
43
+ mode: { NORMAL: number; RAW: number; IO: number }
44
+ state: { READING: number; CLOSING: number }
45
+ }
46
+
47
+ export { ReadStream, WriteStream, isTTY, isTTY as isatty, constants }
package/index.js CHANGED
@@ -40,8 +40,8 @@ exports.ReadStream = class TTYReadStream extends Readable {
40
40
  return this
41
41
  }
42
42
 
43
- setRawMode(mode) {
44
- return this.setMode(mode ? constants.mode.RAW : constants.mode.NORMAL)
43
+ setRawMode(enabled) {
44
+ return this.setMode(enabled ? constants.mode.RAW : constants.mode.NORMAL)
45
45
  }
46
46
 
47
47
  _read() {
package/package.json CHANGED
@@ -1,14 +1,18 @@
1
1
  {
2
2
  "name": "bare-tty",
3
- "version": "5.0.0",
3
+ "version": "5.0.2",
4
4
  "description": "Native TTY streams for JavaScript",
5
5
  "exports": {
6
- ".": "./index.js",
6
+ ".": {
7
+ "types": "./index.d.ts",
8
+ "default": "./index.js"
9
+ },
7
10
  "./package": "./package.json",
8
11
  "./constants": "./lib/constants.js"
9
12
  },
10
13
  "files": [
11
14
  "index.js",
15
+ "index.d.ts",
12
16
  "binding.c",
13
17
  "binding.js",
14
18
  "CMakeLists.txt",
@@ -30,7 +34,7 @@
30
34
  },
31
35
  "homepage": "https://github.com/holepunchto/bare-tty#readme",
32
36
  "engines": {
33
- "bare": ">=1.7.0"
37
+ "bare": ">=1.16.0"
34
38
  },
35
39
  "dependencies": {
36
40
  "bare-events": "^2.2.0",
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file