bare-buffer 3.1.2 → 3.1.4

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
@@ -7,8 +7,6 @@
7
7
  #include <string.h>
8
8
  #include <utf.h>
9
9
 
10
- static js_type_tag_t bare_buffer__tag = {0xfea3e944b70b0812, 0xe53bb5c343c040b6};
11
-
12
10
  static inline int
13
11
  bare_buffer__memcmp(void *a, size_t a_len, void *b, size_t b_len) {
14
12
  int r = memcmp(a, b, a_len < b_len ? a_len : b_len);
@@ -143,18 +141,20 @@ bare_buffer_typed_write_utf8(js_value_t *receiver, js_value_t *typedarray, js_va
143
141
  err = js_get_typed_callback_info(info, &env, NULL);
144
142
  assert(err == 0);
145
143
 
144
+ js_handle_scope_t *scope;
145
+ err = js_open_handle_scope(env, &scope);
146
+ assert(err == 0);
147
+
146
148
  void *buf;
147
149
  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);
150
+ err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
151
151
  assert(err == 0);
152
152
 
153
153
  size_t str_len;
154
154
  err = js_get_value_string_utf8(env, string, buf, buf_len, &str_len);
155
155
  assert(err == 0);
156
156
 
157
- err = js_release_typedarray_view(env, buf_view);
157
+ err = js_close_handle_scope(env, scope);
158
158
  assert(err == 0);
159
159
 
160
160
  return (uint32_t) str_len;
@@ -222,11 +222,13 @@ bare_buffer_typed_write_utf16le(js_value_t *receiver, js_value_t *typedarray, js
222
222
  err = js_get_typed_callback_info(info, &env, NULL);
223
223
  assert(err == 0);
224
224
 
225
+ js_handle_scope_t *scope;
226
+ err = js_open_handle_scope(env, &scope);
227
+ assert(err == 0);
228
+
225
229
  void *buf;
226
230
  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);
231
+ err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
230
232
  assert(err == 0);
231
233
 
232
234
  buf_len /= sizeof(utf16_t);
@@ -237,7 +239,7 @@ bare_buffer_typed_write_utf16le(js_value_t *receiver, js_value_t *typedarray, js
237
239
 
238
240
  str_len *= sizeof(utf16_t);
239
241
 
240
- err = js_release_typedarray_view(env, buf_view);
242
+ err = js_close_handle_scope(env, scope);
241
243
  assert(err == 0);
242
244
 
243
245
  return (uint32_t) str_len;
@@ -307,18 +309,20 @@ bare_buffer_typed_write_latin1(js_value_t *receiver, js_value_t *typedarray, js_
307
309
  err = js_get_typed_callback_info(info, &env, NULL);
308
310
  assert(err == 0);
309
311
 
312
+ js_handle_scope_t *scope;
313
+ err = js_open_handle_scope(env, &scope);
314
+ assert(err == 0);
315
+
310
316
  void *buf;
311
317
  size_t buf_len;
312
-
313
- js_typedarray_view_t *buf_view;
314
- err = js_get_typedarray_view(env, typedarray, NULL, &buf, &buf_len, &buf_view);
318
+ err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
315
319
  assert(err == 0);
316
320
 
317
321
  size_t str_len;
318
322
  err = js_get_value_string_latin1(env, string, buf, buf_len, &str_len);
319
323
  assert(err == 0);
320
324
 
321
- err = js_release_typedarray_view(env, buf_view);
325
+ err = js_close_handle_scope(env, scope);
322
326
  assert(err == 0);
323
327
 
324
328
  return (uint32_t) str_len;
@@ -392,11 +396,13 @@ bare_buffer_typed_write_base64(js_value_t *receiver, js_value_t *typedarray, js_
392
396
  err = js_get_typed_callback_info(info, &env, NULL);
393
397
  assert(err == 0);
394
398
 
399
+ js_handle_scope_t *scope;
400
+ err = js_open_handle_scope(env, &scope);
401
+ assert(err == 0);
402
+
395
403
  void *buf;
396
404
  size_t buf_len;
397
-
398
- js_typedarray_view_t *buf_view;
399
- err = js_get_typedarray_view(env, typedarray, NULL, &buf, &buf_len, &buf_view);
405
+ err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
400
406
  assert(err == 0);
401
407
 
402
408
  js_string_encoding_t encoding;
@@ -418,7 +424,7 @@ bare_buffer_typed_write_base64(js_value_t *receiver, js_value_t *typedarray, js_
418
424
  err = js_release_string_view(env, str_view);
419
425
  assert(err == 0);
420
426
 
421
- err = js_release_typedarray_view(env, buf_view);
427
+ err = js_close_handle_scope(env, scope);
422
428
  assert(err == 0);
423
429
 
424
430
  return buf_len;
@@ -507,11 +513,13 @@ bare_buffer_typed_write_hex(js_value_t *receiver, js_value_t *typedarray, js_val
507
513
  err = js_get_typed_callback_info(info, &env, NULL);
508
514
  assert(err == 0);
509
515
 
516
+ js_handle_scope_t *scope;
517
+ err = js_open_handle_scope(env, &scope);
518
+ assert(err == 0);
519
+
510
520
  void *buf;
511
521
  size_t buf_len;
512
-
513
- js_typedarray_view_t *buf_view;
514
- err = js_get_typedarray_view(env, typedarray, NULL, &buf, &buf_len, &buf_view);
522
+ err = js_get_typedarray_info(env, typedarray, NULL, &buf, &buf_len, NULL, NULL);
515
523
  assert(err == 0);
516
524
 
517
525
  js_string_encoding_t encoding;
@@ -533,7 +541,7 @@ bare_buffer_typed_write_hex(js_value_t *receiver, js_value_t *typedarray, js_val
533
541
  err = js_release_string_view(env, str_view);
534
542
  assert(err == 0);
535
543
 
536
- err = js_release_typedarray_view(env, buf_view);
544
+ err = js_close_handle_scope(env, scope);
537
545
  assert(err == 0);
538
546
 
539
547
  return buf_len;
@@ -583,7 +591,16 @@ bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
583
591
  }
584
592
 
585
593
  static int32_t
586
- bare_buffer_typed_compare(js_value_t *receiver, js_value_t *source, js_value_t *target, js_typed_callback_info_t *info) {
594
+ bare_buffer_typed_compare(
595
+ js_value_t *receiver,
596
+ js_value_t *a_handle,
597
+ uint32_t a_offset,
598
+ uint32_t a_len,
599
+ js_value_t *b_handle,
600
+ uint32_t b_offset,
601
+ uint32_t b_len,
602
+ js_typed_callback_info_t *info
603
+ ) {
587
604
  int err;
588
605
 
589
606
  js_env_t *env;
@@ -591,95 +608,54 @@ bare_buffer_typed_compare(js_value_t *receiver, js_value_t *source, js_value_t *
591
608
  assert(err == 0);
592
609
 
593
610
  void *a;
594
- size_t a_len;
595
-
596
- js_typedarray_view_t *a_view;
597
- err = js_get_typedarray_view(env, source, NULL, &a, &a_len, &a_view);
611
+ err = js_get_arraybuffer_info(env, a_handle, &a, NULL);
598
612
  assert(err == 0);
599
613
 
600
614
  void *b;
601
- size_t b_len;
602
-
603
- js_typedarray_view_t *b_view;
604
- err = js_get_typedarray_view(env, target, NULL, &b, &b_len, &b_view);
605
- assert(err == 0);
606
-
607
- int result = bare_buffer__memcmp(a, a_len, b, b_len);
608
-
609
- err = js_release_typedarray_view(env, a_view);
610
- assert(err == 0);
611
-
612
- err = js_release_typedarray_view(env, b_view);
615
+ err = js_get_arraybuffer_info(env, b_handle, &b, NULL);
613
616
  assert(err == 0);
614
617
 
615
- return result;
618
+ return bare_buffer__memcmp(&a[a_offset], a_len, &b[b_offset], b_len);
616
619
  }
617
620
 
618
621
  static js_value_t *
619
622
  bare_buffer_compare(js_env_t *env, js_callback_info_t *info) {
620
623
  int err;
621
624
 
622
- size_t argc = 2;
623
- js_value_t *argv[2];
625
+ size_t argc = 6;
626
+ js_value_t *argv[6];
624
627
 
625
628
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
626
629
  assert(err == 0);
627
630
 
628
- assert(argc == 2);
631
+ assert(argc == 6);
629
632
 
630
633
  void *a;
631
- size_t a_len;
632
- err = js_get_typedarray_info(env, argv[0], NULL, &a, &a_len, NULL, NULL);
633
- assert(err == 0);
634
-
635
- void *b;
636
- size_t b_len;
637
- err = js_get_typedarray_info(env, argv[1], NULL, &b, &b_len, NULL, NULL);
634
+ err = js_get_arraybuffer_info(env, argv[0], &a, NULL);
638
635
  assert(err == 0);
639
636
 
640
- js_value_t *result;
641
- err = js_create_int32(env, bare_buffer__memcmp(a, a_len, b, b_len), &result);
637
+ uint32_t a_offset;
638
+ err = js_get_value_uint32(env, argv[1], &a_offset);
642
639
  assert(err == 0);
643
640
 
644
- return result;
645
- }
646
-
647
- static js_value_t *
648
- bare_buffer_tag(js_env_t *env, js_callback_info_t *info) {
649
- int err;
650
-
651
- size_t argc = 1;
652
- js_value_t *argv[1];
653
-
654
- err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
641
+ uint32_t a_len;
642
+ err = js_get_value_uint32(env, argv[2], &a_len);
655
643
  assert(err == 0);
656
644
 
657
- assert(argc == 1);
658
-
659
- err = js_add_type_tag(env, argv[0], &bare_buffer__tag);
645
+ void *b;
646
+ err = js_get_arraybuffer_info(env, argv[3], &b, NULL);
660
647
  assert(err == 0);
661
648
 
662
- return NULL;
663
- }
664
-
665
- static js_value_t *
666
- bare_buffer_is_tagged(js_env_t *env, js_callback_info_t *info) {
667
- int err;
668
-
669
- size_t argc = 1;
670
- js_value_t *argv[1];
671
-
672
- err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
649
+ uint32_t b_offset;
650
+ err = js_get_value_uint32(env, argv[4], &b_offset);
673
651
  assert(err == 0);
674
652
 
675
- assert(argc == 1);
676
-
677
- bool is_tagged;
678
- err = js_check_type_tag(env, argv[0], &bare_buffer__tag, &is_tagged);
653
+ uint32_t b_len;
654
+ err = js_get_value_uint32(env, argv[5], &b_len);
679
655
  assert(err == 0);
680
656
 
681
657
  js_value_t *result;
682
- err = js_get_boolean(env, is_tagged, &result);
658
+ err = js_create_int32(env, bare_buffer__memcmp(&a[a_offset], a_len, &b[b_offset], b_len), &result);
683
659
  assert(err == 0);
684
660
 
685
661
  return result;
@@ -818,19 +794,19 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
818
794
  &((js_callback_signature_t) {
819
795
  .version = 0,
820
796
  .result = js_int32,
821
- .args_len = 3,
797
+ .args_len = 7,
822
798
  .args = (int[]) {
823
799
  js_object,
824
800
  js_object,
801
+ js_uint32,
802
+ js_uint32,
825
803
  js_object,
804
+ js_uint32,
805
+ js_uint32,
826
806
  }
827
807
  }),
828
808
  bare_buffer_typed_compare
829
809
  );
830
-
831
- V("tag", bare_buffer_tag, NULL, NULL);
832
-
833
- V("isTagged", bare_buffer_is_tagged, NULL, NULL);
834
810
  #undef V
835
811
 
836
812
  return exports;
package/index.js CHANGED
@@ -7,11 +7,13 @@ const utf16le = require('./lib/utf16le')
7
7
  const latin1 = require('./lib/latin1')
8
8
  const binding = require('./binding')
9
9
 
10
+ const kind = Symbol.for('bare.buffer.kind')
11
+
10
12
  let poolSize = 0
11
13
 
12
14
  module.exports = exports = class Buffer extends Uint8Array {
13
- static {
14
- binding.tag(this)
15
+ static get [kind]() {
16
+ return 0 // Compatibility version
15
17
  }
16
18
 
17
19
  static get poolSize() {
@@ -60,8 +62,8 @@ module.exports = exports = class Buffer extends Uint8Array {
60
62
  super(arrayBuffer, offset, length)
61
63
  }
62
64
 
63
- [Symbol.species]() {
64
- return Buffer
65
+ get [kind]() {
66
+ return Buffer[kind]
65
67
  }
66
68
 
67
69
  copy(target, targetStart = 0, sourceStart = 0, sourceEnd = this.byteLength) {
@@ -104,7 +106,16 @@ module.exports = exports = class Buffer extends Uint8Array {
104
106
 
105
107
  if (source.byteLength !== target.byteLength) return false
106
108
 
107
- return binding.compare(source, target) === 0
109
+ return (
110
+ binding.compare(
111
+ source.buffer,
112
+ source.byteOffset,
113
+ source.byteLength,
114
+ target.buffer,
115
+ target.byteOffset,
116
+ target.byteLength
117
+ ) === 0
118
+ )
108
119
  }
109
120
 
110
121
  compare(
@@ -118,29 +129,36 @@ module.exports = exports = class Buffer extends Uint8Array {
118
129
 
119
130
  if (source === target) return 0
120
131
 
121
- if (arguments.length === 1) return binding.compare(source, target)
132
+ if (arguments.length > 1) {
133
+ if (targetStart < 0) targetStart = 0
134
+ if (targetStart > target.byteLength) targetStart = target.byteLength
122
135
 
123
- if (targetStart < 0) targetStart = 0
124
- if (targetStart > target.byteLength) targetStart = target.byteLength
136
+ if (targetEnd < targetStart) targetEnd = targetStart
137
+ if (targetEnd > target.byteLength) targetEnd = target.byteLength
125
138
 
126
- if (targetEnd < targetStart) targetEnd = targetStart
127
- if (targetEnd > target.byteLength) targetEnd = target.byteLength
139
+ if (sourceStart < 0) sourceStart = 0
140
+ if (sourceStart > source.byteLength) sourceStart = source.byteLength
128
141
 
129
- if (sourceStart < 0) sourceStart = 0
130
- if (sourceStart > source.byteLength) sourceStart = source.byteLength
142
+ if (sourceEnd < sourceStart) sourceEnd = sourceStart
143
+ if (sourceEnd > source.byteLength) sourceEnd = source.byteLength
131
144
 
132
- if (sourceEnd < sourceStart) sourceEnd = sourceStart
133
- if (sourceEnd > source.byteLength) sourceEnd = source.byteLength
134
-
135
- if (sourceStart !== 0 || sourceEnd !== source.byteLength) {
136
- source = source.subarray(sourceStart, sourceEnd)
137
- }
145
+ if (sourceStart !== 0 || sourceEnd !== source.byteLength) {
146
+ source = source.subarray(sourceStart, sourceEnd)
147
+ }
138
148
 
139
- if (targetStart !== 0 || targetEnd !== target.byteLength) {
140
- target = target.subarray(targetStart, targetEnd)
149
+ if (targetStart !== 0 || targetEnd !== target.byteLength) {
150
+ target = target.subarray(targetStart, targetEnd)
151
+ }
141
152
  }
142
153
 
143
- return binding.compare(source, target)
154
+ return binding.compare(
155
+ source.buffer,
156
+ source.byteOffset,
157
+ source.byteLength,
158
+ target.buffer,
159
+ target.byteOffset,
160
+ target.byteLength
161
+ )
144
162
  }
145
163
 
146
164
  fill(value, offset = 0, end = this.byteLength, encoding = 'utf8') {
@@ -545,17 +563,11 @@ function viewOf(buffer) {
545
563
  }
546
564
 
547
565
  exports.isBuffer = function isBuffer(value) {
548
- if (typeof value !== 'object' || value === null) return false
549
-
550
- let constructor = value.constructor
551
-
552
- while (typeof constructor === 'function') {
553
- if (binding.isTagged(constructor)) return true
554
-
555
- constructor = Reflect.getPrototypeOf(constructor)
556
- }
566
+ if (value instanceof Buffer) return true
557
567
 
558
- return false
568
+ return (
569
+ typeof value === 'object' && value !== null && value[kind] === Buffer[kind]
570
+ )
559
571
  }
560
572
 
561
573
  exports.isEncoding = function isEncoding(encoding) {
@@ -590,7 +602,14 @@ exports.byteLength = function byteLength(string, encoding) {
590
602
  }
591
603
 
592
604
  exports.compare = function compare(a, b) {
593
- return binding.compare(a, b)
605
+ return binding.compare(
606
+ a.buffer,
607
+ a.byteOffset,
608
+ a.byteLength,
609
+ b.buffer,
610
+ b.byteOffset,
611
+ b.byteLength
612
+ )
594
613
  }
595
614
 
596
615
  exports.concat = function concat(buffers, length) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-buffer",
3
- "version": "3.1.2",
3
+ "version": "3.1.4",
4
4
  "description": "Native buffers for JavaScript",
5
5
  "exports": {
6
6
  "./package": "./package.json",