@nestjs-redisx/cache 1.0.1 → 1.0.3
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 +22 -3
- package/dist/cache.plugin.d.ts.map +1 -1
- package/dist/index.js +147 -98
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +147 -98
- 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
|
-
readonly version
|
|
11
|
+
readonly version: string;
|
|
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;AAezE,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,EAAE,MAAM,CAAW;IACnC,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
|
@@ -25,6 +25,9 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
25
25
|
};
|
|
26
26
|
var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
|
|
27
27
|
|
|
28
|
+
// package.json
|
|
29
|
+
var version = "1.0.3";
|
|
30
|
+
|
|
28
31
|
// src/shared/constants/index.ts
|
|
29
32
|
var CACHE_PLUGIN_OPTIONS = /* @__PURE__ */ Symbol.for("CACHE_PLUGIN_OPTIONS");
|
|
30
33
|
var CACHE_SERVICE = /* @__PURE__ */ Symbol.for("CACHE_SERVICE");
|
|
@@ -116,20 +119,19 @@ function Cached(options = {}) {
|
|
|
116
119
|
return originalMethod.apply(this, args);
|
|
117
120
|
}
|
|
118
121
|
const key = buildCacheKey(this, propertyKey.toString(), args, options);
|
|
122
|
+
const tags = typeof options.tags === "function" ? options.tags(...args) : options.tags;
|
|
119
123
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
return await cacheService.getOrSet(key, () => originalMethod.apply(this, args), {
|
|
125
|
+
ttl: options.ttl,
|
|
126
|
+
tags,
|
|
127
|
+
strategy: options.strategy,
|
|
128
|
+
swr: options.swr,
|
|
129
|
+
unless: options.unless ? (result) => options.unless(result, ...args) : void 0
|
|
130
|
+
});
|
|
124
131
|
} catch (error) {
|
|
125
|
-
logger.error(`@Cached:
|
|
126
|
-
|
|
127
|
-
const result = await originalMethod.apply(this, args);
|
|
128
|
-
if (options.unless?.(result, ...args)) {
|
|
129
|
-
return result;
|
|
132
|
+
logger.error(`@Cached: getOrSet error for key ${key}:`, error);
|
|
133
|
+
return originalMethod.apply(this, args);
|
|
130
134
|
}
|
|
131
|
-
await cacheResult(cacheService, key, result, options, args);
|
|
132
|
-
return result;
|
|
133
135
|
};
|
|
134
136
|
Object.defineProperty(descriptor.value, "name", {
|
|
135
137
|
value: originalMethod.name,
|
|
@@ -161,6 +163,10 @@ function enrichWithContext(key, options) {
|
|
|
161
163
|
for (const ctxKey of contextKeys) {
|
|
162
164
|
const value = pluginOpts.contextProvider.get(ctxKey);
|
|
163
165
|
if (value !== void 0 && value !== null) {
|
|
166
|
+
if (typeof value === "object") {
|
|
167
|
+
logger.warn(`Context key "${ctxKey}" has object value, skipping (use primitives for context keys)`);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
164
170
|
contextMap.set(ctxKey, String(value));
|
|
165
171
|
}
|
|
166
172
|
}
|
|
@@ -169,6 +175,10 @@ function enrichWithContext(key, options) {
|
|
|
169
175
|
if (!contextMap.has(name)) {
|
|
170
176
|
const value = pluginOpts.contextProvider.get(name);
|
|
171
177
|
if (value !== void 0 && value !== null) {
|
|
178
|
+
if (typeof value === "object") {
|
|
179
|
+
logger.warn(`varyBy key "${name}" has object value, skipping (use primitives for varyBy keys)`);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
172
182
|
contextMap.set(name, String(value));
|
|
173
183
|
}
|
|
174
184
|
}
|
|
@@ -183,7 +193,7 @@ function sanitizeForKey(value) {
|
|
|
183
193
|
return String(value).replace(/[^a-zA-Z0-9\-_]/g, "_");
|
|
184
194
|
}
|
|
185
195
|
function interpolateKey(template, args) {
|
|
186
|
-
return template.replace(/\{(\d+)
|
|
196
|
+
return template.replace(/\{(\d+)}/g, (match, index) => {
|
|
187
197
|
const argIndex = parseInt(index, 10);
|
|
188
198
|
if (argIndex < args.length) {
|
|
189
199
|
return serializeArg(args[argIndex]);
|
|
@@ -200,38 +210,43 @@ function serializeArg(arg) {
|
|
|
200
210
|
}
|
|
201
211
|
if (typeof arg === "object") {
|
|
202
212
|
try {
|
|
203
|
-
return
|
|
213
|
+
return stableStringify(arg);
|
|
204
214
|
} catch {
|
|
205
215
|
return "object";
|
|
206
216
|
}
|
|
207
217
|
}
|
|
208
218
|
return "unknown";
|
|
209
219
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
220
|
+
function stableStringify(value) {
|
|
221
|
+
if (value === null || value === void 0) {
|
|
222
|
+
return "null";
|
|
223
|
+
}
|
|
224
|
+
if (typeof value === "function" || typeof value === "symbol") {
|
|
225
|
+
return "null";
|
|
226
|
+
}
|
|
227
|
+
if (typeof value !== "object") {
|
|
228
|
+
if (typeof value === "bigint") {
|
|
229
|
+
return String(value);
|
|
230
|
+
}
|
|
231
|
+
return JSON.stringify(value);
|
|
232
|
+
}
|
|
233
|
+
if (Array.isArray(value)) {
|
|
234
|
+
return "[" + value.map((item) => item === void 0 || typeof item === "function" || typeof item === "symbol" ? "null" : stableStringify(item)).join(",") + "]";
|
|
235
|
+
}
|
|
236
|
+
if (value instanceof Date) {
|
|
237
|
+
return JSON.stringify(value);
|
|
238
|
+
}
|
|
239
|
+
const obj = value;
|
|
240
|
+
const keys = Object.keys(obj).sort();
|
|
241
|
+
const parts = [];
|
|
242
|
+
for (const key of keys) {
|
|
243
|
+
const v = obj[key];
|
|
244
|
+
if (v === void 0 || typeof v === "function" || typeof v === "symbol") {
|
|
245
|
+
continue;
|
|
231
246
|
}
|
|
232
|
-
|
|
233
|
-
logger.error(`@Cached: Failed to cache result for key ${key}:`, error);
|
|
247
|
+
parts.push(JSON.stringify(key) + ":" + stableStringify(v));
|
|
234
248
|
}
|
|
249
|
+
return "{" + parts.join(",") + "}";
|
|
235
250
|
}
|
|
236
251
|
|
|
237
252
|
// src/invalidation/infrastructure/decorators/invalidate-on.decorator.ts
|
|
@@ -873,7 +888,7 @@ var CacheService = class {
|
|
|
873
888
|
async getOrSet(key, loader, options = {}) {
|
|
874
889
|
const normalizedKey = this.validateAndNormalizeKey(key);
|
|
875
890
|
const enrichedKey = this.enrichKeyWithContext(normalizedKey, options.varyBy);
|
|
876
|
-
const swrEnabled =
|
|
891
|
+
const swrEnabled = options.swr?.enabled ?? this.swrEnabled;
|
|
877
892
|
if (swrEnabled) {
|
|
878
893
|
const swrEntry = await this.l2Store.getSwr(enrichedKey);
|
|
879
894
|
if (swrEntry) {
|
|
@@ -885,11 +900,14 @@ var CacheService = class {
|
|
|
885
900
|
enrichedKey,
|
|
886
901
|
loader,
|
|
887
902
|
async (freshValue) => {
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
903
|
+
const staleTime = options.swr?.staleTime ?? this.options.swr?.defaultStaleTime ?? 60;
|
|
904
|
+
const ttl = options.ttl ?? this.options.l2?.defaultTtl ?? 3600;
|
|
905
|
+
const swrEntryNew = this.swrManager.createSwrEntry(freshValue, ttl, staleTime);
|
|
906
|
+
await this.l2Store.setSwr(enrichedKey, swrEntryNew);
|
|
907
|
+
if (this.l1Enabled) {
|
|
908
|
+
const entry = CacheEntry.create(freshValue, ttl);
|
|
909
|
+
await this.l1Store.set(enrichedKey, entry, this.options.l1?.ttl);
|
|
910
|
+
}
|
|
893
911
|
},
|
|
894
912
|
(error) => {
|
|
895
913
|
this.logger.error(`SWR revalidation failed for key ${enrichedKey}:`, error);
|
|
@@ -900,10 +918,12 @@ var CacheService = class {
|
|
|
900
918
|
}
|
|
901
919
|
}
|
|
902
920
|
const value = await this.loadWithStampede(enrichedKey, loader, options);
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
921
|
+
if (!options.unless?.(value)) {
|
|
922
|
+
const staleTime = options.swr?.staleTime ?? this.options.swr?.defaultStaleTime ?? 60;
|
|
923
|
+
const ttl = options.ttl ?? this.options.l2?.defaultTtl ?? 3600;
|
|
924
|
+
const swrEntryNew = this.swrManager.createSwrEntry(value, ttl, staleTime);
|
|
925
|
+
await this.l2Store.setSwr(enrichedKey, swrEntryNew);
|
|
926
|
+
}
|
|
907
927
|
return value;
|
|
908
928
|
}
|
|
909
929
|
const cached = await this.get(enrichedKey);
|
|
@@ -928,19 +948,23 @@ var CacheService = class {
|
|
|
928
948
|
this.metrics?.incrementCounter("redisx_cache_stampede_prevented_total");
|
|
929
949
|
return result.value;
|
|
930
950
|
}
|
|
931
|
-
|
|
951
|
+
if (!options.unless?.(result.value)) {
|
|
952
|
+
await this.set(key, result.value, {
|
|
953
|
+
ttl: options.ttl,
|
|
954
|
+
tags: options.tags,
|
|
955
|
+
strategy: options.strategy
|
|
956
|
+
});
|
|
957
|
+
}
|
|
958
|
+
return result.value;
|
|
959
|
+
}
|
|
960
|
+
const value = await loader();
|
|
961
|
+
if (!options.unless?.(value)) {
|
|
962
|
+
await this.set(key, value, {
|
|
932
963
|
ttl: options.ttl,
|
|
933
964
|
tags: options.tags,
|
|
934
965
|
strategy: options.strategy
|
|
935
966
|
});
|
|
936
|
-
return result.value;
|
|
937
967
|
}
|
|
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
968
|
return value;
|
|
945
969
|
}
|
|
946
970
|
async delete(key) {
|
|
@@ -983,11 +1007,12 @@ var CacheService = class {
|
|
|
983
1007
|
if (normalizedKeys.length === 0) {
|
|
984
1008
|
return 0;
|
|
985
1009
|
}
|
|
986
|
-
|
|
1010
|
+
const deleted = new Array(normalizedKeys.length).fill(false);
|
|
987
1011
|
if (this.l1Enabled) {
|
|
988
|
-
for (
|
|
989
|
-
|
|
990
|
-
|
|
1012
|
+
for (let i = 0; i < normalizedKeys.length; i++) {
|
|
1013
|
+
if (await this.l1Store.delete(normalizedKeys[i])) {
|
|
1014
|
+
deleted[i] = true;
|
|
1015
|
+
}
|
|
991
1016
|
}
|
|
992
1017
|
}
|
|
993
1018
|
if (this.l2Enabled && normalizedKeys.length > 0) {
|
|
@@ -997,17 +1022,16 @@ var CacheService = class {
|
|
|
997
1022
|
pipeline.del(fullKey);
|
|
998
1023
|
}
|
|
999
1024
|
const results = await pipeline.exec();
|
|
1000
|
-
let l2Count = 0;
|
|
1001
1025
|
if (results) {
|
|
1002
|
-
for (
|
|
1026
|
+
for (let i = 0; i < results.length; i++) {
|
|
1027
|
+
const [error, result] = results[i];
|
|
1003
1028
|
if (!error && typeof result === "number" && result > 0) {
|
|
1004
|
-
|
|
1029
|
+
deleted[i] = true;
|
|
1005
1030
|
}
|
|
1006
1031
|
}
|
|
1007
1032
|
}
|
|
1008
|
-
deletedCount = Math.max(deletedCount, l2Count);
|
|
1009
1033
|
}
|
|
1010
|
-
return
|
|
1034
|
+
return deleted.filter(Boolean).length;
|
|
1011
1035
|
} catch (error) {
|
|
1012
1036
|
throw new CacheError(`Failed to delete multiple keys: ${error.message}`, core.ErrorCode.CACHE_DELETE_FAILED, error);
|
|
1013
1037
|
}
|
|
@@ -1144,10 +1168,10 @@ var CacheService = class {
|
|
|
1144
1168
|
const maxTtl = this.options.l2?.maxTtl ?? 86400;
|
|
1145
1169
|
const defaultTtl = this.options.l2?.defaultTtl ?? 3600;
|
|
1146
1170
|
const cacheEntries = entries.map(({ key, value, ttl }) => {
|
|
1147
|
-
const entryTtl = ttl ?? defaultTtl;
|
|
1171
|
+
const entryTtl = Math.min(ttl ?? defaultTtl, maxTtl);
|
|
1148
1172
|
return {
|
|
1149
1173
|
key: this.enrichKeyWithContext(this.validateAndNormalizeKey(key)),
|
|
1150
|
-
entry: CacheEntry.create(value,
|
|
1174
|
+
entry: CacheEntry.create(value, entryTtl),
|
|
1151
1175
|
ttl: entryTtl
|
|
1152
1176
|
};
|
|
1153
1177
|
});
|
|
@@ -1272,6 +1296,10 @@ var CacheService = class {
|
|
|
1272
1296
|
for (const ctxKey of contextKeys) {
|
|
1273
1297
|
const value = contextProvider.get(ctxKey);
|
|
1274
1298
|
if (value !== void 0 && value !== null) {
|
|
1299
|
+
if (typeof value === "object") {
|
|
1300
|
+
this.logger.warn(`Context key "${ctxKey}" has object value, skipping (use primitives for context keys)`);
|
|
1301
|
+
continue;
|
|
1302
|
+
}
|
|
1275
1303
|
contextMap.set(ctxKey, String(value));
|
|
1276
1304
|
}
|
|
1277
1305
|
}
|
|
@@ -1509,12 +1537,6 @@ var L1MemoryStoreAdapter = class {
|
|
|
1509
1537
|
}
|
|
1510
1538
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
1511
1539
|
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
1540
|
return this.cache.size;
|
|
1519
1541
|
}
|
|
1520
1542
|
moveToFront(node) {
|
|
@@ -2712,9 +2734,6 @@ var SwrManagerService = class {
|
|
|
2712
2734
|
async delete(_key) {
|
|
2713
2735
|
}
|
|
2714
2736
|
isStale(entry) {
|
|
2715
|
-
if (!this.enabled) {
|
|
2716
|
-
return false;
|
|
2717
|
-
}
|
|
2718
2737
|
const now = Date.now();
|
|
2719
2738
|
return now > entry.staleAt;
|
|
2720
2739
|
}
|
|
@@ -3047,33 +3066,63 @@ LuaScriptLoader = __decorateClass([
|
|
|
3047
3066
|
], LuaScriptLoader);
|
|
3048
3067
|
|
|
3049
3068
|
// src/cache.plugin.ts
|
|
3050
|
-
var CachePlugin = class {
|
|
3069
|
+
var CachePlugin = class _CachePlugin {
|
|
3051
3070
|
constructor(options = {}) {
|
|
3052
3071
|
this.options = options;
|
|
3053
3072
|
}
|
|
3054
3073
|
name = "cache";
|
|
3055
|
-
version =
|
|
3074
|
+
version = version;
|
|
3056
3075
|
description = "Advanced caching with L1+L2, anti-stampede, SWR, and tag invalidation";
|
|
3076
|
+
asyncOptions;
|
|
3077
|
+
/**
|
|
3078
|
+
* Create a CachePlugin with async configuration from DI.
|
|
3079
|
+
*
|
|
3080
|
+
* @example
|
|
3081
|
+
* ```typescript
|
|
3082
|
+
* CachePlugin.registerAsync({
|
|
3083
|
+
* imports: [ConfigModule],
|
|
3084
|
+
* inject: [ConfigService],
|
|
3085
|
+
* useFactory: (config: ConfigService) => ({
|
|
3086
|
+
* l1: { maxSize: config.get('CACHE_L1_MAX_SIZE', 1000) },
|
|
3087
|
+
* swr: { enabled: config.get('CACHE_SWR_ENABLED', false) },
|
|
3088
|
+
* }),
|
|
3089
|
+
* })
|
|
3090
|
+
* ```
|
|
3091
|
+
*/
|
|
3092
|
+
static registerAsync(asyncOptions) {
|
|
3093
|
+
const plugin = new _CachePlugin();
|
|
3094
|
+
plugin.asyncOptions = asyncOptions;
|
|
3095
|
+
return plugin;
|
|
3096
|
+
}
|
|
3097
|
+
static mergeDefaults(options) {
|
|
3098
|
+
return {
|
|
3099
|
+
l1: { ...DEFAULT_CACHE_CONFIG.l1, ...options.l1 },
|
|
3100
|
+
l2: { ...DEFAULT_CACHE_CONFIG.l2, ...options.l2 },
|
|
3101
|
+
stampede: { ...DEFAULT_CACHE_CONFIG.stampede, ...options.stampede },
|
|
3102
|
+
swr: { ...DEFAULT_CACHE_CONFIG.swr, ...options.swr },
|
|
3103
|
+
tags: { ...DEFAULT_CACHE_CONFIG.tags, ...options.tags },
|
|
3104
|
+
warmup: { ...DEFAULT_CACHE_CONFIG.warmup, ...options.warmup },
|
|
3105
|
+
keys: { ...DEFAULT_CACHE_CONFIG.keys, ...options.keys },
|
|
3106
|
+
invalidation: { ...DEFAULT_CACHE_CONFIG.invalidation, ...options.invalidation }
|
|
3107
|
+
};
|
|
3108
|
+
}
|
|
3109
|
+
getImports() {
|
|
3110
|
+
return this.asyncOptions?.imports ?? [];
|
|
3111
|
+
}
|
|
3057
3112
|
getProviders() {
|
|
3058
|
-
const
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
...this.options.invalidation
|
|
3069
|
-
}
|
|
3113
|
+
const optionsProvider = this.asyncOptions ? {
|
|
3114
|
+
provide: CACHE_PLUGIN_OPTIONS,
|
|
3115
|
+
useFactory: async (...args) => {
|
|
3116
|
+
const userOptions = await this.asyncOptions.useFactory(...args);
|
|
3117
|
+
return _CachePlugin.mergeDefaults(userOptions);
|
|
3118
|
+
},
|
|
3119
|
+
inject: this.asyncOptions.inject || []
|
|
3120
|
+
} : {
|
|
3121
|
+
provide: CACHE_PLUGIN_OPTIONS,
|
|
3122
|
+
useValue: _CachePlugin.mergeDefaults(this.options)
|
|
3070
3123
|
};
|
|
3071
3124
|
return [
|
|
3072
|
-
|
|
3073
|
-
{
|
|
3074
|
-
provide: CACHE_PLUGIN_OPTIONS,
|
|
3075
|
-
useValue: config
|
|
3076
|
-
},
|
|
3125
|
+
optionsProvider,
|
|
3077
3126
|
// Domain services
|
|
3078
3127
|
{
|
|
3079
3128
|
provide: SERIALIZER,
|
|
@@ -3131,9 +3180,9 @@ var CachePlugin = class {
|
|
|
3131
3180
|
// Factory for registering static invalidation rules
|
|
3132
3181
|
{
|
|
3133
3182
|
provide: INVALIDATION_RULES_INIT,
|
|
3134
|
-
useFactory: (registry,
|
|
3135
|
-
if (
|
|
3136
|
-
const rules =
|
|
3183
|
+
useFactory: (registry, config) => {
|
|
3184
|
+
if (config.invalidation?.rules && config.invalidation.rules.length > 0) {
|
|
3185
|
+
const rules = config.invalidation.rules.map((ruleProps) => InvalidationRule.create(ruleProps));
|
|
3137
3186
|
registry.registerMany(rules);
|
|
3138
3187
|
}
|
|
3139
3188
|
return true;
|
|
@@ -3999,8 +4048,8 @@ var KeyBuilder = class _KeyBuilder {
|
|
|
3999
4048
|
* @param version - Version value (e.g., 'v1', 'v2')
|
|
4000
4049
|
* @returns This builder for chaining
|
|
4001
4050
|
*/
|
|
4002
|
-
version(
|
|
4003
|
-
return this.segment(
|
|
4051
|
+
version(version2) {
|
|
4052
|
+
return this.segment(version2);
|
|
4004
4053
|
}
|
|
4005
4054
|
/**
|
|
4006
4055
|
* Adds a segment to the key.
|