@nestjs-redisx/cache 1.0.1 → 1.0.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/dist/cache/api/decorators/cached.decorator.d.ts +1 -0
- package/dist/cache/api/decorators/cached.decorator.d.ts.map +1 -1
- package/dist/cache/application/ports/l1-cache-store.port.d.ts +3 -2
- package/dist/cache/application/ports/l1-cache-store.port.d.ts.map +1 -1
- package/dist/cache/application/services/cache.service.d.ts.map +1 -1
- package/dist/cache/infrastructure/adapters/l1-memory-store.adapter.d.ts.map +1 -1
- package/dist/cache.plugin.d.ts +21 -2
- package/dist/cache.plugin.d.ts.map +1 -1
- package/dist/index.js +141 -95
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +141 -95
- package/dist/index.mjs.map +1 -1
- package/dist/shared/types/index.d.ts +2 -0
- package/dist/shared/types/index.d.ts.map +1 -1
- package/dist/swr/infrastructure/swr-manager.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cached.decorator.d.ts","sourceRoot":"","sources":["../../../../src/cache/api/decorators/cached.decorator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,kBAAkB,CAAC;AAK1B;;;GAGG;AACH,UAAU,sBAAsB;IAC9B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EACH,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;KAC5C,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,QAAQ,CAAC,CAAC,EACR,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;QAC3C,GAAG,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cached.decorator.d.ts","sourceRoot":"","sources":["../../../../src/cache/api/decorators/cached.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,9 +33,10 @@ export interface IL1CacheStore {
|
|
|
33
33
|
*/
|
|
34
34
|
has(key: string): Promise<boolean>;
|
|
35
35
|
/**
|
|
36
|
-
* Gets
|
|
36
|
+
* Gets approximate size of L1 cache.
|
|
37
|
+
* May include expired entries not yet evicted by get/has/set.
|
|
37
38
|
*
|
|
38
|
-
* @returns
|
|
39
|
+
* @returns Approximate number of items in cache
|
|
39
40
|
*/
|
|
40
41
|
size(): Promise<number>;
|
|
41
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1-cache-store.port.d.ts","sourceRoot":"","sources":["../../../../src/cache/application/ports/l1-cache-store.port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvE;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC
|
|
1
|
+
{"version":3,"file":"l1-cache-store.port.d.ts","sourceRoot":"","sources":["../../../../src/cache/application/ports/l1-cache-store.port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvE;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC;;;;;OAKG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../../../src/cache/application/services/cache.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../../../src/cache/application/services/cache.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1-memory-store.adapter.d.ts","sourceRoot":"","sources":["../../../../src/cache/infrastructure/adapters/l1-memory-store.adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAWvE,qBACa,oBAAqB,YAAW,aAAa;IAYtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAIA,OAAO,EAAE,mBAAmB;IAQzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IA2BlD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"l1-memory-store.adapter.d.ts","sourceRoot":"","sources":["../../../../src/cache/infrastructure/adapters/l1-memory-store.adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAWvE,qBACa,oBAAqB,YAAW,aAAa;IAYtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAIA,OAAO,EAAE,mBAAmB;IAQzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IA2BlD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAM7B,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,QAAQ;IAsBhB,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAO3D"}
|
package/dist/cache.plugin.d.ts
CHANGED
|
@@ -2,15 +2,34 @@
|
|
|
2
2
|
* Cache plugin for NestJS RedisX.
|
|
3
3
|
* Provides L1+L2 caching with anti-stampede, SWR, and tag invalidation.
|
|
4
4
|
*/
|
|
5
|
-
import { Provider } from '@nestjs/common';
|
|
6
|
-
import { IRedisXPlugin } from '@nestjs-redisx/core';
|
|
5
|
+
import { DynamicModule, ForwardReference, Provider, Type } from '@nestjs/common';
|
|
6
|
+
import { IRedisXPlugin, IPluginAsyncOptions } from '@nestjs-redisx/core';
|
|
7
7
|
import { ICachePluginOptions } from './shared/types';
|
|
8
8
|
export declare class CachePlugin implements IRedisXPlugin {
|
|
9
9
|
private readonly options;
|
|
10
10
|
readonly name = "cache";
|
|
11
11
|
readonly version = "0.1.0";
|
|
12
12
|
readonly description = "Advanced caching with L1+L2, anti-stampede, SWR, and tag invalidation";
|
|
13
|
+
private asyncOptions?;
|
|
13
14
|
constructor(options?: ICachePluginOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Create a CachePlugin with async configuration from DI.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* CachePlugin.registerAsync({
|
|
21
|
+
* imports: [ConfigModule],
|
|
22
|
+
* inject: [ConfigService],
|
|
23
|
+
* useFactory: (config: ConfigService) => ({
|
|
24
|
+
* l1: { maxSize: config.get('CACHE_L1_MAX_SIZE', 1000) },
|
|
25
|
+
* swr: { enabled: config.get('CACHE_SWR_ENABLED', false) },
|
|
26
|
+
* }),
|
|
27
|
+
* })
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
static registerAsync(asyncOptions: IPluginAsyncOptions<ICachePluginOptions>): CachePlugin;
|
|
31
|
+
private static mergeDefaults;
|
|
32
|
+
getImports(): Array<Type<unknown> | DynamicModule | ForwardReference>;
|
|
14
33
|
getProviders(): Provider[];
|
|
15
34
|
getExports(): Array<string | symbol | Provider>;
|
|
16
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.plugin.d.ts","sourceRoot":"","sources":["../src/cache.plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.plugin.d.ts","sourceRoot":"","sources":["../src/cache.plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAczE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAMrD,qBAAa,WAAY,YAAW,aAAa;IAOnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,2EAA2E;IAE/F,OAAO,CAAC,YAAY,CAAC,CAA2C;gBAEnC,OAAO,GAAE,mBAAwB;IAE9D;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,WAAW;IAMzF,OAAO,CAAC,MAAM,CAAC,aAAa;IAa5B,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,GAAG,gBAAgB,CAAC;IAIrE,YAAY,IAAI,QAAQ,EAAE;IAkG1B,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;CAGhD"}
|
package/dist/index.js
CHANGED
|
@@ -116,20 +116,19 @@ function Cached(options = {}) {
|
|
|
116
116
|
return originalMethod.apply(this, args);
|
|
117
117
|
}
|
|
118
118
|
const key = buildCacheKey(this, propertyKey.toString(), args, options);
|
|
119
|
+
const tags = typeof options.tags === "function" ? options.tags(...args) : options.tags;
|
|
119
120
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
return await cacheService.getOrSet(key, () => originalMethod.apply(this, args), {
|
|
122
|
+
ttl: options.ttl,
|
|
123
|
+
tags,
|
|
124
|
+
strategy: options.strategy,
|
|
125
|
+
swr: options.swr,
|
|
126
|
+
unless: options.unless ? (result) => options.unless(result, ...args) : void 0
|
|
127
|
+
});
|
|
124
128
|
} catch (error) {
|
|
125
|
-
logger.error(`@Cached:
|
|
126
|
-
|
|
127
|
-
const result = await originalMethod.apply(this, args);
|
|
128
|
-
if (options.unless?.(result, ...args)) {
|
|
129
|
-
return result;
|
|
129
|
+
logger.error(`@Cached: getOrSet error for key ${key}:`, error);
|
|
130
|
+
return originalMethod.apply(this, args);
|
|
130
131
|
}
|
|
131
|
-
await cacheResult(cacheService, key, result, options, args);
|
|
132
|
-
return result;
|
|
133
132
|
};
|
|
134
133
|
Object.defineProperty(descriptor.value, "name", {
|
|
135
134
|
value: originalMethod.name,
|
|
@@ -161,6 +160,10 @@ function enrichWithContext(key, options) {
|
|
|
161
160
|
for (const ctxKey of contextKeys) {
|
|
162
161
|
const value = pluginOpts.contextProvider.get(ctxKey);
|
|
163
162
|
if (value !== void 0 && value !== null) {
|
|
163
|
+
if (typeof value === "object") {
|
|
164
|
+
logger.warn(`Context key "${ctxKey}" has object value, skipping (use primitives for context keys)`);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
164
167
|
contextMap.set(ctxKey, String(value));
|
|
165
168
|
}
|
|
166
169
|
}
|
|
@@ -169,6 +172,10 @@ function enrichWithContext(key, options) {
|
|
|
169
172
|
if (!contextMap.has(name)) {
|
|
170
173
|
const value = pluginOpts.contextProvider.get(name);
|
|
171
174
|
if (value !== void 0 && value !== null) {
|
|
175
|
+
if (typeof value === "object") {
|
|
176
|
+
logger.warn(`varyBy key "${name}" has object value, skipping (use primitives for varyBy keys)`);
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
172
179
|
contextMap.set(name, String(value));
|
|
173
180
|
}
|
|
174
181
|
}
|
|
@@ -183,7 +190,7 @@ function sanitizeForKey(value) {
|
|
|
183
190
|
return String(value).replace(/[^a-zA-Z0-9\-_]/g, "_");
|
|
184
191
|
}
|
|
185
192
|
function interpolateKey(template, args) {
|
|
186
|
-
return template.replace(/\{(\d+)
|
|
193
|
+
return template.replace(/\{(\d+)}/g, (match, index) => {
|
|
187
194
|
const argIndex = parseInt(index, 10);
|
|
188
195
|
if (argIndex < args.length) {
|
|
189
196
|
return serializeArg(args[argIndex]);
|
|
@@ -200,38 +207,43 @@ function serializeArg(arg) {
|
|
|
200
207
|
}
|
|
201
208
|
if (typeof arg === "object") {
|
|
202
209
|
try {
|
|
203
|
-
return
|
|
210
|
+
return stableStringify(arg);
|
|
204
211
|
} catch {
|
|
205
212
|
return "object";
|
|
206
213
|
}
|
|
207
214
|
}
|
|
208
215
|
return "unknown";
|
|
209
216
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
tags,
|
|
221
|
-
strategy: options.strategy,
|
|
222
|
-
swr: options.swr
|
|
223
|
-
}
|
|
224
|
-
);
|
|
225
|
-
} else {
|
|
226
|
-
await cacheService.set(key, value, {
|
|
227
|
-
ttl: options.ttl,
|
|
228
|
-
tags,
|
|
229
|
-
strategy: options.strategy
|
|
230
|
-
});
|
|
217
|
+
function stableStringify(value) {
|
|
218
|
+
if (value === null || value === void 0) {
|
|
219
|
+
return "null";
|
|
220
|
+
}
|
|
221
|
+
if (typeof value === "function" || typeof value === "symbol") {
|
|
222
|
+
return "null";
|
|
223
|
+
}
|
|
224
|
+
if (typeof value !== "object") {
|
|
225
|
+
if (typeof value === "bigint") {
|
|
226
|
+
return String(value);
|
|
231
227
|
}
|
|
232
|
-
|
|
233
|
-
|
|
228
|
+
return JSON.stringify(value);
|
|
229
|
+
}
|
|
230
|
+
if (Array.isArray(value)) {
|
|
231
|
+
return "[" + value.map((item) => item === void 0 || typeof item === "function" || typeof item === "symbol" ? "null" : stableStringify(item)).join(",") + "]";
|
|
234
232
|
}
|
|
233
|
+
if (value instanceof Date) {
|
|
234
|
+
return JSON.stringify(value);
|
|
235
|
+
}
|
|
236
|
+
const obj = value;
|
|
237
|
+
const keys = Object.keys(obj).sort();
|
|
238
|
+
const parts = [];
|
|
239
|
+
for (const key of keys) {
|
|
240
|
+
const v = obj[key];
|
|
241
|
+
if (v === void 0 || typeof v === "function" || typeof v === "symbol") {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
parts.push(JSON.stringify(key) + ":" + stableStringify(v));
|
|
245
|
+
}
|
|
246
|
+
return "{" + parts.join(",") + "}";
|
|
235
247
|
}
|
|
236
248
|
|
|
237
249
|
// src/invalidation/infrastructure/decorators/invalidate-on.decorator.ts
|
|
@@ -873,7 +885,7 @@ var CacheService = class {
|
|
|
873
885
|
async getOrSet(key, loader, options = {}) {
|
|
874
886
|
const normalizedKey = this.validateAndNormalizeKey(key);
|
|
875
887
|
const enrichedKey = this.enrichKeyWithContext(normalizedKey, options.varyBy);
|
|
876
|
-
const swrEnabled =
|
|
888
|
+
const swrEnabled = options.swr?.enabled ?? this.swrEnabled;
|
|
877
889
|
if (swrEnabled) {
|
|
878
890
|
const swrEntry = await this.l2Store.getSwr(enrichedKey);
|
|
879
891
|
if (swrEntry) {
|
|
@@ -885,11 +897,14 @@ var CacheService = class {
|
|
|
885
897
|
enrichedKey,
|
|
886
898
|
loader,
|
|
887
899
|
async (freshValue) => {
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
900
|
+
const staleTime = options.swr?.staleTime ?? this.options.swr?.defaultStaleTime ?? 60;
|
|
901
|
+
const ttl = options.ttl ?? this.options.l2?.defaultTtl ?? 3600;
|
|
902
|
+
const swrEntryNew = this.swrManager.createSwrEntry(freshValue, ttl, staleTime);
|
|
903
|
+
await this.l2Store.setSwr(enrichedKey, swrEntryNew);
|
|
904
|
+
if (this.l1Enabled) {
|
|
905
|
+
const entry = CacheEntry.create(freshValue, ttl);
|
|
906
|
+
await this.l1Store.set(enrichedKey, entry, this.options.l1?.ttl);
|
|
907
|
+
}
|
|
893
908
|
},
|
|
894
909
|
(error) => {
|
|
895
910
|
this.logger.error(`SWR revalidation failed for key ${enrichedKey}:`, error);
|
|
@@ -900,10 +915,12 @@ var CacheService = class {
|
|
|
900
915
|
}
|
|
901
916
|
}
|
|
902
917
|
const value = await this.loadWithStampede(enrichedKey, loader, options);
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
918
|
+
if (!options.unless?.(value)) {
|
|
919
|
+
const staleTime = options.swr?.staleTime ?? this.options.swr?.defaultStaleTime ?? 60;
|
|
920
|
+
const ttl = options.ttl ?? this.options.l2?.defaultTtl ?? 3600;
|
|
921
|
+
const swrEntryNew = this.swrManager.createSwrEntry(value, ttl, staleTime);
|
|
922
|
+
await this.l2Store.setSwr(enrichedKey, swrEntryNew);
|
|
923
|
+
}
|
|
907
924
|
return value;
|
|
908
925
|
}
|
|
909
926
|
const cached = await this.get(enrichedKey);
|
|
@@ -928,19 +945,23 @@ var CacheService = class {
|
|
|
928
945
|
this.metrics?.incrementCounter("redisx_cache_stampede_prevented_total");
|
|
929
946
|
return result.value;
|
|
930
947
|
}
|
|
931
|
-
|
|
948
|
+
if (!options.unless?.(result.value)) {
|
|
949
|
+
await this.set(key, result.value, {
|
|
950
|
+
ttl: options.ttl,
|
|
951
|
+
tags: options.tags,
|
|
952
|
+
strategy: options.strategy
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
return result.value;
|
|
956
|
+
}
|
|
957
|
+
const value = await loader();
|
|
958
|
+
if (!options.unless?.(value)) {
|
|
959
|
+
await this.set(key, value, {
|
|
932
960
|
ttl: options.ttl,
|
|
933
961
|
tags: options.tags,
|
|
934
962
|
strategy: options.strategy
|
|
935
963
|
});
|
|
936
|
-
return result.value;
|
|
937
964
|
}
|
|
938
|
-
const value = await loader();
|
|
939
|
-
await this.set(key, value, {
|
|
940
|
-
ttl: options.ttl,
|
|
941
|
-
tags: options.tags,
|
|
942
|
-
strategy: options.strategy
|
|
943
|
-
});
|
|
944
965
|
return value;
|
|
945
966
|
}
|
|
946
967
|
async delete(key) {
|
|
@@ -983,11 +1004,12 @@ var CacheService = class {
|
|
|
983
1004
|
if (normalizedKeys.length === 0) {
|
|
984
1005
|
return 0;
|
|
985
1006
|
}
|
|
986
|
-
|
|
1007
|
+
const deleted = new Array(normalizedKeys.length).fill(false);
|
|
987
1008
|
if (this.l1Enabled) {
|
|
988
|
-
for (
|
|
989
|
-
|
|
990
|
-
|
|
1009
|
+
for (let i = 0; i < normalizedKeys.length; i++) {
|
|
1010
|
+
if (await this.l1Store.delete(normalizedKeys[i])) {
|
|
1011
|
+
deleted[i] = true;
|
|
1012
|
+
}
|
|
991
1013
|
}
|
|
992
1014
|
}
|
|
993
1015
|
if (this.l2Enabled && normalizedKeys.length > 0) {
|
|
@@ -997,17 +1019,16 @@ var CacheService = class {
|
|
|
997
1019
|
pipeline.del(fullKey);
|
|
998
1020
|
}
|
|
999
1021
|
const results = await pipeline.exec();
|
|
1000
|
-
let l2Count = 0;
|
|
1001
1022
|
if (results) {
|
|
1002
|
-
for (
|
|
1023
|
+
for (let i = 0; i < results.length; i++) {
|
|
1024
|
+
const [error, result] = results[i];
|
|
1003
1025
|
if (!error && typeof result === "number" && result > 0) {
|
|
1004
|
-
|
|
1026
|
+
deleted[i] = true;
|
|
1005
1027
|
}
|
|
1006
1028
|
}
|
|
1007
1029
|
}
|
|
1008
|
-
deletedCount = Math.max(deletedCount, l2Count);
|
|
1009
1030
|
}
|
|
1010
|
-
return
|
|
1031
|
+
return deleted.filter(Boolean).length;
|
|
1011
1032
|
} catch (error) {
|
|
1012
1033
|
throw new CacheError(`Failed to delete multiple keys: ${error.message}`, core.ErrorCode.CACHE_DELETE_FAILED, error);
|
|
1013
1034
|
}
|
|
@@ -1144,10 +1165,10 @@ var CacheService = class {
|
|
|
1144
1165
|
const maxTtl = this.options.l2?.maxTtl ?? 86400;
|
|
1145
1166
|
const defaultTtl = this.options.l2?.defaultTtl ?? 3600;
|
|
1146
1167
|
const cacheEntries = entries.map(({ key, value, ttl }) => {
|
|
1147
|
-
const entryTtl = ttl ?? defaultTtl;
|
|
1168
|
+
const entryTtl = Math.min(ttl ?? defaultTtl, maxTtl);
|
|
1148
1169
|
return {
|
|
1149
1170
|
key: this.enrichKeyWithContext(this.validateAndNormalizeKey(key)),
|
|
1150
|
-
entry: CacheEntry.create(value,
|
|
1171
|
+
entry: CacheEntry.create(value, entryTtl),
|
|
1151
1172
|
ttl: entryTtl
|
|
1152
1173
|
};
|
|
1153
1174
|
});
|
|
@@ -1272,6 +1293,10 @@ var CacheService = class {
|
|
|
1272
1293
|
for (const ctxKey of contextKeys) {
|
|
1273
1294
|
const value = contextProvider.get(ctxKey);
|
|
1274
1295
|
if (value !== void 0 && value !== null) {
|
|
1296
|
+
if (typeof value === "object") {
|
|
1297
|
+
this.logger.warn(`Context key "${ctxKey}" has object value, skipping (use primitives for context keys)`);
|
|
1298
|
+
continue;
|
|
1299
|
+
}
|
|
1275
1300
|
contextMap.set(ctxKey, String(value));
|
|
1276
1301
|
}
|
|
1277
1302
|
}
|
|
@@ -1509,12 +1534,6 @@ var L1MemoryStoreAdapter = class {
|
|
|
1509
1534
|
}
|
|
1510
1535
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
1511
1536
|
async size() {
|
|
1512
|
-
const now = Date.now();
|
|
1513
|
-
for (const [key, node] of this.cache.entries()) {
|
|
1514
|
-
if (now > node.expiresAt) {
|
|
1515
|
-
void this.delete(key);
|
|
1516
|
-
}
|
|
1517
|
-
}
|
|
1518
1537
|
return this.cache.size;
|
|
1519
1538
|
}
|
|
1520
1539
|
moveToFront(node) {
|
|
@@ -2712,9 +2731,6 @@ var SwrManagerService = class {
|
|
|
2712
2731
|
async delete(_key) {
|
|
2713
2732
|
}
|
|
2714
2733
|
isStale(entry) {
|
|
2715
|
-
if (!this.enabled) {
|
|
2716
|
-
return false;
|
|
2717
|
-
}
|
|
2718
2734
|
const now = Date.now();
|
|
2719
2735
|
return now > entry.staleAt;
|
|
2720
2736
|
}
|
|
@@ -3047,33 +3063,63 @@ LuaScriptLoader = __decorateClass([
|
|
|
3047
3063
|
], LuaScriptLoader);
|
|
3048
3064
|
|
|
3049
3065
|
// src/cache.plugin.ts
|
|
3050
|
-
var CachePlugin = class {
|
|
3066
|
+
var CachePlugin = class _CachePlugin {
|
|
3051
3067
|
constructor(options = {}) {
|
|
3052
3068
|
this.options = options;
|
|
3053
3069
|
}
|
|
3054
3070
|
name = "cache";
|
|
3055
3071
|
version = "0.1.0";
|
|
3056
3072
|
description = "Advanced caching with L1+L2, anti-stampede, SWR, and tag invalidation";
|
|
3073
|
+
asyncOptions;
|
|
3074
|
+
/**
|
|
3075
|
+
* Create a CachePlugin with async configuration from DI.
|
|
3076
|
+
*
|
|
3077
|
+
* @example
|
|
3078
|
+
* ```typescript
|
|
3079
|
+
* CachePlugin.registerAsync({
|
|
3080
|
+
* imports: [ConfigModule],
|
|
3081
|
+
* inject: [ConfigService],
|
|
3082
|
+
* useFactory: (config: ConfigService) => ({
|
|
3083
|
+
* l1: { maxSize: config.get('CACHE_L1_MAX_SIZE', 1000) },
|
|
3084
|
+
* swr: { enabled: config.get('CACHE_SWR_ENABLED', false) },
|
|
3085
|
+
* }),
|
|
3086
|
+
* })
|
|
3087
|
+
* ```
|
|
3088
|
+
*/
|
|
3089
|
+
static registerAsync(asyncOptions) {
|
|
3090
|
+
const plugin = new _CachePlugin();
|
|
3091
|
+
plugin.asyncOptions = asyncOptions;
|
|
3092
|
+
return plugin;
|
|
3093
|
+
}
|
|
3094
|
+
static mergeDefaults(options) {
|
|
3095
|
+
return {
|
|
3096
|
+
l1: { ...DEFAULT_CACHE_CONFIG.l1, ...options.l1 },
|
|
3097
|
+
l2: { ...DEFAULT_CACHE_CONFIG.l2, ...options.l2 },
|
|
3098
|
+
stampede: { ...DEFAULT_CACHE_CONFIG.stampede, ...options.stampede },
|
|
3099
|
+
swr: { ...DEFAULT_CACHE_CONFIG.swr, ...options.swr },
|
|
3100
|
+
tags: { ...DEFAULT_CACHE_CONFIG.tags, ...options.tags },
|
|
3101
|
+
warmup: { ...DEFAULT_CACHE_CONFIG.warmup, ...options.warmup },
|
|
3102
|
+
keys: { ...DEFAULT_CACHE_CONFIG.keys, ...options.keys },
|
|
3103
|
+
invalidation: { ...DEFAULT_CACHE_CONFIG.invalidation, ...options.invalidation }
|
|
3104
|
+
};
|
|
3105
|
+
}
|
|
3106
|
+
getImports() {
|
|
3107
|
+
return this.asyncOptions?.imports ?? [];
|
|
3108
|
+
}
|
|
3057
3109
|
getProviders() {
|
|
3058
|
-
const
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
...this.options.invalidation
|
|
3069
|
-
}
|
|
3110
|
+
const optionsProvider = this.asyncOptions ? {
|
|
3111
|
+
provide: CACHE_PLUGIN_OPTIONS,
|
|
3112
|
+
useFactory: async (...args) => {
|
|
3113
|
+
const userOptions = await this.asyncOptions.useFactory(...args);
|
|
3114
|
+
return _CachePlugin.mergeDefaults(userOptions);
|
|
3115
|
+
},
|
|
3116
|
+
inject: this.asyncOptions.inject || []
|
|
3117
|
+
} : {
|
|
3118
|
+
provide: CACHE_PLUGIN_OPTIONS,
|
|
3119
|
+
useValue: _CachePlugin.mergeDefaults(this.options)
|
|
3070
3120
|
};
|
|
3071
3121
|
return [
|
|
3072
|
-
|
|
3073
|
-
{
|
|
3074
|
-
provide: CACHE_PLUGIN_OPTIONS,
|
|
3075
|
-
useValue: config
|
|
3076
|
-
},
|
|
3122
|
+
optionsProvider,
|
|
3077
3123
|
// Domain services
|
|
3078
3124
|
{
|
|
3079
3125
|
provide: SERIALIZER,
|
|
@@ -3131,9 +3177,9 @@ var CachePlugin = class {
|
|
|
3131
3177
|
// Factory for registering static invalidation rules
|
|
3132
3178
|
{
|
|
3133
3179
|
provide: INVALIDATION_RULES_INIT,
|
|
3134
|
-
useFactory: (registry,
|
|
3135
|
-
if (
|
|
3136
|
-
const rules =
|
|
3180
|
+
useFactory: (registry, config) => {
|
|
3181
|
+
if (config.invalidation?.rules && config.invalidation.rules.length > 0) {
|
|
3182
|
+
const rules = config.invalidation.rules.map((ruleProps) => InvalidationRule.create(ruleProps));
|
|
3137
3183
|
registry.registerMany(rules);
|
|
3138
3184
|
}
|
|
3139
3185
|
return true;
|