@yorozu/utils 0.1.1

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/lib/index.js ADDED
@@ -0,0 +1,1990 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ // src/arrays/typed/index.ts
8
+ var typed_exports = {};
9
+ __export(typed_exports, {
10
+ compare: () => compare,
11
+ equal: () => equal,
12
+ getPlatformByteOrder: () => getPlatformByteOrder,
13
+ includes: () => includes,
14
+ includesArray: () => includesArray,
15
+ indexOf: () => indexOf,
16
+ indexOfArray: () => indexOfArray,
17
+ lastIndexOf: () => lastIndexOf,
18
+ lastIndexOfArray: () => lastIndexOfArray,
19
+ toDataView: () => toDataView,
20
+ view: () => view
21
+ });
22
+
23
+ // src/arrays/typed/compare.ts
24
+ function compare(a, b) {
25
+ if (a.length < b.length) return -1;
26
+ if (a.length > b.length) return 1;
27
+ for (let i = 0; i < a.length; i++) {
28
+ if (a[i] < b[i]) return -1;
29
+ if (a[i] > b[i]) return 1;
30
+ }
31
+ return 0;
32
+ }
33
+ function equal(a, b) {
34
+ return compare(a, b) === 0;
35
+ }
36
+
37
+ // src/arrays/typed/find.ts
38
+ function indexOf(haystack, needle, start = 0) {
39
+ for (let i = start; i < haystack.length; i++) {
40
+ if (haystack[i] === needle) return i;
41
+ }
42
+ return -1;
43
+ }
44
+ function lastIndexOf(haystack, needle, start = haystack.length - 1) {
45
+ for (let i = start; i >= 0; i--) {
46
+ if (haystack[i] === needle) return i;
47
+ }
48
+ return -1;
49
+ }
50
+ function indexOfArray(haystack, needle, start = 0) {
51
+ if (needle.length === 0) return start;
52
+ if (needle.length === 1) return indexOf(haystack, needle[0], start);
53
+ let max3 = haystack.length - needle.length;
54
+ for (let i = start; i <= max3; i++) {
55
+ if (haystack[i] === needle[0]) {
56
+ let j = 1;
57
+ for (; j < needle.length; j++) {
58
+ if (haystack[i + j] !== needle[j]) break;
59
+ }
60
+ if (j === needle.length) return i;
61
+ }
62
+ }
63
+ return -1;
64
+ }
65
+ function lastIndexOfArray(haystack, needle, start = haystack.length - 1) {
66
+ if (needle.length === 0) return start;
67
+ if (needle.length === 1) return lastIndexOf(haystack, needle[0], start);
68
+ let maxStart = haystack.length - needle.length;
69
+ let effectiveStart = start > maxStart ? maxStart : start;
70
+ for (let i = effectiveStart; i >= 0; i--) {
71
+ let j = 0;
72
+ for (; j < needle.length; j++) {
73
+ if (haystack[i + j] !== needle[j]) break;
74
+ }
75
+ if (j === needle.length) return i;
76
+ }
77
+ return -1;
78
+ }
79
+ function includes(haystack, needle) {
80
+ return indexOf(haystack, needle) !== -1;
81
+ }
82
+ function includesArray(haystack, needle) {
83
+ return indexOfArray(haystack, needle) !== -1;
84
+ }
85
+
86
+ // src/arrays/typed/misc.ts
87
+ function toDataView(buf) {
88
+ return new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
89
+ }
90
+ function view(ctor, buf) {
91
+ let byteLength = buf.byteLength;
92
+ let bytesPerElement = ctor.BYTES_PER_ELEMENT;
93
+ if (byteLength % bytesPerElement !== 0) {
94
+ throw new RangeError(`byteLength (${byteLength}) is not a multiple of ${bytesPerElement} for ${ctor.name}`);
95
+ }
96
+ let length = byteLength / bytesPerElement;
97
+ return new ctor(buf.buffer, buf.byteOffset, length);
98
+ }
99
+ function getPlatformByteOrder() {
100
+ if (getPlatformByteOrder._cachedByteOrder === null) {
101
+ let buffer = new ArrayBuffer(2);
102
+ let view2 = new DataView(buffer);
103
+ view2.setUint16(0, 4660, true);
104
+ getPlatformByteOrder._cachedByteOrder = new Uint16Array(buffer)[0] === 4660;
105
+ }
106
+ return getPlatformByteOrder._cachedByteOrder ? "little" : "big";
107
+ }
108
+ getPlatformByteOrder._cachedByteOrder = null;
109
+
110
+ // src/arrays/u8/index.ts
111
+ var u8_exports = {};
112
+ __export(u8_exports, {
113
+ BufferPool: () => BufferPool,
114
+ allocate: () => allocate,
115
+ allocateWith: () => allocateWith,
116
+ clone: () => clone,
117
+ concat: () => concat,
118
+ concat2: () => concat2,
119
+ concat3: () => concat3,
120
+ empty: () => empty,
121
+ readNthBit: () => readNthBit,
122
+ reverse: () => reverse,
123
+ setDefaultPool: () => setDefaultPool,
124
+ swap16: () => swap16,
125
+ swap32: () => swap32,
126
+ swap64: () => swap64,
127
+ swapNibbles: () => swapNibbles,
128
+ toReversed: () => toReversed,
129
+ xor: () => xor,
130
+ xorInPlace: () => xorInPlace
131
+ });
132
+
133
+ // src/arrays/u8/misc.ts
134
+ var empty = new Uint8Array(0);
135
+ function clone(buf) {
136
+ return new Uint8Array(buf);
137
+ }
138
+ function readNthBit(byte, bit) {
139
+ return (byte & 1 << bit) >> bit;
140
+ }
141
+
142
+ // src/arrays/u8/pool.ts
143
+ var BufferPool = class {
144
+ size;
145
+ maxAllocSize;
146
+ #pool;
147
+ #offset = 0;
148
+ constructor(size = 16 * 1024) {
149
+ this.size = size;
150
+ this.maxAllocSize = size >>> 1;
151
+ this.#reallocate();
152
+ }
153
+ get #remaining() {
154
+ return this.size - this.#offset;
155
+ }
156
+ allocate(size) {
157
+ if (size === 0) return empty;
158
+ if (size > this.maxAllocSize) {
159
+ return new Uint8Array(size);
160
+ }
161
+ if (size > this.#remaining) {
162
+ this.#reallocate();
163
+ }
164
+ let start = this.#offset;
165
+ this.#offset += size;
166
+ this.#align();
167
+ return new Uint8Array(this.#pool, start, size);
168
+ }
169
+ reset() {
170
+ this.#reallocate();
171
+ }
172
+ #reallocate() {
173
+ this.#pool = new ArrayBuffer(this.size);
174
+ this.#offset = 0;
175
+ }
176
+ #align() {
177
+ let misalignment = this.#offset & 7;
178
+ if (misalignment !== 0) {
179
+ this.#offset += 8 - misalignment;
180
+ }
181
+ }
182
+ };
183
+ var defaultPool = new BufferPool(16 * 1024);
184
+ function setDefaultPool(size) {
185
+ defaultPool = new BufferPool(size);
186
+ }
187
+ function allocate(size) {
188
+ return defaultPool.allocate(size);
189
+ }
190
+ function allocateWith(init) {
191
+ let buf = allocate(init.length);
192
+ buf.set(init);
193
+ return buf;
194
+ }
195
+
196
+ // src/arrays/u8/concat.ts
197
+ function concat(bufs) {
198
+ if (bufs.length === 0) {
199
+ return allocate(0);
200
+ }
201
+ if (bufs.length === 1) {
202
+ return bufs[0];
203
+ }
204
+ if (typeof Buffer !== "undefined") {
205
+ let buf = Buffer.concat(bufs);
206
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
207
+ }
208
+ let length = 0;
209
+ for (let i = 0; i < bufs.length; i++) {
210
+ length += bufs[i].length;
211
+ }
212
+ let ret = allocate(length);
213
+ let offset = 0;
214
+ for (let i = 0; i < bufs.length; i++) {
215
+ ret.set(bufs[i], offset);
216
+ offset += bufs[i].length;
217
+ }
218
+ return ret;
219
+ }
220
+ function concat2(a, b) {
221
+ let ret = allocate(a.length + b.length);
222
+ ret.set(a);
223
+ ret.set(b, a.length);
224
+ return ret;
225
+ }
226
+ function concat3(a, b, c) {
227
+ let ret = allocate(a.length + b.length + c.length);
228
+ ret.set(a);
229
+ ret.set(b, a.length);
230
+ ret.set(c, a.length + b.length);
231
+ return ret;
232
+ }
233
+
234
+ // src/arrays/u8/reverse.ts
235
+ function reverse(buffer) {
236
+ if (buffer.length < 2) return;
237
+ let left = 0;
238
+ let right = buffer.length - 1;
239
+ while (left < right) {
240
+ let tmp = buffer[left];
241
+ buffer[left] = buffer[right];
242
+ buffer[right] = tmp;
243
+ left++;
244
+ right--;
245
+ }
246
+ }
247
+ function toReversed(buffer) {
248
+ let len = buffer.length;
249
+ if (len === 0) return allocate(0);
250
+ if (len === 1) {
251
+ let result2 = allocate(1);
252
+ result2[0] = buffer[0];
253
+ return result2;
254
+ }
255
+ let result = allocate(len);
256
+ let last = len - 1;
257
+ for (let i = 0; i < len; i++) {
258
+ result[i] = buffer[last - i];
259
+ }
260
+ return result;
261
+ }
262
+
263
+ // src/arrays/u8/swap.ts
264
+ function swap16(buf) {
265
+ if (buf.length % 2 !== 0) throw new RangeError(`Buffer length must be a multiple of 2`);
266
+ for (let i = 0; i < buf.length; i += 2) {
267
+ let tmp = buf[i];
268
+ buf[i] = buf[i + 1];
269
+ buf[i + 1] = tmp;
270
+ }
271
+ }
272
+ function swap32(buf) {
273
+ if (buf.length % 4 !== 0) throw new RangeError(`Buffer length must be a multiple of 4`);
274
+ for (let i = 0; i < buf.length; i += 4) {
275
+ let tmp = buf[i];
276
+ buf[i] = buf[i + 3];
277
+ buf[i + 3] = tmp;
278
+ tmp = buf[i + 1];
279
+ buf[i + 1] = buf[i + 2];
280
+ buf[i + 2] = tmp;
281
+ }
282
+ }
283
+ function swap64(buf) {
284
+ if (buf.length % 8 !== 0) throw new RangeError(`Buffer length must be a multiple of 8`);
285
+ for (let i = 0; i < buf.length; i += 8) {
286
+ let tmp = buf[i];
287
+ buf[i] = buf[i + 7];
288
+ buf[i + 7] = tmp;
289
+ tmp = buf[i + 1];
290
+ buf[i + 1] = buf[i + 6];
291
+ buf[i + 6] = tmp;
292
+ tmp = buf[i + 2];
293
+ buf[i + 2] = buf[i + 5];
294
+ buf[i + 5] = tmp;
295
+ tmp = buf[i + 3];
296
+ buf[i + 3] = buf[i + 4];
297
+ buf[i + 4] = tmp;
298
+ }
299
+ }
300
+ function swapNibbles(buf) {
301
+ for (let i = 0; i < buf.length; i++) {
302
+ buf[i] = (buf[i] & 240) >> 4 | (buf[i] & 15) << 4;
303
+ }
304
+ }
305
+
306
+ // src/arrays/u8/xor.ts
307
+ function xor(data, key) {
308
+ if (key.length < data.length)
309
+ throw new RangeError(`Key must be at least as long as data (key=${key.length}, data=${data.length})`);
310
+ let ret = allocate(data.length);
311
+ for (let i = 0; i < data.length; i++) {
312
+ ret[i] = data[i] ^ key[i];
313
+ }
314
+ return ret;
315
+ }
316
+ function xorInPlace(data, key) {
317
+ if (key.length < data.length)
318
+ throw new RangeError(`Key must be at least as long as data (key=${key.length}, data=${data.length})`);
319
+ for (let i = 0; i < data.length; i++) {
320
+ data[i] ^= key[i];
321
+ }
322
+ }
323
+
324
+ // src/bigint/math.ts
325
+ function bitLength(n) {
326
+ if (n === 0n) return 0;
327
+ if (n < 0n) n = -n;
328
+ let hex = n.toString(16);
329
+ let len = hex.length;
330
+ let leadingDigit = parseInt(hex[0], 16);
331
+ return (len - 1) * 4 + (32 - Math.clz32(leadingDigit));
332
+ }
333
+ function twoMultiplicity(n) {
334
+ if (n === 0n) return 0n;
335
+ let m = 0n;
336
+ let pow = 1n;
337
+ while (true) {
338
+ if ((n & pow) !== 0n) return m;
339
+ m += 1n;
340
+ pow <<= 1n;
341
+ }
342
+ }
343
+ function min2(a, b) {
344
+ return a < b ? a : b;
345
+ }
346
+ function min(...args) {
347
+ let m = args[0];
348
+ for (let i = 1; i < args.length; i++) {
349
+ if (args[i] < m) m = args[i];
350
+ }
351
+ return m;
352
+ }
353
+ function max2(a, b) {
354
+ return a > b ? a : b;
355
+ }
356
+ function max(...args) {
357
+ let m = args[0];
358
+ for (let i = 1; i < args.length; i++) {
359
+ if (args[i] > m) m = args[i];
360
+ }
361
+ return m;
362
+ }
363
+ function abs(a) {
364
+ return a < 0n ? -a : a;
365
+ }
366
+ function euclideanGcd(a, b) {
367
+ while (b !== 0n) {
368
+ let t = b;
369
+ b = a % b;
370
+ a = t;
371
+ }
372
+ return a;
373
+ }
374
+ function modPowBinary(base, exp, mod) {
375
+ base %= mod;
376
+ let result = 1n;
377
+ while (exp > 0n) {
378
+ if (exp % 2n === 1n) result = result * base % mod;
379
+ exp >>= 1n;
380
+ base = base ** 2n % mod;
381
+ }
382
+ return result;
383
+ }
384
+ function modInv(a, n) {
385
+ let [g, x] = eGcd(toZn(a, n), n);
386
+ if (g !== 1n) throw new RangeError(`${a.toString()} does not have inverse modulo ${n.toString()}`);
387
+ else return toZn(x, n);
388
+ }
389
+ function eGcd(a, b) {
390
+ let x = 0n;
391
+ let y = 1n;
392
+ let u = 1n;
393
+ let v = 0n;
394
+ while (a !== 0n) {
395
+ let q = b / a;
396
+ let r = b % a;
397
+ let m = x - u * q;
398
+ let n = y - v * q;
399
+ b = a;
400
+ a = r;
401
+ x = u;
402
+ y = v;
403
+ u = m;
404
+ v = n;
405
+ }
406
+ return [b, x, y];
407
+ }
408
+ function toZn(a, n) {
409
+ if (typeof a === "number") a = BigInt(a);
410
+ if (typeof n === "number") n = BigInt(n);
411
+ if (n <= 0n) throw new RangeError("n must be greater than 0.");
412
+ let aZn = a % n;
413
+ return aZn < 0n ? aZn + n : aZn;
414
+ }
415
+
416
+ // src/bigint/bytes.ts
417
+ function toBytes(value, length = 0, le = false) {
418
+ let bits = bitLength(value);
419
+ let bytes = Math.ceil(bits / 8);
420
+ if (length !== 0 && bytes > length)
421
+ throw new RangeError(`Value out of bounds: ${bytes.toString()}, ${length.toString()}.`);
422
+ if (length === 0) length = bytes;
423
+ let buf = new ArrayBuffer(length);
424
+ let u8 = new Uint8Array(buf);
425
+ let unaligned = length % 8;
426
+ let dv = new DataView(buf, 0, length - unaligned);
427
+ for (let i = 0; i < dv.byteLength; i += 8) {
428
+ dv.setBigUint64(i, value & 0xffffffffffffffffn, true);
429
+ value >>= 64n;
430
+ }
431
+ if (unaligned > 0) {
432
+ for (let i = length - unaligned; i < length; i++) {
433
+ u8[i] = Number(value & 0xffn);
434
+ value >>= 8n;
435
+ }
436
+ }
437
+ if (!le) u8.reverse();
438
+ return u8;
439
+ }
440
+ function fromBytes(buffer, le = false) {
441
+ if (le) buffer = u8_exports.toReversed(buffer);
442
+ let unaligned = buffer.length % 8;
443
+ let dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength - unaligned);
444
+ let res = 0n;
445
+ for (let i = 0; i < dv.byteLength; i += 8) res = res << 64n | BigInt(dv.getBigUint64(i, false));
446
+ if (unaligned > 0) {
447
+ for (let i = buffer.length - unaligned; i < buffer.length; i++) res = res << 8n | BigInt(buffer[i]);
448
+ }
449
+ return res;
450
+ }
451
+
452
+ // src/encoding/base64.ts
453
+ var base64_exports = {};
454
+ __export(base64_exports, {
455
+ decode: () => decode,
456
+ decodedLength: () => decodedLength,
457
+ encode: () => encode,
458
+ encodeLookup: () => encodeLookup,
459
+ encodedLength: () => encodedLength2,
460
+ lookup: () => lookup
461
+ });
462
+
463
+ // src/encoding/utf8.ts
464
+ var utf8_exports = {};
465
+ __export(utf8_exports, {
466
+ decoder: () => decoder,
467
+ encodedLength: () => encodedLength,
468
+ encoder: () => encoder
469
+ });
470
+ var encoder = new TextEncoder();
471
+ var decoder = new TextDecoder();
472
+ function encodedLength(data) {
473
+ if (typeof Buffer !== "undefined") return Buffer.byteLength(data, "utf8");
474
+ let length = data.length;
475
+ for (let i = length - 1; i >= 0; i--) {
476
+ let code = data.charCodeAt(i);
477
+ if (code > 127 && code <= 2047) length++;
478
+ else if (code > 2047 && code <= 65535) length += 2;
479
+ if (code >= 56320 && code <= 57343) i--;
480
+ }
481
+ return length;
482
+ }
483
+
484
+ // src/encoding/base64.ts
485
+ var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
486
+ var lookup = /* @__PURE__ */ new Map();
487
+ var encodeLookup = /* @__PURE__ */ new Map();
488
+ for (let i = 0; i < alphabet.length; i++) {
489
+ const charCode = alphabet.charCodeAt(i);
490
+ lookup.set(charCode, i);
491
+ encodeLookup.set(i, charCode);
492
+ }
493
+ lookup.set("=".charCodeAt(0), 0);
494
+ lookup.set("-".charCodeAt(0), 62);
495
+ lookup.set("_".charCodeAt(0), 63);
496
+ var HasToBase64 = typeof Uint8Array.prototype.toBase64 === "function";
497
+ var HasFromBase64 = typeof Uint8Array.fromBase64 === "function";
498
+ function decode(data, url = false) {
499
+ if (typeof Buffer !== "undefined") {
500
+ let buf = Buffer.from(data, url ? "base64url" : "base64");
501
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
502
+ }
503
+ if (HasFromBase64) return Uint8Array.fromBase64(data, { alphabet: url ? "base64url" : "base64" });
504
+ data = data.replace(/=+$/g, "");
505
+ let n = data.length;
506
+ let rem = n % 4;
507
+ let k = rem && rem - 1;
508
+ let m = (n >> 2) * 3 + k;
509
+ let encoded = u8_exports.allocate(n + 3);
510
+ encoder.encodeInto(`${data}===`, encoded);
511
+ for (let i = 0, j = 0; i < n; i += 4, j += 3) {
512
+ let x = (lookup.get(encoded[i]) << 18) + (lookup.get(encoded[i + 1]) << 12) + (lookup.get(encoded[i + 2]) << 6) + lookup.get(encoded[i + 3]);
513
+ encoded[j] = x >> 16;
514
+ encoded[j + 1] = x >> 8 & 255;
515
+ encoded[j + 2] = x & 255;
516
+ }
517
+ return new Uint8Array(encoded.buffer, encoded.byteOffset, m);
518
+ }
519
+ var ToBase64Options = { alphabet: "base64", omitPadding: false };
520
+ var ToBase64UrlOptions = { alphabet: "base64url", omitPadding: true };
521
+ function encode(bytes, url = false) {
522
+ if (typeof Buffer !== "undefined") return Buffer.from(bytes).toString(url ? "base64url" : "base64");
523
+ if (HasToBase64) return bytes.toBase64(url ? ToBase64UrlOptions : ToBase64Options);
524
+ let m = bytes.length;
525
+ let k = m % 3;
526
+ let n = Math.floor(m / 3) * 4 + (k && k + 1);
527
+ let N = Math.ceil(m / 3) * 4;
528
+ let encoded = u8_exports.allocate(N);
529
+ for (let i = 0, j = 0; j < m; i += 4, j += 3) {
530
+ let y = (bytes[j] << 16) + (bytes[j + 1] << 8) + (bytes[j + 2] | 0);
531
+ encoded[i] = encodeLookup.get(y >> 18);
532
+ encoded[i + 1] = encodeLookup.get(y >> 12 & 63);
533
+ encoded[i + 2] = encodeLookup.get(y >> 6 & 63);
534
+ encoded[i + 3] = encodeLookup.get(y & 63);
535
+ }
536
+ let base64 = decoder.decode(new Uint8Array(encoded.buffer, encoded.byteOffset, n));
537
+ if (url) base64 = base64.replace(/\+/g, "-").replace(/\//g, "_");
538
+ else {
539
+ if (k === 1) base64 += "==";
540
+ if (k === 2) base64 += "=";
541
+ }
542
+ return base64;
543
+ }
544
+ function encodedLength2(n) {
545
+ return Math.ceil(n / 3) * 4;
546
+ }
547
+ function decodedLength(n) {
548
+ let rem = n % 4;
549
+ return (n >> 2) * 3 + (rem && rem - 1);
550
+ }
551
+
552
+ // src/encoding/hex.ts
553
+ var hex_exports = {};
554
+ __export(hex_exports, {
555
+ decode: () => decode2,
556
+ decodedLength: () => decodedLength2,
557
+ encode: () => encode2,
558
+ encodedLength: () => encodedLength3
559
+ });
560
+ var hexSliceLookupTable = (function() {
561
+ const alphabet2 = "0123456789abcdef";
562
+ const table = Array.from({ length: 256 });
563
+ for (let i = 0; i < 16; ++i) {
564
+ const i16 = i * 16;
565
+ for (let j = 0; j < 16; ++j) {
566
+ table[i16 + j] = alphabet2[i] + alphabet2[j];
567
+ }
568
+ }
569
+ return table;
570
+ })();
571
+ var hexCharValueTable = {
572
+ 0: 0,
573
+ 1: 1,
574
+ 2: 2,
575
+ 3: 3,
576
+ 4: 4,
577
+ 5: 5,
578
+ 6: 6,
579
+ 7: 7,
580
+ 8: 8,
581
+ 9: 9,
582
+ a: 10,
583
+ b: 11,
584
+ c: 12,
585
+ d: 13,
586
+ e: 14,
587
+ f: 15,
588
+ A: 10,
589
+ B: 11,
590
+ C: 12,
591
+ D: 13,
592
+ E: 14,
593
+ F: 15
594
+ };
595
+ var HasToHex = typeof Uint8Array.prototype.toHex === "function";
596
+ var HasFromHex = typeof Uint8Array.fromHex === "function";
597
+ function encode2(buf) {
598
+ if (typeof Buffer !== "undefined") return Buffer.from(buf).toString("hex");
599
+ if (HasToHex) return buf.toHex();
600
+ let out = "";
601
+ for (let i = 0; i < buf.byteLength; ++i) out += hexSliceLookupTable[buf[i]];
602
+ return out;
603
+ }
604
+ function decode2(data) {
605
+ if (typeof Buffer !== "undefined") {
606
+ let buf2 = Buffer.from(data, "hex");
607
+ return new Uint8Array(buf2.buffer, buf2.byteOffset, buf2.byteLength);
608
+ }
609
+ if (HasFromHex) return Uint8Array.fromHex(data);
610
+ let buf = u8_exports.allocate(Math.ceil(data.length / 2));
611
+ let dataLength = data.length;
612
+ let length = Math.min(buf.length, dataLength / 2);
613
+ let i;
614
+ for (i = 0; i < length; ++i) {
615
+ let a = hexCharValueTable[data[i * 2]];
616
+ let b = hexCharValueTable[data[i * 2 + 1]];
617
+ if (a === void 0 || b === void 0) throw new TypeError("Invalid hex string.", { cause: { data } });
618
+ buf[i] = a << 4 | b;
619
+ }
620
+ return buf;
621
+ }
622
+ function encodedLength3(n) {
623
+ return n * 2;
624
+ }
625
+ function decodedLength2(n) {
626
+ return Math.ceil(n / 2);
627
+ }
628
+
629
+ // src/iterate/enumerate.ts
630
+ function enumerate(iterable) {
631
+ const iterator = iterable[Symbol.iterator]();
632
+ let idx = 0;
633
+ return {
634
+ [Symbol.iterator]() {
635
+ return this;
636
+ },
637
+ next() {
638
+ let res = iterator.next();
639
+ if (res.done) return res;
640
+ return { done: false, value: [idx++, res.value] };
641
+ }
642
+ };
643
+ }
644
+
645
+ // src/misc/assert.ts
646
+ function assert(condition, message) {
647
+ if (!condition) throw new Error(typeof message === "string" ? message : "Assertion failed.", { cause: message });
648
+ }
649
+ function assertHashKey(obj, key) {
650
+ if (!(key in obj)) throw new Error(`Key ${JSON.stringify(key)} not found in object.`, { cause: { obj, key } });
651
+ }
652
+ function unsafeCastType(value) {
653
+ }
654
+ function assertNotNull(value) {
655
+ if (value === null || void 0) throw new Error(`Value is ${value}.`);
656
+ }
657
+ function asNonNull(value) {
658
+ assertNotNull(value);
659
+ return value;
660
+ }
661
+ function assertMatches(str, regex) {
662
+ let match = str.match(regex);
663
+ if (!match) throw new Error(`${JSON.stringify(str)} does not match ${regex}.`, { cause: { str, regex } });
664
+ return match;
665
+ }
666
+
667
+ // src/misc/composer.ts
668
+ function composeMiddlewares(middlewares, final) {
669
+ middlewares = middlewares.slice();
670
+ if (final == null)
671
+ return function(context, next) {
672
+ function dispatch2(i, ctx) {
673
+ let fn = middlewares[i] ?? next;
674
+ return fn(ctx, dispatch2.bind(null, i + 1));
675
+ }
676
+ return dispatch2(0, context);
677
+ };
678
+ middlewares.push(final);
679
+ function dispatch(i, ctx) {
680
+ let fn = middlewares[i];
681
+ return fn(ctx, boundDispatches[i + 1]);
682
+ }
683
+ let boundDispatches = [];
684
+ for (let i = 0; i < middlewares.length; i++) {
685
+ boundDispatches.push(dispatch.bind(null, i));
686
+ }
687
+ return function(context) {
688
+ return boundDispatches[0](context);
689
+ };
690
+ }
691
+
692
+ // src/misc/guards.ts
693
+ var isNotUndefined = (val) => val !== void 0;
694
+ var isNotNull = (val) => val !== null;
695
+ var isBoolean = (val) => typeof val === "boolean";
696
+ var isTruthy = (val) => Boolean(val);
697
+ var isFalsy = (val) => !val;
698
+ var isFunction = (val) => typeof val === "function";
699
+ var isNumber = (val) => typeof val === "number";
700
+ var isString = (val) => typeof val === "string";
701
+ var isSymbol = (val) => typeof val === "symbol";
702
+ var isBigInt = (val) => typeof val === "bigint";
703
+ var isObject = (val) => typeof val === "object" && val !== null;
704
+
705
+ // src/misc/noop.ts
706
+ function noop() {
707
+ }
708
+
709
+ // src/misc/objects.ts
710
+ function objectKeys(obj) {
711
+ return Object.keys(obj);
712
+ }
713
+ function objectEntries(obj) {
714
+ return Object.entries(obj);
715
+ }
716
+ function clearUndefinedInPlace(obj) {
717
+ for (const key in obj) {
718
+ if (!Object.hasOwn(obj, key)) continue;
719
+ if (obj[key] === void 0) {
720
+ delete obj[key];
721
+ }
722
+ }
723
+ }
724
+ function deepMerge(into, from, options = {}) {
725
+ if (!Array.isArray(from)) from = [from];
726
+ if (from.length === 0) return into;
727
+ const {
728
+ undefined: undefinedStrategy = "ignore",
729
+ properties: propertiesStrategy = "replace",
730
+ arrays: arraysStrategy = "replace",
731
+ objects: objectsStrategy = "merge"
732
+ } = options;
733
+ for (let i = 0; i < from.length; i++) {
734
+ const source = from[i];
735
+ for (const key in source) {
736
+ if (!Object.hasOwn(source, key)) continue;
737
+ const value = source[key];
738
+ const existing = into[key];
739
+ if (value === void 0) {
740
+ if (undefinedStrategy === "replace") {
741
+ ;
742
+ into[key] = void 0;
743
+ }
744
+ continue;
745
+ }
746
+ if (Array.isArray(value)) {
747
+ if (arraysStrategy === "merge" && Array.isArray(existing)) {
748
+ existing.push(...value);
749
+ } else if (arraysStrategy === "ignore" && existing !== void 0) {
750
+ } else {
751
+ ;
752
+ into[key] = [...value];
753
+ }
754
+ continue;
755
+ }
756
+ if (typeof value === "object" && value !== null) {
757
+ if (objectsStrategy === "merge" && typeof existing === "object" && existing !== null) {
758
+ ;
759
+ into[key] = deepMerge(existing, value, options);
760
+ } else if (objectsStrategy === "ignore" && existing !== void 0) {
761
+ } else {
762
+ ;
763
+ into[key] = { ...value };
764
+ }
765
+ continue;
766
+ }
767
+ if (propertiesStrategy === "ignore" && existing !== void 0) {
768
+ } else {
769
+ ;
770
+ into[key] = value;
771
+ }
772
+ }
773
+ }
774
+ return into;
775
+ }
776
+
777
+ // src/misc/string.ts
778
+ function splitOnce(str, separator) {
779
+ let idx = str.indexOf(separator);
780
+ if (idx === -1) throw new RangeError(`Separator not found: ${separator}.`, { cause: { str, separator } });
781
+ return [str.slice(0, idx), str.slice(idx + separator.length)];
782
+ }
783
+ function assertStartsWith(str, prefix) {
784
+ if (!str.startsWith(prefix))
785
+ throw new TypeError(`String does not starts with ${prefix}.`, { cause: { str, prefix } });
786
+ }
787
+ function assertsEndsWith(str, suffix) {
788
+ if (!str.endsWith(suffix)) throw new TypeError(`String does not ends with ${suffix}.`, { cause: { str, suffix } });
789
+ }
790
+
791
+ // src/not-sync/timers.ts
792
+ var timers_exports = {};
793
+ __export(timers_exports, {
794
+ clearInterval: () => clearIntervalWrap,
795
+ clearTimeout: () => clearTimeoutWrap,
796
+ setInterval: () => setIntervalWrap,
797
+ setTimeout: () => setTimeoutWrap
798
+ });
799
+ var setTimeoutWrap = ((...args) => setTimeout(...args));
800
+ var setIntervalWrap = ((...args) => setInterval(...args));
801
+ var clearTimeoutWrap = ((...args) => clearTimeout(...args));
802
+ var clearIntervalWrap = ((...args) => clearInterval(...args));
803
+
804
+ // src/not-sync/async-interval.ts
805
+ var AsyncInterval = class {
806
+ #handler;
807
+ #interval;
808
+ #timer;
809
+ #onError = noop;
810
+ #stopped = true;
811
+ #abortController = new AbortController();
812
+ constructor(handler, interval) {
813
+ this.#handler = handler;
814
+ this.#interval = interval;
815
+ }
816
+ start(after = this.#interval) {
817
+ this.stop();
818
+ this.#stopped = false;
819
+ this.#timer = setTimeoutWrap(this.#onTimeout, after);
820
+ }
821
+ startNow() {
822
+ this.stop();
823
+ this.#stopped = false;
824
+ this.#onTimeout();
825
+ }
826
+ stop() {
827
+ this.#abortController.abort();
828
+ this.#abortController = new AbortController();
829
+ if (this.#timer != null) {
830
+ clearTimeoutWrap(this.#timer);
831
+ this.#timer = void 0;
832
+ }
833
+ this.#stopped = true;
834
+ }
835
+ onError(handler) {
836
+ this.#onError = handler;
837
+ }
838
+ #onTimeout = () => {
839
+ this.#timer = void 0;
840
+ void (async () => {
841
+ try {
842
+ await this.#handler(this.#abortController.signal);
843
+ } catch (err) {
844
+ this.#onError(err);
845
+ }
846
+ if (this.#stopped) return;
847
+ this.#timer = setTimeoutWrap(this.#onTimeout, this.#interval);
848
+ })();
849
+ };
850
+ };
851
+
852
+ // src/structures/_iterator.ts
853
+ var _hasIteratorFrom = null;
854
+ function maybeWrapIterator(iter) {
855
+ if (_hasIteratorFrom === null) {
856
+ _hasIteratorFrom = typeof globalThis.Iterator !== "undefined" && "from" in globalThis.Iterator;
857
+ }
858
+ if (_hasIteratorFrom) {
859
+ return globalThis.Iterator.from(iter);
860
+ }
861
+ return iter;
862
+ }
863
+
864
+ // src/structures/custom-map.ts
865
+ var CustomMap = class {
866
+ clear;
867
+ #map;
868
+ #mapperTo;
869
+ #mapperFrom;
870
+ constructor(externalToInternal, internalToExternal) {
871
+ this.#mapperTo = externalToInternal;
872
+ this.#mapperFrom = internalToExternal;
873
+ let map = this.#map = /* @__PURE__ */ new Map();
874
+ this.clear = map.clear.bind(this.#map);
875
+ }
876
+ get size() {
877
+ return this.#map.size;
878
+ }
879
+ get [Symbol.toStringTag]() {
880
+ return this.#map[Symbol.toStringTag];
881
+ }
882
+ getInternalMap() {
883
+ return this.#map;
884
+ }
885
+ delete(key) {
886
+ return this.#map.delete(this.#mapperTo(key));
887
+ }
888
+ forEach(cb, thisArg) {
889
+ return this.#map.forEach((value, key) => {
890
+ cb.call(thisArg, value, this.#mapperFrom(key), this);
891
+ });
892
+ }
893
+ get(key) {
894
+ return this.#map.get(this.#mapperTo(key));
895
+ }
896
+ has(key) {
897
+ return this.#map.has(this.#mapperTo(key));
898
+ }
899
+ set(key, value) {
900
+ this.#map.set(this.#mapperTo(key), value);
901
+ return this;
902
+ }
903
+ getOrInsert(key, value) {
904
+ if (!this.#map.getOrInsert) {
905
+ return value;
906
+ }
907
+ return this.#map.getOrInsert(this.#mapperTo(key), value);
908
+ }
909
+ getOrInsertComputed(key, callback) {
910
+ return this.#map.getOrInsertComputed(this.#mapperTo(key), (key2) => callback(this.#mapperFrom(key2)));
911
+ }
912
+ entries() {
913
+ let inner = this.#map.entries();
914
+ const iterator = {
915
+ [Symbol.iterator]: () => iterator,
916
+ next: () => {
917
+ let { done, value } = inner.next();
918
+ if (done) return { done, value };
919
+ return {
920
+ done,
921
+ value: [this.#mapperFrom(value[0]), value[1]]
922
+ };
923
+ }
924
+ };
925
+ return maybeWrapIterator(iterator);
926
+ }
927
+ keys() {
928
+ let inner = this.#map.keys();
929
+ const iterator = {
930
+ [Symbol.iterator]: () => iterator,
931
+ next: () => {
932
+ let { done, value } = inner.next();
933
+ if (done) return { done, value };
934
+ return { done, value: this.#mapperFrom(value) };
935
+ }
936
+ };
937
+ return maybeWrapIterator(iterator);
938
+ }
939
+ values() {
940
+ let inner = this.#map.values();
941
+ const iterator = {
942
+ [Symbol.iterator]: () => iterator,
943
+ next: () => {
944
+ let { done, value } = inner.next();
945
+ if (done) return { done, value };
946
+ return { done, value };
947
+ }
948
+ };
949
+ return maybeWrapIterator(iterator);
950
+ }
951
+ [Symbol.iterator]() {
952
+ return this.entries();
953
+ }
954
+ };
955
+
956
+ // src/structures/custom-set.ts
957
+ var CustomSet = class _CustomSet {
958
+ clear;
959
+ #set;
960
+ #mapperTo;
961
+ #mapperFrom;
962
+ constructor(externalToInternal, internalToExternal) {
963
+ this.#mapperTo = externalToInternal;
964
+ this.#mapperFrom = internalToExternal;
965
+ let set = this.#set = /* @__PURE__ */ new Set();
966
+ this.clear = set.clear.bind(set);
967
+ }
968
+ get size() {
969
+ return this.#set.size;
970
+ }
971
+ get [Symbol.toStringTag]() {
972
+ return this.#set[Symbol.toStringTag];
973
+ }
974
+ add(value) {
975
+ this.#set.add(this.#mapperTo(value));
976
+ return this;
977
+ }
978
+ delete(value) {
979
+ return this.#set.delete(this.#mapperTo(value));
980
+ }
981
+ forEach(cb, thisArg) {
982
+ this.#set.forEach((value) => {
983
+ let mapped = this.#mapperFrom(value);
984
+ cb.call(thisArg, mapped, mapped, this);
985
+ });
986
+ }
987
+ has(value) {
988
+ return this.#set.has(this.#mapperTo(value));
989
+ }
990
+ entries() {
991
+ let inner = this.#set.entries();
992
+ const iterator = {
993
+ [Symbol.iterator]: () => iterator,
994
+ next: () => {
995
+ let { done, value } = inner.next();
996
+ if (done) return { done, value };
997
+ let mapped = this.#mapperFrom(value[0]);
998
+ return {
999
+ done,
1000
+ value: [mapped, mapped]
1001
+ };
1002
+ }
1003
+ };
1004
+ return maybeWrapIterator(iterator);
1005
+ }
1006
+ keys() {
1007
+ let inner = this.#set.keys();
1008
+ const iterator = {
1009
+ [Symbol.iterator]: () => iterator,
1010
+ next: () => {
1011
+ let { done, value } = inner.next();
1012
+ if (done) return { done, value };
1013
+ return { done, value: this.#mapperFrom(value) };
1014
+ }
1015
+ };
1016
+ return maybeWrapIterator(iterator);
1017
+ }
1018
+ values() {
1019
+ return this.keys();
1020
+ }
1021
+ union(other) {
1022
+ let newSet = new _CustomSet(
1023
+ (k) => this.#mapperTo(k),
1024
+ (k) => this.#mapperFrom(k)
1025
+ );
1026
+ this.#set.forEach((v) => newSet.add(this.#mapperFrom(v)));
1027
+ other.forEach((v) => newSet.add(v));
1028
+ return newSet;
1029
+ }
1030
+ intersection(other) {
1031
+ let newSet = new _CustomSet(
1032
+ (k) => this.#mapperTo(k),
1033
+ (k) => this.#mapperFrom(k)
1034
+ );
1035
+ this.#set.forEach((v) => {
1036
+ let ext = this.#mapperFrom(v);
1037
+ if (other.has(ext)) newSet.add(ext);
1038
+ });
1039
+ return newSet;
1040
+ }
1041
+ difference(other) {
1042
+ let newSet = new _CustomSet(this.#mapperTo, this.#mapperFrom);
1043
+ this.#set.forEach((v) => {
1044
+ let ext = this.#mapperFrom(v);
1045
+ if (!other.has(ext)) newSet.add(ext);
1046
+ });
1047
+ return newSet;
1048
+ }
1049
+ symmetricDifference(other) {
1050
+ let newSet = new _CustomSet(
1051
+ (k) => this.#mapperTo(k),
1052
+ (k) => this.#mapperFrom(k)
1053
+ );
1054
+ this.#set.forEach((v) => {
1055
+ let ext = this.#mapperFrom(v);
1056
+ if (!other.has(ext)) newSet.add(ext);
1057
+ });
1058
+ other.forEach((v) => {
1059
+ if (!this.has(v)) newSet.add(v);
1060
+ });
1061
+ return newSet;
1062
+ }
1063
+ isSubsetOf(other) {
1064
+ for (let v of this.#set) {
1065
+ if (!other.has(this.#mapperFrom(v))) return false;
1066
+ }
1067
+ return true;
1068
+ }
1069
+ isSupersetOf(other) {
1070
+ for (let v of other) {
1071
+ if (!this.has(v)) return false;
1072
+ }
1073
+ return true;
1074
+ }
1075
+ isDisjointFrom(other) {
1076
+ for (let v of other) {
1077
+ if (this.has(v)) return false;
1078
+ }
1079
+ return true;
1080
+ }
1081
+ [Symbol.iterator]() {
1082
+ return this.keys();
1083
+ }
1084
+ getInternalSet() {
1085
+ return this.#set;
1086
+ }
1087
+ };
1088
+
1089
+ // src/structures/deque.ts
1090
+ var Log2 = Math.log(2);
1091
+ function _nextPowerOf2(n) {
1092
+ if (n <= 4) return 4;
1093
+ return 1 << Math.ceil(Math.log(n) / Log2);
1094
+ }
1095
+ var Deque = class {
1096
+ _list;
1097
+ _head = 0;
1098
+ _tail = 0;
1099
+ _capacityMask = 3;
1100
+ _capacity;
1101
+ constructor(array, options = {}) {
1102
+ this._capacity = options.capacity;
1103
+ if (array) {
1104
+ this.#fromArray(array);
1105
+ } else {
1106
+ this._list = new Array(4);
1107
+ }
1108
+ }
1109
+ get length() {
1110
+ return this._tail - this._head & this._capacityMask;
1111
+ }
1112
+ isEmpty() {
1113
+ return this._head === this._tail;
1114
+ }
1115
+ at(index) {
1116
+ let i = index;
1117
+ if (i !== (i | 0)) return void 0;
1118
+ const len = this.length;
1119
+ if (i >= len || i < -len) return void 0;
1120
+ if (i < 0) i += len;
1121
+ return this._list[this._head + i & this._capacityMask];
1122
+ }
1123
+ peekFront() {
1124
+ return this.isEmpty() ? void 0 : this._list[this._head];
1125
+ }
1126
+ peekBack() {
1127
+ return this.isEmpty() ? void 0 : this._list[this._tail - 1 + this._list.length & this._capacityMask];
1128
+ }
1129
+ pushFront(item) {
1130
+ this._head = this._head - 1 + this._list.length & this._capacityMask;
1131
+ this._list[this._head] = item;
1132
+ if (this._head === this._tail) this.#growArray();
1133
+ if (this._capacity !== void 0 && this.length > this._capacity) this.popBack();
1134
+ return this.length;
1135
+ }
1136
+ pushBack(item) {
1137
+ this._list[this._tail] = item;
1138
+ this._tail = this._tail + 1 & this._capacityMask;
1139
+ if (this._head === this._tail) this.#growArray();
1140
+ if (this._capacity !== void 0 && this.length > this._capacity) this.popFront();
1141
+ return this.length;
1142
+ }
1143
+ popFront() {
1144
+ if (this.isEmpty()) return void 0;
1145
+ const item = this._list[this._head];
1146
+ this._list[this._head] = void 0;
1147
+ this._head = this._head + 1 & this._capacityMask;
1148
+ if (this._head < 2 && this._tail > 1e4 && this._tail <= this._list.length >>> 2) this.#shrinkArray();
1149
+ return item;
1150
+ }
1151
+ popBack() {
1152
+ if (this.isEmpty()) return void 0;
1153
+ const idx = this._tail - 1 + this._list.length & this._capacityMask;
1154
+ const item = this._list[idx];
1155
+ this._list[idx] = void 0;
1156
+ this._tail = idx;
1157
+ if (this._head < 2 && this._tail > 1e4 && this._tail <= this._list.length >>> 2) this.#shrinkArray();
1158
+ return item;
1159
+ }
1160
+ removeOne(idx) {
1161
+ const len = this.length;
1162
+ if (idx >= len || idx < -len) return void 0;
1163
+ if (idx < 0) idx += len;
1164
+ const realIdx = this._head + idx & this._capacityMask;
1165
+ const item = this._list[realIdx];
1166
+ this.#remove(realIdx);
1167
+ return item;
1168
+ }
1169
+ removeBy(predicate) {
1170
+ let i = this._head;
1171
+ while (i !== this._tail) {
1172
+ const item = this._list[i];
1173
+ if (item !== void 0 && predicate(item)) {
1174
+ this.#remove(i);
1175
+ return;
1176
+ }
1177
+ i = i + 1 & this._capacityMask;
1178
+ }
1179
+ }
1180
+ clear() {
1181
+ this._list = new Array(this._list.length);
1182
+ this._head = 0;
1183
+ this._tail = 0;
1184
+ }
1185
+ indexOf(item) {
1186
+ let i = this._head;
1187
+ let pos = 0;
1188
+ while (i !== this._tail) {
1189
+ if (this._list[i] === item) return pos;
1190
+ i = i + 1 & this._capacityMask;
1191
+ pos++;
1192
+ }
1193
+ return -1;
1194
+ }
1195
+ findIndex(predicate) {
1196
+ let i = this._head;
1197
+ let pos = 0;
1198
+ while (i !== this._tail) {
1199
+ if (predicate(this._list[i])) return pos;
1200
+ i = i + 1 & this._capacityMask;
1201
+ pos++;
1202
+ }
1203
+ return -1;
1204
+ }
1205
+ find(predicate) {
1206
+ let i = this._head;
1207
+ while (i !== this._tail) {
1208
+ const item = this._list[i];
1209
+ if (item !== void 0 && predicate(item)) return item;
1210
+ i = i + 1 & this._capacityMask;
1211
+ }
1212
+ return void 0;
1213
+ }
1214
+ includes(item) {
1215
+ return this.indexOf(item) !== -1;
1216
+ }
1217
+ toArray() {
1218
+ const arr = new Array(this.length);
1219
+ let i = this._head;
1220
+ let k = 0;
1221
+ while (i !== this._tail) {
1222
+ arr[k++] = this._list[i];
1223
+ i = i + 1 & this._capacityMask;
1224
+ }
1225
+ return arr;
1226
+ }
1227
+ [Symbol.iterator]() {
1228
+ let i = this._head;
1229
+ return {
1230
+ next: () => {
1231
+ if (i === this._tail) return { done: true, value: void 0 };
1232
+ const value = this._list[i];
1233
+ i = i + 1 & this._capacityMask;
1234
+ return { done: false, value };
1235
+ }
1236
+ };
1237
+ }
1238
+ #fromArray(array) {
1239
+ const capacity = _nextPowerOf2(array.length);
1240
+ this._list = new Array(capacity);
1241
+ this._capacityMask = capacity - 1;
1242
+ this._tail = array.length;
1243
+ for (let i = 0; i < array.length; i++) this._list[i] = array[i];
1244
+ }
1245
+ #growArray() {
1246
+ const newCapacity = this._list.length << 1;
1247
+ const newList = new Array(newCapacity);
1248
+ let k = 0;
1249
+ let i = this._head;
1250
+ while (i !== this._tail) {
1251
+ newList[k++] = this._list[i];
1252
+ i = i + 1 & this._capacityMask;
1253
+ }
1254
+ this._list = newList;
1255
+ this._head = 0;
1256
+ this._tail = k;
1257
+ this._capacityMask = newCapacity - 1;
1258
+ }
1259
+ #shrinkArray() {
1260
+ if (this._list.length <= 4) return;
1261
+ const newCapacity = this._list.length >>> 1;
1262
+ const newList = new Array(newCapacity);
1263
+ let k = 0;
1264
+ let i = this._head;
1265
+ while (i !== this._tail) {
1266
+ newList[k++] = this._list[i];
1267
+ i = i + 1 & this._capacityMask;
1268
+ }
1269
+ this._list = newList;
1270
+ this._head = 0;
1271
+ this._tail = k;
1272
+ this._capacityMask = newCapacity - 1;
1273
+ }
1274
+ #remove(idx) {
1275
+ const mask = this._capacityMask;
1276
+ const len = this._list.length;
1277
+ if (idx - this._head < this.length - (idx - this._head)) {
1278
+ let i = idx;
1279
+ while (i > this._head) {
1280
+ this._list[i] = this._list[i - 1 + len & mask];
1281
+ i = i - 1 + len & mask;
1282
+ }
1283
+ this._list[this._head] = void 0;
1284
+ this._head = this._head + 1 & mask;
1285
+ } else {
1286
+ let i = idx;
1287
+ while (i !== this._tail) {
1288
+ this._list[i] = this._list[i + 1 & mask];
1289
+ i = i + 1 & mask;
1290
+ }
1291
+ this._list[this._tail - 1 + len & mask] = void 0;
1292
+ this._tail = this._tail - 1 + len & mask;
1293
+ }
1294
+ }
1295
+ };
1296
+
1297
+ // src/structures/lru-map.ts
1298
+ var LruMap = class {
1299
+ #capacity;
1300
+ #head;
1301
+ #tail;
1302
+ #map;
1303
+ #size = 0;
1304
+ constructor(capacity, MapImpl = Map) {
1305
+ this.#capacity = capacity;
1306
+ this.#map = new MapImpl();
1307
+ }
1308
+ get size() {
1309
+ return this.#size;
1310
+ }
1311
+ get(key) {
1312
+ let item = this.#map.get(key);
1313
+ if (!item) return void 0;
1314
+ this.#markUsed(item);
1315
+ return item.value;
1316
+ }
1317
+ has(key) {
1318
+ return this.#map.has(key);
1319
+ }
1320
+ set(key, value) {
1321
+ let item = this.#map.get(key);
1322
+ if (item) {
1323
+ item.value = value;
1324
+ this.#markUsed(item);
1325
+ return;
1326
+ }
1327
+ item = {
1328
+ key,
1329
+ value,
1330
+ next: void 0,
1331
+ prev: void 0
1332
+ };
1333
+ this.#map.set(key, item);
1334
+ if (this.#head) {
1335
+ this.#head.prev = item;
1336
+ item.next = this.#head;
1337
+ } else {
1338
+ this.#tail = item;
1339
+ }
1340
+ this.#head = item;
1341
+ this.#size += 1;
1342
+ if (this.#size > this.#capacity) {
1343
+ let oldest = this.#tail;
1344
+ if (oldest) this.#remove(oldest);
1345
+ }
1346
+ }
1347
+ delete(key) {
1348
+ let item = this.#map.get(key);
1349
+ if (item) this.#remove(item);
1350
+ }
1351
+ clear() {
1352
+ this.#map.clear();
1353
+ this.#head = void 0;
1354
+ this.#tail = void 0;
1355
+ this.#size = 0;
1356
+ }
1357
+ #markUsed(item) {
1358
+ if (item === this.#head) return;
1359
+ if (item.prev) {
1360
+ if (item === this.#tail) this.#tail = item.prev;
1361
+ item.prev.next = item.next;
1362
+ }
1363
+ if (item.next) item.next.prev = item.prev;
1364
+ item.prev = void 0;
1365
+ item.next = this.#head;
1366
+ if (this.#head) this.#head.prev = item;
1367
+ this.#head = item;
1368
+ }
1369
+ #remove(item) {
1370
+ if (item.prev) {
1371
+ this.#tail = item.prev;
1372
+ this.#tail.next = void 0;
1373
+ } else {
1374
+ this.#tail = void 0;
1375
+ this.#head = void 0;
1376
+ }
1377
+ item.prev = item.next = void 0;
1378
+ this.#map.delete(item.key);
1379
+ this.#size -= 1;
1380
+ }
1381
+ };
1382
+
1383
+ // src/structures/lru-set.ts
1384
+ var LruSet = class {
1385
+ #capacity;
1386
+ #head;
1387
+ #tail;
1388
+ #set;
1389
+ constructor(capacity, SetImpl = Set) {
1390
+ this.#capacity = capacity;
1391
+ this.#set = new SetImpl();
1392
+ }
1393
+ get size() {
1394
+ return this.#set.size;
1395
+ }
1396
+ add(value) {
1397
+ if (this.#set.has(value)) return;
1398
+ if (!this.#head) this.#head = { value };
1399
+ if (!this.#tail) this.#tail = this.#head;
1400
+ else {
1401
+ this.#tail.next = { value };
1402
+ this.#tail = this.#tail.next;
1403
+ }
1404
+ this.#set.add(value);
1405
+ if (this.#set.size > this.#capacity && this.#head !== void 0) {
1406
+ this.#set.delete(this.#head.value);
1407
+ this.#head = this.#head.next;
1408
+ }
1409
+ }
1410
+ has(value) {
1411
+ return this.#set.has(value);
1412
+ }
1413
+ clear() {
1414
+ this.#head = this.#tail = void 0;
1415
+ this.#set.clear();
1416
+ }
1417
+ };
1418
+
1419
+ // src/not-sync/async-lock.ts
1420
+ var AsyncLock = class {
1421
+ _queue = new Deque();
1422
+ async acquire() {
1423
+ let info;
1424
+ while (info = this._queue.peekFront()) {
1425
+ await info[0];
1426
+ }
1427
+ let unlock;
1428
+ const promise = new Promise((resolve) => {
1429
+ unlock = resolve;
1430
+ });
1431
+ this._queue.pushBack([promise, unlock]);
1432
+ }
1433
+ release() {
1434
+ const front = this._queue.popFront();
1435
+ if (!front) {
1436
+ throw new Error("Nothing to release.", { cause: this._queue });
1437
+ }
1438
+ front[1]();
1439
+ }
1440
+ with(func) {
1441
+ return (async () => {
1442
+ await this.acquire();
1443
+ try {
1444
+ return await func();
1445
+ } finally {
1446
+ this.release();
1447
+ }
1448
+ })();
1449
+ }
1450
+ };
1451
+
1452
+ // src/not-sync/deferred.ts
1453
+ var Deferred = class {
1454
+ resolve;
1455
+ reject;
1456
+ promise;
1457
+ constructor() {
1458
+ this.promise = new Promise((resolve, reject) => {
1459
+ ;
1460
+ this.resolve = resolve;
1461
+ this.reject = reject;
1462
+ });
1463
+ }
1464
+ };
1465
+ var DeferredTracked = class {
1466
+ promise;
1467
+ status;
1468
+ #resolve;
1469
+ #reject;
1470
+ constructor() {
1471
+ this.status = { type: "pending" };
1472
+ this.promise = new Promise((resolve, reject) => {
1473
+ this.#resolve = resolve;
1474
+ this.#reject = reject;
1475
+ });
1476
+ }
1477
+ get result() {
1478
+ if (this.status.type === "fulfilled") return this.status.value;
1479
+ return void 0;
1480
+ }
1481
+ get error() {
1482
+ if (this.status.type === "rejected") return this.status.reason;
1483
+ return void 0;
1484
+ }
1485
+ resolve(value) {
1486
+ if (this.status.type !== "pending") return;
1487
+ this.status = { type: "fulfilled", value };
1488
+ this.#resolve(value);
1489
+ }
1490
+ reject(reason) {
1491
+ if (this.status.type !== "pending") return;
1492
+ this.status = { type: "rejected", reason };
1493
+ this.#reject(reason);
1494
+ }
1495
+ };
1496
+
1497
+ // src/not-sync/async-queue.ts
1498
+ var AsyncQueue = class {
1499
+ queue;
1500
+ maxSize;
1501
+ #consumerWaiters = new Deque();
1502
+ #producerWaiters = new Deque();
1503
+ #ended = false;
1504
+ constructor(from, maxSize) {
1505
+ if (maxSize !== void 0 && maxSize < 1) {
1506
+ throw new Error("maxSize must be at least 1");
1507
+ }
1508
+ this.maxSize = maxSize;
1509
+ if (from) {
1510
+ if (from instanceof Deque) {
1511
+ this.queue = from;
1512
+ } else {
1513
+ this.queue = new Deque(from);
1514
+ }
1515
+ } else {
1516
+ this.queue = new Deque();
1517
+ }
1518
+ }
1519
+ get length() {
1520
+ return this.queue.length;
1521
+ }
1522
+ get isFull() {
1523
+ return this.maxSize !== void 0 && this.queue.length >= this.maxSize;
1524
+ }
1525
+ get remainingCapacity() {
1526
+ return this.maxSize !== void 0 ? this.maxSize - this.queue.length : Infinity;
1527
+ }
1528
+ get ended() {
1529
+ return this.#ended;
1530
+ }
1531
+ async enqueue(item) {
1532
+ if (this.#ended) {
1533
+ throw new Error("Cannot enqueue after .end() has been called");
1534
+ }
1535
+ if (this.#consumerWaiters.length > 0) {
1536
+ let waiter = this.#consumerWaiters.popFront();
1537
+ waiter.resolve(item);
1538
+ return;
1539
+ }
1540
+ if (this.isFull) {
1541
+ let waiter = new Deferred();
1542
+ this.#producerWaiters.pushBack(waiter);
1543
+ await waiter.promise;
1544
+ if (this.#ended) {
1545
+ throw new Error("Queue was ended while waiting to enqueue.");
1546
+ }
1547
+ }
1548
+ this.queue.pushBack(item);
1549
+ }
1550
+ tryEnqueue(item) {
1551
+ if (this.#ended || this.isFull || this.#consumerWaiters.length > 0) {
1552
+ return false;
1553
+ }
1554
+ this.queue.pushBack(item);
1555
+ return true;
1556
+ }
1557
+ end() {
1558
+ if (this.#ended) throw new Error(".end() has already been called.");
1559
+ this.#ended = true;
1560
+ for (let waiter of this.#consumerWaiters) {
1561
+ waiter.resolve(void 0);
1562
+ }
1563
+ this.#consumerWaiters.clear();
1564
+ let err = new Error("Queue has been ended.");
1565
+ for (let waiter of this.#producerWaiters) {
1566
+ waiter.reject(err);
1567
+ }
1568
+ this.#producerWaiters.clear();
1569
+ }
1570
+ peek() {
1571
+ return this.queue.peekFront();
1572
+ }
1573
+ next() {
1574
+ let item = this.queue.popFront();
1575
+ this.#wakeProducerIfNeeded();
1576
+ return item;
1577
+ }
1578
+ async nextOrWait() {
1579
+ if (this.queue.length > 0 || this.#ended) {
1580
+ let item = this.queue.popFront();
1581
+ this.#wakeProducerIfNeeded();
1582
+ return item;
1583
+ }
1584
+ let waiter = new Deferred();
1585
+ this.#consumerWaiters.pushBack(waiter);
1586
+ return waiter.promise;
1587
+ }
1588
+ [Symbol.asyncIterator]() {
1589
+ let iterator = {
1590
+ [Symbol.asyncIterator]: () => iterator,
1591
+ next: async () => {
1592
+ let item = await this.nextOrWait();
1593
+ if (item === void 0) return { done: true, value: void 0 };
1594
+ return { value: item, done: false };
1595
+ }
1596
+ };
1597
+ return iterator;
1598
+ }
1599
+ #wakeProducerIfNeeded() {
1600
+ if (this.#producerWaiters.length > 0 && !this.isFull) {
1601
+ let producer = this.#producerWaiters.popFront();
1602
+ producer.resolve();
1603
+ }
1604
+ }
1605
+ };
1606
+
1607
+ // src/not-sync/emitter.ts
1608
+ var Emitter = class {
1609
+ #listeners = [];
1610
+ #emit = noop;
1611
+ get length() {
1612
+ return this.#listeners.length;
1613
+ }
1614
+ add(listener) {
1615
+ this.#listeners.push(listener);
1616
+ this.#updateEmit();
1617
+ }
1618
+ forwardTo(emitter) {
1619
+ this.add(emitter.emit.bind(emitter));
1620
+ }
1621
+ remove(listener) {
1622
+ let idx = this.#listeners.indexOf(listener);
1623
+ if (idx === -1) return;
1624
+ this.#listeners.splice(idx, 1);
1625
+ this.#updateEmit();
1626
+ }
1627
+ emit(value) {
1628
+ this.#emit(value);
1629
+ }
1630
+ once(listener) {
1631
+ const once = (value) => {
1632
+ this.remove(once);
1633
+ listener(value);
1634
+ };
1635
+ this.add(once);
1636
+ }
1637
+ listeners() {
1638
+ return this.#listeners;
1639
+ }
1640
+ clear() {
1641
+ this.#listeners.length = 0;
1642
+ this.#emit = noop;
1643
+ }
1644
+ #emitFew = (value) => {
1645
+ let len = this.#listeners.length;
1646
+ this.#listeners[0](value);
1647
+ len > 1 && this.#listeners[1](value);
1648
+ len > 2 && this.#listeners[2](value);
1649
+ len > 3 && this.#listeners[3](value);
1650
+ len > 4 && this.#listeners[4](value);
1651
+ };
1652
+ #emitAll = (value) => {
1653
+ let len = this.#listeners.length;
1654
+ for (let i = 0; i < len; i++) {
1655
+ this.#listeners[i](value);
1656
+ }
1657
+ };
1658
+ #updateEmit = () => {
1659
+ let len = this.#listeners.length;
1660
+ if (len === 0) {
1661
+ this.#emit = noop;
1662
+ } else if (len === 1) {
1663
+ this.#emit = this.#listeners[0];
1664
+ } else if (len <= 5) {
1665
+ this.#emit = this.#emitFew;
1666
+ } else {
1667
+ this.#emit = this.#emitAll;
1668
+ }
1669
+ };
1670
+ };
1671
+
1672
+ // src/not-sync/async-resource.ts
1673
+ var AsyncResource = class {
1674
+ constructor(options) {
1675
+ this.options = options;
1676
+ this.#ctx = {
1677
+ current: null,
1678
+ currentFetchedAt: 0,
1679
+ currentExpiresAt: 0,
1680
+ isBackground: false,
1681
+ abort: null
1682
+ };
1683
+ }
1684
+ options;
1685
+ onUpdated = new Emitter();
1686
+ #abort;
1687
+ #ctx;
1688
+ #updating;
1689
+ #timeout;
1690
+ #destroyed = false;
1691
+ get isStale() {
1692
+ return this.#ctx.current === null || this.#ctx.currentExpiresAt <= performance.now();
1693
+ }
1694
+ setData(data, expiresIn) {
1695
+ if (this.#destroyed) return;
1696
+ let now = performance.now();
1697
+ this.#ctx.current = data;
1698
+ this.#ctx.currentExpiresAt = now + expiresIn;
1699
+ this.#ctx.currentFetchedAt = now;
1700
+ this.onUpdated.emit(this.#ctx);
1701
+ if (this.options.autoReload) {
1702
+ this.#clearTimer();
1703
+ let delay = expiresIn + (this.options.authReloadAfter ?? 0);
1704
+ this.#timeout = setTimeoutWrap(() => {
1705
+ if (this.#destroyed) return;
1706
+ this.#ctx.isBackground = true;
1707
+ this.update(true).catch(noop);
1708
+ }, delay);
1709
+ }
1710
+ }
1711
+ async update(force = false) {
1712
+ if (this.#destroyed) return;
1713
+ if (this.#updating) {
1714
+ await this.#updating.promise;
1715
+ return;
1716
+ }
1717
+ if (!force && !this.isStale) return;
1718
+ this.#abort?.abort();
1719
+ this.#abort = new AbortController();
1720
+ this.#ctx.abort = this.#abort.signal;
1721
+ this.#updating = new Deferred();
1722
+ let result;
1723
+ try {
1724
+ result = await this.options.fetcher(this.#ctx);
1725
+ } catch (err) {
1726
+ if (err.name === "AbortError") {
1727
+ this.#updating.resolve();
1728
+ this.#updating = void 0;
1729
+ this.#ctx.abort = null;
1730
+ return;
1731
+ }
1732
+ if (this.options.onError) this.options.onError(err, this.#ctx);
1733
+ else console.error(err);
1734
+ this.#updating.resolve();
1735
+ this.#updating = void 0;
1736
+ this.#ctx.abort = null;
1737
+ return;
1738
+ }
1739
+ this.#updating.resolve();
1740
+ this.#updating = void 0;
1741
+ this.#ctx.abort = null;
1742
+ if (!this.#destroyed) {
1743
+ this.setData(result.data, result.expiresIn);
1744
+ }
1745
+ }
1746
+ async get() {
1747
+ if (this.#destroyed) return null;
1748
+ if (this.options.swr === true && this.#ctx.current !== null) {
1749
+ let validator = this.options.swrValidator;
1750
+ if (!validator || validator(this.#ctx)) {
1751
+ this.#ctx.isBackground = true;
1752
+ this.update(true).catch(noop);
1753
+ return this.#ctx.current;
1754
+ }
1755
+ }
1756
+ this.#ctx.isBackground = false;
1757
+ await this.update();
1758
+ return this.#ctx.current;
1759
+ }
1760
+ getCached() {
1761
+ return this.#ctx.current;
1762
+ }
1763
+ destroy() {
1764
+ if (this.#destroyed) return;
1765
+ this.#destroyed = true;
1766
+ this.#clearTimer();
1767
+ this.#abort?.abort();
1768
+ this.onUpdated.clear();
1769
+ if (this.#updating) {
1770
+ this.#updating.resolve();
1771
+ this.#updating = void 0;
1772
+ }
1773
+ }
1774
+ #clearTimer() {
1775
+ if (this.#timeout) {
1776
+ clearTimeoutWrap(this.#timeout);
1777
+ this.#timeout = void 0;
1778
+ }
1779
+ }
1780
+ };
1781
+
1782
+ // src/not-sync/condition-variable.ts
1783
+ var ConditionVariable = class {
1784
+ #resolvers = [];
1785
+ wait() {
1786
+ return new Promise((resolve) => {
1787
+ this.#resolvers.push(resolve);
1788
+ });
1789
+ }
1790
+ notify() {
1791
+ let resolvers = this.#resolvers;
1792
+ this.#resolvers = [];
1793
+ for (let resolve of resolvers) {
1794
+ resolve();
1795
+ }
1796
+ }
1797
+ };
1798
+
1799
+ // src/not-sync/pool.ts
1800
+ var ErrorInfo = class {
1801
+ constructor(item, index, error) {
1802
+ this.item = item;
1803
+ this.index = index;
1804
+ this.error = error;
1805
+ }
1806
+ item;
1807
+ index;
1808
+ error;
1809
+ };
1810
+ var AggregateError = class extends Error {
1811
+ constructor(errors) {
1812
+ super(`AggregateError: ${errors.length} errors`);
1813
+ this.errors = errors;
1814
+ }
1815
+ errors;
1816
+ };
1817
+ async function asyncPool(iterable, executor, options = {}) {
1818
+ let { limit = 16, signal, onErrorStrategy } = options;
1819
+ if (limit <= 0) throw new RangeError(`Pool limit must be a positive integer.`);
1820
+ if (signal?.aborted) throw signal.reason;
1821
+ let iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();
1822
+ if (!iterator) throw new TypeError(`iterable must be iterable`);
1823
+ let idx = 0;
1824
+ let errors = [];
1825
+ let abortController = new AbortController();
1826
+ let abortSignal = signal ? AbortSignal.any([signal, abortController.signal]) : abortController.signal;
1827
+ async function worker() {
1828
+ while (true) {
1829
+ if (abortSignal.aborted) return;
1830
+ let result;
1831
+ try {
1832
+ result = await iterator.next();
1833
+ } catch (e) {
1834
+ abortController.abort(e);
1835
+ return;
1836
+ }
1837
+ if (result.done) return;
1838
+ if (abortSignal.aborted) return;
1839
+ let item = result.value;
1840
+ let thisIdx = idx++;
1841
+ try {
1842
+ await executor(item, thisIdx);
1843
+ } catch (err) {
1844
+ let action = onErrorStrategy?.(item, thisIdx, err) ?? "throw";
1845
+ if (action instanceof Promise) {
1846
+ action = await action;
1847
+ }
1848
+ if (action === "ignore") continue;
1849
+ if (action === "collect") {
1850
+ errors.push(new ErrorInfo(item, thisIdx, err));
1851
+ continue;
1852
+ }
1853
+ abortController.abort(err);
1854
+ return;
1855
+ }
1856
+ }
1857
+ }
1858
+ await Promise.all(Array.from({ length: limit }, worker));
1859
+ if (abortSignal.aborted) throw abortSignal.reason;
1860
+ if (errors.length > 0) throw new AggregateError(errors);
1861
+ }
1862
+ async function parallelMap(iterable, executor, options = {}) {
1863
+ let result = [];
1864
+ if (Array.isArray(iterable)) {
1865
+ result.length = iterable.length;
1866
+ }
1867
+ await asyncPool(
1868
+ iterable,
1869
+ async (item, index) => {
1870
+ result[index] = await executor(item, index);
1871
+ },
1872
+ options
1873
+ );
1874
+ return result;
1875
+ }
1876
+
1877
+ // src/not-sync/sleep.ts
1878
+ function sleep(ms, signal) {
1879
+ if (ms < 0) throw new RangeError("sleep: ms must be a non-negative number");
1880
+ return new Promise((resolve, reject) => {
1881
+ if (signal?.aborted) {
1882
+ reject(signal.reason ?? new DOMException("The operation was aborted.", "AbortError"));
1883
+ return;
1884
+ }
1885
+ let timeoutId = setTimeout(resolve, ms);
1886
+ signal?.addEventListener(
1887
+ "abort",
1888
+ () => {
1889
+ clearTimeout(timeoutId);
1890
+ reject(signal.reason ?? new DOMException("The operation was aborted.", "AbortError"));
1891
+ },
1892
+ { once: true }
1893
+ );
1894
+ });
1895
+ }
1896
+
1897
+ // src/types/error.ts
1898
+ function unknownToError(err) {
1899
+ if (err instanceof Error) {
1900
+ return err;
1901
+ }
1902
+ if (typeof err === "string") {
1903
+ return new Error(err);
1904
+ }
1905
+ let error = "";
1906
+ try {
1907
+ error = JSON.stringify(err);
1908
+ } catch (_) {
1909
+ }
1910
+ return new Error(error, { cause: err });
1911
+ }
1912
+ var NotImplementedError = class extends Error {
1913
+ constructor(message, options = {}) {
1914
+ super(`Not implemented${message != null ? `: ${message}` : ""}`, options);
1915
+ }
1916
+ };
1917
+ function throwNotImplemented(message, options) {
1918
+ throw new NotImplementedError(message, options);
1919
+ }
1920
+ function throwUnreachable() {
1921
+ throw new Error("Unreachable");
1922
+ }
1923
+ export {
1924
+ AggregateError,
1925
+ AsyncInterval,
1926
+ AsyncLock,
1927
+ AsyncQueue,
1928
+ AsyncResource,
1929
+ ConditionVariable,
1930
+ CustomMap,
1931
+ CustomSet,
1932
+ Deferred,
1933
+ DeferredTracked,
1934
+ Deque,
1935
+ Emitter,
1936
+ LruMap,
1937
+ LruSet,
1938
+ NotImplementedError,
1939
+ abs,
1940
+ asNonNull,
1941
+ assert,
1942
+ assertHashKey,
1943
+ assertMatches,
1944
+ assertNotNull,
1945
+ assertStartsWith,
1946
+ assertsEndsWith,
1947
+ asyncPool,
1948
+ base64_exports as base64,
1949
+ bitLength,
1950
+ clearUndefinedInPlace,
1951
+ composeMiddlewares,
1952
+ deepMerge,
1953
+ enumerate,
1954
+ euclideanGcd,
1955
+ fromBytes,
1956
+ hex_exports as hex,
1957
+ isBigInt,
1958
+ isBoolean,
1959
+ isFalsy,
1960
+ isFunction,
1961
+ isNotNull,
1962
+ isNotUndefined,
1963
+ isNumber,
1964
+ isObject,
1965
+ isString,
1966
+ isSymbol,
1967
+ isTruthy,
1968
+ max,
1969
+ max2,
1970
+ min,
1971
+ min2,
1972
+ modInv,
1973
+ modPowBinary,
1974
+ noop,
1975
+ objectEntries,
1976
+ objectKeys,
1977
+ parallelMap,
1978
+ sleep,
1979
+ splitOnce,
1980
+ throwNotImplemented,
1981
+ throwUnreachable,
1982
+ timers_exports as timers,
1983
+ toBytes,
1984
+ twoMultiplicity,
1985
+ typed_exports as typed,
1986
+ u8_exports as u8,
1987
+ unknownToError,
1988
+ unsafeCastType,
1989
+ utf8_exports as utf8
1990
+ };