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 +115 -65
- package/index.js +49 -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
|
}
|
|
@@ -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
|
-
|
|
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
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|