@medusajs/caching 2.10.4-snapshot-20250927182917

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.
Files changed (42) hide show
  1. package/dist/index.d.ts +7 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +14 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/loaders/hash.d.ts +5 -0
  6. package/dist/loaders/hash.d.ts.map +1 -0
  7. package/dist/loaders/hash.js +9 -0
  8. package/dist/loaders/hash.js.map +1 -0
  9. package/dist/loaders/providers.d.ts +5 -0
  10. package/dist/loaders/providers.d.ts.map +1 -0
  11. package/dist/loaders/providers.js +57 -0
  12. package/dist/loaders/providers.js.map +1 -0
  13. package/dist/providers/memory-cache.d.ts +53 -0
  14. package/dist/providers/memory-cache.d.ts.map +1 -0
  15. package/dist/providers/memory-cache.js +158 -0
  16. package/dist/providers/memory-cache.js.map +1 -0
  17. package/dist/services/cache-module.d.ts +83 -0
  18. package/dist/services/cache-module.d.ts.map +1 -0
  19. package/dist/services/cache-module.js +166 -0
  20. package/dist/services/cache-module.js.map +1 -0
  21. package/dist/services/cache-provider.d.ts +13 -0
  22. package/dist/services/cache-provider.d.ts.map +1 -0
  23. package/dist/services/cache-provider.js +53 -0
  24. package/dist/services/cache-provider.js.map +1 -0
  25. package/dist/services/index.d.ts +3 -0
  26. package/dist/services/index.d.ts.map +1 -0
  27. package/dist/services/index.js +11 -0
  28. package/dist/services/index.js.map +1 -0
  29. package/dist/tsconfig.tsbuildinfo +1 -0
  30. package/dist/types/index.d.ts +49 -0
  31. package/dist/types/index.d.ts.map +1 -0
  32. package/dist/types/index.js +8 -0
  33. package/dist/types/index.js.map +1 -0
  34. package/dist/utils/parser.d.ts +47 -0
  35. package/dist/utils/parser.d.ts.map +1 -0
  36. package/dist/utils/parser.js +189 -0
  37. package/dist/utils/parser.js.map +1 -0
  38. package/dist/utils/strategy.d.ts +17 -0
  39. package/dist/utils/strategy.d.ts.map +1 -0
  40. package/dist/utils/strategy.js +122 -0
  41. package/dist/utils/strategy.js.map +1 -0
  42. package/package.json +49 -0
@@ -0,0 +1,7 @@
1
+ import CachingModuleService from "./services/cache-module";
2
+ declare const _default: import("@medusajs/types").ModuleExports<typeof CachingModuleService> & {
3
+ linkable: Record<string, any>;
4
+ };
5
+ export default _default;
6
+ export { CachingModuleOptions } from "./types";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,oBAAoB,MAAM,yBAAyB,CAAA;;;;AAE1D,wBAGE;AAGF,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
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 hash_1 = __importDefault(require("./loaders/hash"));
8
+ const providers_1 = __importDefault(require("./loaders/providers"));
9
+ const cache_module_1 = __importDefault(require("./services/cache-module"));
10
+ exports.default = (0, utils_1.Module)(utils_1.Modules.CACHING, {
11
+ service: cache_module_1.default,
12
+ loaders: [hash_1.default, providers_1.default],
13
+ });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,qDAA2D;AAC3D,0DAAoD;AACpD,oEAA8D;AAC9D,2EAA0D;AAE1D,kBAAe,IAAA,cAAM,EAAC,eAAO,CAAC,OAAO,EAAE;IACrC,OAAO,EAAE,sBAAoB;IAC7B,OAAO,EAAE,CAAC,cAAQ,EAAE,mBAAa,CAAC;CACnC,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ declare const _default: ({ container }: {
2
+ container: any;
3
+ }) => Promise<void>;
4
+ export default _default;
5
+ //# sourceMappingURL=hash.d.ts.map
@@ -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,5 @@
1
+ import { LoaderOptions, ModulesSdkTypes } from "@medusajs/framework/types";
2
+ import { CachingModuleOptions } from "../types";
3
+ declare const _default: ({ container, options, }: LoaderOptions<(ModulesSdkTypes.ModuleServiceInitializeOptions | ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions) & CachingModuleOptions>) => Promise<void>;
4
+ export default _default;
5
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/loaders/providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAM1E,OAAO,EAGL,oBAAoB,EAErB,MAAM,QAAQ,CAAA;kDA2BZ,aAAa,CACd,CACI,eAAe,CAAC,8BAA8B,GAC9C,eAAe,CAAC,6CAA6C,CAChE,GACC,oBAAoB,CACvB,KAAG,OAAO,CAAC,IAAI,CAAC;AATjB,wBAyDC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const _services_1 = require("../services");
6
+ const _types_1 = require("../types");
7
+ const awilix_1 = require("awilix");
8
+ const memory_cache_1 = require("../providers/memory-cache");
9
+ const strategy_1 = require("../utils/strategy");
10
+ const registrationFn = async (klass, container, { id }) => {
11
+ const key = _services_1.CachingProviderService.getRegistrationIdentifier(klass);
12
+ if (!id) {
13
+ throw new Error(`No "id" provided for provider ${key}`);
14
+ }
15
+ const regKey = (0, utils_1.getProviderRegistrationKey)({
16
+ providerId: id,
17
+ providerIdentifier: key,
18
+ });
19
+ container.register({
20
+ [_types_1.CachingProviderRegistrationPrefix + id]: (0, awilix_1.aliasTo)(regKey),
21
+ });
22
+ container.registerAdd(_types_1.CachingIdentifiersRegistrationName, (0, awilix_1.asValue)(key));
23
+ };
24
+ exports.default = async ({ container, options, }) => {
25
+ container.registerAdd(_types_1.CachingIdentifiersRegistrationName, (0, awilix_1.asValue)(undefined));
26
+ const strategy = options?.strategy ?? strategy_1.DefaultCacheStrategy;
27
+ container.register("strategy", (0, awilix_1.asValue)(strategy));
28
+ // MemoryCachingProvider - default provider
29
+ container.register({
30
+ [_types_1.CachingProviderRegistrationPrefix + memory_cache_1.MemoryCachingProvider.identifier]: (0, awilix_1.asFunction)(() => new memory_cache_1.MemoryCachingProvider(), {
31
+ lifetime: awilix_1.Lifetime.SINGLETON,
32
+ }),
33
+ });
34
+ container.registerAdd(_types_1.CachingIdentifiersRegistrationName, (0, awilix_1.asValue)(memory_cache_1.MemoryCachingProvider.identifier));
35
+ container.register(_types_1.CachingDefaultProvider, (0, awilix_1.asValue)(memory_cache_1.MemoryCachingProvider.identifier));
36
+ // Load other providers
37
+ await (0, modules_sdk_1.moduleProviderLoader)({
38
+ container,
39
+ providers: options?.providers || [],
40
+ registerServiceFn: registrationFn,
41
+ });
42
+ const isSingleProvider = options?.providers?.length === 1;
43
+ let hasDefaultProvider = false;
44
+ for (const provider of options?.providers || []) {
45
+ if (provider.is_default || isSingleProvider) {
46
+ if (provider.is_default) {
47
+ hasDefaultProvider = true;
48
+ }
49
+ container.register(_types_1.CachingDefaultProvider, (0, awilix_1.asValue)(provider.id));
50
+ }
51
+ }
52
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
53
+ if (!hasDefaultProvider) {
54
+ logger.warn(`[caching-module]: No default caching provider defined. Using "${container.resolve(_types_1.CachingDefaultProvider)}" as default.`);
55
+ }
56
+ };
57
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/loaders/providers.ts"],"names":[],"mappings":";;AAAA,iEAAsE;AAEtE,qDAGkC;AAClC,yCAAkD;AAClD,mCAKe;AACf,mCAA+D;AAC/D,4DAAiE;AACjE,gDAAwD;AAExD,MAAM,cAAc,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxD,MAAM,GAAG,GAAG,kCAAsB,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAEnE,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,kCAA0B,EAAC;QACxC,UAAU,EAAE,EAAE;QACd,kBAAkB,EAAE,GAAG;KACxB,CAAC,CAAA;IAEF,SAAS,CAAC,QAAQ,CAAC;QACjB,CAAC,0CAAiC,GAAG,EAAE,CAAC,EAAE,IAAA,gBAAO,EAAC,MAAM,CAAC;KAC1D,CAAC,CAAA;IAEF,SAAS,CAAC,WAAW,CAAC,2CAAkC,EAAE,IAAA,gBAAO,EAAC,GAAG,CAAC,CAAC,CAAA;AACzE,CAAC,CAAA;AAED,kBAAe,KAAK,EAAE,EACpB,SAAS,EACT,OAAO,GAOR,EAAiB,EAAE;IAClB,SAAS,CAAC,WAAW,CAAC,2CAAkC,EAAE,IAAA,gBAAO,EAAC,SAAS,CAAC,CAAC,CAAA;IAE7E,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,+BAAoB,CAAA;IAC1D,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAA,gBAAO,EAAC,QAAQ,CAAC,CAAC,CAAA;IAEjD,2CAA2C;IAC3C,SAAS,CAAC,QAAQ,CAAC;QACjB,CAAC,0CAAiC,GAAG,oCAAqB,CAAC,UAAU,CAAC,EACpE,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,IAAI,oCAAqB,EAAE,EAAE;YAC5C,QAAQ,EAAE,iBAAQ,CAAC,SAAS;SAC7B,CAAC;KACL,CAAC,CAAA;IACF,SAAS,CAAC,WAAW,CACnB,2CAAkC,EAClC,IAAA,gBAAO,EAAC,oCAAqB,CAAC,UAAU,CAAC,CAC1C,CAAA;IACD,SAAS,CAAC,QAAQ,CAChB,+BAAsB,EACtB,IAAA,gBAAO,EAAC,oCAAqB,CAAC,UAAU,CAAC,CAC1C,CAAA;IAED,uBAAuB;IACvB,MAAM,IAAA,kCAAoB,EAAC;QACzB,SAAS;QACT,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;QACnC,iBAAiB,EAAE,cAAc;KAClC,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC,CAAA;IACzD,IAAI,kBAAkB,GAAG,KAAK,CAAA;IAC9B,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;QAChD,IAAI,QAAQ,CAAC,UAAU,IAAI,gBAAgB,EAAE,CAAC;YAC5C,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,kBAAkB,GAAG,IAAI,CAAA;YAC3B,CAAC;YACD,SAAS,CAAC,QAAQ,CAAC,+BAAsB,EAAE,IAAA,gBAAO,EAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,iCAAyB,CAAC,MAAM,CAAC,CAAA;IAClE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CACT,iEAAiE,SAAS,CAAC,OAAO,CAChF,+BAAsB,CACvB,eAAe,CACjB,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,53 @@
1
+ import NodeCache from "node-cache";
2
+ import type { ICachingProviderService } from "@medusajs/framework/types";
3
+ export interface MemoryCacheModuleOptions {
4
+ /**
5
+ * TTL in seconds
6
+ */
7
+ ttl?: number;
8
+ /**
9
+ * Maximum number of keys to store (see node-cache documentation)
10
+ */
11
+ maxKeys?: number;
12
+ /**
13
+ * Check period for expired keys in seconds (see node-cache documentation)
14
+ */
15
+ checkPeriod?: number;
16
+ /**
17
+ * Use clones for cached data (see node-cache documentation)
18
+ */
19
+ useClones?: boolean;
20
+ }
21
+ export declare class MemoryCachingProvider implements ICachingProviderService {
22
+ static identifier: string;
23
+ protected cacheClient: NodeCache;
24
+ protected tagIndex: Map<string, Set<string>>;
25
+ protected keyTags: Map<string, Set<string>>;
26
+ protected entryOptions: Map<string, {
27
+ autoInvalidate?: boolean;
28
+ }>;
29
+ protected options: MemoryCacheModuleOptions;
30
+ constructor();
31
+ private cleanupTagReferences;
32
+ get({ key, tags }: {
33
+ key?: string;
34
+ tags?: string[];
35
+ }): Promise<any>;
36
+ set({ key, data, ttl, tags, options, }: {
37
+ key: string;
38
+ data: object;
39
+ ttl?: number;
40
+ tags?: string[];
41
+ options?: {
42
+ autoInvalidate?: boolean;
43
+ };
44
+ }): Promise<void>;
45
+ clear({ key, tags, options, }: {
46
+ key?: string;
47
+ tags?: string[];
48
+ options?: {
49
+ autoInvalidate?: boolean;
50
+ };
51
+ }): Promise<void>;
52
+ }
53
+ //# sourceMappingURL=memory-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/providers/memory-cache.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAExE,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,qBAAa,qBAAsB,YAAW,uBAAuB;IACnE,MAAM,CAAC,UAAU,SAAiB;IAElC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAA;IAChC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAY;IACxD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAY;IACvD,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAY;IAC7E,SAAS,CAAC,OAAO,EAAE,wBAAwB,CAAA;;IA6B3C,OAAO,CAAC,oBAAoB;IAkBtB,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;IAiCnE,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;IA+BX,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;CA+DlB"}
@@ -0,0 +1,158 @@
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
+ exports.MemoryCachingProvider = void 0;
7
+ const node_cache_1 = __importDefault(require("node-cache"));
8
+ class MemoryCachingProvider {
9
+ constructor() {
10
+ this.tagIndex = new Map(); // tag -> keys
11
+ this.keyTags = new Map(); // key -> tags
12
+ this.entryOptions = new Map(); // key -> options
13
+ this.options = {
14
+ ttl: 3600,
15
+ maxKeys: 25000,
16
+ checkPeriod: 60, // 10 minutes
17
+ useClones: false, // Default to false for speed, true would be slower but safer. we can discuss
18
+ };
19
+ const cacheClient = new node_cache_1.default({
20
+ stdTTL: this.options.ttl,
21
+ maxKeys: this.options.maxKeys,
22
+ checkperiod: this.options.checkPeriod,
23
+ useClones: this.options.useClones,
24
+ });
25
+ this.cacheClient = cacheClient;
26
+ // Clean up tag indices when keys expire
27
+ this.cacheClient.on("expired", (key, value) => {
28
+ this.cleanupTagReferences(key);
29
+ });
30
+ this.cacheClient.on("del", (key, value) => {
31
+ this.cleanupTagReferences(key);
32
+ });
33
+ }
34
+ cleanupTagReferences(key) {
35
+ const tags = this.keyTags.get(key);
36
+ if (tags) {
37
+ tags.forEach((tag) => {
38
+ const keysForTag = this.tagIndex.get(tag);
39
+ if (keysForTag) {
40
+ keysForTag.delete(key);
41
+ if (keysForTag.size === 0) {
42
+ this.tagIndex.delete(tag);
43
+ }
44
+ }
45
+ });
46
+ this.keyTags.delete(key);
47
+ }
48
+ // Also clean up entry options
49
+ this.entryOptions.delete(key);
50
+ }
51
+ async get({ key, tags }) {
52
+ if (key) {
53
+ return this.cacheClient.get(key) ?? null;
54
+ }
55
+ if (tags && tags.length) {
56
+ const allKeys = new Set();
57
+ tags.forEach((tag) => {
58
+ const keysForTag = this.tagIndex.get(tag);
59
+ if (keysForTag) {
60
+ keysForTag.forEach((key) => allKeys.add(key));
61
+ }
62
+ });
63
+ if (allKeys.size === 0) {
64
+ return [];
65
+ }
66
+ const results = [];
67
+ allKeys.forEach((key) => {
68
+ const value = this.cacheClient.get(key);
69
+ if (value !== undefined) {
70
+ results.push(value);
71
+ }
72
+ });
73
+ return results;
74
+ }
75
+ return null;
76
+ }
77
+ async set({ key, data, ttl, tags, options, }) {
78
+ // Set the cache entry
79
+ const effectiveTTL = ttl ?? this.options.ttl ?? 3600;
80
+ this.cacheClient.set(key, data, effectiveTTL);
81
+ // Handle tags if provided
82
+ if (tags && tags.length) {
83
+ // Clean up any existing tag references for this key
84
+ this.cleanupTagReferences(key);
85
+ const tagSet = new Set(tags);
86
+ this.keyTags.set(key, tagSet);
87
+ // Add this key to each tag's index
88
+ tags.forEach((tag) => {
89
+ if (!this.tagIndex.has(tag)) {
90
+ this.tagIndex.set(tag, new Set());
91
+ }
92
+ this.tagIndex.get(tag).add(key);
93
+ });
94
+ }
95
+ // Store entry options if provided
96
+ if (Object.keys(options ?? {}).length &&
97
+ !Object.values(options ?? {}).every((value) => value === undefined)) {
98
+ this.entryOptions.set(key, options);
99
+ }
100
+ }
101
+ async clear({ key, tags, options, }) {
102
+ if (key) {
103
+ this.cacheClient.del(key);
104
+ return;
105
+ }
106
+ if (tags && tags.length) {
107
+ // Handle wildcard tag to clear all cache data
108
+ if (tags.includes("*")) {
109
+ this.cacheClient.flushAll();
110
+ this.tagIndex.clear();
111
+ this.keyTags.clear();
112
+ this.entryOptions.clear();
113
+ return;
114
+ }
115
+ const allKeys = new Set();
116
+ tags.forEach((tag) => {
117
+ const keysForTag = this.tagIndex.get(tag);
118
+ if (keysForTag) {
119
+ keysForTag.forEach((key) => allKeys.add(key));
120
+ }
121
+ });
122
+ if (allKeys.size) {
123
+ // If no options provided (user explicit call), clear everything
124
+ if (!options) {
125
+ const keysToDelete = Array.from(allKeys);
126
+ this.cacheClient.del(keysToDelete);
127
+ // Clean up ALL tag references for deleted keys
128
+ keysToDelete.forEach((key) => {
129
+ this.cleanupTagReferences(key);
130
+ });
131
+ return;
132
+ }
133
+ // If autoInvalidate is true (strategy call), only clear entries with autoInvalidate=true (default)
134
+ if (options.autoInvalidate === true) {
135
+ const keysToDelete = [];
136
+ allKeys.forEach((key) => {
137
+ const entryOptions = this.entryOptions.get(key);
138
+ // Delete if entry has autoInvalidate=true or no setting (default true)
139
+ const shouldAutoInvalidate = entryOptions?.autoInvalidate ?? true;
140
+ if (shouldAutoInvalidate) {
141
+ keysToDelete.push(key);
142
+ }
143
+ });
144
+ if (keysToDelete.length) {
145
+ this.cacheClient.del(keysToDelete);
146
+ // Clean up ALL tag references for deleted keys
147
+ keysToDelete.forEach((key) => {
148
+ this.cleanupTagReferences(key);
149
+ });
150
+ }
151
+ }
152
+ }
153
+ }
154
+ }
155
+ }
156
+ exports.MemoryCachingProvider = MemoryCachingProvider;
157
+ MemoryCachingProvider.identifier = "cache-memory";
158
+ //# sourceMappingURL=memory-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/providers/memory-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import type { ICachingModuleService, ICachingStrategy, Logger } from "@medusajs/framework/types";
2
+ import { ModuleInjectedDependencies } from "../types";
3
+ import CacheProviderService from "./cache-provider";
4
+ export default class CachingModuleService implements ICachingModuleService {
5
+ protected readonly moduleDeclaration: {
6
+ options: {
7
+ ttl?: number;
8
+ };
9
+ } | {
10
+ ttl?: number;
11
+ };
12
+ protected container: ModuleInjectedDependencies;
13
+ protected providerService: CacheProviderService;
14
+ protected strategyCtr: new (...args: any[]) => ICachingStrategy;
15
+ protected strategy: ICachingStrategy;
16
+ protected defaultProviderId: string;
17
+ protected logger: Logger;
18
+ protected ongoingRequests: Map<string, Promise<any>>;
19
+ protected ttl: number;
20
+ constructor(container: ModuleInjectedDependencies, moduleDeclaration: {
21
+ options: {
22
+ ttl?: number;
23
+ };
24
+ } | {
25
+ ttl?: number;
26
+ });
27
+ __hooks: {
28
+ onApplicationStart: () => Promise<void>;
29
+ onApplicationShutdown: () => Promise<void>;
30
+ onApplicationPrepareShutdown: () => Promise<void>;
31
+ };
32
+ protected onApplicationStart(): void;
33
+ protected onApplicationShutdown(): void;
34
+ protected onApplicationPrepareShutdown(): void;
35
+ protected static normalizeProviders(providers: string[] | {
36
+ id: string;
37
+ ttl?: number;
38
+ } | {
39
+ id: string;
40
+ ttl?: number;
41
+ }[]): {
42
+ id: string;
43
+ ttl?: number;
44
+ }[];
45
+ protected getRequestKey(key?: string, tags?: string[], providers?: string[]): string;
46
+ protected getClearRequestKey(key?: string, tags?: string[], providers?: string[]): string;
47
+ get({ key, tags, providers, }: {
48
+ key?: string;
49
+ tags?: string[];
50
+ providers?: string[];
51
+ }): Promise<any>;
52
+ protected performCacheGet(key?: string, tags?: string[], providers?: string[]): Promise<any>;
53
+ set({ key, data, ttl, tags, providers, options, }: {
54
+ key: string;
55
+ data: object;
56
+ tags?: string[];
57
+ ttl?: number;
58
+ providers?: string[] | {
59
+ id: string;
60
+ ttl?: number;
61
+ } | {
62
+ id: string;
63
+ ttl?: number;
64
+ }[];
65
+ options?: {
66
+ autoInvalidate?: boolean;
67
+ };
68
+ }): Promise<void>;
69
+ clear({ key, tags, options, providers, }: {
70
+ key?: string;
71
+ tags?: string[];
72
+ options?: {
73
+ autoInvalidate?: boolean;
74
+ };
75
+ providers?: string[];
76
+ }): Promise<any>;
77
+ protected performCacheClear(key?: string, tags?: string[], options?: {
78
+ autoInvalidate?: boolean;
79
+ }, providers?: string[]): Promise<void>;
80
+ computeKey(input: object): Promise<string>;
81
+ computeTags(input: object, options?: Record<string, any>): Promise<string[]>;
82
+ }
83
+ //# sourceMappingURL=cache-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-module.d.ts","sourceRoot":"","sources":["../../src/services/cache-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const _types_1 = require("../types");
6
+ const ONE_HOUR_IN_SECOND = 60 * 60;
7
+ class CachingModuleService {
8
+ constructor(container, moduleDeclaration) {
9
+ this.moduleDeclaration = moduleDeclaration;
10
+ this.ongoingRequests = new Map();
11
+ this.__hooks = {
12
+ onApplicationStart: async () => {
13
+ this.onApplicationStart();
14
+ },
15
+ onApplicationShutdown: async () => {
16
+ this.onApplicationShutdown();
17
+ },
18
+ onApplicationPrepareShutdown: async () => {
19
+ this.onApplicationPrepareShutdown();
20
+ },
21
+ };
22
+ this.container = container;
23
+ this.providerService = container.cacheProviderService;
24
+ this.defaultProviderId = container[_types_1.CachingDefaultProvider];
25
+ this.strategyCtr = container.strategy;
26
+ this.strategy = new this.strategyCtr(this.container, this);
27
+ const moduleOptions = "options" in moduleDeclaration
28
+ ? moduleDeclaration.options
29
+ : moduleDeclaration;
30
+ this.ttl = moduleOptions.ttl ?? ONE_HOUR_IN_SECOND;
31
+ this.logger = container.logger ?? console;
32
+ }
33
+ onApplicationStart() {
34
+ const loadedSchema = modules_sdk_1.MedusaModule.getAllJoinerConfigs()
35
+ .map((joinerConfig) => joinerConfig?.schema ?? "")
36
+ .join("\n");
37
+ const defaultMedusaSchema = `
38
+ scalar DateTime
39
+ scalar JSON
40
+ directive @enumValue(value: String) on ENUM_VALUE
41
+ `;
42
+ const { schema: cleanedSchema } = utils_1.GraphQLUtils.cleanGraphQLSchema(defaultMedusaSchema + loadedSchema);
43
+ const mergedSchema = utils_1.GraphQLUtils.mergeTypeDefs(cleanedSchema);
44
+ const schema = utils_1.GraphQLUtils.makeExecutableSchema({
45
+ typeDefs: mergedSchema,
46
+ });
47
+ this.strategy.onApplicationStart?.(schema, modules_sdk_1.MedusaModule.getAllJoinerConfigs());
48
+ }
49
+ onApplicationShutdown() {
50
+ this.strategy.onApplicationShutdown?.();
51
+ }
52
+ onApplicationPrepareShutdown() {
53
+ this.strategy.onApplicationPrepareShutdown?.();
54
+ }
55
+ static normalizeProviders(providers) {
56
+ const providers_ = Array.isArray(providers) ? providers : [providers];
57
+ return providers_.map((provider) => {
58
+ return typeof provider === "string" ? { id: provider } : provider;
59
+ });
60
+ }
61
+ getRequestKey(key, tags, providers) {
62
+ const keyPart = key || "";
63
+ const tagsPart = tags?.sort().join(",") || "";
64
+ const providersPart = providers?.join(",") || this.defaultProviderId;
65
+ return `${keyPart}|${tagsPart}|${providersPart}`;
66
+ }
67
+ getClearRequestKey(key, tags, providers) {
68
+ const keyPart = key || "";
69
+ const tagsPart = tags?.sort().join(",") || "";
70
+ const providersPart = providers?.join(",") || this.defaultProviderId;
71
+ return `clear:${keyPart}|${tagsPart}|${providersPart}`;
72
+ }
73
+ async get({ key, tags, providers, }) {
74
+ if (!key && !tags) {
75
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Either key or tags must be provided");
76
+ }
77
+ const requestKey = this.getRequestKey(key, tags, providers);
78
+ const existingRequest = this.ongoingRequests.get(requestKey);
79
+ if (existingRequest) {
80
+ return await existingRequest;
81
+ }
82
+ const requestPromise = this.performCacheGet(key, tags, providers);
83
+ this.ongoingRequests.set(requestKey, requestPromise);
84
+ try {
85
+ const result = await requestPromise;
86
+ return result;
87
+ }
88
+ finally {
89
+ // Clean up the completed request
90
+ this.ongoingRequests.delete(requestKey);
91
+ }
92
+ }
93
+ async performCacheGet(key, tags, providers) {
94
+ const providersToCheck = providers ?? [this.defaultProviderId];
95
+ for (const providerId of providersToCheck) {
96
+ try {
97
+ const provider_ = this.providerService.retrieveProvider(providerId);
98
+ const result = await provider_.get({ key, tags });
99
+ if (result != null) {
100
+ return result;
101
+ }
102
+ }
103
+ catch (error) {
104
+ this.logger.warn(`Cache provider ${providerId} failed: ${error.message}\n${error.stack}`);
105
+ continue;
106
+ }
107
+ }
108
+ return null;
109
+ }
110
+ async set({ key, data, ttl, tags, providers, options, }) {
111
+ const key_ = key ?? this.strategy.computeKey(data);
112
+ const tags_ = tags ?? (await this.strategy.computeTags(data));
113
+ let providers_ = [
114
+ this.defaultProviderId,
115
+ ];
116
+ providers_ = CachingModuleService.normalizeProviders(providers ?? providers_);
117
+ for (const providerOptions of providers_) {
118
+ const ttl_ = providerOptions.ttl ?? ttl ?? this.ttl;
119
+ const provider = this.providerService.retrieveProvider(providerOptions.id);
120
+ void provider.set({
121
+ key: key_,
122
+ tags: tags_,
123
+ data,
124
+ ttl: ttl_,
125
+ options,
126
+ });
127
+ }
128
+ }
129
+ async clear({ key, tags, options, providers, }) {
130
+ if (!key && !tags) {
131
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Either key or tags must be provided");
132
+ }
133
+ const requestKey = this.getClearRequestKey(key, tags, providers);
134
+ const existingRequest = this.ongoingRequests.get(requestKey);
135
+ if (existingRequest) {
136
+ return await existingRequest;
137
+ }
138
+ const requestPromise = this.performCacheClear(key, tags, options, providers);
139
+ this.ongoingRequests.set(requestKey, requestPromise);
140
+ try {
141
+ await requestPromise;
142
+ }
143
+ finally {
144
+ // Clean up the completed request
145
+ this.ongoingRequests.delete(requestKey);
146
+ }
147
+ }
148
+ async performCacheClear(key, tags, options, providers) {
149
+ let providerIds_ = [this.defaultProviderId];
150
+ if (providers) {
151
+ providerIds_ = Array.isArray(providers) ? providers : [providers];
152
+ }
153
+ for (const providerId of providerIds_) {
154
+ const provider = this.providerService.retrieveProvider(providerId);
155
+ void provider.clear({ key, tags, options });
156
+ }
157
+ }
158
+ async computeKey(input) {
159
+ return await this.strategy.computeKey(input);
160
+ }
161
+ async computeTags(input, options) {
162
+ return await this.strategy.computeTags(input, options);
163
+ }
164
+ }
165
+ exports.default = CachingModuleService;
166
+ //# sourceMappingURL=cache-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-module.js","sourceRoot":"","sources":["../../src/services/cache-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Constructor, ICachingProviderService, Logger } from "@medusajs/framework/types";
2
+ type InjectedDependencies = {
3
+ [key: `cp_${string}`]: ICachingProviderService;
4
+ logger?: Logger;
5
+ };
6
+ export default class CacheProviderService {
7
+ #private;
8
+ constructor(container: InjectedDependencies);
9
+ static getRegistrationIdentifier(providerClass: Constructor<ICachingProviderService>): string;
10
+ retrieveProvider(providerId: string): ICachingProviderService;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=cache-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-provider.d.ts","sourceRoot":"","sources":["../../src/services/cache-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,MAAM,EACP,MAAM,2BAA2B,CAAA;AAIlC,KAAK,oBAAoB,GAAG;IAC1B,CAAC,GAAG,EAAE,MAAM,MAAM,EAAE,GAAG,uBAAuB,CAAA;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,oBAAoB;;gBAI3B,SAAS,EAAE,oBAAoB;IAO3C,MAAM,CAAC,yBAAyB,CAC9B,aAAa,EAAE,WAAW,CAAC,uBAAuB,CAAC;IAW9C,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB;CAuBrE"}