lib0 0.2.45 → 0.2.46
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/README.md +1 -0
- package/cache.d.ts +1 -0
- package/cache.d.ts.map +1 -1
- package/cache.js +19 -9
- package/cache.test.d.ts.map +1 -1
- package/dist/cache.cjs +20 -9
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.d.ts +1 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.test.d.ts.map +1 -1
- package/dist/test.cjs +33 -11
- package/dist/test.cjs.map +1 -1
- package/dist/test.js +33 -11
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -210,6 +210,7 @@ See encoding.writeAny for more information.</p></dd>
|
|
|
210
210
|
<b><code>cache.removeStale(cache: module:cache.Cache<K, V>): number</code></b><br>
|
|
211
211
|
<b><code>cache.set(cache: module:cache.Cache<K, V>, key: K, value: V)</code></b><br>
|
|
212
212
|
<b><code>cache.get(cache: module:cache.Cache<K, V>, key: K): V | undefined</code></b><br>
|
|
213
|
+
<b><code>cache.refreshTimeout(cache: module:cache.Cache<K, V>, key: K)</code></b><br>
|
|
213
214
|
<b><code>cache.getAsync(cache: module:cache.Cache<K, V>, key: K): V | Promise<V> | undefined</code></b><br>
|
|
214
215
|
<dd><p>Works well in conjunktion with setIfUndefined which has an async init function.
|
|
215
216
|
Using getAsync & setIfUndefined ensures that the init function is only called once.</p></dd>
|
package/cache.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export class Cache<K, V> {
|
|
|
19
19
|
export function removeStale<K, V>(cache: Cache<K, V>): number;
|
|
20
20
|
export function set<K, V>(cache: Cache<K, V>, key: K, value: V): void;
|
|
21
21
|
export function get<K, V>(cache: Cache<K, V>, key: K): V | undefined;
|
|
22
|
+
export function refreshTimeout<K, V>(cache: Cache<K, V>, key: K): void;
|
|
22
23
|
export function getAsync<K, V>(cache: Cache<K, V>, key: K): V | Promise<V> | undefined;
|
|
23
24
|
export function remove<K, V>(cache: Cache<K, V>, key: K): V | undefined;
|
|
24
25
|
export function setIfUndefined<K, V>(cache: Cache<K, V>, key: K, init: () => Promise<V>, removeNull?: boolean): V | Promise<V>;
|
package/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["cache.js"],"names":[],"mappings":"AAsCA;;GAEG;AACH;IACE;;OAEG;IACH,qBAFW,MAAM,EAYhB;IATC,gBAAsB;IACtB;;OAEG;IACH,IAFS,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAER;IACvB;;OAEG;IACH,MAFU,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAEL;CAE3B;AAQM,uDAFK,MAAM,CAUjB;AASM,sEAcN;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["cache.js"],"names":[],"mappings":"AAsCA;;GAEG;AACH;IACE;;OAEG;IACH,qBAFW,MAAM,EAYhB;IATC,gBAAsB;IACtB;;OAEG;IACH,IAFS,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAER;IACvB;;OAEG;IACH,MAFU,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAEL;CAE3B;AAQM,uDAFK,MAAM,CAUjB;AASM,sEAcN;AAwBM,qEAGN;AAQM,uEASN;AAYM,uFAGN;AAQM,wEAON;AAWM,sGAHI,OAAO,kBAwBjB;AAKM,gCAFI,MAAM,mBAEkC;;AAjMnD;;;;GAIG;AACH,qCAFgB,IAAI,CAAC,QAAQ;IAG3B;;;OAGG;IACH,iBAHW,CAAC,OACD,CAAC,GAAG,QAAQ,CAAC,CAAC,EAcxB;IAXC;;OAEG;IACH,yBAAgB;IAChB;;OAEG;IACH,yBAAgB;IAChB,gBAAiC;IACjC,oBAAc;IACd,OAAc;CAEjB"}
|
package/cache.js
CHANGED
|
@@ -103,13 +103,9 @@ export const set = (cache, key, value) => {
|
|
|
103
103
|
* @return {Entry<K, V> | undefined}
|
|
104
104
|
*/
|
|
105
105
|
const getNode = (cache, key) => {
|
|
106
|
-
|
|
107
|
-
const q = cache._q
|
|
106
|
+
removeStale(cache)
|
|
108
107
|
const n = cache._map.get(key)
|
|
109
108
|
if (n) {
|
|
110
|
-
list.removeNode(q, n)
|
|
111
|
-
list.pushEnd(q, n)
|
|
112
|
-
n.created = now
|
|
113
109
|
return n
|
|
114
110
|
}
|
|
115
111
|
}
|
|
@@ -126,6 +122,23 @@ export const get = (cache, key) => {
|
|
|
126
122
|
return n && !(n.val instanceof Promise) ? n.val : undefined
|
|
127
123
|
}
|
|
128
124
|
|
|
125
|
+
/**
|
|
126
|
+
* @template K, V
|
|
127
|
+
*
|
|
128
|
+
* @param {Cache<K, V>} cache
|
|
129
|
+
* @param {K} key
|
|
130
|
+
*/
|
|
131
|
+
export const refreshTimeout = (cache, key) => {
|
|
132
|
+
const now = time.getUnixTime()
|
|
133
|
+
const q = cache._q
|
|
134
|
+
const n = cache._map.get(key)
|
|
135
|
+
if (n) {
|
|
136
|
+
list.removeNode(q, n)
|
|
137
|
+
list.pushEnd(q, n)
|
|
138
|
+
n.created = now
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
129
142
|
/**
|
|
130
143
|
* Works well in conjunktion with setIfUndefined which has an async init function.
|
|
131
144
|
* Using getAsync & setIfUndefined ensures that the init function is only called once.
|
|
@@ -166,13 +179,10 @@ export const remove = (cache, key) => {
|
|
|
166
179
|
* @return {Promise<V> | V}
|
|
167
180
|
*/
|
|
168
181
|
export const setIfUndefined = (cache, key, init, removeNull = false) => {
|
|
169
|
-
|
|
182
|
+
removeStale(cache)
|
|
170
183
|
const q = cache._q
|
|
171
184
|
const n = cache._map.get(key)
|
|
172
185
|
if (n) {
|
|
173
|
-
list.removeNode(q, n)
|
|
174
|
-
list.pushEnd(q, n)
|
|
175
|
-
n.created = now
|
|
176
186
|
return n.val
|
|
177
187
|
} else {
|
|
178
188
|
const p = init()
|
package/cache.test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["cache.test.js"],"names":[],"mappings":"AAQO,8BAFI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["cache.test.js"],"names":[],"mappings":"AAQO,8BAFI,EAAE,QAAQ,iBA6EpB"}
|
package/dist/cache.cjs
CHANGED
|
@@ -101,13 +101,9 @@ const set = (cache, key, value) => {
|
|
|
101
101
|
* @return {Entry<K, V> | undefined}
|
|
102
102
|
*/
|
|
103
103
|
const getNode = (cache, key) => {
|
|
104
|
-
|
|
105
|
-
const q = cache._q;
|
|
104
|
+
removeStale(cache);
|
|
106
105
|
const n = cache._map.get(key);
|
|
107
106
|
if (n) {
|
|
108
|
-
list.removeNode(q, n);
|
|
109
|
-
list.pushEnd(q, n);
|
|
110
|
-
n.created = now;
|
|
111
107
|
return n
|
|
112
108
|
}
|
|
113
109
|
};
|
|
@@ -124,6 +120,23 @@ const get = (cache, key) => {
|
|
|
124
120
|
return n && !(n.val instanceof Promise) ? n.val : undefined
|
|
125
121
|
};
|
|
126
122
|
|
|
123
|
+
/**
|
|
124
|
+
* @template K, V
|
|
125
|
+
*
|
|
126
|
+
* @param {Cache<K, V>} cache
|
|
127
|
+
* @param {K} key
|
|
128
|
+
*/
|
|
129
|
+
const refreshTimeout = (cache, key) => {
|
|
130
|
+
const now = time.getUnixTime();
|
|
131
|
+
const q = cache._q;
|
|
132
|
+
const n = cache._map.get(key);
|
|
133
|
+
if (n) {
|
|
134
|
+
list.removeNode(q, n);
|
|
135
|
+
list.pushEnd(q, n);
|
|
136
|
+
n.created = now;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
127
140
|
/**
|
|
128
141
|
* Works well in conjunktion with setIfUndefined which has an async init function.
|
|
129
142
|
* Using getAsync & setIfUndefined ensures that the init function is only called once.
|
|
@@ -164,13 +177,10 @@ const remove = (cache, key) => {
|
|
|
164
177
|
* @return {Promise<V> | V}
|
|
165
178
|
*/
|
|
166
179
|
const setIfUndefined = (cache, key, init, removeNull = false) => {
|
|
167
|
-
|
|
180
|
+
removeStale(cache);
|
|
168
181
|
const q = cache._q;
|
|
169
182
|
const n = cache._map.get(key);
|
|
170
183
|
if (n) {
|
|
171
|
-
list.removeNode(q, n);
|
|
172
|
-
list.pushEnd(q, n);
|
|
173
|
-
n.created = now;
|
|
174
184
|
return n.val
|
|
175
185
|
} else {
|
|
176
186
|
const p = init();
|
|
@@ -198,6 +208,7 @@ exports.Cache = Cache;
|
|
|
198
208
|
exports.create = create;
|
|
199
209
|
exports.get = get;
|
|
200
210
|
exports.getAsync = getAsync;
|
|
211
|
+
exports.refreshTimeout = refreshTimeout;
|
|
201
212
|
exports.remove = remove;
|
|
202
213
|
exports.removeStale = removeStale;
|
|
203
214
|
exports.set = set;
|
package/dist/cache.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.cjs","sources":["../cache.js"],"sourcesContent":["\n/* eslint-env browser */\n\n/**\n * An implementation of a map which has keys that expire.\n *\n * @module cache\n */\n\nimport * as list from './list.js'\nimport * as map from './map.js'\nimport * as time from './time.js'\n\n/**\n * @template K, V\n *\n * @implements {list.ListNode}\n */\nclass Entry {\n /**\n * @param {K} key\n * @param {V | Promise<V>} val\n */\n constructor (key, val) {\n /**\n * @type {this | null}\n */\n this.prev = null\n /**\n * @type {this | null}\n */\n this.next = null\n this.created = time.getUnixTime()\n this.val = val\n this.key = key\n }\n}\n\n/**\n * @template K, V\n */\nexport class Cache {\n /**\n * @param {number} timeout\n */\n constructor (timeout) {\n this.timeout = timeout\n /**\n * @type list.List<Entry<K, V>>\n */\n this._q = list.create()\n /**\n * @type {Map<K, Entry<K, V>>}\n */\n this._map = map.create()\n }\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @return {number} Returns the current timestamp\n */\nexport const removeStale = cache => {\n const now = time.getUnixTime()\n const q = cache._q\n while (q.start && now - q.start.created > cache.timeout) {\n cache._map.delete(q.start.key)\n list.popFront(q)\n }\n return now\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n * @param {V} value\n */\nexport const set = (cache, key, value) => {\n const now = removeStale(cache)\n const q = cache._q\n const n = cache._map.get(key)\n if (n) {\n list.removeNode(q, n)\n list.pushEnd(q, n)\n n.created = now\n n.val = value\n } else {\n const node = new Entry(key, value)\n list.pushEnd(q, node)\n cache._map.set(key, node)\n }\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n * @return {Entry<K, V> | undefined}\n */\nconst getNode = (cache, key) => {\n
|
|
1
|
+
{"version":3,"file":"cache.cjs","sources":["../cache.js"],"sourcesContent":["\n/* eslint-env browser */\n\n/**\n * An implementation of a map which has keys that expire.\n *\n * @module cache\n */\n\nimport * as list from './list.js'\nimport * as map from './map.js'\nimport * as time from './time.js'\n\n/**\n * @template K, V\n *\n * @implements {list.ListNode}\n */\nclass Entry {\n /**\n * @param {K} key\n * @param {V | Promise<V>} val\n */\n constructor (key, val) {\n /**\n * @type {this | null}\n */\n this.prev = null\n /**\n * @type {this | null}\n */\n this.next = null\n this.created = time.getUnixTime()\n this.val = val\n this.key = key\n }\n}\n\n/**\n * @template K, V\n */\nexport class Cache {\n /**\n * @param {number} timeout\n */\n constructor (timeout) {\n this.timeout = timeout\n /**\n * @type list.List<Entry<K, V>>\n */\n this._q = list.create()\n /**\n * @type {Map<K, Entry<K, V>>}\n */\n this._map = map.create()\n }\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @return {number} Returns the current timestamp\n */\nexport const removeStale = cache => {\n const now = time.getUnixTime()\n const q = cache._q\n while (q.start && now - q.start.created > cache.timeout) {\n cache._map.delete(q.start.key)\n list.popFront(q)\n }\n return now\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n * @param {V} value\n */\nexport const set = (cache, key, value) => {\n const now = removeStale(cache)\n const q = cache._q\n const n = cache._map.get(key)\n if (n) {\n list.removeNode(q, n)\n list.pushEnd(q, n)\n n.created = now\n n.val = value\n } else {\n const node = new Entry(key, value)\n list.pushEnd(q, node)\n cache._map.set(key, node)\n }\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n * @return {Entry<K, V> | undefined}\n */\nconst getNode = (cache, key) => {\n removeStale(cache)\n const n = cache._map.get(key)\n if (n) {\n return n\n }\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n * @return {V | undefined}\n */\nexport const get = (cache, key) => {\n const n = getNode(cache, key)\n return n && !(n.val instanceof Promise) ? n.val : undefined\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n */\nexport const refreshTimeout = (cache, key) => {\n const now = time.getUnixTime()\n const q = cache._q\n const n = cache._map.get(key)\n if (n) {\n list.removeNode(q, n)\n list.pushEnd(q, n)\n n.created = now\n }\n}\n\n/**\n * Works well in conjunktion with setIfUndefined which has an async init function.\n * Using getAsync & setIfUndefined ensures that the init function is only called once.\n *\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n * @return {V | Promise<V> | undefined}\n */\nexport const getAsync = (cache, key) => {\n const n = getNode(cache, key)\n return n ? n.val : undefined\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n */\nexport const remove = (cache, key) => {\n const n = cache._map.get(key)\n if (n) {\n list.removeNode(cache._q, n)\n cache._map.delete(key)\n return n.val && !(n.val instanceof Promise) ? n.val : undefined\n }\n}\n\n/**\n * @template K, V\n *\n * @param {Cache<K, V>} cache\n * @param {K} key\n * @param {function():Promise<V>} init\n * @param {boolean} removeNull Optional argument that automatically removes values that resolve to null/undefined from the cache.\n * @return {Promise<V> | V}\n */\nexport const setIfUndefined = (cache, key, init, removeNull = false) => {\n removeStale(cache)\n const q = cache._q\n const n = cache._map.get(key)\n if (n) {\n return n.val\n } else {\n const p = init()\n const node = new Entry(key, p)\n list.pushEnd(q, node)\n cache._map.set(key, node)\n p.then(v => {\n if (p === node.val) {\n node.val = v\n }\n if (removeNull && v == null) {\n remove(cache, key)\n }\n })\n return p\n }\n}\n\n/**\n * @param {number} timeout\n */\nexport const create = timeout => new Cache(timeout)\n"],"names":["time.getUnixTime","list.create","map.create","list.popFront","list.removeNode","list.pushEnd"],"mappings":"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"}
|
package/dist/cache.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export class Cache<K, V> {
|
|
|
19
19
|
export function removeStale<K, V>(cache: Cache<K, V>): number;
|
|
20
20
|
export function set<K, V>(cache: Cache<K, V>, key: K, value: V): void;
|
|
21
21
|
export function get<K, V>(cache: Cache<K, V>, key: K): V | undefined;
|
|
22
|
+
export function refreshTimeout<K, V>(cache: Cache<K, V>, key: K): void;
|
|
22
23
|
export function getAsync<K, V>(cache: Cache<K, V>, key: K): V | Promise<V> | undefined;
|
|
23
24
|
export function remove<K, V>(cache: Cache<K, V>, key: K): V | undefined;
|
|
24
25
|
export function setIfUndefined<K, V>(cache: Cache<K, V>, key: K, init: () => Promise<V>, removeNull?: boolean): V | Promise<V>;
|
package/dist/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../cache.js"],"names":[],"mappings":"AAsCA;;GAEG;AACH;IACE;;OAEG;IACH,qBAFW,MAAM,EAYhB;IATC,gBAAsB;IACtB;;OAEG;IACH,IAFS,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAER;IACvB;;OAEG;IACH,MAFU,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAEL;CAE3B;AAQM,uDAFK,MAAM,CAUjB;AASM,sEAcN;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../cache.js"],"names":[],"mappings":"AAsCA;;GAEG;AACH;IACE;;OAEG;IACH,qBAFW,MAAM,EAYhB;IATC,gBAAsB;IACtB;;OAEG;IACH,IAFS,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAER;IACvB;;OAEG;IACH,MAFU,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAEL;CAE3B;AAQM,uDAFK,MAAM,CAUjB;AASM,sEAcN;AAwBM,qEAGN;AAQM,uEASN;AAYM,uFAGN;AAQM,wEAON;AAWM,sGAHI,OAAO,kBAwBjB;AAKM,gCAFI,MAAM,mBAEkC;;AAjMnD;;;;GAIG;AACH,qCAFgB,IAAI,CAAC,QAAQ;IAG3B;;;OAGG;IACH,iBAHW,CAAC,OACD,CAAC,GAAG,QAAQ,CAAC,CAAC,EAcxB;IAXC;;OAEG;IACH,yBAAgB;IAChB;;OAEG;IACH,yBAAgB;IAChB,gBAAiC;IACjC,oBAAc;IACd,OAAc;CAEjB"}
|
package/dist/cache.test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["../cache.test.js"],"names":[],"mappings":"AAQO,8BAFI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["../cache.test.js"],"names":[],"mappings":"AAQO,8BAFI,EAAE,QAAQ,iBA6EpB"}
|
package/dist/test.cjs
CHANGED
|
@@ -7344,13 +7344,9 @@ const set = (cache, key, value) => {
|
|
|
7344
7344
|
* @return {Entry<K, V> | undefined}
|
|
7345
7345
|
*/
|
|
7346
7346
|
const getNode = (cache, key) => {
|
|
7347
|
-
|
|
7348
|
-
const q = cache._q;
|
|
7347
|
+
removeStale(cache);
|
|
7349
7348
|
const n = cache._map.get(key);
|
|
7350
7349
|
if (n) {
|
|
7351
|
-
removeNode(q, n);
|
|
7352
|
-
pushEnd(q, n);
|
|
7353
|
-
n.created = now;
|
|
7354
7350
|
return n
|
|
7355
7351
|
}
|
|
7356
7352
|
};
|
|
@@ -7367,6 +7363,23 @@ const get = (cache, key) => {
|
|
|
7367
7363
|
return n && !(n.val instanceof Promise) ? n.val : undefined
|
|
7368
7364
|
};
|
|
7369
7365
|
|
|
7366
|
+
/**
|
|
7367
|
+
* @template K, V
|
|
7368
|
+
*
|
|
7369
|
+
* @param {Cache<K, V>} cache
|
|
7370
|
+
* @param {K} key
|
|
7371
|
+
*/
|
|
7372
|
+
const refreshTimeout = (cache, key) => {
|
|
7373
|
+
const now = getUnixTime();
|
|
7374
|
+
const q = cache._q;
|
|
7375
|
+
const n = cache._map.get(key);
|
|
7376
|
+
if (n) {
|
|
7377
|
+
removeNode(q, n);
|
|
7378
|
+
pushEnd(q, n);
|
|
7379
|
+
n.created = now;
|
|
7380
|
+
}
|
|
7381
|
+
};
|
|
7382
|
+
|
|
7370
7383
|
/**
|
|
7371
7384
|
* Works well in conjunktion with setIfUndefined which has an async init function.
|
|
7372
7385
|
* Using getAsync & setIfUndefined ensures that the init function is only called once.
|
|
@@ -7407,13 +7420,10 @@ const remove = (cache, key) => {
|
|
|
7407
7420
|
* @return {Promise<V> | V}
|
|
7408
7421
|
*/
|
|
7409
7422
|
const setIfUndefined = (cache, key, init, removeNull = false) => {
|
|
7410
|
-
|
|
7423
|
+
removeStale(cache);
|
|
7411
7424
|
const q = cache._q;
|
|
7412
7425
|
const n = cache._map.get(key);
|
|
7413
7426
|
if (n) {
|
|
7414
|
-
removeNode(q, n);
|
|
7415
|
-
pushEnd(q, n);
|
|
7416
|
-
n.created = now;
|
|
7417
7427
|
return n.val
|
|
7418
7428
|
} else {
|
|
7419
7429
|
const p = init();
|
|
@@ -7470,11 +7480,13 @@ const testCache = async tc => {
|
|
|
7470
7480
|
|
|
7471
7481
|
// write new values and check later if the creation-timestamp was updated
|
|
7472
7482
|
set(c, 'a', '11');
|
|
7473
|
-
|
|
7483
|
+
set(c, 'b', '22');
|
|
7474
7484
|
|
|
7475
7485
|
await wait(5); // keys should be updated and not timed out. Hence the creation time should be updated
|
|
7476
7486
|
assert(get(c, 'a') === '11');
|
|
7477
|
-
assert(get(c, 'b') === '
|
|
7487
|
+
assert(get(c, 'b') === '22');
|
|
7488
|
+
set(c, 'a', '11');
|
|
7489
|
+
set(c, 'b', '22');
|
|
7478
7490
|
// timestamps should be updated
|
|
7479
7491
|
assert(aTimestamp1 !== m.get('a').created);
|
|
7480
7492
|
assert(bTimestamp1 !== m.get('b').created);
|
|
@@ -7503,6 +7515,16 @@ const testCache = async tc => {
|
|
|
7503
7515
|
const yp = setIfUndefined(c, 'a', () => resolveWith(null), true);
|
|
7504
7516
|
assert(await yp === null);
|
|
7505
7517
|
assert(get(c, 'a') === undefined);
|
|
7518
|
+
|
|
7519
|
+
// check manual updating of timeout
|
|
7520
|
+
set(c, 'a', '3');
|
|
7521
|
+
const ts1 = m.get('a').created;
|
|
7522
|
+
await wait(30);
|
|
7523
|
+
refreshTimeout(c, 'a');
|
|
7524
|
+
const ts2 = m.get('a').created;
|
|
7525
|
+
assert(ts1 !== ts2);
|
|
7526
|
+
refreshTimeout(c, 'x'); // for full test coverage
|
|
7527
|
+
assert(m.get('x') == null);
|
|
7506
7528
|
};
|
|
7507
7529
|
|
|
7508
7530
|
var cache = /*#__PURE__*/Object.freeze({
|