bare-buffer 2.7.1 → 3.0.0
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/CMakeLists.txt +3 -3
- package/binding.c +376 -159
- package/index.d.ts +4 -4
- package/index.js +39 -6
- package/lib/constants.js +1 -1
- package/package.json +5 -2
- package/prebuilds/android-arm/bare-buffer.bare +0 -0
- package/prebuilds/android-arm64/bare-buffer.bare +0 -0
- package/prebuilds/android-ia32/bare-buffer.bare +0 -0
- package/prebuilds/android-x64/bare-buffer.bare +0 -0
- package/prebuilds/darwin-arm64/bare-buffer.bare +0 -0
- package/prebuilds/darwin-x64/bare-buffer.bare +0 -0
- package/prebuilds/ios-arm64/bare-buffer.bare +0 -0
- package/prebuilds/ios-arm64-simulator/bare-buffer.bare +0 -0
- package/prebuilds/ios-x64-simulator/bare-buffer.bare +0 -0
- package/prebuilds/linux-arm64/bare-buffer.bare +0 -0
- package/prebuilds/linux-x64/bare-buffer.bare +0 -0
- package/prebuilds/win32-arm64/bare-buffer.bare +0 -0
- package/prebuilds/win32-x64/bare-buffer.bare +0 -0
package/CMakeLists.txt
CHANGED
|
@@ -5,9 +5,9 @@ find_package(cmake-fetch REQUIRED PATHS node_modules/cmake-fetch)
|
|
|
5
5
|
|
|
6
6
|
project(bare_buffer C)
|
|
7
7
|
|
|
8
|
-
fetch_package("github:holepunchto/libutf#
|
|
9
|
-
fetch_package("github:holepunchto/libbase64#
|
|
10
|
-
fetch_package("github:holepunchto/libhex#
|
|
8
|
+
fetch_package("github:holepunchto/libutf#9509b28")
|
|
9
|
+
fetch_package("github:holepunchto/libbase64#cded073")
|
|
10
|
+
fetch_package("github:holepunchto/libhex#1dfad95")
|
|
11
11
|
|
|
12
12
|
add_bare_module(bare_buffer)
|
|
13
13
|
|
package/binding.c
CHANGED
|
@@ -3,20 +3,32 @@
|
|
|
3
3
|
#include <base64.h>
|
|
4
4
|
#include <hex.h>
|
|
5
5
|
#include <js.h>
|
|
6
|
-
#include <js/ffi.h>
|
|
7
6
|
#include <stdlib.h>
|
|
8
7
|
#include <string.h>
|
|
9
8
|
#include <utf.h>
|
|
10
9
|
|
|
11
10
|
static js_type_tag_t bare_buffer__tag = {0xfea3e944b70b0812, 0xe53bb5c343c040b6};
|
|
12
11
|
|
|
12
|
+
static inline int
|
|
13
|
+
bare_buffer__memcmp (void *a, size_t a_len, void *b, size_t b_len) {
|
|
14
|
+
int r = memcmp(a, b, a_len < b_len ? a_len : b_len);
|
|
15
|
+
|
|
16
|
+
if (r == 0) {
|
|
17
|
+
if (a_len < b_len) return -1;
|
|
18
|
+
if (a_len > b_len) return 1;
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return r < 0 ? -1 : 1;
|
|
23
|
+
}
|
|
24
|
+
|
|
13
25
|
static void
|
|
14
|
-
|
|
15
|
-
|
|
26
|
+
bare_buffer__on_free_string (js_env_t *env, void *data, void *finalize_hint) {
|
|
27
|
+
free(data);
|
|
16
28
|
}
|
|
17
29
|
|
|
18
30
|
static js_value_t *
|
|
19
|
-
|
|
31
|
+
bare_buffer_alloc (js_env_t *env, js_callback_info_t *info) {
|
|
20
32
|
int err;
|
|
21
33
|
|
|
22
34
|
size_t argc = 1;
|
|
@@ -27,18 +39,53 @@ bare_buffer_set_zero_fill_enabled (js_env_t *env, js_callback_info_t *info) {
|
|
|
27
39
|
|
|
28
40
|
assert(argc == 1);
|
|
29
41
|
|
|
30
|
-
uint32_t
|
|
31
|
-
err = js_get_value_uint32(env, argv[0], &
|
|
42
|
+
uint32_t len;
|
|
43
|
+
err = js_get_value_uint32(env, argv[0], &len);
|
|
32
44
|
assert(err == 0);
|
|
33
45
|
|
|
34
|
-
|
|
46
|
+
js_value_t *result;
|
|
47
|
+
err = js_create_arraybuffer(env, len, NULL, &result);
|
|
48
|
+
assert(err == 0);
|
|
35
49
|
|
|
36
|
-
return
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static js_value_t *
|
|
54
|
+
bare_buffer_alloc_unsafe (js_env_t *env, js_callback_info_t *info) {
|
|
55
|
+
int err;
|
|
56
|
+
|
|
57
|
+
size_t argc = 1;
|
|
58
|
+
js_value_t *argv[1];
|
|
59
|
+
|
|
60
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
61
|
+
assert(err == 0);
|
|
62
|
+
|
|
63
|
+
assert(argc == 1);
|
|
64
|
+
|
|
65
|
+
uint32_t len;
|
|
66
|
+
err = js_get_value_uint32(env, argv[0], &len);
|
|
67
|
+
assert(err == 0);
|
|
68
|
+
|
|
69
|
+
js_value_t *result;
|
|
70
|
+
err = js_create_unsafe_arraybuffer(env, len, NULL, &result);
|
|
71
|
+
assert(err == 0);
|
|
72
|
+
|
|
73
|
+
return result;
|
|
37
74
|
}
|
|
38
75
|
|
|
39
76
|
static uint32_t
|
|
40
|
-
|
|
41
|
-
|
|
77
|
+
bare_buffer_typed_byte_length_utf8 (js_value_t *receiver, js_value_t *str, js_typed_callback_info_t *info) {
|
|
78
|
+
int err;
|
|
79
|
+
|
|
80
|
+
js_env_t *env;
|
|
81
|
+
err = js_get_typed_callback_info(info, &env, NULL);
|
|
82
|
+
assert(err == 0);
|
|
83
|
+
|
|
84
|
+
size_t str_len;
|
|
85
|
+
err = js_get_value_string_utf8(env, str, NULL, 0, &str_len);
|
|
86
|
+
assert(err == 0);
|
|
87
|
+
|
|
88
|
+
return (uint32_t) str_len;
|
|
42
89
|
}
|
|
43
90
|
|
|
44
91
|
static js_value_t *
|
|
@@ -76,18 +123,43 @@ bare_buffer_to_string_utf8 (js_env_t *env, js_callback_info_t *info) {
|
|
|
76
123
|
|
|
77
124
|
assert(argc == 1);
|
|
78
125
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
err = js_get_typedarray_info(env, argv[0], NULL, (void **) &
|
|
126
|
+
utf8_t *buf;
|
|
127
|
+
size_t buf_len;
|
|
128
|
+
err = js_get_typedarray_info(env, argv[0], NULL, (void **) &buf, &buf_len, NULL, NULL);
|
|
82
129
|
assert(err == 0);
|
|
83
130
|
|
|
84
131
|
js_value_t *result;
|
|
85
|
-
err = js_create_string_utf8(env,
|
|
132
|
+
err = js_create_string_utf8(env, buf, buf_len, &result);
|
|
86
133
|
assert(err == 0);
|
|
87
134
|
|
|
88
135
|
return result;
|
|
89
136
|
}
|
|
90
137
|
|
|
138
|
+
static uint32_t
|
|
139
|
+
bare_buffer_typed_write_utf8 (js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
|
|
140
|
+
int err;
|
|
141
|
+
|
|
142
|
+
js_env_t *env;
|
|
143
|
+
err = js_get_typed_callback_info(info, &env, NULL);
|
|
144
|
+
assert(err == 0);
|
|
145
|
+
|
|
146
|
+
void *buf;
|
|
147
|
+
size_t buf_len;
|
|
148
|
+
|
|
149
|
+
js_typedarray_view_t *buf_view;
|
|
150
|
+
err = js_get_typedarray_view(env, typedarray, NULL, &buf, &buf_len, &buf_view);
|
|
151
|
+
assert(err == 0);
|
|
152
|
+
|
|
153
|
+
size_t str_len;
|
|
154
|
+
err = js_get_value_string_utf8(env, string, buf, buf_len, &str_len);
|
|
155
|
+
assert(err == 0);
|
|
156
|
+
|
|
157
|
+
err = js_release_typedarray_view(env, buf_view);
|
|
158
|
+
assert(err == 0);
|
|
159
|
+
|
|
160
|
+
return (uint32_t) str_len;
|
|
161
|
+
}
|
|
162
|
+
|
|
91
163
|
static js_value_t *
|
|
92
164
|
bare_buffer_write_utf8 (js_env_t *env, js_callback_info_t *info) {
|
|
93
165
|
int err;
|
|
@@ -100,8 +172,8 @@ bare_buffer_write_utf8 (js_env_t *env, js_callback_info_t *info) {
|
|
|
100
172
|
|
|
101
173
|
assert(argc == 2);
|
|
102
174
|
|
|
103
|
-
size_t buf_len;
|
|
104
175
|
void *buf;
|
|
176
|
+
size_t buf_len;
|
|
105
177
|
err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
|
|
106
178
|
assert(err == 0);
|
|
107
179
|
|
|
@@ -128,20 +200,49 @@ bare_buffer_to_string_utf16le (js_env_t *env, js_callback_info_t *info) {
|
|
|
128
200
|
|
|
129
201
|
assert(argc == 1);
|
|
130
202
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
err = js_get_typedarray_info(env, argv[0], NULL, (void **) &
|
|
203
|
+
utf16_t *buf;
|
|
204
|
+
size_t buf_len;
|
|
205
|
+
err = js_get_typedarray_info(env, argv[0], NULL, (void **) &buf, &buf_len, NULL, NULL);
|
|
134
206
|
assert(err == 0);
|
|
135
207
|
|
|
136
|
-
|
|
208
|
+
buf_len /= sizeof(utf16_t);
|
|
137
209
|
|
|
138
210
|
js_value_t *result;
|
|
139
|
-
err = js_create_string_utf16le(env,
|
|
211
|
+
err = js_create_string_utf16le(env, buf, buf_len, &result);
|
|
140
212
|
assert(err == 0);
|
|
141
213
|
|
|
142
214
|
return result;
|
|
143
215
|
}
|
|
144
216
|
|
|
217
|
+
static uint32_t
|
|
218
|
+
bare_buffer_typed_write_utf16le (js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
|
|
219
|
+
int err;
|
|
220
|
+
|
|
221
|
+
js_env_t *env;
|
|
222
|
+
err = js_get_typed_callback_info(info, &env, NULL);
|
|
223
|
+
assert(err == 0);
|
|
224
|
+
|
|
225
|
+
void *buf;
|
|
226
|
+
size_t buf_len;
|
|
227
|
+
|
|
228
|
+
js_typedarray_view_t *buf_view;
|
|
229
|
+
err = js_get_typedarray_view(env, typedarray, NULL, &buf, &buf_len, &buf_view);
|
|
230
|
+
assert(err == 0);
|
|
231
|
+
|
|
232
|
+
buf_len /= sizeof(utf16_t);
|
|
233
|
+
|
|
234
|
+
size_t str_len;
|
|
235
|
+
err = js_get_value_string_utf16le(env, string, buf, buf_len, &str_len);
|
|
236
|
+
assert(err == 0);
|
|
237
|
+
|
|
238
|
+
str_len *= sizeof(utf16_t);
|
|
239
|
+
|
|
240
|
+
err = js_release_typedarray_view(env, buf_view);
|
|
241
|
+
assert(err == 0);
|
|
242
|
+
|
|
243
|
+
return (uint32_t) str_len;
|
|
244
|
+
}
|
|
245
|
+
|
|
145
246
|
static js_value_t *
|
|
146
247
|
bare_buffer_write_utf16le (js_env_t *env, js_callback_info_t *info) {
|
|
147
248
|
int err;
|
|
@@ -154,8 +255,8 @@ bare_buffer_write_utf16le (js_env_t *env, js_callback_info_t *info) {
|
|
|
154
255
|
|
|
155
256
|
assert(argc == 2);
|
|
156
257
|
|
|
157
|
-
size_t buf_len;
|
|
158
258
|
void *buf;
|
|
259
|
+
size_t buf_len;
|
|
159
260
|
err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
|
|
160
261
|
assert(err == 0);
|
|
161
262
|
|
|
@@ -186,28 +287,66 @@ bare_buffer_to_string_base64 (js_env_t *env, js_callback_info_t *info) {
|
|
|
186
287
|
|
|
187
288
|
assert(argc == 1);
|
|
188
289
|
|
|
189
|
-
size_t buf_len;
|
|
190
290
|
void *buf;
|
|
291
|
+
size_t buf_len;
|
|
191
292
|
err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
|
|
192
293
|
assert(err == 0);
|
|
193
294
|
|
|
194
295
|
size_t str_len;
|
|
195
|
-
err =
|
|
296
|
+
err = base64_encode_utf8(buf, buf_len, NULL, &str_len);
|
|
196
297
|
assert(err == 0);
|
|
197
298
|
|
|
198
299
|
utf8_t *str = malloc(str_len);
|
|
199
|
-
err =
|
|
300
|
+
err = base64_encode_utf8(buf, buf_len, str, &str_len);
|
|
200
301
|
assert(err == 0);
|
|
201
302
|
|
|
202
303
|
js_value_t *result;
|
|
203
|
-
err =
|
|
304
|
+
err = js_create_external_string_latin1(env, str, str_len, bare_buffer__on_free_string, NULL, &result, NULL);
|
|
204
305
|
assert(err == 0);
|
|
205
306
|
|
|
206
|
-
free(str);
|
|
207
|
-
|
|
208
307
|
return result;
|
|
209
308
|
}
|
|
210
309
|
|
|
310
|
+
static uint32_t
|
|
311
|
+
bare_buffer_typed_write_base64 (js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
|
|
312
|
+
int err;
|
|
313
|
+
|
|
314
|
+
js_env_t *env;
|
|
315
|
+
err = js_get_typed_callback_info(info, &env, NULL);
|
|
316
|
+
assert(err == 0);
|
|
317
|
+
|
|
318
|
+
void *buf;
|
|
319
|
+
size_t buf_len;
|
|
320
|
+
|
|
321
|
+
js_typedarray_view_t *buf_view;
|
|
322
|
+
err = js_get_typedarray_view(env, typedarray, NULL, &buf, &buf_len, &buf_view);
|
|
323
|
+
assert(err == 0);
|
|
324
|
+
|
|
325
|
+
js_string_encoding_t encoding;
|
|
326
|
+
const void *str;
|
|
327
|
+
size_t str_len;
|
|
328
|
+
|
|
329
|
+
js_string_view_t *str_view;
|
|
330
|
+
err = js_get_string_view(env, string, &encoding, &str, &str_len, &str_view);
|
|
331
|
+
assert(err == 0);
|
|
332
|
+
|
|
333
|
+
if (encoding == js_utf16le) {
|
|
334
|
+
err = base64_decode_utf16le(str, str_len, buf, &buf_len);
|
|
335
|
+
assert(err == 0);
|
|
336
|
+
} else {
|
|
337
|
+
err = base64_decode_utf8(str, str_len, buf, &buf_len);
|
|
338
|
+
assert(err == 0);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
err = js_release_string_view(env, str_view);
|
|
342
|
+
assert(err == 0);
|
|
343
|
+
|
|
344
|
+
err = js_release_typedarray_view(env, buf_view);
|
|
345
|
+
assert(err == 0);
|
|
346
|
+
|
|
347
|
+
return buf_len;
|
|
348
|
+
}
|
|
349
|
+
|
|
211
350
|
static js_value_t *
|
|
212
351
|
bare_buffer_write_base64 (js_env_t *env, js_callback_info_t *info) {
|
|
213
352
|
int err;
|
|
@@ -220,23 +359,29 @@ bare_buffer_write_base64 (js_env_t *env, js_callback_info_t *info) {
|
|
|
220
359
|
|
|
221
360
|
assert(argc == 2);
|
|
222
361
|
|
|
223
|
-
size_t buf_len;
|
|
224
362
|
void *buf;
|
|
363
|
+
size_t buf_len;
|
|
225
364
|
err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
|
|
226
365
|
assert(err == 0);
|
|
227
366
|
|
|
367
|
+
js_string_encoding_t encoding;
|
|
368
|
+
const void *str;
|
|
228
369
|
size_t str_len;
|
|
229
|
-
err = js_get_value_string_utf8(env, argv[1], NULL, 0, &str_len);
|
|
230
|
-
assert(err == 0);
|
|
231
370
|
|
|
232
|
-
|
|
233
|
-
err =
|
|
371
|
+
js_string_view_t *str_view;
|
|
372
|
+
err = js_get_string_view(env, argv[1], &encoding, &str, &str_len, &str_view);
|
|
234
373
|
assert(err == 0);
|
|
235
374
|
|
|
236
|
-
|
|
237
|
-
|
|
375
|
+
if (encoding == js_utf16le) {
|
|
376
|
+
err = base64_decode_utf16le(str, str_len, buf, &buf_len);
|
|
377
|
+
assert(err == 0);
|
|
378
|
+
} else {
|
|
379
|
+
err = base64_decode_utf8(str, str_len, buf, &buf_len);
|
|
380
|
+
assert(err == 0);
|
|
381
|
+
}
|
|
238
382
|
|
|
239
|
-
|
|
383
|
+
err = js_release_string_view(env, str_view);
|
|
384
|
+
assert(err == 0);
|
|
240
385
|
|
|
241
386
|
js_value_t *result;
|
|
242
387
|
err = js_create_uint32(env, (uint32_t) buf_len, &result);
|
|
@@ -257,28 +402,66 @@ bare_buffer_to_string_hex (js_env_t *env, js_callback_info_t *info) {
|
|
|
257
402
|
|
|
258
403
|
assert(argc == 1);
|
|
259
404
|
|
|
260
|
-
size_t buf_len;
|
|
261
405
|
void *buf;
|
|
406
|
+
size_t buf_len;
|
|
262
407
|
err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
|
|
263
408
|
assert(err == 0);
|
|
264
409
|
|
|
265
410
|
size_t str_len;
|
|
266
|
-
err =
|
|
411
|
+
err = hex_encode_utf8(buf, buf_len, NULL, &str_len);
|
|
267
412
|
assert(err == 0);
|
|
268
413
|
|
|
269
414
|
utf8_t *str = malloc(str_len);
|
|
270
|
-
err =
|
|
415
|
+
err = hex_encode_utf8(buf, buf_len, str, &str_len);
|
|
271
416
|
assert(err == 0);
|
|
272
417
|
|
|
273
418
|
js_value_t *result;
|
|
274
|
-
err =
|
|
419
|
+
err = js_create_external_string_latin1(env, str, str_len, bare_buffer__on_free_string, NULL, &result, NULL);
|
|
275
420
|
assert(err == 0);
|
|
276
421
|
|
|
277
|
-
free(str);
|
|
278
|
-
|
|
279
422
|
return result;
|
|
280
423
|
}
|
|
281
424
|
|
|
425
|
+
static uint32_t
|
|
426
|
+
bare_buffer_typed_write_hex (js_value_t *receiver, js_value_t *typedarray, js_value_t *string, js_typed_callback_info_t *info) {
|
|
427
|
+
int err;
|
|
428
|
+
|
|
429
|
+
js_env_t *env;
|
|
430
|
+
err = js_get_typed_callback_info(info, &env, NULL);
|
|
431
|
+
assert(err == 0);
|
|
432
|
+
|
|
433
|
+
void *buf;
|
|
434
|
+
size_t buf_len;
|
|
435
|
+
|
|
436
|
+
js_typedarray_view_t *buf_view;
|
|
437
|
+
err = js_get_typedarray_view(env, typedarray, NULL, &buf, &buf_len, &buf_view);
|
|
438
|
+
assert(err == 0);
|
|
439
|
+
|
|
440
|
+
js_string_encoding_t encoding;
|
|
441
|
+
const void *str;
|
|
442
|
+
size_t str_len;
|
|
443
|
+
|
|
444
|
+
js_string_view_t *str_view;
|
|
445
|
+
err = js_get_string_view(env, string, &encoding, &str, &str_len, &str_view);
|
|
446
|
+
assert(err == 0);
|
|
447
|
+
|
|
448
|
+
if (encoding == js_utf16le) {
|
|
449
|
+
err = hex_decode_utf16le(str, str_len, buf, &buf_len);
|
|
450
|
+
assert(err == 0);
|
|
451
|
+
} else {
|
|
452
|
+
err = hex_decode_utf8(str, str_len, buf, &buf_len);
|
|
453
|
+
assert(err == 0);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
err = js_release_string_view(env, str_view);
|
|
457
|
+
assert(err == 0);
|
|
458
|
+
|
|
459
|
+
err = js_release_typedarray_view(env, buf_view);
|
|
460
|
+
assert(err == 0);
|
|
461
|
+
|
|
462
|
+
return buf_len;
|
|
463
|
+
}
|
|
464
|
+
|
|
282
465
|
static js_value_t *
|
|
283
466
|
bare_buffer_write_hex (js_env_t *env, js_callback_info_t *info) {
|
|
284
467
|
int err;
|
|
@@ -291,23 +474,29 @@ bare_buffer_write_hex (js_env_t *env, js_callback_info_t *info) {
|
|
|
291
474
|
|
|
292
475
|
assert(argc == 2);
|
|
293
476
|
|
|
294
|
-
size_t buf_len;
|
|
295
477
|
void *buf;
|
|
478
|
+
size_t buf_len;
|
|
296
479
|
err = js_get_typedarray_info(env, argv[0], NULL, &buf, &buf_len, NULL, NULL);
|
|
297
480
|
assert(err == 0);
|
|
298
481
|
|
|
482
|
+
js_string_encoding_t encoding;
|
|
483
|
+
const void *str;
|
|
299
484
|
size_t str_len;
|
|
300
|
-
err = js_get_value_string_utf8(env, argv[1], NULL, 0, &str_len);
|
|
301
|
-
assert(err == 0);
|
|
302
485
|
|
|
303
|
-
|
|
304
|
-
err =
|
|
486
|
+
js_string_view_t *str_view;
|
|
487
|
+
err = js_get_string_view(env, argv[1], &encoding, &str, &str_len, &str_view);
|
|
305
488
|
assert(err == 0);
|
|
306
489
|
|
|
307
|
-
|
|
308
|
-
|
|
490
|
+
if (encoding == js_utf16le) {
|
|
491
|
+
err = hex_decode_utf16le(str, str_len, buf, &buf_len);
|
|
492
|
+
assert(err == 0);
|
|
493
|
+
} else {
|
|
494
|
+
err = hex_decode_utf8(str, str_len, buf, &buf_len);
|
|
495
|
+
assert(err == 0);
|
|
496
|
+
}
|
|
309
497
|
|
|
310
|
-
|
|
498
|
+
err = js_release_string_view(env, str_view);
|
|
499
|
+
assert(err == 0);
|
|
311
500
|
|
|
312
501
|
js_value_t *result;
|
|
313
502
|
err = js_create_uint32(env, (uint32_t) buf_len, &result);
|
|
@@ -316,22 +505,25 @@ bare_buffer_write_hex (js_env_t *env, js_callback_info_t *info) {
|
|
|
316
505
|
return result;
|
|
317
506
|
}
|
|
318
507
|
|
|
319
|
-
static
|
|
320
|
-
|
|
321
|
-
int
|
|
508
|
+
static int32_t
|
|
509
|
+
bare_buffer_typed_compare (js_value_t *receiver, js_value_t *source, js_value_t *target, js_typed_callback_info_t *info) {
|
|
510
|
+
int err;
|
|
322
511
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
return 0;
|
|
327
|
-
}
|
|
512
|
+
js_env_t *env;
|
|
513
|
+
err = js_get_typed_callback_info(info, &env, NULL);
|
|
514
|
+
assert(err == 0);
|
|
328
515
|
|
|
329
|
-
|
|
330
|
-
|
|
516
|
+
void *a;
|
|
517
|
+
size_t a_len;
|
|
518
|
+
err = js_get_typedarray_info(env, source, NULL, &a, &a_len, NULL, NULL);
|
|
519
|
+
assert(err == 0);
|
|
331
520
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
521
|
+
void *b;
|
|
522
|
+
size_t b_len;
|
|
523
|
+
err = js_get_typedarray_info(env, target, NULL, &b, &b_len, NULL, NULL);
|
|
524
|
+
assert(err == 0);
|
|
525
|
+
|
|
526
|
+
return bare_buffer__memcmp(a, a_len, b, b_len);
|
|
335
527
|
}
|
|
336
528
|
|
|
337
529
|
static js_value_t *
|
|
@@ -346,18 +538,18 @@ bare_buffer_compare (js_env_t *env, js_callback_info_t *info) {
|
|
|
346
538
|
|
|
347
539
|
assert(argc == 2);
|
|
348
540
|
|
|
349
|
-
size_t a_len;
|
|
350
541
|
void *a;
|
|
542
|
+
size_t a_len;
|
|
351
543
|
err = js_get_typedarray_info(env, argv[0], NULL, &a, &a_len, NULL, NULL);
|
|
352
544
|
assert(err == 0);
|
|
353
545
|
|
|
354
|
-
size_t b_len;
|
|
355
546
|
void *b;
|
|
547
|
+
size_t b_len;
|
|
356
548
|
err = js_get_typedarray_info(env, argv[1], NULL, &b, &b_len, NULL, NULL);
|
|
357
549
|
assert(err == 0);
|
|
358
550
|
|
|
359
551
|
js_value_t *result;
|
|
360
|
-
err = js_create_int32(env,
|
|
552
|
+
err = js_create_int32(env, bare_buffer__memcmp(a, a_len, b, b_len), &result);
|
|
361
553
|
assert(err == 0);
|
|
362
554
|
|
|
363
555
|
return result;
|
|
@@ -393,12 +585,12 @@ bare_buffer_is_tagged (js_env_t *env, js_callback_info_t *info) {
|
|
|
393
585
|
|
|
394
586
|
assert(argc == 1);
|
|
395
587
|
|
|
396
|
-
bool
|
|
397
|
-
err = js_check_type_tag(env, argv[0], &bare_buffer__tag, &
|
|
588
|
+
bool is_tagged;
|
|
589
|
+
err = js_check_type_tag(env, argv[0], &bare_buffer__tag, &is_tagged);
|
|
398
590
|
assert(err == 0);
|
|
399
591
|
|
|
400
592
|
js_value_t *result;
|
|
401
|
-
err = js_get_boolean(env,
|
|
593
|
+
err = js_get_boolean(env, is_tagged, &result);
|
|
402
594
|
assert(err == 0);
|
|
403
595
|
|
|
404
596
|
return result;
|
|
@@ -408,105 +600,130 @@ static js_value_t *
|
|
|
408
600
|
bare_buffer_exports (js_env_t *env, js_value_t *exports) {
|
|
409
601
|
int err;
|
|
410
602
|
|
|
411
|
-
#define V(name,
|
|
603
|
+
#define V(name, untyped, signature, typed) \
|
|
412
604
|
{ \
|
|
413
605
|
js_value_t *val; \
|
|
414
|
-
if (
|
|
415
|
-
err =
|
|
606
|
+
if (signature) { \
|
|
607
|
+
err = js_create_typed_function(env, name, -1, untyped, signature, typed, NULL, &val); \
|
|
608
|
+
assert(err == 0); \
|
|
416
609
|
} else { \
|
|
417
|
-
err = js_create_function(env, name, -1,
|
|
610
|
+
err = js_create_function(env, name, -1, untyped, NULL, &val); \
|
|
611
|
+
assert(err == 0); \
|
|
418
612
|
} \
|
|
419
|
-
assert(err == 0); \
|
|
420
613
|
err = js_set_named_property(env, exports, name, val); \
|
|
421
614
|
assert(err == 0); \
|
|
422
615
|
}
|
|
423
616
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
V("
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
617
|
+
V("alloc", bare_buffer_alloc, NULL, NULL);
|
|
618
|
+
|
|
619
|
+
V("allocUnsafe", bare_buffer_alloc_unsafe, NULL, NULL);
|
|
620
|
+
|
|
621
|
+
V(
|
|
622
|
+
"byteLengthUTF8",
|
|
623
|
+
bare_buffer_byte_length_utf8,
|
|
624
|
+
&((js_callback_signature_t) {
|
|
625
|
+
.version = 0,
|
|
626
|
+
.result = js_uint32,
|
|
627
|
+
.args_len = 2,
|
|
628
|
+
.args = (int[]) {
|
|
629
|
+
js_object,
|
|
630
|
+
js_string,
|
|
631
|
+
}
|
|
632
|
+
}),
|
|
633
|
+
bare_buffer_typed_byte_length_utf8
|
|
634
|
+
);
|
|
635
|
+
|
|
636
|
+
V("toStringUTF8", bare_buffer_to_string_utf8, NULL, NULL);
|
|
637
|
+
|
|
638
|
+
V(
|
|
639
|
+
"writeUTF8",
|
|
640
|
+
bare_buffer_write_utf8,
|
|
641
|
+
&((js_callback_signature_t) {
|
|
642
|
+
.version = 0,
|
|
643
|
+
.result = js_uint32,
|
|
644
|
+
.args_len = 3,
|
|
645
|
+
.args = (int[]) {
|
|
646
|
+
js_object,
|
|
647
|
+
js_object,
|
|
648
|
+
js_string,
|
|
649
|
+
}
|
|
650
|
+
}),
|
|
651
|
+
bare_buffer_typed_write_utf8
|
|
652
|
+
);
|
|
653
|
+
|
|
654
|
+
V("toStringUTF16LE", bare_buffer_to_string_utf16le, NULL, NULL);
|
|
655
|
+
|
|
656
|
+
V(
|
|
657
|
+
"writeUTF16LE",
|
|
658
|
+
bare_buffer_write_utf16le,
|
|
659
|
+
&((js_callback_signature_t) {
|
|
660
|
+
.version = 0,
|
|
661
|
+
.result = js_uint32,
|
|
662
|
+
.args_len = 3,
|
|
663
|
+
.args = (int[]) {
|
|
664
|
+
js_object,
|
|
665
|
+
js_object,
|
|
666
|
+
js_string,
|
|
667
|
+
}
|
|
668
|
+
}),
|
|
669
|
+
bare_buffer_typed_write_utf16le
|
|
670
|
+
);
|
|
671
|
+
|
|
672
|
+
V("toStringBase64", bare_buffer_to_string_base64, NULL, NULL);
|
|
673
|
+
|
|
674
|
+
V(
|
|
675
|
+
"writeBase64",
|
|
676
|
+
bare_buffer_write_base64,
|
|
677
|
+
&((js_callback_signature_t) {
|
|
678
|
+
.version = 0,
|
|
679
|
+
.result = js_uint32,
|
|
680
|
+
.args_len = 3,
|
|
681
|
+
.args = (int[]) {
|
|
682
|
+
js_object,
|
|
683
|
+
js_object,
|
|
684
|
+
js_string,
|
|
685
|
+
}
|
|
686
|
+
}),
|
|
687
|
+
bare_buffer_typed_write_base64
|
|
688
|
+
);
|
|
689
|
+
|
|
690
|
+
V("toStringHex", bare_buffer_to_string_hex, NULL, NULL);
|
|
691
|
+
|
|
692
|
+
V(
|
|
693
|
+
"writeHex",
|
|
694
|
+
bare_buffer_write_hex,
|
|
695
|
+
&((js_callback_signature_t) {
|
|
696
|
+
.version = 0,
|
|
697
|
+
.result = js_uint32,
|
|
698
|
+
.args_len = 3,
|
|
699
|
+
.args = (int[]) {
|
|
700
|
+
js_object,
|
|
701
|
+
js_object,
|
|
702
|
+
js_string,
|
|
703
|
+
}
|
|
704
|
+
}),
|
|
705
|
+
bare_buffer_typed_write_hex
|
|
706
|
+
);
|
|
707
|
+
|
|
708
|
+
V(
|
|
709
|
+
"compare",
|
|
710
|
+
bare_buffer_compare,
|
|
711
|
+
&((js_callback_signature_t) {
|
|
712
|
+
.version = 0,
|
|
713
|
+
.result = js_int32,
|
|
714
|
+
.args_len = 3,
|
|
715
|
+
.args = (int[]) {
|
|
716
|
+
js_object,
|
|
717
|
+
js_object,
|
|
718
|
+
js_object,
|
|
719
|
+
}
|
|
720
|
+
}),
|
|
721
|
+
bare_buffer_typed_compare
|
|
722
|
+
);
|
|
723
|
+
|
|
724
|
+
V("tag", bare_buffer_tag, NULL, NULL);
|
|
725
|
+
|
|
726
|
+
V("isTagged", bare_buffer_is_tagged, NULL, NULL);
|
|
510
727
|
#undef V
|
|
511
728
|
|
|
512
729
|
return exports;
|
package/index.d.ts
CHANGED
|
@@ -10,10 +10,6 @@ type BufferEncoding =
|
|
|
10
10
|
| 'utf8'
|
|
11
11
|
|
|
12
12
|
declare class Buffer extends Uint8Array {
|
|
13
|
-
static Buffer: Buffer
|
|
14
|
-
|
|
15
|
-
static poolSize: number
|
|
16
|
-
|
|
17
13
|
compare(
|
|
18
14
|
target: Buffer,
|
|
19
15
|
targetStart?: number,
|
|
@@ -140,6 +136,10 @@ declare class Buffer extends Uint8Array {
|
|
|
140
136
|
}
|
|
141
137
|
|
|
142
138
|
declare namespace Buffer {
|
|
139
|
+
export { Buffer, BufferEncoding }
|
|
140
|
+
|
|
141
|
+
export let poolSize: number
|
|
142
|
+
|
|
143
143
|
export function isBuffer(value: unknown): value is Buffer
|
|
144
144
|
|
|
145
145
|
export function isEncoding(encoding: string): encoding is BufferEncoding
|
package/index.js
CHANGED
|
@@ -21,6 +21,44 @@ module.exports = exports = class Buffer extends Uint8Array {
|
|
|
21
21
|
poolSize = Math.max(0, value)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
constructor(arrayBuffer, offset, length, opts = {}) {
|
|
25
|
+
if (typeof arrayBuffer === 'number') {
|
|
26
|
+
opts = offset || {}
|
|
27
|
+
|
|
28
|
+
const { uninitialized = false } = opts
|
|
29
|
+
|
|
30
|
+
offset = 0
|
|
31
|
+
length = arrayBuffer
|
|
32
|
+
|
|
33
|
+
if (length > constants.MAX_LENGTH) {
|
|
34
|
+
throw new RangeError(
|
|
35
|
+
`Buffer length must be at most ${constants.MAX_LENGTH}`
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
arrayBuffer = uninitialized
|
|
40
|
+
? binding.allocUnsafe(length)
|
|
41
|
+
: binding.alloc(length)
|
|
42
|
+
} else {
|
|
43
|
+
if (length > constants.MAX_LENGTH) {
|
|
44
|
+
throw new RangeError(
|
|
45
|
+
`Buffer length must be at most ${constants.MAX_LENGTH}`
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (typeof offset === 'object' && offset !== null) {
|
|
50
|
+
opts = offset
|
|
51
|
+
offset = 0
|
|
52
|
+
length = arrayBuffer.byteLength
|
|
53
|
+
} else if (typeof length === 'length' && length !== null) {
|
|
54
|
+
opts = length
|
|
55
|
+
length = arrayBuffer.byteLength - offset
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
super(arrayBuffer, offset, length)
|
|
60
|
+
}
|
|
61
|
+
|
|
24
62
|
[Symbol.species]() {
|
|
25
63
|
return Buffer
|
|
26
64
|
}
|
|
@@ -534,12 +572,7 @@ exports.alloc = function alloc(size, fill, encoding) {
|
|
|
534
572
|
}
|
|
535
573
|
|
|
536
574
|
exports.allocUnsafe = function allocUnsafe(size) {
|
|
537
|
-
|
|
538
|
-
try {
|
|
539
|
-
return new Buffer(size)
|
|
540
|
-
} finally {
|
|
541
|
-
binding.setZeroFillEnabled(1)
|
|
542
|
-
}
|
|
575
|
+
return new Buffer(size, { uninitialized: true })
|
|
543
576
|
}
|
|
544
577
|
|
|
545
578
|
exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
|
package/lib/constants.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bare-buffer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Native buffers for JavaScript",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
],
|
|
24
24
|
"addon": true,
|
|
25
25
|
"scripts": {
|
|
26
|
-
"test": "prettier . --check && bare test
|
|
26
|
+
"test": "prettier . --check && bare test.js"
|
|
27
27
|
},
|
|
28
28
|
"repository": {
|
|
29
29
|
"type": "git",
|
|
@@ -35,6 +35,9 @@
|
|
|
35
35
|
"url": "https://github.com/holepunchto/bare-buffer/issues"
|
|
36
36
|
},
|
|
37
37
|
"homepage": "https://github.com/holepunchto/bare-buffer#readme",
|
|
38
|
+
"engines": {
|
|
39
|
+
"bare": ">=1.13.0"
|
|
40
|
+
},
|
|
38
41
|
"devDependencies": {
|
|
39
42
|
"brittle": "^3.1.1",
|
|
40
43
|
"cmake-bare": "^1.1.6",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|