bare-tty 1.0.4 → 1.0.5
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 +143 -98
- package/index.js +17 -28
- package/package.json +2 -4
package/binding.c
CHANGED
|
@@ -5,9 +5,15 @@
|
|
|
5
5
|
#include <uv.h>
|
|
6
6
|
|
|
7
7
|
typedef struct {
|
|
8
|
-
uv_tty_t
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
uv_tty_t handle;
|
|
9
|
+
|
|
10
|
+
struct {
|
|
11
|
+
uv_write_t write;
|
|
12
|
+
uv_shutdown_t shutdown;
|
|
13
|
+
} requests;
|
|
14
|
+
|
|
15
|
+
uv_buf_t read;
|
|
16
|
+
|
|
11
17
|
js_env_t *env;
|
|
12
18
|
js_ref_t *ctx;
|
|
13
19
|
js_ref_t *on_write;
|
|
@@ -20,27 +26,41 @@ static void
|
|
|
20
26
|
on_write (uv_write_t *req, int status) {
|
|
21
27
|
int err;
|
|
22
28
|
|
|
23
|
-
bare_tty_t *
|
|
29
|
+
bare_tty_t *tty = (bare_tty_t *) req->data;
|
|
24
30
|
|
|
25
|
-
js_env_t *env =
|
|
31
|
+
js_env_t *env = tty->env;
|
|
26
32
|
|
|
27
33
|
js_handle_scope_t *scope;
|
|
28
34
|
err = js_open_handle_scope(env, &scope);
|
|
29
35
|
assert(err == 0);
|
|
30
36
|
|
|
31
37
|
js_value_t *ctx;
|
|
32
|
-
err = js_get_reference_value(env,
|
|
38
|
+
err = js_get_reference_value(env, tty->ctx, &ctx);
|
|
33
39
|
assert(err == 0);
|
|
34
40
|
|
|
35
|
-
js_value_t *
|
|
36
|
-
err = js_get_reference_value(env,
|
|
41
|
+
js_value_t *on_write;
|
|
42
|
+
err = js_get_reference_value(env, tty->on_write, &on_write);
|
|
37
43
|
assert(err == 0);
|
|
38
44
|
|
|
39
45
|
js_value_t *argv[1];
|
|
40
|
-
err = js_create_int32(env, status, &argv[0]);
|
|
41
|
-
assert(err == 0);
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
if (status < 0) {
|
|
48
|
+
js_value_t *code;
|
|
49
|
+
err = js_create_string_utf8(env, (utf8_t *) uv_err_name(status), -1, &code);
|
|
50
|
+
assert(err == 0);
|
|
51
|
+
|
|
52
|
+
js_value_t *message;
|
|
53
|
+
err = js_create_string_utf8(env, (utf8_t *) uv_strerror(status), -1, &message);
|
|
54
|
+
assert(err == 0);
|
|
55
|
+
|
|
56
|
+
err = js_create_error(env, code, message, &argv[0]);
|
|
57
|
+
assert(err == 0);
|
|
58
|
+
} else {
|
|
59
|
+
err = js_get_null(env, &argv[0]);
|
|
60
|
+
assert(err == 0);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
js_call_function(env, ctx, on_write, 1, argv, NULL);
|
|
44
64
|
|
|
45
65
|
err = js_close_handle_scope(env, scope);
|
|
46
66
|
assert(err == 0);
|
|
@@ -50,27 +70,41 @@ static void
|
|
|
50
70
|
on_shutdown (uv_shutdown_t *req, int status) {
|
|
51
71
|
int err;
|
|
52
72
|
|
|
53
|
-
bare_tty_t *
|
|
73
|
+
bare_tty_t *tty = (bare_tty_t *) req->data;
|
|
54
74
|
|
|
55
|
-
js_env_t *env =
|
|
75
|
+
js_env_t *env = tty->env;
|
|
56
76
|
|
|
57
77
|
js_handle_scope_t *scope;
|
|
58
78
|
err = js_open_handle_scope(env, &scope);
|
|
59
79
|
assert(err == 0);
|
|
60
80
|
|
|
61
81
|
js_value_t *ctx;
|
|
62
|
-
err = js_get_reference_value(env,
|
|
82
|
+
err = js_get_reference_value(env, tty->ctx, &ctx);
|
|
63
83
|
assert(err == 0);
|
|
64
84
|
|
|
65
|
-
js_value_t *
|
|
66
|
-
err = js_get_reference_value(env,
|
|
85
|
+
js_value_t *on_end;
|
|
86
|
+
err = js_get_reference_value(env, tty->on_end, &on_end);
|
|
67
87
|
assert(err == 0);
|
|
68
88
|
|
|
69
89
|
js_value_t *argv[1];
|
|
70
|
-
err = js_create_int32(env, status, &argv[0]);
|
|
71
|
-
assert(err == 0);
|
|
72
90
|
|
|
73
|
-
|
|
91
|
+
if (status < 0) {
|
|
92
|
+
js_value_t *code;
|
|
93
|
+
err = js_create_string_utf8(env, (utf8_t *) uv_err_name(status), -1, &code);
|
|
94
|
+
assert(err == 0);
|
|
95
|
+
|
|
96
|
+
js_value_t *message;
|
|
97
|
+
err = js_create_string_utf8(env, (utf8_t *) uv_strerror(status), -1, &message);
|
|
98
|
+
assert(err == 0);
|
|
99
|
+
|
|
100
|
+
err = js_create_error(env, code, message, &argv[0]);
|
|
101
|
+
assert(err == 0);
|
|
102
|
+
} else {
|
|
103
|
+
err = js_get_null(env, &argv[0]);
|
|
104
|
+
assert(err == 0);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
js_call_function(env, ctx, on_end, 1, argv, NULL);
|
|
74
108
|
|
|
75
109
|
err = js_close_handle_scope(env, scope);
|
|
76
110
|
assert(err == 0);
|
|
@@ -83,27 +117,47 @@ on_read (uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
|
|
|
83
117
|
|
|
84
118
|
int err;
|
|
85
119
|
|
|
86
|
-
bare_tty_t *
|
|
120
|
+
bare_tty_t *tty = (bare_tty_t *) stream;
|
|
87
121
|
|
|
88
|
-
js_env_t *env =
|
|
122
|
+
js_env_t *env = tty->env;
|
|
89
123
|
|
|
90
124
|
js_handle_scope_t *scope;
|
|
91
125
|
err = js_open_handle_scope(env, &scope);
|
|
92
126
|
assert(err == 0);
|
|
93
127
|
|
|
94
128
|
js_value_t *ctx;
|
|
95
|
-
err = js_get_reference_value(env,
|
|
129
|
+
err = js_get_reference_value(env, tty->ctx, &ctx);
|
|
96
130
|
assert(err == 0);
|
|
97
131
|
|
|
98
|
-
js_value_t *
|
|
99
|
-
err = js_get_reference_value(env,
|
|
132
|
+
js_value_t *on_read;
|
|
133
|
+
err = js_get_reference_value(env, tty->on_read, &on_read);
|
|
100
134
|
assert(err == 0);
|
|
101
135
|
|
|
102
|
-
js_value_t *argv[
|
|
103
|
-
err = js_create_int32(env, nread, &argv[0]);
|
|
104
|
-
assert(err == 0);
|
|
136
|
+
js_value_t *argv[2];
|
|
105
137
|
|
|
106
|
-
|
|
138
|
+
if (nread < 0) {
|
|
139
|
+
js_value_t *code;
|
|
140
|
+
err = js_create_string_utf8(env, (utf8_t *) uv_err_name(nread), -1, &code);
|
|
141
|
+
assert(err == 0);
|
|
142
|
+
|
|
143
|
+
js_value_t *message;
|
|
144
|
+
err = js_create_string_utf8(env, (utf8_t *) uv_strerror(nread), -1, &message);
|
|
145
|
+
assert(err == 0);
|
|
146
|
+
|
|
147
|
+
err = js_create_error(env, code, message, &argv[0]);
|
|
148
|
+
assert(err == 0);
|
|
149
|
+
|
|
150
|
+
err = js_create_int32(env, 0, &argv[1]);
|
|
151
|
+
assert(err == 0);
|
|
152
|
+
} else {
|
|
153
|
+
err = js_get_null(env, &argv[0]);
|
|
154
|
+
assert(err == 0);
|
|
155
|
+
|
|
156
|
+
err = js_create_int32(env, nread, &argv[1]);
|
|
157
|
+
assert(err == 0);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
js_call_function(env, ctx, on_read, 1, argv, NULL);
|
|
107
161
|
|
|
108
162
|
err = js_close_handle_scope(env, scope);
|
|
109
163
|
assert(err == 0);
|
|
@@ -113,37 +167,37 @@ static void
|
|
|
113
167
|
on_close (uv_handle_t *handle) {
|
|
114
168
|
int err;
|
|
115
169
|
|
|
116
|
-
bare_tty_t *
|
|
170
|
+
bare_tty_t *tty = (bare_tty_t *) handle;
|
|
117
171
|
|
|
118
|
-
js_env_t *env =
|
|
172
|
+
js_env_t *env = tty->env;
|
|
119
173
|
|
|
120
174
|
js_handle_scope_t *scope;
|
|
121
175
|
err = js_open_handle_scope(env, &scope);
|
|
122
176
|
assert(err == 0);
|
|
123
177
|
|
|
124
178
|
js_value_t *ctx;
|
|
125
|
-
err = js_get_reference_value(env,
|
|
179
|
+
err = js_get_reference_value(env, tty->ctx, &ctx);
|
|
126
180
|
assert(err == 0);
|
|
127
181
|
|
|
128
182
|
js_value_t *callback;
|
|
129
|
-
err = js_get_reference_value(env,
|
|
183
|
+
err = js_get_reference_value(env, tty->on_close, &callback);
|
|
130
184
|
assert(err == 0);
|
|
131
185
|
|
|
132
186
|
js_call_function(env, ctx, callback, 0, NULL, NULL);
|
|
133
187
|
|
|
134
|
-
err = js_delete_reference(env,
|
|
188
|
+
err = js_delete_reference(env, tty->on_write);
|
|
135
189
|
assert(err == 0);
|
|
136
190
|
|
|
137
|
-
err = js_delete_reference(env,
|
|
191
|
+
err = js_delete_reference(env, tty->on_end);
|
|
138
192
|
assert(err == 0);
|
|
139
193
|
|
|
140
|
-
err = js_delete_reference(env,
|
|
194
|
+
err = js_delete_reference(env, tty->on_read);
|
|
141
195
|
assert(err == 0);
|
|
142
196
|
|
|
143
|
-
err = js_delete_reference(env,
|
|
197
|
+
err = js_delete_reference(env, tty->on_close);
|
|
144
198
|
assert(err == 0);
|
|
145
199
|
|
|
146
|
-
err = js_delete_reference(env,
|
|
200
|
+
err = js_delete_reference(env, tty->ctx);
|
|
147
201
|
assert(err == 0);
|
|
148
202
|
|
|
149
203
|
err = js_close_handle_scope(env, scope);
|
|
@@ -152,89 +206,83 @@ on_close (uv_handle_t *handle) {
|
|
|
152
206
|
|
|
153
207
|
static void
|
|
154
208
|
on_alloc (uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) {
|
|
155
|
-
bare_tty_t *
|
|
156
|
-
|
|
209
|
+
bare_tty_t *tty = (bare_tty_t *) handle;
|
|
210
|
+
|
|
211
|
+
*buf = tty->read;
|
|
157
212
|
}
|
|
158
213
|
|
|
159
214
|
static js_value_t *
|
|
160
215
|
bare_tty_init (js_env_t *env, js_callback_info_t *info) {
|
|
161
216
|
int err;
|
|
162
217
|
|
|
163
|
-
size_t argc =
|
|
164
|
-
js_value_t *argv[
|
|
218
|
+
size_t argc = 7;
|
|
219
|
+
js_value_t *argv[7];
|
|
165
220
|
|
|
166
221
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
167
222
|
assert(err == 0);
|
|
168
223
|
|
|
169
|
-
assert(argc ==
|
|
224
|
+
assert(argc == 7);
|
|
170
225
|
|
|
171
226
|
uv_loop_t *loop;
|
|
172
227
|
js_get_env_loop(env, &loop);
|
|
173
228
|
|
|
174
|
-
|
|
175
|
-
err = js_get_typedarray_info(env, argv[0], NULL, (void **) &self, NULL, NULL, NULL);
|
|
176
|
-
assert(err == 0);
|
|
229
|
+
js_value_t *handle;
|
|
177
230
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
err = js_get_typedarray_info(env, argv[1], NULL, (void **) &read_buf, &read_buf_len, NULL, NULL);
|
|
231
|
+
bare_tty_t *tty;
|
|
232
|
+
err = js_create_arraybuffer(env, sizeof(bare_tty_t), (void **) &tty, &handle);
|
|
181
233
|
assert(err == 0);
|
|
182
234
|
|
|
183
235
|
uint32_t fd;
|
|
184
|
-
err = js_get_value_uint32(env, argv[
|
|
236
|
+
err = js_get_value_uint32(env, argv[0], &fd);
|
|
185
237
|
assert(err == 0);
|
|
186
238
|
|
|
187
|
-
err = uv_tty_init(loop, &
|
|
239
|
+
err = uv_tty_init(loop, &tty->handle, fd, 1);
|
|
188
240
|
|
|
189
241
|
if (err < 0) {
|
|
190
242
|
js_throw_error(env, uv_err_name(err), uv_strerror(err));
|
|
191
243
|
return NULL;
|
|
192
244
|
}
|
|
193
245
|
|
|
194
|
-
|
|
246
|
+
tty->env = env;
|
|
195
247
|
|
|
196
|
-
|
|
248
|
+
err = js_get_typedarray_info(env, argv[1], NULL, (void **) &tty->read.base, &tty->read.len, NULL, NULL);
|
|
249
|
+
assert(err == 0);
|
|
197
250
|
|
|
198
|
-
err = js_create_reference(env, argv[
|
|
251
|
+
err = js_create_reference(env, argv[2], 1, &tty->ctx);
|
|
199
252
|
assert(err == 0);
|
|
200
253
|
|
|
201
|
-
err = js_create_reference(env, argv[
|
|
254
|
+
err = js_create_reference(env, argv[3], 1, &tty->on_write);
|
|
202
255
|
assert(err == 0);
|
|
203
256
|
|
|
204
|
-
err = js_create_reference(env, argv[
|
|
257
|
+
err = js_create_reference(env, argv[4], 1, &tty->on_end);
|
|
205
258
|
assert(err == 0);
|
|
206
259
|
|
|
207
|
-
err = js_create_reference(env, argv[
|
|
260
|
+
err = js_create_reference(env, argv[5], 1, &tty->on_read);
|
|
208
261
|
assert(err == 0);
|
|
209
262
|
|
|
210
|
-
err = js_create_reference(env, argv[
|
|
263
|
+
err = js_create_reference(env, argv[6], 1, &tty->on_close);
|
|
211
264
|
assert(err == 0);
|
|
212
265
|
|
|
213
|
-
return
|
|
266
|
+
return handle;
|
|
214
267
|
}
|
|
215
268
|
|
|
216
269
|
static js_value_t *
|
|
217
270
|
bare_tty_writev (js_env_t *env, js_callback_info_t *info) {
|
|
218
271
|
int err;
|
|
219
272
|
|
|
220
|
-
size_t argc =
|
|
221
|
-
js_value_t *argv[
|
|
273
|
+
size_t argc = 2;
|
|
274
|
+
js_value_t *argv[2];
|
|
222
275
|
|
|
223
276
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
224
277
|
assert(err == 0);
|
|
225
278
|
|
|
226
|
-
assert(argc ==
|
|
227
|
-
|
|
228
|
-
uv_write_t *req;
|
|
229
|
-
err = js_get_typedarray_info(env, argv[0], NULL, (void **) &req, NULL, NULL, NULL);
|
|
230
|
-
assert(err == 0);
|
|
279
|
+
assert(argc == 2);
|
|
231
280
|
|
|
232
|
-
bare_tty_t *
|
|
233
|
-
err =
|
|
281
|
+
bare_tty_t *tty;
|
|
282
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
|
|
234
283
|
assert(err == 0);
|
|
235
284
|
|
|
236
|
-
js_value_t *arr = argv[
|
|
237
|
-
js_value_t *item;
|
|
285
|
+
js_value_t *arr = argv[1];
|
|
238
286
|
|
|
239
287
|
uint32_t bufs_len;
|
|
240
288
|
err = js_get_array_length(env, arr, &bufs_len);
|
|
@@ -243,6 +291,7 @@ bare_tty_writev (js_env_t *env, js_callback_info_t *info) {
|
|
|
243
291
|
uv_buf_t *bufs = malloc(sizeof(uv_buf_t) * bufs_len);
|
|
244
292
|
|
|
245
293
|
for (uint32_t i = 0; i < bufs_len; i++) {
|
|
294
|
+
js_value_t *item;
|
|
246
295
|
err = js_get_element(env, arr, i, &item);
|
|
247
296
|
assert(err == 0);
|
|
248
297
|
|
|
@@ -251,9 +300,11 @@ bare_tty_writev (js_env_t *env, js_callback_info_t *info) {
|
|
|
251
300
|
assert(err == 0);
|
|
252
301
|
}
|
|
253
302
|
|
|
254
|
-
req
|
|
303
|
+
uv_write_t *req = &tty->requests.write;
|
|
304
|
+
|
|
305
|
+
req->data = tty;
|
|
255
306
|
|
|
256
|
-
err = uv_write(req, (uv_stream_t *) &
|
|
307
|
+
err = uv_write(req, (uv_stream_t *) &tty->handle, bufs, bufs_len, on_write);
|
|
257
308
|
|
|
258
309
|
free(bufs);
|
|
259
310
|
|
|
@@ -277,15 +328,15 @@ bare_tty_end (js_env_t *env, js_callback_info_t *info) {
|
|
|
277
328
|
|
|
278
329
|
assert(argc == 1);
|
|
279
330
|
|
|
280
|
-
bare_tty_t *
|
|
281
|
-
err =
|
|
331
|
+
bare_tty_t *tty;
|
|
332
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
|
|
282
333
|
assert(err == 0);
|
|
283
334
|
|
|
284
|
-
uv_shutdown_t *req = &
|
|
335
|
+
uv_shutdown_t *req = &tty->requests.shutdown;
|
|
285
336
|
|
|
286
|
-
req->data =
|
|
337
|
+
req->data = tty;
|
|
287
338
|
|
|
288
|
-
err = uv_shutdown(req, (uv_stream_t *)
|
|
339
|
+
err = uv_shutdown(req, (uv_stream_t *) &tty->handle, on_shutdown);
|
|
289
340
|
|
|
290
341
|
if (err < 0) {
|
|
291
342
|
js_throw_error(env, uv_err_name(err), uv_strerror(err));
|
|
@@ -307,11 +358,13 @@ bare_tty_resume (js_env_t *env, js_callback_info_t *info) {
|
|
|
307
358
|
|
|
308
359
|
assert(argc == 1);
|
|
309
360
|
|
|
310
|
-
bare_tty_t *
|
|
311
|
-
err =
|
|
361
|
+
bare_tty_t *tty;
|
|
362
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
|
|
312
363
|
assert(err == 0);
|
|
313
364
|
|
|
314
|
-
|
|
365
|
+
if (!uv_is_readable((uv_stream_t *) &tty->handle)) return NULL;
|
|
366
|
+
|
|
367
|
+
err = uv_read_start((uv_stream_t *) &tty->handle, on_alloc, on_read);
|
|
315
368
|
|
|
316
369
|
if (err < 0) {
|
|
317
370
|
js_throw_error(env, uv_err_name(err), uv_strerror(err));
|
|
@@ -333,11 +386,13 @@ bare_tty_pause (js_env_t *env, js_callback_info_t *info) {
|
|
|
333
386
|
|
|
334
387
|
assert(argc == 1);
|
|
335
388
|
|
|
336
|
-
bare_tty_t *
|
|
337
|
-
err =
|
|
389
|
+
bare_tty_t *tty;
|
|
390
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
|
|
338
391
|
assert(err == 0);
|
|
339
392
|
|
|
340
|
-
|
|
393
|
+
if (!uv_is_readable((uv_stream_t *) &tty->handle)) return NULL;
|
|
394
|
+
|
|
395
|
+
err = uv_read_stop((uv_stream_t *) &tty->handle);
|
|
341
396
|
|
|
342
397
|
if (err < 0) {
|
|
343
398
|
js_throw_error(env, uv_err_name(err), uv_strerror(err));
|
|
@@ -359,11 +414,11 @@ bare_tty_close (js_env_t *env, js_callback_info_t *info) {
|
|
|
359
414
|
|
|
360
415
|
assert(argc == 1);
|
|
361
416
|
|
|
362
|
-
bare_tty_t *
|
|
363
|
-
err =
|
|
417
|
+
bare_tty_t *tty;
|
|
418
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
|
|
364
419
|
assert(err == 0);
|
|
365
420
|
|
|
366
|
-
uv_close((uv_handle_t *) &
|
|
421
|
+
uv_close((uv_handle_t *) &tty->handle, on_close);
|
|
367
422
|
|
|
368
423
|
return NULL;
|
|
369
424
|
}
|
|
@@ -390,15 +445,15 @@ bare_tty_set_mode (js_env_t *env, js_callback_info_t *info) {
|
|
|
390
445
|
|
|
391
446
|
assert(argc == 2);
|
|
392
447
|
|
|
393
|
-
bare_tty_t *
|
|
394
|
-
err =
|
|
448
|
+
bare_tty_t *tty;
|
|
449
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
|
|
395
450
|
assert(err == 0);
|
|
396
451
|
|
|
397
452
|
uint32_t mode;
|
|
398
453
|
err = js_get_value_uint32(env, argv[1], &mode);
|
|
399
454
|
assert(err == 0);
|
|
400
455
|
|
|
401
|
-
err = uv_tty_set_mode(&
|
|
456
|
+
err = uv_tty_set_mode(&tty->handle, mode);
|
|
402
457
|
|
|
403
458
|
if (err < 0) {
|
|
404
459
|
js_throw_error(env, uv_err_name(err), uv_strerror(err));
|
|
@@ -410,16 +465,6 @@ bare_tty_set_mode (js_env_t *env, js_callback_info_t *info) {
|
|
|
410
465
|
|
|
411
466
|
static js_value_t *
|
|
412
467
|
init (js_env_t *env, js_value_t *exports) {
|
|
413
|
-
{
|
|
414
|
-
js_value_t *val;
|
|
415
|
-
js_create_uint32(env, sizeof(bare_tty_t), &val);
|
|
416
|
-
js_set_named_property(env, exports, "sizeofTTY", val);
|
|
417
|
-
}
|
|
418
|
-
{
|
|
419
|
-
js_value_t *val;
|
|
420
|
-
js_create_uint32(env, sizeof(uv_write_t), &val);
|
|
421
|
-
js_set_named_property(env, exports, "sizeofWrite", val);
|
|
422
|
-
}
|
|
423
468
|
{
|
|
424
469
|
js_value_t *fn;
|
|
425
470
|
js_create_function(env, "init", -1, bare_tty_init, NULL, &fn);
|
package/index.js
CHANGED
|
@@ -6,14 +6,13 @@ const DEFAULT_READ_BUFFER = 65536
|
|
|
6
6
|
process.on('exit', () => binding.reset())
|
|
7
7
|
|
|
8
8
|
module.exports = exports = class TTY extends Duplex {
|
|
9
|
-
constructor (fd,
|
|
9
|
+
constructor (fd, opts = {}) {
|
|
10
10
|
super({ mapWritable })
|
|
11
11
|
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this._buffer = slab.subarray(binding.sizeofTTY + binding.sizeofWrite)
|
|
12
|
+
const {
|
|
13
|
+
readBufferSize = DEFAULT_READ_BUFFER,
|
|
14
|
+
allowHalfOpen = true
|
|
15
|
+
} = opts
|
|
17
16
|
|
|
18
17
|
this._writeCallback = null
|
|
19
18
|
this._finalCallback = null
|
|
@@ -21,7 +20,9 @@ module.exports = exports = class TTY extends Duplex {
|
|
|
21
20
|
|
|
22
21
|
this._allowHalfOpen = allowHalfOpen
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
this._buffer = Buffer.alloc(readBufferSize)
|
|
24
|
+
|
|
25
|
+
this._handle = binding.init(fd, this._buffer, this,
|
|
25
26
|
this._onwrite,
|
|
26
27
|
this._onfinal,
|
|
27
28
|
this._onread,
|
|
@@ -36,7 +37,7 @@ module.exports = exports = class TTY extends Duplex {
|
|
|
36
37
|
|
|
37
38
|
_writev (datas, cb) {
|
|
38
39
|
this._writeCallback = cb
|
|
39
|
-
binding.writev(this.
|
|
40
|
+
binding.writev(this._handle, datas)
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
_final (cb) {
|
|
@@ -70,20 +71,19 @@ module.exports = exports = class TTY extends Duplex {
|
|
|
70
71
|
cb(null)
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
_onwrite (
|
|
74
|
-
const err = status < 0 ? makeError(status) : null
|
|
74
|
+
_onwrite (err) {
|
|
75
75
|
this._continueWrite(err)
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
_onread (read) {
|
|
79
|
-
if (
|
|
80
|
-
this.
|
|
81
|
-
if (this._allowHalfOpen === false) this.end()
|
|
78
|
+
_onread (err, read) {
|
|
79
|
+
if (err) {
|
|
80
|
+
this.destroy(err)
|
|
82
81
|
return
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
if (read
|
|
86
|
-
this.
|
|
84
|
+
if (read === 0) {
|
|
85
|
+
this.push(null)
|
|
86
|
+
if (this._allowHalfOpen === false) this.end()
|
|
87
87
|
return
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -93,8 +93,7 @@ module.exports = exports = class TTY extends Duplex {
|
|
|
93
93
|
this.push(copy)
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
_onfinal (
|
|
97
|
-
const err = status < 0 ? makeError(status) : null
|
|
96
|
+
_onfinal (err) {
|
|
98
97
|
this._continueFinal(err)
|
|
99
98
|
}
|
|
100
99
|
|
|
@@ -117,13 +116,3 @@ exports.constants = {
|
|
|
117
116
|
function mapWritable (buf) {
|
|
118
117
|
return typeof buf === 'string' ? Buffer.from(buf) : buf
|
|
119
118
|
}
|
|
120
|
-
|
|
121
|
-
function makeError (errno) {
|
|
122
|
-
const [code, msg] = process.errnos.get(errno)
|
|
123
|
-
const err = new Error(code + ': ' + msg)
|
|
124
|
-
|
|
125
|
-
err.code = code
|
|
126
|
-
err.errno = errno
|
|
127
|
-
|
|
128
|
-
return err
|
|
129
|
-
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bare-tty",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Native TTY streams for JavaScript",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"files": [
|
|
@@ -11,9 +11,7 @@
|
|
|
11
11
|
"prebuilds"
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
|
-
"test": "standard && bare test.js"
|
|
15
|
-
"install": "bare-dev rebuild",
|
|
16
|
-
"prebuild": "bare-dev prebuild"
|
|
14
|
+
"test": "standard && bare test.js"
|
|
17
15
|
},
|
|
18
16
|
"repository": {
|
|
19
17
|
"type": "git",
|