@acmekit/caching 2.13.1

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 +8 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +15 -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 +64 -0
  12. package/dist/loaders/providers.js.map +1 -0
  13. package/dist/providers/memory-cache.d.ts +45 -0
  14. package/dist/providers/memory-cache.d.ts.map +1 -0
  15. package/dist/providers/memory-cache.js +205 -0
  16. package/dist/providers/memory-cache.js.map +1 -0
  17. package/dist/services/cache-module.d.ts +90 -0
  18. package/dist/services/cache-module.d.ts.map +1 -0
  19. package/dist/services/cache-module.js +204 -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 +82 -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 +44 -0
  35. package/dist/utils/parser.d.ts.map +1 -0
  36. package/dist/utils/parser.js +161 -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 +98 -0
  41. package/dist/utils/strategy.js.map +1 -0
  42. package/package.json +44 -0
@@ -0,0 +1,8 @@
1
+ import "./types";
2
+ import CachingModuleService from "./services/cache-module";
3
+ declare const _default: import("@acmekit/types").ModuleExports<typeof CachingModuleService> & {
4
+ linkable: Record<string, any>;
5
+ };
6
+ export default _default;
7
+ export { CachingModuleOptions } from "./types";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAIhB,OAAO,oBAAoB,MAAM,yBAAyB,CAAA;;;;AAE1D,wBAGE;AAGF,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
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
+ require("./types");
7
+ const utils_1 = require("@acmekit/framework/utils");
8
+ const hash_1 = __importDefault(require("./loaders/hash"));
9
+ const providers_1 = __importDefault(require("./loaders/providers"));
10
+ const cache_module_1 = __importDefault(require("./services/cache-module"));
11
+ exports.default = (0, utils_1.Module)(utils_1.Modules.CACHING, {
12
+ service: cache_module_1.default,
13
+ loaders: [hash_1.default, providers_1.default],
14
+ });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,mBAAgB;AAChB,oDAA0D;AAC1D,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":"yBAEsB;;CAAa;AAAnC,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 "@acmekit/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,0BAA0B,CAAA;AAMzE,OAAO,EAGL,oBAAoB,EAErB,MAAM,QAAQ,CAAA;yBAwBO,yBAGnB,aAAa,CACd,CACI,eAAe,CAAC,8BAA8B,GAC9C,eAAe,CAAC,6CAA6C,CAChE,GACC,oBAAoB,CACvB,KAAG,OAAO,CAAC,IAAI,CAAC;AATjB,wBAqEC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const modules_sdk_1 = require("@acmekit/framework/modules-sdk");
4
+ const utils_1 = require("@acmekit/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 = strategy_1.DefaultCacheStrategy; // Re enable custom strategy another time
27
+ container.register("strategy", (0, awilix_1.asValue)(strategy));
28
+ const inMemoryOptions = options?.in_memory ?? {};
29
+ const { enable: isInMemoryEnabled, ...restInmemoryOptions } = inMemoryOptions;
30
+ if (isInMemoryEnabled) {
31
+ // MemoryCachingProvider - default provider
32
+ container.register({
33
+ [_types_1.CachingProviderRegistrationPrefix + memory_cache_1.MemoryCachingProvider.identifier]: (0, awilix_1.asFunction)((cradle) => new memory_cache_1.MemoryCachingProvider(cradle, restInmemoryOptions), {
34
+ lifetime: awilix_1.Lifetime.SINGLETON,
35
+ }),
36
+ });
37
+ container.registerAdd(_types_1.CachingIdentifiersRegistrationName, (0, awilix_1.asValue)(memory_cache_1.MemoryCachingProvider.identifier));
38
+ container.register(_types_1.CachingDefaultProvider, (0, awilix_1.asValue)(memory_cache_1.MemoryCachingProvider.identifier));
39
+ }
40
+ // Load other providers
41
+ await (0, modules_sdk_1.moduleProviderLoader)({
42
+ container,
43
+ providers: options?.providers || [],
44
+ registerServiceFn: registrationFn,
45
+ });
46
+ const isSingleProvider = options?.providers?.length === 1;
47
+ let hasDefaultProvider = false;
48
+ for (const provider of options?.providers || []) {
49
+ if (provider.is_default || isSingleProvider) {
50
+ hasDefaultProvider = true;
51
+ container.register(_types_1.CachingDefaultProvider, (0, awilix_1.asValue)(provider.id));
52
+ }
53
+ }
54
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
55
+ if (!hasDefaultProvider) {
56
+ if (isInMemoryEnabled) {
57
+ logger.warn(`[caching-module]: No default caching provider defined. Using "${container.resolve(_types_1.CachingDefaultProvider)}" as default.`);
58
+ }
59
+ else {
60
+ throw new Error("[caching-module]: No providers have been configured and the built in memory cache has not been enabled.");
61
+ }
62
+ }
63
+ };
64
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/loaders/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import NodeCache from "node-cache";
2
+ import type { ICachingProviderService, Logger } from "@acmekit/framework/types";
3
+ import { MemoryCacheModuleOptions } from "../types";
4
+ export declare class MemoryCachingProvider implements ICachingProviderService {
5
+ static identifier: string;
6
+ protected logger: Logger;
7
+ protected cacheClient: NodeCache;
8
+ protected tagIndex: Map<string, Set<string>>;
9
+ protected keyTags: Map<string, Set<string>>;
10
+ protected entryOptions: Map<string, {
11
+ autoInvalidate?: boolean;
12
+ }>;
13
+ protected keySizes: Map<string, number>;
14
+ protected approximateMemoryUsage: number;
15
+ protected options: MemoryCacheModuleOptions;
16
+ protected maxSize: number;
17
+ protected hasher: (key: string) => string;
18
+ constructor({ logger, hasher }: {
19
+ logger?: Logger;
20
+ hasher: (key: string) => string;
21
+ }, options?: MemoryCacheModuleOptions);
22
+ private calculateEntrySize;
23
+ private cleanupTagReferences;
24
+ get({ key, tags }: {
25
+ key?: string;
26
+ tags?: string[];
27
+ }): Promise<any>;
28
+ set({ key, data, ttl, tags, options, }: {
29
+ key: string;
30
+ data: object;
31
+ ttl?: number;
32
+ tags?: string[];
33
+ options?: {
34
+ autoInvalidate?: boolean;
35
+ };
36
+ }): Promise<void>;
37
+ clear({ key, tags, options, }: {
38
+ key?: string;
39
+ tags?: string[];
40
+ options?: {
41
+ autoInvalidate?: boolean;
42
+ };
43
+ }): Promise<void>;
44
+ }
45
+ //# 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,EAAE,MAAM,0BAA0B,CAAA;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAA;AAUjD,qBAAa,qBAAsB,YAAW,uBAAuB;IACnE,MAAM,CAAC,UAAU,SAAiB;IAElC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAA;IACxB,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,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAY;IACnD,SAAS,CAAC,sBAAsB,EAAE,MAAM,CAAI;IAC5C,SAAS,CAAC,OAAO,EAAE,wBAAwB,CAAA;IAC3C,SAAS,CAAC,OAAO,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;gBAGvC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,EACxE,OAAO,GAAE,wBAA6B;IAmCxC,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,oBAAoB;IA0BtB,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;IAmCnE,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;IAoDX,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;CAiElB"}
@@ -0,0 +1,205 @@
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
+ const THREE_HUNDRED_MB = 300 * 1024 * 1024;
9
+ const formatBytes = (bytes) => {
10
+ if (bytes < 1024)
11
+ return `${bytes} B`;
12
+ if (bytes < 1024 * 1024)
13
+ return `${Math.round(bytes / 1024)} KB`;
14
+ return `${Math.round(bytes / 1024 / 1024)} MB`;
15
+ };
16
+ class MemoryCachingProvider {
17
+ constructor({ logger, hasher }, options = {}) {
18
+ this.tagIndex = new Map(); // tag -> keys
19
+ this.keyTags = new Map(); // key -> tags
20
+ this.entryOptions = new Map(); // key -> options
21
+ this.keySizes = new Map(); // key -> approximate size in bytes
22
+ this.approximateMemoryUsage = 0;
23
+ this.logger = logger ?? console;
24
+ const { maxSize, ...rest } = options;
25
+ this.maxSize = maxSize ?? THREE_HUNDRED_MB;
26
+ this.hasher = hasher;
27
+ this.options = {
28
+ ttl: 3600,
29
+ maxKeys: 25000,
30
+ checkPeriod: 60, // 10 minutes
31
+ useClones: false, // Default to false for speed, true would be slower but safer. we can ...discuss
32
+ ...rest,
33
+ };
34
+ const cacheClient = new node_cache_1.default({
35
+ stdTTL: this.options.ttl,
36
+ maxKeys: this.options.maxKeys,
37
+ checkperiod: this.options.checkPeriod,
38
+ useClones: this.options.useClones,
39
+ });
40
+ this.cacheClient = cacheClient;
41
+ // Clean up tag indices when keys expire
42
+ this.cacheClient.on("expired", (key) => {
43
+ this.cleanupTagReferences(key);
44
+ });
45
+ this.cacheClient.on("del", (key) => {
46
+ this.cleanupTagReferences(key);
47
+ });
48
+ }
49
+ calculateEntrySize(key, data, tags) {
50
+ const dataSize = Buffer.byteLength(JSON.stringify(data), "utf8");
51
+ const keySize = Buffer.byteLength(key, "utf8");
52
+ let tagsSize = 0;
53
+ if (tags?.length) {
54
+ tagsSize = Buffer.byteLength(JSON.stringify(tags), "utf8");
55
+ }
56
+ return dataSize + keySize + tagsSize;
57
+ }
58
+ cleanupTagReferences(key) {
59
+ const tags = this.keyTags.get(key);
60
+ if (tags) {
61
+ tags.forEach((tag) => {
62
+ const keysForTag = this.tagIndex.get(tag);
63
+ if (keysForTag) {
64
+ keysForTag.delete(key);
65
+ if (keysForTag.size === 0) {
66
+ this.tagIndex.delete(tag);
67
+ }
68
+ }
69
+ });
70
+ this.keyTags.delete(key);
71
+ }
72
+ // Clean up memory tracking
73
+ const keySize = this.keySizes.get(key);
74
+ if (keySize) {
75
+ this.approximateMemoryUsage -= keySize;
76
+ this.keySizes.delete(key);
77
+ }
78
+ // Also clean up entry options
79
+ this.entryOptions.delete(key);
80
+ }
81
+ async get({ key, tags }) {
82
+ if (key) {
83
+ const hashedKey = this.hasher(key);
84
+ return this.cacheClient.get(hashedKey) ?? null;
85
+ }
86
+ if (tags?.length) {
87
+ const allKeys = new Set();
88
+ tags.forEach((tag) => {
89
+ const hashedTag = this.hasher(tag);
90
+ const keysForTag = this.tagIndex.get(hashedTag);
91
+ if (keysForTag) {
92
+ keysForTag.forEach((key) => allKeys.add(key));
93
+ }
94
+ });
95
+ if (allKeys.size === 0) {
96
+ return [];
97
+ }
98
+ const results = [];
99
+ allKeys.forEach((key) => {
100
+ const value = this.cacheClient.get(key);
101
+ if (value !== undefined) {
102
+ results.push(value);
103
+ }
104
+ });
105
+ return results;
106
+ }
107
+ return null;
108
+ }
109
+ async set({ key, data, ttl, tags, options, }) {
110
+ // Only reject if we're already over the limit
111
+ if (this.approximateMemoryUsage > this.maxSize) {
112
+ this.logger.warn(`Cache is full. Current usage: ${formatBytes(this.approximateMemoryUsage)}, Max: ${formatBytes(this.maxSize)}. Skipping cache entry.`);
113
+ return;
114
+ }
115
+ const hashedKey = this.hasher(key);
116
+ const hashedTags = tags?.map((tag) => this.hasher(tag));
117
+ const totalSize = this.calculateEntrySize(hashedKey, data, hashedTags);
118
+ // Set the cache entry
119
+ const effectiveTTL = ttl ?? this.options.ttl ?? 3600;
120
+ this.cacheClient.set(hashedKey, data, effectiveTTL);
121
+ // Handle tags if provided
122
+ if (hashedTags?.length) {
123
+ // Clean up any existing tag references for this key
124
+ this.cleanupTagReferences(hashedKey);
125
+ const tagSet = new Set(hashedTags);
126
+ this.keyTags.set(hashedKey, tagSet);
127
+ // Add this key to each tag's index
128
+ hashedTags.forEach((tag) => {
129
+ if (!this.tagIndex.has(tag)) {
130
+ this.tagIndex.set(tag, new Set());
131
+ }
132
+ this.tagIndex.get(tag).add(hashedKey);
133
+ });
134
+ }
135
+ // Store entry options if provided
136
+ if (Object.keys(options ?? {}).length &&
137
+ !Object.values(options ?? {}).every((value) => value === undefined)) {
138
+ this.entryOptions.set(hashedKey, options);
139
+ }
140
+ // Track memory usage
141
+ const existingSize = this.keySizes.get(hashedKey) || 0;
142
+ this.approximateMemoryUsage =
143
+ this.approximateMemoryUsage - existingSize + totalSize;
144
+ this.keySizes.set(hashedKey, totalSize);
145
+ }
146
+ async clear({ key, tags, options, }) {
147
+ if (key) {
148
+ const hashedKey = this.hasher(key);
149
+ this.cacheClient.del(hashedKey);
150
+ return;
151
+ }
152
+ if (tags?.length) {
153
+ // Handle wildcard tag to clear all cache data
154
+ if (tags?.includes("*")) {
155
+ this.cacheClient.flushAll();
156
+ this.tagIndex.clear();
157
+ this.keyTags.clear();
158
+ this.entryOptions.clear();
159
+ return;
160
+ }
161
+ const hashedTags = tags.map((tag) => this.hasher(tag));
162
+ const allKeys = new Set();
163
+ hashedTags.forEach((tag) => {
164
+ const keysForTag = this.tagIndex.get(tag);
165
+ if (keysForTag) {
166
+ keysForTag.forEach((key) => allKeys.add(key));
167
+ }
168
+ });
169
+ if (allKeys.size) {
170
+ // If no options provided (user explicit call), clear everything
171
+ if (!options) {
172
+ const keysToDelete = Array.from(allKeys);
173
+ this.cacheClient.del(keysToDelete);
174
+ // Clean up ALL tag references for deleted keys
175
+ keysToDelete.forEach((key) => {
176
+ this.cleanupTagReferences(key);
177
+ });
178
+ return;
179
+ }
180
+ // If autoInvalidate is true (strategy call), only clear entries with autoInvalidate=true (default)
181
+ if (options.autoInvalidate === true) {
182
+ const keysToDelete = [];
183
+ allKeys.forEach((key) => {
184
+ const entryOptions = this.entryOptions.get(key);
185
+ // Delete if entry has autoInvalidate=true or no setting (default true)
186
+ const shouldAutoInvalidate = entryOptions?.autoInvalidate ?? true;
187
+ if (shouldAutoInvalidate) {
188
+ keysToDelete.push(key);
189
+ }
190
+ });
191
+ if (keysToDelete.length) {
192
+ this.cacheClient.del(keysToDelete);
193
+ // Clean up ALL tag references for deleted keys
194
+ keysToDelete.forEach((key) => {
195
+ this.cleanupTagReferences(key);
196
+ });
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ exports.MemoryCachingProvider = MemoryCachingProvider;
204
+ MemoryCachingProvider.identifier = "cache-memory";
205
+ //# 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,90 @@
1
+ import type { ICachingModuleService, ICachingStrategy, Logger } from "@acmekit/framework/types";
2
+ import { InjectedDependencies } 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: InjectedDependencies;
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
+ static traceGet?: (cacheGetFn: () => Promise<any>, key: string, tags: string[]) => Promise<any>;
21
+ static traceSet?: (cacheSetFn: () => Promise<any>, key: string, tags: string[], options: {
22
+ autoInvalidate?: boolean;
23
+ }) => Promise<any>;
24
+ static traceClear?: (cacheClearFn: () => Promise<any>, key: string, tags: string[], options: {
25
+ autoInvalidate?: boolean;
26
+ }) => Promise<any>;
27
+ constructor(container: InjectedDependencies, moduleDeclaration: {
28
+ options: {
29
+ ttl?: number;
30
+ };
31
+ } | {
32
+ ttl?: number;
33
+ });
34
+ __hooks: {
35
+ onApplicationStart: () => Promise<void>;
36
+ onApplicationShutdown: () => Promise<void>;
37
+ onApplicationPrepareShutdown: () => Promise<void>;
38
+ };
39
+ protected onApplicationStart(): void;
40
+ protected onApplicationShutdown(): void;
41
+ protected onApplicationPrepareShutdown(): void;
42
+ protected static normalizeProviders(providers: string[] | {
43
+ id: string;
44
+ ttl?: number;
45
+ }[]): {
46
+ id: string;
47
+ ttl?: number;
48
+ }[];
49
+ protected getRequestKey(key?: string, tags?: string[], providers?: string[]): string;
50
+ protected getClearRequestKey(key?: string, tags?: string[], providers?: string[]): string;
51
+ get(options: {
52
+ key?: string;
53
+ tags?: string[];
54
+ providers?: string[];
55
+ }): Promise<any>;
56
+ private get_;
57
+ protected performCacheGet(key?: string, tags?: string[], providers?: string[]): Promise<any>;
58
+ set(options: {
59
+ key: string;
60
+ data: object;
61
+ ttl?: number;
62
+ tags?: string[];
63
+ providers?: string[];
64
+ options?: {
65
+ autoInvalidate?: boolean;
66
+ };
67
+ }): Promise<any>;
68
+ private set_;
69
+ protected performCacheSet(key: string, tags: string[], data: object, ttl?: number, providers?: {
70
+ id: string;
71
+ ttl?: number;
72
+ }[], options?: {
73
+ autoInvalidate?: boolean;
74
+ }): Promise<void>;
75
+ clear(options: {
76
+ key?: string;
77
+ tags?: string[];
78
+ options?: {
79
+ autoInvalidate?: boolean;
80
+ };
81
+ providers?: string[];
82
+ }): Promise<any>;
83
+ private clear_;
84
+ protected performCacheClear(key?: string, tags?: string[], options?: {
85
+ autoInvalidate?: boolean;
86
+ }, providers?: string[]): Promise<void>;
87
+ computeKey(input: object): Promise<string>;
88
+ computeTags(input: object, options?: Record<string, any>): Promise<string[]>;
89
+ }
90
+ //# 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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"}