lemon-core 3.0.2 → 3.1.2
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/README.md +3 -0
- package/dist/common/test-helper.js +19 -11
- package/dist/common/test-helper.js.map +1 -1
- package/dist/controllers/dummy-controller.d.ts +2 -2
- package/dist/controllers/dummy-controller.js +2 -2
- package/dist/controllers/dummy-controller.js.map +1 -1
- package/dist/controllers/general-api-controller.d.ts +2 -2
- package/dist/controllers/general-api-controller.js +5 -5
- package/dist/controllers/general-api-controller.js.map +1 -1
- package/dist/controllers/general-controller.d.ts +1 -1
- package/dist/controllers/general-controller.js +2 -1
- package/dist/controllers/general-controller.js.map +1 -1
- package/dist/controllers/index.js +6 -2
- package/dist/controllers/index.js.map +1 -1
- package/dist/cores/{api-service.d.ts → api/api-service.d.ts} +0 -0
- package/dist/cores/{api-service.js → api/api-service.js} +22 -21
- package/dist/cores/api/api-service.js.map +1 -0
- package/dist/cores/api/index.d.ts +10 -0
- package/dist/cores/api/index.js +27 -0
- package/dist/cores/api/index.js.map +1 -0
- package/dist/cores/aws/aws-kms-service.d.ts +53 -2
- package/dist/cores/aws/aws-kms-service.js +112 -29
- package/dist/cores/aws/aws-kms-service.js.map +1 -1
- package/dist/cores/aws/aws-s3-service.js +19 -18
- package/dist/cores/aws/aws-s3-service.js.map +1 -1
- package/dist/cores/aws/aws-sns-service.js +10 -10
- package/dist/cores/aws/aws-sns-service.js.map +1 -1
- package/dist/cores/aws/aws-sqs-service.js +12 -12
- package/dist/cores/aws/aws-sqs-service.js.map +1 -1
- package/dist/cores/aws/index.js +1 -1
- package/dist/cores/{cache-service.d.ts → cache/cache-service.d.ts} +77 -25
- package/dist/cores/{cache-service.js → cache/cache-service.js} +77 -47
- package/dist/cores/cache/cache-service.js.map +1 -0
- package/dist/cores/cache/index.d.ts +10 -0
- package/dist/cores/cache/index.js +27 -0
- package/dist/cores/cache/index.js.map +1 -0
- package/dist/cores/config/config-service.js +11 -10
- package/dist/cores/config/config-service.js.map +1 -1
- package/dist/cores/core-services.d.ts +1 -2
- package/dist/cores/core-services.js +0 -21
- package/dist/cores/core-services.js.map +1 -1
- package/dist/cores/{dynamo-query-service.d.ts → dynamo/dynamo-query-service.d.ts} +1 -1
- package/dist/cores/{dynamo-query-service.js → dynamo/dynamo-query-service.js} +10 -10
- package/dist/cores/dynamo/dynamo-query-service.js.map +1 -0
- package/dist/cores/{dynamo-scan-service.d.ts → dynamo/dynamo-scan-service.d.ts} +1 -1
- package/dist/cores/{dynamo-scan-service.js → dynamo/dynamo-scan-service.js} +11 -11
- package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -0
- package/dist/cores/{dynamo-service.d.ts → dynamo/dynamo-service.d.ts} +1 -1
- package/dist/cores/{dynamo-service.js → dynamo/dynamo-service.js} +21 -21
- package/dist/cores/dynamo/dynamo-service.js.map +1 -0
- package/dist/cores/dynamo/index.d.ts +12 -0
- package/dist/cores/dynamo/index.js +29 -0
- package/dist/cores/dynamo/index.js.map +1 -0
- package/dist/cores/{elastic6-query-service.d.ts → elastic/elastic6-query-service.d.ts} +1 -1
- package/dist/cores/{elastic6-query-service.js → elastic/elastic6-query-service.js} +8 -8
- package/dist/cores/elastic/elastic6-query-service.js.map +1 -0
- package/dist/cores/{elastic6-service.d.ts → elastic/elastic6-service.d.ts} +1 -1
- package/dist/cores/{elastic6-service.js → elastic/elastic6-service.js} +60 -68
- package/dist/cores/elastic/elastic6-service.js.map +1 -0
- package/dist/cores/{hangul-service.d.ts → elastic/hangul-service.d.ts} +17 -3
- package/dist/cores/{hangul-service.js → elastic/hangul-service.js} +17 -8
- package/dist/cores/elastic/hangul-service.js.map +1 -0
- package/dist/cores/elastic/index.d.ts +12 -0
- package/dist/cores/elastic/index.js +29 -0
- package/dist/cores/elastic/index.js.map +1 -0
- package/dist/cores/index.d.ts +10 -16
- package/dist/cores/index.js +15 -16
- package/dist/cores/index.js.map +1 -1
- package/dist/cores/lambda/index.js +8 -4
- package/dist/cores/lambda/index.js.map +1 -1
- package/dist/cores/lambda/lambda-cognito-handler.js +2 -2
- package/dist/cores/lambda/lambda-cognito-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -1
- package/dist/cores/lambda/lambda-cron-handler.js +2 -2
- package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +3 -3
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js +20 -20
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-handler.d.ts +2 -1
- package/dist/cores/lambda/lambda-handler.js +12 -11
- package/dist/cores/lambda/lambda-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-notification-handler.d.ts +1 -1
- package/dist/cores/lambda/lambda-notification-handler.js +10 -10
- package/dist/cores/lambda/lambda-notification-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sns-handler.d.ts +1 -1
- package/dist/cores/lambda/lambda-sns-handler.js +13 -13
- package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sqs-handler.d.ts +1 -1
- package/dist/cores/lambda/lambda-sqs-handler.js +13 -13
- package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-web-handler.d.ts +158 -8
- package/dist/cores/lambda/lambda-web-handler.js +330 -119
- package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-wss-handler.js +16 -12
- package/dist/cores/lambda/lambda-wss-handler.js.map +1 -1
- package/dist/cores/protocol/protocol-service.d.ts +5 -1
- package/dist/cores/protocol/protocol-service.js +46 -40
- package/dist/cores/protocol/protocol-service.js.map +1 -1
- package/dist/cores/{http-storage-service.d.ts → storage/http-storage-service.d.ts} +1 -1
- package/dist/cores/{http-storage-service.js → storage/http-storage-service.js} +6 -6
- package/dist/cores/storage/http-storage-service.js.map +1 -0
- package/dist/cores/storage/index.d.ts +14 -0
- package/dist/cores/storage/index.js +31 -0
- package/dist/cores/storage/index.js.map +1 -0
- package/dist/cores/{model-manager.d.ts → storage/model-manager.d.ts} +2 -1
- package/dist/cores/{model-manager.js → storage/model-manager.js} +12 -12
- package/dist/cores/storage/model-manager.js.map +1 -0
- package/dist/cores/{proxy-storage-service.d.ts → storage/proxy-storage-service.d.ts} +3 -72
- package/dist/cores/{proxy-storage-service.js → storage/proxy-storage-service.js} +13 -19
- package/dist/cores/storage/proxy-storage-service.js.map +1 -0
- package/dist/cores/{redis-storage-service.d.ts → storage/redis-storage-service.d.ts} +0 -0
- package/dist/cores/{redis-storage-service.js → storage/redis-storage-service.js} +14 -14
- package/dist/cores/storage/redis-storage-service.js.map +1 -0
- package/dist/cores/{storage-service.d.ts → storage/storage-service.d.ts} +6 -19
- package/dist/cores/{storage-service.js → storage/storage-service.js} +9 -19
- package/dist/cores/storage/storage-service.js.map +1 -0
- package/dist/engine/builder.js +27 -20
- package/dist/engine/builder.js.map +1 -1
- package/dist/engine/engine.d.ts +1 -1
- package/dist/engine/engine.js +53 -44
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/index.js +8 -4
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/utilities.d.ts +4 -3
- package/dist/engine/utilities.js +32 -37
- package/dist/engine/utilities.js.map +1 -1
- package/dist/environ.d.ts +2 -2
- package/dist/environ.js +20 -10
- package/dist/environ.js.map +1 -1
- package/dist/exec-cli.js +26 -26
- package/dist/exec-cli.js.map +1 -1
- package/dist/extended/abstract-service.d.ts +540 -0
- package/dist/extended/abstract-service.js +924 -0
- package/dist/extended/abstract-service.js.map +1 -0
- package/dist/extended/index.d.ts +10 -0
- package/dist/extended/index.js +27 -0
- package/dist/extended/index.js.map +1 -0
- package/dist/helpers/helpers.d.ts +8 -1
- package/dist/helpers/helpers.js +25 -12
- package/dist/helpers/helpers.js.map +1 -1
- package/dist/helpers/index.js +6 -2
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/dynamo/expressions.js +35 -27
- package/dist/lib/dynamo/expressions.js.map +1 -1
- package/dist/lib/dynamo/query.js +24 -20
- package/dist/lib/dynamo/query.js.map +1 -1
- package/dist/lib/dynamo/scan.js +17 -13
- package/dist/lib/dynamo/scan.js.map +1 -1
- package/dist/lib/dynamo/serializer.js +11 -7
- package/dist/lib/dynamo/serializer.js.map +1 -1
- package/dist/lib/dynamo/utils.js +19 -14
- package/dist/lib/dynamo/utils.js.map +1 -1
- package/dist/lib/dynamodb-value.js +3 -3
- package/dist/lib/dynamodb-value.js.map +1 -1
- package/dist/lib/index.js +6 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/tools/express.js +21 -15
- package/dist/tools/express.js.map +1 -1
- package/dist/tools/index.js +6 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/shared.js +12 -6
- package/dist/tools/shared.js.map +1 -1
- package/package.json +18 -15
- package/dist/cores/api-service.js.map +0 -1
- package/dist/cores/cache-service.js.map +0 -1
- package/dist/cores/core-types.d.ts +0 -368
- package/dist/cores/core-types.js +0 -15
- package/dist/cores/core-types.js.map +0 -1
- package/dist/cores/dynamo-query-service.js.map +0 -1
- package/dist/cores/dynamo-scan-service.js.map +0 -1
- package/dist/cores/dynamo-service.js.map +0 -1
- package/dist/cores/elastic6-query-service.js.map +0 -1
- package/dist/cores/elastic6-service.js.map +0 -1
- package/dist/cores/hangul-service.js.map +0 -1
- package/dist/cores/http-storage-service.js.map +0 -1
- package/dist/cores/model-manager.js.map +0 -1
- package/dist/cores/proxy-storage-service.js.map +0 -1
- package/dist/cores/redis-storage-service.js.map +0 -1
- package/dist/cores/storage-service.js.map +0 -1
- package/dist/tools/helpers.d.ts +0 -243
- package/dist/tools/helpers.js +0 -593
- package/dist/tools/helpers.js.map +0 -1
|
@@ -47,7 +47,7 @@ class AWSSQSService {
|
|
|
47
47
|
// const stage = $engine.environ('STAGE', '') as string;
|
|
48
48
|
// if (!endpoint && stage != 'local')
|
|
49
49
|
// throw new Error(`env.${AWSSQSService.SQS_ENDPOINT} is required w/ stage:${stage}`);
|
|
50
|
-
engine_1._log(NS, `AWSSQSService(${endpoint}, ${region})...`);
|
|
50
|
+
(0, engine_1._log)(NS, `AWSSQSService(${endpoint}, ${region})...`);
|
|
51
51
|
this._region = region;
|
|
52
52
|
this._endpoint = endpoint;
|
|
53
53
|
}
|
|
@@ -83,10 +83,10 @@ class AWSSQSService {
|
|
|
83
83
|
MessageBody: engine_1.$U.json(data && typeof data == 'object' ? data : { data }),
|
|
84
84
|
QueueUrl: this.endpoint(),
|
|
85
85
|
};
|
|
86
|
-
engine_1._log(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
86
|
+
(0, engine_1._log)(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
87
87
|
const sqs = new aws_sdk_1.default.SQS({ region: this.region() });
|
|
88
88
|
const result = yield sqs.sendMessage(params).promise();
|
|
89
|
-
engine_1._log(NS, '> result =', result);
|
|
89
|
+
(0, engine_1._log)(NS, '> result =', result);
|
|
90
90
|
return (result && result.MessageId) || '';
|
|
91
91
|
});
|
|
92
92
|
}
|
|
@@ -108,13 +108,13 @@ class AWSSQSService {
|
|
|
108
108
|
MessageAttributeNames: ['All'],
|
|
109
109
|
QueueUrl: this.endpoint(),
|
|
110
110
|
// VisibilityTimeout: 0, //WARN! DUPLICATE MESSAGES CAN BE SEEN.
|
|
111
|
-
WaitTimeSeconds: 0,
|
|
111
|
+
WaitTimeSeconds: 0, //WARN! WAIT FOR EMPTY QUEUE.
|
|
112
112
|
};
|
|
113
|
-
engine_1._log(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
113
|
+
(0, engine_1._log)(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
114
114
|
//! call api
|
|
115
115
|
const sqs = new aws_sdk_1.default.SQS({ region: this.region() });
|
|
116
116
|
const result = yield sqs.receiveMessage(params).promise();
|
|
117
|
-
engine_1._log(NS, '> result =', engine_1.$U.json(result));
|
|
117
|
+
(0, engine_1._log)(NS, '> result =', engine_1.$U.json(result));
|
|
118
118
|
//! transform list.
|
|
119
119
|
const list = (result && result.Messages).map(_ => {
|
|
120
120
|
const N = {};
|
|
@@ -149,11 +149,11 @@ class AWSSQSService {
|
|
|
149
149
|
QueueUrl: this.endpoint(),
|
|
150
150
|
ReceiptHandle: handle,
|
|
151
151
|
};
|
|
152
|
-
engine_1._log(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
152
|
+
(0, engine_1._log)(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
153
153
|
//! call delete.
|
|
154
154
|
const sqs = new aws_sdk_1.default.SQS({ region: this.region() });
|
|
155
155
|
const result = yield sqs.deleteMessage(params).promise();
|
|
156
|
-
engine_1._log(NS, '> result =', engine_1.$U.json(result));
|
|
156
|
+
(0, engine_1._log)(NS, '> result =', engine_1.$U.json(result));
|
|
157
157
|
return;
|
|
158
158
|
});
|
|
159
159
|
}
|
|
@@ -168,11 +168,11 @@ class AWSSQSService {
|
|
|
168
168
|
QueueUrl: this.endpoint(),
|
|
169
169
|
AttributeNames: ['All'],
|
|
170
170
|
};
|
|
171
|
-
engine_1._log(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
171
|
+
(0, engine_1._log)(NS, `> params[${this.endpoint()}] =`, engine_1.$U.json(params));
|
|
172
172
|
//! call delete.
|
|
173
173
|
const sqs = new aws_sdk_1.default.SQS({ region: this.region() });
|
|
174
174
|
const result = yield sqs.getQueueAttributes(params).promise();
|
|
175
|
-
engine_1._log(NS, '> result =', engine_1.$U.json(result));
|
|
175
|
+
(0, engine_1._log)(NS, '> result =', engine_1.$U.json(result));
|
|
176
176
|
const attr = result.Attributes || {};
|
|
177
177
|
const stat = {
|
|
178
178
|
available: engine_1.$U.N(attr.ApproximateNumberOfMessages, 0),
|
|
@@ -199,7 +199,7 @@ class MyDummySQSService {
|
|
|
199
199
|
constructor(endpoint, timeout = 30) {
|
|
200
200
|
this.buffer = [];
|
|
201
201
|
this.hello = () => `dummy-sqs-service:${this.endpoint}`;
|
|
202
|
-
engine_1._log(NS, `MyDummySQSService(${endpoint}, ${timeout})...`);
|
|
202
|
+
(0, engine_1._log)(NS, `MyDummySQSService(${endpoint}, ${timeout})...`);
|
|
203
203
|
this.endpoint = endpoint;
|
|
204
204
|
this.timeout = timeout;
|
|
205
205
|
}
|
|
@@ -215,7 +215,7 @@ class MyDummySQSService {
|
|
|
215
215
|
this.buffer.push(payload);
|
|
216
216
|
const len = this.buffer.length;
|
|
217
217
|
const id = `aabbccdd-dummy-sqs-b29b-${fn(len)}`;
|
|
218
|
-
engine_1._inf(NS, `> queue[${id}] :=`, engine_1.$U.json(payload));
|
|
218
|
+
(0, engine_1._inf)(NS, `> queue[${id}] :=`, engine_1.$U.json(payload));
|
|
219
219
|
if (this.timeout > 0) {
|
|
220
220
|
setTimeout(() => {
|
|
221
221
|
payload.id = id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-sqs-service.js","sourceRoot":"","sources":["../../../src/cores/aws/aws-sqs-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;;;;;;;GAWG;AACH,6DAA6D;AAC7D,0CAA8D;AAC9D,MAAM,EAAE,GAAG,WAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,2BAA2B;AAE7D,sDAAmC;AA8CnC;;;GAGG;AACH,MAAa,aAAa;IAOtB;;OAEG;IACH,YAAmB,QAAiB,EAAE,MAAe;QAgBrD;;WAEG;QACI,UAAK,GAAG,GAAG,EAAE,CAAC,mBAAmB,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAlB3D,MAAM,GAAG,MAAM,IAAK,gBAAO,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAY,IAAI,EAAE,CAAC;QACjG,QAAQ,GAAG,QAAQ,IAAK,gBAAO,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAY,IAAI,EAAE,CAAC;QACzF,wDAAwD;QACxD,qCAAqC;QACrC,0FAA0F;QAC1F,aAAI,
|
|
1
|
+
{"version":3,"file":"aws-sqs-service.js","sourceRoot":"","sources":["../../../src/cores/aws/aws-sqs-service.ts"],"names":[],"mappings":"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"}
|
package/dist/cores/aws/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.AWSModule = void 0;
|
|
12
|
+
exports.AWSModule = exports.AWSS3Service = exports.AWSSQSService = exports.AWSSNSService = exports.AWSKMSService = void 0;
|
|
13
13
|
/**
|
|
14
14
|
* `cores/aws/index.tx`
|
|
15
15
|
* - aws services for serverless micro-service.
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/** ********************************************************************************************************************
|
|
2
|
-
* Exported Types
|
|
3
|
-
** ********************************************************************************************************************/
|
|
4
1
|
/**
|
|
5
2
|
* type `CacheOptions`
|
|
6
3
|
*/
|
|
@@ -26,10 +23,6 @@ export interface CacheOptions {
|
|
|
26
23
|
* type `CacheKey`
|
|
27
24
|
*/
|
|
28
25
|
export declare type CacheKey = string | number;
|
|
29
|
-
/**
|
|
30
|
-
* type `CacheValue`
|
|
31
|
-
*/
|
|
32
|
-
export declare type CacheValue = any;
|
|
33
26
|
/**
|
|
34
27
|
* type: `Timeout`
|
|
35
28
|
*/
|
|
@@ -48,7 +41,7 @@ export interface Timeout {
|
|
|
48
41
|
/**
|
|
49
42
|
* type `CacheEntry`: parameter type of 'setMulti' operation
|
|
50
43
|
*/
|
|
51
|
-
export interface CacheEntry {
|
|
44
|
+
export interface CacheEntry<CacheValue> {
|
|
52
45
|
/**
|
|
53
46
|
* key
|
|
54
47
|
*/
|
|
@@ -65,14 +58,43 @@ export interface CacheEntry {
|
|
|
65
58
|
/**
|
|
66
59
|
* type `KeyValueMap`: result type of 'getMulti' operation
|
|
67
60
|
*/
|
|
68
|
-
export declare type KeyValueMap = Record<CacheKey, CacheValue>;
|
|
69
|
-
/**
|
|
70
|
-
*
|
|
71
|
-
|
|
61
|
+
export declare type KeyValueMap<CacheValue> = Record<CacheKey, CacheValue>;
|
|
62
|
+
/**
|
|
63
|
+
* class: `CacheKeyMakable`
|
|
64
|
+
* - to provide the custom key-string of cache.
|
|
65
|
+
* - the global pkey would be like `<project>:<model.ns>:<model.type>::<cache-key>` (ex: `lemon:SS:item::100001`)
|
|
66
|
+
*/
|
|
67
|
+
export interface CacheKeyMakable {
|
|
68
|
+
/**
|
|
69
|
+
* make the global pkey
|
|
70
|
+
* - default must be like `${ns}${delim}${key}`
|
|
71
|
+
*/
|
|
72
|
+
(ns: string, delim: string, key: CacheKey): string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* class: `CacheSupportable`
|
|
76
|
+
* - support basic cache operation(read/write/timeout).
|
|
77
|
+
*/
|
|
78
|
+
export interface CacheSupportable<CacheValue = any> {
|
|
79
|
+
/**
|
|
80
|
+
* save into cache w/ timeout(sec)
|
|
81
|
+
*/
|
|
82
|
+
set(key: CacheKey, val: CacheValue, timeout?: number | Timeout): Promise<boolean>;
|
|
83
|
+
/**
|
|
84
|
+
* read from cache
|
|
85
|
+
*/
|
|
86
|
+
get(key: CacheKey): Promise<CacheValue>;
|
|
87
|
+
/**
|
|
88
|
+
* increment number by `inc`
|
|
89
|
+
* - should be atomic operation w/ thread safe.
|
|
90
|
+
*/
|
|
91
|
+
inc(key: CacheKey, inc: number): Promise<number>;
|
|
92
|
+
}
|
|
72
93
|
/**
|
|
73
94
|
* class `CacheService`
|
|
95
|
+
* - common service to provide cache
|
|
74
96
|
*/
|
|
75
|
-
export declare class CacheService {
|
|
97
|
+
export declare class CacheService<CacheValue = any> implements CacheSupportable<CacheValue> {
|
|
76
98
|
/**
|
|
77
99
|
* Environment variable name for cache server endpoint
|
|
78
100
|
* @static
|
|
@@ -98,6 +120,14 @@ export declare class CacheService {
|
|
|
98
120
|
* Namespace of cache key
|
|
99
121
|
*/
|
|
100
122
|
readonly ns: string;
|
|
123
|
+
/**
|
|
124
|
+
* the final options to create this service.
|
|
125
|
+
*/
|
|
126
|
+
readonly options: CacheOptions;
|
|
127
|
+
/**
|
|
128
|
+
* maker of cache-key
|
|
129
|
+
*/
|
|
130
|
+
readonly maker: CacheKeyMakable;
|
|
101
131
|
/**
|
|
102
132
|
* Cache backend instance
|
|
103
133
|
* @private
|
|
@@ -107,13 +137,39 @@ export declare class CacheService {
|
|
|
107
137
|
* Factory method
|
|
108
138
|
*
|
|
109
139
|
* @param options (optional) cache options
|
|
140
|
+
* @param maker (optional) custome cache-pkey generator.
|
|
110
141
|
* @static
|
|
111
142
|
*/
|
|
112
|
-
static create(options?: CacheOptions): CacheService;
|
|
143
|
+
static create(options?: CacheOptions, maker?: CacheKeyMakable): CacheService;
|
|
144
|
+
/**
|
|
145
|
+
* Protected constructor -> use CacheService.create()
|
|
146
|
+
* WARN! - do not create directly.˜
|
|
147
|
+
*
|
|
148
|
+
* @param backend cache backend object
|
|
149
|
+
* @param params params to create service.
|
|
150
|
+
* @protected
|
|
151
|
+
*/
|
|
152
|
+
protected constructor(backend: CacheBackend, params?: {
|
|
153
|
+
/** (optional) namespace of cache key (default: '') */
|
|
154
|
+
ns?: string;
|
|
155
|
+
/** (optional) the final options to create() */
|
|
156
|
+
options?: CacheOptions;
|
|
157
|
+
/** custom key-maker */
|
|
158
|
+
maker?: CacheKeyMakable;
|
|
159
|
+
});
|
|
113
160
|
/**
|
|
114
161
|
* Say hello
|
|
115
162
|
*/
|
|
116
163
|
hello(): string;
|
|
164
|
+
/**
|
|
165
|
+
* for convient, make another typed service.
|
|
166
|
+
* - it add `type` into key automatically.
|
|
167
|
+
*
|
|
168
|
+
* @param type model-type like 'test'
|
|
169
|
+
* @param delimiter (optional) delim bewteen type and key (default ':')
|
|
170
|
+
* @returns the typed CacheService
|
|
171
|
+
*/
|
|
172
|
+
cloneByType(type: string, delimiter?: string): CacheService<any>;
|
|
117
173
|
/**
|
|
118
174
|
* Close backend and connection
|
|
119
175
|
*/
|
|
@@ -145,7 +201,7 @@ export declare class CacheService {
|
|
|
145
201
|
* @param entries
|
|
146
202
|
* @return true on success
|
|
147
203
|
*/
|
|
148
|
-
setMulti(entries: CacheEntry[]): Promise<boolean>;
|
|
204
|
+
setMulti(entries: CacheEntry<CacheValue>[]): Promise<boolean>;
|
|
149
205
|
/**
|
|
150
206
|
* Retrieve a key
|
|
151
207
|
*
|
|
@@ -157,7 +213,7 @@ export declare class CacheService {
|
|
|
157
213
|
*
|
|
158
214
|
* @param keys
|
|
159
215
|
*/
|
|
160
|
-
getMulti(keys: CacheKey[]): Promise<KeyValueMap
|
|
216
|
+
getMulti(keys: CacheKey[]): Promise<KeyValueMap<CacheValue>>;
|
|
161
217
|
/**
|
|
162
218
|
* Increment the integer value of a key
|
|
163
219
|
*
|
|
@@ -165,6 +221,10 @@ export declare class CacheService {
|
|
|
165
221
|
* @param inc number to increment
|
|
166
222
|
*/
|
|
167
223
|
increment(key: CacheKey, inc: number): Promise<number>;
|
|
224
|
+
/**
|
|
225
|
+
* same as increment()
|
|
226
|
+
*/
|
|
227
|
+
inc(key: CacheKey, inc: number): Promise<number>;
|
|
168
228
|
/**
|
|
169
229
|
* Set the value of a key and return its old value
|
|
170
230
|
*/
|
|
@@ -212,21 +272,13 @@ export declare class CacheService {
|
|
|
212
272
|
* @param key
|
|
213
273
|
*/
|
|
214
274
|
removeTimeout(key: CacheKey): Promise<boolean>;
|
|
215
|
-
/**
|
|
216
|
-
* Protected constructor -> use CacheService.create()
|
|
217
|
-
*
|
|
218
|
-
* @param backend cache backend object
|
|
219
|
-
* @param ns (optional) namespace of cache key (default: '')
|
|
220
|
-
* @protected
|
|
221
|
-
*/
|
|
222
|
-
protected constructor(backend: CacheBackend, ns?: string);
|
|
223
275
|
/**
|
|
224
276
|
* Get namespace prefixed cache key
|
|
225
277
|
*
|
|
226
278
|
* @param key
|
|
227
279
|
* @protected
|
|
228
280
|
*/
|
|
229
|
-
|
|
281
|
+
asNamespacedKey(key: CacheKey): string;
|
|
230
282
|
}
|
|
231
283
|
/**
|
|
232
284
|
* class `DummyCacheService`: use 'node-cache' library
|
|
@@ -19,6 +19,8 @@ exports.fromTTL = exports.toTTL = exports.sleep = exports.DummyCacheService = ex
|
|
|
19
19
|
*
|
|
20
20
|
* @author Tim Hong <tim@lemoncloud.io>
|
|
21
21
|
* @date 2020-12-02 initial version
|
|
22
|
+
* @author Steve <steve@lemoncloud.io>
|
|
23
|
+
* @date 2022-04-01 optimized for `AbstractProxy`
|
|
22
24
|
*
|
|
23
25
|
* @copyright (C) lemoncloud.io 2020 - All Rights Reserved.
|
|
24
26
|
*/
|
|
@@ -26,43 +28,48 @@ const util_1 = require("util");
|
|
|
26
28
|
const node_cache_1 = __importDefault(require("node-cache"));
|
|
27
29
|
const memcached_1 = __importDefault(require("memcached"));
|
|
28
30
|
const ioredis_1 = __importDefault(require("ioredis"));
|
|
29
|
-
const engine_1 = require("
|
|
30
|
-
//
|
|
31
|
-
const NS = engine_1.$U.NS('CCHS', 'green');
|
|
32
|
-
/** ********************************************************************************************************************
|
|
33
|
-
* Exported Class
|
|
34
|
-
** ********************************************************************************************************************/
|
|
31
|
+
const engine_1 = require("../../engine");
|
|
32
|
+
const NS = engine_1.$U.NS('CCHS', 'green'); // NAMESPACE TO BE PRINTED.
|
|
35
33
|
/**
|
|
36
34
|
* class `CacheService`
|
|
35
|
+
* - common service to provide cache
|
|
37
36
|
*/
|
|
38
37
|
class CacheService {
|
|
39
38
|
/**
|
|
40
39
|
* Protected constructor -> use CacheService.create()
|
|
40
|
+
* WARN! - do not create directly.˜
|
|
41
41
|
*
|
|
42
|
-
* @param backend
|
|
43
|
-
* @param
|
|
42
|
+
* @param backend cache backend object
|
|
43
|
+
* @param params params to create service.
|
|
44
44
|
* @protected
|
|
45
45
|
*/
|
|
46
|
-
constructor(backend,
|
|
47
|
-
|
|
46
|
+
constructor(backend, params) {
|
|
47
|
+
if (!backend)
|
|
48
|
+
throw new Error(`@backend (cache-backend) is required!`);
|
|
49
|
+
const ns = (params === null || params === void 0 ? void 0 : params.ns) || '';
|
|
50
|
+
(0, engine_1._inf)(NS, `! cache-service instantiated with [${backend.name}] backend. [ns=${ns}]`);
|
|
48
51
|
this.backend = backend;
|
|
49
52
|
this.ns = ns;
|
|
53
|
+
this.options = params.options;
|
|
54
|
+
this.maker = params === null || params === void 0 ? void 0 : params.maker;
|
|
50
55
|
}
|
|
51
56
|
/**
|
|
52
57
|
* Factory method
|
|
53
58
|
*
|
|
54
59
|
* @param options (optional) cache options
|
|
60
|
+
* @param maker (optional) custome cache-pkey generator.
|
|
55
61
|
* @static
|
|
56
62
|
*/
|
|
57
|
-
static create(options) {
|
|
63
|
+
static create(options, maker) {
|
|
58
64
|
const type = (options === null || options === void 0 ? void 0 : options.type) || 'redis';
|
|
59
65
|
const endpoint = (options === null || options === void 0 ? void 0 : options.endpoint) || engine_1.$U.env(CacheService.ENV_CACHE_ENDPOINT);
|
|
60
66
|
const ns = (options === null || options === void 0 ? void 0 : options.ns) || '';
|
|
61
67
|
const defTimeout = engine_1.$U.N(options === null || options === void 0 ? void 0 : options.defTimeout, engine_1.$U.N(engine_1.$U.env(CacheService.ENV_CACHE_DEFAULT_TIMEOUT), CacheService.DEF_CACHE_DEFAULT_TIMEOUT));
|
|
62
|
-
|
|
63
|
-
engine_1._log(NS, `
|
|
64
|
-
engine_1._log(NS, ` >
|
|
65
|
-
engine_1._log(NS, ` >
|
|
68
|
+
options = Object.assign(Object.assign({}, options), { type, endpoint, ns, defTimeout });
|
|
69
|
+
(0, engine_1._log)(NS, `constructing [${type}] cache ...`);
|
|
70
|
+
(0, engine_1._log)(NS, ` > endpoint =`, endpoint);
|
|
71
|
+
(0, engine_1._log)(NS, ` > ns =`, ns);
|
|
72
|
+
(0, engine_1._log)(NS, ` > defTimeout =`, defTimeout);
|
|
66
73
|
let backend;
|
|
67
74
|
switch (type) {
|
|
68
75
|
case 'memcached':
|
|
@@ -72,9 +79,9 @@ class CacheService {
|
|
|
72
79
|
backend = new RedisBackend(endpoint, defTimeout);
|
|
73
80
|
break;
|
|
74
81
|
default:
|
|
75
|
-
throw new Error(`@type [${type}] is invalid
|
|
82
|
+
throw new Error(`@type [${type}] is invalid - CacheService.create()`);
|
|
76
83
|
}
|
|
77
|
-
return new CacheService(backend, ns);
|
|
84
|
+
return new CacheService(backend, { ns, options, maker });
|
|
78
85
|
}
|
|
79
86
|
/**
|
|
80
87
|
* Say hello
|
|
@@ -82,6 +89,19 @@ class CacheService {
|
|
|
82
89
|
hello() {
|
|
83
90
|
return `cache-service:${this.backend.name}:${this.ns}`;
|
|
84
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* for convient, make another typed service.
|
|
94
|
+
* - it add `type` into key automatically.
|
|
95
|
+
*
|
|
96
|
+
* @param type model-type like 'test'
|
|
97
|
+
* @param delimiter (optional) delim bewteen type and key (default ':')
|
|
98
|
+
* @returns the typed CacheService
|
|
99
|
+
*/
|
|
100
|
+
cloneByType(type, delimiter = ':') {
|
|
101
|
+
const { backend, ns, options } = this;
|
|
102
|
+
const maker = (ns, delim, key) => this.asNamespacedKey(`${type}${delimiter}${key}`);
|
|
103
|
+
return new CacheService(backend, { ns, options, maker });
|
|
104
|
+
}
|
|
85
105
|
/**
|
|
86
106
|
* Close backend and connection
|
|
87
107
|
*/
|
|
@@ -99,7 +119,7 @@ class CacheService {
|
|
|
99
119
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
120
|
const namespacedKey = this.asNamespacedKey(key);
|
|
101
121
|
const ret = yield this.backend.has(namespacedKey);
|
|
102
|
-
engine_1._log(NS, `.exists ${namespacedKey} / ret =`, ret);
|
|
122
|
+
(0, engine_1._log)(NS, `.exists ${namespacedKey} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
103
123
|
return ret;
|
|
104
124
|
});
|
|
105
125
|
}
|
|
@@ -117,7 +137,7 @@ class CacheService {
|
|
|
117
137
|
keys.push(key);
|
|
118
138
|
return keys;
|
|
119
139
|
}, []);
|
|
120
|
-
engine_1._log(NS, `.keys / ret =`, ret);
|
|
140
|
+
(0, engine_1._log)(NS, `.keys / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
121
141
|
return ret;
|
|
122
142
|
});
|
|
123
143
|
}
|
|
@@ -138,7 +158,7 @@ class CacheService {
|
|
|
138
158
|
const namespacedKey = this.asNamespacedKey(key);
|
|
139
159
|
const ttl = timeout && toTTL(timeout);
|
|
140
160
|
const ret = yield this.backend.set(namespacedKey, val, ttl);
|
|
141
|
-
engine_1._log(NS, `.set ${namespacedKey} ${val} / ret =`, engine_1.$U.json(ret));
|
|
161
|
+
(0, engine_1._log)(NS, `.set ${namespacedKey} ${val} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
142
162
|
return ret;
|
|
143
163
|
});
|
|
144
164
|
}
|
|
@@ -162,7 +182,7 @@ class CacheService {
|
|
|
162
182
|
};
|
|
163
183
|
});
|
|
164
184
|
const ret = yield this.backend.mset(param);
|
|
165
|
-
engine_1._log(NS, `.setMulti ${entries.map(entry => entry.key)} / ret =`, engine_1.$U.json(ret));
|
|
185
|
+
(0, engine_1._log)(NS, `.setMulti ${entries.map(entry => entry.key)} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
166
186
|
return ret;
|
|
167
187
|
});
|
|
168
188
|
}
|
|
@@ -177,7 +197,7 @@ class CacheService {
|
|
|
177
197
|
throw new Error(`@key (CacheKey) is required.`);
|
|
178
198
|
const namespacedKey = this.asNamespacedKey(key);
|
|
179
199
|
const ret = yield this.backend.get(namespacedKey);
|
|
180
|
-
engine_1._log(NS, `.get ${namespacedKey} / ret =`, engine_1.$U.json(ret));
|
|
200
|
+
(0, engine_1._log)(NS, `.get ${namespacedKey} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
181
201
|
return ret;
|
|
182
202
|
});
|
|
183
203
|
}
|
|
@@ -200,7 +220,7 @@ class CacheService {
|
|
|
200
220
|
newMap[key] = val;
|
|
201
221
|
return newMap;
|
|
202
222
|
}, {});
|
|
203
|
-
engine_1._log(NS, `.getMulti ${namespacedKeys} / ret =`, engine_1.$U.json(ret));
|
|
223
|
+
(0, engine_1._log)(NS, `.getMulti ${namespacedKeys} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
204
224
|
return ret;
|
|
205
225
|
});
|
|
206
226
|
}
|
|
@@ -218,10 +238,16 @@ class CacheService {
|
|
|
218
238
|
throw new Error(`@inc (number) cannot be undefined.`);
|
|
219
239
|
const namespacedKey = this.asNamespacedKey(key);
|
|
220
240
|
const ret = yield this.backend.incr(namespacedKey, inc);
|
|
221
|
-
engine_1._log(NS, `.increment ${namespacedKey} ${inc} / ret =`, engine_1.$U.json(ret));
|
|
241
|
+
(0, engine_1._log)(NS, `.increment ${namespacedKey} ${inc} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
222
242
|
return ret;
|
|
223
243
|
});
|
|
224
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* same as increment()
|
|
247
|
+
*/
|
|
248
|
+
inc(key, inc) {
|
|
249
|
+
return this.increment(key, inc);
|
|
250
|
+
}
|
|
225
251
|
/**
|
|
226
252
|
* Set the value of a key and return its old value
|
|
227
253
|
*/
|
|
@@ -246,7 +272,7 @@ class CacheService {
|
|
|
246
272
|
if (!(yield this.backend.set(namespacedKey, val, ttl)))
|
|
247
273
|
throw new Error(`getAndSet() failed`);
|
|
248
274
|
}
|
|
249
|
-
engine_1._log(NS, `.getAndSet ${namespacedKey} ${val} / ret =`, engine_1.$U.json(ret));
|
|
275
|
+
(0, engine_1._log)(NS, `.getAndSet ${namespacedKey} ${val} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
250
276
|
return ret;
|
|
251
277
|
});
|
|
252
278
|
}
|
|
@@ -268,7 +294,7 @@ class CacheService {
|
|
|
268
294
|
ret = yield this.backend.get(namespacedKey);
|
|
269
295
|
yield this.backend.del(namespacedKey);
|
|
270
296
|
}
|
|
271
|
-
engine_1._log(NS, `.getAndDelete ${namespacedKey} / ret =`, engine_1.$U.json(ret));
|
|
297
|
+
(0, engine_1._log)(NS, `.getAndDelete ${namespacedKey} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
272
298
|
return ret;
|
|
273
299
|
});
|
|
274
300
|
}
|
|
@@ -284,7 +310,7 @@ class CacheService {
|
|
|
284
310
|
throw new Error(`@key (CacheKey) is required.`);
|
|
285
311
|
const namespacedKey = this.asNamespacedKey(key);
|
|
286
312
|
const ret = yield this.backend.del(namespacedKey);
|
|
287
|
-
engine_1._log(NS, `.delete ${namespacedKey} / ret =`, engine_1.$U.json(ret));
|
|
313
|
+
(0, engine_1._log)(NS, `.delete ${namespacedKey} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
288
314
|
return ret;
|
|
289
315
|
});
|
|
290
316
|
}
|
|
@@ -303,7 +329,7 @@ class CacheService {
|
|
|
303
329
|
});
|
|
304
330
|
const promises = namespacedKeys.map(namespacedKey => this.backend.del(namespacedKey));
|
|
305
331
|
const ret = yield Promise.all(promises);
|
|
306
|
-
engine_1._log(NS, `.deleteMulti ${namespacedKeys} / ret =`, engine_1.$U.json(ret));
|
|
332
|
+
(0, engine_1._log)(NS, `.deleteMulti ${namespacedKeys} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
307
333
|
return ret;
|
|
308
334
|
});
|
|
309
335
|
}
|
|
@@ -320,7 +346,7 @@ class CacheService {
|
|
|
320
346
|
throw new Error(`@key (CacheKey) is required.`);
|
|
321
347
|
const namespacedKey = this.asNamespacedKey(key);
|
|
322
348
|
const ret = yield this.backend.expire(namespacedKey, toTTL(timeout));
|
|
323
|
-
engine_1._log(NS, `.setTimeout ${namespacedKey} ${timeout} / ret =`, engine_1.$U.json(ret));
|
|
349
|
+
(0, engine_1._log)(NS, `.setTimeout ${namespacedKey} ${timeout} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
324
350
|
return ret;
|
|
325
351
|
});
|
|
326
352
|
}
|
|
@@ -338,7 +364,7 @@ class CacheService {
|
|
|
338
364
|
throw new Error(`@key (CacheKey) is required.`);
|
|
339
365
|
const namespacedKey = this.asNamespacedKey(key);
|
|
340
366
|
const ret = yield this.backend.ttl(namespacedKey);
|
|
341
|
-
engine_1._log(NS, `.getTimeout ${namespacedKey} / ret =`, engine_1.$U.json(ret));
|
|
367
|
+
(0, engine_1._log)(NS, `.getTimeout ${namespacedKey} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
342
368
|
return ret;
|
|
343
369
|
});
|
|
344
370
|
}
|
|
@@ -353,7 +379,7 @@ class CacheService {
|
|
|
353
379
|
throw new Error(`@key (CacheKey) is required.`);
|
|
354
380
|
const namespacedKey = this.asNamespacedKey(key);
|
|
355
381
|
const ret = yield this.backend.expire(namespacedKey, 0);
|
|
356
|
-
engine_1._log(NS, `.removeTimeout ${namespacedKey} / ret =`, engine_1.$U.json(ret));
|
|
382
|
+
(0, engine_1._log)(NS, `.removeTimeout ${namespacedKey} / ret =`, typeof ret === 'string' ? ret : engine_1.$U.json(ret));
|
|
357
383
|
return ret;
|
|
358
384
|
});
|
|
359
385
|
}
|
|
@@ -364,7 +390,10 @@ class CacheService {
|
|
|
364
390
|
* @protected
|
|
365
391
|
*/
|
|
366
392
|
asNamespacedKey(key) {
|
|
367
|
-
|
|
393
|
+
const [ns, delim] = [this.ns, CacheService.NAMESPACE_DELIMITER];
|
|
394
|
+
if (this.maker)
|
|
395
|
+
return this.maker(ns, delim, key);
|
|
396
|
+
return `${ns}${delim}${key}`;
|
|
368
397
|
}
|
|
369
398
|
}
|
|
370
399
|
exports.CacheService = CacheService;
|
|
@@ -402,12 +431,13 @@ class DummyCacheService extends CacheService {
|
|
|
402
431
|
static create(options) {
|
|
403
432
|
const ns = (options === null || options === void 0 ? void 0 : options.ns) || '';
|
|
404
433
|
const defTimeout = engine_1.$U.N(options === null || options === void 0 ? void 0 : options.defTimeout, engine_1.$U.N(engine_1.$U.env(CacheService.ENV_CACHE_DEFAULT_TIMEOUT), CacheService.DEF_CACHE_DEFAULT_TIMEOUT));
|
|
405
|
-
|
|
434
|
+
options = Object.assign(Object.assign({}, options), { ns, defTimeout });
|
|
435
|
+
(0, engine_1._log)(NS, `constructing dummy cache ...`);
|
|
406
436
|
// NOTE: Use singleton backend instance
|
|
407
437
|
// because node-cache is volatile and client instance does not share keys with other instance
|
|
408
438
|
if (!DummyCacheService.backend)
|
|
409
439
|
DummyCacheService.backend = new NodeCacheBackend(defTimeout);
|
|
410
|
-
return new DummyCacheService(DummyCacheService.backend, ns);
|
|
440
|
+
return new DummyCacheService(DummyCacheService.backend, { ns, options });
|
|
411
441
|
}
|
|
412
442
|
/**
|
|
413
443
|
* Say hello
|
|
@@ -597,13 +627,13 @@ class MemcachedBackend {
|
|
|
597
627
|
const memcached = new memcached_1.default(endpoint || 'localhost:11211');
|
|
598
628
|
// Build promisified API map
|
|
599
629
|
this.api = {
|
|
600
|
-
get: util_1.promisify(memcached.get.bind(memcached)),
|
|
601
|
-
gets: util_1.promisify(memcached.gets.bind(memcached)),
|
|
602
|
-
getMulti: util_1.promisify(memcached.getMulti.bind(memcached)),
|
|
603
|
-
set: util_1.promisify(memcached.set.bind(memcached)),
|
|
604
|
-
cas: util_1.promisify(memcached.cas.bind(memcached)),
|
|
605
|
-
del: util_1.promisify(memcached.del.bind(memcached)),
|
|
606
|
-
items: util_1.promisify(memcached.items.bind(memcached)),
|
|
630
|
+
get: (0, util_1.promisify)(memcached.get.bind(memcached)),
|
|
631
|
+
gets: (0, util_1.promisify)(memcached.gets.bind(memcached)),
|
|
632
|
+
getMulti: (0, util_1.promisify)(memcached.getMulti.bind(memcached)),
|
|
633
|
+
set: (0, util_1.promisify)(memcached.set.bind(memcached)),
|
|
634
|
+
cas: (0, util_1.promisify)(memcached.cas.bind(memcached)),
|
|
635
|
+
del: (0, util_1.promisify)(memcached.del.bind(memcached)),
|
|
636
|
+
items: (0, util_1.promisify)(memcached.items.bind(memcached)),
|
|
607
637
|
cachedump: (server, slabid, number) => {
|
|
608
638
|
return new Promise((resolve, reject) => {
|
|
609
639
|
memcached.cachedump(server, slabid, number, (err, cachedump) => {
|
|
@@ -627,7 +657,7 @@ class MemcachedBackend {
|
|
|
627
657
|
set(key, val, ttl = this.defTTL) {
|
|
628
658
|
return __awaiter(this, void 0, void 0, function* () {
|
|
629
659
|
const entry = { val, exp: fromTTL(ttl) };
|
|
630
|
-
engine_1._log(NS, `[${this.name}-backend] storing to key [${key}] =`, engine_1.$U.json(entry));
|
|
660
|
+
(0, engine_1._log)(NS, `[${this.name}-backend] storing to key [${key}] =`, engine_1.$U.json(entry));
|
|
631
661
|
return yield this.api.set(key, entry, ttl);
|
|
632
662
|
});
|
|
633
663
|
}
|
|
@@ -637,7 +667,7 @@ class MemcachedBackend {
|
|
|
637
667
|
get(key) {
|
|
638
668
|
return __awaiter(this, void 0, void 0, function* () {
|
|
639
669
|
const entry = yield this.api.get(key);
|
|
640
|
-
engine_1._log(NS, `[${this.name}-backend] entry fetched =`, engine_1.$U.json(entry));
|
|
670
|
+
(0, engine_1._log)(NS, `[${this.name}-backend] entry fetched =`, engine_1.$U.json(entry));
|
|
641
671
|
return entry && entry.val;
|
|
642
672
|
});
|
|
643
673
|
}
|
|
@@ -646,10 +676,10 @@ class MemcachedBackend {
|
|
|
646
676
|
*/
|
|
647
677
|
mset(entries) {
|
|
648
678
|
return __awaiter(this, void 0, void 0, function* () {
|
|
649
|
-
engine_1._log(NS, `[${this.name}-backend] storing multiple keys ...`);
|
|
679
|
+
(0, engine_1._log)(NS, `[${this.name}-backend] storing multiple keys ...`);
|
|
650
680
|
const promises = entries.map(({ key, val, ttl = this.defTTL }, idx) => {
|
|
651
681
|
const entry = { val, exp: fromTTL(ttl) };
|
|
652
|
-
engine_1._log(NS, ` ${idx}) key [${key}] =`, engine_1.$U.json(entry));
|
|
682
|
+
(0, engine_1._log)(NS, ` ${idx}) key [${key}] =`, engine_1.$U.json(entry));
|
|
653
683
|
return this.api.set(key, entry, ttl);
|
|
654
684
|
});
|
|
655
685
|
const results = yield Promise.all(promises);
|
|
@@ -662,7 +692,7 @@ class MemcachedBackend {
|
|
|
662
692
|
mget(keys) {
|
|
663
693
|
return __awaiter(this, void 0, void 0, function* () {
|
|
664
694
|
const map = yield this.api.getMulti(keys);
|
|
665
|
-
engine_1._log(NS, `[${this.name}-backend] entry map fetched =`, engine_1.$U.json(map));
|
|
695
|
+
(0, engine_1._log)(NS, `[${this.name}-backend] entry map fetched =`, engine_1.$U.json(map));
|
|
666
696
|
Object.keys(map).forEach(key => {
|
|
667
697
|
const entry = map[key];
|
|
668
698
|
map[key] = entry.val;
|
|
@@ -678,7 +708,7 @@ class MemcachedBackend {
|
|
|
678
708
|
// NOTE:
|
|
679
709
|
// Memcached는 음수에 대한 incr/decr를 지원하지 않으며 0 미만으로 decr 되지 않는다.
|
|
680
710
|
// 이런 이유로 sets & cas 조합을 이용해 직접 구현함
|
|
681
|
-
engine_1._log(NS, `[${this.name}-backend] incrementing (${increment}) to key [${key}] ...`);
|
|
711
|
+
(0, engine_1._log)(NS, `[${this.name}-backend] incrementing (${increment}) to key [${key}] ...`);
|
|
682
712
|
// Use get/check-and-save + retry strategy for consistency
|
|
683
713
|
for (let retry = 0; retry < 5; yield sleep(10), retry++) {
|
|
684
714
|
const result = yield this.api.gets(key); // Get entry w/ CAS id
|