@graphile/lru 5.0.0-alpha.1 → 5.0.0-alpha.2
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/CHANGELOG.md +12 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -44
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @graphile/lru
|
|
2
2
|
|
|
3
|
+
## 5.0.0-alpha.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`98ae00f59`](https://github.com/benjie/postgraphile-private/commit/98ae00f59a8ab3edc5718ad8437a0dab734a7d69)
|
|
8
|
+
Thanks [@benjie](https://github.com/benjie)! - Performance overhaul and faster
|
|
9
|
+
access for unsaturated LRUs.
|
|
10
|
+
|
|
11
|
+
- [`7f857950a`](https://github.com/benjie/postgraphile-private/commit/7f857950a7e4ec763c936eb6bd1fb77824041d71)
|
|
12
|
+
Thanks [@benjie](https://github.com/benjie)! - Upgrade to the latest
|
|
13
|
+
TypeScript/tslib
|
|
14
|
+
|
|
3
15
|
## 5.0.0-alpha.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -17,12 +17,12 @@ export declare class LRU<KeyType = any, ValueType = any> {
|
|
|
17
17
|
private c;
|
|
18
18
|
/** dispose */
|
|
19
19
|
private d;
|
|
20
|
+
/** saturated (length === max length) */
|
|
21
|
+
private s;
|
|
20
22
|
constructor({ maxLength, dispose }: LRUOptions<KeyType, ValueType>);
|
|
21
23
|
reset(): void;
|
|
22
24
|
get(key: KeyType): ValueType | undefined;
|
|
23
25
|
set(key: KeyType, value: ValueType): void;
|
|
24
|
-
/** hoist (aka "raise") */
|
|
25
|
-
private r;
|
|
26
26
|
/** add */
|
|
27
27
|
private a;
|
|
28
28
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,UAAU,CAAC,OAAO,EAAE,SAAS;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACpD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,UAAU,CAAC,OAAO,EAAE,SAAS;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACpD;AAOD;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,OAAO,CAAC,CAAC,CAAS;IAClB,WAAW;IACX,OAAO,CAAC,CAAC,CAAkC;IAC3C,WAAW;IACX,OAAO,CAAC,CAAC,CAAkC;IAC3C,YAAY;IACZ,OAAO,CAAC,CAAC,CAAyC;IAClD,cAAc;IACd,OAAO,CAAC,CAAC,CAAoD;IAC7D,wCAAwC;IACxC,OAAO,CAAC,CAAC,CAAU;gBAEP,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAoB3D,KAAK;IAaL,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IA6BxC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAgBhD,UAAU;IACV,OAAO,CAAC,CAAC;CA6BV;AAED,eAAe,GAAG,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,21 +23,14 @@
|
|
|
23
23
|
*/
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.LRU = void 0;
|
|
26
|
+
/** An optimized get to use before the LRU saturates */
|
|
27
|
+
function quickGet(key) {
|
|
28
|
+
return this.c.get(key)?.v;
|
|
29
|
+
}
|
|
26
30
|
/**
|
|
27
31
|
* An tiny LRU cache with maximum count, identical weighting and no expiration.
|
|
28
32
|
*/
|
|
29
33
|
class LRU {
|
|
30
|
-
length;
|
|
31
|
-
/** max length */
|
|
32
|
-
m;
|
|
33
|
-
/** head */
|
|
34
|
-
h;
|
|
35
|
-
/** tail */
|
|
36
|
-
t;
|
|
37
|
-
/** cache */
|
|
38
|
-
c;
|
|
39
|
-
/** dispose */
|
|
40
|
-
d;
|
|
41
34
|
constructor({ maxLength, dispose }) {
|
|
42
35
|
if (maxLength < 2) {
|
|
43
36
|
throw new Error("Max length must be >= 2");
|
|
@@ -51,6 +44,8 @@ class LRU {
|
|
|
51
44
|
this.t = null;
|
|
52
45
|
this.c = new Map();
|
|
53
46
|
this.d = dispose || null;
|
|
47
|
+
this.s = false;
|
|
48
|
+
this.get = quickGet;
|
|
54
49
|
this.reset();
|
|
55
50
|
}
|
|
56
51
|
reset() {
|
|
@@ -59,7 +54,7 @@ class LRU {
|
|
|
59
54
|
this.h = null;
|
|
60
55
|
this.t = null;
|
|
61
56
|
this.length = 0;
|
|
62
|
-
if (this.d) {
|
|
57
|
+
if (this.d !== null) {
|
|
63
58
|
for (const hit of values) {
|
|
64
59
|
this.d(hit.k, hit.v);
|
|
65
60
|
}
|
|
@@ -67,15 +62,35 @@ class LRU {
|
|
|
67
62
|
}
|
|
68
63
|
get(key) {
|
|
69
64
|
const hit = this.c.get(key);
|
|
70
|
-
if (hit) {
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
if (hit === undefined) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
// HOIST
|
|
69
|
+
if (this.h === null) {
|
|
70
|
+
this.h = this.t = hit;
|
|
71
|
+
}
|
|
72
|
+
else if (hit !== this.h) {
|
|
73
|
+
// Remove newHead from old position
|
|
74
|
+
hit.p.n = hit.n;
|
|
75
|
+
if (hit.n !== null) {
|
|
76
|
+
hit.n.p = hit.p;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// It was the t, now hit.prev is the t
|
|
80
|
+
this.t = hit.p;
|
|
81
|
+
}
|
|
82
|
+
// Add hit at top
|
|
83
|
+
hit.n = this.h;
|
|
84
|
+
this.h.p = hit;
|
|
85
|
+
this.h = hit;
|
|
86
|
+
hit.p = null;
|
|
73
87
|
}
|
|
74
|
-
|
|
88
|
+
// RETURN
|
|
89
|
+
return hit.v;
|
|
75
90
|
}
|
|
76
91
|
set(key, value) {
|
|
77
92
|
const hit = this.c.get(key);
|
|
78
|
-
if (hit) {
|
|
93
|
+
if (hit !== undefined) {
|
|
79
94
|
hit.v = value;
|
|
80
95
|
}
|
|
81
96
|
else {
|
|
@@ -89,33 +104,9 @@ class LRU {
|
|
|
89
104
|
this.a(newHead);
|
|
90
105
|
}
|
|
91
106
|
}
|
|
92
|
-
/** hoist (aka "raise") */
|
|
93
|
-
r(newHead) {
|
|
94
|
-
if (newHead === this.h) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (!this.h) {
|
|
98
|
-
this.h = this.t = newHead;
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
// Remove newHead from old position
|
|
102
|
-
newHead.p.n = newHead.n;
|
|
103
|
-
if (newHead.n) {
|
|
104
|
-
newHead.n.p = newHead.p;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
// It was the t, now newHead.prev is the t
|
|
108
|
-
this.t = newHead.p;
|
|
109
|
-
}
|
|
110
|
-
// Add newHead at top
|
|
111
|
-
newHead.n = this.h;
|
|
112
|
-
this.h.p = newHead;
|
|
113
|
-
this.h = newHead;
|
|
114
|
-
newHead.p = null;
|
|
115
|
-
}
|
|
116
107
|
/** add */
|
|
117
108
|
a(newHead) {
|
|
118
|
-
if (
|
|
109
|
+
if (this.h === null) {
|
|
119
110
|
this.h = this.t = newHead;
|
|
120
111
|
this.length = 1;
|
|
121
112
|
return;
|
|
@@ -123,13 +114,13 @@ class LRU {
|
|
|
123
114
|
this.h.p = newHead;
|
|
124
115
|
newHead.n = this.h;
|
|
125
116
|
this.h = newHead;
|
|
126
|
-
if (this.
|
|
117
|
+
if (this.s) {
|
|
127
118
|
// Remove the t
|
|
128
119
|
const oldTail = this.t;
|
|
129
120
|
this.c.delete(oldTail.k);
|
|
130
121
|
this.t = oldTail.p;
|
|
131
122
|
this.t.n = null;
|
|
132
|
-
if (this.d) {
|
|
123
|
+
if (this.d !== null) {
|
|
133
124
|
this.d(oldTail.k, oldTail.v);
|
|
134
125
|
}
|
|
135
126
|
}
|
|
@@ -138,6 +129,10 @@ class LRU {
|
|
|
138
129
|
this.t = newHead;
|
|
139
130
|
}
|
|
140
131
|
this.length++;
|
|
132
|
+
if (this.length === this.m) {
|
|
133
|
+
this.s = true;
|
|
134
|
+
this.get = LRU.prototype.get;
|
|
135
|
+
}
|
|
141
136
|
}
|
|
142
137
|
}
|
|
143
138
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAkBH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphile/lru",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.2",
|
|
4
4
|
"description": "Extremely simple zero-dependencies ES6 LRU (you probably want lru-cache instead)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
"dist"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"tslib": "^2.
|
|
33
|
+
"tslib": "^2.5.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/jest": "^27.5.1",
|
|
37
37
|
"@types/node": "^18.15.5",
|
|
38
38
|
"jest": "^28.1.3",
|
|
39
39
|
"ts-node": "^10.9.1",
|
|
40
|
-
"typescript": "^5.0.
|
|
40
|
+
"typescript": "^5.0.4"
|
|
41
41
|
}
|
|
42
42
|
}
|