@qelos/cache-manager 3.11.8 → 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 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
  }
@@ -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":";;;AAWA,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,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;AA9BD,gDA8BC"}
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"}
@@ -23,7 +23,17 @@ function createMemoryCache() {
23
23
  }
24
24
  });
25
25
  }, 5000);
26
- return { getItem, setItem };
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
@@ -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;AAChC,CAAC;AA3BD,8CA2BC"}
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"}
@@ -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
  }
@@ -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;AArBD,4CAqBC"}
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
- return { getItem, setItem };
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qelos/cache-manager",
3
- "version": "3.11.8",
3
+ "version": "3.11.9",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "private": false,
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
  }