@xata.io/client 0.29.2 → 0.29.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/dist/index.mjs CHANGED
@@ -22,6 +22,1814 @@ const TraceAttributes = {
22
22
  CLOUDFLARE_RAY_ID: "cf.ray"
23
23
  };
24
24
 
25
+ const lookup = [];
26
+ const revLookup = [];
27
+ const code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
28
+ for (let i = 0, len = code.length; i < len; ++i) {
29
+ lookup[i] = code[i];
30
+ revLookup[code.charCodeAt(i)] = i;
31
+ }
32
+ revLookup["-".charCodeAt(0)] = 62;
33
+ revLookup["_".charCodeAt(0)] = 63;
34
+ function getLens(b64) {
35
+ const len = b64.length;
36
+ if (len % 4 > 0) {
37
+ throw new Error("Invalid string. Length must be a multiple of 4");
38
+ }
39
+ let validLen = b64.indexOf("=");
40
+ if (validLen === -1)
41
+ validLen = len;
42
+ const placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
43
+ return [validLen, placeHoldersLen];
44
+ }
45
+ function _byteLength(_b64, validLen, placeHoldersLen) {
46
+ return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
47
+ }
48
+ function toByteArray(b64) {
49
+ let tmp;
50
+ const lens = getLens(b64);
51
+ const validLen = lens[0];
52
+ const placeHoldersLen = lens[1];
53
+ const arr = new Uint8Array(_byteLength(b64, validLen, placeHoldersLen));
54
+ let curByte = 0;
55
+ const len = placeHoldersLen > 0 ? validLen - 4 : validLen;
56
+ let i;
57
+ for (i = 0; i < len; i += 4) {
58
+ tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
59
+ arr[curByte++] = tmp >> 16 & 255;
60
+ arr[curByte++] = tmp >> 8 & 255;
61
+ arr[curByte++] = tmp & 255;
62
+ }
63
+ if (placeHoldersLen === 2) {
64
+ tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
65
+ arr[curByte++] = tmp & 255;
66
+ }
67
+ if (placeHoldersLen === 1) {
68
+ tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
69
+ arr[curByte++] = tmp >> 8 & 255;
70
+ arr[curByte++] = tmp & 255;
71
+ }
72
+ return arr;
73
+ }
74
+ function tripletToBase64(num) {
75
+ return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];
76
+ }
77
+ function encodeChunk(uint8, start, end) {
78
+ let tmp;
79
+ const output = [];
80
+ for (let i = start; i < end; i += 3) {
81
+ tmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);
82
+ output.push(tripletToBase64(tmp));
83
+ }
84
+ return output.join("");
85
+ }
86
+ function fromByteArray(uint8) {
87
+ let tmp;
88
+ const len = uint8.length;
89
+ const extraBytes = len % 3;
90
+ const parts = [];
91
+ const maxChunkLength = 16383;
92
+ for (let i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
93
+ parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
94
+ }
95
+ if (extraBytes === 1) {
96
+ tmp = uint8[len - 1];
97
+ parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "==");
98
+ } else if (extraBytes === 2) {
99
+ tmp = (uint8[len - 2] << 8) + uint8[len - 1];
100
+ parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "=");
101
+ }
102
+ return parts.join("");
103
+ }
104
+
105
+ const K_MAX_LENGTH = 2147483647;
106
+ const MAX_ARGUMENTS_LENGTH = 4096;
107
+ class Buffer extends Uint8Array {
108
+ /**
109
+ * Constructs a new `Buffer` instance.
110
+ *
111
+ * @param value
112
+ * @param encodingOrOffset
113
+ * @param length
114
+ */
115
+ constructor(value, encodingOrOffset, length) {
116
+ if (typeof value === "number") {
117
+ if (typeof encodingOrOffset === "string") {
118
+ throw new TypeError("The first argument must be of type string, received type number");
119
+ }
120
+ if (value < 0) {
121
+ throw new RangeError("The buffer size cannot be negative");
122
+ }
123
+ super(value < 0 ? 0 : Buffer._checked(value) | 0);
124
+ } else if (typeof value === "string") {
125
+ if (typeof encodingOrOffset !== "string") {
126
+ encodingOrOffset = "utf8";
127
+ }
128
+ if (!Buffer.isEncoding(encodingOrOffset)) {
129
+ throw new TypeError("Unknown encoding: " + encodingOrOffset);
130
+ }
131
+ const length2 = Buffer.byteLength(value, encodingOrOffset) | 0;
132
+ super(length2);
133
+ const written = this.write(value, 0, this.length, encodingOrOffset);
134
+ if (written !== length2) {
135
+ throw new TypeError(
136
+ "Number of bytes written did not match expected length (wrote " + written + ", expected " + length2 + ")"
137
+ );
138
+ }
139
+ } else if (ArrayBuffer.isView(value)) {
140
+ if (Buffer._isInstance(value, Uint8Array)) {
141
+ const copy = new Uint8Array(value);
142
+ const array = copy.buffer;
143
+ const byteOffset = copy.byteOffset;
144
+ const length2 = copy.byteLength;
145
+ if (byteOffset < 0 || array.byteLength < byteOffset) {
146
+ throw new RangeError("offset is outside of buffer bounds");
147
+ }
148
+ if (array.byteLength < byteOffset + (length2 || 0)) {
149
+ throw new RangeError("length is outside of buffer bounds");
150
+ }
151
+ super(new Uint8Array(array, byteOffset, length2));
152
+ } else {
153
+ const array = value;
154
+ const length2 = array.length < 0 ? 0 : Buffer._checked(array.length) | 0;
155
+ super(new Uint8Array(length2));
156
+ for (let i = 0; i < length2; i++) {
157
+ this[i] = array[i] & 255;
158
+ }
159
+ }
160
+ } else if (value == null) {
161
+ throw new TypeError(
162
+ "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value
163
+ );
164
+ } else if (Buffer._isInstance(value, ArrayBuffer) || value && Buffer._isInstance(value.buffer, ArrayBuffer)) {
165
+ const array = value;
166
+ const byteOffset = encodingOrOffset;
167
+ if (byteOffset < 0 || array.byteLength < byteOffset) {
168
+ throw new RangeError("offset is outside of buffer bounds");
169
+ }
170
+ if (array.byteLength < byteOffset + (length || 0)) {
171
+ throw new RangeError("length is outside of buffer bounds");
172
+ }
173
+ super(new Uint8Array(array, byteOffset, length));
174
+ } else if (Array.isArray(value)) {
175
+ const array = value;
176
+ const length2 = array.length < 0 ? 0 : Buffer._checked(array.length) | 0;
177
+ super(new Uint8Array(length2));
178
+ for (let i = 0; i < length2; i++) {
179
+ this[i] = array[i] & 255;
180
+ }
181
+ } else {
182
+ throw new TypeError("Unable to determine the correct way to allocate buffer for type " + typeof value);
183
+ }
184
+ }
185
+ /**
186
+ * Return JSON representation of the buffer.
187
+ */
188
+ toJSON() {
189
+ return {
190
+ type: "Buffer",
191
+ data: Array.prototype.slice.call(this)
192
+ };
193
+ }
194
+ /**
195
+ * Writes `string` to the buffer at `offset` according to the character encoding in `encoding`. The `length`
196
+ * parameter is the number of bytes to write. If the buffer does not contain enough space to fit the entire string,
197
+ * only part of `string` will be written. However, partially encoded characters will not be written.
198
+ *
199
+ * @param string String to write to `buf`.
200
+ * @param offset Number of bytes to skip before starting to write `string`. Default: `0`.
201
+ * @param length Maximum number of bytes to write: Default: `buf.length - offset`.
202
+ * @param encoding The character encoding of `string`. Default: `utf8`.
203
+ */
204
+ write(string, offset, length, encoding) {
205
+ if (typeof offset === "undefined") {
206
+ encoding = "utf8";
207
+ length = this.length;
208
+ offset = 0;
209
+ } else if (typeof length === "undefined" && typeof offset === "string") {
210
+ encoding = offset;
211
+ length = this.length;
212
+ offset = 0;
213
+ } else if (typeof offset === "number" && isFinite(offset)) {
214
+ offset = offset >>> 0;
215
+ if (typeof length === "number" && isFinite(length)) {
216
+ length = length >>> 0;
217
+ encoding ?? (encoding = "utf8");
218
+ } else if (typeof length === "string") {
219
+ encoding = length;
220
+ length = void 0;
221
+ }
222
+ } else {
223
+ throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");
224
+ }
225
+ const remaining = this.length - offset;
226
+ if (typeof length === "undefined" || length > remaining) {
227
+ length = remaining;
228
+ }
229
+ if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
230
+ throw new RangeError("Attempt to write outside buffer bounds");
231
+ }
232
+ encoding || (encoding = "utf8");
233
+ switch (Buffer._getEncoding(encoding)) {
234
+ case "hex":
235
+ return Buffer._hexWrite(this, string, offset, length);
236
+ case "utf8":
237
+ return Buffer._utf8Write(this, string, offset, length);
238
+ case "ascii":
239
+ case "latin1":
240
+ case "binary":
241
+ return Buffer._asciiWrite(this, string, offset, length);
242
+ case "ucs2":
243
+ case "utf16le":
244
+ return Buffer._ucs2Write(this, string, offset, length);
245
+ case "base64":
246
+ return Buffer._base64Write(this, string, offset, length);
247
+ }
248
+ }
249
+ /**
250
+ * Decodes the buffer to a string according to the specified character encoding.
251
+ * Passing `start` and `end` will decode only a subset of the buffer.
252
+ *
253
+ * Note that if the encoding is `utf8` and a byte sequence in the input is not valid UTF-8, then each invalid byte
254
+ * will be replaced with `U+FFFD`.
255
+ *
256
+ * @param encoding
257
+ * @param start
258
+ * @param end
259
+ */
260
+ toString(encoding, start, end) {
261
+ const length = this.length;
262
+ if (length === 0) {
263
+ return "";
264
+ }
265
+ if (arguments.length === 0) {
266
+ return Buffer._utf8Slice(this, 0, length);
267
+ }
268
+ if (typeof start === "undefined" || start < 0) {
269
+ start = 0;
270
+ }
271
+ if (start > this.length) {
272
+ return "";
273
+ }
274
+ if (typeof end === "undefined" || end > this.length) {
275
+ end = this.length;
276
+ }
277
+ if (end <= 0) {
278
+ return "";
279
+ }
280
+ end >>>= 0;
281
+ start >>>= 0;
282
+ if (end <= start) {
283
+ return "";
284
+ }
285
+ if (!encoding) {
286
+ encoding = "utf8";
287
+ }
288
+ switch (Buffer._getEncoding(encoding)) {
289
+ case "hex":
290
+ return Buffer._hexSlice(this, start, end);
291
+ case "utf8":
292
+ return Buffer._utf8Slice(this, start, end);
293
+ case "ascii":
294
+ return Buffer._asciiSlice(this, start, end);
295
+ case "latin1":
296
+ case "binary":
297
+ return Buffer._latin1Slice(this, start, end);
298
+ case "ucs2":
299
+ case "utf16le":
300
+ return Buffer._utf16leSlice(this, start, end);
301
+ case "base64":
302
+ return Buffer._base64Slice(this, start, end);
303
+ }
304
+ }
305
+ /**
306
+ * Returns true if this buffer's is equal to the provided buffer, meaning they share the same exact data.
307
+ *
308
+ * @param otherBuffer
309
+ */
310
+ equals(otherBuffer) {
311
+ if (!Buffer.isBuffer(otherBuffer)) {
312
+ throw new TypeError("Argument must be a Buffer");
313
+ }
314
+ if (this === otherBuffer) {
315
+ return true;
316
+ }
317
+ return Buffer.compare(this, otherBuffer) === 0;
318
+ }
319
+ /**
320
+ * Compares the buffer with `otherBuffer` and returns a number indicating whether the buffer comes before, after,
321
+ * or is the same as `otherBuffer` in sort order. Comparison is based on the actual sequence of bytes in each
322
+ * buffer.
323
+ *
324
+ * - `0` is returned if `otherBuffer` is the same as this buffer.
325
+ * - `1` is returned if `otherBuffer` should come before this buffer when sorted.
326
+ * - `-1` is returned if `otherBuffer` should come after this buffer when sorted.
327
+ *
328
+ * @param otherBuffer The buffer to compare to.
329
+ * @param targetStart The offset within `otherBuffer` at which to begin comparison.
330
+ * @param targetEnd The offset within `otherBuffer` at which to end comparison (exclusive).
331
+ * @param sourceStart The offset within this buffer at which to begin comparison.
332
+ * @param sourceEnd The offset within this buffer at which to end the comparison (exclusive).
333
+ */
334
+ compare(otherBuffer, targetStart, targetEnd, sourceStart, sourceEnd) {
335
+ if (Buffer._isInstance(otherBuffer, Uint8Array)) {
336
+ otherBuffer = Buffer.from(otherBuffer, otherBuffer.byteOffset, otherBuffer.byteLength);
337
+ }
338
+ if (!Buffer.isBuffer(otherBuffer)) {
339
+ throw new TypeError("Argument must be a Buffer or Uint8Array");
340
+ }
341
+ targetStart ?? (targetStart = 0);
342
+ targetEnd ?? (targetEnd = otherBuffer ? otherBuffer.length : 0);
343
+ sourceStart ?? (sourceStart = 0);
344
+ sourceEnd ?? (sourceEnd = this.length);
345
+ if (targetStart < 0 || targetEnd > otherBuffer.length || sourceStart < 0 || sourceEnd > this.length) {
346
+ throw new RangeError("Out of range index");
347
+ }
348
+ if (sourceStart >= sourceEnd && targetStart >= targetEnd) {
349
+ return 0;
350
+ }
351
+ if (sourceStart >= sourceEnd) {
352
+ return -1;
353
+ }
354
+ if (targetStart >= targetEnd) {
355
+ return 1;
356
+ }
357
+ targetStart >>>= 0;
358
+ targetEnd >>>= 0;
359
+ sourceStart >>>= 0;
360
+ sourceEnd >>>= 0;
361
+ if (this === otherBuffer) {
362
+ return 0;
363
+ }
364
+ let x = sourceEnd - sourceStart;
365
+ let y = targetEnd - targetStart;
366
+ const len = Math.min(x, y);
367
+ const thisCopy = this.slice(sourceStart, sourceEnd);
368
+ const targetCopy = otherBuffer.slice(targetStart, targetEnd);
369
+ for (let i = 0; i < len; ++i) {
370
+ if (thisCopy[i] !== targetCopy[i]) {
371
+ x = thisCopy[i];
372
+ y = targetCopy[i];
373
+ break;
374
+ }
375
+ }
376
+ if (x < y)
377
+ return -1;
378
+ if (y < x)
379
+ return 1;
380
+ return 0;
381
+ }
382
+ /**
383
+ * Copies data from a region of this buffer to a region in `targetBuffer`, even if the `targetBuffer` memory
384
+ * region overlaps with this buffer.
385
+ *
386
+ * @param targetBuffer The target buffer to copy into.
387
+ * @param targetStart The offset within `targetBuffer` at which to begin writing.
388
+ * @param sourceStart The offset within this buffer at which to begin copying.
389
+ * @param sourceEnd The offset within this buffer at which to end copying (exclusive).
390
+ */
391
+ copy(targetBuffer, targetStart, sourceStart, sourceEnd) {
392
+ if (!Buffer.isBuffer(targetBuffer))
393
+ throw new TypeError("argument should be a Buffer");
394
+ if (!sourceStart)
395
+ sourceStart = 0;
396
+ if (!targetStart)
397
+ targetStart = 0;
398
+ if (!sourceEnd && sourceEnd !== 0)
399
+ sourceEnd = this.length;
400
+ if (targetStart >= targetBuffer.length)
401
+ targetStart = targetBuffer.length;
402
+ if (!targetStart)
403
+ targetStart = 0;
404
+ if (sourceEnd > 0 && sourceEnd < sourceStart)
405
+ sourceEnd = sourceStart;
406
+ if (sourceEnd === sourceStart)
407
+ return 0;
408
+ if (targetBuffer.length === 0 || this.length === 0)
409
+ return 0;
410
+ if (targetStart < 0) {
411
+ throw new RangeError("targetStart out of bounds");
412
+ }
413
+ if (sourceStart < 0 || sourceStart >= this.length)
414
+ throw new RangeError("Index out of range");
415
+ if (sourceEnd < 0)
416
+ throw new RangeError("sourceEnd out of bounds");
417
+ if (sourceEnd > this.length)
418
+ sourceEnd = this.length;
419
+ if (targetBuffer.length - targetStart < sourceEnd - sourceStart) {
420
+ sourceEnd = targetBuffer.length - targetStart + sourceStart;
421
+ }
422
+ const len = sourceEnd - sourceStart;
423
+ if (this === targetBuffer && typeof Uint8Array.prototype.copyWithin === "function") {
424
+ this.copyWithin(targetStart, sourceStart, sourceEnd);
425
+ } else {
426
+ Uint8Array.prototype.set.call(targetBuffer, this.subarray(sourceStart, sourceEnd), targetStart);
427
+ }
428
+ return len;
429
+ }
430
+ /**
431
+ * Returns a new `Buffer` that references the same memory as the original, but offset and cropped by the `start`
432
+ * and `end` indices. This is the same behavior as `buf.subarray()`.
433
+ *
434
+ * This method is not compatible with the `Uint8Array.prototype.slice()`, which is a superclass of Buffer. To copy
435
+ * the slice, use `Uint8Array.prototype.slice()`.
436
+ *
437
+ * @param start
438
+ * @param end
439
+ */
440
+ slice(start, end) {
441
+ if (!start) {
442
+ start = 0;
443
+ }
444
+ const len = this.length;
445
+ start = ~~start;
446
+ end = end === void 0 ? len : ~~end;
447
+ if (start < 0) {
448
+ start += len;
449
+ if (start < 0) {
450
+ start = 0;
451
+ }
452
+ } else if (start > len) {
453
+ start = len;
454
+ }
455
+ if (end < 0) {
456
+ end += len;
457
+ if (end < 0) {
458
+ end = 0;
459
+ }
460
+ } else if (end > len) {
461
+ end = len;
462
+ }
463
+ if (end < start) {
464
+ end = start;
465
+ }
466
+ const newBuf = this.subarray(start, end);
467
+ Object.setPrototypeOf(newBuf, Buffer.prototype);
468
+ return newBuf;
469
+ }
470
+ /**
471
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset` as little-endian. Supports up to 48 bits
472
+ * of accuracy. Behavior is undefined when value is anything other than an unsigned integer.
473
+ *
474
+ * @param value Number to write.
475
+ * @param offset Number of bytes to skip before starting to write.
476
+ * @param byteLength Number of bytes to write, between 0 and 6.
477
+ * @param noAssert
478
+ * @returns `offset` plus the number of bytes written.
479
+ */
480
+ writeUIntLE(value, offset, byteLength, noAssert) {
481
+ value = +value;
482
+ offset = offset >>> 0;
483
+ byteLength = byteLength >>> 0;
484
+ if (!noAssert) {
485
+ const maxBytes = Math.pow(2, 8 * byteLength) - 1;
486
+ Buffer._checkInt(this, value, offset, byteLength, maxBytes, 0);
487
+ }
488
+ let mul = 1;
489
+ let i = 0;
490
+ this[offset] = value & 255;
491
+ while (++i < byteLength && (mul *= 256)) {
492
+ this[offset + i] = value / mul & 255;
493
+ }
494
+ return offset + byteLength;
495
+ }
496
+ /**
497
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset` as big-endian. Supports up to 48 bits of
498
+ * accuracy. Behavior is undefined when `value` is anything other than an unsigned integer.
499
+ *
500
+ * @param value Number to write.
501
+ * @param offset Number of bytes to skip before starting to write.
502
+ * @param byteLength Number of bytes to write, between 0 and 6.
503
+ * @param noAssert
504
+ * @returns `offset` plus the number of bytes written.
505
+ */
506
+ writeUIntBE(value, offset, byteLength, noAssert) {
507
+ value = +value;
508
+ offset = offset >>> 0;
509
+ byteLength = byteLength >>> 0;
510
+ if (!noAssert) {
511
+ const maxBytes = Math.pow(2, 8 * byteLength) - 1;
512
+ Buffer._checkInt(this, value, offset, byteLength, maxBytes, 0);
513
+ }
514
+ let i = byteLength - 1;
515
+ let mul = 1;
516
+ this[offset + i] = value & 255;
517
+ while (--i >= 0 && (mul *= 256)) {
518
+ this[offset + i] = value / mul & 255;
519
+ }
520
+ return offset + byteLength;
521
+ }
522
+ /**
523
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset` as little-endian. Supports up to 48 bits
524
+ * of accuracy. Behavior is undefined when `value` is anything other than a signed integer.
525
+ *
526
+ * @param value Number to write.
527
+ * @param offset Number of bytes to skip before starting to write.
528
+ * @param byteLength Number of bytes to write, between 0 and 6.
529
+ * @param noAssert
530
+ * @returns `offset` plus the number of bytes written.
531
+ */
532
+ writeIntLE(value, offset, byteLength, noAssert) {
533
+ value = +value;
534
+ offset = offset >>> 0;
535
+ if (!noAssert) {
536
+ const limit = Math.pow(2, 8 * byteLength - 1);
537
+ Buffer._checkInt(this, value, offset, byteLength, limit - 1, -limit);
538
+ }
539
+ let i = 0;
540
+ let mul = 1;
541
+ let sub = 0;
542
+ this[offset] = value & 255;
543
+ while (++i < byteLength && (mul *= 256)) {
544
+ if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
545
+ sub = 1;
546
+ }
547
+ this[offset + i] = (value / mul >> 0) - sub & 255;
548
+ }
549
+ return offset + byteLength;
550
+ }
551
+ /**
552
+ * Writes `byteLength` bytes of `value` to `buf` at the specified `offset` as big-endian. Supports up to 48 bits
553
+ * of accuracy. Behavior is undefined when `value` is anything other than a signed integer.
554
+ *
555
+ * @param value Number to write.
556
+ * @param offset Number of bytes to skip before starting to write.
557
+ * @param byteLength Number of bytes to write, between 0 and 6.
558
+ * @param noAssert
559
+ * @returns `offset` plus the number of bytes written.
560
+ */
561
+ writeIntBE(value, offset, byteLength, noAssert) {
562
+ value = +value;
563
+ offset = offset >>> 0;
564
+ if (!noAssert) {
565
+ const limit = Math.pow(2, 8 * byteLength - 1);
566
+ Buffer._checkInt(this, value, offset, byteLength, limit - 1, -limit);
567
+ }
568
+ let i = byteLength - 1;
569
+ let mul = 1;
570
+ let sub = 0;
571
+ this[offset + i] = value & 255;
572
+ while (--i >= 0 && (mul *= 256)) {
573
+ if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
574
+ sub = 1;
575
+ }
576
+ this[offset + i] = (value / mul >> 0) - sub & 255;
577
+ }
578
+ return offset + byteLength;
579
+ }
580
+ /**
581
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an
582
+ * unsigned, little-endian integer supporting up to 48 bits of accuracy.
583
+ *
584
+ * @param offset Number of bytes to skip before starting to read.
585
+ * @param byteLength Number of bytes to read, between 0 and 6.
586
+ * @param noAssert
587
+ */
588
+ readUIntLE(offset, byteLength, noAssert) {
589
+ offset = offset >>> 0;
590
+ byteLength = byteLength >>> 0;
591
+ if (!noAssert) {
592
+ Buffer._checkOffset(offset, byteLength, this.length);
593
+ }
594
+ let val = this[offset];
595
+ let mul = 1;
596
+ let i = 0;
597
+ while (++i < byteLength && (mul *= 256)) {
598
+ val += this[offset + i] * mul;
599
+ }
600
+ return val;
601
+ }
602
+ /**
603
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an
604
+ * unsigned, big-endian integer supporting up to 48 bits of accuracy.
605
+ *
606
+ * @param offset Number of bytes to skip before starting to read.
607
+ * @param byteLength Number of bytes to read, between 0 and 6.
608
+ * @param noAssert
609
+ */
610
+ readUIntBE(offset, byteLength, noAssert) {
611
+ offset = offset >>> 0;
612
+ byteLength = byteLength >>> 0;
613
+ if (!noAssert) {
614
+ Buffer._checkOffset(offset, byteLength, this.length);
615
+ }
616
+ let val = this[offset + --byteLength];
617
+ let mul = 1;
618
+ while (byteLength > 0 && (mul *= 256)) {
619
+ val += this[offset + --byteLength] * mul;
620
+ }
621
+ return val;
622
+ }
623
+ /**
624
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a
625
+ * little-endian, two's complement signed value supporting up to 48 bits of accuracy.
626
+ *
627
+ * @param offset Number of bytes to skip before starting to read.
628
+ * @param byteLength Number of bytes to read, between 0 and 6.
629
+ * @param noAssert
630
+ */
631
+ readIntLE(offset, byteLength, noAssert) {
632
+ offset = offset >>> 0;
633
+ byteLength = byteLength >>> 0;
634
+ if (!noAssert) {
635
+ Buffer._checkOffset(offset, byteLength, this.length);
636
+ }
637
+ let val = this[offset];
638
+ let mul = 1;
639
+ let i = 0;
640
+ while (++i < byteLength && (mul *= 256)) {
641
+ val += this[offset + i] * mul;
642
+ }
643
+ mul *= 128;
644
+ if (val >= mul) {
645
+ val -= Math.pow(2, 8 * byteLength);
646
+ }
647
+ return val;
648
+ }
649
+ /**
650
+ * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a
651
+ * big-endian, two's complement signed value supporting up to 48 bits of accuracy.
652
+ *
653
+ * @param offset Number of bytes to skip before starting to read.
654
+ * @param byteLength Number of bytes to read, between 0 and 6.
655
+ * @param noAssert
656
+ */
657
+ readIntBE(offset, byteLength, noAssert) {
658
+ offset = offset >>> 0;
659
+ byteLength = byteLength >>> 0;
660
+ if (!noAssert) {
661
+ Buffer._checkOffset(offset, byteLength, this.length);
662
+ }
663
+ let i = byteLength;
664
+ let mul = 1;
665
+ let val = this[offset + --i];
666
+ while (i > 0 && (mul *= 256)) {
667
+ val += this[offset + --i] * mul;
668
+ }
669
+ mul *= 128;
670
+ if (val >= mul) {
671
+ val -= Math.pow(2, 8 * byteLength);
672
+ }
673
+ return val;
674
+ }
675
+ /**
676
+ * Reads an unsigned 8-bit integer from `buf` at the specified `offset`.
677
+ *
678
+ * @param offset Number of bytes to skip before starting to read.
679
+ * @param noAssert
680
+ */
681
+ readUInt8(offset, noAssert) {
682
+ offset = offset >>> 0;
683
+ if (!noAssert) {
684
+ Buffer._checkOffset(offset, 1, this.length);
685
+ }
686
+ return this[offset];
687
+ }
688
+ /**
689
+ * Reads an unsigned, little-endian 16-bit integer from `buf` at the specified `offset`.
690
+ *
691
+ * @param offset Number of bytes to skip before starting to read.
692
+ * @param noAssert
693
+ */
694
+ readUInt16LE(offset, noAssert) {
695
+ offset = offset >>> 0;
696
+ if (!noAssert) {
697
+ Buffer._checkOffset(offset, 2, this.length);
698
+ }
699
+ return this[offset] | this[offset + 1] << 8;
700
+ }
701
+ /**
702
+ * Reads an unsigned, big-endian 16-bit integer from `buf` at the specified `offset`.
703
+ *
704
+ * @param offset Number of bytes to skip before starting to read.
705
+ * @param noAssert
706
+ */
707
+ readUInt16BE(offset, noAssert) {
708
+ offset = offset >>> 0;
709
+ if (!noAssert) {
710
+ Buffer._checkOffset(offset, 2, this.length);
711
+ }
712
+ return this[offset] << 8 | this[offset + 1];
713
+ }
714
+ /**
715
+ * Reads an unsigned, little-endian 32-bit integer from `buf` at the specified `offset`.
716
+ *
717
+ * @param offset Number of bytes to skip before starting to read.
718
+ * @param noAssert
719
+ */
720
+ readUInt32LE(offset, noAssert) {
721
+ offset = offset >>> 0;
722
+ if (!noAssert) {
723
+ Buffer._checkOffset(offset, 4, this.length);
724
+ }
725
+ return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;
726
+ }
727
+ /**
728
+ * Reads an unsigned, big-endian 32-bit integer from `buf` at the specified `offset`.
729
+ *
730
+ * @param offset Number of bytes to skip before starting to read.
731
+ * @param noAssert
732
+ */
733
+ readUInt32BE(offset, noAssert) {
734
+ offset = offset >>> 0;
735
+ if (!noAssert) {
736
+ Buffer._checkOffset(offset, 4, this.length);
737
+ }
738
+ return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
739
+ }
740
+ /**
741
+ * Reads a signed 8-bit integer from `buf` at the specified `offset`. Integers read from a `Buffer` are interpreted
742
+ * as two's complement signed values.
743
+ *
744
+ * @param offset Number of bytes to skip before starting to read.
745
+ * @param noAssert
746
+ */
747
+ readInt8(offset, noAssert) {
748
+ offset = offset >>> 0;
749
+ if (!noAssert) {
750
+ Buffer._checkOffset(offset, 1, this.length);
751
+ }
752
+ if (!(this[offset] & 128)) {
753
+ return this[offset];
754
+ }
755
+ return (255 - this[offset] + 1) * -1;
756
+ }
757
+ /**
758
+ * Reads a signed, little-endian 16-bit integer from `buf` at the specified `offset`. Integers read from a `Buffer`
759
+ * are interpreted as two's complement signed values.
760
+ *
761
+ * @param offset Number of bytes to skip before starting to read.
762
+ * @param noAssert
763
+ */
764
+ readInt16LE(offset, noAssert) {
765
+ offset = offset >>> 0;
766
+ if (!noAssert) {
767
+ Buffer._checkOffset(offset, 2, this.length);
768
+ }
769
+ const val = this[offset] | this[offset + 1] << 8;
770
+ return val & 32768 ? val | 4294901760 : val;
771
+ }
772
+ /**
773
+ * Reads a signed, big-endian 16-bit integer from `buf` at the specified `offset`. Integers read from a `Buffer`
774
+ * are interpreted as two's complement signed values.
775
+ *
776
+ * @param offset Number of bytes to skip before starting to read.
777
+ * @param noAssert
778
+ */
779
+ readInt16BE(offset, noAssert) {
780
+ offset = offset >>> 0;
781
+ if (!noAssert) {
782
+ Buffer._checkOffset(offset, 2, this.length);
783
+ }
784
+ const val = this[offset + 1] | this[offset] << 8;
785
+ return val & 32768 ? val | 4294901760 : val;
786
+ }
787
+ /**
788
+ * Reads a signed, little-endian 32-bit integer from `buf` at the specified `offset`. Integers read from a `Buffer`
789
+ * are interpreted as two's complement signed values.
790
+ *
791
+ * @param offset Number of bytes to skip before starting to read.
792
+ * @param noAssert
793
+ */
794
+ readInt32LE(offset, noAssert) {
795
+ offset = offset >>> 0;
796
+ if (!noAssert) {
797
+ Buffer._checkOffset(offset, 4, this.length);
798
+ }
799
+ return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
800
+ }
801
+ /**
802
+ * Reads a signed, big-endian 32-bit integer from `buf` at the specified `offset`. Integers read from a `Buffer`
803
+ * are interpreted as two's complement signed values.
804
+ *
805
+ * @param offset Number of bytes to skip before starting to read.
806
+ * @param noAssert
807
+ */
808
+ readInt32BE(offset, noAssert) {
809
+ offset = offset >>> 0;
810
+ if (!noAssert) {
811
+ Buffer._checkOffset(offset, 4, this.length);
812
+ }
813
+ return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
814
+ }
815
+ /**
816
+ * Interprets `buf` as an array of unsigned 16-bit integers and swaps the byte order in-place.
817
+ * Throws a `RangeError` if `buf.length` is not a multiple of 2.
818
+ */
819
+ swap16() {
820
+ const len = this.length;
821
+ if (len % 2 !== 0) {
822
+ throw new RangeError("Buffer size must be a multiple of 16-bits");
823
+ }
824
+ for (let i = 0; i < len; i += 2) {
825
+ this._swap(this, i, i + 1);
826
+ }
827
+ return this;
828
+ }
829
+ /**
830
+ * Interprets `buf` as an array of unsigned 32-bit integers and swaps the byte order in-place.
831
+ * Throws a `RangeError` if `buf.length` is not a multiple of 4.
832
+ */
833
+ swap32() {
834
+ const len = this.length;
835
+ if (len % 4 !== 0) {
836
+ throw new RangeError("Buffer size must be a multiple of 32-bits");
837
+ }
838
+ for (let i = 0; i < len; i += 4) {
839
+ this._swap(this, i, i + 3);
840
+ this._swap(this, i + 1, i + 2);
841
+ }
842
+ return this;
843
+ }
844
+ /**
845
+ * Interprets `buf` as an array of unsigned 64-bit integers and swaps the byte order in-place.
846
+ * Throws a `RangeError` if `buf.length` is not a multiple of 8.
847
+ */
848
+ swap64() {
849
+ const len = this.length;
850
+ if (len % 8 !== 0) {
851
+ throw new RangeError("Buffer size must be a multiple of 64-bits");
852
+ }
853
+ for (let i = 0; i < len; i += 8) {
854
+ this._swap(this, i, i + 7);
855
+ this._swap(this, i + 1, i + 6);
856
+ this._swap(this, i + 2, i + 5);
857
+ this._swap(this, i + 3, i + 4);
858
+ }
859
+ return this;
860
+ }
861
+ /**
862
+ * Swaps two octets.
863
+ *
864
+ * @param b
865
+ * @param n
866
+ * @param m
867
+ */
868
+ _swap(b, n, m) {
869
+ const i = b[n];
870
+ b[n] = b[m];
871
+ b[m] = i;
872
+ }
873
+ /**
874
+ * Writes `value` to `buf` at the specified `offset`. The `value` must be a valid unsigned 8-bit integer.
875
+ * Behavior is undefined when `value` is anything other than an unsigned 8-bit integer.
876
+ *
877
+ * @param value Number to write.
878
+ * @param offset Number of bytes to skip before starting to write.
879
+ * @param noAssert
880
+ * @returns `offset` plus the number of bytes written.
881
+ */
882
+ writeUInt8(value, offset, noAssert) {
883
+ value = +value;
884
+ offset = offset >>> 0;
885
+ if (!noAssert) {
886
+ Buffer._checkInt(this, value, offset, 1, 255, 0);
887
+ }
888
+ this[offset] = value & 255;
889
+ return offset + 1;
890
+ }
891
+ /**
892
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 16-bit
893
+ * integer. Behavior is undefined when `value` is anything other than an unsigned 16-bit integer.
894
+ *
895
+ * @param value Number to write.
896
+ * @param offset Number of bytes to skip before starting to write.
897
+ * @param noAssert
898
+ * @returns `offset` plus the number of bytes written.
899
+ */
900
+ writeUInt16LE(value, offset, noAssert) {
901
+ value = +value;
902
+ offset = offset >>> 0;
903
+ if (!noAssert) {
904
+ Buffer._checkInt(this, value, offset, 2, 65535, 0);
905
+ }
906
+ this[offset] = value & 255;
907
+ this[offset + 1] = value >>> 8;
908
+ return offset + 2;
909
+ }
910
+ /**
911
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 16-bit
912
+ * integer. Behavior is undefined when `value` is anything other than an unsigned 16-bit integer.
913
+ *
914
+ * @param value Number to write.
915
+ * @param offset Number of bytes to skip before starting to write.
916
+ * @param noAssert
917
+ * @returns `offset` plus the number of bytes written.
918
+ */
919
+ writeUInt16BE(value, offset, noAssert) {
920
+ value = +value;
921
+ offset = offset >>> 0;
922
+ if (!noAssert) {
923
+ Buffer._checkInt(this, value, offset, 2, 65535, 0);
924
+ }
925
+ this[offset] = value >>> 8;
926
+ this[offset + 1] = value & 255;
927
+ return offset + 2;
928
+ }
929
+ /**
930
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 32-bit
931
+ * integer. Behavior is undefined when `value` is anything other than an unsigned 32-bit integer.
932
+ *
933
+ * @param value Number to write.
934
+ * @param offset Number of bytes to skip before starting to write.
935
+ * @param noAssert
936
+ * @returns `offset` plus the number of bytes written.
937
+ */
938
+ writeUInt32LE(value, offset, noAssert) {
939
+ value = +value;
940
+ offset = offset >>> 0;
941
+ if (!noAssert) {
942
+ Buffer._checkInt(this, value, offset, 4, 4294967295, 0);
943
+ }
944
+ this[offset + 3] = value >>> 24;
945
+ this[offset + 2] = value >>> 16;
946
+ this[offset + 1] = value >>> 8;
947
+ this[offset] = value & 255;
948
+ return offset + 4;
949
+ }
950
+ /**
951
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 32-bit
952
+ * integer. Behavior is undefined when `value` is anything other than an unsigned 32-bit integer.
953
+ *
954
+ * @param value Number to write.
955
+ * @param offset Number of bytes to skip before starting to write.
956
+ * @param noAssert
957
+ * @returns `offset` plus the number of bytes written.
958
+ */
959
+ writeUInt32BE(value, offset, noAssert) {
960
+ value = +value;
961
+ offset = offset >>> 0;
962
+ if (!noAssert) {
963
+ Buffer._checkInt(this, value, offset, 4, 4294967295, 0);
964
+ }
965
+ this[offset] = value >>> 24;
966
+ this[offset + 1] = value >>> 16;
967
+ this[offset + 2] = value >>> 8;
968
+ this[offset + 3] = value & 255;
969
+ return offset + 4;
970
+ }
971
+ /**
972
+ * Writes `value` to `buf` at the specified `offset`. The `value` must be a valid signed 8-bit integer.
973
+ * Behavior is undefined when `value` is anything other than a signed 8-bit integer.
974
+ *
975
+ * @param value Number to write.
976
+ * @param offset Number of bytes to skip before starting to write.
977
+ * @param noAssert
978
+ * @returns `offset` plus the number of bytes written.
979
+ */
980
+ writeInt8(value, offset, noAssert) {
981
+ value = +value;
982
+ offset = offset >>> 0;
983
+ if (!noAssert) {
984
+ Buffer._checkInt(this, value, offset, 1, 127, -128);
985
+ }
986
+ if (value < 0) {
987
+ value = 255 + value + 1;
988
+ }
989
+ this[offset] = value & 255;
990
+ return offset + 1;
991
+ }
992
+ /**
993
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid signed 16-bit
994
+ * integer. Behavior is undefined when `value` is anything other than a signed 16-bit integer.
995
+ *
996
+ * @param value Number to write.
997
+ * @param offset Number of bytes to skip before starting to write.
998
+ * @param noAssert
999
+ * @returns `offset` plus the number of bytes written.
1000
+ */
1001
+ writeInt16LE(value, offset, noAssert) {
1002
+ value = +value;
1003
+ offset = offset >>> 0;
1004
+ if (!noAssert) {
1005
+ Buffer._checkInt(this, value, offset, 2, 32767, -32768);
1006
+ }
1007
+ this[offset] = value & 255;
1008
+ this[offset + 1] = value >>> 8;
1009
+ return offset + 2;
1010
+ }
1011
+ /**
1012
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid signed 16-bit
1013
+ * integer. Behavior is undefined when `value` is anything other than a signed 16-bit integer.
1014
+ *
1015
+ * @param value Number to write.
1016
+ * @param offset Number of bytes to skip before starting to write.
1017
+ * @param noAssert
1018
+ * @returns `offset` plus the number of bytes written.
1019
+ */
1020
+ writeInt16BE(value, offset, noAssert) {
1021
+ value = +value;
1022
+ offset = offset >>> 0;
1023
+ if (!noAssert) {
1024
+ Buffer._checkInt(this, value, offset, 2, 32767, -32768);
1025
+ }
1026
+ this[offset] = value >>> 8;
1027
+ this[offset + 1] = value & 255;
1028
+ return offset + 2;
1029
+ }
1030
+ /**
1031
+ * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid signed 32-bit
1032
+ * integer. Behavior is undefined when `value` is anything other than a signed 32-bit integer.
1033
+ *
1034
+ * @param value Number to write.
1035
+ * @param offset Number of bytes to skip before starting to write.
1036
+ * @param noAssert
1037
+ * @returns `offset` plus the number of bytes written.
1038
+ */
1039
+ writeInt32LE(value, offset, noAssert) {
1040
+ value = +value;
1041
+ offset = offset >>> 0;
1042
+ if (!noAssert) {
1043
+ Buffer._checkInt(this, value, offset, 4, 2147483647, -2147483648);
1044
+ }
1045
+ this[offset] = value & 255;
1046
+ this[offset + 1] = value >>> 8;
1047
+ this[offset + 2] = value >>> 16;
1048
+ this[offset + 3] = value >>> 24;
1049
+ return offset + 4;
1050
+ }
1051
+ /**
1052
+ * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid signed 32-bit
1053
+ * integer. Behavior is undefined when `value` is anything other than a signed 32-bit integer.
1054
+ *
1055
+ * @param value Number to write.
1056
+ * @param offset Number of bytes to skip before starting to write.
1057
+ * @param noAssert
1058
+ * @returns `offset` plus the number of bytes written.
1059
+ */
1060
+ writeInt32BE(value, offset, noAssert) {
1061
+ value = +value;
1062
+ offset = offset >>> 0;
1063
+ if (!noAssert) {
1064
+ Buffer._checkInt(this, value, offset, 4, 2147483647, -2147483648);
1065
+ }
1066
+ if (value < 0) {
1067
+ value = 4294967295 + value + 1;
1068
+ }
1069
+ this[offset] = value >>> 24;
1070
+ this[offset + 1] = value >>> 16;
1071
+ this[offset + 2] = value >>> 8;
1072
+ this[offset + 3] = value & 255;
1073
+ return offset + 4;
1074
+ }
1075
+ /**
1076
+ * Fills `buf` with the specified `value`. If the `offset` and `end` are not given, the entire `buf` will be
1077
+ * filled. The `value` is coerced to a `uint32` value if it is not a string, `Buffer`, or integer. If the resulting
1078
+ * integer is greater than `255` (decimal), then `buf` will be filled with `value & 255`.
1079
+ *
1080
+ * If the final write of a `fill()` operation falls on a multi-byte character, then only the bytes of that
1081
+ * character that fit into `buf` are written.
1082
+ *
1083
+ * If `value` contains invalid characters, it is truncated; if no valid fill data remains, an exception is thrown.
1084
+ *
1085
+ * @param value
1086
+ * @param encoding
1087
+ */
1088
+ fill(value, offset, end, encoding) {
1089
+ if (typeof value === "string") {
1090
+ if (typeof offset === "string") {
1091
+ encoding = offset;
1092
+ offset = 0;
1093
+ end = this.length;
1094
+ } else if (typeof end === "string") {
1095
+ encoding = end;
1096
+ end = this.length;
1097
+ }
1098
+ if (encoding !== void 0 && typeof encoding !== "string") {
1099
+ throw new TypeError("encoding must be a string");
1100
+ }
1101
+ if (typeof encoding === "string" && !Buffer.isEncoding(encoding)) {
1102
+ throw new TypeError("Unknown encoding: " + encoding);
1103
+ }
1104
+ if (value.length === 1) {
1105
+ const code = value.charCodeAt(0);
1106
+ if (encoding === "utf8" && code < 128) {
1107
+ value = code;
1108
+ }
1109
+ }
1110
+ } else if (typeof value === "number") {
1111
+ value = value & 255;
1112
+ } else if (typeof value === "boolean") {
1113
+ value = Number(value);
1114
+ }
1115
+ offset ?? (offset = 0);
1116
+ end ?? (end = this.length);
1117
+ if (offset < 0 || this.length < offset || this.length < end) {
1118
+ throw new RangeError("Out of range index");
1119
+ }
1120
+ if (end <= offset) {
1121
+ return this;
1122
+ }
1123
+ offset = offset >>> 0;
1124
+ end = end === void 0 ? this.length : end >>> 0;
1125
+ value || (value = 0);
1126
+ let i;
1127
+ if (typeof value === "number") {
1128
+ for (i = offset; i < end; ++i) {
1129
+ this[i] = value;
1130
+ }
1131
+ } else {
1132
+ const bytes = Buffer.isBuffer(value) ? value : Buffer.from(value, encoding);
1133
+ const len = bytes.length;
1134
+ if (len === 0) {
1135
+ throw new TypeError('The value "' + value + '" is invalid for argument "value"');
1136
+ }
1137
+ for (i = 0; i < end - offset; ++i) {
1138
+ this[i + offset] = bytes[i % len];
1139
+ }
1140
+ }
1141
+ return this;
1142
+ }
1143
+ /**
1144
+ * Returns the index of the specified value.
1145
+ *
1146
+ * If `value` is:
1147
+ * - a string, `value` is interpreted according to the character encoding in `encoding`.
1148
+ * - a `Buffer` or `Uint8Array`, `value` will be used in its entirety. To compare a partial Buffer, use `slice()`.
1149
+ * - a number, `value` will be interpreted as an unsigned 8-bit integer value between `0` and `255`.
1150
+ *
1151
+ * Any other types will throw a `TypeError`.
1152
+ *
1153
+ * @param value What to search for.
1154
+ * @param byteOffset Where to begin searching in `buf`. If negative, then calculated from the end.
1155
+ * @param encoding If `value` is a string, this is the encoding used to search.
1156
+ * @returns The index of the first occurrence of `value` in `buf`, or `-1` if not found.
1157
+ */
1158
+ indexOf(value, byteOffset, encoding) {
1159
+ return this._bidirectionalIndexOf(this, value, byteOffset, encoding, true);
1160
+ }
1161
+ /**
1162
+ * Gets the last index of the specified value.
1163
+ *
1164
+ * @see indexOf()
1165
+ * @param value
1166
+ * @param byteOffset
1167
+ * @param encoding
1168
+ */
1169
+ lastIndexOf(value, byteOffset, encoding) {
1170
+ return this._bidirectionalIndexOf(this, value, byteOffset, encoding, false);
1171
+ }
1172
+ _bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
1173
+ if (buffer.length === 0) {
1174
+ return -1;
1175
+ }
1176
+ if (typeof byteOffset === "string") {
1177
+ encoding = byteOffset;
1178
+ byteOffset = 0;
1179
+ } else if (typeof byteOffset === "undefined") {
1180
+ byteOffset = 0;
1181
+ } else if (byteOffset > 2147483647) {
1182
+ byteOffset = 2147483647;
1183
+ } else if (byteOffset < -2147483648) {
1184
+ byteOffset = -2147483648;
1185
+ }
1186
+ byteOffset = +byteOffset;
1187
+ if (byteOffset !== byteOffset) {
1188
+ byteOffset = dir ? 0 : buffer.length - 1;
1189
+ }
1190
+ if (byteOffset < 0) {
1191
+ byteOffset = buffer.length + byteOffset;
1192
+ }
1193
+ if (byteOffset >= buffer.length) {
1194
+ if (dir) {
1195
+ return -1;
1196
+ } else {
1197
+ byteOffset = buffer.length - 1;
1198
+ }
1199
+ } else if (byteOffset < 0) {
1200
+ if (dir) {
1201
+ byteOffset = 0;
1202
+ } else {
1203
+ return -1;
1204
+ }
1205
+ }
1206
+ if (typeof val === "string") {
1207
+ val = Buffer.from(val, encoding);
1208
+ }
1209
+ if (Buffer.isBuffer(val)) {
1210
+ if (val.length === 0) {
1211
+ return -1;
1212
+ }
1213
+ return Buffer._arrayIndexOf(buffer, val, byteOffset, encoding, dir);
1214
+ } else if (typeof val === "number") {
1215
+ val = val & 255;
1216
+ if (typeof Uint8Array.prototype.indexOf === "function") {
1217
+ if (dir) {
1218
+ return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
1219
+ } else {
1220
+ return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
1221
+ }
1222
+ }
1223
+ return Buffer._arrayIndexOf(buffer, Buffer.from([val]), byteOffset, encoding, dir);
1224
+ }
1225
+ throw new TypeError("val must be string, number or Buffer");
1226
+ }
1227
+ /**
1228
+ * Equivalent to `buf.indexOf() !== -1`.
1229
+ *
1230
+ * @param value
1231
+ * @param byteOffset
1232
+ * @param encoding
1233
+ */
1234
+ includes(value, byteOffset, encoding) {
1235
+ return this.indexOf(value, byteOffset, encoding) !== -1;
1236
+ }
1237
+ /**
1238
+ * Creates a new buffer from the given parameters.
1239
+ *
1240
+ * @param data
1241
+ * @param encoding
1242
+ */
1243
+ static from(a, b, c) {
1244
+ return new Buffer(a, b, c);
1245
+ }
1246
+ /**
1247
+ * Returns true if `obj` is a Buffer.
1248
+ *
1249
+ * @param obj
1250
+ */
1251
+ static isBuffer(obj) {
1252
+ return obj != null && obj !== Buffer.prototype && Buffer._isInstance(obj, Buffer);
1253
+ }
1254
+ /**
1255
+ * Returns true if `encoding` is a supported encoding.
1256
+ *
1257
+ * @param encoding
1258
+ */
1259
+ static isEncoding(encoding) {
1260
+ switch (encoding.toLowerCase()) {
1261
+ case "hex":
1262
+ case "utf8":
1263
+ case "ascii":
1264
+ case "binary":
1265
+ case "latin1":
1266
+ case "ucs2":
1267
+ case "utf16le":
1268
+ case "base64":
1269
+ return true;
1270
+ default:
1271
+ return false;
1272
+ }
1273
+ }
1274
+ /**
1275
+ * Gives the actual byte length of a string for an encoding. This is not the same as `string.length` since that
1276
+ * returns the number of characters in the string.
1277
+ *
1278
+ * @param string The string to test.
1279
+ * @param encoding The encoding to use for calculation. Defaults is `utf8`.
1280
+ */
1281
+ static byteLength(string, encoding) {
1282
+ if (Buffer.isBuffer(string)) {
1283
+ return string.length;
1284
+ }
1285
+ if (typeof string !== "string" && (ArrayBuffer.isView(string) || Buffer._isInstance(string, ArrayBuffer))) {
1286
+ return string.byteLength;
1287
+ }
1288
+ if (typeof string !== "string") {
1289
+ throw new TypeError(
1290
+ 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof string
1291
+ );
1292
+ }
1293
+ const len = string.length;
1294
+ const mustMatch = arguments.length > 2 && arguments[2] === true;
1295
+ if (!mustMatch && len === 0) {
1296
+ return 0;
1297
+ }
1298
+ switch (encoding?.toLowerCase()) {
1299
+ case "ascii":
1300
+ case "latin1":
1301
+ case "binary":
1302
+ return len;
1303
+ case "utf8":
1304
+ return Buffer._utf8ToBytes(string).length;
1305
+ case "hex":
1306
+ return len >>> 1;
1307
+ case "ucs2":
1308
+ case "utf16le":
1309
+ return len * 2;
1310
+ case "base64":
1311
+ return Buffer._base64ToBytes(string).length;
1312
+ default:
1313
+ return mustMatch ? -1 : Buffer._utf8ToBytes(string).length;
1314
+ }
1315
+ }
1316
+ /**
1317
+ * Returns a Buffer which is the result of concatenating all the buffers in the list together.
1318
+ *
1319
+ * - If the list has no items, or if the `totalLength` is 0, then it returns a zero-length buffer.
1320
+ * - If the list has exactly one item, then the first item is returned.
1321
+ * - If the list has more than one item, then a new buffer is created.
1322
+ *
1323
+ * It is faster to provide the `totalLength` if it is known. However, it will be calculated if not provided at
1324
+ * a small computational expense.
1325
+ *
1326
+ * @param list An array of Buffer objects to concatenate.
1327
+ * @param totalLength Total length of the buffers when concatenated.
1328
+ */
1329
+ static concat(list, totalLength) {
1330
+ if (!Array.isArray(list)) {
1331
+ throw new TypeError('"list" argument must be an Array of Buffers');
1332
+ }
1333
+ if (list.length === 0) {
1334
+ return Buffer.alloc(0);
1335
+ }
1336
+ let i;
1337
+ if (totalLength === void 0) {
1338
+ totalLength = 0;
1339
+ for (i = 0; i < list.length; ++i) {
1340
+ totalLength += list[i].length;
1341
+ }
1342
+ }
1343
+ const buffer = Buffer.allocUnsafe(totalLength);
1344
+ let pos = 0;
1345
+ for (i = 0; i < list.length; ++i) {
1346
+ let buf = list[i];
1347
+ if (Buffer._isInstance(buf, Uint8Array)) {
1348
+ if (pos + buf.length > buffer.length) {
1349
+ if (!Buffer.isBuffer(buf)) {
1350
+ buf = Buffer.from(buf);
1351
+ }
1352
+ buf.copy(buffer, pos);
1353
+ } else {
1354
+ Uint8Array.prototype.set.call(buffer, buf, pos);
1355
+ }
1356
+ } else if (!Buffer.isBuffer(buf)) {
1357
+ throw new TypeError('"list" argument must be an Array of Buffers');
1358
+ } else {
1359
+ buf.copy(buffer, pos);
1360
+ }
1361
+ pos += buf.length;
1362
+ }
1363
+ return buffer;
1364
+ }
1365
+ /**
1366
+ * The same as `buf1.compare(buf2)`.
1367
+ */
1368
+ static compare(buf1, buf2) {
1369
+ if (Buffer._isInstance(buf1, Uint8Array)) {
1370
+ buf1 = Buffer.from(buf1, buf1.byteOffset, buf1.byteLength);
1371
+ }
1372
+ if (Buffer._isInstance(buf2, Uint8Array)) {
1373
+ buf2 = Buffer.from(buf2, buf2.byteOffset, buf2.byteLength);
1374
+ }
1375
+ if (!Buffer.isBuffer(buf1) || !Buffer.isBuffer(buf2)) {
1376
+ throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');
1377
+ }
1378
+ if (buf1 === buf2) {
1379
+ return 0;
1380
+ }
1381
+ let x = buf1.length;
1382
+ let y = buf2.length;
1383
+ for (let i = 0, len = Math.min(x, y); i < len; ++i) {
1384
+ if (buf1[i] !== buf2[i]) {
1385
+ x = buf1[i];
1386
+ y = buf2[i];
1387
+ break;
1388
+ }
1389
+ }
1390
+ if (x < y) {
1391
+ return -1;
1392
+ }
1393
+ if (y < x) {
1394
+ return 1;
1395
+ }
1396
+ return 0;
1397
+ }
1398
+ /**
1399
+ * Allocates a new buffer of `size` octets.
1400
+ *
1401
+ * @param size The number of octets to allocate.
1402
+ * @param fill If specified, the buffer will be initialized by calling `buf.fill(fill)`, or with zeroes otherwise.
1403
+ * @param encoding The encoding used for the call to `buf.fill()` while initializing.
1404
+ */
1405
+ static alloc(size, fill, encoding) {
1406
+ if (typeof size !== "number") {
1407
+ throw new TypeError('"size" argument must be of type number');
1408
+ } else if (size < 0) {
1409
+ throw new RangeError('The value "' + size + '" is invalid for option "size"');
1410
+ }
1411
+ if (size <= 0) {
1412
+ return new Buffer(size);
1413
+ }
1414
+ if (fill !== void 0) {
1415
+ return typeof encoding === "string" ? new Buffer(size).fill(fill, 0, size, encoding) : new Buffer(size).fill(fill);
1416
+ }
1417
+ return new Buffer(size);
1418
+ }
1419
+ /**
1420
+ * Allocates a new buffer of `size` octets without initializing memory. The contents of the buffer are unknown.
1421
+ *
1422
+ * @param size
1423
+ */
1424
+ static allocUnsafe(size) {
1425
+ if (typeof size !== "number") {
1426
+ throw new TypeError('"size" argument must be of type number');
1427
+ } else if (size < 0) {
1428
+ throw new RangeError('The value "' + size + '" is invalid for option "size"');
1429
+ }
1430
+ return new Buffer(size < 0 ? 0 : Buffer._checked(size) | 0);
1431
+ }
1432
+ /**
1433
+ * Returns true if the given `obj` is an instance of `type`.
1434
+ *
1435
+ * @param obj
1436
+ * @param type
1437
+ */
1438
+ static _isInstance(obj, type) {
1439
+ return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;
1440
+ }
1441
+ static _checked(length) {
1442
+ if (length >= K_MAX_LENGTH) {
1443
+ throw new RangeError(
1444
+ "Attempt to allocate Buffer larger than maximum size: 0x" + K_MAX_LENGTH.toString(16) + " bytes"
1445
+ );
1446
+ }
1447
+ return length | 0;
1448
+ }
1449
+ static _blitBuffer(src, dst, offset, length) {
1450
+ let i;
1451
+ for (i = 0; i < length; ++i) {
1452
+ if (i + offset >= dst.length || i >= src.length) {
1453
+ break;
1454
+ }
1455
+ dst[i + offset] = src[i];
1456
+ }
1457
+ return i;
1458
+ }
1459
+ static _utf8Write(buf, string, offset, length) {
1460
+ return Buffer._blitBuffer(Buffer._utf8ToBytes(string, buf.length - offset), buf, offset, length);
1461
+ }
1462
+ static _asciiWrite(buf, string, offset, length) {
1463
+ return Buffer._blitBuffer(Buffer._asciiToBytes(string), buf, offset, length);
1464
+ }
1465
+ static _base64Write(buf, string, offset, length) {
1466
+ return Buffer._blitBuffer(Buffer._base64ToBytes(string), buf, offset, length);
1467
+ }
1468
+ static _ucs2Write(buf, string, offset, length) {
1469
+ return Buffer._blitBuffer(Buffer._utf16leToBytes(string, buf.length - offset), buf, offset, length);
1470
+ }
1471
+ static _hexWrite(buf, string, offset, length) {
1472
+ offset = Number(offset) || 0;
1473
+ const remaining = buf.length - offset;
1474
+ if (!length) {
1475
+ length = remaining;
1476
+ } else {
1477
+ length = Number(length);
1478
+ if (length > remaining) {
1479
+ length = remaining;
1480
+ }
1481
+ }
1482
+ const strLen = string.length;
1483
+ if (length > strLen / 2) {
1484
+ length = strLen / 2;
1485
+ }
1486
+ let i;
1487
+ for (i = 0; i < length; ++i) {
1488
+ const parsed = parseInt(string.substr(i * 2, 2), 16);
1489
+ if (parsed !== parsed) {
1490
+ return i;
1491
+ }
1492
+ buf[offset + i] = parsed;
1493
+ }
1494
+ return i;
1495
+ }
1496
+ static _utf8ToBytes(string, units) {
1497
+ units = units || Infinity;
1498
+ const length = string.length;
1499
+ const bytes = [];
1500
+ let codePoint;
1501
+ let leadSurrogate = null;
1502
+ for (let i = 0; i < length; ++i) {
1503
+ codePoint = string.charCodeAt(i);
1504
+ if (codePoint > 55295 && codePoint < 57344) {
1505
+ if (!leadSurrogate) {
1506
+ if (codePoint > 56319) {
1507
+ if ((units -= 3) > -1) {
1508
+ bytes.push(239, 191, 189);
1509
+ }
1510
+ continue;
1511
+ } else if (i + 1 === length) {
1512
+ if ((units -= 3) > -1) {
1513
+ bytes.push(239, 191, 189);
1514
+ }
1515
+ continue;
1516
+ }
1517
+ leadSurrogate = codePoint;
1518
+ continue;
1519
+ }
1520
+ if (codePoint < 56320) {
1521
+ if ((units -= 3) > -1) {
1522
+ bytes.push(239, 191, 189);
1523
+ }
1524
+ leadSurrogate = codePoint;
1525
+ continue;
1526
+ }
1527
+ codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;
1528
+ } else if (leadSurrogate) {
1529
+ if ((units -= 3) > -1) {
1530
+ bytes.push(239, 191, 189);
1531
+ }
1532
+ }
1533
+ leadSurrogate = null;
1534
+ if (codePoint < 128) {
1535
+ if ((units -= 1) < 0) {
1536
+ break;
1537
+ }
1538
+ bytes.push(codePoint);
1539
+ } else if (codePoint < 2048) {
1540
+ if ((units -= 2) < 0) {
1541
+ break;
1542
+ }
1543
+ bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);
1544
+ } else if (codePoint < 65536) {
1545
+ if ((units -= 3) < 0) {
1546
+ break;
1547
+ }
1548
+ bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);
1549
+ } else if (codePoint < 1114112) {
1550
+ if ((units -= 4) < 0) {
1551
+ break;
1552
+ }
1553
+ bytes.push(
1554
+ codePoint >> 18 | 240,
1555
+ codePoint >> 12 & 63 | 128,
1556
+ codePoint >> 6 & 63 | 128,
1557
+ codePoint & 63 | 128
1558
+ );
1559
+ } else {
1560
+ throw new Error("Invalid code point");
1561
+ }
1562
+ }
1563
+ return bytes;
1564
+ }
1565
+ static _base64ToBytes(str) {
1566
+ return toByteArray(base64clean(str));
1567
+ }
1568
+ static _asciiToBytes(str) {
1569
+ const byteArray = [];
1570
+ for (let i = 0; i < str.length; ++i) {
1571
+ byteArray.push(str.charCodeAt(i) & 255);
1572
+ }
1573
+ return byteArray;
1574
+ }
1575
+ static _utf16leToBytes(str, units) {
1576
+ let c, hi, lo;
1577
+ const byteArray = [];
1578
+ for (let i = 0; i < str.length; ++i) {
1579
+ if ((units -= 2) < 0)
1580
+ break;
1581
+ c = str.charCodeAt(i);
1582
+ hi = c >> 8;
1583
+ lo = c % 256;
1584
+ byteArray.push(lo);
1585
+ byteArray.push(hi);
1586
+ }
1587
+ return byteArray;
1588
+ }
1589
+ static _hexSlice(buf, start, end) {
1590
+ const len = buf.length;
1591
+ if (!start || start < 0) {
1592
+ start = 0;
1593
+ }
1594
+ if (!end || end < 0 || end > len) {
1595
+ end = len;
1596
+ }
1597
+ let out = "";
1598
+ for (let i = start; i < end; ++i) {
1599
+ out += hexSliceLookupTable[buf[i]];
1600
+ }
1601
+ return out;
1602
+ }
1603
+ static _base64Slice(buf, start, end) {
1604
+ if (start === 0 && end === buf.length) {
1605
+ return fromByteArray(buf);
1606
+ } else {
1607
+ return fromByteArray(buf.slice(start, end));
1608
+ }
1609
+ }
1610
+ static _utf8Slice(buf, start, end) {
1611
+ end = Math.min(buf.length, end);
1612
+ const res = [];
1613
+ let i = start;
1614
+ while (i < end) {
1615
+ const firstByte = buf[i];
1616
+ let codePoint = null;
1617
+ let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;
1618
+ if (i + bytesPerSequence <= end) {
1619
+ let secondByte, thirdByte, fourthByte, tempCodePoint;
1620
+ switch (bytesPerSequence) {
1621
+ case 1:
1622
+ if (firstByte < 128) {
1623
+ codePoint = firstByte;
1624
+ }
1625
+ break;
1626
+ case 2:
1627
+ secondByte = buf[i + 1];
1628
+ if ((secondByte & 192) === 128) {
1629
+ tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;
1630
+ if (tempCodePoint > 127) {
1631
+ codePoint = tempCodePoint;
1632
+ }
1633
+ }
1634
+ break;
1635
+ case 3:
1636
+ secondByte = buf[i + 1];
1637
+ thirdByte = buf[i + 2];
1638
+ if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {
1639
+ tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;
1640
+ if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {
1641
+ codePoint = tempCodePoint;
1642
+ }
1643
+ }
1644
+ break;
1645
+ case 4:
1646
+ secondByte = buf[i + 1];
1647
+ thirdByte = buf[i + 2];
1648
+ fourthByte = buf[i + 3];
1649
+ if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {
1650
+ tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;
1651
+ if (tempCodePoint > 65535 && tempCodePoint < 1114112) {
1652
+ codePoint = tempCodePoint;
1653
+ }
1654
+ }
1655
+ }
1656
+ }
1657
+ if (codePoint === null) {
1658
+ codePoint = 65533;
1659
+ bytesPerSequence = 1;
1660
+ } else if (codePoint > 65535) {
1661
+ codePoint -= 65536;
1662
+ res.push(codePoint >>> 10 & 1023 | 55296);
1663
+ codePoint = 56320 | codePoint & 1023;
1664
+ }
1665
+ res.push(codePoint);
1666
+ i += bytesPerSequence;
1667
+ }
1668
+ return Buffer._decodeCodePointsArray(res);
1669
+ }
1670
+ static _decodeCodePointsArray(codePoints) {
1671
+ const len = codePoints.length;
1672
+ if (len <= MAX_ARGUMENTS_LENGTH) {
1673
+ return String.fromCharCode.apply(String, codePoints);
1674
+ }
1675
+ let res = "";
1676
+ let i = 0;
1677
+ while (i < len) {
1678
+ res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
1679
+ }
1680
+ return res;
1681
+ }
1682
+ static _asciiSlice(buf, start, end) {
1683
+ let ret = "";
1684
+ end = Math.min(buf.length, end);
1685
+ for (let i = start; i < end; ++i) {
1686
+ ret += String.fromCharCode(buf[i] & 127);
1687
+ }
1688
+ return ret;
1689
+ }
1690
+ static _latin1Slice(buf, start, end) {
1691
+ let ret = "";
1692
+ end = Math.min(buf.length, end);
1693
+ for (let i = start; i < end; ++i) {
1694
+ ret += String.fromCharCode(buf[i]);
1695
+ }
1696
+ return ret;
1697
+ }
1698
+ static _utf16leSlice(buf, start, end) {
1699
+ const bytes = buf.slice(start, end);
1700
+ let res = "";
1701
+ for (let i = 0; i < bytes.length - 1; i += 2) {
1702
+ res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
1703
+ }
1704
+ return res;
1705
+ }
1706
+ static _arrayIndexOf(arr, val, byteOffset, encoding, dir) {
1707
+ let indexSize = 1;
1708
+ let arrLength = arr.length;
1709
+ let valLength = val.length;
1710
+ if (encoding !== void 0) {
1711
+ encoding = Buffer._getEncoding(encoding);
1712
+ if (encoding === "ucs2" || encoding === "utf16le") {
1713
+ if (arr.length < 2 || val.length < 2) {
1714
+ return -1;
1715
+ }
1716
+ indexSize = 2;
1717
+ arrLength /= 2;
1718
+ valLength /= 2;
1719
+ byteOffset /= 2;
1720
+ }
1721
+ }
1722
+ function read(buf, i2) {
1723
+ if (indexSize === 1) {
1724
+ return buf[i2];
1725
+ } else {
1726
+ return buf.readUInt16BE(i2 * indexSize);
1727
+ }
1728
+ }
1729
+ let i;
1730
+ if (dir) {
1731
+ let foundIndex = -1;
1732
+ for (i = byteOffset; i < arrLength; i++) {
1733
+ if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
1734
+ if (foundIndex === -1)
1735
+ foundIndex = i;
1736
+ if (i - foundIndex + 1 === valLength)
1737
+ return foundIndex * indexSize;
1738
+ } else {
1739
+ if (foundIndex !== -1)
1740
+ i -= i - foundIndex;
1741
+ foundIndex = -1;
1742
+ }
1743
+ }
1744
+ } else {
1745
+ if (byteOffset + valLength > arrLength) {
1746
+ byteOffset = arrLength - valLength;
1747
+ }
1748
+ for (i = byteOffset; i >= 0; i--) {
1749
+ let found = true;
1750
+ for (let j = 0; j < valLength; j++) {
1751
+ if (read(arr, i + j) !== read(val, j)) {
1752
+ found = false;
1753
+ break;
1754
+ }
1755
+ }
1756
+ if (found) {
1757
+ return i;
1758
+ }
1759
+ }
1760
+ }
1761
+ return -1;
1762
+ }
1763
+ static _checkOffset(offset, ext, length) {
1764
+ if (offset % 1 !== 0 || offset < 0)
1765
+ throw new RangeError("offset is not uint");
1766
+ if (offset + ext > length)
1767
+ throw new RangeError("Trying to access beyond buffer length");
1768
+ }
1769
+ static _checkInt(buf, value, offset, ext, max, min) {
1770
+ if (!Buffer.isBuffer(buf))
1771
+ throw new TypeError('"buffer" argument must be a Buffer instance');
1772
+ if (value > max || value < min)
1773
+ throw new RangeError('"value" argument is out of bounds');
1774
+ if (offset + ext > buf.length)
1775
+ throw new RangeError("Index out of range");
1776
+ }
1777
+ static _getEncoding(encoding) {
1778
+ let toLowerCase = false;
1779
+ let originalEncoding = "";
1780
+ for (; ; ) {
1781
+ switch (encoding) {
1782
+ case "hex":
1783
+ return "hex";
1784
+ case "utf8":
1785
+ return "utf8";
1786
+ case "ascii":
1787
+ return "ascii";
1788
+ case "binary":
1789
+ return "binary";
1790
+ case "latin1":
1791
+ return "latin1";
1792
+ case "ucs2":
1793
+ return "ucs2";
1794
+ case "utf16le":
1795
+ return "utf16le";
1796
+ case "base64":
1797
+ return "base64";
1798
+ default: {
1799
+ if (toLowerCase) {
1800
+ throw new TypeError("Unknown or unsupported encoding: " + originalEncoding);
1801
+ }
1802
+ toLowerCase = true;
1803
+ originalEncoding = encoding;
1804
+ encoding = encoding.toLowerCase();
1805
+ }
1806
+ }
1807
+ }
1808
+ }
1809
+ }
1810
+ const hexSliceLookupTable = function() {
1811
+ const alphabet = "0123456789abcdef";
1812
+ const table = new Array(256);
1813
+ for (let i = 0; i < 16; ++i) {
1814
+ const i16 = i * 16;
1815
+ for (let j = 0; j < 16; ++j) {
1816
+ table[i16 + j] = alphabet[i] + alphabet[j];
1817
+ }
1818
+ }
1819
+ return table;
1820
+ }();
1821
+ const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
1822
+ function base64clean(str) {
1823
+ str = str.split("=")[0];
1824
+ str = str.trim().replace(INVALID_BASE64_RE, "");
1825
+ if (str.length < 2)
1826
+ return "";
1827
+ while (str.length % 4 !== 0) {
1828
+ str = str + "=";
1829
+ }
1830
+ return str;
1831
+ }
1832
+
25
1833
  function notEmpty(value) {
26
1834
  return value !== null && value !== void 0;
27
1835
  }
@@ -526,7 +2334,7 @@ function defaultOnOpen(response) {
526
2334
  }
527
2335
  }
528
2336
 
529
- const VERSION = "0.29.2";
2337
+ const VERSION = "0.29.4";
530
2338
 
531
2339
  class ErrorWithCause extends Error {
532
2340
  constructor(message, options) {
@@ -619,15 +2427,15 @@ function parseWorkspacesUrlParts(url) {
619
2427
  if (!isString(url))
620
2428
  return null;
621
2429
  const matches = {
622
- production: url.match(/(?:https:\/\/)?([^.]+)(?:\.([^.]+))\.xata\.sh.*/),
623
- staging: url.match(/(?:https:\/\/)?([^.]+)(?:\.([^.]+))\.staging-xata\.dev.*/),
624
- dev: url.match(/(?:https:\/\/)?([^.]+)(?:\.([^.]+))\.dev-xata\.dev.*/),
625
- local: url.match(/(?:https?:\/\/)?([^.]+)(?:\.([^.]+))\.localhost:(\d+)/)
2430
+ production: url.match(/(?:https:\/\/)?([^.]+)(?:\.([^.]+))\.xata\.sh\/db\/([^:]+):?(.*)?/),
2431
+ staging: url.match(/(?:https:\/\/)?([^.]+)(?:\.([^.]+))\.staging-xata\.dev\/db\/([^:]+):?(.*)?/),
2432
+ dev: url.match(/(?:https:\/\/)?([^.]+)(?:\.([^.]+))\.dev-xata\.dev\/db\/([^:]+):?(.*)?/),
2433
+ local: url.match(/(?:https?:\/\/)?([^.]+)(?:\.([^.]+))\.localhost:(?:\d+)\/db\/([^:]+):?(.*)?/)
626
2434
  };
627
2435
  const [host, match] = Object.entries(matches).find(([, match2]) => match2 !== null) ?? [];
628
2436
  if (!isHostProviderAlias(host) || !match)
629
2437
  return null;
630
- return { workspace: match[1], region: match[2], host };
2438
+ return { workspace: match[1], region: match[2], database: match[3], branch: match[4], host };
631
2439
  }
632
2440
 
633
2441
  const pool = new ApiRequestPool();
@@ -852,6 +2660,12 @@ const adaptTable = (variables, signal) => dataPlaneFetch({
852
2660
  ...variables,
853
2661
  signal
854
2662
  });
2663
+ const adaptAllTables = (variables, signal) => dataPlaneFetch({
2664
+ url: "/db/{dbBranchName}/migrations/adapt",
2665
+ method: "post",
2666
+ ...variables,
2667
+ signal
2668
+ });
855
2669
  const getBranchMigrationJobStatus = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/migrations/status", method: "get", ...variables, signal });
856
2670
  const getMigrationJobStatus = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/migrations/jobs/{jobId}", method: "get", ...variables, signal });
857
2671
  const getMigrationHistory = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/migrations/history", method: "get", ...variables, signal });
@@ -1084,6 +2898,7 @@ const operationsByTag$2 = {
1084
2898
  migrations: {
1085
2899
  applyMigration,
1086
2900
  adaptTable,
2901
+ adaptAllTables,
1087
2902
  getBranchMigrationJobStatus,
1088
2903
  getMigrationJobStatus,
1089
2904
  getMigrationHistory,
@@ -1255,6 +3070,8 @@ const deleteWorkspace = (variables, signal) => controlPlaneFetch({
1255
3070
  ...variables,
1256
3071
  signal
1257
3072
  });
3073
+ const getWorkspaceSettings = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/settings", method: "get", ...variables, signal });
3074
+ const updateWorkspaceSettings = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/settings", method: "patch", ...variables, signal });
1258
3075
  const getWorkspaceMembersList = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/members", method: "get", ...variables, signal });
1259
3076
  const updateWorkspaceMemberRole = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/members/{userId}", method: "put", ...variables, signal });
1260
3077
  const removeWorkspaceMember = (variables, signal) => controlPlaneFetch({
@@ -1320,6 +3137,8 @@ const operationsByTag$1 = {
1320
3137
  getWorkspace,
1321
3138
  updateWorkspace,
1322
3139
  deleteWorkspace,
3140
+ getWorkspaceSettings,
3141
+ updateWorkspaceSettings,
1323
3142
  getWorkspaceMembersList,
1324
3143
  updateWorkspaceMemberRole,
1325
3144
  removeWorkspaceMember
@@ -4587,19 +6406,19 @@ function prepareParams(param1, param2) {
4587
6406
  return { statement, params: param2?.map((value) => prepareValue(value)) };
4588
6407
  }
4589
6408
  if (isObject(param1)) {
4590
- const { statement, params, consistency } = param1;
4591
- return { statement, params: params?.map((value) => prepareValue(value)), consistency };
6409
+ const { statement, params, consistency, responseType } = param1;
6410
+ return { statement, params: params?.map((value) => prepareValue(value)), consistency, responseType };
4592
6411
  }
4593
6412
  throw new Error("Invalid query");
4594
6413
  }
4595
6414
 
4596
6415
  class SQLPlugin extends XataPlugin {
4597
6416
  build(pluginOptions) {
4598
- return async (query, ...parameters) => {
6417
+ const sqlFunction = async (query, ...parameters) => {
4599
6418
  if (!isParamsObject(query) && (!isTemplateStringsArray(query) || !Array.isArray(parameters))) {
4600
6419
  throw new Error("Invalid usage of `xata.sql`. Please use it as a tagged template or with an object.");
4601
6420
  }
4602
- const { statement, params, consistency } = prepareParams(query, parameters);
6421
+ const { statement, params, consistency, responseType } = prepareParams(query, parameters);
4603
6422
  const {
4604
6423
  records,
4605
6424
  rows,
@@ -4607,11 +6426,13 @@ class SQLPlugin extends XataPlugin {
4607
6426
  columns = []
4608
6427
  } = await sqlQuery({
4609
6428
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", region: "{region}" },
4610
- body: { statement, params, consistency },
6429
+ body: { statement, params, consistency, responseType },
4611
6430
  ...pluginOptions
4612
6431
  });
4613
6432
  return { records, rows, warning, columns };
4614
6433
  };
6434
+ sqlFunction.connectionString = buildConnectionString(pluginOptions);
6435
+ return sqlFunction;
4615
6436
  }
4616
6437
  }
4617
6438
  function isTemplateStringsArray(strings) {
@@ -4620,6 +6441,33 @@ function isTemplateStringsArray(strings) {
4620
6441
  function isParamsObject(params) {
4621
6442
  return isObject(params) && "statement" in params;
4622
6443
  }
6444
+ function buildDomain(host, region) {
6445
+ switch (host) {
6446
+ case "production":
6447
+ return `${region}.sql.xata.sh`;
6448
+ case "staging":
6449
+ return `${region}.sql.staging-xata.dev`;
6450
+ case "dev":
6451
+ return `${region}.sql.dev-xata.dev`;
6452
+ case "local":
6453
+ return "localhost:7654";
6454
+ default:
6455
+ throw new Error("Invalid host provider");
6456
+ }
6457
+ }
6458
+ function buildConnectionString({ apiKey, workspacesApiUrl, branch }) {
6459
+ const url = isString(workspacesApiUrl) ? workspacesApiUrl : workspacesApiUrl("", {});
6460
+ const parts = parseWorkspacesUrlParts(url);
6461
+ if (!parts)
6462
+ throw new Error("Invalid workspaces URL");
6463
+ const { workspace: workspaceSlug, region, database, host } = parts;
6464
+ const domain = buildDomain(host, region);
6465
+ const workspace = workspaceSlug.split("-").pop();
6466
+ if (!workspace || !region || !database || !apiKey || !branch) {
6467
+ throw new Error("Unable to build xata connection string");
6468
+ }
6469
+ return `postgresql://${workspace}:${apiKey}@${domain}/${database}:${branch}?sslmode=require`;
6470
+ }
4623
6471
 
4624
6472
  class TransactionPlugin extends XataPlugin {
4625
6473
  build(pluginOptions) {
@@ -4671,7 +6519,8 @@ const buildClient = (plugins) => {
4671
6519
  ...__privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
4672
6520
  cache: safeOptions.cache,
4673
6521
  host: safeOptions.host,
4674
- tables
6522
+ tables,
6523
+ branch: safeOptions.branch
4675
6524
  };
4676
6525
  const db = new SchemaPlugin().build(pluginOptions);
4677
6526
  const search = new SearchPlugin(db).build(pluginOptions);
@@ -4854,5 +6703,5 @@ class XataError extends Error {
4854
6703
  }
4855
6704
  }
4856
6705
 
4857
- export { BaseClient, FetcherError, FilesPlugin, operationsByTag as Operations, PAGINATION_DEFAULT_OFFSET, PAGINATION_DEFAULT_SIZE, PAGINATION_MAX_OFFSET, PAGINATION_MAX_SIZE, Page, PageRecordArray, Query, RecordArray, RecordColumnTypes, Repository, RestRepository, SQLPlugin, SchemaPlugin, SearchPlugin, Serializer, SimpleCache, TransactionPlugin, XataApiClient, XataApiPlugin, XataError, XataFile, XataPlugin, acceptWorkspaceMemberInvite, adaptTable, addGitBranchesEntry, addTableColumn, aggregateTable, applyBranchSchemaEdit, applyMigration, askTable, askTableSession, branchTransaction, buildClient, buildPreviewBranchName, buildProviderString, bulkInsertTableRecords, cancelWorkspaceMemberInvite, compareBranchSchemas, compareBranchWithUserSchema, compareMigrationRequest, contains, copyBranch, createBranch, createCluster, createDatabase, createMigrationRequest, createTable, createUserAPIKey, createWorkspace, deleteBranch, deleteColumn, deleteDatabase, deleteDatabaseGithubSettings, deleteFile, deleteFileItem, deleteOAuthAccessToken, deleteRecord, deleteTable, deleteUser, deleteUserAPIKey, deleteUserOAuthClient, deleteWorkspace, deserialize, endsWith, equals, executeBranchMigrationPlan, exists, fileAccess, fileUpload, ge, getAPIKey, getAuthorizationCode, getBranch, getBranchDetails, getBranchList, getBranchMetadata, getBranchMigrationHistory, getBranchMigrationJobStatus, getBranchMigrationPlan, getBranchSchemaHistory, getBranchStats, getCluster, getColumn, getDatabaseGithubSettings, getDatabaseList, getDatabaseMetadata, getDatabaseSettings, getDatabaseURL, getFile, getFileItem, getGitBranchesMapping, getHostUrl, getMigrationHistory, getMigrationJobStatus, getMigrationRequest, getMigrationRequestIsMerged, getPreviewBranch, getRecord, getSchema, getTableColumns, getTableSchema, getUser, getUserAPIKeys, getUserOAuthAccessTokens, getUserOAuthClients, getWorkspace, getWorkspaceMembersList, getWorkspacesList, grantAuthorizationCode, greaterEquals, greaterThan, greaterThanEquals, gt, gte, iContains, iPattern, includes, includesAll, includesAny, includesNone, insertRecord, insertRecordWithID, inviteWorkspaceMember, is, isCursorPaginationOptions, isHostProviderAlias, isHostProviderBuilder, isIdentifiable, isNot, isValidExpandedColumn, isValidSelectableColumns, isXataRecord, le, lessEquals, lessThan, lessThanEquals, listClusters, listMigrationRequestsCommits, listRegions, lt, lte, mergeMigrationRequest, notExists, operationsByTag, parseProviderString, parseWorkspacesUrlParts, pattern, previewBranchSchemaEdit, pushBranchMigrations, putFile, putFileItem, queryMigrationRequests, queryTable, removeGitBranchesEntry, removeWorkspaceMember, renameDatabase, resendWorkspaceMemberInvite, resolveBranch, searchBranch, searchTable, serialize, setTableSchema, sqlQuery, startsWith, summarizeTable, transformImage, updateBranchMetadata, updateBranchSchema, updateCluster, updateColumn, updateDatabaseGithubSettings, updateDatabaseMetadata, updateDatabaseSettings, updateMigrationRequest, updateOAuthAccessToken, updateRecordWithID, updateTable, updateUser, updateWorkspace, updateWorkspaceMemberInvite, updateWorkspaceMemberRole, upsertRecordWithID, vectorSearchTable };
6706
+ export { BaseClient, Buffer, FetcherError, FilesPlugin, operationsByTag as Operations, PAGINATION_DEFAULT_OFFSET, PAGINATION_DEFAULT_SIZE, PAGINATION_MAX_OFFSET, PAGINATION_MAX_SIZE, Page, PageRecordArray, Query, RecordArray, RecordColumnTypes, Repository, RestRepository, SQLPlugin, SchemaPlugin, SearchPlugin, Serializer, SimpleCache, TransactionPlugin, XataApiClient, XataApiPlugin, XataError, XataFile, XataPlugin, acceptWorkspaceMemberInvite, adaptAllTables, adaptTable, addGitBranchesEntry, addTableColumn, aggregateTable, applyBranchSchemaEdit, applyMigration, askTable, askTableSession, branchTransaction, buildClient, buildPreviewBranchName, buildProviderString, bulkInsertTableRecords, cancelWorkspaceMemberInvite, compareBranchSchemas, compareBranchWithUserSchema, compareMigrationRequest, contains, copyBranch, createBranch, createCluster, createDatabase, createMigrationRequest, createTable, createUserAPIKey, createWorkspace, deleteBranch, deleteColumn, deleteDatabase, deleteDatabaseGithubSettings, deleteFile, deleteFileItem, deleteOAuthAccessToken, deleteRecord, deleteTable, deleteUser, deleteUserAPIKey, deleteUserOAuthClient, deleteWorkspace, deserialize, endsWith, equals, executeBranchMigrationPlan, exists, fileAccess, fileUpload, ge, getAPIKey, getAuthorizationCode, getBranch, getBranchDetails, getBranchList, getBranchMetadata, getBranchMigrationHistory, getBranchMigrationJobStatus, getBranchMigrationPlan, getBranchSchemaHistory, getBranchStats, getCluster, getColumn, getDatabaseGithubSettings, getDatabaseList, getDatabaseMetadata, getDatabaseSettings, getDatabaseURL, getFile, getFileItem, getGitBranchesMapping, getHostUrl, getMigrationHistory, getMigrationJobStatus, getMigrationRequest, getMigrationRequestIsMerged, getPreviewBranch, getRecord, getSchema, getTableColumns, getTableSchema, getUser, getUserAPIKeys, getUserOAuthAccessTokens, getUserOAuthClients, getWorkspace, getWorkspaceMembersList, getWorkspaceSettings, getWorkspacesList, grantAuthorizationCode, greaterEquals, greaterThan, greaterThanEquals, gt, gte, iContains, iPattern, includes, includesAll, includesAny, includesNone, insertRecord, insertRecordWithID, inviteWorkspaceMember, is, isCursorPaginationOptions, isHostProviderAlias, isHostProviderBuilder, isIdentifiable, isNot, isValidExpandedColumn, isValidSelectableColumns, isXataRecord, le, lessEquals, lessThan, lessThanEquals, listClusters, listMigrationRequestsCommits, listRegions, lt, lte, mergeMigrationRequest, notExists, operationsByTag, parseProviderString, parseWorkspacesUrlParts, pattern, previewBranchSchemaEdit, pushBranchMigrations, putFile, putFileItem, queryMigrationRequests, queryTable, removeGitBranchesEntry, removeWorkspaceMember, renameDatabase, resendWorkspaceMemberInvite, resolveBranch, searchBranch, searchTable, serialize, setTableSchema, sqlQuery, startsWith, summarizeTable, transformImage, updateBranchMetadata, updateBranchSchema, updateCluster, updateColumn, updateDatabaseGithubSettings, updateDatabaseMetadata, updateDatabaseSettings, updateMigrationRequest, updateOAuthAccessToken, updateRecordWithID, updateTable, updateUser, updateWorkspace, updateWorkspaceMemberInvite, updateWorkspaceMemberRole, updateWorkspaceSettings, upsertRecordWithID, vectorSearchTable };
4858
6707
  //# sourceMappingURL=index.mjs.map