@qelos/cache-manager 3.11.7 → 3.11.9
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/cache-type.ts +1 -0
- package/dist/cache-type.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/memory-cache.js +11 -1
- package/dist/memory-cache.js.map +1 -1
- package/dist/redis-cache.js +11 -0
- package/dist/redis-cache.js.map +1 -1
- package/index.ts +4 -0
- package/memory-cache.ts +12 -1
- package/package.json +1 -1
- package/redis-cache.ts +12 -0
package/cache-type.ts
CHANGED
|
@@ -3,4 +3,5 @@ import { CacheManagerOptions } from "./cache-manager-options";
|
|
|
3
3
|
export interface ICache {
|
|
4
4
|
getItem: (key: string) => Promise<string>;
|
|
5
5
|
setItem: (key: string, value: string, options: CacheManagerOptions) => Promise<void>;
|
|
6
|
+
setIfNotExists: (key: string, value: string, options: CacheManagerOptions) => Promise<boolean>;
|
|
6
7
|
}
|
package/dist/cache-type.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import { CacheManagerOptions } from "./cache-manager-options";
|
|
|
2
2
|
export interface ICache {
|
|
3
3
|
getItem: (key: string) => Promise<string>;
|
|
4
4
|
setItem: (key: string, value: string, options: CacheManagerOptions) => Promise<void>;
|
|
5
|
+
setIfNotExists: (key: string, value: string, options: CacheManagerOptions) => Promise<boolean>;
|
|
5
6
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type IDataProviderCallback = () => string | Promise<string>;
|
|
|
4
4
|
export interface CacheManager {
|
|
5
5
|
getItem: (key: string) => Promise<string>;
|
|
6
6
|
setItem: (key: string, value: string, { ttl }?: CacheManagerOptions) => Promise<void>;
|
|
7
|
+
setIfNotExists: (key: string, value: string, { ttl }?: CacheManagerOptions) => Promise<boolean>;
|
|
7
8
|
wrap: (key: string, fallback: IDataProviderCallback, setterOptions?: Partial<CacheManagerOptions>) => Promise<string>;
|
|
8
9
|
}
|
|
9
10
|
export declare function createCacheManager(cacher: ICache, applicationOptions?: CacheManagerOptions): CacheManager;
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ function createCacheManager(cacher, applicationOptions = { ttl: 6000 }) {
|
|
|
7
7
|
setItem(key, value, options = {}) {
|
|
8
8
|
return cacher.setItem(key, value, { ...applicationOptions, ...options });
|
|
9
9
|
},
|
|
10
|
+
setIfNotExists(key, value, options = {}) {
|
|
11
|
+
return cacher.setIfNotExists(key, value, { ...applicationOptions, ...options });
|
|
12
|
+
},
|
|
10
13
|
async wrap(key, fallback, setterOptions = {}) {
|
|
11
14
|
let currentValue;
|
|
12
15
|
try {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAYA,SAAgB,kBAAkB,CAAC,MAAc,EAAE,qBAA0C,EAAE,GAAG,EAAE,IAAI,EAAE;IAEtG,OAAO;QACH,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,UAAwC,EAAE;YAC1E,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,cAAc,CAAC,GAAW,EAAE,KAAa,EAAE,UAAwC,EAAE;YACjF,OAAO,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,QAA+B,EAAE,gBAA8C,EAAE;YACrG,IAAI,YAAY,CAAC;YACjB,IAAI;gBACA,YAAY,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aAC5C;YAAC,MAAM;gBACJ,EAAE;aACL;YACD,IAAI,YAAY,EAAE;gBACd,OAAO,YAAY,CAAC;aACvB;YACD,IAAI;gBACA,YAAY,GAAG,MAAM,QAAQ,EAAE,CAAC;gBAEhC,yBAAyB;gBACzB,YAAY,CAAC,GAAG,EAAE;oBACd,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,GAAG,kBAAkB,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC3J,CAAC,CAAC,CAAC;aACN;YAAC,MAAM;aAEP;YACD,OAAO,YAAY,CAAC;QACxB,CAAC;KACJ,CAAA;AACL,CAAC;AAjCD,gDAiCC"}
|
package/dist/memory-cache.js
CHANGED
|
@@ -23,7 +23,17 @@ function createMemoryCache() {
|
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
}, 5000);
|
|
26
|
-
|
|
26
|
+
const setIfNotExists = (key, value, { ttl }) => {
|
|
27
|
+
if (storage.has(key)) {
|
|
28
|
+
return Promise.resolve(false);
|
|
29
|
+
}
|
|
30
|
+
storage.set(key, value);
|
|
31
|
+
if (ttl) {
|
|
32
|
+
keysToRemove.set(key, Date.now() + (ttl * 1000));
|
|
33
|
+
}
|
|
34
|
+
return Promise.resolve(true);
|
|
35
|
+
};
|
|
36
|
+
return { getItem, setItem, setIfNotExists };
|
|
27
37
|
}
|
|
28
38
|
exports.createMemoryCache = createMemoryCache;
|
|
29
39
|
//# sourceMappingURL=memory-cache.js.map
|
package/dist/memory-cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../memory-cache.ts"],"names":[],"mappings":";;;AAGA,SAAgB,iBAAiB;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,GAAG,EAAuB,EAAE,EAAE;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,EAAE;YACL,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;SACpD;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAA;IAED,WAAW,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,YAAY,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,GAAG,GAAG,YAAY,EAAE;gBACpB,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACvB;QACL,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../memory-cache.ts"],"names":[],"mappings":";;;AAGA,SAAgB,iBAAiB;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,GAAG,EAAuB,EAAE,EAAE;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,EAAE;YACL,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;SACpD;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAA;IAED,WAAW,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,YAAY,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,GAAG,GAAG,YAAY,EAAE;gBACpB,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACvB;QACL,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,GAAG,EAAuB,EAAE,EAAE;QAChF,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACjC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,EAAE;YACL,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;SACpD;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAA;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAChD,CAAC;AAtCD,8CAsCC"}
|
package/dist/redis-cache.js
CHANGED
|
@@ -13,6 +13,9 @@ function createRedisCache(redisUrl) {
|
|
|
13
13
|
});
|
|
14
14
|
const getItem = (0, node_util_1.promisify)(client.get).bind(client);
|
|
15
15
|
const setItem = (0, node_util_1.promisify)(client.set).bind(client);
|
|
16
|
+
const setnxWithExpire = (0, node_util_1.promisify)((key, value, nx, ex, ttl, cb) => {
|
|
17
|
+
client.set(key, value, nx, ex, ttl, cb);
|
|
18
|
+
});
|
|
16
19
|
return {
|
|
17
20
|
getItem,
|
|
18
21
|
async setItem(key, value, { ttl }) {
|
|
@@ -20,6 +23,14 @@ function createRedisCache(redisUrl) {
|
|
|
20
23
|
if (ttl) {
|
|
21
24
|
client.expire(key, ttl);
|
|
22
25
|
}
|
|
26
|
+
},
|
|
27
|
+
async setIfNotExists(key, value, { ttl }) {
|
|
28
|
+
if (ttl) {
|
|
29
|
+
const result = await setnxWithExpire(key, value, 'NX', 'EX', ttl);
|
|
30
|
+
return result === 'OK';
|
|
31
|
+
}
|
|
32
|
+
const result = await (0, node_util_1.promisify)(client.setnx).bind(client)(key, value);
|
|
33
|
+
return result === 1;
|
|
23
34
|
}
|
|
24
35
|
};
|
|
25
36
|
}
|
package/dist/redis-cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-cache.js","sourceRoot":"","sources":["../redis-cache.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AACtC,iCAAqC;AAGrC,SAAgB,gBAAgB,CAAC,QAAgB;IAC7C,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK;QAC9B,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnD,OAAO;QACH,OAAO;QACP,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,GAAG,EAAuB;YAClE,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,IAAI,GAAG,EAAE;gBACL,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC3B;QACL,CAAC;KACJ,CAAC;AACN,CAAC;
|
|
1
|
+
{"version":3,"file":"redis-cache.js","sourceRoot":"","sources":["../redis-cache.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AACtC,iCAAqC;AAGrC,SAAgB,gBAAgB,CAAC,QAAgB;IAC7C,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK;QAC9B,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnD,MAAM,eAAe,GAAG,IAAA,qBAAS,EAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAU,EAAE,EAAU,EAAE,GAAW,EAAE,EAAqD,EAAE,EAAE;QACzJ,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO;QACP,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,GAAG,EAAuB;YAClE,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,IAAI,GAAG,EAAE;gBACL,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC3B;QACL,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,GAAG,EAAuB;YACzE,IAAI,GAAG,EAAE;gBACL,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBAClE,OAAO,MAAM,KAAK,IAAI,CAAC;aAC1B;YACD,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAS,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtE,OAAO,MAAM,KAAK,CAAC,CAAC;QACxB,CAAC;KACJ,CAAC;AACN,CAAC;AAjCD,4CAiCC"}
|
package/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ export type IDataProviderCallback = () => string | Promise<string>;
|
|
|
6
6
|
export interface CacheManager {
|
|
7
7
|
getItem: (key: string) => Promise<string>;
|
|
8
8
|
setItem: (key: string, value: string, { ttl }?: CacheManagerOptions) => Promise<void>;
|
|
9
|
+
setIfNotExists: (key: string, value: string, { ttl }?: CacheManagerOptions) => Promise<boolean>;
|
|
9
10
|
wrap: (key: string, fallback: IDataProviderCallback, setterOptions?: Partial<CacheManagerOptions>) => Promise<string>;
|
|
10
11
|
}
|
|
11
12
|
|
|
@@ -16,6 +17,9 @@ export function createCacheManager(cacher: ICache, applicationOptions: CacheMana
|
|
|
16
17
|
setItem(key: string, value: string, options: Partial<CacheManagerOptions> = {}) {
|
|
17
18
|
return cacher.setItem(key, value, { ...applicationOptions, ...options });
|
|
18
19
|
},
|
|
20
|
+
setIfNotExists(key: string, value: string, options: Partial<CacheManagerOptions> = {}) {
|
|
21
|
+
return cacher.setIfNotExists(key, value, { ...applicationOptions, ...options });
|
|
22
|
+
},
|
|
19
23
|
async wrap(key: string, fallback: IDataProviderCallback, setterOptions: Partial<CacheManagerOptions> = {}) {
|
|
20
24
|
let currentValue;
|
|
21
25
|
try {
|
package/memory-cache.ts
CHANGED
|
@@ -27,5 +27,16 @@ export function createMemoryCache(): ICache {
|
|
|
27
27
|
});
|
|
28
28
|
}, 5000);
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
const setIfNotExists = (key: string, value: string, { ttl }: CacheManagerOptions) => {
|
|
31
|
+
if (storage.has(key)) {
|
|
32
|
+
return Promise.resolve(false);
|
|
33
|
+
}
|
|
34
|
+
storage.set(key, value);
|
|
35
|
+
if (ttl) {
|
|
36
|
+
keysToRemove.set(key, Date.now() + (ttl * 1000));
|
|
37
|
+
}
|
|
38
|
+
return Promise.resolve(true);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return { getItem, setItem, setIfNotExists };
|
|
31
42
|
}
|
package/package.json
CHANGED
package/redis-cache.ts
CHANGED
|
@@ -15,6 +15,10 @@ export function createRedisCache(redisUrl: string): ICache {
|
|
|
15
15
|
const getItem = promisify(client.get).bind(client);
|
|
16
16
|
const setItem = promisify(client.set).bind(client);
|
|
17
17
|
|
|
18
|
+
const setnxWithExpire = promisify((key: string, value: string, nx: string, ex: string, ttl: number, cb: (err: Error | null, reply: string | null) => void) => {
|
|
19
|
+
client.set(key, value, nx, ex, ttl, cb);
|
|
20
|
+
});
|
|
21
|
+
|
|
18
22
|
return {
|
|
19
23
|
getItem,
|
|
20
24
|
async setItem(key: string, value: string, { ttl }: CacheManagerOptions): Promise<void> {
|
|
@@ -22,6 +26,14 @@ export function createRedisCache(redisUrl: string): ICache {
|
|
|
22
26
|
if (ttl) {
|
|
23
27
|
client.expire(key, ttl);
|
|
24
28
|
}
|
|
29
|
+
},
|
|
30
|
+
async setIfNotExists(key: string, value: string, { ttl }: CacheManagerOptions): Promise<boolean> {
|
|
31
|
+
if (ttl) {
|
|
32
|
+
const result = await setnxWithExpire(key, value, 'NX', 'EX', ttl);
|
|
33
|
+
return result === 'OK';
|
|
34
|
+
}
|
|
35
|
+
const result = await promisify(client.setnx).bind(client)(key, value);
|
|
36
|
+
return result === 1;
|
|
25
37
|
}
|
|
26
38
|
};
|
|
27
39
|
}
|