@yorozu/utils 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/arrays/u8/misc.d.ts +1 -1
- package/async/async-queue.d.ts +9 -1
- package/compress/tables.d.ts +10 -0
- package/index.js +45 -16
- package/package.json +1 -1
package/arrays/u8/misc.d.ts
CHANGED
package/async/async-queue.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { Deque } from '../structures';
|
|
2
2
|
import { Deferred } from './deferred';
|
|
3
|
+
type WaitResult<T> = {
|
|
4
|
+
done: true;
|
|
5
|
+
} | {
|
|
6
|
+
done: false;
|
|
7
|
+
value: T;
|
|
8
|
+
};
|
|
3
9
|
export declare class AsyncQueue<T> {
|
|
4
10
|
readonly queue: Deque<T>;
|
|
5
11
|
readonly maxSize: number | undefined;
|
|
6
|
-
protected _consumerWaiters: Deque<Deferred<T
|
|
12
|
+
protected _consumerWaiters: Deque<Deferred<WaitResult<T>>>;
|
|
7
13
|
protected _producerWaiters: Deque<Deferred<void>>;
|
|
8
14
|
protected _ended: boolean;
|
|
9
15
|
constructor(from?: ArrayLike<T> | Deque<T>, maxSize?: number);
|
|
@@ -18,5 +24,7 @@ export declare class AsyncQueue<T> {
|
|
|
18
24
|
next(): T | undefined;
|
|
19
25
|
nextOrWait(): Promise<T | undefined>;
|
|
20
26
|
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
27
|
+
protected _waitForItem(): Promise<WaitResult<T>>;
|
|
21
28
|
protected _wakeProducerIfNeeded(): void;
|
|
22
29
|
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const fixedLengthExtraBits: Uint8Array;
|
|
2
|
+
export declare const fixedDistanceExtraBits: Uint8Array;
|
|
3
|
+
export declare const codeLengthOrder: Uint8Array;
|
|
4
|
+
export declare const lengthBase: Uint16Array;
|
|
5
|
+
export declare const lengthReverse: Int32Array;
|
|
6
|
+
export declare const distanceBase: Uint16Array;
|
|
7
|
+
export declare const distanceReverse: Int32Array;
|
|
8
|
+
export declare const reverseBits15: Uint16Array;
|
|
9
|
+
export declare const fixedLiteralLengths: Uint8Array;
|
|
10
|
+
export declare const fixedDistanceLengths: Uint8Array;
|
package/index.js
CHANGED
|
@@ -44,9 +44,14 @@ function lastIndexOf(haystack, needle, start = haystack.length - 1) {
|
|
|
44
44
|
return -1;
|
|
45
45
|
}
|
|
46
46
|
function indexOfArray(haystack, needle, start = 0) {
|
|
47
|
+
let length = haystack.length;
|
|
48
|
+
if (start < 0) {
|
|
49
|
+
start += length;
|
|
50
|
+
if (start < 0) start = 0;
|
|
51
|
+
}
|
|
47
52
|
if (needle.length === 0) return start;
|
|
48
53
|
if (needle.length === 1) return indexOf(haystack, needle[0], start);
|
|
49
|
-
let max =
|
|
54
|
+
let max = length - needle.length;
|
|
50
55
|
for (let i = start; i <= max; i++) if (haystack[i] === needle[0]) {
|
|
51
56
|
let j = 1;
|
|
52
57
|
for (; j < needle.length; j++) if (haystack[i + j] !== needle[j]) break;
|
|
@@ -55,9 +60,14 @@ function indexOfArray(haystack, needle, start = 0) {
|
|
|
55
60
|
return -1;
|
|
56
61
|
}
|
|
57
62
|
function lastIndexOfArray(haystack, needle, start = haystack.length - 1) {
|
|
63
|
+
let length = haystack.length;
|
|
64
|
+
if (start < 0) {
|
|
65
|
+
start += length;
|
|
66
|
+
if (start < 0) return -1;
|
|
67
|
+
} else if (start >= length) start = length - 1;
|
|
58
68
|
if (needle.length === 0) return start;
|
|
59
69
|
if (needle.length === 1) return lastIndexOf(haystack, needle[0], start);
|
|
60
|
-
let maxStart =
|
|
70
|
+
let maxStart = length - needle.length;
|
|
61
71
|
let effectiveStart = start > maxStart ? maxStart : start;
|
|
62
72
|
for (let i = effectiveStart; i >= 0; i--) {
|
|
63
73
|
let j = 0;
|
|
@@ -1354,16 +1364,16 @@ var LruSet = class {
|
|
|
1354
1364
|
var AsyncLock = class {
|
|
1355
1365
|
_queue = new Deque();
|
|
1356
1366
|
async acquire() {
|
|
1357
|
-
let info;
|
|
1358
|
-
while (info = this._queue.peekFront()) await info[0];
|
|
1359
1367
|
let unlock;
|
|
1360
|
-
|
|
1368
|
+
let promise = new Promise((resolve) => {
|
|
1361
1369
|
unlock = resolve;
|
|
1362
1370
|
});
|
|
1371
|
+
let prev = this._queue.peekBack();
|
|
1363
1372
|
this._queue.pushBack([promise, unlock]);
|
|
1373
|
+
if (prev) await prev[0];
|
|
1364
1374
|
}
|
|
1365
1375
|
release() {
|
|
1366
|
-
|
|
1376
|
+
let front = this._queue.popFront();
|
|
1367
1377
|
if (!front) throw new Error("Nothing to release.", { cause: this._queue });
|
|
1368
1378
|
front[1]();
|
|
1369
1379
|
}
|
|
@@ -1458,7 +1468,10 @@ var AsyncQueue = class {
|
|
|
1458
1468
|
if (this._ended) throw new Error("Cannot enqueue after .end() has been called");
|
|
1459
1469
|
while (true) {
|
|
1460
1470
|
if (this._consumerWaiters.length > 0) {
|
|
1461
|
-
this._consumerWaiters.popFront().resolve(
|
|
1471
|
+
this._consumerWaiters.popFront().resolve({
|
|
1472
|
+
done: false,
|
|
1473
|
+
value: item
|
|
1474
|
+
});
|
|
1462
1475
|
return;
|
|
1463
1476
|
}
|
|
1464
1477
|
if (!this.isFull) {
|
|
@@ -1474,7 +1487,10 @@ var AsyncQueue = class {
|
|
|
1474
1487
|
tryEnqueue(item) {
|
|
1475
1488
|
if (this._ended || this.isFull) return false;
|
|
1476
1489
|
if (this._consumerWaiters.length > 0) {
|
|
1477
|
-
this._consumerWaiters.popFront().resolve(
|
|
1490
|
+
this._consumerWaiters.popFront().resolve({
|
|
1491
|
+
done: false,
|
|
1492
|
+
value: item
|
|
1493
|
+
});
|
|
1478
1494
|
return true;
|
|
1479
1495
|
}
|
|
1480
1496
|
this.queue.pushBack(item);
|
|
@@ -1483,7 +1499,7 @@ var AsyncQueue = class {
|
|
|
1483
1499
|
end() {
|
|
1484
1500
|
if (this._ended) throw new Error(".end() has already been called.");
|
|
1485
1501
|
this._ended = true;
|
|
1486
|
-
for (let waiter of this._consumerWaiters) waiter.resolve(
|
|
1502
|
+
for (let waiter of this._consumerWaiters) waiter.resolve({ done: true });
|
|
1487
1503
|
this._consumerWaiters.clear();
|
|
1488
1504
|
let err = /* @__PURE__ */ new Error("Queue has been ended.");
|
|
1489
1505
|
for (let waiter of this._producerWaiters) waiter.reject(err);
|
|
@@ -1505,27 +1521,40 @@ var AsyncQueue = class {
|
|
|
1505
1521
|
return item;
|
|
1506
1522
|
}
|
|
1507
1523
|
if (this._ended) return;
|
|
1508
|
-
let
|
|
1509
|
-
|
|
1510
|
-
return
|
|
1524
|
+
let result = await this._waitForItem();
|
|
1525
|
+
if (result.done) return void 0;
|
|
1526
|
+
return result.value;
|
|
1511
1527
|
}
|
|
1512
1528
|
[Symbol.asyncIterator]() {
|
|
1513
1529
|
let iterator = {
|
|
1514
1530
|
[Symbol.asyncIterator]: () => iterator,
|
|
1515
1531
|
next: async () => {
|
|
1516
|
-
|
|
1517
|
-
|
|
1532
|
+
if (this.queue.length > 0) return {
|
|
1533
|
+
value: this.next(),
|
|
1534
|
+
done: false
|
|
1535
|
+
};
|
|
1536
|
+
if (this._ended) return {
|
|
1537
|
+
done: true,
|
|
1538
|
+
value: void 0
|
|
1539
|
+
};
|
|
1540
|
+
let result = await this._waitForItem();
|
|
1541
|
+
if (result.done) return {
|
|
1518
1542
|
done: true,
|
|
1519
1543
|
value: void 0
|
|
1520
1544
|
};
|
|
1521
1545
|
return {
|
|
1522
|
-
value:
|
|
1546
|
+
value: result.value,
|
|
1523
1547
|
done: false
|
|
1524
1548
|
};
|
|
1525
1549
|
}
|
|
1526
1550
|
};
|
|
1527
1551
|
return iterator;
|
|
1528
1552
|
}
|
|
1553
|
+
_waitForItem() {
|
|
1554
|
+
let waiter = new Deferred();
|
|
1555
|
+
this._consumerWaiters.pushBack(waiter);
|
|
1556
|
+
return waiter.promise;
|
|
1557
|
+
}
|
|
1529
1558
|
_wakeProducerIfNeeded() {
|
|
1530
1559
|
if (this._producerWaiters.length > 0 && !this.isFull) this._producerWaiters.popFront().resolve();
|
|
1531
1560
|
}
|
|
@@ -1784,7 +1813,7 @@ function sleep(ms, signal) {
|
|
|
1784
1813
|
}
|
|
1785
1814
|
let onAbort = () => {
|
|
1786
1815
|
clearTimeout(timeoutId);
|
|
1787
|
-
reject(signal
|
|
1816
|
+
reject(signal?.reason ?? new DOMException("The operation was aborted.", "AbortError"));
|
|
1788
1817
|
};
|
|
1789
1818
|
let timeoutId = setTimeout(() => {
|
|
1790
1819
|
signal?.removeEventListener("abort", onAbort);
|