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
package/dist/tools/helpers.js
DELETED
|
@@ -1,593 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.my_parrallel = exports.parseRange = exports.isUserAuthorized = exports.getIdentityId = exports.$event = exports.$slack = exports.$info = exports.$protocol = exports.$rand = exports.$T = void 0;
|
|
16
|
-
/**
|
|
17
|
-
* `helpers.ts`
|
|
18
|
-
* - helper functions used globally in project
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* @author Steve Jung <steve@lemoncloud.io>
|
|
22
|
-
* @date 2020-12-22 initial version
|
|
23
|
-
* @date 2021-12-21 protocol support `//self` url.
|
|
24
|
-
* @date 2021-12-23 optimize types of $protocol.
|
|
25
|
-
* @date 2022-03-17 addition text processing. (S2, P)
|
|
26
|
-
*
|
|
27
|
-
* @copyright (C) 2021 LemonCloud Co Ltd. - All Rights Reserved.
|
|
28
|
-
*/
|
|
29
|
-
const engine_1 = require("../engine/");
|
|
30
|
-
const querystring_1 = __importDefault(require("querystring"));
|
|
31
|
-
const perf_hooks_1 = require("perf_hooks");
|
|
32
|
-
const cores_1 = __importDefault(require("../cores/"));
|
|
33
|
-
const test_helper_1 = require("../common/test-helper");
|
|
34
|
-
/**
|
|
35
|
-
* Helpers to transform data-types.
|
|
36
|
-
*/
|
|
37
|
-
exports.$T = {
|
|
38
|
-
/**
|
|
39
|
-
* transform to string w/ trim()
|
|
40
|
-
*/
|
|
41
|
-
S: (val, def = '') => `${val !== null && val !== void 0 ? val : def}`.trim(),
|
|
42
|
-
/**
|
|
43
|
-
* as string w/o white-space.
|
|
44
|
-
*/
|
|
45
|
-
S2: (val, def = '', delim = '') => `${val !== null && val !== void 0 ? val : def}`.replace(/\s+/g, delim),
|
|
46
|
-
/**
|
|
47
|
-
* transform to string[]
|
|
48
|
-
*/
|
|
49
|
-
SS: (val, def = []) => {
|
|
50
|
-
if (val === null || val === undefined)
|
|
51
|
-
return def;
|
|
52
|
-
if (typeof val === 'string')
|
|
53
|
-
return val ? val.split(',').map(_ => exports.$T.S(_, '').trim()) : def;
|
|
54
|
-
if (Array.isArray(val))
|
|
55
|
-
return val.length > 0 ? val.map(_ => exports.$T.S(_, '').trim()) : def;
|
|
56
|
-
return [exports.$T.S(val)];
|
|
57
|
-
},
|
|
58
|
-
/**
|
|
59
|
-
* text to Plain text (remove html tag)
|
|
60
|
-
*/
|
|
61
|
-
P: (text, max = 0) => {
|
|
62
|
-
const msg = (typeof text === 'string' ? text : `${text || ''}`)
|
|
63
|
-
.replace(/<[^>]*>/g, ' ') //! remove html tag.
|
|
64
|
-
.replace(/[^a-zA-Z0-9가-힣ㅋ-ㅎㅏ-ㅣ\.\?]+/g, ' ') //! remove non-char.
|
|
65
|
-
.trim();
|
|
66
|
-
const len = msg.length;
|
|
67
|
-
return max && len > max ? msg.substring(0, max) + '...' : msg;
|
|
68
|
-
},
|
|
69
|
-
/**
|
|
70
|
-
* transform to number(integer).
|
|
71
|
-
*/
|
|
72
|
-
N: (val, def = 0) => {
|
|
73
|
-
const n = engine_1.$U.N(val, def);
|
|
74
|
-
return Number.isNaN(n) ? def : n;
|
|
75
|
-
},
|
|
76
|
-
/**
|
|
77
|
-
* number array
|
|
78
|
-
*/
|
|
79
|
-
NN: (val, def = []) => {
|
|
80
|
-
if (val === null || val === undefined)
|
|
81
|
-
return def;
|
|
82
|
-
if (typeof val === 'string')
|
|
83
|
-
return val ? val.split(',').map(_ => exports.$T.N(_, 0)) : def;
|
|
84
|
-
if (Array.isArray(val))
|
|
85
|
-
return val.length > 0 ? val.map(_ => exports.$T.N(_, 0)) : def;
|
|
86
|
-
return [exports.$T.N(val)];
|
|
87
|
-
},
|
|
88
|
-
/**
|
|
89
|
-
* transform to number(float)
|
|
90
|
-
*/
|
|
91
|
-
F: (val, def = 0) => engine_1.$U.F(val, def),
|
|
92
|
-
/**
|
|
93
|
-
* transform to number(float)[]
|
|
94
|
-
*/
|
|
95
|
-
FF: (val, def = []) => {
|
|
96
|
-
if (val === null || val === undefined)
|
|
97
|
-
return def;
|
|
98
|
-
if (typeof val === 'string')
|
|
99
|
-
return val ? val.split(',').map(_ => exports.$T.F(_, 0)) : def;
|
|
100
|
-
if (Array.isArray(val))
|
|
101
|
-
return val.length > 0 ? val.map(_ => exports.$T.F(_, 0)) : def;
|
|
102
|
-
return [exports.$T.F(val)];
|
|
103
|
-
},
|
|
104
|
-
B: (val, def = 0) => {
|
|
105
|
-
if (val === null || val === undefined)
|
|
106
|
-
return def;
|
|
107
|
-
if (typeof val === 'boolean')
|
|
108
|
-
return val ? 1 : 0;
|
|
109
|
-
if (typeof val === 'string' && ['y', 'yes', 't', 'true'].includes(val.toLowerCase()))
|
|
110
|
-
return 1;
|
|
111
|
-
return engine_1.$U.N(val, def) && 1;
|
|
112
|
-
},
|
|
113
|
-
/**
|
|
114
|
-
* transform to Time number via string | number.
|
|
115
|
-
*/
|
|
116
|
-
T: (val, def = 0) => {
|
|
117
|
-
const checkVal = `${val || ''}`.includes('-');
|
|
118
|
-
if (checkVal) {
|
|
119
|
-
if (engine_1.$U.dt(val))
|
|
120
|
-
return engine_1.$U.dt(val).getTime();
|
|
121
|
-
else
|
|
122
|
-
throw new Error(`@val[${val}] is invalid!`);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
return engine_1.$U.dt(engine_1.$U.N(val, def)).getTime();
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
/**
|
|
129
|
-
* transform to Date formatted string
|
|
130
|
-
*/
|
|
131
|
-
D: (val, def = '') => {
|
|
132
|
-
let s = exports.$T.S(val);
|
|
133
|
-
let y;
|
|
134
|
-
let m;
|
|
135
|
-
let d;
|
|
136
|
-
if (s.includes('-')) {
|
|
137
|
-
[y, m, d] = s.split('-');
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
y = s.slice(0, 4);
|
|
141
|
-
m = s.slice(4, 6);
|
|
142
|
-
d = s.slice(6);
|
|
143
|
-
}
|
|
144
|
-
s = [y, m, d]
|
|
145
|
-
.filter(e => (e === null || e === void 0 ? void 0 : e.length) > 0)
|
|
146
|
-
.map(e => e.padStart(2, '0'))
|
|
147
|
-
.join('-');
|
|
148
|
-
if (y && y.length === 4 && !Number.isNaN(Date.parse(s)))
|
|
149
|
-
return s;
|
|
150
|
-
return def;
|
|
151
|
-
},
|
|
152
|
-
/**
|
|
153
|
-
* date-time format
|
|
154
|
-
*/
|
|
155
|
-
DT: (val, def = '2020-01-01') => {
|
|
156
|
-
const s = exports.$T.D(val, '').split('-'); // must be valid date-format like '2000-01-02'
|
|
157
|
-
const d = def.split('-');
|
|
158
|
-
return d
|
|
159
|
-
.map((d, i) => s[i] || d || '01')
|
|
160
|
-
.map(e => e.padStart(2, '0'))
|
|
161
|
-
.join('-');
|
|
162
|
-
},
|
|
163
|
-
/**
|
|
164
|
-
* Extract Text
|
|
165
|
-
*/
|
|
166
|
-
EX: (data, txt1, txt2) => {
|
|
167
|
-
data = `${data || ''}`;
|
|
168
|
-
const a = data.indexOf(txt1);
|
|
169
|
-
const b = a >= 0 ? data.indexOf(txt2, a + txt1.length) : a;
|
|
170
|
-
return b > a ? data.substring(a + txt1.length, b) : '';
|
|
171
|
-
},
|
|
172
|
-
/**
|
|
173
|
-
* transform to simple-set.
|
|
174
|
-
* @param val json object.
|
|
175
|
-
*/
|
|
176
|
-
simples: (val, throws = false) => {
|
|
177
|
-
//! validate if simple-type (string | number | null | undefined)
|
|
178
|
-
const t = typeof val;
|
|
179
|
-
if (val === undefined)
|
|
180
|
-
return undefined;
|
|
181
|
-
else if (val === null || val === '')
|
|
182
|
-
return { _: null };
|
|
183
|
-
else if (t === 'string' || t === 'number')
|
|
184
|
-
return { _: val };
|
|
185
|
-
else if (t === 'object' && !Array.isArray(val)) {
|
|
186
|
-
const keys = Object.keys(val);
|
|
187
|
-
const reName = /^[a-z_][a-zA-Z0-9_\-]*$/;
|
|
188
|
-
return keys.reduce((N, k) => {
|
|
189
|
-
const v = val[k];
|
|
190
|
-
if (v === undefined) {
|
|
191
|
-
//! NOP
|
|
192
|
-
}
|
|
193
|
-
else if (reName.test(k)) {
|
|
194
|
-
const t = typeof v;
|
|
195
|
-
if (v === null || v === '')
|
|
196
|
-
N[k] = null;
|
|
197
|
-
else if (t === 'string' || t === 'number')
|
|
198
|
-
N[k] = v;
|
|
199
|
-
else if (throws)
|
|
200
|
-
throw new Error(`.${k}[${v}] is invalid!`);
|
|
201
|
-
}
|
|
202
|
-
else if (throws)
|
|
203
|
-
throw new Error(`.${k} is invalid format!`);
|
|
204
|
-
return N;
|
|
205
|
-
}, {});
|
|
206
|
-
}
|
|
207
|
-
else if (throws)
|
|
208
|
-
throw new Error(`@val[${t}] is invalid!`);
|
|
209
|
-
return {};
|
|
210
|
-
},
|
|
211
|
-
/**
|
|
212
|
-
* catch string between txt1 and txt2
|
|
213
|
-
* @param data string
|
|
214
|
-
* @param txt1 head
|
|
215
|
-
* @param txt2 tail
|
|
216
|
-
*/
|
|
217
|
-
catch: (data, txt1, txt2) => {
|
|
218
|
-
data = typeof data == 'string' ? data : `${data}`;
|
|
219
|
-
const a = data.indexOf(txt1);
|
|
220
|
-
const b = a >= 0 ? data.indexOf(txt2, a + txt1.length) : a;
|
|
221
|
-
const c = b > a ? data.substring(a + txt1.length, b) : '';
|
|
222
|
-
return c;
|
|
223
|
-
},
|
|
224
|
-
/**
|
|
225
|
-
* merge simple-set from $org to $new
|
|
226
|
-
* @param $org the origin set
|
|
227
|
-
* @param $new the update set.
|
|
228
|
-
*/
|
|
229
|
-
merge: ($org, $new) => {
|
|
230
|
-
if (!$new)
|
|
231
|
-
return $org;
|
|
232
|
-
return Object.keys($new).reduce((N, k) => {
|
|
233
|
-
const val = $new[k];
|
|
234
|
-
if (val === null || val === undefined)
|
|
235
|
-
delete N[k];
|
|
236
|
-
else
|
|
237
|
-
N[k] = val;
|
|
238
|
-
return N;
|
|
239
|
-
}, Object.assign({}, $org));
|
|
240
|
-
},
|
|
241
|
-
/**
|
|
242
|
-
* replace message with template.
|
|
243
|
-
*/
|
|
244
|
-
template: (msg, set) => {
|
|
245
|
-
// const msg = $U.env('MSG_PHONE_CODE', '인증 번호는 [{code}] 입니다.') as string;
|
|
246
|
-
const tmp = Object.assign({}, set);
|
|
247
|
-
return msg.replace(/\{(\w+)\}/g, (a, b) => (tmp[b] !== undefined ? `${tmp[b]}` : `{${b}}`));
|
|
248
|
-
},
|
|
249
|
-
/**
|
|
250
|
-
* make random-code by length
|
|
251
|
-
* @param size length of code
|
|
252
|
-
* @param rand flag to use random (0 => 0, 1 => max)
|
|
253
|
-
*/
|
|
254
|
-
makeRandomCode: (size = 6, rand) => {
|
|
255
|
-
const flag = rand === undefined || rand === true || typeof rand == 'number' ? true : false;
|
|
256
|
-
const min = size >= 1 ? Math.pow(10, size - 1) : 1;
|
|
257
|
-
const max = 10 * min - 1;
|
|
258
|
-
const val = min + (flag ? Math.floor((max - min) * (typeof rand == 'number' ? rand : Math.random())) : max - min);
|
|
259
|
-
return { val, min, max };
|
|
260
|
-
},
|
|
261
|
-
/**
|
|
262
|
-
* 객체 정규화 시킴.
|
|
263
|
-
* - null 에 대해서는 특별히 처리.
|
|
264
|
-
*/
|
|
265
|
-
normal: (N) => Object.keys(N || {}).reduce((M, k) => {
|
|
266
|
-
if (k.startsWith('_') || k.startsWith('$'))
|
|
267
|
-
return M;
|
|
268
|
-
const v = N[k];
|
|
269
|
-
//! `null` 은 DynamoDB에서 비어있는 문자임.
|
|
270
|
-
M[k] = v === null ? '' : v;
|
|
271
|
-
return M;
|
|
272
|
-
}, {}),
|
|
273
|
-
/**
|
|
274
|
-
* transform list to map by `id`
|
|
275
|
-
*/
|
|
276
|
-
asMap: (list, id = 'id') => list.reduce((M, N) => {
|
|
277
|
-
const key = `${N[id] || ''}`;
|
|
278
|
-
M[key] = N;
|
|
279
|
-
return M;
|
|
280
|
-
}, {}),
|
|
281
|
-
/**
|
|
282
|
-
* compare object, and extract the only diff properties.
|
|
283
|
-
*/
|
|
284
|
-
diff: (A, B, onlyValid = false) => {
|
|
285
|
-
if (!A || !B)
|
|
286
|
-
return B;
|
|
287
|
-
else if (typeof A !== 'object' || typeof B !== 'object')
|
|
288
|
-
return B;
|
|
289
|
-
return engine_1.$U
|
|
290
|
-
.diff(A, B)
|
|
291
|
-
.map(s => `${s || ''}`)
|
|
292
|
-
.reduce((M, k) => {
|
|
293
|
-
const org = A[k];
|
|
294
|
-
const val = B[k];
|
|
295
|
-
if (onlyValid) {
|
|
296
|
-
if (val !== undefined && val !== null) {
|
|
297
|
-
//! dynamo 에서는 null 과 '' 이 같음.
|
|
298
|
-
if (org === null && val === '') {
|
|
299
|
-
// NOP - due to same value.
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
M[k] = val;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
M[k] = val === undefined && org !== undefined ? null : val;
|
|
308
|
-
}
|
|
309
|
-
return M;
|
|
310
|
-
}, {});
|
|
311
|
-
},
|
|
312
|
-
/**
|
|
313
|
-
* get $perf instance.
|
|
314
|
-
* ```ts
|
|
315
|
-
* const p = $T.perf()
|
|
316
|
-
* const took = p.took();
|
|
317
|
-
*/
|
|
318
|
-
perf: () => {
|
|
319
|
-
return new (class MyPerfmance {
|
|
320
|
-
constructor(t0) {
|
|
321
|
-
this.took = () => {
|
|
322
|
-
const t1 = perf_hooks_1.performance.now(); // start of processing
|
|
323
|
-
const took = Math.round((t1 - this.t0) / 100) / 10; // in sec.
|
|
324
|
-
return took;
|
|
325
|
-
};
|
|
326
|
-
this.t0 = t0 || perf_hooks_1.performance.now(); // start of processing
|
|
327
|
-
}
|
|
328
|
-
})();
|
|
329
|
-
},
|
|
330
|
-
/**
|
|
331
|
-
* parse `.meta` property as object.
|
|
332
|
-
* @param meta any
|
|
333
|
-
*/
|
|
334
|
-
parseMeta: (meta) => {
|
|
335
|
-
if (typeof meta === 'string' && meta) {
|
|
336
|
-
try {
|
|
337
|
-
if (meta.startsWith('[') && meta.endsWith(']')) {
|
|
338
|
-
const list = JSON.parse(meta);
|
|
339
|
-
const $ret = { list };
|
|
340
|
-
return $ret;
|
|
341
|
-
}
|
|
342
|
-
else if (meta.startsWith('{') && meta.endsWith('}')) {
|
|
343
|
-
return JSON.parse(meta);
|
|
344
|
-
}
|
|
345
|
-
else {
|
|
346
|
-
const $ret = { type: 'string', value: meta };
|
|
347
|
-
return $ret;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
catch (e) {
|
|
351
|
-
const $ret = { type: 'string', value: meta, error: test_helper_1.GETERR(e) };
|
|
352
|
-
return $ret;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
else if (meta === null || meta === undefined) {
|
|
356
|
-
return null;
|
|
357
|
-
}
|
|
358
|
-
else if (typeof meta === 'object') {
|
|
359
|
-
return meta;
|
|
360
|
-
}
|
|
361
|
-
else {
|
|
362
|
-
const type = typeof meta;
|
|
363
|
-
const $ret = { type, value: meta };
|
|
364
|
-
return $ret;
|
|
365
|
-
}
|
|
366
|
-
},
|
|
367
|
-
};
|
|
368
|
-
/**
|
|
369
|
-
* random number generator
|
|
370
|
-
*/
|
|
371
|
-
exports.$rand = {
|
|
372
|
-
/**
|
|
373
|
-
* list of number[] in n-size.
|
|
374
|
-
*/
|
|
375
|
-
range: (n) => [...Array(n).keys()],
|
|
376
|
-
/**
|
|
377
|
-
* generate random number
|
|
378
|
-
*/
|
|
379
|
-
float: (from, to) => Math.random() * (to - from) + from,
|
|
380
|
-
/**
|
|
381
|
-
* generate multiple float numbers
|
|
382
|
-
*/
|
|
383
|
-
floats: (from, to, n) => new Array(n).fill(0).map(() => exports.$rand.float(from, to)),
|
|
384
|
-
/**
|
|
385
|
-
* generate an integer
|
|
386
|
-
*/
|
|
387
|
-
integer: (from, to) => Math.floor(exports.$rand.float(Math.ceil(from), Math.floor(to))),
|
|
388
|
-
/**
|
|
389
|
-
* generate multiple integers
|
|
390
|
-
*/
|
|
391
|
-
integers: (from, to, n) => new Array(n).fill(0).map(() => exports.$rand.integer(from, to)),
|
|
392
|
-
};
|
|
393
|
-
/**
|
|
394
|
-
* builder to support protocol-service.
|
|
395
|
-
* @param context the current context (or service name).
|
|
396
|
-
* @param service service name
|
|
397
|
-
* @param options additional options.
|
|
398
|
-
*/
|
|
399
|
-
exports.$protocol = (context = {}, service, options) => {
|
|
400
|
-
//! for backward compartibility. shift arguments if 1st context is string.
|
|
401
|
-
const ctx = typeof context === 'string' ? {} : context;
|
|
402
|
-
service = typeof context === 'string' ? context : service;
|
|
403
|
-
const param = typeof context === 'string' ? service : options === null || options === void 0 ? void 0 : options.param;
|
|
404
|
-
const body = typeof context === 'string' ? param : options === null || options === void 0 ? void 0 : options.body;
|
|
405
|
-
if (!ctx)
|
|
406
|
-
throw new Error(`@context (NextContext) is required!`);
|
|
407
|
-
if (!service)
|
|
408
|
-
throw new Error(`@service (string) is required!`);
|
|
409
|
-
const $proto = cores_1.default.protocol.service;
|
|
410
|
-
const isProd = (options === null || options === void 0 ? void 0 : options.isProd) !== undefined ? options === null || options === void 0 ? void 0 : options.isProd : engine_1.$U.env('NS') === 'SS' ? true : false;
|
|
411
|
-
//TODO - `STAGE` is not changed from env.yml file @211215.
|
|
412
|
-
// _inf(NS, 'NS =', $U.env('NS'), $engine.cores.config.config.get('NS'), process.env['NS']);
|
|
413
|
-
// _inf(NS, 'stage =', $U.env('STAGE'), $engine.cores.config.config.get('STAGE'), process.env['STAGE']); //NOTE - STAGE is not changed.
|
|
414
|
-
//! prod용 lambda접근을 위한 환경 구성!!!!!
|
|
415
|
-
const $param = (p, b, x) => {
|
|
416
|
-
const protoParam = Object.assign(Object.assign({}, $proto.fromURL(ctx, asTargetUrl(), p || param, b || body)), x);
|
|
417
|
-
if (isProd)
|
|
418
|
-
protoParam.stage = 'prod';
|
|
419
|
-
return protoParam;
|
|
420
|
-
};
|
|
421
|
-
const $callback = (callback) => {
|
|
422
|
-
if (callback) {
|
|
423
|
-
const [path, qs] = callback.split('?');
|
|
424
|
-
if (path) {
|
|
425
|
-
const [type, id, cmd] = path.split('/');
|
|
426
|
-
const param = querystring_1.default.parse(qs);
|
|
427
|
-
return { type, id, cmd, param };
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
};
|
|
431
|
-
//! find the target protocol-url from context.
|
|
432
|
-
const asTargetUrl = () => {
|
|
433
|
-
if (!service.startsWith('//'))
|
|
434
|
-
throw new Error(`@service[${service}] (string) is invalid!`);
|
|
435
|
-
if (service.startsWith('//self/')) {
|
|
436
|
-
const self = $proto.myProtocolURI(ctx);
|
|
437
|
-
const [a, b] = [self.indexOf('@'), self.indexOf('#')];
|
|
438
|
-
const target = self.substring(a < 0 ? 'api://'.length : a + 1, b > a ? b : self.length) +
|
|
439
|
-
service.substring('//self'.length);
|
|
440
|
-
return `api://${target}`;
|
|
441
|
-
}
|
|
442
|
-
else {
|
|
443
|
-
return `api:${service}`;
|
|
444
|
-
}
|
|
445
|
-
};
|
|
446
|
-
//! execute via protocol-service.
|
|
447
|
-
const execute = (param, body, mode = 'POST') => $proto.execute($param(param, body, { mode }));
|
|
448
|
-
// eslint-disable-next-line prettier/prettier
|
|
449
|
-
const enqueue = (param, body, mode = 'POST', callback, delaySeconds = 1) => $proto.enqueue($param(param, body, { mode }), $callback(callback), delaySeconds);
|
|
450
|
-
const notify = (param, body, mode = 'POST', callback) => $proto.notify($param(param, body, { mode }), $callback(callback));
|
|
451
|
-
//! returns instance.
|
|
452
|
-
return {
|
|
453
|
-
hello: () => `helper:protocol:${service || ''}`,
|
|
454
|
-
asTargetUrl,
|
|
455
|
-
execute,
|
|
456
|
-
enqueue,
|
|
457
|
-
notify,
|
|
458
|
-
};
|
|
459
|
-
};
|
|
460
|
-
/**
|
|
461
|
-
* get the current config info
|
|
462
|
-
*/
|
|
463
|
-
exports.$info = () => {
|
|
464
|
-
const $conf = cores_1.default.config.config;
|
|
465
|
-
const service = $conf.getService();
|
|
466
|
-
const version = $conf.getVersion();
|
|
467
|
-
const stage = $conf.getStage();
|
|
468
|
-
return { service, version, stage };
|
|
469
|
-
};
|
|
470
|
-
/**
|
|
471
|
-
* send message to slack/public
|
|
472
|
-
*
|
|
473
|
-
* @param title 헤터 타이틀
|
|
474
|
-
* @param text object or 텍스트 내용
|
|
475
|
-
* @param pretext (optional) 텍스트 미리보기용.
|
|
476
|
-
* @param params (optional) customize more options.
|
|
477
|
-
*/
|
|
478
|
-
exports.$slack = (title, text, pretext, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
479
|
-
var _a, _b;
|
|
480
|
-
//! about current service.................
|
|
481
|
-
const { service, version, stage } = exports.$info();
|
|
482
|
-
const name = `${service}#${version}` + (stage !== 'prod' ? `/${stage}` : '');
|
|
483
|
-
return engine_1.doReportSlack((params === null || params === void 0 ? void 0 : params.channel) ? `!${params === null || params === void 0 ? void 0 : params.channel}` : 'public', {
|
|
484
|
-
channel: (_a = params === null || params === void 0 ? void 0 : params.channel) !== null && _a !== void 0 ? _a : undefined,
|
|
485
|
-
attachments: [
|
|
486
|
-
{
|
|
487
|
-
color: `${(params === null || params === void 0 ? void 0 : params.color) || '#FFB71B' || 'good'}`,
|
|
488
|
-
title,
|
|
489
|
-
pretext: pretext !== null && pretext !== void 0 ? pretext : ((params === null || params === void 0 ? void 0 : params.scope) ? `#${name} [\`${params.scope}\`]` : undefined),
|
|
490
|
-
text: typeof text === 'string' ? text : engine_1.$U.json(text),
|
|
491
|
-
ts: Math.floor(engine_1.$U.current_time_ms() / 1000),
|
|
492
|
-
fields: params === null || params === void 0 ? void 0 : params.fields,
|
|
493
|
-
footer: (_b = params === null || params === void 0 ? void 0 : params.footer) !== null && _b !== void 0 ? _b : `${service}/${stage}#${version}`,
|
|
494
|
-
},
|
|
495
|
-
],
|
|
496
|
-
}, params === null || params === void 0 ? void 0 : params.context).catch(e => `#err:${test_helper_1.GETERR(e)}`);
|
|
497
|
-
});
|
|
498
|
-
/**
|
|
499
|
-
* event producer builder
|
|
500
|
-
* @param context current context
|
|
501
|
-
* @param defEndpoint (optional) the default endpoint.
|
|
502
|
-
*/
|
|
503
|
-
exports.$event = (context, defEndpoint = '') => {
|
|
504
|
-
const $protocol = cores_1.default.protocol;
|
|
505
|
-
const endpoint = engine_1.$U.env('EVENT_RELAY_SNS', defEndpoint);
|
|
506
|
-
if (!endpoint)
|
|
507
|
-
throw new Error(`env[EVENT_RELAY_SNS] is required - $event()`);
|
|
508
|
-
return {
|
|
509
|
-
publish: (body) => __awaiter(void 0, void 0, void 0, function* () { return $protocol.service.broadcast(context, endpoint, body); }),
|
|
510
|
-
};
|
|
511
|
-
};
|
|
512
|
-
/**
|
|
513
|
-
* authentication helper - get identity-id from context
|
|
514
|
-
* @param ctx
|
|
515
|
-
*/
|
|
516
|
-
function getIdentityId(ctx) {
|
|
517
|
-
var _a;
|
|
518
|
-
const identityId = (_a = ctx.identity) === null || _a === void 0 ? void 0 : _a.identityId;
|
|
519
|
-
// for localhost development
|
|
520
|
-
if (!identityId) {
|
|
521
|
-
const profile = process.env.NAME;
|
|
522
|
-
if (ctx.domain === 'localhost' && profile === 'lemon')
|
|
523
|
-
return 'ap-northeast-2:009fa3a9-173f-440b-be74-2cf83370b08b';
|
|
524
|
-
if (ctx.domain === 'localhost' && profile === 'colover')
|
|
525
|
-
return 'ap-northeast-2:cef62bef-2f3e-4775-893f-7addb6efbeb3';
|
|
526
|
-
}
|
|
527
|
-
return identityId;
|
|
528
|
-
}
|
|
529
|
-
exports.getIdentityId = getIdentityId;
|
|
530
|
-
/**
|
|
531
|
-
* authentication helper - check user is authorized
|
|
532
|
-
* - 이 메서드는 AWS IAM 인증 여부만을 확인한다.
|
|
533
|
-
* - 따라서 true를 반환한다고 하여 회원 가입이 되어있다는 의미는 아니다.
|
|
534
|
-
*
|
|
535
|
-
* @param ctx the current context
|
|
536
|
-
* @param param (optional) to override `identity` when running local.
|
|
537
|
-
*/
|
|
538
|
-
function isUserAuthorized(ctx, param) {
|
|
539
|
-
const identityId = getIdentityId(ctx);
|
|
540
|
-
//NOTE - local 실행이라면 넘기자...
|
|
541
|
-
if ((ctx === null || ctx === void 0 ? void 0 : ctx.clientIp) === '::1' && (ctx === null || ctx === void 0 ? void 0 : ctx.domain) === 'localhost') {
|
|
542
|
-
ctx.identity = Object.assign({}, param); //! override with parameter.
|
|
543
|
-
return true;
|
|
544
|
-
}
|
|
545
|
-
return !!identityId;
|
|
546
|
-
}
|
|
547
|
-
exports.isUserAuthorized = isUserAuthorized;
|
|
548
|
-
/**
|
|
549
|
-
* parse range expression
|
|
550
|
-
* @param exp range expression (e.g. '[63100 TO 224000]' or '[* TO 150000}')
|
|
551
|
-
*/
|
|
552
|
-
function parseRange(exp) {
|
|
553
|
-
const match = exp.match(/^([\[{])([0-9]+|\*) TO ([0-9]+|\*)([}\]])$/);
|
|
554
|
-
if (match && (match[2] !== '*' || match[3] !== '*')) {
|
|
555
|
-
const range = {};
|
|
556
|
-
if (match[2] !== '*') {
|
|
557
|
-
const n = exports.$T.N(match[2]);
|
|
558
|
-
if (match[1] === '[')
|
|
559
|
-
range.gte = n;
|
|
560
|
-
else if (match[1] === '{')
|
|
561
|
-
range.gt = n;
|
|
562
|
-
}
|
|
563
|
-
if (match[3] !== '*') {
|
|
564
|
-
const n = exports.$T.N(match[3]);
|
|
565
|
-
if (match[4] === ']')
|
|
566
|
-
range.lte = n;
|
|
567
|
-
else if (match[4] === '}')
|
|
568
|
-
range.lt = n;
|
|
569
|
-
}
|
|
570
|
-
return range;
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
exports.parseRange = parseRange;
|
|
574
|
-
/**
|
|
575
|
-
* customized of `do_parrallel` for safe error-handling.
|
|
576
|
-
* - use `.error` to report the internal error.
|
|
577
|
-
*/
|
|
578
|
-
exports.my_parrallel = (list, func, size) => __awaiter(void 0, void 0, void 0, function* () {
|
|
579
|
-
const results = yield engine_1.do_parrallel(list, (item, i) => {
|
|
580
|
-
const ret = (() => {
|
|
581
|
-
try {
|
|
582
|
-
return func(item, i);
|
|
583
|
-
}
|
|
584
|
-
catch (e) {
|
|
585
|
-
return Promise.reject(e);
|
|
586
|
-
}
|
|
587
|
-
})();
|
|
588
|
-
const res = ret instanceof Promise ? ret : Promise.resolve(ret);
|
|
589
|
-
return res.catch(e => ({ id: item.id, error: test_helper_1.GETERR(e) }));
|
|
590
|
-
}, size);
|
|
591
|
-
return results;
|
|
592
|
-
});
|
|
593
|
-
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"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"}
|