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 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
  }
@@ -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
- 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
373
393
  }
374
394
 
375
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.0",
3
+ "version": "2.4.2",
4
4
  "description": "Native buffers for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",