bare-buffer 2.4.1 → 2.5.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/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
  }
@@ -221,6 +225,24 @@ const Buffer = module.exports = exports = class Buffer extends Uint8Array {
221
225
  return codecFor(encoding).write(buffer, string)
222
226
  }
223
227
 
228
+ writeUInt8 (value, offset = 0) {
229
+ const view = new DataView(this.buffer, this.byteoffset, this.bytelength)
230
+ view.setUint8(offset, value, true)
231
+
232
+ return offset + 1
233
+ }
234
+
235
+ writeUint8 (...args) {
236
+ return this.writeUInt8(...args)
237
+ }
238
+
239
+ writeInt8 (value, offset = 0) {
240
+ const view = new DataView(this.buffer, this.byteoffset, this.bytelength)
241
+ view.setInt8(offset, value)
242
+
243
+ return offset + 1
244
+ }
245
+
224
246
  writeDoubleLE (value, offset = 0) {
225
247
  const view = new DataView(this.buffer, this.byteOffset, this.byteLength)
226
248
  view.setFloat64(offset, value, true)
@@ -256,6 +278,22 @@ const Buffer = module.exports = exports = class Buffer extends Uint8Array {
256
278
  return offset + 4
257
279
  }
258
280
 
281
+ readInt8 (offset = 0) {
282
+ const view = new DataView(this.buffer, this.byteOffset, this.byteLength)
283
+
284
+ return view.getInt8(offset)
285
+ }
286
+
287
+ readUInt8 (offset = 0) {
288
+ const view = new DataView(this.buffer, this.byteOffset, this.byteLength)
289
+
290
+ return view.getUint8(offset)
291
+ }
292
+
293
+ readUint8 (...args) {
294
+ return this.readUInt8(...args)
295
+ }
296
+
259
297
  readDoubleLE (offset = 0) {
260
298
  const view = new DataView(this.buffer, this.byteOffset, this.byteLength)
261
299
 
@@ -375,7 +413,17 @@ function codecFor (encoding = 'utf8') {
375
413
  }
376
414
 
377
415
  exports.isBuffer = function isBuffer (value) {
378
- return value instanceof Buffer
416
+ if (typeof value !== 'object' || value === null) return false
417
+
418
+ let constructor = value.constructor
419
+
420
+ while (typeof constructor === 'function') {
421
+ if (binding.isTagged(constructor)) return true
422
+
423
+ constructor = Reflect.getPrototypeOf(constructor)
424
+ }
425
+
426
+ return false
379
427
  }
380
428
 
381
429
  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.5.0",
4
4
  "description": "Native buffers for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",