@goatlab/node-backend 0.0.13 → 0.0.15
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/dist/Cache.d.ts +9 -6
- package/dist/Cache.js +68 -19
- package/dist/Cache.js.map +1 -1
- package/dist/cache/KeyvLrus.d.ts +27 -0
- package/dist/cache/KeyvLrus.js +49 -0
- package/dist/cache/KeyvLrus.js.map +1 -0
- package/dist/cache/lrutypes.d.ts +10 -0
- package/dist/cache/lrutypes.js +3 -0
- package/dist/cache/lrutypes.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/dist/Cache.test.d.ts +0 -1
- package/dist/Cache.test.js +0 -714
- package/dist/Cache.test.js.map +0 -1
package/dist/Cache.d.ts
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { type Milliseconds } from '@goatlab/js-utils';
|
|
2
2
|
import { Options } from 'keyv';
|
|
3
3
|
declare const Keyv: any;
|
|
4
|
-
export declare class Cache extends Keyv {
|
|
4
|
+
export declare class Cache<T extends object = any> extends Keyv<T> {
|
|
5
5
|
private _ns;
|
|
6
|
+
private _tenantId?;
|
|
6
7
|
private usesLRUMemory?;
|
|
7
8
|
private keyvLru;
|
|
8
9
|
private memoryCache;
|
|
9
10
|
constructor({ connection, opts }: {
|
|
10
11
|
connection: string | undefined;
|
|
11
|
-
opts?: Options<
|
|
12
|
+
opts?: Options<T> & {
|
|
12
13
|
usesLRUMemory?: boolean;
|
|
14
|
+
tenantId?: string;
|
|
13
15
|
};
|
|
14
16
|
});
|
|
17
|
+
get tenantId(): string | undefined;
|
|
15
18
|
private isValidResult;
|
|
16
19
|
private isNotNullish;
|
|
17
20
|
private isNotEmptyString;
|
|
18
21
|
private isNotEmptyArray;
|
|
19
22
|
private isNotEmptyObject;
|
|
20
|
-
get
|
|
23
|
+
get(key: string | string[]): Promise<T>;
|
|
21
24
|
delete(key: string): Promise<boolean>;
|
|
22
25
|
has(key: string[]): Promise<boolean[]>;
|
|
23
26
|
has(key: string): Promise<boolean>;
|
|
@@ -28,20 +31,20 @@ export declare class Cache extends Keyv {
|
|
|
28
31
|
* @param int $ms - time in milliseconds
|
|
29
32
|
* @param $callback
|
|
30
33
|
*/
|
|
31
|
-
remember
|
|
34
|
+
remember(key: string, ms: Milliseconds, fx: () => Promise<T>): Promise<T>;
|
|
32
35
|
/**
|
|
33
36
|
* Get an item from the cache, or execute the given Closure and store the result forever.
|
|
34
37
|
*
|
|
35
38
|
* @param string $key
|
|
36
39
|
* @param \Closure $callback
|
|
37
40
|
*/
|
|
38
|
-
rememberForever
|
|
41
|
+
rememberForever(key: string, fx: () => Promise<T>): Promise<T>;
|
|
39
42
|
/**
|
|
40
43
|
* Retrieve an item from the cache and delete it.
|
|
41
44
|
*
|
|
42
45
|
* @param string $key
|
|
43
46
|
*/
|
|
44
|
-
pull(key: string): Promise<
|
|
47
|
+
pull(key: string): Promise<T>;
|
|
45
48
|
/**
|
|
46
49
|
* Remove an item from the cache.
|
|
47
50
|
*
|
package/dist/Cache.js
CHANGED
|
@@ -4,33 +4,47 @@ exports.Cache = void 0;
|
|
|
4
4
|
const js_utils_1 = require("@goatlab/js-utils");
|
|
5
5
|
const redis_1 = require("@keyv/redis");
|
|
6
6
|
const Keyv = require('keyv');
|
|
7
|
-
const
|
|
7
|
+
const KeyvLrus_1 = require("./cache/KeyvLrus");
|
|
8
8
|
class Cache extends Keyv {
|
|
9
|
+
_ns;
|
|
10
|
+
_tenantId;
|
|
11
|
+
usesLRUMemory;
|
|
12
|
+
keyvLru;
|
|
13
|
+
memoryCache;
|
|
9
14
|
constructor({ connection, opts }) {
|
|
15
|
+
const tenantId = opts?.tenantId;
|
|
16
|
+
const namespace = opts?.namespace || '';
|
|
17
|
+
// Build the full namespace including tenant ID if provided
|
|
18
|
+
const fullNamespace = tenantId
|
|
19
|
+
? (namespace ? `${tenantId}:${namespace}` : tenantId)
|
|
20
|
+
: namespace;
|
|
10
21
|
super({
|
|
11
22
|
store: connection
|
|
12
23
|
? new redis_1.default(connection)
|
|
13
|
-
: new
|
|
24
|
+
: new KeyvLrus_1.KeyvLru({
|
|
14
25
|
max: 1000,
|
|
15
|
-
|
|
16
|
-
ttl: 0
|
|
17
|
-
expire: 0
|
|
26
|
+
resetTtl: false,
|
|
27
|
+
ttl: 0
|
|
18
28
|
}),
|
|
19
|
-
...opts
|
|
29
|
+
...opts,
|
|
30
|
+
namespace: fullNamespace
|
|
20
31
|
});
|
|
21
|
-
this.keyvLru = new
|
|
32
|
+
this.keyvLru = new KeyvLrus_1.KeyvLru({
|
|
22
33
|
max: 1000,
|
|
23
|
-
|
|
24
|
-
ttl: 0
|
|
25
|
-
expire: 0
|
|
34
|
+
resetTtl: false,
|
|
35
|
+
ttl: 0
|
|
26
36
|
});
|
|
27
37
|
this.memoryCache = new Keyv({
|
|
28
38
|
store: this.keyvLru,
|
|
29
|
-
namespace:
|
|
39
|
+
namespace: fullNamespace
|
|
30
40
|
});
|
|
31
|
-
this._ns =
|
|
41
|
+
this._ns = fullNamespace;
|
|
42
|
+
this._tenantId = tenantId;
|
|
32
43
|
this.usesLRUMemory = opts?.usesLRUMemory || false;
|
|
33
44
|
}
|
|
45
|
+
get tenantId() {
|
|
46
|
+
return this._tenantId;
|
|
47
|
+
}
|
|
34
48
|
isValidResult(result) {
|
|
35
49
|
return (this.isNotNullish(result) &&
|
|
36
50
|
this.isNotEmptyString(result) &&
|
|
@@ -56,7 +70,7 @@ class Cache extends Keyv {
|
|
|
56
70
|
async get(key) {
|
|
57
71
|
// Search first in LRU memory
|
|
58
72
|
// It will greatly improve performance
|
|
59
|
-
// for "frequent"
|
|
73
|
+
// for "frequent" uses
|
|
60
74
|
if (this.usesLRUMemory) {
|
|
61
75
|
const memoryVal = await this.memoryCache.get(`${this._ns}:${key}`);
|
|
62
76
|
if (memoryVal) {
|
|
@@ -149,32 +163,67 @@ class Cache extends Keyv {
|
|
|
149
163
|
}
|
|
150
164
|
async deleteWhereStartsWith(value) {
|
|
151
165
|
if (!this.iterator) {
|
|
152
|
-
await js_utils_1.Promises.map(Object.keys(this.opts.store['cache']['
|
|
166
|
+
await js_utils_1.Promises.map(Object.keys(this.opts.store['cache']['items']), async (k) => {
|
|
153
167
|
if (k.startsWith(`${this._ns}:${value}`)) {
|
|
154
168
|
await this.delete(k.replace(`${this._ns}:`, ''));
|
|
155
169
|
}
|
|
156
170
|
});
|
|
157
171
|
return;
|
|
158
172
|
}
|
|
173
|
+
// When using iterator with compound namespaces (e.g., tenant:namespace),
|
|
174
|
+
// keyv may not strip the full namespace correctly. We need to handle this.
|
|
175
|
+
const namespaceParts = this._ns.split(':');
|
|
176
|
+
const hasCompoundNamespace = namespaceParts.length > 1;
|
|
159
177
|
for await (const [key] of this.iterator(this._ns)) {
|
|
160
|
-
|
|
161
|
-
|
|
178
|
+
let keyToCheck = key;
|
|
179
|
+
// If we have a compound namespace and the key still contains part of it,
|
|
180
|
+
// we need to strip the remaining namespace parts
|
|
181
|
+
if (hasCompoundNamespace && key.includes(':')) {
|
|
182
|
+
// Check if the key starts with any remaining namespace parts
|
|
183
|
+
for (let i = 1; i < namespaceParts.length; i++) {
|
|
184
|
+
const remainingNamespace = namespaceParts.slice(i).join(':');
|
|
185
|
+
if (key.startsWith(`${remainingNamespace}:`)) {
|
|
186
|
+
keyToCheck = key.substring(remainingNamespace.length + 1);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (keyToCheck.startsWith(value)) {
|
|
192
|
+
// Use the processed key (without namespace parts) for deletion
|
|
193
|
+
await this.delete(keyToCheck);
|
|
162
194
|
}
|
|
163
195
|
}
|
|
164
196
|
}
|
|
165
197
|
async getValueWhereKeyStartsWith(value) {
|
|
166
198
|
const result = [];
|
|
167
199
|
if (!this.iterator) {
|
|
168
|
-
await js_utils_1.Promises.map(Object.keys(this.opts.store['cache']['
|
|
200
|
+
await js_utils_1.Promises.map(Object.keys(this.opts.store['cache']['items']), async (k) => {
|
|
169
201
|
if (k.startsWith(`${this._ns}:${value}`)) {
|
|
170
|
-
const val = JSON.parse(this.opts.store['cache']['
|
|
202
|
+
const val = JSON.parse(this.opts.store['cache']['items'][k].value).value;
|
|
171
203
|
result.push(val);
|
|
172
204
|
}
|
|
173
205
|
});
|
|
174
206
|
return result;
|
|
175
207
|
}
|
|
208
|
+
// When using iterator with compound namespaces (e.g., tenant:namespace),
|
|
209
|
+
// keyv may not strip the full namespace correctly. We need to handle this.
|
|
210
|
+
const namespaceParts = this._ns.split(':');
|
|
211
|
+
const hasCompoundNamespace = namespaceParts.length > 1;
|
|
176
212
|
for await (const [key, val] of this.iterator(this._ns)) {
|
|
177
|
-
|
|
213
|
+
let keyToCheck = key;
|
|
214
|
+
// If we have a compound namespace and the key still contains part of it,
|
|
215
|
+
// we need to strip the remaining namespace parts
|
|
216
|
+
if (hasCompoundNamespace && key.includes(':')) {
|
|
217
|
+
// Check if the key starts with any remaining namespace parts
|
|
218
|
+
for (let i = 1; i < namespaceParts.length; i++) {
|
|
219
|
+
const remainingNamespace = namespaceParts.slice(i).join(':');
|
|
220
|
+
if (key.startsWith(`${remainingNamespace}:`)) {
|
|
221
|
+
keyToCheck = key.substring(remainingNamespace.length + 1);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (keyToCheck.startsWith(value)) {
|
|
178
227
|
result.push(val);
|
|
179
228
|
}
|
|
180
229
|
}
|
package/dist/Cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../src/Cache.ts"],"names":[],"mappings":";;;AAAA,gDAA+D;AAE/D,uCAAmC;AACnC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B
|
|
1
|
+
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../src/Cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { LRU } from 'tiny-lru';
|
|
2
|
+
import type { ExpirableItem, MapInterface } from './lrutypes';
|
|
3
|
+
export type KeyvLruOptions = {
|
|
4
|
+
max: number;
|
|
5
|
+
ttl?: number;
|
|
6
|
+
resetTtl?: boolean;
|
|
7
|
+
serialize?: (data: any) => string;
|
|
8
|
+
deserialize?: (data: string) => any;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* An adapter from tiny-lru to the MapInterface API.
|
|
12
|
+
*/
|
|
13
|
+
export declare class KeyvLru<T> implements MapInterface {
|
|
14
|
+
cache: LRU<T>;
|
|
15
|
+
private defaultTtl?;
|
|
16
|
+
serialize?: (data: any) => string;
|
|
17
|
+
deserialize?: (data: string) => any;
|
|
18
|
+
opts?: {
|
|
19
|
+
serialize?: (data: any) => string;
|
|
20
|
+
deserialize?: (data: string) => any;
|
|
21
|
+
};
|
|
22
|
+
constructor(options?: KeyvLruOptions);
|
|
23
|
+
clear(): void;
|
|
24
|
+
delete(key: string): boolean;
|
|
25
|
+
get(key: string): ExpirableItem<T> | undefined;
|
|
26
|
+
set(key: string, value: T): 1 | 0;
|
|
27
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyvLru = void 0;
|
|
4
|
+
const tiny_lru_1 = require("tiny-lru");
|
|
5
|
+
/**
|
|
6
|
+
* An adapter from tiny-lru to the MapInterface API.
|
|
7
|
+
*/
|
|
8
|
+
class KeyvLru {
|
|
9
|
+
cache;
|
|
10
|
+
defaultTtl;
|
|
11
|
+
serialize;
|
|
12
|
+
deserialize;
|
|
13
|
+
opts;
|
|
14
|
+
constructor(options = { max: 500 }) {
|
|
15
|
+
this.defaultTtl = options.ttl;
|
|
16
|
+
this.cache = new tiny_lru_1.LRU(options.max, this.defaultTtl, options.resetTtl);
|
|
17
|
+
this.serialize = options.serialize;
|
|
18
|
+
this.deserialize = options.deserialize;
|
|
19
|
+
// Expose opts to match test expectations
|
|
20
|
+
this.opts = {
|
|
21
|
+
deserialize: options.deserialize,
|
|
22
|
+
serialize: options.serialize
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
clear() {
|
|
26
|
+
this.cache.clear();
|
|
27
|
+
}
|
|
28
|
+
delete(key) {
|
|
29
|
+
if (!this.cache.has(key)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
this.cache.delete(key);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
get(key) {
|
|
36
|
+
return this.cache.get(key);
|
|
37
|
+
}
|
|
38
|
+
set(key, value) {
|
|
39
|
+
if (typeof value === 'symbol') {
|
|
40
|
+
const e = new Error();
|
|
41
|
+
e.message = 'symbol cannot be serialized';
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
this.cache.set(key, value);
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.KeyvLru = KeyvLru;
|
|
49
|
+
//# sourceMappingURL=KeyvLrus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyvLrus.js","sourceRoot":"","sources":["../../src/cache/KeyvLrus.ts"],"names":[],"mappings":";;;AAAA,uCAA8B;AAW9B;;GAEG;AACH,MAAa,OAAO;IAClB,KAAK,CAAQ;IACL,UAAU,CAAS;IAC3B,SAAS,CAAwB;IACjC,WAAW,CAAwB;IACnC,IAAI,CAGH;IAED,YAAY,UAA0B,EAAE,GAAG,EAAE,GAAG,EAAE;QAChD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,cAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QAEpE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QAEtC,yCAAyC;QACzC,IAAI,CAAC,IAAI,GAAG;YACV,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAA;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAiC,CAAA;IAC5D,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAA;YACrB,CAAC,CAAC,OAAO,GAAG,6BAA6B,CAAA;YACzC,MAAM,CAAC,CAAA;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC1B,OAAO,CAAC,CAAA;IACV,CAAC;CACF;AAlDD,0BAkDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lrutypes.js","sourceRoot":"","sources":["../../src/cache/lrutypes.ts"],"names":[],"mappings":""}
|