bare-buffer 2.4.0 → 2.4.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 +115 -65
- package/index.js +21 -1
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/bare-buffer.bare +0 -0
- package/prebuilds/darwin-x64/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-x64/bare-buffer.bare +0 -0
package/binding.c
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
#include <string.h>
|
|
9
9
|
#include <utf.h>
|
|
10
10
|
|
|
11
|
+
static js_type_tag_t bare_buffer__tag = {0xfea3e944b70b0812, 0xe53bb5c343c040b6};
|
|
12
|
+
|
|
11
13
|
static void
|
|
12
14
|
bare_buffer_set_zero_fill_enabled_fast (js_ffi_receiver_t *receiver, uint32_t enabled) {
|
|
13
15
|
js_set_arraybuffer_zero_fill_enabled(enabled != 0);
|
|
@@ -371,104 +373,152 @@ bare_buffer_compare (js_env_t *env, js_callback_info_t *info) {
|
|
|
371
373
|
return result;
|
|
372
374
|
}
|
|
373
375
|
|
|
376
|
+
static js_value_t *
|
|
377
|
+
bare_buffer_tag (js_env_t *env, js_callback_info_t *info) {
|
|
378
|
+
int err;
|
|
379
|
+
|
|
380
|
+
size_t argc = 1;
|
|
381
|
+
js_value_t *argv[1];
|
|
382
|
+
|
|
383
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
384
|
+
assert(err == 0);
|
|
385
|
+
|
|
386
|
+
assert(argc == 1);
|
|
387
|
+
|
|
388
|
+
err = js_add_type_tag(env, argv[0], &bare_buffer__tag);
|
|
389
|
+
assert(err == 0);
|
|
390
|
+
|
|
391
|
+
return NULL;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
static js_value_t *
|
|
395
|
+
bare_buffer_is_tagged (js_env_t *env, js_callback_info_t *info) {
|
|
396
|
+
int err;
|
|
397
|
+
|
|
398
|
+
size_t argc = 1;
|
|
399
|
+
js_value_t *argv[1];
|
|
400
|
+
|
|
401
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
402
|
+
assert(err == 0);
|
|
403
|
+
|
|
404
|
+
assert(argc == 1);
|
|
405
|
+
|
|
406
|
+
bool is_buffer;
|
|
407
|
+
err = js_check_type_tag(env, argv[0], &bare_buffer__tag, &is_buffer);
|
|
408
|
+
assert(err == 0);
|
|
409
|
+
|
|
410
|
+
js_value_t *result;
|
|
411
|
+
err = js_get_boolean(env, is_buffer, &result);
|
|
412
|
+
assert(err == 0);
|
|
413
|
+
|
|
414
|
+
return result;
|
|
415
|
+
}
|
|
416
|
+
|
|
374
417
|
static js_value_t *
|
|
375
418
|
bare_buffer_exports (js_env_t *env, js_value_t *exports) {
|
|
419
|
+
int err;
|
|
420
|
+
|
|
421
|
+
#define V(name, fn, ffi) \
|
|
422
|
+
{ \
|
|
423
|
+
js_value_t *val; \
|
|
424
|
+
if (ffi) { \
|
|
425
|
+
err = js_create_function_with_ffi(env, name, -1, fn, NULL, ffi, &val); \
|
|
426
|
+
} else { \
|
|
427
|
+
err = js_create_function(env, name, -1, fn, NULL, &val); \
|
|
428
|
+
} \
|
|
429
|
+
assert(err == 0); \
|
|
430
|
+
err = js_set_named_property(env, exports, name, val); \
|
|
431
|
+
assert(err == 0); \
|
|
432
|
+
}
|
|
433
|
+
|
|
376
434
|
{
|
|
377
435
|
js_ffi_type_info_t *return_info;
|
|
378
|
-
js_ffi_create_type_info(js_ffi_void, &return_info);
|
|
436
|
+
err = js_ffi_create_type_info(js_ffi_void, &return_info);
|
|
437
|
+
assert(err == 0);
|
|
379
438
|
|
|
380
439
|
js_ffi_type_info_t *arg_info[2];
|
|
381
|
-
|
|
382
|
-
js_ffi_create_type_info(
|
|
440
|
+
|
|
441
|
+
err = js_ffi_create_type_info(js_ffi_receiver, &arg_info[0]);
|
|
442
|
+
assert(err == 0);
|
|
443
|
+
|
|
444
|
+
err = js_ffi_create_type_info(js_ffi_uint32, &arg_info[1]);
|
|
445
|
+
assert(err == 0);
|
|
383
446
|
|
|
384
447
|
js_ffi_function_info_t *function_info;
|
|
385
|
-
js_ffi_create_function_info(return_info, arg_info, 2, &function_info);
|
|
448
|
+
err = js_ffi_create_function_info(return_info, arg_info, 2, &function_info);
|
|
449
|
+
assert(err == 0);
|
|
386
450
|
|
|
387
451
|
js_ffi_function_t *ffi;
|
|
388
|
-
js_ffi_create_function(bare_buffer_set_zero_fill_enabled_fast, function_info, &ffi);
|
|
452
|
+
err = js_ffi_create_function(bare_buffer_set_zero_fill_enabled_fast, function_info, &ffi);
|
|
453
|
+
assert(err == 0);
|
|
389
454
|
|
|
390
|
-
|
|
391
|
-
js_create_function_with_ffi(env, "setZeroFillEnabled", -1, bare_buffer_set_zero_fill_enabled, NULL, ffi, &val);
|
|
392
|
-
js_set_named_property(env, exports, "setZeroFillEnabled", val);
|
|
455
|
+
V("setZeroFillEnabled", bare_buffer_set_zero_fill_enabled, ffi);
|
|
393
456
|
}
|
|
457
|
+
|
|
394
458
|
{
|
|
395
459
|
js_ffi_type_info_t *return_info;
|
|
396
|
-
js_ffi_create_type_info(js_ffi_int32, &return_info);
|
|
460
|
+
err = js_ffi_create_type_info(js_ffi_int32, &return_info);
|
|
461
|
+
assert(err == 0);
|
|
397
462
|
|
|
398
463
|
js_ffi_type_info_t *arg_info[2];
|
|
399
|
-
|
|
400
|
-
js_ffi_create_type_info(
|
|
464
|
+
|
|
465
|
+
err = js_ffi_create_type_info(js_ffi_receiver, &arg_info[0]);
|
|
466
|
+
assert(err == 0);
|
|
467
|
+
|
|
468
|
+
err = js_ffi_create_type_info(js_ffi_string, &arg_info[1]);
|
|
469
|
+
assert(err == 0);
|
|
401
470
|
|
|
402
471
|
js_ffi_function_info_t *function_info;
|
|
403
|
-
js_ffi_create_function_info(return_info, arg_info, 2, &function_info);
|
|
472
|
+
err = js_ffi_create_function_info(return_info, arg_info, 2, &function_info);
|
|
473
|
+
assert(err == 0);
|
|
404
474
|
|
|
405
475
|
js_ffi_function_t *ffi;
|
|
406
|
-
js_ffi_create_function(bare_buffer_byte_length_utf8_fast, function_info, &ffi);
|
|
476
|
+
err = js_ffi_create_function(bare_buffer_byte_length_utf8_fast, function_info, &ffi);
|
|
477
|
+
assert(err == 0);
|
|
407
478
|
|
|
408
|
-
|
|
409
|
-
js_create_function_with_ffi(env, "byteLengthUTF8", -1, bare_buffer_byte_length_utf8, NULL, ffi, &val);
|
|
410
|
-
js_set_named_property(env, exports, "byteLengthUTF8", val);
|
|
411
|
-
}
|
|
412
|
-
{
|
|
413
|
-
js_value_t *val;
|
|
414
|
-
js_create_function(env, "toStringUTF8", -1, bare_buffer_to_string_utf8, NULL, &val);
|
|
415
|
-
js_set_named_property(env, exports, "toStringUTF8", val);
|
|
416
|
-
}
|
|
417
|
-
{
|
|
418
|
-
js_value_t *val;
|
|
419
|
-
js_create_function(env, "writeUTF8", -1, bare_buffer_write_utf8, NULL, &val);
|
|
420
|
-
js_set_named_property(env, exports, "writeUTF8", val);
|
|
421
|
-
}
|
|
422
|
-
{
|
|
423
|
-
js_value_t *val;
|
|
424
|
-
js_create_function(env, "toStringUTF16LE", -1, bare_buffer_to_string_utf16le, NULL, &val);
|
|
425
|
-
js_set_named_property(env, exports, "toStringUTF16LE", val);
|
|
426
|
-
}
|
|
427
|
-
{
|
|
428
|
-
js_value_t *val;
|
|
429
|
-
js_create_function(env, "writeUTF16LE", -1, bare_buffer_write_utf16le, NULL, &val);
|
|
430
|
-
js_set_named_property(env, exports, "writeUTF16LE", val);
|
|
431
|
-
}
|
|
432
|
-
{
|
|
433
|
-
js_value_t *val;
|
|
434
|
-
js_create_function(env, "toStringBase64", -1, bare_buffer_to_string_base64, NULL, &val);
|
|
435
|
-
js_set_named_property(env, exports, "toStringBase64", val);
|
|
436
|
-
}
|
|
437
|
-
{
|
|
438
|
-
js_value_t *val;
|
|
439
|
-
js_create_function(env, "writeBase64", -1, bare_buffer_write_base64, NULL, &val);
|
|
440
|
-
js_set_named_property(env, exports, "writeBase64", val);
|
|
441
|
-
}
|
|
442
|
-
{
|
|
443
|
-
js_value_t *val;
|
|
444
|
-
js_create_function(env, "toStringHex", -1, bare_buffer_to_string_hex, NULL, &val);
|
|
445
|
-
js_set_named_property(env, exports, "toStringHex", val);
|
|
446
|
-
}
|
|
447
|
-
{
|
|
448
|
-
js_value_t *val;
|
|
449
|
-
js_create_function(env, "writeHex", -1, bare_buffer_write_hex, NULL, &val);
|
|
450
|
-
js_set_named_property(env, exports, "writeHex", val);
|
|
479
|
+
V("byteLengthUTF8", bare_buffer_byte_length_utf8, ffi);
|
|
451
480
|
}
|
|
481
|
+
|
|
482
|
+
V("toStringUTF8", bare_buffer_to_string_utf8, NULL);
|
|
483
|
+
V("writeUTF8", bare_buffer_write_utf8, NULL);
|
|
484
|
+
V("toStringUTF16LE", bare_buffer_to_string_utf16le, NULL);
|
|
485
|
+
V("writeUTF16LE", bare_buffer_write_utf16le, NULL);
|
|
486
|
+
V("toStringBase64", bare_buffer_to_string_base64, NULL);
|
|
487
|
+
V("writeBase64", bare_buffer_write_base64, NULL);
|
|
488
|
+
V("toStringHex", bare_buffer_to_string_hex, NULL);
|
|
489
|
+
V("writeHex", bare_buffer_write_hex, NULL);
|
|
490
|
+
|
|
452
491
|
{
|
|
453
492
|
js_ffi_type_info_t *return_info;
|
|
454
|
-
js_ffi_create_type_info(js_ffi_int32, &return_info);
|
|
493
|
+
err = js_ffi_create_type_info(js_ffi_int32, &return_info);
|
|
494
|
+
assert(err == 0);
|
|
455
495
|
|
|
456
496
|
js_ffi_type_info_t *arg_info[3];
|
|
457
|
-
|
|
458
|
-
js_ffi_create_type_info(
|
|
459
|
-
|
|
497
|
+
|
|
498
|
+
err = js_ffi_create_type_info(js_ffi_receiver, &arg_info[0]);
|
|
499
|
+
assert(err == 0);
|
|
500
|
+
|
|
501
|
+
err = js_ffi_create_type_info(js_ffi_uint8array, &arg_info[1]);
|
|
502
|
+
assert(err == 0);
|
|
503
|
+
|
|
504
|
+
err = js_ffi_create_type_info(js_ffi_uint8array, &arg_info[2]);
|
|
505
|
+
assert(err == 0);
|
|
460
506
|
|
|
461
507
|
js_ffi_function_info_t *function_info;
|
|
462
|
-
js_ffi_create_function_info(return_info, arg_info, 3, &function_info);
|
|
508
|
+
err = js_ffi_create_function_info(return_info, arg_info, 3, &function_info);
|
|
509
|
+
assert(err == 0);
|
|
463
510
|
|
|
464
511
|
js_ffi_function_t *ffi;
|
|
465
|
-
js_ffi_create_function(bare_buffer_compare_fast, function_info, &ffi);
|
|
512
|
+
err = js_ffi_create_function(bare_buffer_compare_fast, function_info, &ffi);
|
|
513
|
+
assert(err == 0);
|
|
466
514
|
|
|
467
|
-
|
|
468
|
-
js_create_function_with_ffi(env, "compare", -1, bare_buffer_compare, NULL, ffi, &val);
|
|
469
|
-
js_set_named_property(env, exports, "compare", val);
|
|
515
|
+
V("compare", bare_buffer_compare, ffi);
|
|
470
516
|
}
|
|
471
517
|
|
|
518
|
+
V("tag", bare_buffer_tag, NULL)
|
|
519
|
+
V("isTagged", bare_buffer_is_tagged, NULL)
|
|
520
|
+
#undef V
|
|
521
|
+
|
|
472
522
|
return exports;
|
|
473
523
|
}
|
|
474
524
|
|
package/index.js
CHANGED
|
@@ -7,6 +7,10 @@ const utf16le = require('./lib/utf16le')
|
|
|
7
7
|
const binding = require('./binding')
|
|
8
8
|
|
|
9
9
|
const Buffer = module.exports = exports = class Buffer extends Uint8Array {
|
|
10
|
+
static {
|
|
11
|
+
binding.tag(this)
|
|
12
|
+
}
|
|
13
|
+
|
|
10
14
|
[Symbol.species] () {
|
|
11
15
|
return Buffer
|
|
12
16
|
}
|
|
@@ -268,6 +272,12 @@ const Buffer = module.exports = exports = class Buffer extends Uint8Array {
|
|
|
268
272
|
return view.getFloat32(offset, true)
|
|
269
273
|
}
|
|
270
274
|
|
|
275
|
+
readUInt16LE (offset = 0) {
|
|
276
|
+
const view = new DataView(this.buffer, this.byteOffset, this.byteLength)
|
|
277
|
+
|
|
278
|
+
return view.getUint16(offset, true)
|
|
279
|
+
}
|
|
280
|
+
|
|
271
281
|
readUInt32LE (offset = 0) {
|
|
272
282
|
const view = new DataView(this.buffer, this.byteOffset, this.byteLength)
|
|
273
283
|
|
|
@@ -369,7 +379,17 @@ function codecFor (encoding = 'utf8') {
|
|
|
369
379
|
}
|
|
370
380
|
|
|
371
381
|
exports.isBuffer = function isBuffer (value) {
|
|
372
|
-
|
|
382
|
+
if (typeof value !== 'object' || value === null) return false
|
|
383
|
+
|
|
384
|
+
let constructor = value.constructor
|
|
385
|
+
|
|
386
|
+
while (typeof constructor === 'function') {
|
|
387
|
+
if (binding.isTagged(constructor)) return true
|
|
388
|
+
|
|
389
|
+
constructor = Reflect.getPrototypeOf(constructor)
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return false
|
|
373
393
|
}
|
|
374
394
|
|
|
375
395
|
exports.isEncoding = function isEncoding (encoding) {
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|