@bernierllc/cache-manager 1.0.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 (62) hide show
  1. package/README.md +425 -0
  2. package/dist/backends/index.d.ts +4 -0
  3. package/dist/backends/index.d.ts.map +1 -0
  4. package/dist/backends/index.js +27 -0
  5. package/dist/backends/index.js.map +1 -0
  6. package/dist/backends/memory.d.ts +21 -0
  7. package/dist/backends/memory.d.ts.map +1 -0
  8. package/dist/backends/memory.js +136 -0
  9. package/dist/backends/memory.js.map +1 -0
  10. package/dist/backends/multi-tier.d.ts +17 -0
  11. package/dist/backends/multi-tier.d.ts.map +1 -0
  12. package/dist/backends/multi-tier.js +150 -0
  13. package/dist/backends/multi-tier.js.map +1 -0
  14. package/dist/backends/redis.d.ts +18 -0
  15. package/dist/backends/redis.d.ts.map +1 -0
  16. package/dist/backends/redis.js +166 -0
  17. package/dist/backends/redis.js.map +1 -0
  18. package/dist/constants.d.ts +22 -0
  19. package/dist/constants.d.ts.map +1 -0
  20. package/dist/constants.js +32 -0
  21. package/dist/constants.js.map +1 -0
  22. package/dist/index.d.ts +7 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +34 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/manager.d.ts +26 -0
  27. package/dist/manager.d.ts.map +1 -0
  28. package/dist/manager.js +171 -0
  29. package/dist/manager.js.map +1 -0
  30. package/dist/serializers/binary.d.ts +6 -0
  31. package/dist/serializers/binary.d.ts.map +1 -0
  32. package/dist/serializers/binary.js +22 -0
  33. package/dist/serializers/binary.js.map +1 -0
  34. package/dist/serializers/index.d.ts +3 -0
  35. package/dist/serializers/index.d.ts.map +1 -0
  36. package/dist/serializers/index.js +26 -0
  37. package/dist/serializers/index.js.map +1 -0
  38. package/dist/serializers/json.d.ts +6 -0
  39. package/dist/serializers/json.d.ts.map +1 -0
  40. package/dist/serializers/json.js +20 -0
  41. package/dist/serializers/json.js.map +1 -0
  42. package/dist/strategies/index.d.ts +6 -0
  43. package/dist/strategies/index.d.ts.map +1 -0
  44. package/dist/strategies/index.js +41 -0
  45. package/dist/strategies/index.js.map +1 -0
  46. package/dist/strategies/lfu.d.ts +10 -0
  47. package/dist/strategies/lfu.d.ts.map +1 -0
  48. package/dist/strategies/lfu.js +43 -0
  49. package/dist/strategies/lfu.js.map +1 -0
  50. package/dist/strategies/lru.d.ts +11 -0
  51. package/dist/strategies/lru.d.ts.map +1 -0
  52. package/dist/strategies/lru.js +48 -0
  53. package/dist/strategies/lru.js.map +1 -0
  54. package/dist/strategies/ttl.d.ts +9 -0
  55. package/dist/strategies/ttl.d.ts.map +1 -0
  56. package/dist/strategies/ttl.js +47 -0
  57. package/dist/strategies/ttl.js.map +1 -0
  58. package/dist/types.d.ts +73 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +10 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +65 -0
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MultiTierCacheBackend = void 0;
11
+ class MultiTierCacheBackend {
12
+ constructor(options) {
13
+ this.stats = {
14
+ hits: 0,
15
+ misses: 0,
16
+ hitRate: 0,
17
+ size: 0,
18
+ memoryUsage: 0,
19
+ evictions: 0,
20
+ expirations: 0
21
+ };
22
+ if (!options.backends || options.backends.length === 0) {
23
+ throw new Error('At least one backend is required for multi-tier cache');
24
+ }
25
+ this.backends = [...options.backends];
26
+ }
27
+ async get(key) {
28
+ // Check backends in order (L1, L2, L3, etc.)
29
+ for (let i = 0; i < this.backends.length; i++) {
30
+ const backend = this.backends[i];
31
+ if (!backend)
32
+ continue;
33
+ const entry = await backend.get(key);
34
+ if (entry) {
35
+ // Found in tier i, populate higher tiers (cache promotion)
36
+ for (let j = 0; j < i; j++) {
37
+ const higherBackend = this.backends[j];
38
+ if (!higherBackend)
39
+ continue;
40
+ try {
41
+ await higherBackend.set(key, entry);
42
+ }
43
+ catch (error) {
44
+ console.warn(`Failed to promote cache entry to tier ${j}:`, error);
45
+ }
46
+ }
47
+ this.stats.hits++;
48
+ this.updateHitRate();
49
+ return entry;
50
+ }
51
+ }
52
+ this.stats.misses++;
53
+ this.updateHitRate();
54
+ return null;
55
+ }
56
+ async set(key, entry, ttl) {
57
+ // Write to all backends
58
+ const promises = this.backends.map(async (backend) => {
59
+ try {
60
+ await backend.set(key, entry, ttl);
61
+ }
62
+ catch (error) {
63
+ console.warn('Failed to write to backend:', error);
64
+ }
65
+ });
66
+ await Promise.allSettled(promises);
67
+ }
68
+ async delete(key) {
69
+ // Delete from all backends
70
+ const promises = this.backends.map(backend => backend.delete(key));
71
+ const results = await Promise.allSettled(promises);
72
+ // Return true if at least one backend successfully deleted
73
+ return results.some(result => result.status === 'fulfilled' && result.value === true);
74
+ }
75
+ async clear() {
76
+ // Clear all backends
77
+ const promises = this.backends.map(async (backend) => {
78
+ try {
79
+ await backend.clear();
80
+ }
81
+ catch (error) {
82
+ console.warn('Failed to clear backend:', error);
83
+ }
84
+ });
85
+ await Promise.allSettled(promises);
86
+ }
87
+ async keys(pattern) {
88
+ // Get keys from first available backend
89
+ for (const backend of this.backends) {
90
+ try {
91
+ return await backend.keys(pattern);
92
+ }
93
+ catch (error) {
94
+ console.warn('Failed to get keys from backend:', error);
95
+ }
96
+ }
97
+ return [];
98
+ }
99
+ async size() {
100
+ // Get size from first available backend
101
+ for (const backend of this.backends) {
102
+ try {
103
+ return await backend.size();
104
+ }
105
+ catch (error) {
106
+ console.warn('Failed to get size from backend:', error);
107
+ }
108
+ }
109
+ return 0;
110
+ }
111
+ async getStats() {
112
+ // Aggregate stats from all backends
113
+ const allStats = await Promise.allSettled(this.backends.filter(backend => backend !== undefined).map(backend => backend.getStats()));
114
+ const aggregatedStats = { ...this.stats };
115
+ for (const result of allStats) {
116
+ if (result.status === 'fulfilled') {
117
+ const backendStats = result.value;
118
+ aggregatedStats.size += backendStats.size;
119
+ aggregatedStats.memoryUsage += backendStats.memoryUsage;
120
+ aggregatedStats.evictions += backendStats.evictions;
121
+ aggregatedStats.expirations += backendStats.expirations;
122
+ }
123
+ }
124
+ return aggregatedStats;
125
+ }
126
+ updateHitRate() {
127
+ const total = this.stats.hits + this.stats.misses;
128
+ this.stats.hitRate = total > 0 ? this.stats.hits / total : 0;
129
+ }
130
+ // Utility methods for multi-tier management
131
+ getBackendCount() {
132
+ return this.backends.length;
133
+ }
134
+ async getBackendStats(index) {
135
+ if (index >= 0 && index < this.backends.length) {
136
+ const backend = this.backends[index];
137
+ if (!backend)
138
+ return null;
139
+ try {
140
+ return await backend.getStats();
141
+ }
142
+ catch (error) {
143
+ console.warn(`Failed to get stats from backend ${index}:`, error);
144
+ }
145
+ }
146
+ return null;
147
+ }
148
+ }
149
+ exports.MultiTierCacheBackend = MultiTierCacheBackend;
150
+ //# sourceMappingURL=multi-tier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-tier.js","sourceRoot":"","sources":["../../src/backends/multi-tier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { CacheBackend, CacheEntry, CacheStats, RedisCacheOptions } from '../types';
2
+ export declare class RedisCacheBackend implements CacheBackend {
3
+ private redis;
4
+ private keyPrefix;
5
+ private stats;
6
+ constructor(options?: RedisCacheOptions);
7
+ connect(): Promise<void>;
8
+ disconnect(): Promise<void>;
9
+ get<T>(key: string): Promise<CacheEntry<T> | null>;
10
+ set<T>(key: string, entry: CacheEntry<T>, ttl?: number): Promise<void>;
11
+ delete(key: string): Promise<boolean>;
12
+ clear(): Promise<void>;
13
+ keys(pattern?: string): Promise<string[]>;
14
+ size(): Promise<number>;
15
+ getStats(): Promise<CacheStats>;
16
+ private updateHitRate;
17
+ }
18
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/backends/redis.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAWxF,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAQX;gBAEU,OAAO,GAAE,iBAAsB;IAmBrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAyClD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAczC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAUvB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAIrC,OAAO,CAAC,aAAa;CAItB"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.RedisCacheBackend = void 0;
11
+ const constants_1 = require("../constants");
12
+ // Redis is an optional peer dependency
13
+ let Redis;
14
+ try {
15
+ Redis = require('redis');
16
+ }
17
+ catch {
18
+ Redis = null;
19
+ }
20
+ class RedisCacheBackend {
21
+ constructor(options = {}) {
22
+ this.stats = {
23
+ hits: 0,
24
+ misses: 0,
25
+ hitRate: 0,
26
+ size: 0,
27
+ memoryUsage: 0,
28
+ evictions: 0,
29
+ expirations: 0
30
+ };
31
+ if (!Redis) {
32
+ throw new Error('Redis package is required but not installed. Please install redis: npm install redis');
33
+ }
34
+ this.keyPrefix = options.keyPrefix || constants_1.DEFAULT_REDIS_OPTIONS.keyPrefix;
35
+ if (options.connectionString) {
36
+ this.redis = Redis.createClient({ url: options.connectionString });
37
+ }
38
+ else {
39
+ this.redis = Redis.createClient({
40
+ host: options.host || constants_1.DEFAULT_REDIS_OPTIONS.host,
41
+ port: options.port || constants_1.DEFAULT_REDIS_OPTIONS.port,
42
+ password: options.password,
43
+ db: options.db || constants_1.DEFAULT_REDIS_OPTIONS.db
44
+ });
45
+ }
46
+ }
47
+ async connect() {
48
+ if (this.redis && typeof this.redis.connect === 'function') {
49
+ await this.redis.connect();
50
+ }
51
+ }
52
+ async disconnect() {
53
+ if (this.redis && typeof this.redis.disconnect === 'function') {
54
+ await this.redis.disconnect();
55
+ }
56
+ }
57
+ async get(key) {
58
+ try {
59
+ const fullKey = this.keyPrefix + key;
60
+ const data = await this.redis.get(fullKey);
61
+ if (!data) {
62
+ this.stats.misses++;
63
+ this.updateHitRate();
64
+ return null;
65
+ }
66
+ const parsed = JSON.parse(data);
67
+ // Check if session has expired
68
+ if (parsed.expiresAt && new Date(parsed.expiresAt) < new Date()) {
69
+ await this.delete(key);
70
+ this.stats.expirations++;
71
+ this.stats.misses++;
72
+ this.updateHitRate();
73
+ return null;
74
+ }
75
+ // Update access information
76
+ parsed.accessedAt = new Date();
77
+ parsed.accessCount++;
78
+ // Save updated entry
79
+ await this.set(key, parsed);
80
+ this.stats.hits++;
81
+ this.updateHitRate();
82
+ return parsed;
83
+ }
84
+ catch (error) {
85
+ console.error('Failed to get cache entry:', error);
86
+ this.stats.misses++;
87
+ this.updateHitRate();
88
+ return null;
89
+ }
90
+ }
91
+ async set(key, entry, ttl) {
92
+ try {
93
+ const fullKey = this.keyPrefix + key;
94
+ const serialized = JSON.stringify(entry);
95
+ if (ttl && ttl > 0) {
96
+ await this.redis.setex(fullKey, Math.ceil(ttl / 1000), serialized);
97
+ }
98
+ else if (entry.expiresAt) {
99
+ const ttlSeconds = Math.max(1, Math.ceil((entry.expiresAt.getTime() - Date.now()) / 1000));
100
+ await this.redis.setex(fullKey, ttlSeconds, serialized);
101
+ }
102
+ else {
103
+ await this.redis.set(fullKey, serialized);
104
+ }
105
+ }
106
+ catch (error) {
107
+ console.error('Failed to set cache entry:', error);
108
+ throw error;
109
+ }
110
+ }
111
+ async delete(key) {
112
+ try {
113
+ const fullKey = this.keyPrefix + key;
114
+ const result = await this.redis.del(fullKey);
115
+ return result > 0;
116
+ }
117
+ catch (error) {
118
+ console.error('Failed to delete cache entry:', error);
119
+ return false;
120
+ }
121
+ }
122
+ async clear() {
123
+ try {
124
+ const keys = await this.keys();
125
+ if (keys.length > 0) {
126
+ const fullKeys = keys.map(key => this.keyPrefix + key);
127
+ await this.redis.del(...fullKeys);
128
+ }
129
+ }
130
+ catch (error) {
131
+ console.error('Failed to clear cache:', error);
132
+ }
133
+ }
134
+ async keys(pattern) {
135
+ try {
136
+ const searchPattern = pattern
137
+ ? this.keyPrefix + pattern
138
+ : this.keyPrefix + '*';
139
+ const keys = await this.redis.keys(searchPattern);
140
+ return keys.map((key) => key.replace(this.keyPrefix, ''));
141
+ }
142
+ catch (error) {
143
+ console.error('Failed to get cache keys:', error);
144
+ return [];
145
+ }
146
+ }
147
+ async size() {
148
+ try {
149
+ const keys = await this.keys();
150
+ return keys.length;
151
+ }
152
+ catch (error) {
153
+ console.error('Failed to get cache size:', error);
154
+ return 0;
155
+ }
156
+ }
157
+ async getStats() {
158
+ return { ...this.stats };
159
+ }
160
+ updateHitRate() {
161
+ const total = this.stats.hits + this.stats.misses;
162
+ this.stats.hitRate = total > 0 ? this.stats.hits / total : 0;
163
+ }
164
+ }
165
+ exports.RedisCacheBackend = RedisCacheBackend;
166
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/backends/redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare const DEFAULT_CACHE_OPTIONS: {
2
+ maxSize: number;
3
+ strategy: "lru" | "lfu" | "ttl";
4
+ defaultTtl: number;
5
+ compression: boolean;
6
+ keyPrefix: string;
7
+ };
8
+ export declare const DEFAULT_REDIS_OPTIONS: {
9
+ host: string;
10
+ port: number;
11
+ keyPrefix: string;
12
+ db: number;
13
+ };
14
+ export declare const DEFAULT_DATABASE_OPTIONS: {
15
+ tableName: string;
16
+ keyPrefix: string;
17
+ };
18
+ export declare const MEMORY_USAGE_SAMPLE_RATE = 0.1;
19
+ export declare const CLEANUP_INTERVAL_MS: number;
20
+ export declare const MAX_KEY_LENGTH = 250;
21
+ export declare const MAX_VALUE_SIZE: number;
22
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,qBAAqB;;cAEb,KAAK,GAAG,KAAK,GAAG,KAAK;;;;CAIzC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;CAKjC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;CAGpC,CAAC;AAEF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AACjD,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,cAAc,QAAc,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MAX_VALUE_SIZE = exports.MAX_KEY_LENGTH = exports.CLEANUP_INTERVAL_MS = exports.MEMORY_USAGE_SAMPLE_RATE = exports.DEFAULT_DATABASE_OPTIONS = exports.DEFAULT_REDIS_OPTIONS = exports.DEFAULT_CACHE_OPTIONS = void 0;
11
+ exports.DEFAULT_CACHE_OPTIONS = {
12
+ maxSize: 1000,
13
+ strategy: 'lru',
14
+ defaultTtl: 60 * 60 * 1000, // 1 hour
15
+ compression: false,
16
+ keyPrefix: '',
17
+ };
18
+ exports.DEFAULT_REDIS_OPTIONS = {
19
+ host: 'localhost',
20
+ port: 6379,
21
+ keyPrefix: 'cache:',
22
+ db: 0,
23
+ };
24
+ exports.DEFAULT_DATABASE_OPTIONS = {
25
+ tableName: 'cache_entries',
26
+ keyPrefix: '',
27
+ };
28
+ exports.MEMORY_USAGE_SAMPLE_RATE = 0.1; // Sample 10% of keys for memory estimation
29
+ exports.CLEANUP_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
30
+ exports.MAX_KEY_LENGTH = 250;
31
+ exports.MAX_VALUE_SIZE = 1024 * 1024; // 1MB
32
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;AAEW,QAAA,qBAAqB,GAAG;IACnC,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAA8B;IACxC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;IACrC,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,EAAE;CACd,CAAC;AAEW,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,QAAQ;IACnB,EAAE,EAAE,CAAC;CACN,CAAC;AAEW,QAAA,wBAAwB,GAAG;IACtC,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,EAAE;CACd,CAAC;AAEW,QAAA,wBAAwB,GAAG,GAAG,CAAC,CAAC,2CAA2C;AAC3E,QAAA,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AACjD,QAAA,cAAc,GAAG,GAAG,CAAC;AACrB,QAAA,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM"}
@@ -0,0 +1,7 @@
1
+ export { CacheManager } from './manager';
2
+ export type { CacheOptions, CacheEntry, CacheStats, CacheBackend, CacheStrategy, Serializer, MemoryCacheOptions, RedisCacheOptions, DatabaseCacheOptions, MultiTierCacheOptions } from './types';
3
+ export { MemoryCacheBackend, RedisCacheBackend, MultiTierCacheBackend } from './backends';
4
+ export { LRUStrategy, LFUStrategy, TTLStrategy, createStrategy } from './strategies';
5
+ export { JSONSerializer, BinarySerializer } from './serializers';
6
+ export { DEFAULT_CACHE_OPTIONS, DEFAULT_REDIS_OPTIONS, DEFAULT_DATABASE_OPTIONS } from './constants';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DEFAULT_DATABASE_OPTIONS = exports.DEFAULT_REDIS_OPTIONS = exports.DEFAULT_CACHE_OPTIONS = exports.BinarySerializer = exports.JSONSerializer = exports.createStrategy = exports.TTLStrategy = exports.LFUStrategy = exports.LRUStrategy = exports.MultiTierCacheBackend = exports.RedisCacheBackend = exports.MemoryCacheBackend = exports.CacheManager = void 0;
11
+ // Core exports
12
+ var manager_1 = require("./manager");
13
+ Object.defineProperty(exports, "CacheManager", { enumerable: true, get: function () { return manager_1.CacheManager; } });
14
+ // Backends
15
+ var backends_1 = require("./backends");
16
+ Object.defineProperty(exports, "MemoryCacheBackend", { enumerable: true, get: function () { return backends_1.MemoryCacheBackend; } });
17
+ Object.defineProperty(exports, "RedisCacheBackend", { enumerable: true, get: function () { return backends_1.RedisCacheBackend; } });
18
+ Object.defineProperty(exports, "MultiTierCacheBackend", { enumerable: true, get: function () { return backends_1.MultiTierCacheBackend; } });
19
+ // Strategies
20
+ var strategies_1 = require("./strategies");
21
+ Object.defineProperty(exports, "LRUStrategy", { enumerable: true, get: function () { return strategies_1.LRUStrategy; } });
22
+ Object.defineProperty(exports, "LFUStrategy", { enumerable: true, get: function () { return strategies_1.LFUStrategy; } });
23
+ Object.defineProperty(exports, "TTLStrategy", { enumerable: true, get: function () { return strategies_1.TTLStrategy; } });
24
+ Object.defineProperty(exports, "createStrategy", { enumerable: true, get: function () { return strategies_1.createStrategy; } });
25
+ // Serializers
26
+ var serializers_1 = require("./serializers");
27
+ Object.defineProperty(exports, "JSONSerializer", { enumerable: true, get: function () { return serializers_1.JSONSerializer; } });
28
+ Object.defineProperty(exports, "BinarySerializer", { enumerable: true, get: function () { return serializers_1.BinarySerializer; } });
29
+ // Constants
30
+ var constants_1 = require("./constants");
31
+ Object.defineProperty(exports, "DEFAULT_CACHE_OPTIONS", { enumerable: true, get: function () { return constants_1.DEFAULT_CACHE_OPTIONS; } });
32
+ Object.defineProperty(exports, "DEFAULT_REDIS_OPTIONS", { enumerable: true, get: function () { return constants_1.DEFAULT_REDIS_OPTIONS; } });
33
+ Object.defineProperty(exports, "DEFAULT_DATABASE_OPTIONS", { enumerable: true, get: function () { return constants_1.DEFAULT_DATABASE_OPTIONS; } });
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;AAEF,eAAe;AACf,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AAgBrB,WAAW;AACX,uCAIoB;AAHlB,8GAAA,kBAAkB,OAAA;AAClB,6GAAA,iBAAiB,OAAA;AACjB,iHAAA,qBAAqB,OAAA;AAGvB,aAAa;AACb,2CAKsB;AAJpB,yGAAA,WAAW,OAAA;AACX,yGAAA,WAAW,OAAA;AACX,yGAAA,WAAW,OAAA;AACX,4GAAA,cAAc,OAAA;AAGhB,cAAc;AACd,6CAGuB;AAFrB,6GAAA,cAAc,OAAA;AACd,+GAAA,gBAAgB,OAAA;AAGlB,YAAY;AACZ,yCAIqB;AAHnB,kHAAA,qBAAqB,OAAA;AACrB,kHAAA,qBAAqB,OAAA;AACrB,qHAAA,wBAAwB,OAAA"}
@@ -0,0 +1,26 @@
1
+ import type { CacheOptions, CacheBackend, CacheStats } from './types';
2
+ export declare class CacheManager {
3
+ private backend;
4
+ private options;
5
+ constructor(options?: CacheOptions);
6
+ get<T>(key: string): Promise<T | null>;
7
+ set<T>(key: string, value: T, ttl?: number, tags?: string[]): Promise<void>;
8
+ delete(key: string): Promise<boolean>;
9
+ clear(): Promise<void>;
10
+ mget<T>(keys: string[]): Promise<(T | null)[]>;
11
+ mset<T>(entries: Record<string, T>, ttl?: number): Promise<void>;
12
+ getOrSet<T>(key: string, factory: () => Promise<T>, ttl?: number): Promise<T>;
13
+ invalidateByTag(tag: string): Promise<void>;
14
+ invalidateByPattern(pattern: string): Promise<void>;
15
+ touch(key: string): Promise<boolean>;
16
+ getStats(): Promise<CacheStats>;
17
+ getBackend(): CacheBackend | CacheBackend[];
18
+ has(key: string): Promise<boolean>;
19
+ keys(pattern?: string): Promise<string[]>;
20
+ size(): Promise<number>;
21
+ cleanup(): Promise<number>;
22
+ private cleanupInterval?;
23
+ startCleanupInterval(intervalMs?: number): void;
24
+ stopCleanupInterval(): void;
25
+ }
26
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAc,UAAU,EAAsB,MAAM,SAAS,CAAC;AAKtG,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,GAAE,YAAiB;IA6BhC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAMtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAK9C,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAY7E,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAepC,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAIrC,UAAU,IAAI,YAAY,GAAG,YAAY,EAAE;IAIrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAazC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAqBhC,OAAO,CAAC,eAAe,CAAC,CAA6B;IAErD,oBAAoB,CAAC,UAAU,GAAE,MAAsB,GAAG,IAAI;IAU9D,mBAAmB,IAAI,IAAI;CAM5B"}