@medusajs/caching-redis 2.10.4-preview-20250930180200
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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/loaders/connection.d.ts +6 -0
- package/dist/loaders/connection.d.ts.map +1 -0
- package/dist/loaders/connection.js +46 -0
- package/dist/loaders/connection.js.map +1 -0
- package/dist/loaders/hash.d.ts +5 -0
- package/dist/loaders/hash.d.ts.map +1 -0
- package/dist/loaders/hash.js +9 -0
- package/dist/loaders/hash.js.map +1 -0
- package/dist/services/redis-cache.d.ts +38 -0
- package/dist/services/redis-cache.d.ts.map +1 -0
- package/dist/services/redis-cache.js +521 -0
- package/dist/services/redis-cache.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/index.d.ts +27 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +49 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAQA,wBAGE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const connection_1 = __importDefault(require("./loaders/connection"));
|
|
8
|
+
const hash_1 = __importDefault(require("./loaders/hash"));
|
|
9
|
+
const redis_cache_1 = require("./services/redis-cache");
|
|
10
|
+
const services = [redis_cache_1.RedisCachingProvider];
|
|
11
|
+
const loaders = [connection_1.default, hash_1.default];
|
|
12
|
+
exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.CACHING, {
|
|
13
|
+
services,
|
|
14
|
+
loaders,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,qDAAmE;AACnE,sEAA6C;AAC7C,0DAAiC;AACjC,wDAA6D;AAE7D,MAAM,QAAQ,GAAG,CAAC,kCAAoB,CAAC,CAAA;AACvC,MAAM,OAAO,GAAG,CAAC,oBAAU,EAAE,cAAI,CAAC,CAAA;AAElC,kBAAe,IAAA,sBAAc,EAAC,eAAO,CAAC,OAAO,EAAE;IAC7C,QAAQ;IACR,OAAO;CACR,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { InternalModuleDeclaration, LoaderOptions, ModulesSdkTypes } from "@medusajs/framework/types";
|
|
2
|
+
declare const _default: ({ container, logger, options, }: LoaderOptions<(ModulesSdkTypes.ModuleServiceInitializeOptions | ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions) & {
|
|
3
|
+
logger?: any;
|
|
4
|
+
}>, moduleDeclaration?: InternalModuleDeclaration) => Promise<void>;
|
|
5
|
+
export default _default;
|
|
6
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/loaders/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,aAAa,EACb,eAAe,EAChB,MAAM,2BAA2B,CAAA;0DAS7B,aAAa,CACd,CACI,eAAe,CAAC,8BAA8B,GAC9C,eAAe,CAAC,6CAA6C,CAChE,GAAG;IAAE,MAAM,CAAC,EAAE,GAAG,CAAA;CAAE,CACrB,sBACmB,yBAAyB,KAC5C,OAAO,CAAC,IAAI,CAAC;AAZhB,wBAyDC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
7
|
+
exports.default = async ({ container, logger, options, }, moduleDeclaration) => {
|
|
8
|
+
const logger_ = logger || console;
|
|
9
|
+
const moduleOptions = (options ??
|
|
10
|
+
moduleDeclaration?.options ??
|
|
11
|
+
{});
|
|
12
|
+
if (!moduleOptions.redisUrl) {
|
|
13
|
+
throw new Error("[caching-redis] redisUrl is required");
|
|
14
|
+
}
|
|
15
|
+
let redisClient;
|
|
16
|
+
try {
|
|
17
|
+
redisClient = new ioredis_1.default(moduleOptions.redisUrl, {
|
|
18
|
+
connectTimeout: 10000,
|
|
19
|
+
lazyConnect: true,
|
|
20
|
+
retryDelayOnFailover: 100,
|
|
21
|
+
connectionName: "medusa-cache-redis",
|
|
22
|
+
...moduleOptions,
|
|
23
|
+
});
|
|
24
|
+
// Test connection
|
|
25
|
+
await redisClient.ping();
|
|
26
|
+
logger_.info("Redis cache connection established successfully");
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
logger_.error(`Failed to connect to Redis cache: ${error.message}`);
|
|
30
|
+
redisClient = new ioredis_1.default(moduleOptions.redisUrl, {
|
|
31
|
+
connectTimeout: 10000,
|
|
32
|
+
lazyConnect: true,
|
|
33
|
+
retryDelayOnFailover: 100,
|
|
34
|
+
...moduleOptions,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
container.register({
|
|
38
|
+
redisClient: {
|
|
39
|
+
resolve: () => redisClient,
|
|
40
|
+
},
|
|
41
|
+
prefix: {
|
|
42
|
+
resolve: () => moduleOptions.prefix ?? "mc:",
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/loaders/connection.ts"],"names":[],"mappings":";;;;;AAMA,sDAA2B;AAE3B,kBAAe,KAAK,EAClB,EACE,SAAS,EACT,MAAM,EACN,OAAO,GAMR,EACD,iBAA6C,EAC9B,EAAE;IACjB,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAA;IAEjC,MAAM,aAAa,GAAG,CAAC,OAAO;QAC5B,iBAAiB,EAAE,OAAO;QAC1B,EAAE,CAEH,CAAA;IAED,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,WAAkB,CAAA;IAEtB,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,iBAAK,CAAC,aAAa,CAAC,QAAS,EAAE;YAC/C,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,GAAG;YACzB,cAAc,EAAE,oBAAoB;YACpC,GAAG,aAAa;SACjB,CAAC,CAAA;QAEF,kBAAkB;QAClB,MAAM,WAAW,CAAC,IAAI,EAAE,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACnE,WAAW,GAAG,IAAI,iBAAK,CAAC,aAAa,CAAC,QAAS,EAAE;YAC/C,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,GAAG;YACzB,GAAG,aAAa;SACjB,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAC,QAAQ,CAAC;QACjB,WAAW,EAAE;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW;SAC3B;QACD,MAAM,EAAE;YACN,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,IAAI,KAAK;SAC7C;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/loaders/hash.ts"],"names":[],"mappings":";;;AAEA,wBAKC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const awilix_1 = require("awilix");
|
|
4
|
+
exports.default = async ({ container }) => {
|
|
5
|
+
const xxhashhWasm = await import("xxhash-wasm");
|
|
6
|
+
const { h32ToString } = await xxhashhWasm.default();
|
|
7
|
+
container.register("hasher", (0, awilix_1.asValue)(h32ToString));
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/loaders/hash.ts"],"names":[],"mappings":";;AAAA,mCAAgC;AAEhC,kBAAe,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IACrC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAC/C,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;IAEnD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAA,gBAAO,EAAC,WAAW,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { RedisCacheModuleOptions } from "../types";
|
|
2
|
+
import { Redis } from "ioredis";
|
|
3
|
+
export declare class RedisCachingProvider {
|
|
4
|
+
#private;
|
|
5
|
+
static identifier: string;
|
|
6
|
+
protected redisClient: Redis;
|
|
7
|
+
protected keyNamePrefix: string;
|
|
8
|
+
protected defaultTTL: number;
|
|
9
|
+
protected compressionThreshold: number;
|
|
10
|
+
protected hasher: (key: string) => string;
|
|
11
|
+
constructor({ redisClient, prefix, hasher, }: {
|
|
12
|
+
redisClient: Redis;
|
|
13
|
+
prefix: string;
|
|
14
|
+
hasher: (key: string) => string;
|
|
15
|
+
}, options?: RedisCacheModuleOptions);
|
|
16
|
+
get({ key, tags }: {
|
|
17
|
+
key?: string;
|
|
18
|
+
tags?: string[];
|
|
19
|
+
}): Promise<any>;
|
|
20
|
+
set({ key, data, ttl, tags, options, }: {
|
|
21
|
+
key: string;
|
|
22
|
+
data: object;
|
|
23
|
+
ttl?: number;
|
|
24
|
+
tags?: string[];
|
|
25
|
+
options?: {
|
|
26
|
+
autoInvalidate?: boolean;
|
|
27
|
+
};
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
clear({ key, tags, options, }: {
|
|
30
|
+
key?: string;
|
|
31
|
+
tags?: string[];
|
|
32
|
+
options?: {
|
|
33
|
+
autoInvalidate?: boolean;
|
|
34
|
+
};
|
|
35
|
+
}): Promise<void>;
|
|
36
|
+
flush(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=redis-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-cache.d.ts","sourceRoot":"","sources":["../../src/services/redis-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAG/B,qBAAa,oBAAoB;;IAC/B,MAAM,CAAC,UAAU,SAAgB;IAEjC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAA;IAC5B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAA;IAC/B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAA;IAC5B,SAAS,CAAC,oBAAoB,EAAE,MAAM,CAAA;IACtC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;gBAGvC,EACE,WAAW,EACX,MAAM,EACN,MAAM,GACP,EAAE;QAAE,WAAW,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,EAC1E,OAAO,CAAC,EAAE,uBAAuB;IA0O7B,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAkEnE,GAAG,CAAC,EACR,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,OAAO,CAAC,EAAE;YACR,cAAc,CAAC,EAAE,OAAO,CAAA;SACzB,CAAA;KACF,GAAG,OAAO,CAAC,IAAI,CAAC;IAkDX,KAAK,CAAC,EACV,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,OAAO,CAAC,EAAE;YACR,cAAc,CAAC,EAAE,OAAO,CAAA;SACzB,CAAA;KACF,GAAG,OAAO,CAAC,IAAI,CAAC;IA2QX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB7B"}
|
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var _RedisCachingProvider_instances, _RedisCachingProvider_getKeyName, _RedisCachingProvider_getTagKey, _RedisCachingProvider_getTagsKey, _RedisCachingProvider_getTagDictionaryKey, _RedisCachingProvider_getTagNextIdKey, _RedisCachingProvider_getTagRefCountKey, _RedisCachingProvider_getTagReverseDictionaryKey, _RedisCachingProvider_internTags, _RedisCachingProvider_resolveTagIds, _RedisCachingProvider_decrementTagRefs, _RedisCachingProvider_compressData, _RedisCachingProvider_decompressData;
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RedisCachingProvider = void 0;
|
|
10
|
+
const zlib_1 = require("zlib");
|
|
11
|
+
class RedisCachingProvider {
|
|
12
|
+
constructor({ redisClient, prefix, hasher, }, options) {
|
|
13
|
+
_RedisCachingProvider_instances.add(this);
|
|
14
|
+
this.redisClient = redisClient;
|
|
15
|
+
this.keyNamePrefix = prefix;
|
|
16
|
+
this.defaultTTL = options?.ttl ?? 3600; // 1 hour default
|
|
17
|
+
this.compressionThreshold = options?.compressionThreshold ?? 2048; // 2KB default
|
|
18
|
+
this.hasher = hasher;
|
|
19
|
+
}
|
|
20
|
+
async get({ key, tags }) {
|
|
21
|
+
if (key) {
|
|
22
|
+
const keyName = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getKeyName).call(this, key);
|
|
23
|
+
const buffer = await this.redisClient.hgetBuffer(keyName, "data");
|
|
24
|
+
if (!buffer) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const finalData = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_decompressData).call(this, buffer);
|
|
28
|
+
return JSON.parse(finalData);
|
|
29
|
+
}
|
|
30
|
+
if (tags?.length) {
|
|
31
|
+
// Get all keys associated with the tags
|
|
32
|
+
const pipeline = this.redisClient.pipeline();
|
|
33
|
+
tags.forEach((tag) => {
|
|
34
|
+
const tagKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagKey).call(this, tag);
|
|
35
|
+
pipeline.smembers(tagKey);
|
|
36
|
+
});
|
|
37
|
+
const tagResults = await pipeline.exec();
|
|
38
|
+
const allKeys = new Set();
|
|
39
|
+
tagResults?.forEach((result, index) => {
|
|
40
|
+
if (result && result[1]) {
|
|
41
|
+
;
|
|
42
|
+
result[1].forEach((key) => allKeys.add(key));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
if (allKeys.size === 0) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
// Get all hash data for the keys
|
|
49
|
+
const valuePipeline = this.redisClient.pipeline();
|
|
50
|
+
Array.from(allKeys).forEach((key) => {
|
|
51
|
+
valuePipeline.hgetBuffer(key, "data");
|
|
52
|
+
});
|
|
53
|
+
const valueResults = await valuePipeline.exec();
|
|
54
|
+
const results = [];
|
|
55
|
+
const decompressionPromises = (valueResults || []).map(async (result) => {
|
|
56
|
+
if (result && result[1]) {
|
|
57
|
+
const buffer = result[1];
|
|
58
|
+
try {
|
|
59
|
+
const finalData = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_decompressData).call(this, buffer);
|
|
60
|
+
return JSON.parse(finalData);
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
// If JSON parsing fails, skip this entry (corrupted data)
|
|
64
|
+
console.warn(`Skipping corrupted cache entry: ${e.message}`);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
});
|
|
70
|
+
const decompressionResults = await Promise.all(decompressionPromises);
|
|
71
|
+
results.push(...decompressionResults.filter(Boolean));
|
|
72
|
+
return results;
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
async set({ key, data, ttl, tags, options, }) {
|
|
77
|
+
const keyName = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getKeyName).call(this, key);
|
|
78
|
+
const serializedData = JSON.stringify(data);
|
|
79
|
+
const effectiveTTL = ttl ?? this.defaultTTL;
|
|
80
|
+
const finalData = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_compressData).call(this, serializedData);
|
|
81
|
+
let tagIds = [];
|
|
82
|
+
if (tags?.length) {
|
|
83
|
+
tagIds = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_internTags).call(this, tags);
|
|
84
|
+
}
|
|
85
|
+
const setPipeline = this.redisClient.pipeline();
|
|
86
|
+
// Main data with conditional operations
|
|
87
|
+
setPipeline.hsetnx(keyName, "data", finalData);
|
|
88
|
+
if (options && Object.keys(options).length) {
|
|
89
|
+
setPipeline.hset(keyName, "options", JSON.stringify(options));
|
|
90
|
+
}
|
|
91
|
+
if (effectiveTTL) {
|
|
92
|
+
setPipeline.expire(keyName, effectiveTTL);
|
|
93
|
+
}
|
|
94
|
+
// Store tag IDs if present
|
|
95
|
+
if (tags?.length && tagIds.length) {
|
|
96
|
+
const tagsKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagsKey).call(this, key);
|
|
97
|
+
const buffer = Buffer.alloc(tagIds.length * 4);
|
|
98
|
+
tagIds.forEach((id, index) => {
|
|
99
|
+
buffer.writeUInt32LE(id, index * 4);
|
|
100
|
+
});
|
|
101
|
+
if (effectiveTTL) {
|
|
102
|
+
setPipeline.set(tagsKey, buffer, "EX", effectiveTTL + 60, "NX");
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
setPipeline.setnx(tagsKey, buffer);
|
|
106
|
+
}
|
|
107
|
+
// Add tag operations to the same pipeline
|
|
108
|
+
tags.forEach((tag) => {
|
|
109
|
+
const tagKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagKey).call(this, tag);
|
|
110
|
+
setPipeline.sadd(tagKey, keyName);
|
|
111
|
+
if (effectiveTTL) {
|
|
112
|
+
setPipeline.expire(tagKey, effectiveTTL + 60);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
await setPipeline.exec();
|
|
117
|
+
}
|
|
118
|
+
async clear({ key, tags, options, }) {
|
|
119
|
+
if (key) {
|
|
120
|
+
const keyName = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getKeyName).call(this, key);
|
|
121
|
+
const tagsKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagsKey).call(this, key);
|
|
122
|
+
const clearPipeline = this.redisClient.pipeline();
|
|
123
|
+
// Get tags for cleanup and delete main key in same pipeline
|
|
124
|
+
clearPipeline.getBuffer(tagsKey);
|
|
125
|
+
clearPipeline.unlink(keyName);
|
|
126
|
+
const results = await clearPipeline.exec();
|
|
127
|
+
const tagsBuffer = results?.[0]?.[1];
|
|
128
|
+
if (tagsBuffer?.length) {
|
|
129
|
+
try {
|
|
130
|
+
// Binary format: array of 32-bit integers
|
|
131
|
+
const tagIds = [];
|
|
132
|
+
for (let i = 0; i < tagsBuffer.length; i += 4) {
|
|
133
|
+
tagIds.push(tagsBuffer.readUInt32LE(i));
|
|
134
|
+
}
|
|
135
|
+
if (tagIds.length) {
|
|
136
|
+
const entryTags = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_resolveTagIds).call(this, tagIds);
|
|
137
|
+
const tagCleanupPipeline = this.redisClient.pipeline();
|
|
138
|
+
entryTags.forEach((tag) => {
|
|
139
|
+
const tagKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagKey).call(this, tag, { isHashed: true });
|
|
140
|
+
tagCleanupPipeline.srem(tagKey, keyName);
|
|
141
|
+
});
|
|
142
|
+
tagCleanupPipeline.unlink(tagsKey);
|
|
143
|
+
await tagCleanupPipeline.exec();
|
|
144
|
+
// Decrement reference counts and cleanup unused tags
|
|
145
|
+
await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_decrementTagRefs).call(this, tagIds);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
// noop - corrupted tag data, skip cleanup
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (tags?.length) {
|
|
155
|
+
// Handle wildcard tag to clear all cache data
|
|
156
|
+
if (tags.includes("*")) {
|
|
157
|
+
await this.flush();
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
// Get all keys associated with the tags
|
|
161
|
+
const pipeline = this.redisClient.pipeline();
|
|
162
|
+
tags.forEach((tag) => {
|
|
163
|
+
const tagKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagKey).call(this, tag);
|
|
164
|
+
pipeline.smembers(tagKey);
|
|
165
|
+
});
|
|
166
|
+
const tagResults = await pipeline.exec();
|
|
167
|
+
const allKeys = new Set();
|
|
168
|
+
tagResults?.forEach((result) => {
|
|
169
|
+
if (result && result[1]) {
|
|
170
|
+
;
|
|
171
|
+
result[1].forEach((key) => allKeys.add(key));
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
if (allKeys.size) {
|
|
175
|
+
// If no options provided (user explicit call), clear everything
|
|
176
|
+
if (!options) {
|
|
177
|
+
const deletePipeline = this.redisClient.pipeline();
|
|
178
|
+
// Delete main keys and options
|
|
179
|
+
Array.from(allKeys).forEach((key) => {
|
|
180
|
+
deletePipeline.unlink(key);
|
|
181
|
+
});
|
|
182
|
+
// Clean up tag references for each key
|
|
183
|
+
const tagDataPromises = Array.from(allKeys).map(async (key) => {
|
|
184
|
+
const keyWithoutPrefix = key.replace(this.keyNamePrefix, "");
|
|
185
|
+
const tagsKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagsKey).call(this, keyWithoutPrefix);
|
|
186
|
+
const tagsData = await this.redisClient.getBuffer(tagsKey);
|
|
187
|
+
return { key, tagsKey, tagsData };
|
|
188
|
+
});
|
|
189
|
+
const tagResults = await Promise.all(tagDataPromises);
|
|
190
|
+
// Build single pipeline for all tag cleanup operations
|
|
191
|
+
const tagCleanupPipeline = this.redisClient.pipeline();
|
|
192
|
+
const cleanupPromises = tagResults.map(async ({ key, tagsKey, tagsData }) => {
|
|
193
|
+
if (tagsData) {
|
|
194
|
+
try {
|
|
195
|
+
// Binary format: array of 32-bit integers
|
|
196
|
+
const tagIds = [];
|
|
197
|
+
for (let i = 0; i < tagsData.length; i += 4) {
|
|
198
|
+
tagIds.push(tagsData.readUInt32LE(i));
|
|
199
|
+
}
|
|
200
|
+
if (tagIds.length) {
|
|
201
|
+
const entryTags = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_resolveTagIds).call(this, tagIds);
|
|
202
|
+
entryTags.forEach((tag) => {
|
|
203
|
+
const tagKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagKey).call(this, tag, { isHashed: true });
|
|
204
|
+
tagCleanupPipeline.srem(tagKey, key);
|
|
205
|
+
});
|
|
206
|
+
tagCleanupPipeline.unlink(tagsKey);
|
|
207
|
+
// Decrement reference counts and cleanup unused tags
|
|
208
|
+
await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_decrementTagRefs).call(this, tagIds);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (e) {
|
|
212
|
+
// noop
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
await Promise.all(cleanupPromises);
|
|
217
|
+
await tagCleanupPipeline.exec();
|
|
218
|
+
await deletePipeline.exec();
|
|
219
|
+
// Clean up empty tag sets
|
|
220
|
+
const allTagKeys = await this.redisClient.keys(`${this.keyNamePrefix}tag:*`);
|
|
221
|
+
if (allTagKeys.length) {
|
|
222
|
+
const cardinalityPipeline = this.redisClient.pipeline();
|
|
223
|
+
allTagKeys.forEach((tagKey) => {
|
|
224
|
+
cardinalityPipeline.scard(tagKey);
|
|
225
|
+
});
|
|
226
|
+
const cardinalityResults = await cardinalityPipeline.exec();
|
|
227
|
+
// Delete empty tag keys
|
|
228
|
+
const emptyTagPipeline = this.redisClient.pipeline();
|
|
229
|
+
cardinalityResults?.forEach((result, index) => {
|
|
230
|
+
if (result && result[1] === 0) {
|
|
231
|
+
emptyTagPipeline.unlink(allTagKeys[index]);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
await emptyTagPipeline.exec();
|
|
235
|
+
}
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
// If autoInvalidate is true (strategy call), only clear entries with autoInvalidate=true (default)
|
|
239
|
+
if (options.autoInvalidate === true) {
|
|
240
|
+
const optionsPipeline = this.redisClient.pipeline();
|
|
241
|
+
Array.from(allKeys).forEach((key) => {
|
|
242
|
+
optionsPipeline.hget(key, "options");
|
|
243
|
+
});
|
|
244
|
+
const optionsResults = await optionsPipeline.exec();
|
|
245
|
+
const keysToDelete = [];
|
|
246
|
+
Array.from(allKeys).forEach((key, index) => {
|
|
247
|
+
const optionsResult = optionsResults?.[index];
|
|
248
|
+
if (optionsResult && optionsResult[1]) {
|
|
249
|
+
try {
|
|
250
|
+
const entryOptions = JSON.parse(optionsResult[1]);
|
|
251
|
+
// Delete if entry has autoInvalidate=true or no setting (default true)
|
|
252
|
+
const shouldAutoInvalidate = entryOptions.autoInvalidate ?? true;
|
|
253
|
+
if (shouldAutoInvalidate) {
|
|
254
|
+
keysToDelete.push(key);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
// If can't parse options, assume it's safe to delete (default true)
|
|
259
|
+
keysToDelete.push(key);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// No options stored, default to true
|
|
264
|
+
keysToDelete.push(key);
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
if (keysToDelete.length) {
|
|
268
|
+
const deletePipeline = this.redisClient.pipeline();
|
|
269
|
+
keysToDelete.forEach((key) => {
|
|
270
|
+
deletePipeline.unlink(key);
|
|
271
|
+
});
|
|
272
|
+
// Clean up tag references for each key to delete
|
|
273
|
+
const tagDataPromises = keysToDelete.map(async (key) => {
|
|
274
|
+
const keyWithoutPrefix = key.replace(this.keyNamePrefix, "");
|
|
275
|
+
const tagsKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagsKey).call(this, keyWithoutPrefix);
|
|
276
|
+
const tagsData = await this.redisClient.getBuffer(tagsKey);
|
|
277
|
+
return { key, tagsKey, tagsData };
|
|
278
|
+
});
|
|
279
|
+
// Wait for all tag data fetches
|
|
280
|
+
const tagResults = await Promise.all(tagDataPromises);
|
|
281
|
+
// Build single pipeline for all tag cleanup operations
|
|
282
|
+
const tagCleanupPipeline = this.redisClient.pipeline();
|
|
283
|
+
const cleanupPromises = tagResults.map(async ({ key, tagsKey, tagsData }) => {
|
|
284
|
+
if (tagsData) {
|
|
285
|
+
try {
|
|
286
|
+
// Binary format: array of 32-bit integers
|
|
287
|
+
const tagIds = [];
|
|
288
|
+
for (let i = 0; i < tagsData.length; i += 4) {
|
|
289
|
+
tagIds.push(tagsData.readUInt32LE(i));
|
|
290
|
+
}
|
|
291
|
+
if (tagIds.length) {
|
|
292
|
+
const entryTags = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_resolveTagIds).call(this, tagIds);
|
|
293
|
+
entryTags.forEach((tag) => {
|
|
294
|
+
const tagKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagKey).call(this, tag, { isHashed: true });
|
|
295
|
+
tagCleanupPipeline.srem(tagKey, key);
|
|
296
|
+
});
|
|
297
|
+
tagCleanupPipeline.unlink(tagsKey); // Delete the tags key
|
|
298
|
+
// Decrement reference counts and cleanup unused tags
|
|
299
|
+
await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_decrementTagRefs).call(this, tagIds);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
catch (e) {
|
|
303
|
+
// noop
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
await Promise.all(cleanupPromises);
|
|
308
|
+
await tagCleanupPipeline.exec();
|
|
309
|
+
await deletePipeline.exec();
|
|
310
|
+
// Clean up empty tag sets
|
|
311
|
+
const allTagKeys = await this.redisClient.keys(`${this.keyNamePrefix}tag:*`);
|
|
312
|
+
if (allTagKeys.length) {
|
|
313
|
+
const cleanupPipeline = this.redisClient.pipeline();
|
|
314
|
+
allTagKeys.forEach((tagKey) => {
|
|
315
|
+
cleanupPipeline.scard(tagKey);
|
|
316
|
+
});
|
|
317
|
+
const cardinalityResults = await cleanupPipeline.exec();
|
|
318
|
+
// Delete tag keys that are now empty
|
|
319
|
+
const emptyTagDeletePipeline = this.redisClient.pipeline();
|
|
320
|
+
cardinalityResults?.forEach((result, index) => {
|
|
321
|
+
if (result && result[1] === 0) {
|
|
322
|
+
emptyTagDeletePipeline.unlink(allTagKeys[index]);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
await emptyTagDeletePipeline.exec();
|
|
326
|
+
}
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
async flush() {
|
|
334
|
+
// Use SCAN to find ALL keys with our prefix and delete them
|
|
335
|
+
// This includes main cache keys, tag keys (tag:*), and tags keys (tags:*)
|
|
336
|
+
const pattern = `${this.keyNamePrefix}*`;
|
|
337
|
+
let cursor = "0";
|
|
338
|
+
do {
|
|
339
|
+
const result = await this.redisClient.scan(cursor, "MATCH", pattern, "COUNT", 1000);
|
|
340
|
+
cursor = result[0];
|
|
341
|
+
const keys = result[1];
|
|
342
|
+
if (keys.length) {
|
|
343
|
+
await this.redisClient.unlink(...keys);
|
|
344
|
+
}
|
|
345
|
+
} while (cursor !== "0");
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
exports.RedisCachingProvider = RedisCachingProvider;
|
|
349
|
+
_RedisCachingProvider_instances = new WeakSet(), _RedisCachingProvider_getKeyName = function _RedisCachingProvider_getKeyName(key) {
|
|
350
|
+
return `${this.keyNamePrefix}${key}`;
|
|
351
|
+
}, _RedisCachingProvider_getTagKey = function _RedisCachingProvider_getTagKey(tag, { isHashed = false } = {}) {
|
|
352
|
+
return `${this.keyNamePrefix}tag:${isHashed ? tag : this.hasher(tag)}`;
|
|
353
|
+
}, _RedisCachingProvider_getTagsKey = function _RedisCachingProvider_getTagsKey(key) {
|
|
354
|
+
return `${this.keyNamePrefix}tags:${key}`;
|
|
355
|
+
}, _RedisCachingProvider_getTagDictionaryKey = function _RedisCachingProvider_getTagDictionaryKey() {
|
|
356
|
+
return `${this.keyNamePrefix}tag:dictionary`;
|
|
357
|
+
}, _RedisCachingProvider_getTagNextIdKey = function _RedisCachingProvider_getTagNextIdKey() {
|
|
358
|
+
return `${this.keyNamePrefix}tag:next_id`;
|
|
359
|
+
}, _RedisCachingProvider_getTagRefCountKey = function _RedisCachingProvider_getTagRefCountKey() {
|
|
360
|
+
return `${this.keyNamePrefix}tag:refs`;
|
|
361
|
+
}, _RedisCachingProvider_getTagReverseDictionaryKey = function _RedisCachingProvider_getTagReverseDictionaryKey() {
|
|
362
|
+
return `${this.keyNamePrefix}tag:reverse_dict`;
|
|
363
|
+
}, _RedisCachingProvider_internTags = async function _RedisCachingProvider_internTags(tags) {
|
|
364
|
+
const pipeline = this.redisClient.pipeline();
|
|
365
|
+
const dictionaryKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagDictionaryKey).call(this);
|
|
366
|
+
const hashedTags = tags.map((tag) => this.hasher(tag));
|
|
367
|
+
// Get existing tag IDs
|
|
368
|
+
hashedTags.forEach((tag) => {
|
|
369
|
+
pipeline.hget(dictionaryKey, tag);
|
|
370
|
+
});
|
|
371
|
+
const results = await pipeline.exec();
|
|
372
|
+
const tagIds = [];
|
|
373
|
+
const newTags = [];
|
|
374
|
+
for (let i = 0; i < hashedTags.length; i++) {
|
|
375
|
+
const result = results?.[i];
|
|
376
|
+
if (result && result[1]) {
|
|
377
|
+
tagIds[i] = parseInt(result[1]);
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
const hashedTag = hashedTags[i];
|
|
381
|
+
newTags.push(hashedTag);
|
|
382
|
+
tagIds[i] = -1; // Placeholder for new tags
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
// Create IDs for new tags
|
|
386
|
+
if (newTags.length) {
|
|
387
|
+
const nextIdKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagNextIdKey).call(this);
|
|
388
|
+
const reverseDictKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagReverseDictionaryKey).call(this);
|
|
389
|
+
const refCountKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagRefCountKey).call(this);
|
|
390
|
+
const startId = await this.redisClient.incrby(nextIdKey, newTags.length);
|
|
391
|
+
const batchPipeline = this.redisClient.pipeline();
|
|
392
|
+
newTags.forEach((tag, index) => {
|
|
393
|
+
const newId = startId - newTags.length + index + 1;
|
|
394
|
+
// Store in both forward and reverse dictionaries
|
|
395
|
+
batchPipeline.hset(dictionaryKey, tag, newId.toString());
|
|
396
|
+
batchPipeline.hset(reverseDictKey, newId.toString(), tag);
|
|
397
|
+
// Update the tagIds array
|
|
398
|
+
const originalIndex = hashedTags.indexOf(tag);
|
|
399
|
+
tagIds[originalIndex] = newId;
|
|
400
|
+
});
|
|
401
|
+
// Add reference count increments to the same pipeline
|
|
402
|
+
tagIds.forEach((id) => {
|
|
403
|
+
if (id !== -1) {
|
|
404
|
+
batchPipeline.hincrby(refCountKey, id.toString(), 1);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
await batchPipeline.exec();
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
// Only increment reference count for existing tags
|
|
411
|
+
const refCountKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagRefCountKey).call(this);
|
|
412
|
+
const refPipeline = this.redisClient.pipeline();
|
|
413
|
+
tagIds.forEach((id) => {
|
|
414
|
+
refPipeline.hincrby(refCountKey, id.toString(), 1);
|
|
415
|
+
});
|
|
416
|
+
await refPipeline.exec();
|
|
417
|
+
}
|
|
418
|
+
return tagIds;
|
|
419
|
+
}, _RedisCachingProvider_resolveTagIds = async function _RedisCachingProvider_resolveTagIds(tagIds) {
|
|
420
|
+
if (tagIds.length === 0)
|
|
421
|
+
return [];
|
|
422
|
+
const reverseDictKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagReverseDictionaryKey).call(this);
|
|
423
|
+
const pipeline = this.redisClient.pipeline();
|
|
424
|
+
tagIds.forEach((id) => {
|
|
425
|
+
pipeline.hget(reverseDictKey, id.toString());
|
|
426
|
+
});
|
|
427
|
+
const results = await pipeline.exec();
|
|
428
|
+
return results?.map((result) => result?.[1]).filter(Boolean) || [];
|
|
429
|
+
}, _RedisCachingProvider_decrementTagRefs = async function _RedisCachingProvider_decrementTagRefs(tagIds) {
|
|
430
|
+
if (tagIds.length === 0)
|
|
431
|
+
return;
|
|
432
|
+
const refCountKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagRefCountKey).call(this);
|
|
433
|
+
const dictionaryKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagDictionaryKey).call(this);
|
|
434
|
+
// Decrement reference counts and collect tags with zero refs
|
|
435
|
+
const pipeline = this.redisClient.pipeline();
|
|
436
|
+
tagIds.forEach((id) => {
|
|
437
|
+
pipeline.hincrby(refCountKey, id.toString(), -1);
|
|
438
|
+
});
|
|
439
|
+
const results = await pipeline.exec();
|
|
440
|
+
const tagsToCleanup = [];
|
|
441
|
+
// Find tags that now have zero references
|
|
442
|
+
results?.forEach((result, index) => {
|
|
443
|
+
if (result && result[1] === 0) {
|
|
444
|
+
tagsToCleanup.push(tagIds[index]);
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
// Clean up tags with zero references
|
|
448
|
+
if (tagsToCleanup.length) {
|
|
449
|
+
const cleanupPipeline = this.redisClient.pipeline();
|
|
450
|
+
const reverseDictKey = __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_getTagReverseDictionaryKey).call(this);
|
|
451
|
+
// Get tag names before deleting them
|
|
452
|
+
const tagNames = await __classPrivateFieldGet(this, _RedisCachingProvider_instances, "m", _RedisCachingProvider_resolveTagIds).call(this, tagsToCleanup);
|
|
453
|
+
tagsToCleanup.forEach((id, index) => {
|
|
454
|
+
const idStr = id.toString();
|
|
455
|
+
// Remove from reference count hash
|
|
456
|
+
cleanupPipeline.hdel(refCountKey, idStr);
|
|
457
|
+
// Remove from reverse dictionary
|
|
458
|
+
cleanupPipeline.hdel(reverseDictKey, idStr);
|
|
459
|
+
// Remove from forward dictionary
|
|
460
|
+
if (tagNames[index]) {
|
|
461
|
+
cleanupPipeline.hdel(dictionaryKey, tagNames[index]);
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
await cleanupPipeline.exec();
|
|
465
|
+
}
|
|
466
|
+
}, _RedisCachingProvider_compressData = async function _RedisCachingProvider_compressData(data) {
|
|
467
|
+
if (data.length <= this.compressionThreshold) {
|
|
468
|
+
const buffer = Buffer.from(data, "utf8");
|
|
469
|
+
const prefix = Buffer.from([0]); // 0 = uncompressed
|
|
470
|
+
return Buffer.concat([prefix, buffer]);
|
|
471
|
+
}
|
|
472
|
+
return new Promise((resolve, reject) => {
|
|
473
|
+
const chunks = [];
|
|
474
|
+
const gzip = (0, zlib_1.createGzip)();
|
|
475
|
+
gzip.on("data", (chunk) => chunks.push(chunk));
|
|
476
|
+
gzip.on("end", () => {
|
|
477
|
+
const compressedBuffer = Buffer.concat(chunks);
|
|
478
|
+
const prefix = Buffer.from([1]); // 1 = compressed
|
|
479
|
+
resolve(Buffer.concat([prefix, compressedBuffer]));
|
|
480
|
+
});
|
|
481
|
+
gzip.on("error", (error) => {
|
|
482
|
+
const buffer = Buffer.from(data, "utf8");
|
|
483
|
+
const prefix = Buffer.from([0]);
|
|
484
|
+
resolve(Buffer.concat([prefix, buffer]));
|
|
485
|
+
});
|
|
486
|
+
gzip.write(data, "utf8");
|
|
487
|
+
gzip.end();
|
|
488
|
+
});
|
|
489
|
+
}, _RedisCachingProvider_decompressData = async function _RedisCachingProvider_decompressData(buffer) {
|
|
490
|
+
if (buffer.length === 0) {
|
|
491
|
+
return "";
|
|
492
|
+
}
|
|
493
|
+
const formatByte = buffer[0];
|
|
494
|
+
const dataBuffer = buffer.subarray(1);
|
|
495
|
+
if (formatByte === 0) {
|
|
496
|
+
// Uncompressed
|
|
497
|
+
return dataBuffer.toString("utf8");
|
|
498
|
+
}
|
|
499
|
+
if (formatByte === 1) {
|
|
500
|
+
// Compressed with gzip
|
|
501
|
+
return new Promise((resolve, reject) => {
|
|
502
|
+
const chunks = [];
|
|
503
|
+
const gunzip = (0, zlib_1.createGunzip)();
|
|
504
|
+
gunzip.on("data", (chunk) => chunks.push(chunk));
|
|
505
|
+
gunzip.on("end", () => {
|
|
506
|
+
const decompressed = Buffer.concat(chunks).toString("utf8");
|
|
507
|
+
resolve(decompressed);
|
|
508
|
+
});
|
|
509
|
+
gunzip.on("error", (error) => {
|
|
510
|
+
// Fallback: return as-is if decompression fails
|
|
511
|
+
resolve(dataBuffer.toString("utf8"));
|
|
512
|
+
});
|
|
513
|
+
gunzip.write(dataBuffer);
|
|
514
|
+
gunzip.end();
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
// Unknown format, return as UTF-8
|
|
518
|
+
return buffer.toString("utf8");
|
|
519
|
+
};
|
|
520
|
+
RedisCachingProvider.identifier = "cache-redis";
|
|
521
|
+
//# sourceMappingURL=redis-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-cache.js","sourceRoot":"","sources":["../../src/services/redis-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/index.ts","../src/loaders/connection.ts","../src/loaders/hash.ts","../src/services/redis-cache.ts","../src/types/index.ts"],"version":"5.6.2"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface RedisCacheModuleOptions {
|
|
2
|
+
/**
|
|
3
|
+
* TTL in milliseconds
|
|
4
|
+
*/
|
|
5
|
+
ttl?: number;
|
|
6
|
+
/**
|
|
7
|
+
* Connection timeout in milliseconds
|
|
8
|
+
*/
|
|
9
|
+
connectTimeout?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Lazyload connections
|
|
12
|
+
*/
|
|
13
|
+
lazyConnect?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Connection retries
|
|
16
|
+
*/
|
|
17
|
+
retryDelayOnFailover?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Key prefix for all cache keys
|
|
20
|
+
*/
|
|
21
|
+
prefix?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Minimum size in bytes to compress data (default: 1024)
|
|
24
|
+
*/
|
|
25
|
+
compressionThreshold?: number;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@medusajs/caching-redis",
|
|
3
|
+
"version": "2.10.4-preview-20250930180200",
|
|
4
|
+
"description": "Redis Caching for Medusa",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/medusajs/medusa",
|
|
9
|
+
"directory": "packages/modules/providers/caching-redis"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"!dist/**/__tests__",
|
|
14
|
+
"!dist/**/__mocks__",
|
|
15
|
+
"!dist/**/__fixtures__"
|
|
16
|
+
],
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=20"
|
|
19
|
+
},
|
|
20
|
+
"author": "Medusa",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@medusajs/framework": "2.10.4-preview-20250930180200",
|
|
24
|
+
"@swc/core": "^1.7.28",
|
|
25
|
+
"@swc/jest": "^0.2.36",
|
|
26
|
+
"jest": "^29.7.0",
|
|
27
|
+
"rimraf": "^5.0.1",
|
|
28
|
+
"typescript": "^5.6.2"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"@medusajs/framework": "2.10.4-preview-20250930180200"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"ioredis": "^5.4.1",
|
|
35
|
+
"xxhash-wasm": "^1.1.0"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"watch": "tsc --build --watch",
|
|
39
|
+
"watch:test": "tsc --build tsconfig.spec.json --watch",
|
|
40
|
+
"resolve:aliases": "tsc --showConfig -p tsconfig.json > tsconfig.resolved.json && tsc-alias -p tsconfig.resolved.json && rimraf tsconfig.resolved.json",
|
|
41
|
+
"build": "rimraf dist && tsc --build && npm run resolve:aliases",
|
|
42
|
+
"test": "jest --passWithNoTests src",
|
|
43
|
+
"test:integration": "jest --forceExit --passWithNoTests"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"medusa-providers",
|
|
47
|
+
"medusa-providers-cache"
|
|
48
|
+
]
|
|
49
|
+
}
|