@leofcoin/chain 1.7.23 → 1.7.25
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/exports/browser/chain.js
CHANGED
|
@@ -10,7 +10,10 @@ if (!globalThis.DEBUG) {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
const
|
|
13
|
+
const getLogger = (trace) => (trace ? console.trace : console.log);
|
|
14
|
+
|
|
15
|
+
const debug$5 = (target, text, trace) => {
|
|
16
|
+
const _logger = getLogger(trace);
|
|
14
17
|
if (!globalThis.DEBUG && globalThis.DEBUG.length === 0) return;
|
|
15
18
|
if (
|
|
16
19
|
globalThis.DEBUG === 'true' ||
|
|
@@ -19,9 +22,8 @@ const debug$5 = (target, text) => {
|
|
|
19
22
|
globalThis.DEBUG?.indexOf('*') !== -1 ||
|
|
20
23
|
globalThis.DEBUG?.indexOf(target.split('/')[0]) !== -1
|
|
21
24
|
)
|
|
22
|
-
if (text)
|
|
23
|
-
|
|
24
|
-
else console.trace('\x1b[34m\x1b[1m%s', `${target}`, '\x1b[0m');
|
|
25
|
+
if (text) _logger('\x1b[34m\x1b[1m%s', `${target}: ${text}`, '\x1b[0m');
|
|
26
|
+
else _logger('\x1b[34m\x1b[1m%s', `${target}`, '\x1b[0m');
|
|
25
27
|
};
|
|
26
28
|
|
|
27
29
|
const createDebugger = (target) => (text) => debug$5(target, text);
|
|
@@ -970,7 +972,7 @@ let SemVer$d = class SemVer {
|
|
|
970
972
|
do {
|
|
971
973
|
const a = this.build[i];
|
|
972
974
|
const b = other.build[i];
|
|
973
|
-
debug$3('
|
|
975
|
+
debug$3('build compare', i, a, b);
|
|
974
976
|
if (a === undefined && b === undefined) {
|
|
975
977
|
return 0
|
|
976
978
|
} else if (b === undefined) {
|
|
@@ -1417,797 +1419,46 @@ const coerce$1 = (version, options) => {
|
|
|
1417
1419
|
};
|
|
1418
1420
|
var coerce_1 = coerce$1;
|
|
1419
1421
|
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
hasRequiredIterator = 1;
|
|
1426
|
-
iterator = function (Yallist) {
|
|
1427
|
-
Yallist.prototype[Symbol.iterator] = function* () {
|
|
1428
|
-
for (let walker = this.head; walker; walker = walker.next) {
|
|
1429
|
-
yield walker.value;
|
|
1430
|
-
}
|
|
1431
|
-
};
|
|
1432
|
-
};
|
|
1433
|
-
return iterator;
|
|
1434
|
-
}
|
|
1435
|
-
|
|
1436
|
-
var yallist;
|
|
1437
|
-
var hasRequiredYallist;
|
|
1438
|
-
|
|
1439
|
-
function requireYallist () {
|
|
1440
|
-
if (hasRequiredYallist) return yallist;
|
|
1441
|
-
hasRequiredYallist = 1;
|
|
1442
|
-
yallist = Yallist;
|
|
1443
|
-
|
|
1444
|
-
Yallist.Node = Node;
|
|
1445
|
-
Yallist.create = Yallist;
|
|
1446
|
-
|
|
1447
|
-
function Yallist (list) {
|
|
1448
|
-
var self = this;
|
|
1449
|
-
if (!(self instanceof Yallist)) {
|
|
1450
|
-
self = new Yallist();
|
|
1451
|
-
}
|
|
1452
|
-
|
|
1453
|
-
self.tail = null;
|
|
1454
|
-
self.head = null;
|
|
1455
|
-
self.length = 0;
|
|
1456
|
-
|
|
1457
|
-
if (list && typeof list.forEach === 'function') {
|
|
1458
|
-
list.forEach(function (item) {
|
|
1459
|
-
self.push(item);
|
|
1460
|
-
});
|
|
1461
|
-
} else if (arguments.length > 0) {
|
|
1462
|
-
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
1463
|
-
self.push(arguments[i]);
|
|
1464
|
-
}
|
|
1465
|
-
}
|
|
1466
|
-
|
|
1467
|
-
return self
|
|
1468
|
-
}
|
|
1469
|
-
|
|
1470
|
-
Yallist.prototype.removeNode = function (node) {
|
|
1471
|
-
if (node.list !== this) {
|
|
1472
|
-
throw new Error('removing node which does not belong to this list')
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
|
-
var next = node.next;
|
|
1476
|
-
var prev = node.prev;
|
|
1477
|
-
|
|
1478
|
-
if (next) {
|
|
1479
|
-
next.prev = prev;
|
|
1480
|
-
}
|
|
1481
|
-
|
|
1482
|
-
if (prev) {
|
|
1483
|
-
prev.next = next;
|
|
1484
|
-
}
|
|
1485
|
-
|
|
1486
|
-
if (node === this.head) {
|
|
1487
|
-
this.head = next;
|
|
1488
|
-
}
|
|
1489
|
-
if (node === this.tail) {
|
|
1490
|
-
this.tail = prev;
|
|
1491
|
-
}
|
|
1492
|
-
|
|
1493
|
-
node.list.length--;
|
|
1494
|
-
node.next = null;
|
|
1495
|
-
node.prev = null;
|
|
1496
|
-
node.list = null;
|
|
1497
|
-
|
|
1498
|
-
return next
|
|
1499
|
-
};
|
|
1500
|
-
|
|
1501
|
-
Yallist.prototype.unshiftNode = function (node) {
|
|
1502
|
-
if (node === this.head) {
|
|
1503
|
-
return
|
|
1504
|
-
}
|
|
1505
|
-
|
|
1506
|
-
if (node.list) {
|
|
1507
|
-
node.list.removeNode(node);
|
|
1508
|
-
}
|
|
1509
|
-
|
|
1510
|
-
var head = this.head;
|
|
1511
|
-
node.list = this;
|
|
1512
|
-
node.next = head;
|
|
1513
|
-
if (head) {
|
|
1514
|
-
head.prev = node;
|
|
1515
|
-
}
|
|
1516
|
-
|
|
1517
|
-
this.head = node;
|
|
1518
|
-
if (!this.tail) {
|
|
1519
|
-
this.tail = node;
|
|
1520
|
-
}
|
|
1521
|
-
this.length++;
|
|
1522
|
-
};
|
|
1523
|
-
|
|
1524
|
-
Yallist.prototype.pushNode = function (node) {
|
|
1525
|
-
if (node === this.tail) {
|
|
1526
|
-
return
|
|
1527
|
-
}
|
|
1528
|
-
|
|
1529
|
-
if (node.list) {
|
|
1530
|
-
node.list.removeNode(node);
|
|
1531
|
-
}
|
|
1532
|
-
|
|
1533
|
-
var tail = this.tail;
|
|
1534
|
-
node.list = this;
|
|
1535
|
-
node.prev = tail;
|
|
1536
|
-
if (tail) {
|
|
1537
|
-
tail.next = node;
|
|
1538
|
-
}
|
|
1539
|
-
|
|
1540
|
-
this.tail = node;
|
|
1541
|
-
if (!this.head) {
|
|
1542
|
-
this.head = node;
|
|
1543
|
-
}
|
|
1544
|
-
this.length++;
|
|
1545
|
-
};
|
|
1546
|
-
|
|
1547
|
-
Yallist.prototype.push = function () {
|
|
1548
|
-
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
1549
|
-
push(this, arguments[i]);
|
|
1550
|
-
}
|
|
1551
|
-
return this.length
|
|
1552
|
-
};
|
|
1553
|
-
|
|
1554
|
-
Yallist.prototype.unshift = function () {
|
|
1555
|
-
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
1556
|
-
unshift(this, arguments[i]);
|
|
1557
|
-
}
|
|
1558
|
-
return this.length
|
|
1559
|
-
};
|
|
1560
|
-
|
|
1561
|
-
Yallist.prototype.pop = function () {
|
|
1562
|
-
if (!this.tail) {
|
|
1563
|
-
return undefined
|
|
1564
|
-
}
|
|
1565
|
-
|
|
1566
|
-
var res = this.tail.value;
|
|
1567
|
-
this.tail = this.tail.prev;
|
|
1568
|
-
if (this.tail) {
|
|
1569
|
-
this.tail.next = null;
|
|
1570
|
-
} else {
|
|
1571
|
-
this.head = null;
|
|
1572
|
-
}
|
|
1573
|
-
this.length--;
|
|
1574
|
-
return res
|
|
1575
|
-
};
|
|
1576
|
-
|
|
1577
|
-
Yallist.prototype.shift = function () {
|
|
1578
|
-
if (!this.head) {
|
|
1579
|
-
return undefined
|
|
1580
|
-
}
|
|
1581
|
-
|
|
1582
|
-
var res = this.head.value;
|
|
1583
|
-
this.head = this.head.next;
|
|
1584
|
-
if (this.head) {
|
|
1585
|
-
this.head.prev = null;
|
|
1586
|
-
} else {
|
|
1587
|
-
this.tail = null;
|
|
1588
|
-
}
|
|
1589
|
-
this.length--;
|
|
1590
|
-
return res
|
|
1591
|
-
};
|
|
1592
|
-
|
|
1593
|
-
Yallist.prototype.forEach = function (fn, thisp) {
|
|
1594
|
-
thisp = thisp || this;
|
|
1595
|
-
for (var walker = this.head, i = 0; walker !== null; i++) {
|
|
1596
|
-
fn.call(thisp, walker.value, i, this);
|
|
1597
|
-
walker = walker.next;
|
|
1598
|
-
}
|
|
1599
|
-
};
|
|
1600
|
-
|
|
1601
|
-
Yallist.prototype.forEachReverse = function (fn, thisp) {
|
|
1602
|
-
thisp = thisp || this;
|
|
1603
|
-
for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
|
|
1604
|
-
fn.call(thisp, walker.value, i, this);
|
|
1605
|
-
walker = walker.prev;
|
|
1606
|
-
}
|
|
1607
|
-
};
|
|
1608
|
-
|
|
1609
|
-
Yallist.prototype.get = function (n) {
|
|
1610
|
-
for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
|
|
1611
|
-
// abort out of the list early if we hit a cycle
|
|
1612
|
-
walker = walker.next;
|
|
1613
|
-
}
|
|
1614
|
-
if (i === n && walker !== null) {
|
|
1615
|
-
return walker.value
|
|
1616
|
-
}
|
|
1617
|
-
};
|
|
1618
|
-
|
|
1619
|
-
Yallist.prototype.getReverse = function (n) {
|
|
1620
|
-
for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
|
|
1621
|
-
// abort out of the list early if we hit a cycle
|
|
1622
|
-
walker = walker.prev;
|
|
1623
|
-
}
|
|
1624
|
-
if (i === n && walker !== null) {
|
|
1625
|
-
return walker.value
|
|
1626
|
-
}
|
|
1627
|
-
};
|
|
1628
|
-
|
|
1629
|
-
Yallist.prototype.map = function (fn, thisp) {
|
|
1630
|
-
thisp = thisp || this;
|
|
1631
|
-
var res = new Yallist();
|
|
1632
|
-
for (var walker = this.head; walker !== null;) {
|
|
1633
|
-
res.push(fn.call(thisp, walker.value, this));
|
|
1634
|
-
walker = walker.next;
|
|
1635
|
-
}
|
|
1636
|
-
return res
|
|
1637
|
-
};
|
|
1638
|
-
|
|
1639
|
-
Yallist.prototype.mapReverse = function (fn, thisp) {
|
|
1640
|
-
thisp = thisp || this;
|
|
1641
|
-
var res = new Yallist();
|
|
1642
|
-
for (var walker = this.tail; walker !== null;) {
|
|
1643
|
-
res.push(fn.call(thisp, walker.value, this));
|
|
1644
|
-
walker = walker.prev;
|
|
1645
|
-
}
|
|
1646
|
-
return res
|
|
1647
|
-
};
|
|
1648
|
-
|
|
1649
|
-
Yallist.prototype.reduce = function (fn, initial) {
|
|
1650
|
-
var acc;
|
|
1651
|
-
var walker = this.head;
|
|
1652
|
-
if (arguments.length > 1) {
|
|
1653
|
-
acc = initial;
|
|
1654
|
-
} else if (this.head) {
|
|
1655
|
-
walker = this.head.next;
|
|
1656
|
-
acc = this.head.value;
|
|
1657
|
-
} else {
|
|
1658
|
-
throw new TypeError('Reduce of empty list with no initial value')
|
|
1659
|
-
}
|
|
1660
|
-
|
|
1661
|
-
for (var i = 0; walker !== null; i++) {
|
|
1662
|
-
acc = fn(acc, walker.value, i);
|
|
1663
|
-
walker = walker.next;
|
|
1664
|
-
}
|
|
1665
|
-
|
|
1666
|
-
return acc
|
|
1667
|
-
};
|
|
1668
|
-
|
|
1669
|
-
Yallist.prototype.reduceReverse = function (fn, initial) {
|
|
1670
|
-
var acc;
|
|
1671
|
-
var walker = this.tail;
|
|
1672
|
-
if (arguments.length > 1) {
|
|
1673
|
-
acc = initial;
|
|
1674
|
-
} else if (this.tail) {
|
|
1675
|
-
walker = this.tail.prev;
|
|
1676
|
-
acc = this.tail.value;
|
|
1677
|
-
} else {
|
|
1678
|
-
throw new TypeError('Reduce of empty list with no initial value')
|
|
1679
|
-
}
|
|
1680
|
-
|
|
1681
|
-
for (var i = this.length - 1; walker !== null; i--) {
|
|
1682
|
-
acc = fn(acc, walker.value, i);
|
|
1683
|
-
walker = walker.prev;
|
|
1684
|
-
}
|
|
1685
|
-
|
|
1686
|
-
return acc
|
|
1687
|
-
};
|
|
1688
|
-
|
|
1689
|
-
Yallist.prototype.toArray = function () {
|
|
1690
|
-
var arr = new Array(this.length);
|
|
1691
|
-
for (var i = 0, walker = this.head; walker !== null; i++) {
|
|
1692
|
-
arr[i] = walker.value;
|
|
1693
|
-
walker = walker.next;
|
|
1694
|
-
}
|
|
1695
|
-
return arr
|
|
1696
|
-
};
|
|
1697
|
-
|
|
1698
|
-
Yallist.prototype.toArrayReverse = function () {
|
|
1699
|
-
var arr = new Array(this.length);
|
|
1700
|
-
for (var i = 0, walker = this.tail; walker !== null; i++) {
|
|
1701
|
-
arr[i] = walker.value;
|
|
1702
|
-
walker = walker.prev;
|
|
1703
|
-
}
|
|
1704
|
-
return arr
|
|
1705
|
-
};
|
|
1706
|
-
|
|
1707
|
-
Yallist.prototype.slice = function (from, to) {
|
|
1708
|
-
to = to || this.length;
|
|
1709
|
-
if (to < 0) {
|
|
1710
|
-
to += this.length;
|
|
1711
|
-
}
|
|
1712
|
-
from = from || 0;
|
|
1713
|
-
if (from < 0) {
|
|
1714
|
-
from += this.length;
|
|
1715
|
-
}
|
|
1716
|
-
var ret = new Yallist();
|
|
1717
|
-
if (to < from || to < 0) {
|
|
1718
|
-
return ret
|
|
1719
|
-
}
|
|
1720
|
-
if (from < 0) {
|
|
1721
|
-
from = 0;
|
|
1722
|
-
}
|
|
1723
|
-
if (to > this.length) {
|
|
1724
|
-
to = this.length;
|
|
1725
|
-
}
|
|
1726
|
-
for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
|
|
1727
|
-
walker = walker.next;
|
|
1728
|
-
}
|
|
1729
|
-
for (; walker !== null && i < to; i++, walker = walker.next) {
|
|
1730
|
-
ret.push(walker.value);
|
|
1731
|
-
}
|
|
1732
|
-
return ret
|
|
1733
|
-
};
|
|
1734
|
-
|
|
1735
|
-
Yallist.prototype.sliceReverse = function (from, to) {
|
|
1736
|
-
to = to || this.length;
|
|
1737
|
-
if (to < 0) {
|
|
1738
|
-
to += this.length;
|
|
1739
|
-
}
|
|
1740
|
-
from = from || 0;
|
|
1741
|
-
if (from < 0) {
|
|
1742
|
-
from += this.length;
|
|
1743
|
-
}
|
|
1744
|
-
var ret = new Yallist();
|
|
1745
|
-
if (to < from || to < 0) {
|
|
1746
|
-
return ret
|
|
1747
|
-
}
|
|
1748
|
-
if (from < 0) {
|
|
1749
|
-
from = 0;
|
|
1750
|
-
}
|
|
1751
|
-
if (to > this.length) {
|
|
1752
|
-
to = this.length;
|
|
1753
|
-
}
|
|
1754
|
-
for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
|
|
1755
|
-
walker = walker.prev;
|
|
1756
|
-
}
|
|
1757
|
-
for (; walker !== null && i > from; i--, walker = walker.prev) {
|
|
1758
|
-
ret.push(walker.value);
|
|
1759
|
-
}
|
|
1760
|
-
return ret
|
|
1761
|
-
};
|
|
1762
|
-
|
|
1763
|
-
Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
|
|
1764
|
-
if (start > this.length) {
|
|
1765
|
-
start = this.length - 1;
|
|
1766
|
-
}
|
|
1767
|
-
if (start < 0) {
|
|
1768
|
-
start = this.length + start;
|
|
1769
|
-
}
|
|
1770
|
-
|
|
1771
|
-
for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
|
|
1772
|
-
walker = walker.next;
|
|
1773
|
-
}
|
|
1774
|
-
|
|
1775
|
-
var ret = [];
|
|
1776
|
-
for (var i = 0; walker && i < deleteCount; i++) {
|
|
1777
|
-
ret.push(walker.value);
|
|
1778
|
-
walker = this.removeNode(walker);
|
|
1779
|
-
}
|
|
1780
|
-
if (walker === null) {
|
|
1781
|
-
walker = this.tail;
|
|
1782
|
-
}
|
|
1783
|
-
|
|
1784
|
-
if (walker !== this.head && walker !== this.tail) {
|
|
1785
|
-
walker = walker.prev;
|
|
1786
|
-
}
|
|
1787
|
-
|
|
1788
|
-
for (var i = 0; i < nodes.length; i++) {
|
|
1789
|
-
walker = insert(this, walker, nodes[i]);
|
|
1790
|
-
}
|
|
1791
|
-
return ret;
|
|
1792
|
-
};
|
|
1793
|
-
|
|
1794
|
-
Yallist.prototype.reverse = function () {
|
|
1795
|
-
var head = this.head;
|
|
1796
|
-
var tail = this.tail;
|
|
1797
|
-
for (var walker = head; walker !== null; walker = walker.prev) {
|
|
1798
|
-
var p = walker.prev;
|
|
1799
|
-
walker.prev = walker.next;
|
|
1800
|
-
walker.next = p;
|
|
1801
|
-
}
|
|
1802
|
-
this.head = tail;
|
|
1803
|
-
this.tail = head;
|
|
1804
|
-
return this
|
|
1805
|
-
};
|
|
1806
|
-
|
|
1807
|
-
function insert (self, node, value) {
|
|
1808
|
-
var inserted = node === self.head ?
|
|
1809
|
-
new Node(value, null, node, self) :
|
|
1810
|
-
new Node(value, node, node.next, self);
|
|
1811
|
-
|
|
1812
|
-
if (inserted.next === null) {
|
|
1813
|
-
self.tail = inserted;
|
|
1814
|
-
}
|
|
1815
|
-
if (inserted.prev === null) {
|
|
1816
|
-
self.head = inserted;
|
|
1817
|
-
}
|
|
1818
|
-
|
|
1819
|
-
self.length++;
|
|
1820
|
-
|
|
1821
|
-
return inserted
|
|
1822
|
-
}
|
|
1823
|
-
|
|
1824
|
-
function push (self, item) {
|
|
1825
|
-
self.tail = new Node(item, self.tail, null, self);
|
|
1826
|
-
if (!self.head) {
|
|
1827
|
-
self.head = self.tail;
|
|
1828
|
-
}
|
|
1829
|
-
self.length++;
|
|
1830
|
-
}
|
|
1422
|
+
class LRUCache {
|
|
1423
|
+
constructor () {
|
|
1424
|
+
this.max = 1000;
|
|
1425
|
+
this.map = new Map();
|
|
1426
|
+
}
|
|
1831
1427
|
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1428
|
+
get (key) {
|
|
1429
|
+
const value = this.map.get(key);
|
|
1430
|
+
if (value === undefined) {
|
|
1431
|
+
return undefined
|
|
1432
|
+
} else {
|
|
1433
|
+
// Remove the key from the map and add it to the end
|
|
1434
|
+
this.map.delete(key);
|
|
1435
|
+
this.map.set(key, value);
|
|
1436
|
+
return value
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1839
1439
|
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
}
|
|
1440
|
+
delete (key) {
|
|
1441
|
+
return this.map.delete(key)
|
|
1442
|
+
}
|
|
1844
1443
|
|
|
1845
|
-
|
|
1846
|
-
|
|
1444
|
+
set (key, value) {
|
|
1445
|
+
const deleted = this.delete(key);
|
|
1847
1446
|
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1447
|
+
if (!deleted && value !== undefined) {
|
|
1448
|
+
// If cache is full, delete the least recently used item
|
|
1449
|
+
if (this.map.size >= this.max) {
|
|
1450
|
+
const firstKey = this.map.keys().next().value;
|
|
1451
|
+
this.delete(firstKey);
|
|
1452
|
+
}
|
|
1854
1453
|
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
this.next = next;
|
|
1858
|
-
} else {
|
|
1859
|
-
this.next = null;
|
|
1860
|
-
}
|
|
1861
|
-
}
|
|
1454
|
+
this.map.set(key, value);
|
|
1455
|
+
}
|
|
1862
1456
|
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
requireIterator()(Yallist);
|
|
1866
|
-
} catch (er) {}
|
|
1867
|
-
return yallist;
|
|
1457
|
+
return this
|
|
1458
|
+
}
|
|
1868
1459
|
}
|
|
1869
1460
|
|
|
1870
|
-
var
|
|
1871
|
-
var hasRequiredLruCache;
|
|
1872
|
-
|
|
1873
|
-
function requireLruCache () {
|
|
1874
|
-
if (hasRequiredLruCache) return lruCache;
|
|
1875
|
-
hasRequiredLruCache = 1;
|
|
1876
|
-
|
|
1877
|
-
// A linked list to keep track of recently-used-ness
|
|
1878
|
-
const Yallist = requireYallist();
|
|
1879
|
-
|
|
1880
|
-
const MAX = Symbol('max');
|
|
1881
|
-
const LENGTH = Symbol('length');
|
|
1882
|
-
const LENGTH_CALCULATOR = Symbol('lengthCalculator');
|
|
1883
|
-
const ALLOW_STALE = Symbol('allowStale');
|
|
1884
|
-
const MAX_AGE = Symbol('maxAge');
|
|
1885
|
-
const DISPOSE = Symbol('dispose');
|
|
1886
|
-
const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
|
|
1887
|
-
const LRU_LIST = Symbol('lruList');
|
|
1888
|
-
const CACHE = Symbol('cache');
|
|
1889
|
-
const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');
|
|
1890
|
-
|
|
1891
|
-
const naiveLength = () => 1;
|
|
1892
|
-
|
|
1893
|
-
// lruList is a yallist where the head is the youngest
|
|
1894
|
-
// item, and the tail is the oldest. the list contains the Hit
|
|
1895
|
-
// objects as the entries.
|
|
1896
|
-
// Each Hit object has a reference to its Yallist.Node. This
|
|
1897
|
-
// never changes.
|
|
1898
|
-
//
|
|
1899
|
-
// cache is a Map (or PseudoMap) that matches the keys to
|
|
1900
|
-
// the Yallist.Node object.
|
|
1901
|
-
class LRUCache {
|
|
1902
|
-
constructor (options) {
|
|
1903
|
-
if (typeof options === 'number')
|
|
1904
|
-
options = { max: options };
|
|
1905
|
-
|
|
1906
|
-
if (!options)
|
|
1907
|
-
options = {};
|
|
1908
|
-
|
|
1909
|
-
if (options.max && (typeof options.max !== 'number' || options.max < 0))
|
|
1910
|
-
throw new TypeError('max must be a non-negative number')
|
|
1911
|
-
// Kind of weird to have a default max of Infinity, but oh well.
|
|
1912
|
-
this[MAX] = options.max || Infinity;
|
|
1913
|
-
|
|
1914
|
-
const lc = options.length || naiveLength;
|
|
1915
|
-
this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc;
|
|
1916
|
-
this[ALLOW_STALE] = options.stale || false;
|
|
1917
|
-
if (options.maxAge && typeof options.maxAge !== 'number')
|
|
1918
|
-
throw new TypeError('maxAge must be a number')
|
|
1919
|
-
this[MAX_AGE] = options.maxAge || 0;
|
|
1920
|
-
this[DISPOSE] = options.dispose;
|
|
1921
|
-
this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
|
|
1922
|
-
this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
|
|
1923
|
-
this.reset();
|
|
1924
|
-
}
|
|
1925
|
-
|
|
1926
|
-
// resize the cache when the max changes.
|
|
1927
|
-
set max (mL) {
|
|
1928
|
-
if (typeof mL !== 'number' || mL < 0)
|
|
1929
|
-
throw new TypeError('max must be a non-negative number')
|
|
1930
|
-
|
|
1931
|
-
this[MAX] = mL || Infinity;
|
|
1932
|
-
trim(this);
|
|
1933
|
-
}
|
|
1934
|
-
get max () {
|
|
1935
|
-
return this[MAX]
|
|
1936
|
-
}
|
|
1937
|
-
|
|
1938
|
-
set allowStale (allowStale) {
|
|
1939
|
-
this[ALLOW_STALE] = !!allowStale;
|
|
1940
|
-
}
|
|
1941
|
-
get allowStale () {
|
|
1942
|
-
return this[ALLOW_STALE]
|
|
1943
|
-
}
|
|
1944
|
-
|
|
1945
|
-
set maxAge (mA) {
|
|
1946
|
-
if (typeof mA !== 'number')
|
|
1947
|
-
throw new TypeError('maxAge must be a non-negative number')
|
|
1948
|
-
|
|
1949
|
-
this[MAX_AGE] = mA;
|
|
1950
|
-
trim(this);
|
|
1951
|
-
}
|
|
1952
|
-
get maxAge () {
|
|
1953
|
-
return this[MAX_AGE]
|
|
1954
|
-
}
|
|
1955
|
-
|
|
1956
|
-
// resize the cache when the lengthCalculator changes.
|
|
1957
|
-
set lengthCalculator (lC) {
|
|
1958
|
-
if (typeof lC !== 'function')
|
|
1959
|
-
lC = naiveLength;
|
|
1960
|
-
|
|
1961
|
-
if (lC !== this[LENGTH_CALCULATOR]) {
|
|
1962
|
-
this[LENGTH_CALCULATOR] = lC;
|
|
1963
|
-
this[LENGTH] = 0;
|
|
1964
|
-
this[LRU_LIST].forEach(hit => {
|
|
1965
|
-
hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
|
|
1966
|
-
this[LENGTH] += hit.length;
|
|
1967
|
-
});
|
|
1968
|
-
}
|
|
1969
|
-
trim(this);
|
|
1970
|
-
}
|
|
1971
|
-
get lengthCalculator () { return this[LENGTH_CALCULATOR] }
|
|
1972
|
-
|
|
1973
|
-
get length () { return this[LENGTH] }
|
|
1974
|
-
get itemCount () { return this[LRU_LIST].length }
|
|
1975
|
-
|
|
1976
|
-
rforEach (fn, thisp) {
|
|
1977
|
-
thisp = thisp || this;
|
|
1978
|
-
for (let walker = this[LRU_LIST].tail; walker !== null;) {
|
|
1979
|
-
const prev = walker.prev;
|
|
1980
|
-
forEachStep(this, fn, walker, thisp);
|
|
1981
|
-
walker = prev;
|
|
1982
|
-
}
|
|
1983
|
-
}
|
|
1984
|
-
|
|
1985
|
-
forEach (fn, thisp) {
|
|
1986
|
-
thisp = thisp || this;
|
|
1987
|
-
for (let walker = this[LRU_LIST].head; walker !== null;) {
|
|
1988
|
-
const next = walker.next;
|
|
1989
|
-
forEachStep(this, fn, walker, thisp);
|
|
1990
|
-
walker = next;
|
|
1991
|
-
}
|
|
1992
|
-
}
|
|
1993
|
-
|
|
1994
|
-
keys () {
|
|
1995
|
-
return this[LRU_LIST].toArray().map(k => k.key)
|
|
1996
|
-
}
|
|
1997
|
-
|
|
1998
|
-
values () {
|
|
1999
|
-
return this[LRU_LIST].toArray().map(k => k.value)
|
|
2000
|
-
}
|
|
2001
|
-
|
|
2002
|
-
reset () {
|
|
2003
|
-
if (this[DISPOSE] &&
|
|
2004
|
-
this[LRU_LIST] &&
|
|
2005
|
-
this[LRU_LIST].length) {
|
|
2006
|
-
this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
|
|
2007
|
-
}
|
|
2008
|
-
|
|
2009
|
-
this[CACHE] = new Map(); // hash of items by key
|
|
2010
|
-
this[LRU_LIST] = new Yallist(); // list of items in order of use recency
|
|
2011
|
-
this[LENGTH] = 0; // length of items in the list
|
|
2012
|
-
}
|
|
2013
|
-
|
|
2014
|
-
dump () {
|
|
2015
|
-
return this[LRU_LIST].map(hit =>
|
|
2016
|
-
isStale(this, hit) ? false : {
|
|
2017
|
-
k: hit.key,
|
|
2018
|
-
v: hit.value,
|
|
2019
|
-
e: hit.now + (hit.maxAge || 0)
|
|
2020
|
-
}).toArray().filter(h => h)
|
|
2021
|
-
}
|
|
2022
|
-
|
|
2023
|
-
dumpLru () {
|
|
2024
|
-
return this[LRU_LIST]
|
|
2025
|
-
}
|
|
2026
|
-
|
|
2027
|
-
set (key, value, maxAge) {
|
|
2028
|
-
maxAge = maxAge || this[MAX_AGE];
|
|
2029
|
-
|
|
2030
|
-
if (maxAge && typeof maxAge !== 'number')
|
|
2031
|
-
throw new TypeError('maxAge must be a number')
|
|
2032
|
-
|
|
2033
|
-
const now = maxAge ? Date.now() : 0;
|
|
2034
|
-
const len = this[LENGTH_CALCULATOR](value, key);
|
|
2035
|
-
|
|
2036
|
-
if (this[CACHE].has(key)) {
|
|
2037
|
-
if (len > this[MAX]) {
|
|
2038
|
-
del(this, this[CACHE].get(key));
|
|
2039
|
-
return false
|
|
2040
|
-
}
|
|
2041
|
-
|
|
2042
|
-
const node = this[CACHE].get(key);
|
|
2043
|
-
const item = node.value;
|
|
2044
|
-
|
|
2045
|
-
// dispose of the old one before overwriting
|
|
2046
|
-
// split out into 2 ifs for better coverage tracking
|
|
2047
|
-
if (this[DISPOSE]) {
|
|
2048
|
-
if (!this[NO_DISPOSE_ON_SET])
|
|
2049
|
-
this[DISPOSE](key, item.value);
|
|
2050
|
-
}
|
|
2051
|
-
|
|
2052
|
-
item.now = now;
|
|
2053
|
-
item.maxAge = maxAge;
|
|
2054
|
-
item.value = value;
|
|
2055
|
-
this[LENGTH] += len - item.length;
|
|
2056
|
-
item.length = len;
|
|
2057
|
-
this.get(key);
|
|
2058
|
-
trim(this);
|
|
2059
|
-
return true
|
|
2060
|
-
}
|
|
2061
|
-
|
|
2062
|
-
const hit = new Entry(key, value, len, now, maxAge);
|
|
2063
|
-
|
|
2064
|
-
// oversized objects fall out of cache automatically.
|
|
2065
|
-
if (hit.length > this[MAX]) {
|
|
2066
|
-
if (this[DISPOSE])
|
|
2067
|
-
this[DISPOSE](key, value);
|
|
2068
|
-
|
|
2069
|
-
return false
|
|
2070
|
-
}
|
|
2071
|
-
|
|
2072
|
-
this[LENGTH] += hit.length;
|
|
2073
|
-
this[LRU_LIST].unshift(hit);
|
|
2074
|
-
this[CACHE].set(key, this[LRU_LIST].head);
|
|
2075
|
-
trim(this);
|
|
2076
|
-
return true
|
|
2077
|
-
}
|
|
2078
|
-
|
|
2079
|
-
has (key) {
|
|
2080
|
-
if (!this[CACHE].has(key)) return false
|
|
2081
|
-
const hit = this[CACHE].get(key).value;
|
|
2082
|
-
return !isStale(this, hit)
|
|
2083
|
-
}
|
|
2084
|
-
|
|
2085
|
-
get (key) {
|
|
2086
|
-
return get(this, key, true)
|
|
2087
|
-
}
|
|
2088
|
-
|
|
2089
|
-
peek (key) {
|
|
2090
|
-
return get(this, key, false)
|
|
2091
|
-
}
|
|
2092
|
-
|
|
2093
|
-
pop () {
|
|
2094
|
-
const node = this[LRU_LIST].tail;
|
|
2095
|
-
if (!node)
|
|
2096
|
-
return null
|
|
2097
|
-
|
|
2098
|
-
del(this, node);
|
|
2099
|
-
return node.value
|
|
2100
|
-
}
|
|
2101
|
-
|
|
2102
|
-
del (key) {
|
|
2103
|
-
del(this, this[CACHE].get(key));
|
|
2104
|
-
}
|
|
2105
|
-
|
|
2106
|
-
load (arr) {
|
|
2107
|
-
// reset the cache
|
|
2108
|
-
this.reset();
|
|
2109
|
-
|
|
2110
|
-
const now = Date.now();
|
|
2111
|
-
// A previous serialized cache has the most recent items first
|
|
2112
|
-
for (let l = arr.length - 1; l >= 0; l--) {
|
|
2113
|
-
const hit = arr[l];
|
|
2114
|
-
const expiresAt = hit.e || 0;
|
|
2115
|
-
if (expiresAt === 0)
|
|
2116
|
-
// the item was created without expiration in a non aged cache
|
|
2117
|
-
this.set(hit.k, hit.v);
|
|
2118
|
-
else {
|
|
2119
|
-
const maxAge = expiresAt - now;
|
|
2120
|
-
// dont add already expired items
|
|
2121
|
-
if (maxAge > 0) {
|
|
2122
|
-
this.set(hit.k, hit.v, maxAge);
|
|
2123
|
-
}
|
|
2124
|
-
}
|
|
2125
|
-
}
|
|
2126
|
-
}
|
|
2127
|
-
|
|
2128
|
-
prune () {
|
|
2129
|
-
this[CACHE].forEach((value, key) => get(this, key, false));
|
|
2130
|
-
}
|
|
2131
|
-
}
|
|
2132
|
-
|
|
2133
|
-
const get = (self, key, doUse) => {
|
|
2134
|
-
const node = self[CACHE].get(key);
|
|
2135
|
-
if (node) {
|
|
2136
|
-
const hit = node.value;
|
|
2137
|
-
if (isStale(self, hit)) {
|
|
2138
|
-
del(self, node);
|
|
2139
|
-
if (!self[ALLOW_STALE])
|
|
2140
|
-
return undefined
|
|
2141
|
-
} else {
|
|
2142
|
-
if (doUse) {
|
|
2143
|
-
if (self[UPDATE_AGE_ON_GET])
|
|
2144
|
-
node.value.now = Date.now();
|
|
2145
|
-
self[LRU_LIST].unshiftNode(node);
|
|
2146
|
-
}
|
|
2147
|
-
}
|
|
2148
|
-
return hit.value
|
|
2149
|
-
}
|
|
2150
|
-
};
|
|
2151
|
-
|
|
2152
|
-
const isStale = (self, hit) => {
|
|
2153
|
-
if (!hit || (!hit.maxAge && !self[MAX_AGE]))
|
|
2154
|
-
return false
|
|
2155
|
-
|
|
2156
|
-
const diff = Date.now() - hit.now;
|
|
2157
|
-
return hit.maxAge ? diff > hit.maxAge
|
|
2158
|
-
: self[MAX_AGE] && (diff > self[MAX_AGE])
|
|
2159
|
-
};
|
|
2160
|
-
|
|
2161
|
-
const trim = self => {
|
|
2162
|
-
if (self[LENGTH] > self[MAX]) {
|
|
2163
|
-
for (let walker = self[LRU_LIST].tail;
|
|
2164
|
-
self[LENGTH] > self[MAX] && walker !== null;) {
|
|
2165
|
-
// We know that we're about to delete this one, and also
|
|
2166
|
-
// what the next least recently used key will be, so just
|
|
2167
|
-
// go ahead and set it now.
|
|
2168
|
-
const prev = walker.prev;
|
|
2169
|
-
del(self, walker);
|
|
2170
|
-
walker = prev;
|
|
2171
|
-
}
|
|
2172
|
-
}
|
|
2173
|
-
};
|
|
2174
|
-
|
|
2175
|
-
const del = (self, node) => {
|
|
2176
|
-
if (node) {
|
|
2177
|
-
const hit = node.value;
|
|
2178
|
-
if (self[DISPOSE])
|
|
2179
|
-
self[DISPOSE](hit.key, hit.value);
|
|
2180
|
-
|
|
2181
|
-
self[LENGTH] -= hit.length;
|
|
2182
|
-
self[CACHE].delete(hit.key);
|
|
2183
|
-
self[LRU_LIST].removeNode(node);
|
|
2184
|
-
}
|
|
2185
|
-
};
|
|
2186
|
-
|
|
2187
|
-
class Entry {
|
|
2188
|
-
constructor (key, value, length, now, maxAge) {
|
|
2189
|
-
this.key = key;
|
|
2190
|
-
this.value = value;
|
|
2191
|
-
this.length = length;
|
|
2192
|
-
this.now = now;
|
|
2193
|
-
this.maxAge = maxAge || 0;
|
|
2194
|
-
}
|
|
2195
|
-
}
|
|
2196
|
-
|
|
2197
|
-
const forEachStep = (self, fn, node, thisp) => {
|
|
2198
|
-
let hit = node.value;
|
|
2199
|
-
if (isStale(self, hit)) {
|
|
2200
|
-
del(self, node);
|
|
2201
|
-
if (!self[ALLOW_STALE])
|
|
2202
|
-
hit = undefined;
|
|
2203
|
-
}
|
|
2204
|
-
if (hit)
|
|
2205
|
-
fn.call(thisp, hit.value, hit.key, self);
|
|
2206
|
-
};
|
|
2207
|
-
|
|
2208
|
-
lruCache = LRUCache;
|
|
2209
|
-
return lruCache;
|
|
2210
|
-
}
|
|
1461
|
+
var lrucache = LRUCache;
|
|
2211
1462
|
|
|
2212
1463
|
var range;
|
|
2213
1464
|
var hasRequiredRange;
|
|
@@ -2415,8 +1666,8 @@ function requireRange () {
|
|
|
2415
1666
|
|
|
2416
1667
|
range = Range;
|
|
2417
1668
|
|
|
2418
|
-
const LRU =
|
|
2419
|
-
const cache = new LRU(
|
|
1669
|
+
const LRU = lrucache;
|
|
1670
|
+
const cache = new LRU();
|
|
2420
1671
|
|
|
2421
1672
|
const parseOptions = parseOptions_1;
|
|
2422
1673
|
const Comparator = requireComparator();
|
|
@@ -2687,9 +1938,10 @@ function requireRange () {
|
|
|
2687
1938
|
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
|
2688
1939
|
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
|
|
2689
1940
|
// 1.2 - 3.4 => >=1.2.0 <3.5.0-0
|
|
1941
|
+
// TODO build?
|
|
2690
1942
|
const hyphenReplace = incPr => ($0,
|
|
2691
1943
|
from, fM, fm, fp, fpr, fb,
|
|
2692
|
-
to, tM, tm, tp, tpr
|
|
1944
|
+
to, tM, tm, tp, tpr) => {
|
|
2693
1945
|
if (isX(fM)) {
|
|
2694
1946
|
from = '';
|
|
2695
1947
|
} else if (isX(fm)) {
|