parsony 2.0.2 → 2.0.3

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 (2) hide show
  1. package/lib/cache/cache.js +77 -13
  2. package/package.json +1 -1
@@ -5,7 +5,9 @@
5
5
 
6
6
  const { promisify } = require("util");
7
7
  const {CONFIG:{REDIS}} = require('../enums');
8
- const chalk =require('chalk');
8
+ const chalk = require('chalk');
9
+
10
+ const promisifiedMethods = {};
9
11
 
10
12
  let redisClient;
11
13
  let _configs;
@@ -17,8 +19,10 @@ let _configs;
17
19
  */
18
20
  const set = async (...args) => {
19
21
  try {
20
- const asyncSet = promisify(redisClient.set).bind(redisClient);
21
- return await asyncSet(...args);
22
+ if (!promisifiedMethods.set) {
23
+ promisifiedMethods.set = promisify(redisClient.set).bind(redisClient);
24
+ }
25
+ return await promisifiedMethods.set(...args);
22
26
  } catch (e) {
23
27
  return undefined;
24
28
  }
@@ -31,8 +35,10 @@ const set = async (...args) => {
31
35
  */
32
36
  const get = async key => {
33
37
  try {
34
- const asyncGet = promisify(redisClient.get).bind(redisClient);
35
- return asyncGet(key);
38
+ if (!promisifiedMethods.get) {
39
+ promisifiedMethods.get = promisify(redisClient.get).bind(redisClient);
40
+ }
41
+ return promisifiedMethods.get(key);
36
42
  } catch (e) {
37
43
  //dump error
38
44
  }
@@ -45,8 +51,10 @@ const get = async key => {
45
51
  */
46
52
  const del = async key => {
47
53
  try {
48
- const asyncDel = promisify(redisClient.del).bind(redisClient);
49
- await asyncDel(key);
54
+ if (!promisifiedMethods.del) {
55
+ promisifiedMethods.del = promisify(redisClient.del).bind(redisClient);
56
+ }
57
+ await promisifiedMethods.del(key);
50
58
  } catch (e) {
51
59
  //dump error
52
60
  }
@@ -58,8 +66,10 @@ const del = async key => {
58
66
  */
59
67
  const flushAll = async () => {
60
68
  try {
61
- const asyncFlush = promisify(redisClient.flushall).bind(redisClient);
62
- await asyncFlush();
69
+ if (!promisifiedMethods.flushall) {
70
+ promisifiedMethods.flushall = promisify(redisClient.flushall).bind(redisClient);
71
+ }
72
+ await promisifiedMethods.flushall();
63
73
  } catch (e) {
64
74
  //dump error
65
75
  }
@@ -74,7 +84,7 @@ const setConfigs = configs => (_configs = configs);
74
84
  /**
75
85
  * Start Redis Caching using optional connection params
76
86
  */
77
- const startCache = () =>{
87
+ const startCache = () => {
78
88
  const options = _configs[REDIS] ||
79
89
  {
80
90
  host: '127.0.0.1',
@@ -87,7 +97,7 @@ const startCache = () =>{
87
97
 
88
98
  redisClient.on("error", function(e) {
89
99
  switch(e.code){
90
- case'ECONNREFUSED':
100
+ case 'ECONNREFUSED':
91
101
  console.error(chalk.red(`WARNING! Redis Error: ${e.message}`));
92
102
  break;
93
103
  default:
@@ -96,10 +106,61 @@ const startCache = () =>{
96
106
  });
97
107
  };
98
108
 
109
+ /**
110
+ * Add to a set (duplicates ignored)
111
+ * @param key
112
+ * @param member
113
+ * @return {Promise.<number>} 1 if added, 0 if already existed
114
+ */
115
+ const sadd = async (key, member) => {
116
+ try {
117
+ if (!promisifiedMethods.sadd) {
118
+ promisifiedMethods.sadd = promisify(redisClient.sadd).bind(redisClient);
119
+ }
120
+ return await promisifiedMethods.sadd(key, member);
121
+ } catch (e) {
122
+ return undefined;
123
+ }
124
+ };
125
+
126
+ /**
127
+ * Get all members of a set
128
+ * @param key
129
+ * @return {Promise.<string[]>}
130
+ */
131
+ const smembers = async key => {
132
+ try {
133
+ if (!promisifiedMethods.smembers) {
134
+ promisifiedMethods.smembers = promisify(redisClient.smembers).bind(redisClient);
135
+ }
136
+ return await promisifiedMethods.smembers(key);
137
+ } catch (e) {
138
+ return [];
139
+ }
140
+ };
141
+
142
+ /**
143
+ * Get raw Redis client for direct access (promisified)
144
+ * @return {Proxy<RedisClient>}
145
+ */
146
+ const getClient = () => {
147
+ return new Proxy(redisClient, {
148
+ get(target, prop) {
149
+ if (typeof target[prop] === 'function') {
150
+ if (!promisifiedMethods[prop]) {
151
+ promisifiedMethods[prop] = promisify(target[prop]).bind(target);
152
+ }
153
+ return promisifiedMethods[prop];
154
+ }
155
+ return target[prop];
156
+ }
157
+ });
158
+ };
159
+
99
160
  /**
100
161
  * Ensures singleton access to cache instance
101
162
  */
102
- const getCache = () =>{
163
+ const getCache = () => {
103
164
  return {
104
165
  set,
105
166
  get,
@@ -113,7 +174,10 @@ module.exports = {
113
174
  get,
114
175
  del,
115
176
  flushAll,
177
+ sadd,
178
+ smembers,
179
+ getClient,
116
180
  setConfigs,
117
181
  startCache,
118
182
  getCache
119
- };
183
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parsony",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "API Engine for Parsony Framework.",
5
5
  "keywords": [
6
6
  "JSON-RPC, API, Rapid Development"