@xbg.solutions/utils-cache-connector 1.0.0

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 (33) hide show
  1. package/lib/cache-connector.d.ts +139 -0
  2. package/lib/cache-connector.d.ts.map +1 -0
  3. package/lib/cache-connector.js +277 -0
  4. package/lib/cache-connector.js.map +1 -0
  5. package/lib/index.d.ts +52 -0
  6. package/lib/index.d.ts.map +1 -0
  7. package/lib/index.js +103 -0
  8. package/lib/index.js.map +1 -0
  9. package/lib/providers/base-cache-provider.d.ts +95 -0
  10. package/lib/providers/base-cache-provider.d.ts.map +1 -0
  11. package/lib/providers/base-cache-provider.js +120 -0
  12. package/lib/providers/base-cache-provider.js.map +1 -0
  13. package/lib/providers/firestore-cache-provider.d.ts +58 -0
  14. package/lib/providers/firestore-cache-provider.d.ts.map +1 -0
  15. package/lib/providers/firestore-cache-provider.js +418 -0
  16. package/lib/providers/firestore-cache-provider.js.map +1 -0
  17. package/lib/providers/memory-cache-provider.d.ts +57 -0
  18. package/lib/providers/memory-cache-provider.d.ts.map +1 -0
  19. package/lib/providers/memory-cache-provider.js +217 -0
  20. package/lib/providers/memory-cache-provider.js.map +1 -0
  21. package/lib/providers/noop-cache-provider.d.ts +21 -0
  22. package/lib/providers/noop-cache-provider.d.ts.map +1 -0
  23. package/lib/providers/noop-cache-provider.js +42 -0
  24. package/lib/providers/noop-cache-provider.js.map +1 -0
  25. package/lib/providers/redis-cache-provider.d.ts +64 -0
  26. package/lib/providers/redis-cache-provider.d.ts.map +1 -0
  27. package/lib/providers/redis-cache-provider.js +414 -0
  28. package/lib/providers/redis-cache-provider.js.map +1 -0
  29. package/lib/types.d.ts +342 -0
  30. package/lib/types.d.ts.map +1 -0
  31. package/lib/types.js +8 -0
  32. package/lib/types.js.map +1 -0
  33. package/package.json +31 -0
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Cache Connector
3
+ *
4
+ * Main facade class for the caching system.
5
+ * Provides a unified API for all cache operations and manages multiple cache providers.
6
+ *
7
+ * Features:
8
+ * - Multi-provider support (memory, firestore, redis)
9
+ * - Lazy provider initialization
10
+ * - Global enable/disable switch
11
+ * - Provider-specific routing
12
+ * - Automatic fallback to no-op when disabled
13
+ *
14
+ * Usage:
15
+ * ```typescript
16
+ * const cache = getCacheConnector();
17
+ * await cache.set('key', value, { ttl: 300, provider: 'memory' });
18
+ * const cached = await cache.get<User>('key', { provider: 'memory' });
19
+ * ```
20
+ */
21
+ import { CacheConfig, CacheProviderType, CacheSetOptions, CacheGetOptions, CacheInvalidateOptions, CacheEntry, CacheStats } from './types';
22
+ export declare class CacheConnector {
23
+ private config;
24
+ private providers;
25
+ private noopProvider;
26
+ constructor(config: CacheConfig);
27
+ /**
28
+ * Check if caching is enabled globally
29
+ */
30
+ isEnabled(): boolean;
31
+ /**
32
+ * Get or create a provider instance
33
+ */
34
+ private getProvider;
35
+ /**
36
+ * Create a new provider instance based on type
37
+ */
38
+ private createProvider;
39
+ /**
40
+ * Resolve provider from options or use default
41
+ */
42
+ private resolveProvider;
43
+ /**
44
+ * Get a value from cache
45
+ *
46
+ * @param key - Cache key
47
+ * @param options - Get options (provider override, metadata, etc.)
48
+ * @returns Cached value or null if not found/expired
49
+ */
50
+ get<T>(key: string, options?: CacheGetOptions): Promise<T | null>;
51
+ /**
52
+ * Get a value with metadata from cache
53
+ *
54
+ * @param key - Cache key
55
+ * @param options - Get options
56
+ * @returns Cache entry with metadata or null
57
+ */
58
+ getWithMetadata<T>(key: string, options?: CacheGetOptions): Promise<CacheEntry<T> | null>;
59
+ /**
60
+ * Set a value in cache
61
+ *
62
+ * @param key - Cache key
63
+ * @param value - Value to cache
64
+ * @param options - Set options (TTL, tags, provider, etc.)
65
+ */
66
+ set<T>(key: string, value: T, options?: CacheSetOptions): Promise<void>;
67
+ /**
68
+ * Delete a specific cache entry
69
+ *
70
+ * @param key - Cache key to delete
71
+ * @param options - Invalidate options
72
+ * @returns True if entry was deleted
73
+ */
74
+ delete(key: string, options?: CacheInvalidateOptions): Promise<boolean>;
75
+ /**
76
+ * Check if a cache entry exists
77
+ *
78
+ * @param key - Cache key to check
79
+ * @param options - Get options
80
+ * @returns True if entry exists and is not expired
81
+ */
82
+ has(key: string, options?: CacheGetOptions): Promise<boolean>;
83
+ /**
84
+ * Invalidate cache entries by tags
85
+ *
86
+ * @param tags - Array of tags to invalidate
87
+ * @param options - Invalidate options
88
+ * @returns Number of entries invalidated
89
+ */
90
+ invalidateByTags(tags: string[], options?: CacheInvalidateOptions): Promise<number>;
91
+ /**
92
+ * Invalidate cache entries by key pattern
93
+ *
94
+ * @param pattern - Pattern to match
95
+ * @param options - Invalidate options
96
+ * @returns Number of entries invalidated
97
+ */
98
+ invalidateByPattern(pattern: string, options?: CacheInvalidateOptions): Promise<number>;
99
+ /**
100
+ * Clear all cache entries
101
+ *
102
+ * @param options - Invalidate options
103
+ */
104
+ clear(options?: CacheInvalidateOptions): Promise<void>;
105
+ /**
106
+ * Clear all cache entries across all providers
107
+ */
108
+ clearAll(): Promise<void>;
109
+ /**
110
+ * Get cache statistics
111
+ *
112
+ * @param options - Get options
113
+ * @returns Cache statistics
114
+ */
115
+ getStats(options?: CacheGetOptions): Promise<CacheStats>;
116
+ /**
117
+ * Get statistics for all active providers
118
+ */
119
+ getAllStats(): Promise<Record<CacheProviderType, CacheStats>>;
120
+ /**
121
+ * Manually trigger cleanup of expired entries
122
+ *
123
+ * @param options - Get options
124
+ * @returns Number of entries cleaned up
125
+ */
126
+ cleanup(options?: CacheGetOptions): Promise<number>;
127
+ /**
128
+ * Build a namespaced cache key
129
+ *
130
+ * @param parts - Key parts to join
131
+ * @returns Namespaced cache key
132
+ */
133
+ buildKey(...parts: string[]): string;
134
+ /**
135
+ * Destroy all providers and cleanup resources
136
+ */
137
+ destroy(): void;
138
+ }
139
+ //# sourceMappingURL=cache-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-connector.d.ts","sourceRoot":"","sources":["../src/cache-connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,EAEjB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,UAAU,EACX,MAAM,SAAS,CAAC;AAOjB,qBAAa,cAAc;IAIb,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,YAAY,CAAiB;gBAEjB,MAAM,EAAE,WAAW;IAWvC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK3E;;;;;;OAMG;IACG,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAKnG;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjF;;;;;;OAMG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjF;;;;;;OAMG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvE;;;;;;OAMG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7F;;;;;;OAMG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjG;;;;OAIG;IACG,KAAK,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB/B;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKlE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAiBnE;;;;;OAKG;IACG,OAAO,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAU7D;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAIpC;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB"}
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ /**
3
+ * Cache Connector
4
+ *
5
+ * Main facade class for the caching system.
6
+ * Provides a unified API for all cache operations and manages multiple cache providers.
7
+ *
8
+ * Features:
9
+ * - Multi-provider support (memory, firestore, redis)
10
+ * - Lazy provider initialization
11
+ * - Global enable/disable switch
12
+ * - Provider-specific routing
13
+ * - Automatic fallback to no-op when disabled
14
+ *
15
+ * Usage:
16
+ * ```typescript
17
+ * const cache = getCacheConnector();
18
+ * await cache.set('key', value, { ttl: 300, provider: 'memory' });
19
+ * const cached = await cache.get<User>('key', { provider: 'memory' });
20
+ * ```
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.CacheConnector = void 0;
24
+ const noop_cache_provider_1 = require("./providers/noop-cache-provider");
25
+ const memory_cache_provider_1 = require("./providers/memory-cache-provider");
26
+ const firestore_cache_provider_1 = require("./providers/firestore-cache-provider");
27
+ const redis_cache_provider_1 = require("./providers/redis-cache-provider");
28
+ const utils_logger_1 = require("@xbg/utils-logger");
29
+ class CacheConnector {
30
+ constructor(config) {
31
+ this.config = config;
32
+ this.providers = new Map();
33
+ this.noopProvider = new noop_cache_provider_1.NoOpCacheProvider();
34
+ utils_logger_1.logger.info('CacheConnector initialized', {
35
+ operation: 'cache.init',
36
+ enabled: config.enabled,
37
+ defaultProvider: config.defaultProvider,
38
+ });
39
+ }
40
+ /**
41
+ * Check if caching is enabled globally
42
+ */
43
+ isEnabled() {
44
+ return this.config.enabled;
45
+ }
46
+ /**
47
+ * Get or create a provider instance
48
+ */
49
+ getProvider(type) {
50
+ // If global cache disabled, always return no-op
51
+ if (!this.config.enabled) {
52
+ return this.noopProvider;
53
+ }
54
+ // Check if provider already exists
55
+ if (this.providers.has(type)) {
56
+ return this.providers.get(type);
57
+ }
58
+ // Create new provider instance
59
+ try {
60
+ const provider = this.createProvider(type);
61
+ this.providers.set(type, provider);
62
+ utils_logger_1.logger.debug(`Cache provider created: ${type}`, {
63
+ operation: 'cache.createProvider',
64
+ provider: type,
65
+ });
66
+ return provider;
67
+ }
68
+ catch (error) {
69
+ utils_logger_1.logger.error(`Failed to create cache provider: ${type}`, error, {
70
+ operation: 'cache.createProvider',
71
+ provider: type,
72
+ });
73
+ // Fallback to no-op on error
74
+ return this.noopProvider;
75
+ }
76
+ }
77
+ /**
78
+ * Create a new provider instance based on type
79
+ */
80
+ createProvider(type) {
81
+ switch (type) {
82
+ case 'memory':
83
+ return new memory_cache_provider_1.MemoryCacheProvider(this.config.providers.memory);
84
+ case 'firestore':
85
+ return new firestore_cache_provider_1.FirestoreCacheProvider(this.config.providers.firestore);
86
+ case 'redis':
87
+ if (!this.config.providers.redis) {
88
+ throw new Error('Redis provider configuration not found');
89
+ }
90
+ return new redis_cache_provider_1.RedisCacheProvider(this.config.providers.redis);
91
+ case 'noop':
92
+ return this.noopProvider;
93
+ default:
94
+ throw new Error(`Unknown cache provider type: ${type}`);
95
+ }
96
+ }
97
+ /**
98
+ * Resolve provider from options or use default
99
+ */
100
+ resolveProvider(providerType) {
101
+ const type = providerType || this.config.defaultProvider;
102
+ return this.getProvider(type);
103
+ }
104
+ /**
105
+ * Get a value from cache
106
+ *
107
+ * @param key - Cache key
108
+ * @param options - Get options (provider override, metadata, etc.)
109
+ * @returns Cached value or null if not found/expired
110
+ */
111
+ async get(key, options = {}) {
112
+ const provider = this.resolveProvider(options.provider);
113
+ return provider.get(key);
114
+ }
115
+ /**
116
+ * Get a value with metadata from cache
117
+ *
118
+ * @param key - Cache key
119
+ * @param options - Get options
120
+ * @returns Cache entry with metadata or null
121
+ */
122
+ async getWithMetadata(key, options = {}) {
123
+ const provider = this.resolveProvider(options.provider);
124
+ return provider.getWithMetadata(key);
125
+ }
126
+ /**
127
+ * Set a value in cache
128
+ *
129
+ * @param key - Cache key
130
+ * @param value - Value to cache
131
+ * @param options - Set options (TTL, tags, provider, etc.)
132
+ */
133
+ async set(key, value, options = {}) {
134
+ const provider = this.resolveProvider(options.provider);
135
+ const ttl = options.ttl || this.config.defaultTTL;
136
+ return provider.set(key, value, Object.assign(Object.assign({}, options), { ttl }));
137
+ }
138
+ /**
139
+ * Delete a specific cache entry
140
+ *
141
+ * @param key - Cache key to delete
142
+ * @param options - Invalidate options
143
+ * @returns True if entry was deleted
144
+ */
145
+ async delete(key, options = {}) {
146
+ const provider = this.resolveProvider(options.provider);
147
+ return provider.delete(key);
148
+ }
149
+ /**
150
+ * Check if a cache entry exists
151
+ *
152
+ * @param key - Cache key to check
153
+ * @param options - Get options
154
+ * @returns True if entry exists and is not expired
155
+ */
156
+ async has(key, options = {}) {
157
+ const provider = this.resolveProvider(options.provider);
158
+ return provider.has(key);
159
+ }
160
+ /**
161
+ * Invalidate cache entries by tags
162
+ *
163
+ * @param tags - Array of tags to invalidate
164
+ * @param options - Invalidate options
165
+ * @returns Number of entries invalidated
166
+ */
167
+ async invalidateByTags(tags, options = {}) {
168
+ const provider = this.resolveProvider(options.provider);
169
+ return provider.invalidateByTags(tags);
170
+ }
171
+ /**
172
+ * Invalidate cache entries by key pattern
173
+ *
174
+ * @param pattern - Pattern to match
175
+ * @param options - Invalidate options
176
+ * @returns Number of entries invalidated
177
+ */
178
+ async invalidateByPattern(pattern, options = {}) {
179
+ const provider = this.resolveProvider(options.provider);
180
+ const mode = (options.pattern === 'prefix' || options.pattern === 'suffix' || options.pattern === 'contains')
181
+ ? options.pattern
182
+ : 'prefix';
183
+ return provider.invalidateByPattern(pattern, mode);
184
+ }
185
+ /**
186
+ * Clear all cache entries
187
+ *
188
+ * @param options - Invalidate options
189
+ */
190
+ async clear(options = {}) {
191
+ const provider = this.resolveProvider(options.provider);
192
+ return provider.clear();
193
+ }
194
+ /**
195
+ * Clear all cache entries across all providers
196
+ */
197
+ async clearAll() {
198
+ const providers = Array.from(this.providers.values());
199
+ await Promise.all(providers.map(async (provider) => {
200
+ try {
201
+ await provider.clear();
202
+ }
203
+ catch (error) {
204
+ utils_logger_1.logger.error(`Failed to clear cache for provider: ${provider.getType()}`, error, {
205
+ operation: 'cache.clearAll',
206
+ provider: provider.getType(),
207
+ });
208
+ }
209
+ }));
210
+ }
211
+ /**
212
+ * Get cache statistics
213
+ *
214
+ * @param options - Get options
215
+ * @returns Cache statistics
216
+ */
217
+ async getStats(options = {}) {
218
+ const provider = this.resolveProvider(options.provider);
219
+ return provider.getStats();
220
+ }
221
+ /**
222
+ * Get statistics for all active providers
223
+ */
224
+ async getAllStats() {
225
+ const stats = {};
226
+ for (const [type, provider] of this.providers.entries()) {
227
+ try {
228
+ stats[type] = await provider.getStats();
229
+ }
230
+ catch (error) {
231
+ utils_logger_1.logger.error(`Failed to get stats for provider: ${type}`, error, {
232
+ operation: 'cache.getAllStats',
233
+ provider: type,
234
+ });
235
+ }
236
+ }
237
+ return stats;
238
+ }
239
+ /**
240
+ * Manually trigger cleanup of expired entries
241
+ *
242
+ * @param options - Get options
243
+ * @returns Number of entries cleaned up
244
+ */
245
+ async cleanup(options = {}) {
246
+ const provider = this.resolveProvider(options.provider);
247
+ if ('cleanup' in provider && typeof provider.cleanup === 'function') {
248
+ return provider.cleanup();
249
+ }
250
+ return 0;
251
+ }
252
+ /**
253
+ * Build a namespaced cache key
254
+ *
255
+ * @param parts - Key parts to join
256
+ * @returns Namespaced cache key
257
+ */
258
+ buildKey(...parts) {
259
+ return `${this.config.namespace}:${parts.join(':')}`;
260
+ }
261
+ /**
262
+ * Destroy all providers and cleanup resources
263
+ */
264
+ destroy() {
265
+ for (const provider of this.providers.values()) {
266
+ if ('destroy' in provider && typeof provider.destroy === 'function') {
267
+ provider.destroy();
268
+ }
269
+ }
270
+ this.providers.clear();
271
+ utils_logger_1.logger.info('CacheConnector destroyed', {
272
+ operation: 'cache.destroy',
273
+ });
274
+ }
275
+ }
276
+ exports.CacheConnector = CacheConnector;
277
+ //# sourceMappingURL=cache-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-connector.js","sourceRoot":"","sources":["../src/cache-connector.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Cache Connector
3
+ *
4
+ * Multi-level caching system with pluggable providers.
5
+ *
6
+ * Features:
7
+ * - Project-level control (global enable/disable)
8
+ * - Repository-level granularity (per-entity provider selection)
9
+ * - Multiple providers (memory, firestore, redis)
10
+ * - Tag-based invalidation
11
+ * - TTL-based expiration
12
+ * - Statistics and monitoring
13
+ *
14
+ * Usage:
15
+ * ```typescript
16
+ * // Get singleton instance
17
+ * const cache = getCacheConnector();
18
+ *
19
+ * // Set a value
20
+ * await cache.set('user:123', user, { ttl: 300, provider: 'memory' });
21
+ *
22
+ * // Get a value
23
+ * const user = await cache.get<User>('user:123', { provider: 'memory' });
24
+ *
25
+ * // Invalidate by tags
26
+ * await cache.invalidateByTags(['users', 'user:123']);
27
+ * ```
28
+ */
29
+ import { CacheConnector } from './cache-connector';
30
+ import { CacheConfig } from './types';
31
+ /**
32
+ * Initialize the cache connector with configuration
33
+ * Call this once during app startup before using getCacheConnector()
34
+ */
35
+ export declare function initializeCacheConnector(config: CacheConfig): CacheConnector;
36
+ /**
37
+ * Get the singleton CacheConnector instance
38
+ * Throws if not initialized - call initializeCacheConnector() first
39
+ */
40
+ export declare function getCacheConnector(): CacheConnector;
41
+ /**
42
+ * Reset the cache connector instance (useful for testing)
43
+ */
44
+ export declare function resetCacheConnector(): void;
45
+ export { CacheConnector } from './cache-connector';
46
+ export * from './types';
47
+ export { BaseCacheProvider } from './providers/base-cache-provider';
48
+ export { NoOpCacheProvider } from './providers/noop-cache-provider';
49
+ export { MemoryCacheProvider } from './providers/memory-cache-provider';
50
+ export { FirestoreCacheProvider } from './providers/firestore-cache-provider';
51
+ export { RedisCacheProvider } from './providers/redis-cache-provider';
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKtC;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAM5E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAYlD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /**
3
+ * Cache Connector
4
+ *
5
+ * Multi-level caching system with pluggable providers.
6
+ *
7
+ * Features:
8
+ * - Project-level control (global enable/disable)
9
+ * - Repository-level granularity (per-entity provider selection)
10
+ * - Multiple providers (memory, firestore, redis)
11
+ * - Tag-based invalidation
12
+ * - TTL-based expiration
13
+ * - Statistics and monitoring
14
+ *
15
+ * Usage:
16
+ * ```typescript
17
+ * // Get singleton instance
18
+ * const cache = getCacheConnector();
19
+ *
20
+ * // Set a value
21
+ * await cache.set('user:123', user, { ttl: 300, provider: 'memory' });
22
+ *
23
+ * // Get a value
24
+ * const user = await cache.get<User>('user:123', { provider: 'memory' });
25
+ *
26
+ * // Invalidate by tags
27
+ * await cache.invalidateByTags(['users', 'user:123']);
28
+ * ```
29
+ */
30
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ var desc = Object.getOwnPropertyDescriptor(m, k);
33
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
34
+ desc = { enumerable: true, get: function() { return m[k]; } };
35
+ }
36
+ Object.defineProperty(o, k2, desc);
37
+ }) : (function(o, m, k, k2) {
38
+ if (k2 === undefined) k2 = k;
39
+ o[k2] = m[k];
40
+ }));
41
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
42
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.RedisCacheProvider = exports.FirestoreCacheProvider = exports.MemoryCacheProvider = exports.NoOpCacheProvider = exports.BaseCacheProvider = exports.CacheConnector = void 0;
46
+ exports.initializeCacheConnector = initializeCacheConnector;
47
+ exports.getCacheConnector = getCacheConnector;
48
+ exports.resetCacheConnector = resetCacheConnector;
49
+ const cache_connector_1 = require("./cache-connector");
50
+ // Singleton instance
51
+ let cacheConnectorInstance = null;
52
+ /**
53
+ * Initialize the cache connector with configuration
54
+ * Call this once during app startup before using getCacheConnector()
55
+ */
56
+ function initializeCacheConnector(config) {
57
+ if (cacheConnectorInstance) {
58
+ cacheConnectorInstance.destroy();
59
+ }
60
+ cacheConnectorInstance = new cache_connector_1.CacheConnector(config);
61
+ return cacheConnectorInstance;
62
+ }
63
+ /**
64
+ * Get the singleton CacheConnector instance
65
+ * Throws if not initialized - call initializeCacheConnector() first
66
+ */
67
+ function getCacheConnector() {
68
+ if (!cacheConnectorInstance) {
69
+ // Create with defaults if not explicitly initialized
70
+ cacheConnectorInstance = new cache_connector_1.CacheConnector({
71
+ enabled: false,
72
+ defaultProvider: 'noop',
73
+ defaultTTL: 300,
74
+ namespace: 'app',
75
+ providers: {},
76
+ });
77
+ }
78
+ return cacheConnectorInstance;
79
+ }
80
+ /**
81
+ * Reset the cache connector instance (useful for testing)
82
+ */
83
+ function resetCacheConnector() {
84
+ if (cacheConnectorInstance) {
85
+ cacheConnectorInstance.destroy();
86
+ cacheConnectorInstance = null;
87
+ }
88
+ }
89
+ // Export types and classes
90
+ var cache_connector_2 = require("./cache-connector");
91
+ Object.defineProperty(exports, "CacheConnector", { enumerable: true, get: function () { return cache_connector_2.CacheConnector; } });
92
+ __exportStar(require("./types"), exports);
93
+ var base_cache_provider_1 = require("./providers/base-cache-provider");
94
+ Object.defineProperty(exports, "BaseCacheProvider", { enumerable: true, get: function () { return base_cache_provider_1.BaseCacheProvider; } });
95
+ var noop_cache_provider_1 = require("./providers/noop-cache-provider");
96
+ Object.defineProperty(exports, "NoOpCacheProvider", { enumerable: true, get: function () { return noop_cache_provider_1.NoOpCacheProvider; } });
97
+ var memory_cache_provider_1 = require("./providers/memory-cache-provider");
98
+ Object.defineProperty(exports, "MemoryCacheProvider", { enumerable: true, get: function () { return memory_cache_provider_1.MemoryCacheProvider; } });
99
+ var firestore_cache_provider_1 = require("./providers/firestore-cache-provider");
100
+ Object.defineProperty(exports, "FirestoreCacheProvider", { enumerable: true, get: function () { return firestore_cache_provider_1.FirestoreCacheProvider; } });
101
+ var redis_cache_provider_1 = require("./providers/redis-cache-provider");
102
+ Object.defineProperty(exports, "RedisCacheProvider", { enumerable: true, get: function () { return redis_cache_provider_1.RedisCacheProvider; } });
103
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;;;;;;;;;;;AAYH,4DAMC;AAMD,8CAYC;AAKD,kDAKC;AA5CD,uDAAmD;AAGnD,qBAAqB;AACrB,IAAI,sBAAsB,GAA0B,IAAI,CAAC;AAEzD;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,MAAmB;IAC1D,IAAI,sBAAsB,EAAE,CAAC;QAC3B,sBAAsB,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IACD,sBAAsB,GAAG,IAAI,gCAAc,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,qDAAqD;QACrD,sBAAsB,GAAG,IAAI,gCAAc,CAAC;YAC1C,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,MAAa;YAC9B,UAAU,EAAE,GAAG;YACf,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,EAAS;SACrB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,IAAI,sBAAsB,EAAE,CAAC;QAC3B,sBAAsB,CAAC,OAAO,EAAE,CAAC;QACjC,sBAAsB,GAAG,IAAI,CAAC;IAChC,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,0CAAwB;AACxB,uEAAoE;AAA3D,wHAAA,iBAAiB,OAAA;AAC1B,uEAAoE;AAA3D,wHAAA,iBAAiB,OAAA;AAC1B,2EAAwE;AAA/D,4HAAA,mBAAmB,OAAA;AAC5B,iFAA8E;AAArE,kIAAA,sBAAsB,OAAA;AAC/B,yEAAsE;AAA7D,0HAAA,kBAAkB,OAAA"}