@warlock.js/cache 4.0.48 → 4.0.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/cache-manager.d.ts +159 -0
- package/cjs/cache-manager.d.ts.map +1 -0
- package/cjs/cache-manager.js +312 -0
- package/cjs/cache-manager.js.map +1 -0
- package/cjs/drivers/base-cache-driver.d.ts +144 -0
- package/cjs/drivers/base-cache-driver.d.ts.map +1 -0
- package/cjs/drivers/base-cache-driver.js +308 -0
- package/cjs/drivers/base-cache-driver.js.map +1 -0
- package/cjs/drivers/file-cache-driver.d.ts +45 -0
- package/cjs/drivers/file-cache-driver.d.ts.map +1 -0
- package/cjs/drivers/file-cache-driver.js +133 -0
- package/cjs/drivers/file-cache-driver.js.map +1 -0
- package/cjs/drivers/index.d.ts +8 -0
- package/cjs/drivers/index.d.ts.map +1 -0
- package/cjs/drivers/lru-memory-cache-driver.d.ts +98 -0
- package/cjs/drivers/lru-memory-cache-driver.d.ts.map +1 -0
- package/cjs/drivers/lru-memory-cache-driver.js +252 -0
- package/cjs/drivers/lru-memory-cache-driver.js.map +1 -0
- package/cjs/drivers/memory-cache-driver.d.ts +82 -0
- package/cjs/drivers/memory-cache-driver.d.ts.map +1 -0
- package/cjs/drivers/memory-cache-driver.js +218 -0
- package/cjs/drivers/memory-cache-driver.js.map +1 -0
- package/cjs/drivers/memory-extended-cache-driver.d.ts +13 -0
- package/cjs/drivers/memory-extended-cache-driver.d.ts.map +1 -0
- package/cjs/drivers/memory-extended-cache-driver.js +25 -0
- package/cjs/drivers/memory-extended-cache-driver.js.map +1 -0
- package/cjs/drivers/null-cache-driver.d.ts +58 -0
- package/cjs/drivers/null-cache-driver.d.ts.map +1 -0
- package/cjs/drivers/null-cache-driver.js +84 -0
- package/cjs/drivers/null-cache-driver.js.map +1 -0
- package/cjs/drivers/redis-cache-driver.d.ts +57 -0
- package/cjs/drivers/redis-cache-driver.d.ts.map +1 -0
- package/cjs/drivers/redis-cache-driver.js +222 -0
- package/cjs/drivers/redis-cache-driver.js.map +1 -0
- package/cjs/index.d.ts +6 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +1 -42
- package/cjs/index.js.map +1 -1
- package/cjs/tagged-cache.d.ts +77 -0
- package/cjs/tagged-cache.d.ts.map +1 -0
- package/cjs/tagged-cache.js +160 -0
- package/cjs/tagged-cache.js.map +1 -0
- package/cjs/types.d.ts +381 -0
- package/cjs/types.d.ts.map +1 -0
- package/cjs/types.js +36 -0
- package/cjs/types.js.map +1 -0
- package/cjs/utils.d.ts +50 -0
- package/cjs/utils.d.ts.map +1 -0
- package/cjs/utils.js +55 -0
- package/cjs/utils.js.map +1 -0
- package/esm/cache-manager.d.ts +159 -0
- package/esm/cache-manager.d.ts.map +1 -0
- package/esm/cache-manager.js +312 -0
- package/esm/cache-manager.js.map +1 -0
- package/esm/drivers/base-cache-driver.d.ts +144 -0
- package/esm/drivers/base-cache-driver.d.ts.map +1 -0
- package/esm/drivers/base-cache-driver.js +308 -0
- package/esm/drivers/base-cache-driver.js.map +1 -0
- package/esm/drivers/file-cache-driver.d.ts +45 -0
- package/esm/drivers/file-cache-driver.d.ts.map +1 -0
- package/esm/drivers/file-cache-driver.js +133 -0
- package/esm/drivers/file-cache-driver.js.map +1 -0
- package/esm/drivers/index.d.ts +8 -0
- package/esm/drivers/index.d.ts.map +1 -0
- package/esm/drivers/lru-memory-cache-driver.d.ts +98 -0
- package/esm/drivers/lru-memory-cache-driver.d.ts.map +1 -0
- package/esm/drivers/lru-memory-cache-driver.js +252 -0
- package/esm/drivers/lru-memory-cache-driver.js.map +1 -0
- package/esm/drivers/memory-cache-driver.d.ts +82 -0
- package/esm/drivers/memory-cache-driver.d.ts.map +1 -0
- package/esm/drivers/memory-cache-driver.js +218 -0
- package/esm/drivers/memory-cache-driver.js.map +1 -0
- package/esm/drivers/memory-extended-cache-driver.d.ts +13 -0
- package/esm/drivers/memory-extended-cache-driver.d.ts.map +1 -0
- package/esm/drivers/memory-extended-cache-driver.js +25 -0
- package/esm/drivers/memory-extended-cache-driver.js.map +1 -0
- package/esm/drivers/null-cache-driver.d.ts +58 -0
- package/esm/drivers/null-cache-driver.d.ts.map +1 -0
- package/esm/drivers/null-cache-driver.js +84 -0
- package/esm/drivers/null-cache-driver.js.map +1 -0
- package/esm/drivers/redis-cache-driver.d.ts +57 -0
- package/esm/drivers/redis-cache-driver.d.ts.map +1 -0
- package/esm/drivers/redis-cache-driver.js +222 -0
- package/esm/drivers/redis-cache-driver.js.map +1 -0
- package/esm/index.d.ts +6 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +1 -7
- package/esm/index.js.map +1 -1
- package/esm/tagged-cache.d.ts +77 -0
- package/esm/tagged-cache.d.ts.map +1 -0
- package/esm/tagged-cache.js +160 -0
- package/esm/tagged-cache.js.map +1 -0
- package/esm/types.d.ts +381 -0
- package/esm/types.d.ts.map +1 -0
- package/esm/types.js +36 -0
- package/esm/types.js.map +1 -0
- package/esm/utils.d.ts +50 -0
- package/esm/utils.d.ts.map +1 -0
- package/esm/utils.js +55 -0
- package/esm/utils.js.map +1 -0
- package/package.json +38 -51
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-cache-driver.d.ts","sourceRoot":"","sources":["../../src/drivers/base-cache-driver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAuBlB,8BAAsB,eAAe,CACnC,UAAU,EACV,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACnC,YAAW,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC;IAC3C;;OAEG;IACH,SAAS,CAAC,YAAY,EAAG,UAAU,CAAC;IAEpC;;OAEG;IACH,IAAW,MAAM,IAOS,UAAU,CALnC;IAED;;OAEG;IACH,IAAW,MAAM,CAAC,MAAM,EAAE,UAAU,EAEnC;IAED;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACI,OAAO,EAAG,OAAO,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAa;IAElF;;OAEG;IACI,QAAQ,CAAC,GAAG,EAAE,QAAQ;IAI7B;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO;IAKlC;;OAEG;IACI,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAQlE;;OAEG;IACI,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAQnE;;OAEG;IACI,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAQpE;;OAEG;cACa,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B9F;;OAEG;aACa,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhE;;OAEG;aACa,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAE1E;;OAEG;aACa,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhD;;OAEG;aACa,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpD;;OAEG;aACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAEtC;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjD;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAa;IAEvD;;OAEG;IACU,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IA+B7F;;OAEG;IACU,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IASrD;;OAEG;IACU,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAK7D;;OAEG;IACU,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAYzE;;OAEG;IACU,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAInD;;OAEG;IACU,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7E;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,CAAC,EAAE,MAAM;IA0BzD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAO/C;;OAEG;IACH,IAAW,GAAG,QAEb;IAED;;OAEG;IACI,YAAY,CAAC,GAAG,GAAE,MAAiB;IAM1C;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM;IAavD;;OAEG;cACa,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAkC5D;;OAEG;IACU,OAAO;IAMpB;;OAEG;IACU,UAAU;IAKvB;;OAEG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG;CAGjC"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import {log}from'@warlock.js/logger';import {TaggedCache}from'../tagged-cache.js';import {parseCacheKey}from'../utils.js';const messages = {
|
|
2
|
+
clearing: "Clearing namespace",
|
|
3
|
+
cleared: "Namespace cleared",
|
|
4
|
+
fetching: "Fetching key",
|
|
5
|
+
fetched: "Key fetched",
|
|
6
|
+
caching: "Caching key",
|
|
7
|
+
cached: "Key cached",
|
|
8
|
+
flushing: "Flushing cache",
|
|
9
|
+
flushed: "Cache flushed",
|
|
10
|
+
removing: "Removing key",
|
|
11
|
+
removed: "Key removed",
|
|
12
|
+
expired: "Key expired",
|
|
13
|
+
notFound: "Key not found",
|
|
14
|
+
connecting: "Connecting to the cache engine.",
|
|
15
|
+
connected: "Connected to the cache engine.",
|
|
16
|
+
disconnecting: "Disconnecting from the cache engine.",
|
|
17
|
+
disconnected: "Disconnected from the cache engine.",
|
|
18
|
+
error: "Error occurred",
|
|
19
|
+
};
|
|
20
|
+
class BaseCacheDriver {
|
|
21
|
+
/**
|
|
22
|
+
* CLient driver
|
|
23
|
+
*/
|
|
24
|
+
clientDriver;
|
|
25
|
+
/**
|
|
26
|
+
* {@inheritdoc}
|
|
27
|
+
*/
|
|
28
|
+
get client() {
|
|
29
|
+
return (this.clientDriver || this);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Set client driver
|
|
33
|
+
*/
|
|
34
|
+
set client(client) {
|
|
35
|
+
this.clientDriver = client;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Options list
|
|
39
|
+
*/
|
|
40
|
+
options;
|
|
41
|
+
/**
|
|
42
|
+
* Event listeners storage
|
|
43
|
+
*/
|
|
44
|
+
eventListeners = new Map();
|
|
45
|
+
/**
|
|
46
|
+
* {@inheritdoc}
|
|
47
|
+
*/
|
|
48
|
+
parseKey(key) {
|
|
49
|
+
return parseCacheKey(key, this.options);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* {@inheritdoc}
|
|
53
|
+
*/
|
|
54
|
+
setOptions(options) {
|
|
55
|
+
this.options = options || {};
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Register an event listener
|
|
60
|
+
*/
|
|
61
|
+
on(event, handler) {
|
|
62
|
+
if (!this.eventListeners.has(event)) {
|
|
63
|
+
this.eventListeners.set(event, new Set());
|
|
64
|
+
}
|
|
65
|
+
this.eventListeners.get(event).add(handler);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Remove an event listener
|
|
70
|
+
*/
|
|
71
|
+
off(event, handler) {
|
|
72
|
+
const handlers = this.eventListeners.get(event);
|
|
73
|
+
if (handlers) {
|
|
74
|
+
handlers.delete(handler);
|
|
75
|
+
}
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Register a one-time event listener
|
|
80
|
+
*/
|
|
81
|
+
once(event, handler) {
|
|
82
|
+
const onceHandler = async (data) => {
|
|
83
|
+
await handler(data);
|
|
84
|
+
this.off(event, onceHandler);
|
|
85
|
+
};
|
|
86
|
+
return this.on(event, onceHandler);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Emit an event to all registered listeners
|
|
90
|
+
*/
|
|
91
|
+
async emit(event, data = {}) {
|
|
92
|
+
const handlers = this.eventListeners.get(event);
|
|
93
|
+
if (!handlers || handlers.size === 0)
|
|
94
|
+
return;
|
|
95
|
+
const eventData = {
|
|
96
|
+
driver: this.name,
|
|
97
|
+
...data,
|
|
98
|
+
};
|
|
99
|
+
// Execute all handlers
|
|
100
|
+
const promises = [];
|
|
101
|
+
for (const handler of handlers) {
|
|
102
|
+
try {
|
|
103
|
+
const result = handler(eventData);
|
|
104
|
+
if (result instanceof Promise) {
|
|
105
|
+
promises.push(result);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
this.logError(`Error in event handler for '${event}'`, error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Wait for all async handlers
|
|
113
|
+
if (promises.length > 0) {
|
|
114
|
+
await Promise.allSettled(promises);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* {@inheritdoc}
|
|
119
|
+
*/
|
|
120
|
+
async has(key) {
|
|
121
|
+
const value = await this.get(key);
|
|
122
|
+
// Event is emitted by get() method
|
|
123
|
+
return value !== null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Lock storage for preventing cache stampede
|
|
127
|
+
*/
|
|
128
|
+
locks = new Map();
|
|
129
|
+
/**
|
|
130
|
+
* {@inheritdoc}
|
|
131
|
+
*/
|
|
132
|
+
async remember(key, ttl, callback) {
|
|
133
|
+
const parsedKey = this.parseKey(key);
|
|
134
|
+
// Check cache first
|
|
135
|
+
const cachedValue = await this.get(key);
|
|
136
|
+
if (cachedValue !== null) {
|
|
137
|
+
return cachedValue;
|
|
138
|
+
}
|
|
139
|
+
// Check if another request is already computing this value
|
|
140
|
+
const existingLock = this.locks.get(parsedKey);
|
|
141
|
+
if (existingLock) {
|
|
142
|
+
return existingLock;
|
|
143
|
+
}
|
|
144
|
+
// Create lock and compute value
|
|
145
|
+
const promise = callback()
|
|
146
|
+
.then(async (result) => {
|
|
147
|
+
await this.set(key, result, ttl);
|
|
148
|
+
this.locks.delete(parsedKey);
|
|
149
|
+
return result;
|
|
150
|
+
})
|
|
151
|
+
.catch((err) => {
|
|
152
|
+
this.locks.delete(parsedKey);
|
|
153
|
+
throw err;
|
|
154
|
+
});
|
|
155
|
+
this.locks.set(parsedKey, promise);
|
|
156
|
+
return promise;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* {@inheritdoc}
|
|
160
|
+
*/
|
|
161
|
+
async pull(key) {
|
|
162
|
+
const value = await this.get(key);
|
|
163
|
+
if (value !== null) {
|
|
164
|
+
await this.remove(key);
|
|
165
|
+
}
|
|
166
|
+
// Events are emitted by get() and remove() methods
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* {@inheritdoc}
|
|
171
|
+
*/
|
|
172
|
+
async forever(key, value) {
|
|
173
|
+
// Event is emitted by set() method
|
|
174
|
+
return this.set(key, value, Infinity);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* {@inheritdoc}
|
|
178
|
+
*/
|
|
179
|
+
async increment(key, value = 1) {
|
|
180
|
+
const current = (await this.get(key)) || 0;
|
|
181
|
+
if (typeof current !== "number") {
|
|
182
|
+
throw new Error(`Cannot increment non-numeric value for key: ${this.parseKey(key)}`);
|
|
183
|
+
}
|
|
184
|
+
const newValue = current + value;
|
|
185
|
+
await this.set(key, newValue);
|
|
186
|
+
return newValue;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* {@inheritdoc}
|
|
190
|
+
*/
|
|
191
|
+
async decrement(key, value = 1) {
|
|
192
|
+
return this.increment(key, -value);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* {@inheritdoc}
|
|
196
|
+
*/
|
|
197
|
+
async many(keys) {
|
|
198
|
+
return Promise.all(keys.map((key) => this.get(key)));
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* {@inheritdoc}
|
|
202
|
+
*/
|
|
203
|
+
async setMany(items, ttl) {
|
|
204
|
+
await Promise.all(Object.entries(items).map(([key, value]) => this.set(key, value, ttl)));
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Log the operation
|
|
208
|
+
*/
|
|
209
|
+
log(operation, key) {
|
|
210
|
+
if (key) {
|
|
211
|
+
// this will be likely used with file cache driver as it will convert the dot to slash
|
|
212
|
+
// to make it consistent and not to confuse developers we will output the key by making sure it's a dot
|
|
213
|
+
key = key.replaceAll("/", ".");
|
|
214
|
+
}
|
|
215
|
+
if (operation == "notFound" || operation == "expired") {
|
|
216
|
+
return log.warn("cache:" + this.name, operation, (key ? key + " " : "") + messages[operation]);
|
|
217
|
+
}
|
|
218
|
+
if (operation.endsWith("ed")) {
|
|
219
|
+
return log.success("cache:" + this.name, operation, (key ? key + " " : "") + messages[operation]);
|
|
220
|
+
}
|
|
221
|
+
log.info("cache:" + this.name, operation, (key ? key + " " : "") + messages[operation]);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Log error message
|
|
225
|
+
*/
|
|
226
|
+
logError(message, error) {
|
|
227
|
+
log.error("cache:" + this.name, "error", message);
|
|
228
|
+
if (error) {
|
|
229
|
+
console.log(error);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get time to live value
|
|
234
|
+
*/
|
|
235
|
+
get ttl() {
|
|
236
|
+
return this.options.ttl !== undefined ? this.options.ttl : Infinity;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get time to live value in milliseconds
|
|
240
|
+
*/
|
|
241
|
+
getExpiresAt(ttl = this.ttl) {
|
|
242
|
+
if (ttl) {
|
|
243
|
+
return new Date().getTime() + ttl * 1000;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Prepare data for storage
|
|
248
|
+
*/
|
|
249
|
+
prepareDataForStorage(data, ttl) {
|
|
250
|
+
const preparedData = {
|
|
251
|
+
data,
|
|
252
|
+
};
|
|
253
|
+
if (ttl) {
|
|
254
|
+
preparedData.ttl = ttl;
|
|
255
|
+
preparedData.expiresAt = this.getExpiresAt(ttl);
|
|
256
|
+
}
|
|
257
|
+
return preparedData;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Parse fetched data from cache
|
|
261
|
+
*/
|
|
262
|
+
async parseCachedData(key, data) {
|
|
263
|
+
this.log("fetched", key);
|
|
264
|
+
if (data.expiresAt && data.expiresAt < Date.now()) {
|
|
265
|
+
this.remove(key);
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
const value = data.data;
|
|
269
|
+
// Skip cloning for primitives (immutable types)
|
|
270
|
+
if (value === null || value === undefined) {
|
|
271
|
+
return value;
|
|
272
|
+
}
|
|
273
|
+
const type = typeof value;
|
|
274
|
+
if (type === "string" || type === "number" || type === "boolean") {
|
|
275
|
+
return value;
|
|
276
|
+
}
|
|
277
|
+
// Deep clone objects/arrays to prevent cache mutation
|
|
278
|
+
try {
|
|
279
|
+
return structuredClone(value);
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
console.log(value);
|
|
283
|
+
this.logError(`Failed to clone cached value for ${key}, typeof value: ${typeof value}`, error);
|
|
284
|
+
throw error;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* {@inheritdoc}
|
|
289
|
+
*/
|
|
290
|
+
async connect() {
|
|
291
|
+
this.log("connecting");
|
|
292
|
+
this.log("connected");
|
|
293
|
+
await this.emit("connected");
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* {@inheritdoc}
|
|
297
|
+
*/
|
|
298
|
+
async disconnect() {
|
|
299
|
+
this.log("disconnected");
|
|
300
|
+
await this.emit("disconnected");
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Create a tagged cache instance for the given tags
|
|
304
|
+
*/
|
|
305
|
+
tags(tags) {
|
|
306
|
+
return new TaggedCache(tags, this);
|
|
307
|
+
}
|
|
308
|
+
}export{BaseCacheDriver};//# sourceMappingURL=base-cache-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-cache-driver.js","sources":["../../src/drivers/base-cache-driver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CacheDriver, CacheKey, FileCacheOptions } from "../types";
|
|
2
|
+
import { BaseCacheDriver } from "./base-cache-driver";
|
|
3
|
+
export declare class FileCacheDriver extends BaseCacheDriver<FileCacheDriver, FileCacheOptions> implements CacheDriver<FileCacheDriver, FileCacheOptions> {
|
|
4
|
+
/**
|
|
5
|
+
* {@inheritdoc}
|
|
6
|
+
*/
|
|
7
|
+
name: string;
|
|
8
|
+
/**
|
|
9
|
+
* {@inheritdoc}
|
|
10
|
+
*/
|
|
11
|
+
setOptions(options: FileCacheOptions): this;
|
|
12
|
+
/**
|
|
13
|
+
* Get the cache directory
|
|
14
|
+
*/
|
|
15
|
+
get directory(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get file name
|
|
18
|
+
*/
|
|
19
|
+
get fileName(): string;
|
|
20
|
+
/**
|
|
21
|
+
* {@inheritdoc}
|
|
22
|
+
*/
|
|
23
|
+
removeNamespace(namespace: string): Promise<this>;
|
|
24
|
+
/**
|
|
25
|
+
* {@inheritdoc}
|
|
26
|
+
*/
|
|
27
|
+
set(key: CacheKey, value: any, ttl?: number): Promise<this>;
|
|
28
|
+
/**
|
|
29
|
+
* {@inheritdoc}
|
|
30
|
+
*/
|
|
31
|
+
get(key: CacheKey): Promise<any>;
|
|
32
|
+
/**
|
|
33
|
+
* {@inheritdoc}
|
|
34
|
+
*/
|
|
35
|
+
remove(key: CacheKey): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* {@inheritdoc}
|
|
38
|
+
*/
|
|
39
|
+
flush(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* {@inheritdoc}
|
|
42
|
+
*/
|
|
43
|
+
connect(): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=file-cache-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-cache-driver.d.ts","sourceRoot":"","sources":["../../src/drivers/file-cache-driver.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,eACX,SAAQ,eAAe,CAAC,eAAe,EAAE,gBAAgB,CACzD,YAAW,WAAW,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAEzD;;OAEG;IACI,IAAI,SAAU;IAErB;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,gBAAgB;IAU3C;;OAEG;IACH,IAAW,SAAS,WAUnB;IAED;;OAEG;IACH,IAAW,QAAQ,WAQlB;IAED;;OAEG;IACU,eAAe,CAAC,SAAS,EAAE,MAAM;IAc9C;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM;IAqBxD;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,QAAQ;IAgC9B;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,QAAQ;IAiBjC;;OAEG;IACU,KAAK;IAelB;;OAEG;IACU,OAAO;CAMrB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import {removeDirectoryAsync,ensureDirectoryAsync,putJsonFileAsync,getJsonFileAsync}from'@mongez/fs';import path from'path';import {CacheConfigurationError}from'../types.js';import {BaseCacheDriver}from'./base-cache-driver.js';class FileCacheDriver extends BaseCacheDriver {
|
|
2
|
+
/**
|
|
3
|
+
* {@inheritdoc}
|
|
4
|
+
*/
|
|
5
|
+
name = "file";
|
|
6
|
+
/**
|
|
7
|
+
* {@inheritdoc}
|
|
8
|
+
*/
|
|
9
|
+
setOptions(options) {
|
|
10
|
+
if (!options.directory) {
|
|
11
|
+
throw new CacheConfigurationError("File driver requires 'directory' option to be configured.");
|
|
12
|
+
}
|
|
13
|
+
return super.setOptions(options);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get the cache directory
|
|
17
|
+
*/
|
|
18
|
+
get directory() {
|
|
19
|
+
const directory = this.options.directory;
|
|
20
|
+
if (typeof directory === "function") {
|
|
21
|
+
return directory();
|
|
22
|
+
}
|
|
23
|
+
throw new CacheConfigurationError("Cache directory is not defined, please define it in the file driver options");
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get file name
|
|
27
|
+
*/
|
|
28
|
+
get fileName() {
|
|
29
|
+
const fileName = this.options.fileName;
|
|
30
|
+
if (typeof fileName === "function") {
|
|
31
|
+
return fileName();
|
|
32
|
+
}
|
|
33
|
+
return "cache.json";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* {@inheritdoc}
|
|
37
|
+
*/
|
|
38
|
+
async removeNamespace(namespace) {
|
|
39
|
+
this.log("clearing", namespace);
|
|
40
|
+
try {
|
|
41
|
+
await removeDirectoryAsync(path.resolve(this.directory, namespace));
|
|
42
|
+
this.log("cleared", namespace);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
//
|
|
46
|
+
}
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* {@inheritdoc}
|
|
51
|
+
*/
|
|
52
|
+
async set(key, value, ttl) {
|
|
53
|
+
key = this.parseKey(key);
|
|
54
|
+
this.log("caching", key);
|
|
55
|
+
const data = this.prepareDataForStorage(value, ttl);
|
|
56
|
+
const fileDirectory = path.resolve(this.directory, key);
|
|
57
|
+
await ensureDirectoryAsync(fileDirectory);
|
|
58
|
+
await putJsonFileAsync(path.resolve(fileDirectory, this.fileName), data);
|
|
59
|
+
this.log("cached", key);
|
|
60
|
+
// Emit set event
|
|
61
|
+
await this.emit("set", { key, value, ttl });
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* {@inheritdoc}
|
|
66
|
+
*/
|
|
67
|
+
async get(key) {
|
|
68
|
+
const parsedKey = this.parseKey(key);
|
|
69
|
+
this.log("fetching", parsedKey);
|
|
70
|
+
const fileDirectory = path.resolve(this.directory, parsedKey);
|
|
71
|
+
try {
|
|
72
|
+
const value = await getJsonFileAsync(path.resolve(fileDirectory, this.fileName));
|
|
73
|
+
const result = await this.parseCachedData(parsedKey, value);
|
|
74
|
+
if (result === null) {
|
|
75
|
+
// Expired
|
|
76
|
+
await this.emit("miss", { key: parsedKey });
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Emit hit event
|
|
80
|
+
await this.emit("hit", { key: parsedKey, value: result });
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
this.log("notFound", parsedKey);
|
|
86
|
+
// Emit miss event
|
|
87
|
+
await this.emit("miss", { key: parsedKey });
|
|
88
|
+
this.remove(key);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* {@inheritdoc}
|
|
94
|
+
*/
|
|
95
|
+
async remove(key) {
|
|
96
|
+
const parsedKey = this.parseKey(key);
|
|
97
|
+
this.log("removing", parsedKey);
|
|
98
|
+
const fileDirectory = path.resolve(this.directory, parsedKey);
|
|
99
|
+
try {
|
|
100
|
+
await removeDirectoryAsync(fileDirectory);
|
|
101
|
+
this.log("removed", parsedKey);
|
|
102
|
+
// Emit removed event
|
|
103
|
+
await this.emit("removed", { key: parsedKey });
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
//
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* {@inheritdoc}
|
|
111
|
+
*/
|
|
112
|
+
async flush() {
|
|
113
|
+
this.log("flushing");
|
|
114
|
+
if (this.options.globalPrefix) {
|
|
115
|
+
await this.removeNamespace("");
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
await removeDirectoryAsync(this.directory);
|
|
119
|
+
}
|
|
120
|
+
this.log("flushed");
|
|
121
|
+
// Emit flushed event
|
|
122
|
+
await this.emit("flushed");
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* {@inheritdoc}
|
|
126
|
+
*/
|
|
127
|
+
async connect() {
|
|
128
|
+
this.log("connecting");
|
|
129
|
+
await ensureDirectoryAsync(this.directory);
|
|
130
|
+
this.log("connected");
|
|
131
|
+
await this.emit("connected");
|
|
132
|
+
}
|
|
133
|
+
}export{FileCacheDriver};//# sourceMappingURL=file-cache-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-cache-driver.js","sources":["../../src/drivers/file-cache-driver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./base-cache-driver";
|
|
2
|
+
export * from "./file-cache-driver";
|
|
3
|
+
export * from "./lru-memory-cache-driver";
|
|
4
|
+
export * from "./memory-cache-driver";
|
|
5
|
+
export * from "./memory-extended-cache-driver";
|
|
6
|
+
export * from "./null-cache-driver";
|
|
7
|
+
export * from "./redis-cache-driver";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { CacheDriver, CacheKey, LRUMemoryCacheOptions } from "../types";
|
|
3
|
+
import { BaseCacheDriver } from "./base-cache-driver";
|
|
4
|
+
declare class CacheNode {
|
|
5
|
+
key: string;
|
|
6
|
+
value: any;
|
|
7
|
+
next: CacheNode | null;
|
|
8
|
+
prev: CacheNode | null;
|
|
9
|
+
expiresAt?: number;
|
|
10
|
+
constructor(key: string, value: any, ttl?: number);
|
|
11
|
+
get isExpired(): boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* LRU Memory Cache Driver
|
|
15
|
+
* The concept of LRU is to remove the least recently used data
|
|
16
|
+
* whenever the cache is full
|
|
17
|
+
* The question that resides here is how to tell the cache is full?
|
|
18
|
+
*/
|
|
19
|
+
export declare class LRUMemoryCacheDriver extends BaseCacheDriver<LRUMemoryCacheDriver, LRUMemoryCacheOptions> implements CacheDriver<LRUMemoryCacheDriver, LRUMemoryCacheOptions> {
|
|
20
|
+
/**
|
|
21
|
+
* {@inheritdoc}
|
|
22
|
+
*/
|
|
23
|
+
name: string;
|
|
24
|
+
/**
|
|
25
|
+
* Cache map
|
|
26
|
+
*/
|
|
27
|
+
protected cache: Map<string, CacheNode>;
|
|
28
|
+
/**
|
|
29
|
+
* Head of the cache
|
|
30
|
+
*/
|
|
31
|
+
protected head: CacheNode;
|
|
32
|
+
/**
|
|
33
|
+
* Tail of the cache
|
|
34
|
+
*/
|
|
35
|
+
protected tail: CacheNode;
|
|
36
|
+
/**
|
|
37
|
+
* Cleanup interval reference
|
|
38
|
+
*/
|
|
39
|
+
protected cleanupInterval?: NodeJS.Timeout;
|
|
40
|
+
/**
|
|
41
|
+
* {@inheritdoc}
|
|
42
|
+
*/
|
|
43
|
+
constructor();
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the cache
|
|
46
|
+
*/
|
|
47
|
+
init(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Start the cleanup process for expired items
|
|
50
|
+
*/
|
|
51
|
+
startCleanup(): void;
|
|
52
|
+
/**
|
|
53
|
+
* {@inheritdoc}
|
|
54
|
+
*/
|
|
55
|
+
removeNamespace(_namespace: string): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* {@inheritdoc}
|
|
58
|
+
*/
|
|
59
|
+
set(key: CacheKey, value: any, ttl?: number): Promise<this>;
|
|
60
|
+
/**
|
|
61
|
+
* Move the node to the head
|
|
62
|
+
*/
|
|
63
|
+
protected moveHead(node: CacheNode): void;
|
|
64
|
+
/**
|
|
65
|
+
* Remove the node from the cache
|
|
66
|
+
*/
|
|
67
|
+
protected removeNode(node: CacheNode): void;
|
|
68
|
+
/**
|
|
69
|
+
* Add the node to the head
|
|
70
|
+
*/
|
|
71
|
+
protected addNode(node: CacheNode): void;
|
|
72
|
+
/**
|
|
73
|
+
* Remove the tail node
|
|
74
|
+
*/
|
|
75
|
+
protected removeTail(): void;
|
|
76
|
+
/**
|
|
77
|
+
* {@inheritdoc}
|
|
78
|
+
*/
|
|
79
|
+
get(key: CacheKey): Promise<any>;
|
|
80
|
+
/**
|
|
81
|
+
* {@inheritdoc}
|
|
82
|
+
*/
|
|
83
|
+
remove(key: CacheKey): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* {@inheritdoc}
|
|
86
|
+
*/
|
|
87
|
+
flush(): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Get lru capacity
|
|
90
|
+
*/
|
|
91
|
+
get capacity(): number;
|
|
92
|
+
/**
|
|
93
|
+
* {@inheritdoc}
|
|
94
|
+
*/
|
|
95
|
+
disconnect(): Promise<void>;
|
|
96
|
+
}
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=lru-memory-cache-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-memory-cache-driver.d.ts","sourceRoot":"","sources":["../../src/drivers/lru-memory-cache-driver.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,cAAM,SAAS;IAKJ,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,GAAG;IALZ,IAAI,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC9B,IAAI,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEjB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,EACjB,GAAG,CAAC,EAAE,MAAM;IAOd,IAAW,SAAS,IAAI,OAAO,CAE9B;CACF;AAED;;;;;GAKG;AACH,qBAAa,oBACX,SAAQ,eAAe,CAAC,oBAAoB,EAAE,qBAAqB,CACnE,YAAW,WAAW,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAEnE;;OAEG;IACI,IAAI,SAAS;IAEpB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IAEpD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,CAA2B;IAEpD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,CAA2B;IAEpD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IAE3C;;OAEG;;IAQH;;OAEG;IACI,IAAI;IAKX;;OAEG;IACI,YAAY;IAgCnB;;OAEG;IACU,eAAe,CAAC,UAAU,EAAE,MAAM;IAI/C;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM;IAuCxD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS;IAKlC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS;IAKpC;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS;IAOjC;;OAEG;IACH,SAAS,CAAC,UAAU;IAQpB;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,QAAQ;IAuD9B;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,QAAQ;IAkBjC;;OAEG;IACU,KAAK;IAalB;;OAEG;IACH,IAAW,QAAQ,WAElB;IAED;;OAEG;IACU,UAAU;CASxB"}
|