bare-buffer 2.4.1 → 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 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
- js_ffi_create_type_info(js_ffi_receiver, &arg_info[0]);
382
- js_ffi_create_type_info(js_ffi_uint32, &arg_info[1]);
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
- js_value_t *val;
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
- js_ffi_create_type_info(js_ffi_receiver, &arg_info[0]);
400
- js_ffi_create_type_info(js_ffi_string, &arg_info[1]);
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
- js_value_t *val;
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
- js_ffi_create_type_info(js_ffi_receiver, &arg_info[0]);
458
- js_ffi_create_type_info(js_ffi_uint8array, &arg_info[1]);
459
- js_ffi_create_type_info(js_ffi_uint8array, &arg_info[2]);
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
- js_value_t *val;
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
  }
@@ -375,7 +379,17 @@ function codecFor (encoding = 'utf8') {
375
379
  }
376
380
 
377
381
  exports.isBuffer = function isBuffer (value) {
378
- return value instanceof Buffer
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
379
393
  }
380
394
 
381
395
  exports.isEncoding = function isEncoding (encoding) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-buffer",
3
- "version": "2.4.1",
3
+ "version": "2.4.2",
4
4
  "description": "Native buffers for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",