lib0 0.2.44 → 0.2.45
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 +10 -9
- package/cache.d.ts +2 -1
- package/cache.d.ts.map +1 -1
- package/cache.js +21 -2
- package/cache.test.d.ts.map +1 -1
- package/dist/cache.cjs +21 -1
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.d.ts +2 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.test.d.ts.map +1 -1
- package/dist/test.cjs +30 -1
- package/dist/test.cjs.map +1 -1
- package/dist/test.js +30 -1
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -203,18 +203,19 @@ See encoding.writeAny for more information.</p></dd>
|
|
|
203
203
|
<dd><p>Decode an any-encoded value.</p></dd>
|
|
204
204
|
</dl>
|
|
205
205
|
</details>
|
|
206
|
-
<details><summary><b>[lib0/
|
|
207
|
-
<pre>import * as
|
|
206
|
+
<details><summary><b>[lib0/cache]</b> An implementation of a map which has keys that expire.</summary>
|
|
207
|
+
<pre>import * as cache from 'lib0/cache'</pre>
|
|
208
208
|
<dl>
|
|
209
|
-
<b><code>new
|
|
210
|
-
<b><code>
|
|
211
|
-
<b><code>
|
|
212
|
-
<b><code>
|
|
213
|
-
<b><code>
|
|
209
|
+
<b><code>new cache.Cache(timeout: number)</code></b><br>
|
|
210
|
+
<b><code>cache.removeStale(cache: module:cache.Cache<K, V>): number</code></b><br>
|
|
211
|
+
<b><code>cache.set(cache: module:cache.Cache<K, V>, key: K, value: V)</code></b><br>
|
|
212
|
+
<b><code>cache.get(cache: module:cache.Cache<K, V>, key: K): V | undefined</code></b><br>
|
|
213
|
+
<b><code>cache.getAsync(cache: module:cache.Cache<K, V>, key: K): V | Promise<V> | undefined</code></b><br>
|
|
214
214
|
<dd><p>Works well in conjunktion with setIfUndefined which has an async init function.
|
|
215
215
|
Using getAsync & setIfUndefined ensures that the init function is only called once.</p></dd>
|
|
216
|
-
<b><code>
|
|
217
|
-
<b><code>
|
|
216
|
+
<b><code>cache.remove(cache: module:cache.Cache<K, V>, key: K)</code></b><br>
|
|
217
|
+
<b><code>cache.setIfUndefined(cache: module:cache.Cache<K, V>, key: K, init: function():Promise<V>, removeNull: boolean): Promise<V> | V</code></b><br>
|
|
218
|
+
<b><code>cache.create(timeout: number)</code></b><br>
|
|
218
219
|
</dl>
|
|
219
220
|
</details>
|
|
220
221
|
<details><summary><b>[lib0/component]</b> Web components.</summary>
|
package/cache.d.ts
CHANGED
|
@@ -20,7 +20,8 @@ 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
22
|
export function getAsync<K, V>(cache: Cache<K, V>, key: K): V | Promise<V> | undefined;
|
|
23
|
-
export function
|
|
23
|
+
export function remove<K, V>(cache: Cache<K, V>, key: K): V | undefined;
|
|
24
|
+
export function setIfUndefined<K, V>(cache: Cache<K, V>, key: K, init: () => Promise<V>, removeNull?: boolean): V | Promise<V>;
|
|
24
25
|
export function create(timeout: number): Cache<any, any>;
|
|
25
26
|
import * as list from "./list.js";
|
|
26
27
|
/**
|
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;AA4BM,qEAGN;AAYM,uFAGN;
|
|
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;AA4BM,qEAGN;AAYM,uFAGN;AAQM,wEAON;AAWM,sGAHI,OAAO,kBA2BjB;AAKM,gCAFI,MAAM,mBAEkC;;AAvLnD;;;;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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* An implementation of a map which has keys that expire.
|
|
6
6
|
*
|
|
7
|
-
* @module
|
|
7
|
+
* @module cache
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import * as list from './list.js'
|
|
@@ -141,15 +141,31 @@ export const getAsync = (cache, key) => {
|
|
|
141
141
|
return n ? n.val : undefined
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
/**
|
|
145
|
+
* @template K, V
|
|
146
|
+
*
|
|
147
|
+
* @param {Cache<K, V>} cache
|
|
148
|
+
* @param {K} key
|
|
149
|
+
*/
|
|
150
|
+
export const remove = (cache, key) => {
|
|
151
|
+
const n = cache._map.get(key)
|
|
152
|
+
if (n) {
|
|
153
|
+
list.removeNode(cache._q, n)
|
|
154
|
+
cache._map.delete(key)
|
|
155
|
+
return n.val && !(n.val instanceof Promise) ? n.val : undefined
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
144
159
|
/**
|
|
145
160
|
* @template K, V
|
|
146
161
|
*
|
|
147
162
|
* @param {Cache<K, V>} cache
|
|
148
163
|
* @param {K} key
|
|
149
164
|
* @param {function():Promise<V>} init
|
|
165
|
+
* @param {boolean} removeNull Optional argument that automatically removes values that resolve to null/undefined from the cache.
|
|
150
166
|
* @return {Promise<V> | V}
|
|
151
167
|
*/
|
|
152
|
-
export const setIfUndefined = (cache, key, init) => {
|
|
168
|
+
export const setIfUndefined = (cache, key, init, removeNull = false) => {
|
|
153
169
|
const now = removeStale(cache)
|
|
154
170
|
const q = cache._q
|
|
155
171
|
const n = cache._map.get(key)
|
|
@@ -167,6 +183,9 @@ export const setIfUndefined = (cache, key, init) => {
|
|
|
167
183
|
if (p === node.val) {
|
|
168
184
|
node.val = v
|
|
169
185
|
}
|
|
186
|
+
if (removeNull && v == null) {
|
|
187
|
+
remove(cache, key)
|
|
188
|
+
}
|
|
170
189
|
})
|
|
171
190
|
return p
|
|
172
191
|
}
|
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,iBAiEpB"}
|
package/dist/cache.cjs
CHANGED
|
@@ -139,15 +139,31 @@ const getAsync = (cache, key) => {
|
|
|
139
139
|
return n ? n.val : undefined
|
|
140
140
|
};
|
|
141
141
|
|
|
142
|
+
/**
|
|
143
|
+
* @template K, V
|
|
144
|
+
*
|
|
145
|
+
* @param {Cache<K, V>} cache
|
|
146
|
+
* @param {K} key
|
|
147
|
+
*/
|
|
148
|
+
const remove = (cache, key) => {
|
|
149
|
+
const n = cache._map.get(key);
|
|
150
|
+
if (n) {
|
|
151
|
+
list.removeNode(cache._q, n);
|
|
152
|
+
cache._map.delete(key);
|
|
153
|
+
return n.val && !(n.val instanceof Promise) ? n.val : undefined
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
|
|
142
157
|
/**
|
|
143
158
|
* @template K, V
|
|
144
159
|
*
|
|
145
160
|
* @param {Cache<K, V>} cache
|
|
146
161
|
* @param {K} key
|
|
147
162
|
* @param {function():Promise<V>} init
|
|
163
|
+
* @param {boolean} removeNull Optional argument that automatically removes values that resolve to null/undefined from the cache.
|
|
148
164
|
* @return {Promise<V> | V}
|
|
149
165
|
*/
|
|
150
|
-
const setIfUndefined = (cache, key, init) => {
|
|
166
|
+
const setIfUndefined = (cache, key, init, removeNull = false) => {
|
|
151
167
|
const now = removeStale(cache);
|
|
152
168
|
const q = cache._q;
|
|
153
169
|
const n = cache._map.get(key);
|
|
@@ -165,6 +181,9 @@ const setIfUndefined = (cache, key, init) => {
|
|
|
165
181
|
if (p === node.val) {
|
|
166
182
|
node.val = v;
|
|
167
183
|
}
|
|
184
|
+
if (removeNull && v == null) {
|
|
185
|
+
remove(cache, key);
|
|
186
|
+
}
|
|
168
187
|
});
|
|
169
188
|
return p
|
|
170
189
|
}
|
|
@@ -179,6 +198,7 @@ exports.Cache = Cache;
|
|
|
179
198
|
exports.create = create;
|
|
180
199
|
exports.get = get;
|
|
181
200
|
exports.getAsync = getAsync;
|
|
201
|
+
exports.remove = remove;
|
|
182
202
|
exports.removeStale = removeStale;
|
|
183
203
|
exports.set = set;
|
|
184
204
|
exports.setIfUndefined = setIfUndefined;
|
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
|
|
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 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 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 * 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 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 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
|
@@ -20,7 +20,8 @@ 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
22
|
export function getAsync<K, V>(cache: Cache<K, V>, key: K): V | Promise<V> | undefined;
|
|
23
|
-
export function
|
|
23
|
+
export function remove<K, V>(cache: Cache<K, V>, key: K): V | undefined;
|
|
24
|
+
export function setIfUndefined<K, V>(cache: Cache<K, V>, key: K, init: () => Promise<V>, removeNull?: boolean): V | Promise<V>;
|
|
24
25
|
export function create(timeout: number): Cache<any, any>;
|
|
25
26
|
import * as list from "./list.js";
|
|
26
27
|
/**
|
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;AA4BM,qEAGN;AAYM,uFAGN;
|
|
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;AA4BM,qEAGN;AAYM,uFAGN;AAQM,wEAON;AAWM,sGAHI,OAAO,kBA2BjB;AAKM,gCAFI,MAAM,mBAEkC;;AAvLnD;;;;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,iBAiEpB"}
|
package/dist/test.cjs
CHANGED
|
@@ -7382,15 +7382,31 @@ const getAsync = (cache, key) => {
|
|
|
7382
7382
|
return n ? n.val : undefined
|
|
7383
7383
|
};
|
|
7384
7384
|
|
|
7385
|
+
/**
|
|
7386
|
+
* @template K, V
|
|
7387
|
+
*
|
|
7388
|
+
* @param {Cache<K, V>} cache
|
|
7389
|
+
* @param {K} key
|
|
7390
|
+
*/
|
|
7391
|
+
const remove = (cache, key) => {
|
|
7392
|
+
const n = cache._map.get(key);
|
|
7393
|
+
if (n) {
|
|
7394
|
+
removeNode(cache._q, n);
|
|
7395
|
+
cache._map.delete(key);
|
|
7396
|
+
return n.val && !(n.val instanceof Promise) ? n.val : undefined
|
|
7397
|
+
}
|
|
7398
|
+
};
|
|
7399
|
+
|
|
7385
7400
|
/**
|
|
7386
7401
|
* @template K, V
|
|
7387
7402
|
*
|
|
7388
7403
|
* @param {Cache<K, V>} cache
|
|
7389
7404
|
* @param {K} key
|
|
7390
7405
|
* @param {function():Promise<V>} init
|
|
7406
|
+
* @param {boolean} removeNull Optional argument that automatically removes values that resolve to null/undefined from the cache.
|
|
7391
7407
|
* @return {Promise<V> | V}
|
|
7392
7408
|
*/
|
|
7393
|
-
const setIfUndefined = (cache, key, init) => {
|
|
7409
|
+
const setIfUndefined = (cache, key, init, removeNull = false) => {
|
|
7394
7410
|
const now = removeStale(cache);
|
|
7395
7411
|
const q = cache._q;
|
|
7396
7412
|
const n = cache._map.get(key);
|
|
@@ -7408,6 +7424,9 @@ const setIfUndefined = (cache, key, init) => {
|
|
|
7408
7424
|
if (p === node.val) {
|
|
7409
7425
|
node.val = v;
|
|
7410
7426
|
}
|
|
7427
|
+
if (removeNull && v == null) {
|
|
7428
|
+
remove(cache, key);
|
|
7429
|
+
}
|
|
7411
7430
|
});
|
|
7412
7431
|
return p
|
|
7413
7432
|
}
|
|
@@ -7474,6 +7493,16 @@ const testCache = async tc => {
|
|
|
7474
7493
|
await xp;
|
|
7475
7494
|
// we override the Entry.val property in cache when p resolves. However, we must prevent that when the value is overriden before p is resolved.
|
|
7476
7495
|
assert(get(c, 'a') === 'y');
|
|
7496
|
+
|
|
7497
|
+
// test that we can remove properties
|
|
7498
|
+
remove(c, 'a');
|
|
7499
|
+
remove(c, 'does not exist'); // remove a non-existent property to achieve full test-coverage
|
|
7500
|
+
assert(get(c, 'a') === undefined);
|
|
7501
|
+
|
|
7502
|
+
// test that the optional property in setifUndefined works
|
|
7503
|
+
const yp = setIfUndefined(c, 'a', () => resolveWith(null), true);
|
|
7504
|
+
assert(await yp === null);
|
|
7505
|
+
assert(get(c, 'a') === undefined);
|
|
7477
7506
|
};
|
|
7478
7507
|
|
|
7479
7508
|
var cache = /*#__PURE__*/Object.freeze({
|