lemon-core 2.2.19 → 3.0.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.
Files changed (248) hide show
  1. package/README.md +11 -20
  2. package/dist/common/test-helper.js +1 -1
  3. package/dist/common/test-helper.js.map +1 -1
  4. package/dist/controllers/dummy-controller.js.map +1 -1
  5. package/dist/cores/api-service.js.map +1 -1
  6. package/dist/cores/aws/aws-s3-service.d.ts +24 -46
  7. package/dist/cores/aws/aws-s3-service.js +103 -223
  8. package/dist/cores/aws/aws-s3-service.js.map +1 -1
  9. package/dist/cores/aws/aws-sns-service.js +3 -3
  10. package/dist/cores/aws/aws-sns-service.js.map +1 -1
  11. package/dist/cores/cache-service.js +12 -12
  12. package/dist/cores/cache-service.js.map +1 -1
  13. package/dist/cores/core-types.d.ts +92 -2
  14. package/dist/cores/core-types.js +1 -0
  15. package/dist/cores/core-types.js.map +1 -1
  16. package/dist/cores/dynamo-service.js +2 -2
  17. package/dist/cores/dynamo-service.js.map +1 -1
  18. package/dist/cores/elastic6-query-service.d.ts +42 -9
  19. package/dist/cores/elastic6-query-service.js +144 -134
  20. package/dist/cores/elastic6-query-service.js.map +1 -1
  21. package/dist/cores/elastic6-service.d.ts +144 -57
  22. package/dist/cores/elastic6-service.js +506 -322
  23. package/dist/cores/elastic6-service.js.map +1 -1
  24. package/dist/cores/lambda/lambda-cognito-handler.js.map +1 -1
  25. package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
  26. package/dist/cores/lambda/lambda-dynamo-stream-handler.js +3 -3
  27. package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
  28. package/dist/cores/lambda/lambda-notification-handler.js.map +1 -1
  29. package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
  30. package/dist/cores/lambda/lambda-web-handler.js +2 -4
  31. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  32. package/dist/cores/lambda/lambda-wss-handler.js.map +1 -1
  33. package/dist/cores/protocol/protocol-service.d.ts +1 -2
  34. package/dist/cores/protocol/protocol-service.js +5 -3
  35. package/dist/cores/protocol/protocol-service.js.map +1 -1
  36. package/dist/engine/builder.d.ts +1 -0
  37. package/dist/engine/builder.js +1 -1
  38. package/dist/engine/builder.js.map +1 -1
  39. package/dist/engine/engine.js +2 -1
  40. package/dist/engine/engine.js.map +1 -1
  41. package/dist/engine/index.d.ts +0 -1
  42. package/dist/engine/index.js +2 -4
  43. package/dist/engine/index.js.map +1 -1
  44. package/dist/engine/types.d.ts +0 -4
  45. package/dist/engine/types.js.map +1 -1
  46. package/dist/engine/utilities.d.ts +5 -1
  47. package/dist/engine/utilities.js +126 -11
  48. package/dist/engine/utilities.js.map +1 -1
  49. package/dist/helpers/helpers.d.ts +266 -0
  50. package/dist/helpers/helpers.js +600 -0
  51. package/dist/helpers/helpers.js.map +1 -0
  52. package/dist/helpers/index.d.ts +10 -0
  53. package/dist/helpers/index.js +23 -0
  54. package/dist/helpers/index.js.map +1 -0
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.js +1 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/tools/express.js +0 -3
  59. package/dist/tools/express.js.map +1 -1
  60. package/dist/tools/helpers.d.ts +243 -0
  61. package/dist/tools/helpers.js +593 -0
  62. package/dist/tools/helpers.js.map +1 -0
  63. package/package.json +5 -12
  64. package/CHANGELOG.md +0 -61
  65. package/dist/docs/assets/css/main.css +0 -2321
  66. package/dist/docs/assets/images/icons.png +0 -0
  67. package/dist/docs/assets/images/icons@2x.png +0 -0
  68. package/dist/docs/assets/images/widgets.png +0 -0
  69. package/dist/docs/assets/images/widgets@2x.png +0 -0
  70. package/dist/docs/assets/js/main.js +0 -1
  71. package/dist/docs/assets/js/search.js +0 -3
  72. package/dist/docs/classes/abstractmanager.html +0 -1054
  73. package/dist/docs/classes/apiproxyclient.html +0 -509
  74. package/dist/docs/classes/apiservice.html +0 -805
  75. package/dist/docs/classes/awskmsservice.html +0 -468
  76. package/dist/docs/classes/awsmodule.html +0 -353
  77. package/dist/docs/classes/awss3service.html +0 -689
  78. package/dist/docs/classes/awssnsservice.html +0 -543
  79. package/dist/docs/classes/awssqsservice.html +0 -517
  80. package/dist/docs/classes/cacheservice.html +0 -996
  81. package/dist/docs/classes/configmodule.html +0 -311
  82. package/dist/docs/classes/dummycacheservice.html +0 -1000
  83. package/dist/docs/classes/dummycontroller.html +0 -709
  84. package/dist/docs/classes/dummydynamoservice.html +0 -915
  85. package/dist/docs/classes/dummyelastic6service.html +0 -791
  86. package/dist/docs/classes/dummyredisstorageservice.html +0 -804
  87. package/dist/docs/classes/dummystoragemaker.html +0 -383
  88. package/dist/docs/classes/dummystorageservice.html +0 -592
  89. package/dist/docs/classes/dynamoqueryservice.html +0 -413
  90. package/dist/docs/classes/dynamoscanservice.html +0 -358
  91. package/dist/docs/classes/dynamoservice.html +0 -844
  92. package/dist/docs/classes/dynamostorageservice.html +0 -623
  93. package/dist/docs/classes/elastic6queryservice.html +0 -458
  94. package/dist/docs/classes/elastic6service.html +0 -804
  95. package/dist/docs/classes/file.html +0 -579
  96. package/dist/docs/classes/generalapicontroller.html +0 -877
  97. package/dist/docs/classes/generalcontroller.html +0 -454
  98. package/dist/docs/classes/generalcontrollerlocal.html +0 -499
  99. package/dist/docs/classes/generalcontrollerlocal2.html +0 -523
  100. package/dist/docs/classes/generalkeymaker.html +0 -335
  101. package/dist/docs/classes/generalmodelfilter.html +0 -529
  102. package/dist/docs/classes/generalwebcontroller.html +0 -580
  103. package/dist/docs/classes/hangulservice.html +0 -636
  104. package/dist/docs/classes/httpstorageservice.html +0 -539
  105. package/dist/docs/classes/lambdacognitohandler.html +0 -355
  106. package/dist/docs/classes/lambdacronhandler.html +0 -390
  107. package/dist/docs/classes/lambdacronhandlerlocal.html +0 -371
  108. package/dist/docs/classes/lambdadynamostreamhandler.html +0 -472
  109. package/dist/docs/classes/lambdadynamostreamhandlerlocal.html +0 -455
  110. package/dist/docs/classes/lambdahandler.html +0 -479
  111. package/dist/docs/classes/lambdahandlerlocal.html +0 -472
  112. package/dist/docs/classes/lambdamodule.html +0 -433
  113. package/dist/docs/classes/lambdanotificationhandler.html +0 -474
  114. package/dist/docs/classes/lambdanotificationhandlerlocal.html +0 -457
  115. package/dist/docs/classes/lambdasnshandler.html +0 -394
  116. package/dist/docs/classes/lambdasnshandlerlocal.html +0 -397
  117. package/dist/docs/classes/lambdasqshandler.html +0 -394
  118. package/dist/docs/classes/lambdasqshandlerlocal.html +0 -397
  119. package/dist/docs/classes/lambdasubhandler.html +0 -305
  120. package/dist/docs/classes/lambdawebhandler.html +0 -603
  121. package/dist/docs/classes/lambdawebhandlerlocal.html +0 -581
  122. package/dist/docs/classes/lambdawsshandler.html +0 -359
  123. package/dist/docs/classes/memcachedbackend.html +0 -900
  124. package/dist/docs/classes/mocksapiservice.html +0 -691
  125. package/dist/docs/classes/modelutil.html +0 -311
  126. package/dist/docs/classes/myconfigservice.html +0 -561
  127. package/dist/docs/classes/myconfigservicetest.html +0 -527
  128. package/dist/docs/classes/myconfigservicetest2.html +0 -522
  129. package/dist/docs/classes/mydummysqsservice.html +0 -419
  130. package/dist/docs/classes/myenginemodules.html +0 -357
  131. package/dist/docs/classes/mygeneralapicontroller.html +0 -837
  132. package/dist/docs/classes/mylemonwebcontroller.html +0 -356
  133. package/dist/docs/classes/mymodelfilter.html +0 -479
  134. package/dist/docs/classes/myprotocolservice.html +0 -993
  135. package/dist/docs/classes/myprotocolservicetest.html +0 -983
  136. package/dist/docs/classes/myservice.html +0 -329
  137. package/dist/docs/classes/mystorage.html +0 -1370
  138. package/dist/docs/classes/nodecachebackend.html +0 -714
  139. package/dist/docs/classes/protocolmodule.html +0 -311
  140. package/dist/docs/classes/proxystorageservice.html +0 -1441
  141. package/dist/docs/classes/query.html +0 -850
  142. package/dist/docs/classes/redisbackend.html +0 -781
  143. package/dist/docs/classes/redisstorageservice.html +0 -867
  144. package/dist/docs/classes/scan.html +0 -685
  145. package/dist/docs/classes/snsprotocoltransformer.html +0 -334
  146. package/dist/docs/classes/sqsprotocoltransformer.html +0 -334
  147. package/dist/docs/classes/typedstorageservice.html +0 -914
  148. package/dist/docs/classes/uniquefieldmanager.html +0 -477
  149. package/dist/docs/classes/usermanager.html +0 -931
  150. package/dist/docs/classes/utilities.html +0 -1914
  151. package/dist/docs/classes/webprotocoltransformer.html +0 -330
  152. package/dist/docs/globals.html +0 -7477
  153. package/dist/docs/index.html +0 -1515
  154. package/dist/docs/interfaces/accountitem.html +0 -277
  155. package/dist/docs/interfaces/accountmodel.html +0 -306
  156. package/dist/docs/interfaces/adaptiveparam.html +0 -203
  157. package/dist/docs/interfaces/apiheaders.html +0 -183
  158. package/dist/docs/interfaces/apihttpproxy.html +0 -304
  159. package/dist/docs/interfaces/apiserviceclient.html +0 -448
  160. package/dist/docs/interfaces/autocompletesearchparam.html +0 -309
  161. package/dist/docs/interfaces/betweencondition.html +0 -226
  162. package/dist/docs/interfaces/cachebackend.html +0 -714
  163. package/dist/docs/interfaces/cacheentry.html +0 -248
  164. package/dist/docs/interfaces/cacheoptions.html +0 -267
  165. package/dist/docs/interfaces/callbackdata.html +0 -279
  166. package/dist/docs/interfaces/callbackparam.html +0 -252
  167. package/dist/docs/interfaces/comparisoncondition.html +0 -226
  168. package/dist/docs/interfaces/coreconfigservice.html +0 -342
  169. package/dist/docs/interfaces/corekey.html +0 -278
  170. package/dist/docs/interfaces/corekeymakeable.html +0 -292
  171. package/dist/docs/interfaces/corekmsservice.html +0 -311
  172. package/dist/docs/interfaces/coremodel.html +0 -499
  173. package/dist/docs/interfaces/coremodelfilterable.html +0 -281
  174. package/dist/docs/interfaces/cores3service.html +0 -485
  175. package/dist/docs/interfaces/coreservices.html +0 -232
  176. package/dist/docs/interfaces/coresnsservice.html +0 -317
  177. package/dist/docs/interfaces/corewebcontroller.html +0 -271
  178. package/dist/docs/interfaces/cronevent.html +0 -223
  179. package/dist/docs/interfaces/cronparam.html +0 -212
  180. package/dist/docs/interfaces/dynamooption.html +0 -254
  181. package/dist/docs/interfaces/dynamoqueryresult.html +0 -244
  182. package/dist/docs/interfaces/dynamoscanresult.html +0 -244
  183. package/dist/docs/interfaces/dynamosimplequeriable.html +0 -308
  184. package/dist/docs/interfaces/dynamosimplescannable.html +0 -255
  185. package/dist/docs/interfaces/dynamostreambody.html +0 -268
  186. package/dist/docs/interfaces/dynamostreamcallback.html +0 -209
  187. package/dist/docs/interfaces/dynamostreamfilter.html +0 -218
  188. package/dist/docs/interfaces/dynamostreamparam.html +0 -240
  189. package/dist/docs/interfaces/elastic6item.html +0 -221
  190. package/dist/docs/interfaces/elastic6option.html +0 -275
  191. package/dist/docs/interfaces/elastic6simplequeriable.html +0 -284
  192. package/dist/docs/interfaces/engineconsole.html +0 -292
  193. package/dist/docs/interfaces/enginecore.html +0 -344
  194. package/dist/docs/interfaces/enginemodule.html +0 -269
  195. package/dist/docs/interfaces/enginemodules.html +0 -316
  196. package/dist/docs/interfaces/engineoption.html +0 -244
  197. package/dist/docs/interfaces/enginescope.html +0 -220
  198. package/dist/docs/interfaces/existencecondition.html +0 -212
  199. package/dist/docs/interfaces/filter.html +0 -253
  200. package/dist/docs/interfaces/generalfuntion.html +0 -207
  201. package/dist/docs/interfaces/generalitem.html +0 -212
  202. package/dist/docs/interfaces/handlermap.html +0 -171
  203. package/dist/docs/interfaces/incrementable.html +0 -190
  204. package/dist/docs/interfaces/internalkey.html +0 -210
  205. package/dist/docs/interfaces/internalmodel.html +0 -226
  206. package/dist/docs/interfaces/itementry.html +0 -241
  207. package/dist/docs/interfaces/jwtcommon.html +0 -242
  208. package/dist/docs/interfaces/lambdahandlerservice.html +0 -340
  209. package/dist/docs/interfaces/lemonengine.html +0 -593
  210. package/dist/docs/interfaces/metricpostbody.html +0 -220
  211. package/dist/docs/interfaces/mygeneral.html +0 -271
  212. package/dist/docs/interfaces/mymodel.html +0 -554
  213. package/dist/docs/interfaces/myprotocolparam.html +0 -359
  214. package/dist/docs/interfaces/nextcontext.html +0 -381
  215. package/dist/docs/interfaces/nextidentity.html +0 -325
  216. package/dist/docs/interfaces/nextidentityaccess.html +0 -495
  217. package/dist/docs/interfaces/nextidentitycognito.html +0 -422
  218. package/dist/docs/interfaces/notificationbody.html +0 -171
  219. package/dist/docs/interfaces/notificationparam.html +0 -304
  220. package/dist/docs/interfaces/options.html +0 -226
  221. package/dist/docs/interfaces/parrallelcallback.html +0 -203
  222. package/dist/docs/interfaces/parrallelparam.html +0 -285
  223. package/dist/docs/interfaces/protocolbody.html +0 -183
  224. package/dist/docs/interfaces/protocolparam.html +0 -336
  225. package/dist/docs/interfaces/protocolservice.html +0 -548
  226. package/dist/docs/interfaces/protocoltransformer.html +0 -295
  227. package/dist/docs/interfaces/proxyparams.html +0 -212
  228. package/dist/docs/interfaces/putobjectresult.html +0 -282
  229. package/dist/docs/interfaces/queryresult.html +0 -272
  230. package/dist/docs/interfaces/redisoptions.html +0 -248
  231. package/dist/docs/interfaces/simplesearchparam.html +0 -351
  232. package/dist/docs/interfaces/slackaction.html +0 -240
  233. package/dist/docs/interfaces/slackattachment.html +0 -459
  234. package/dist/docs/interfaces/slackpostbody.html +0 -240
  235. package/dist/docs/interfaces/sqsattribute.html +0 -171
  236. package/dist/docs/interfaces/sqsmessage.html +0 -254
  237. package/dist/docs/interfaces/sqsrecord.html +0 -324
  238. package/dist/docs/interfaces/sqsservice.html +0 -333
  239. package/dist/docs/interfaces/sqsstatistics.html +0 -240
  240. package/dist/docs/interfaces/storagemakeable.html +0 -258
  241. package/dist/docs/interfaces/storagemodel.html +0 -285
  242. package/dist/docs/interfaces/storageservice.html +0 -497
  243. package/dist/docs/interfaces/stringcondition.html +0 -226
  244. package/dist/docs/interfaces/tagset.html +0 -171
  245. package/dist/docs/interfaces/testmodel.html +0 -334
  246. package/dist/docs/interfaces/timeout.html +0 -233
  247. package/dist/docs/interfaces/updatable.html +0 -193
  248. package/dist/docs/interfaces/user.html +0 -534
@@ -0,0 +1,600 @@
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_sequence = 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 cores_1 = __importDefault(require("../cores/"));
30
+ const engine_1 = require("../engine/");
31
+ const test_helper_1 = require("../common/test-helper");
32
+ const querystring_1 = __importDefault(require("querystring"));
33
+ const perf_hooks_1 = require("perf_hooks");
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
+ /**
594
+ * run in sequence order
595
+ * = my_parrallel(list, func, 1);
596
+ *
597
+ * 주의) 내부 error를 throw 하지 않으니, list 를 전부 처리할때까지 안끝남.
598
+ */
599
+ exports.my_sequence = (list, func) => exports.my_parrallel(list, func, 1);
600
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `helpers.ts`
3
+ * - several function helpers.
4
+ *
5
+ * @author Steve Jung <steve@lemoncloud.io>
6
+ * @date 2022-03-17 initial commit
7
+ *
8
+ * @copyright (C) lemoncloud.io 2022 - All Rights Reserved.
9
+ */
10
+ export * from './helpers';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ /**
14
+ * `helpers.ts`
15
+ * - several function helpers.
16
+ *
17
+ * @author Steve Jung <steve@lemoncloud.io>
18
+ * @date 2022-03-17 initial commit
19
+ *
20
+ * @copyright (C) lemoncloud.io 2022 - All Rights Reserved.
21
+ */
22
+ __exportStar(require("./helpers"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;GAQG;AACH,4CAA0B"}