lemon-core 4.3.0 → 5.0.1
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 +127 -2
- package/dist/common/lemon-error.d.ts +34 -0
- package/dist/common/lemon-error.js +52 -0
- package/dist/common/lemon-error.js.map +1 -0
- package/dist/controllers/general-api-controller.d.ts +7 -0
- package/dist/controllers/general-api-controller.js +7 -0
- package/dist/controllers/general-api-controller.js.map +1 -1
- package/dist/cores/api/api-service.js +10 -43
- package/dist/cores/api/api-service.js.map +1 -1
- package/dist/cores/aws/aws-kms-service.d.ts +13 -5
- package/dist/cores/aws/aws-kms-service.js +23 -9
- package/dist/cores/aws/aws-kms-service.js.map +1 -1
- package/dist/cores/aws/aws-s3-service.d.ts +30 -4
- package/dist/cores/aws/aws-s3-service.js +35 -15
- package/dist/cores/aws/aws-s3-service.js.map +1 -1
- package/dist/cores/aws/aws-sns-service.js +59 -9
- package/dist/cores/aws/aws-sns-service.js.map +1 -1
- package/dist/cores/aws/aws-sqs-service.d.ts +1 -1
- package/dist/cores/aws/aws-sqs-service.js +54 -12
- package/dist/cores/aws/aws-sqs-service.js.map +1 -1
- package/dist/cores/cache/cache-service.d.ts +10 -9
- package/dist/cores/cache/cache-service.js +9 -346
- package/dist/cores/cache/cache-service.js.map +1 -1
- package/dist/cores/config/config-service.d.ts +3 -15
- package/dist/cores/config/config-service.js +5 -34
- package/dist/cores/config/config-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-query-service.js +42 -2
- package/dist/cores/dynamo/dynamo-query-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-scan-service.js +42 -2
- package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-service.d.ts +45 -14
- package/dist/cores/dynamo/dynamo-service.js +48 -21
- package/dist/cores/dynamo/dynamo-service.js.map +1 -1
- package/dist/cores/dynamo/tools/expressions.js +32 -22
- package/dist/cores/dynamo/tools/expressions.js.map +1 -1
- package/dist/cores/dynamo/tools/lang.d.ts +30 -0
- package/dist/cores/dynamo/tools/lang.js +75 -0
- package/dist/cores/dynamo/tools/lang.js.map +1 -0
- package/dist/cores/dynamo/tools/query.js +20 -21
- package/dist/cores/dynamo/tools/query.js.map +1 -1
- package/dist/cores/dynamo/tools/scan.js +15 -16
- package/dist/cores/dynamo/tools/scan.js.map +1 -1
- package/dist/cores/dynamo/tools/serializer.js +40 -38
- package/dist/cores/dynamo/tools/serializer.js.map +1 -1
- package/dist/cores/dynamo/tools/utils.d.ts +6 -2
- package/dist/cores/dynamo/tools/utils.js +11 -8
- package/dist/cores/dynamo/tools/utils.js.map +1 -1
- package/dist/cores/elastic/elastic6-query-service.d.ts +1 -104
- package/dist/cores/elastic/elastic6-query-service.js +15 -489
- package/dist/cores/elastic/elastic6-query-service.js.map +1 -1
- package/dist/cores/elastic/elastic6-service.d.ts +1 -482
- package/dist/cores/elastic/elastic6-service.js +15 -1153
- package/dist/cores/elastic/elastic6-service.js.map +1 -1
- package/dist/cores/elastic/index.d.ts +2 -2
- package/dist/cores/elastic/index.js +3 -2
- package/dist/cores/elastic/index.js.map +1 -1
- package/dist/cores/elastic/os2-query-service.d.ts +104 -0
- package/dist/cores/elastic/os2-query-service.js +495 -0
- package/dist/cores/elastic/os2-query-service.js.map +1 -0
- package/dist/cores/elastic/os2-service.d.ts +372 -0
- package/dist/cores/elastic/os2-service.js +943 -0
- package/dist/cores/elastic/os2-service.js.map +1 -0
- package/dist/cores/index.d.ts +6 -1
- package/dist/cores/index.js +9 -2
- package/dist/cores/index.js.map +1 -1
- package/dist/cores/lambda/index.js +2 -1
- package/dist/cores/lambda/index.js.map +1 -1
- package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-cron-handler.js +5 -1
- package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +5 -4
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js +18 -5
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-handler.d.ts +22 -2
- package/dist/cores/lambda/lambda-handler.js +85 -23
- package/dist/cores/lambda/lambda-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sns-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-sns-handler.js +5 -0
- package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sqs-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-sqs-handler.js +20 -5
- package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-web-handler.d.ts +10 -0
- package/dist/cores/lambda/lambda-web-handler.js +107 -41
- package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
- package/dist/cores/protocol/aws-lambda-helper.js +58 -11
- package/dist/cores/protocol/aws-lambda-helper.js.map +1 -1
- package/dist/cores/protocol/index.js +3 -0
- package/dist/cores/protocol/index.js.map +1 -1
- package/dist/cores/protocol/protocol-service.d.ts +26 -5
- package/dist/cores/protocol/protocol-service.js +42 -12
- package/dist/cores/protocol/protocol-service.js.map +1 -1
- package/dist/cores/protocol/protocol-sign.d.ts +72 -0
- package/dist/cores/protocol/protocol-sign.js +194 -0
- package/dist/cores/protocol/protocol-sign.js.map +1 -0
- package/dist/cores/storage/index.d.ts +0 -1
- package/dist/cores/storage/index.js +0 -1
- package/dist/cores/storage/index.js.map +1 -1
- package/dist/cores/storage/model-fields.d.ts +7 -0
- package/dist/cores/storage/model-fields.js +21 -0
- package/dist/cores/storage/model-fields.js.map +1 -0
- package/dist/cores/storage/model-manager.d.ts +5 -2
- package/dist/cores/storage/model-manager.js +11 -3
- package/dist/cores/storage/model-manager.js.map +1 -1
- package/dist/engine/builder.js +20 -2
- package/dist/engine/builder.js.map +1 -1
- package/dist/engine/engine.d.ts +2 -2
- package/dist/engine/engine.js +5 -5
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/utilities.d.ts +20 -12
- package/dist/engine/utilities.js +57 -86
- package/dist/engine/utilities.js.map +1 -1
- package/dist/environ.d.ts +0 -6
- package/dist/environ.js +1 -12
- package/dist/environ.js.map +1 -1
- package/dist/esm/index.mjs +141 -0
- package/dist/esm/testing.mjs +12 -0
- package/dist/extended/abstract-service.d.ts +48 -139
- package/dist/extended/abstract-service.js +46 -382
- package/dist/extended/abstract-service.js.map +1 -1
- package/dist/extended/cores/abstract-controllers.d.ts +25 -0
- package/dist/extended/cores/abstract-controllers.js +77 -7
- package/dist/extended/cores/abstract-controllers.js.map +1 -1
- package/dist/extended/cores/abstract-rest-apis.d.ts +2 -1
- package/dist/extended/cores/abstract-rest-apis.js +2 -1
- package/dist/extended/cores/abstract-rest-apis.js.map +1 -1
- package/dist/extended/cores/abstract-services.d.ts +48 -87
- package/dist/extended/cores/abstract-services.js +121 -248
- package/dist/extended/cores/abstract-services.js.map +1 -1
- package/dist/extended/cores/commons.d.ts +4 -113
- package/dist/extended/cores/commons.js +26 -180
- package/dist/extended/cores/commons.js.map +1 -1
- package/dist/extended/cores/fields-admin.d.ts +91 -0
- package/dist/extended/cores/fields-admin.js +142 -0
- package/dist/extended/cores/fields-admin.js.map +1 -0
- package/dist/extended/cores/index.d.ts +2 -0
- package/dist/extended/cores/index.js +2 -0
- package/dist/extended/cores/index.js.map +1 -1
- package/dist/extended/cores/types.d.ts +3 -225
- package/dist/extended/cores/types.js +28 -0
- package/dist/extended/cores/types.js.map +1 -1
- package/dist/helpers/helpers.d.ts +10 -5
- package/dist/helpers/helpers.js +46 -58
- package/dist/helpers/helpers.js.map +1 -1
- package/dist/helpers/types.d.ts +22 -10
- package/dist/index.d.ts +1 -5
- package/dist/index.js +8 -14
- package/dist/index.js.map +1 -1
- package/dist/lib/http-fetch.d.ts +54 -0
- package/dist/lib/http-fetch.js +133 -0
- package/dist/lib/http-fetch.js.map +1 -0
- package/dist/lib/lazy.d.ts +22 -0
- package/dist/lib/lazy.js +54 -0
- package/dist/lib/lazy.js.map +1 -0
- package/dist/lib/perf.d.ts +35 -0
- package/dist/lib/perf.js +52 -0
- package/dist/lib/perf.js.map +1 -0
- package/dist/tools/tools.d.ts +15 -3
- package/dist/tools/tools.js +21 -4
- package/dist/tools/tools.js.map +1 -1
- package/package.json +96 -39
- package/dist/cores/storage/redis-storage-service.d.ts +0 -183
- package/dist/cores/storage/redis-storage-service.js +0 -377
- package/dist/cores/storage/redis-storage-service.js.map +0 -1
- package/dist/generated/field-registry.d.ts +0 -12
- package/dist/generated/field-registry.js +0 -21
- package/dist/generated/field-registry.js.map +0 -1
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DummyRedisStorageService = exports.RedisStorageService = void 0;
|
|
7
|
-
/**
|
|
8
|
-
* `redis-storage-services.ts`
|
|
9
|
-
* - storage implementation on redis backend
|
|
10
|
-
*
|
|
11
|
-
* @author Tim Hong <tim@lemoncloud.io>
|
|
12
|
-
* @date 2020-12-08 initial version
|
|
13
|
-
*
|
|
14
|
-
* @copyright (C) lemoncloud.io 2020 - All Rights Reserved.
|
|
15
|
-
*/
|
|
16
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
17
|
-
const engine_1 = require("../../engine");
|
|
18
|
-
// Log namespace
|
|
19
|
-
const NS = engine_1.$U.NS('RSTR', 'blue');
|
|
20
|
-
/** ********************************************************************************************************************
|
|
21
|
-
* Exported Class
|
|
22
|
-
** ********************************************************************************************************************/
|
|
23
|
-
/**
|
|
24
|
-
* class `RedisStorageService`
|
|
25
|
-
*/
|
|
26
|
-
class RedisStorageService {
|
|
27
|
-
/**
|
|
28
|
-
* Environment variable name for redis server endpoint
|
|
29
|
-
* @static
|
|
30
|
-
*/
|
|
31
|
-
static ENV_REDIS_ENDPOINT = 'MY_REDIS_ENDPOINT';
|
|
32
|
-
/**
|
|
33
|
-
* Maximum retry count of check-and-save behavior
|
|
34
|
-
* @static
|
|
35
|
-
*/
|
|
36
|
-
static CAS_MAX_RETRIES = 5;
|
|
37
|
-
/**
|
|
38
|
-
* ioredis client
|
|
39
|
-
* @protected
|
|
40
|
-
*/
|
|
41
|
-
redis;
|
|
42
|
-
/**
|
|
43
|
-
* Virtual table name
|
|
44
|
-
* @private
|
|
45
|
-
*/
|
|
46
|
-
tableName;
|
|
47
|
-
/**
|
|
48
|
-
* Default time to live of a model
|
|
49
|
-
* @private
|
|
50
|
-
*/
|
|
51
|
-
ttl;
|
|
52
|
-
/**
|
|
53
|
-
* Public constructor
|
|
54
|
-
*
|
|
55
|
-
* @options redis options
|
|
56
|
-
*/
|
|
57
|
-
constructor(options) {
|
|
58
|
-
const defTimeout = engine_1.$U.N(options?.defTimeout, 0);
|
|
59
|
-
if (typeof options.tableName === 'number') {
|
|
60
|
-
// For dummy: open in non-default database (db index > 0)
|
|
61
|
-
this.redis = new ioredis_1.default(options.endpoint, { db: options.tableName });
|
|
62
|
-
this.tableName = 'dummy';
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// For normal usage: open in default database (db index = 0) w/ virtual table
|
|
66
|
-
const endpoint = options.endpoint || engine_1.$U.env(RedisStorageService.ENV_REDIS_ENDPOINT);
|
|
67
|
-
const tableName = options.tableName;
|
|
68
|
-
if (!endpoint)
|
|
69
|
-
throw new Error(`.endpoint (URL) is required.`);
|
|
70
|
-
if (!tableName)
|
|
71
|
-
throw new Error(`.tableName (string) is required.`);
|
|
72
|
-
this.redis = new ioredis_1.default(endpoint, { keyPrefix: tableName });
|
|
73
|
-
this.tableName = tableName;
|
|
74
|
-
}
|
|
75
|
-
this.ttl = defTimeout;
|
|
76
|
-
(0, engine_1._inf)(NS, `RedisStorageService constructed.`);
|
|
77
|
-
(0, engine_1._inf)(NS, ` > tableName =`, this.tableName);
|
|
78
|
-
(0, engine_1._inf)(NS, ` > default TTL =`, this.ttl);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Say hello
|
|
82
|
-
*/
|
|
83
|
-
hello() {
|
|
84
|
-
return `redis-storage-service:${this.tableName}`;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Disconnect from redis
|
|
88
|
-
*/
|
|
89
|
-
async quit() {
|
|
90
|
-
await this.redis.quit();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Read model by id
|
|
94
|
-
*
|
|
95
|
-
* @param id
|
|
96
|
-
*/
|
|
97
|
-
async read(id) {
|
|
98
|
-
if (!id)
|
|
99
|
-
throw new Error(`@id is required.`);
|
|
100
|
-
const key = this.asKey(id);
|
|
101
|
-
const data = await this.redis.hgetall(key); // {} if the key does not exist
|
|
102
|
-
if (Object.keys(data).length > 0) {
|
|
103
|
-
const ret = this.deserialize(data);
|
|
104
|
-
(0, engine_1._log)(NS, `> read[${id}].ret =`, engine_1.$U.json(ret));
|
|
105
|
-
return ret;
|
|
106
|
-
}
|
|
107
|
-
throw new Error(`404 NOT FOUND - ${this.tableName}/${id}`);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Read model or create if id does not exist
|
|
111
|
-
*
|
|
112
|
-
* @param id
|
|
113
|
-
* @param model
|
|
114
|
-
*/
|
|
115
|
-
async readOrCreate(id, model) {
|
|
116
|
-
if (!id)
|
|
117
|
-
throw new Error(`@id is required.`);
|
|
118
|
-
if (!model)
|
|
119
|
-
throw new Error(`@model is required.`);
|
|
120
|
-
const key = this.asKey(id);
|
|
121
|
-
// check-and-save w/ retries to avoid race conditions
|
|
122
|
-
for (let retry = 0; retry < RedisStorageService.CAS_MAX_RETRIES; await sleep(10), retry++) {
|
|
123
|
-
await this.redis.watch(key); // Lock
|
|
124
|
-
let data = await this.redis.hgetall(key); // {} if the key does not exist
|
|
125
|
-
// 1. Return if a model found
|
|
126
|
-
if (Object.keys(data).length > 0) {
|
|
127
|
-
await this.redis.unwatch(); // Unlock
|
|
128
|
-
const ret = this.deserialize(data);
|
|
129
|
-
(0, engine_1._log)(NS, `> readOrCreate[${id}(read)].ret =`, engine_1.$U.json(ret));
|
|
130
|
-
return ret;
|
|
131
|
-
}
|
|
132
|
-
// 2. Otherwise try to create a new model
|
|
133
|
-
data = this.serialize({ ...model, id });
|
|
134
|
-
const pipeline = this.redis.multi().hset(key, data);
|
|
135
|
-
if (this.ttl > 0)
|
|
136
|
-
pipeline.expire(key, this.ttl);
|
|
137
|
-
const results = await pipeline.exec(); // Unlock, null if the key has been changed
|
|
138
|
-
if (results) {
|
|
139
|
-
RedisStorageService.throwIfTransactionError(results);
|
|
140
|
-
const ret = this.deserialize(data);
|
|
141
|
-
(0, engine_1._log)(NS, `> readOrCreate[${id}(created)].ret =`, engine_1.$U.json(ret));
|
|
142
|
-
return ret;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
const message = `transaction max retries exceeded.`;
|
|
146
|
-
(0, engine_1._err)(NS, `> readOrCreate[${id}].err =`, message);
|
|
147
|
-
throw new Error(`redis transaction error: ${message}`);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Create model and overwrite if id exists
|
|
151
|
-
*
|
|
152
|
-
* @param id
|
|
153
|
-
* @param model
|
|
154
|
-
*/
|
|
155
|
-
async save(id, model) {
|
|
156
|
-
if (!id)
|
|
157
|
-
throw new Error(`@id is required.`);
|
|
158
|
-
if (!model)
|
|
159
|
-
throw new Error(`@model is required.`);
|
|
160
|
-
const key = this.asKey(id);
|
|
161
|
-
const data = this.serialize({ ...model, id });
|
|
162
|
-
// Create transaction pipeline
|
|
163
|
-
const pipeline = this.redis
|
|
164
|
-
.multi()
|
|
165
|
-
.del(key) // TODO: 만약 save의 overwrite 정책이 기존 존재하는 키는 유지하는 것이라면 del()은 제거해야 함
|
|
166
|
-
.hset(key, data);
|
|
167
|
-
if (this.ttl > 0)
|
|
168
|
-
pipeline.expire(key, this.ttl);
|
|
169
|
-
// Execute transaction
|
|
170
|
-
const results = await pipeline.exec();
|
|
171
|
-
RedisStorageService.throwIfTransactionError(results);
|
|
172
|
-
const ret = this.deserialize(data);
|
|
173
|
-
(0, engine_1._log)(NS, `> save[${id}].ret =`, engine_1.$U.json(ret));
|
|
174
|
-
return ret;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Update existing model and create if id does not exist
|
|
178
|
-
* @param id
|
|
179
|
-
* @param update model to update
|
|
180
|
-
* @param increment (optional) model to increment
|
|
181
|
-
*/
|
|
182
|
-
async update(id, update, increment) {
|
|
183
|
-
if (!id)
|
|
184
|
-
throw new Error(`@id is required.`);
|
|
185
|
-
if (!update)
|
|
186
|
-
throw new Error(`@update is required.`);
|
|
187
|
-
const ret = await this.updateCAS(id, update, increment);
|
|
188
|
-
(0, engine_1._log)(NS, `> update[${id}].ret =`, engine_1.$U.json(ret));
|
|
189
|
-
return ret;
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Increment the integer value of a key
|
|
193
|
-
*
|
|
194
|
-
* @param id
|
|
195
|
-
* @param increment model to increment
|
|
196
|
-
* @param update (optional) model to update
|
|
197
|
-
*/
|
|
198
|
-
async increment(id, increment, update) {
|
|
199
|
-
if (!id)
|
|
200
|
-
throw new Error(`@id is required.`);
|
|
201
|
-
if (!increment)
|
|
202
|
-
throw new Error(`@increment is required.`);
|
|
203
|
-
const ret = await this.updateCAS(id, update, increment);
|
|
204
|
-
(0, engine_1._log)(NS, `> increment[${id}].ret =`, engine_1.$U.json(ret));
|
|
205
|
-
return ret;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Delete a key
|
|
209
|
-
*
|
|
210
|
-
* @param id
|
|
211
|
-
* @return true on success
|
|
212
|
-
*/
|
|
213
|
-
async delete(id) {
|
|
214
|
-
if (!id)
|
|
215
|
-
throw new Error(`@key is required.`);
|
|
216
|
-
const key = this.asKey(id);
|
|
217
|
-
// Execute transaction
|
|
218
|
-
const results = await this.redis
|
|
219
|
-
.multi()
|
|
220
|
-
.hgetall(key) // Read
|
|
221
|
-
.del(key) // And delete
|
|
222
|
-
.exec();
|
|
223
|
-
RedisStorageService.throwIfTransactionError(results);
|
|
224
|
-
const data = results[0][1];
|
|
225
|
-
if (data && Object.keys(data).length > 0) {
|
|
226
|
-
const ret = this.deserialize(data);
|
|
227
|
-
(0, engine_1._log)(NS, `> delete[${id}].ret =`, engine_1.$U.json(ret));
|
|
228
|
-
return ret;
|
|
229
|
-
}
|
|
230
|
-
throw new Error(`404 NOT FOUND - ${this.tableName}/${id}`);
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Get redis key from id
|
|
234
|
-
* @param id
|
|
235
|
-
* @protected
|
|
236
|
-
*/
|
|
237
|
-
asKey(id) {
|
|
238
|
-
return `${this.tableName}::${id}`;
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Serialize model into internal data
|
|
242
|
-
* @param model
|
|
243
|
-
* @protected
|
|
244
|
-
*/
|
|
245
|
-
serialize(model) {
|
|
246
|
-
return Object.entries(model).reduce((data, [key, val]) => {
|
|
247
|
-
if (val !== undefined)
|
|
248
|
-
data[key] = JSON.stringify(val);
|
|
249
|
-
return data;
|
|
250
|
-
}, {});
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Deserialize internal data into model
|
|
254
|
-
* @param data
|
|
255
|
-
* @protected
|
|
256
|
-
*/
|
|
257
|
-
deserialize(data) {
|
|
258
|
-
return Object.entries(data).reduce((model, [field, value]) => {
|
|
259
|
-
model[field] = JSON.parse(value);
|
|
260
|
-
return model;
|
|
261
|
-
}, {});
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Update key w/ check-and-save behavior and retries
|
|
265
|
-
* @param id
|
|
266
|
-
* @param update (optional) model to update
|
|
267
|
-
* @param increment (optional) model to increment
|
|
268
|
-
* @private
|
|
269
|
-
*/
|
|
270
|
-
async updateCAS(id, update, increment) {
|
|
271
|
-
const key = this.asKey(id);
|
|
272
|
-
// Use watch and transaction to avoid race conditions
|
|
273
|
-
for (let retry = 0; retry < RedisStorageService.CAS_MAX_RETRIES; await sleep(10), retry++) {
|
|
274
|
-
await this.redis.watch(key); // Lock
|
|
275
|
-
try {
|
|
276
|
-
// Evaluate new model to store
|
|
277
|
-
const curData = await this.redis.hgetall(key); // {} if the key does not exist
|
|
278
|
-
const curModel = this.deserialize(curData);
|
|
279
|
-
const newModel = this.prepareUpdatedModel(curModel, update, increment);
|
|
280
|
-
// Create transaction pipeline
|
|
281
|
-
const data = this.serialize({ ...newModel, id });
|
|
282
|
-
const pipeline = this.redis.multi().hset(key, data);
|
|
283
|
-
if (this.ttl > 0)
|
|
284
|
-
pipeline.expire(key, this.ttl);
|
|
285
|
-
// Execute transaction
|
|
286
|
-
const results = await pipeline.exec(); // Unlock, null if the key has been changed
|
|
287
|
-
if (results) {
|
|
288
|
-
RedisStorageService.throwIfTransactionError(results);
|
|
289
|
-
return this.deserialize(data);
|
|
290
|
-
}
|
|
291
|
-
// Retry until max retry count reached
|
|
292
|
-
}
|
|
293
|
-
catch (e) {
|
|
294
|
-
await this.redis.unwatch(); // Unlock explicitly
|
|
295
|
-
throw e; // Rethrow
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
const message = `transaction max retries exceeded.`;
|
|
299
|
-
(0, engine_1._err)(NS, `> updateCAS[${id}].err =`, message);
|
|
300
|
-
throw new Error(`redis error: ${message}`);
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Prepare new model - original model + update + increment
|
|
304
|
-
* @param orig
|
|
305
|
-
* @param update
|
|
306
|
-
* @param increment
|
|
307
|
-
* @private
|
|
308
|
-
*/
|
|
309
|
-
prepareUpdatedModel(orig, update, increment) {
|
|
310
|
-
const updated = Object.assign(orig, update);
|
|
311
|
-
if (increment) {
|
|
312
|
-
for (const [field, value] of Object.entries(increment)) {
|
|
313
|
-
const key = field;
|
|
314
|
-
const oldVal = updated[key] || orig[key] || 0;
|
|
315
|
-
if (typeof oldVal !== 'number') {
|
|
316
|
-
throw new Error(`.${key} is non-numeric field and cannot be incremented.`);
|
|
317
|
-
}
|
|
318
|
-
updated[key] = oldVal + value;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
return updated;
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Check transaction results and throw if error occurred
|
|
325
|
-
* @param results transaction pipeline execution results
|
|
326
|
-
* @private
|
|
327
|
-
*/
|
|
328
|
-
static throwIfTransactionError(results) {
|
|
329
|
-
if (!results)
|
|
330
|
-
throw new Error(`redis transaction failed: transaction aborted by key modification.`);
|
|
331
|
-
const err = results.map(result => result[0]).find(err => err !== null);
|
|
332
|
-
if (err)
|
|
333
|
-
throw new Error(`redis transaction failed: ${err.message}`);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
exports.RedisStorageService = RedisStorageService;
|
|
337
|
-
/**
|
|
338
|
-
* class `DummyRedisStorageService`
|
|
339
|
-
* - Use local redis server and non-default logical database
|
|
340
|
-
*/
|
|
341
|
-
class DummyRedisStorageService extends RedisStorageService {
|
|
342
|
-
/**
|
|
343
|
-
* Database index. Each DummyRedisStorageService uses different logical database.
|
|
344
|
-
* @private
|
|
345
|
-
*/
|
|
346
|
-
static dbIndex = 0;
|
|
347
|
-
/**
|
|
348
|
-
* Public constructor
|
|
349
|
-
*/
|
|
350
|
-
constructor() {
|
|
351
|
-
super({
|
|
352
|
-
endpoint: 'localhost:6379',
|
|
353
|
-
tableName: ++DummyRedisStorageService.dbIndex, // Open non-default DB
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* Say hello
|
|
358
|
-
*/
|
|
359
|
-
hello() {
|
|
360
|
-
return `dummy-redis-storage-service`;
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Delete all data in database
|
|
364
|
-
*/
|
|
365
|
-
async truncate() {
|
|
366
|
-
await this.redis.flushdb();
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
exports.DummyRedisStorageService = DummyRedisStorageService;
|
|
370
|
-
/**
|
|
371
|
-
* function `sleep`
|
|
372
|
-
* @param ms duration in milliseconds
|
|
373
|
-
*/
|
|
374
|
-
async function sleep(ms) {
|
|
375
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
376
|
-
}
|
|
377
|
-
//# sourceMappingURL=redis-storage-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redis-storage-service.js","sourceRoot":"","sources":["../../../src/cores/storage/redis-storage-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare const fieldKeys: {
|
|
2
|
-
readonly coreModel: <T extends object>() => Array<Extract<keyof T, string>>;
|
|
3
|
-
readonly myTestModel: <T extends object>() => Array<Extract<keyof T, string>>;
|
|
4
|
-
readonly testModel: <T extends object>() => Array<Extract<keyof T, string>>;
|
|
5
|
-
};
|
|
6
|
-
export declare const fieldRegistryMeta: {
|
|
7
|
-
readonly kind: "concrete";
|
|
8
|
-
readonly schemaVersion: 1;
|
|
9
|
-
readonly entryCount: 3;
|
|
10
|
-
readonly checksum: "f00dc1d624f9c0a3";
|
|
11
|
-
readonly generatedBy: "lemon-fields";
|
|
12
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fieldRegistryMeta = exports.fieldKeys = void 0;
|
|
4
|
-
// AUTO-GENERATED by lemon-devkit `lemon-fields` — do not edit manually.
|
|
5
|
-
// Regenerate: lemon-fields gen
|
|
6
|
-
exports.fieldKeys = {
|
|
7
|
-
// source: src/extended/cores/abstract-services.ts#CoreModel
|
|
8
|
-
coreModel: () => ["$", "ns", "type", "stereo", "sid", "uid", "gid", "lock", "next", "meta", "createdAt", "updatedAt", "deletedAt", "error", "id", "_id"],
|
|
9
|
-
// source: src/extended/cores/abstract-services.spec.ts#MyTestModel
|
|
10
|
-
myTestModel: () => ["name", "test", "extra", "Model", "$identity", "$", "ns", "type", "stereo", "sid", "uid", "gid", "lock", "next", "meta", "createdAt", "updatedAt", "deletedAt", "error", "id", "_id"],
|
|
11
|
-
// source: src/extended/abstract-service.spec.ts#TestModel
|
|
12
|
-
testModel: () => ["name", "test", "A", "AB", "A_B", "Model", "$model", "object$", "extra", "keepMe", "$", "ns", "type", "stereo", "sid", "uid", "gid", "lock", "next", "meta", "createdAt", "updatedAt", "deletedAt", "error", "id", "_id"],
|
|
13
|
-
};
|
|
14
|
-
exports.fieldRegistryMeta = {
|
|
15
|
-
"kind": "concrete",
|
|
16
|
-
"schemaVersion": 1,
|
|
17
|
-
"entryCount": 3,
|
|
18
|
-
"checksum": "f00dc1d624f9c0a3",
|
|
19
|
-
"generatedBy": "lemon-fields"
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=field-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"field-registry.js","sourceRoot":"","sources":["../../src/generated/field-registry.ts"],"names":[],"mappings":";;;AAAA,wEAAwE;AACxE,+BAA+B;AAClB,QAAA,SAAS,GAAG;IACrB,4DAA4D;IAC5D,SAAS,EAAE,GAAqB,EAAE,CAC9B,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAoC;IAC9K,mEAAmE;IACnE,WAAW,EAAE,GAAqB,EAAE,CAChC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAoC;IAC7N,0DAA0D;IAC1D,SAAS,EAAE,GAAqB,EAAE,CAC9B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAoC;CAC3P,CAAC;AAEE,QAAA,iBAAiB,GAAG;IAC7B,MAAM,EAAE,UAAU;IAClB,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,kBAAkB;IAC9B,aAAa,EAAE,cAAc;CACvB,CAAC"}
|