cachette 4.0.13 → 4.0.14
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/.prettierignore +15 -0
- package/.prettierrc +8 -0
- package/dist/src/lib/CacheClient.js +10 -9
- package/dist/src/lib/CacheClient.js.map +1 -1
- package/dist/src/lib/CacheInstance.js +4 -2
- package/dist/src/lib/CacheInstance.js.map +1 -1
- package/dist/src/lib/LocalCache.js +10 -4
- package/dist/src/lib/LocalCache.js.map +1 -1
- package/dist/src/lib/RedisCache.js +23 -18
- package/dist/src/lib/RedisCache.js.map +1 -1
- package/dist/src/lib/WriteThroughCache.js +5 -5
- package/dist/src/lib/WriteThroughCache.js.map +1 -1
- package/package.json +4 -2
- package/src/lib/CacheClient.ts +42 -55
- package/src/lib/CacheInstance.ts +6 -10
- package/src/lib/LocalCache.ts +14 -10
- package/src/lib/RedisCache.ts +43 -38
- package/src/lib/WriteThroughCache.ts +27 -27
- package/test/CacheClient_test.ts +25 -44
- package/test/CacheInstance_test.ts +12 -40
- package/test/LocalCache_test.ts +2 -8
- package/test/RedisCache_test.ts +20 -20
- package/test/WriteThroughCache_test.ts +34 -39
package/.prettierignore
ADDED
package/.prettierrc
ADDED
|
@@ -5,21 +5,25 @@ class CacheClient {
|
|
|
5
5
|
cacheInstance;
|
|
6
6
|
buildCacheKey(propertyKey, args) {
|
|
7
7
|
const buildKeyArgs = (args) => args
|
|
8
|
-
.filter(x => typeof x !== 'object' ||
|
|
8
|
+
.filter((x) => typeof x !== 'object' ||
|
|
9
9
|
// If the arg is an object, we check that it's not an instance of a class
|
|
10
10
|
(typeof x === 'object' && (x?.constructor.name === 'Object' || x?.constructor.name === 'Array')) ||
|
|
11
11
|
// typeof null === object, then we need to have another condition to accept null as well
|
|
12
|
-
x === null)
|
|
12
|
+
x === null)
|
|
13
|
+
.map((x) => {
|
|
13
14
|
if (typeof x === 'object' && !Array.isArray(x) && x) {
|
|
14
15
|
// Check if we have a circular reference in the plain object
|
|
15
16
|
JSON.stringify(x);
|
|
16
|
-
return Object.entries(x)
|
|
17
|
+
return Object.entries(x)
|
|
18
|
+
.sort()
|
|
19
|
+
.map(([key, value]) => {
|
|
17
20
|
if (typeof value === 'object') {
|
|
18
21
|
const nestedObjectKeys = buildKeyArgs([value]);
|
|
19
22
|
return `${key}-${nestedObjectKeys}`;
|
|
20
23
|
}
|
|
21
24
|
return `${key}-${value}`;
|
|
22
|
-
})
|
|
25
|
+
})
|
|
26
|
+
.join('-');
|
|
23
27
|
}
|
|
24
28
|
if (Array.isArray(x)) {
|
|
25
29
|
const builtKey = buildKeyArgs(x.sort());
|
|
@@ -27,11 +31,8 @@ class CacheClient {
|
|
|
27
31
|
}
|
|
28
32
|
return new String(x).valueOf();
|
|
29
33
|
});
|
|
30
|
-
const builtKey = [
|
|
31
|
-
|
|
32
|
-
...buildKeyArgs(args),
|
|
33
|
-
].join('-');
|
|
34
|
-
const maxKeyLength = process.env.UNITO_CACHE_MAX_KEY_LENGTH && parseInt(process.env.UNITO_CACHE_MAX_KEY_LENGTH, 10) || 1000;
|
|
34
|
+
const builtKey = [propertyKey, ...buildKeyArgs(args)].join('-');
|
|
35
|
+
const maxKeyLength = (process.env.UNITO_CACHE_MAX_KEY_LENGTH && parseInt(process.env.UNITO_CACHE_MAX_KEY_LENGTH, 10)) || 1000;
|
|
35
36
|
if (builtKey.length > maxKeyLength) {
|
|
36
37
|
throw new Error(`Built key is bigger than ${maxKeyLength} chars`);
|
|
37
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheClient.js","sourceRoot":"","sources":["../../../src/lib/CacheClient.ts"],"names":[],"mappings":";;;AAEA,MAAsB,WAAW;
|
|
1
|
+
{"version":3,"file":"CacheClient.js","sourceRoot":"","sources":["../../../src/lib/CacheClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,9 @@ class CacheInstance extends node_events_1.EventEmitter {
|
|
|
39
39
|
* Terminate / exit / quit the instance
|
|
40
40
|
*/
|
|
41
41
|
quit() {
|
|
42
|
-
return new Promise((resolve) => {
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
resolve();
|
|
44
|
+
});
|
|
43
45
|
}
|
|
44
46
|
/**
|
|
45
47
|
* Keep track of active fetches to prevent
|
|
@@ -103,7 +105,7 @@ class CacheInstance extends node_events_1.EventEmitter {
|
|
|
103
105
|
let error;
|
|
104
106
|
let result;
|
|
105
107
|
try {
|
|
106
|
-
const fetchPromise = this.activeFetches[key] = fetchFunction();
|
|
108
|
+
const fetchPromise = (this.activeFetches[key] = fetchFunction());
|
|
107
109
|
result = await fetchPromise;
|
|
108
110
|
}
|
|
109
111
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheInstance.js","sourceRoot":"","sources":["../../../src/lib/CacheInstance.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;
|
|
1
|
+
{"version":3,"file":"CacheInstance.js","sourceRoot":"","sources":["../../../src/lib/CacheInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ exports.LocalCache = void 0;
|
|
|
4
4
|
const lru_cache_1 = require("lru-cache");
|
|
5
5
|
const CacheInstance_1 = require("./CacheInstance");
|
|
6
6
|
async function sleep(ms) {
|
|
7
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
7
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
8
|
}
|
|
9
9
|
class LocalCache extends CacheInstance_1.CacheInstance {
|
|
10
10
|
static DEFAULT_MAX_ITEMS = 5000;
|
|
@@ -126,14 +126,18 @@ class LocalCache extends CacheInstance_1.CacheInstance {
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
this.cache.set(resource, 1, { ttl: ttlMs });
|
|
129
|
-
return new Promise(resolve => {
|
|
129
|
+
return new Promise((resolve) => {
|
|
130
|
+
resolve(resource);
|
|
131
|
+
});
|
|
130
132
|
}
|
|
131
133
|
/**
|
|
132
134
|
* @inheritdoc
|
|
133
135
|
*/
|
|
134
136
|
async unlock(lock) {
|
|
135
137
|
this.cache.delete(lock);
|
|
136
|
-
return new Promise(resolve => {
|
|
138
|
+
return new Promise((resolve) => {
|
|
139
|
+
resolve();
|
|
140
|
+
});
|
|
137
141
|
}
|
|
138
142
|
/**
|
|
139
143
|
* @inheritdoc
|
|
@@ -155,7 +159,9 @@ class LocalCache extends CacheInstance_1.CacheInstance {
|
|
|
155
159
|
found = true;
|
|
156
160
|
}
|
|
157
161
|
});
|
|
158
|
-
return new Promise((resolve) => {
|
|
162
|
+
return new Promise((resolve) => {
|
|
163
|
+
resolve(found);
|
|
164
|
+
});
|
|
159
165
|
}
|
|
160
166
|
}
|
|
161
167
|
exports.LocalCache = LocalCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalCache.js","sourceRoot":"","sources":["../../../src/lib/LocalCache.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAErC,mDAA+D;AAE/D,KAAK,UAAU,KAAK,CAAC,EAAU;IAC7B,OAAO,IAAI,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"LocalCache.js","sourceRoot":"","sources":["../../../src/lib/LocalCache.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAErC,mDAA+D;AAE/D,KAAK,UAAU,KAAK,CAAC,EAAU;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAa,UAAW,SAAQ,6BAAa;IACpC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACvC,4CAA4C;IACrC,MAAM,CAAC,eAAe,GAAW,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEhD,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAE1C,uDAAuD;IACvD,eAAe;IACP,KAAK,GAAG,IAAI,oBAAQ,CAAc;QACxC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAA+B,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,iBAAiB;QACrG,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAA6B,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,eAAe;KAClG,CAAC,CAAC;IAEH;;OAEG;IACI,KAAK,CAAC,OAAO;QAClB,OAAO;IACT,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,SAAS;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,KAAoB,EAAE,GAAG,GAAG,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAE7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oDAAoD;QACpD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,GAAW;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,MAAM,CAAC,GAAW;QAC7B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3D,+CAA+C;QAC/C,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,yCAAyC;QACzC,IAAI,YAAY,GAAG,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,GAAW;QAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,OAAe;QAC/D,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,KAAa;QAC/C,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,QAAQ,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,UAAU,CAAC,oBAAoB,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,8DAA8D,CAAC,CAAC;YAChH,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,4EAA4E;gBAC5E,wDAAwD;gBACxD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CAAC,IAAS;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAAC,MAAc;QACjC,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAChC,yEAAyE;YACzE,4EAA4E;YAC5E,qEAAqE;YACrE,4EAA4E;YAC5E,2DAA2D;YAC3D,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACtC,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;;AA5KH,gCA6KC"}
|
|
@@ -56,12 +56,14 @@ class RedisCache extends CacheInstance_1.CacheInstance {
|
|
|
56
56
|
enableOfflineQueue: false,
|
|
57
57
|
});
|
|
58
58
|
this.redlock = new Redlock([this.redisClient], {
|
|
59
|
+
// Hack until Redlock 5.x is out of beta
|
|
59
60
|
driftFactor: RedisCache.REDLOCK_CLOCK_DRIFT_FACTOR,
|
|
60
61
|
retryCount: RedisCache.REDLOCK_RETRY_COUNT,
|
|
61
62
|
retryDelay: RedisCache.REDLOCK_RETRY_DELAY_MS,
|
|
62
63
|
retryJitter: RedisCache.REDLOCK_JITTER_MS,
|
|
63
64
|
});
|
|
64
65
|
this.redlockWithoutRetry = new Redlock([this.redisClient], {
|
|
66
|
+
// Hack until Redlock 5.x is out of beta
|
|
65
67
|
driftFactor: RedisCache.REDLOCK_CLOCK_DRIFT_FACTOR,
|
|
66
68
|
retryCount: 0,
|
|
67
69
|
retryDelay: 0,
|
|
@@ -81,7 +83,7 @@ class RedisCache extends CacheInstance_1.CacheInstance {
|
|
|
81
83
|
if (this.ready) {
|
|
82
84
|
return;
|
|
83
85
|
}
|
|
84
|
-
return new Promise(resolve => this.redisClient.on('ready', resolve));
|
|
86
|
+
return new Promise((resolve) => this.redisClient.on('ready', resolve));
|
|
85
87
|
}
|
|
86
88
|
/**
|
|
87
89
|
* @inheritdoc
|
|
@@ -137,26 +139,28 @@ class RedisCache extends CacheInstance_1.CacheInstance {
|
|
|
137
139
|
return RedisCache.FALSE_VALUE;
|
|
138
140
|
}
|
|
139
141
|
if (value instanceof Error) {
|
|
140
|
-
return RedisCache.ERROR_PREFIX +
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
return (RedisCache.ERROR_PREFIX +
|
|
143
|
+
JSON.stringify({
|
|
144
|
+
...value, // serialize potential Error metadata set as object properties
|
|
145
|
+
message: value.message,
|
|
146
|
+
}));
|
|
144
147
|
}
|
|
145
148
|
if (typeof value === 'number') {
|
|
146
149
|
return `${RedisCache.NUMBER_PREFIX}${value}`;
|
|
147
150
|
}
|
|
148
151
|
if (value instanceof Object) {
|
|
149
|
-
return RedisCache.JSON_PREFIX +
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
152
|
+
return (RedisCache.JSON_PREFIX +
|
|
153
|
+
JSON.stringify(value, (key, value) => {
|
|
154
|
+
if (value instanceof Set) {
|
|
155
|
+
return { __dataType: 'Set', value: Array.from(value) };
|
|
156
|
+
}
|
|
157
|
+
else if (value instanceof Map) {
|
|
158
|
+
return { __dataType: 'Map', value: Array.from(value) };
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return value;
|
|
162
|
+
}
|
|
163
|
+
}));
|
|
160
164
|
}
|
|
161
165
|
return value;
|
|
162
166
|
}
|
|
@@ -334,7 +338,7 @@ class RedisCache extends CacheInstance_1.CacheInstance {
|
|
|
334
338
|
const internalLock = await redlock.lock(resource, ttlMs);
|
|
335
339
|
return {
|
|
336
340
|
value: internalLock.value,
|
|
337
|
-
unlock: async () => internalLock.unlock()
|
|
341
|
+
unlock: async () => internalLock.unlock(),
|
|
338
342
|
};
|
|
339
343
|
}
|
|
340
344
|
/**
|
|
@@ -365,7 +369,8 @@ class RedisCache extends CacheInstance_1.CacheInstance {
|
|
|
365
369
|
async hasLock(prefix) {
|
|
366
370
|
const redisPrefix = prefix.endsWith('*') ? prefix : `${prefix}*`;
|
|
367
371
|
let cursor = '';
|
|
368
|
-
while (cursor !== '0') {
|
|
372
|
+
while (cursor !== '0') {
|
|
373
|
+
// indicates Redis completed the scan
|
|
369
374
|
// Redis detail: we set the `count` option to a number (1000) greater than
|
|
370
375
|
// the default (10), to minimize the amount of network round-trips caused
|
|
371
376
|
// by incomplete scans needing more scanning from the returned cursor.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisCache.js","sourceRoot":"","sources":["../../../src/lib/RedisCache.ts"],"names":[],"mappings":";;;AAAA,qCAA4B;AAC5B,mCAAmC;AAEnC,mDAA+D;AAElD,QAAA,4BAA4B,GAAG,UAAU,CAAC;AAOvD;;;;;;GAMG;AACH,MAAa,UAAW,SAAQ,6BAAa;
|
|
1
|
+
{"version":3,"file":"RedisCache.js","sourceRoot":"","sources":["../../../src/lib/RedisCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,9 +55,9 @@ class WriteThroughCache extends CacheInstance_1.CacheInstance {
|
|
|
55
55
|
setInterval(() => {
|
|
56
56
|
const total = this.metrics.localHits + this.metrics.redisHits + this.metrics.doubleMisses;
|
|
57
57
|
this.redisCacheForWriting.emit('info', `WriteThroughCache metrics during last ${metricsPeriod} min - Total: ${total}, ` +
|
|
58
|
-
`Local hits: ${this.metrics.localHits} (${total && Math.floor(100 * this.metrics.localHits / total)}%), ` +
|
|
59
|
-
`Redis hits: ${this.metrics.redisHits} (${total && Math.floor(100 * this.metrics.redisHits / total)}%), ` +
|
|
60
|
-
`Double misses: ${this.metrics.doubleMisses} (${total && Math.floor(100 * this.metrics.doubleMisses / total)}%).`);
|
|
58
|
+
`Local hits: ${this.metrics.localHits} (${total && Math.floor((100 * this.metrics.localHits) / total)}%), ` +
|
|
59
|
+
`Redis hits: ${this.metrics.redisHits} (${total && Math.floor((100 * this.metrics.redisHits) / total)}%), ` +
|
|
60
|
+
`Double misses: ${this.metrics.doubleMisses} (${total && Math.floor((100 * this.metrics.doubleMisses) / total)}%).`);
|
|
61
61
|
this.metrics.localHits = 0;
|
|
62
62
|
this.metrics.redisHits = 0;
|
|
63
63
|
this.metrics.doubleMisses = 0;
|
|
@@ -85,14 +85,14 @@ class WriteThroughCache extends CacheInstance_1.CacheInstance {
|
|
|
85
85
|
* @inheritdoc
|
|
86
86
|
*/
|
|
87
87
|
async itemCount() {
|
|
88
|
-
return await this.redisCacheForReading.itemCount() + await this.localCache.itemCount();
|
|
88
|
+
return (await this.redisCacheForReading.itemCount()) + (await this.localCache.itemCount());
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
91
|
* @inheritdoc
|
|
92
92
|
*/
|
|
93
93
|
async setValue(key, value, ttl = 0) {
|
|
94
94
|
const response = await this.localCache.setValue(key, value, ttl);
|
|
95
|
-
return await this.redisCacheForWriting.setValue(key, value, ttl) && response;
|
|
95
|
+
return (await this.redisCacheForWriting.setValue(key, value, ttl)) && response;
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
98
|
* @inheritdoc
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WriteThroughCache.js","sourceRoot":"","sources":["../../../src/lib/WriteThroughCache.ts"],"names":[],"mappings":";;;AAAA,mDAA+D;AAC/D,6CAA0C;AAC1C,6CAA0C;
|
|
1
|
+
{"version":3,"file":"WriteThroughCache.js","sourceRoot":"","sources":["../../../src/lib/WriteThroughCache.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cachette",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.14",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=20",
|
|
6
6
|
"npm": ">=10"
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"clean": "rm -rf dist/ node_modules/ ci_output/ coverage/ .nyc_output/ *.tgz",
|
|
26
26
|
"compile": "tsc",
|
|
27
27
|
"prepublishOnly": "npm run clean && npm install && npm run compile",
|
|
28
|
-
"
|
|
28
|
+
"format:check": "prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts}'",
|
|
29
|
+
"lint": "eslint --fix 'src/**/*.{js,ts}' 'test/**/*.{js,ts}' && prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts}'",
|
|
29
30
|
"test": "npm run compile && nyc mocha --config test/mocharc.js 'dist/test/**/*.js'; test -z \"$TEST_REDIS_URL\" && echo '!!! Warning: TEST_REDIS_URL unset, Redis tests did not run !!!' || true",
|
|
30
31
|
"test:ci": "npm run compile && mkdir -p ci_output/testresults && mocha --config test/mocharc-ci.js 'dist/test/**/*.js'",
|
|
31
32
|
"relock": "rm -rf node_modules package-lock.json; npm install --package-lock; npm out; true",
|
|
@@ -64,6 +65,7 @@
|
|
|
64
65
|
"mocha": "11.x",
|
|
65
66
|
"npm-audit-resolver": "^3.0.0-7",
|
|
66
67
|
"nyc": "17.x",
|
|
68
|
+
"prettier": "3.x",
|
|
67
69
|
"sinon": "21.x",
|
|
68
70
|
"source-map-support": "0.x",
|
|
69
71
|
"typescript": "5.x",
|
package/src/lib/CacheClient.ts
CHANGED
|
@@ -1,44 +1,46 @@
|
|
|
1
1
|
import { CacheInstance, CachableValue } from './CacheInstance';
|
|
2
2
|
|
|
3
3
|
export abstract class CacheClient {
|
|
4
|
-
|
|
5
4
|
protected cacheInstance: CacheInstance;
|
|
6
5
|
protected buildCacheKey(propertyKey: string, args: any[]): string {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
6
|
+
const buildKeyArgs = (args: any[]) =>
|
|
7
|
+
args
|
|
8
|
+
.filter(
|
|
9
|
+
(x) =>
|
|
10
|
+
typeof x !== 'object' ||
|
|
11
|
+
// If the arg is an object, we check that it's not an instance of a class
|
|
12
|
+
(typeof x === 'object' && (x?.constructor.name === 'Object' || x?.constructor.name === 'Array')) ||
|
|
13
|
+
// typeof null === object, then we need to have another condition to accept null as well
|
|
14
|
+
x === null,
|
|
15
|
+
)
|
|
16
|
+
.map((x) => {
|
|
17
|
+
if (typeof x === 'object' && !Array.isArray(x) && x) {
|
|
18
|
+
// Check if we have a circular reference in the plain object
|
|
19
|
+
JSON.stringify(x);
|
|
20
|
+
|
|
21
|
+
return Object.entries(x)
|
|
22
|
+
.sort()
|
|
23
|
+
.map(([key, value]) => {
|
|
24
|
+
if (typeof value === 'object') {
|
|
25
|
+
const nestedObjectKeys = buildKeyArgs([value]);
|
|
26
|
+
return `${key}-${nestedObjectKeys}`;
|
|
27
|
+
}
|
|
28
|
+
return `${key}-${value}`;
|
|
29
|
+
})
|
|
30
|
+
.join('-');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (Array.isArray(x)) {
|
|
34
|
+
const builtKey = buildKeyArgs(x.sort());
|
|
35
|
+
return builtKey.join('-');
|
|
36
|
+
}
|
|
37
|
+
return new String(x).valueOf();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const builtKey = [propertyKey, ...buildKeyArgs(args)].join('-');
|
|
41
|
+
|
|
42
|
+
const maxKeyLength =
|
|
43
|
+
(process.env.UNITO_CACHE_MAX_KEY_LENGTH && parseInt(process.env.UNITO_CACHE_MAX_KEY_LENGTH, 10)) || 1000;
|
|
42
44
|
if (builtKey.length > maxKeyLength) {
|
|
43
45
|
throw new Error(`Built key is bigger than ${maxKeyLength} chars`);
|
|
44
46
|
}
|
|
@@ -57,10 +59,7 @@ export abstract class CacheClient {
|
|
|
57
59
|
* _the error-caching function_ will. They live apart and each honors
|
|
58
60
|
* its behavior (decorated function *never* caches errors, the other does)
|
|
59
61
|
*/
|
|
60
|
-
public static cached(
|
|
61
|
-
ttl = 0,
|
|
62
|
-
shouldCacheError = (err: Error) => true,
|
|
63
|
-
): any {
|
|
62
|
+
public static cached(ttl = 0, shouldCacheError = (err: Error) => true): any {
|
|
64
63
|
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor {
|
|
65
64
|
const origFunction = descriptor.value;
|
|
66
65
|
|
|
@@ -68,23 +67,12 @@ export abstract class CacheClient {
|
|
|
68
67
|
const functionCachingResults = function (...args): Promise<CachableValue> {
|
|
69
68
|
const key = this.buildCacheKey(propertyKey, args);
|
|
70
69
|
const fetchFunction = origFunction.bind(this, ...args);
|
|
71
|
-
return this.cacheInstance.getOrFetchValue(
|
|
72
|
-
key,
|
|
73
|
-
ttl,
|
|
74
|
-
fetchFunction,
|
|
75
|
-
undefined,
|
|
76
|
-
);
|
|
70
|
+
return this.cacheInstance.getOrFetchValue(key, ttl, fetchFunction, undefined);
|
|
77
71
|
};
|
|
78
72
|
const functionCachingResultsAndErrors = function (...args): Promise<CachableValue> {
|
|
79
73
|
const key = this.buildCacheKey(propertyKey, args);
|
|
80
74
|
const fetchFunction = origFunction.bind(this, ...args);
|
|
81
|
-
return this.cacheInstance.getOrFetchValue(
|
|
82
|
-
key,
|
|
83
|
-
ttl,
|
|
84
|
-
fetchFunction,
|
|
85
|
-
undefined,
|
|
86
|
-
shouldCacheError,
|
|
87
|
-
);
|
|
75
|
+
return this.cacheInstance.getOrFetchValue(key, ttl, fetchFunction, undefined, shouldCacheError);
|
|
88
76
|
};
|
|
89
77
|
|
|
90
78
|
target[`${propertyKey}NoCache`] = origFunction;
|
|
@@ -125,7 +113,7 @@ export abstract class CacheClient {
|
|
|
125
113
|
* This is useful when you want to ensure data is freshness on all nodes of the cluster.
|
|
126
114
|
* We're defaulting to 5 replicas because it is the maximum number of read-only replica nodes
|
|
127
115
|
* that you can have for each shard in AWS-Elastic cache (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Replication.Redis.Groups.html)
|
|
128
|
-
*
|
|
116
|
+
*
|
|
129
117
|
* /!\ If the number of replicas asked for acknowledgment is greater than the number of replicas in the cluster, the function will always block
|
|
130
118
|
* /!\ until the timeout is reached. Make sure you know the number of replicas in your cluster when calling this function.
|
|
131
119
|
*/
|
|
@@ -141,5 +129,4 @@ export abstract class CacheClient {
|
|
|
141
129
|
const key = this.buildCacheKey(functionName, args);
|
|
142
130
|
return this.cacheInstance.getValue(key);
|
|
143
131
|
}
|
|
144
|
-
|
|
145
132
|
}
|
package/src/lib/CacheInstance.ts
CHANGED
|
@@ -3,9 +3,7 @@ import { EventEmitter } from 'node:events';
|
|
|
3
3
|
export type CachableValue = any;
|
|
4
4
|
export type FetchingFunction = () => Promise<CachableValue>;
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
export abstract class CacheInstance extends EventEmitter {
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* Will resolve when the cache instance connection is ready.
|
|
11
9
|
*/
|
|
@@ -61,14 +59,13 @@ export abstract class CacheInstance extends EventEmitter {
|
|
|
61
59
|
/**
|
|
62
60
|
* This command blocks the current client until all the previous write commands are
|
|
63
61
|
* successfully transferred and acknowledged by at least the specified number of replicas.
|
|
64
|
-
*
|
|
62
|
+
*
|
|
65
63
|
* @param replicas The number of replicas that should acknowledge write operations.
|
|
66
64
|
* @param timeout The maximum amount of time to wait in milliseconds.
|
|
67
|
-
*
|
|
65
|
+
*
|
|
68
66
|
*/
|
|
69
67
|
public abstract waitForReplication(replicas: number, timeout: number): Promise<number>;
|
|
70
68
|
|
|
71
|
-
|
|
72
69
|
/**
|
|
73
70
|
* clear the whole cache
|
|
74
71
|
*/
|
|
@@ -119,10 +116,11 @@ export abstract class CacheInstance extends EventEmitter {
|
|
|
119
116
|
* Terminate / exit / quit the instance
|
|
120
117
|
*/
|
|
121
118
|
public quit(): Promise<void> {
|
|
122
|
-
return new Promise((resolve) => {
|
|
119
|
+
return new Promise((resolve) => {
|
|
120
|
+
resolve();
|
|
121
|
+
});
|
|
123
122
|
}
|
|
124
123
|
|
|
125
|
-
|
|
126
124
|
/**
|
|
127
125
|
* Keep track of active fetches to prevent
|
|
128
126
|
* simultaneous requests to the same resource in parallel.
|
|
@@ -149,7 +147,6 @@ export abstract class CacheInstance extends EventEmitter {
|
|
|
149
147
|
lockTtl?: number,
|
|
150
148
|
shouldCacheError?: (err: Error) => boolean,
|
|
151
149
|
): Promise<ReturnType<F>> {
|
|
152
|
-
|
|
153
150
|
// already cached?
|
|
154
151
|
let cached = await this.getValue(key);
|
|
155
152
|
if (cached instanceof Error) {
|
|
@@ -194,7 +191,7 @@ export abstract class CacheInstance extends EventEmitter {
|
|
|
194
191
|
let error: Error | undefined;
|
|
195
192
|
let result: any;
|
|
196
193
|
try {
|
|
197
|
-
const fetchPromise = this.activeFetches[key] = fetchFunction();
|
|
194
|
+
const fetchPromise = (this.activeFetches[key] = fetchFunction());
|
|
198
195
|
result = await fetchPromise;
|
|
199
196
|
} catch (err) {
|
|
200
197
|
error = err;
|
|
@@ -218,5 +215,4 @@ export abstract class CacheInstance extends EventEmitter {
|
|
|
218
215
|
}
|
|
219
216
|
}
|
|
220
217
|
}
|
|
221
|
-
|
|
222
218
|
}
|