lemon-core 4.2.7 → 5.0.0

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 (167) hide show
  1. package/README.md +128 -2
  2. package/dist/common/lemon-error.d.ts +34 -0
  3. package/dist/common/lemon-error.js +52 -0
  4. package/dist/common/lemon-error.js.map +1 -0
  5. package/dist/controllers/general-api-controller.d.ts +7 -0
  6. package/dist/controllers/general-api-controller.js +7 -0
  7. package/dist/controllers/general-api-controller.js.map +1 -1
  8. package/dist/cores/api/api-service.js +10 -43
  9. package/dist/cores/api/api-service.js.map +1 -1
  10. package/dist/cores/aws/aws-kms-service.d.ts +13 -5
  11. package/dist/cores/aws/aws-kms-service.js +23 -9
  12. package/dist/cores/aws/aws-kms-service.js.map +1 -1
  13. package/dist/cores/aws/aws-s3-service.d.ts +30 -4
  14. package/dist/cores/aws/aws-s3-service.js +35 -15
  15. package/dist/cores/aws/aws-s3-service.js.map +1 -1
  16. package/dist/cores/aws/aws-sns-service.js +59 -9
  17. package/dist/cores/aws/aws-sns-service.js.map +1 -1
  18. package/dist/cores/aws/aws-sqs-service.d.ts +1 -1
  19. package/dist/cores/aws/aws-sqs-service.js +54 -12
  20. package/dist/cores/aws/aws-sqs-service.js.map +1 -1
  21. package/dist/cores/cache/cache-service.d.ts +10 -9
  22. package/dist/cores/cache/cache-service.js +9 -346
  23. package/dist/cores/cache/cache-service.js.map +1 -1
  24. package/dist/cores/config/config-service.d.ts +3 -15
  25. package/dist/cores/config/config-service.js +5 -34
  26. package/dist/cores/config/config-service.js.map +1 -1
  27. package/dist/cores/dynamo/dynamo-query-service.js +42 -2
  28. package/dist/cores/dynamo/dynamo-query-service.js.map +1 -1
  29. package/dist/cores/dynamo/dynamo-scan-service.js +42 -2
  30. package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -1
  31. package/dist/cores/dynamo/dynamo-service.d.ts +45 -14
  32. package/dist/cores/dynamo/dynamo-service.js +48 -21
  33. package/dist/cores/dynamo/dynamo-service.js.map +1 -1
  34. package/dist/cores/dynamo/tools/expressions.js +32 -22
  35. package/dist/cores/dynamo/tools/expressions.js.map +1 -1
  36. package/dist/cores/dynamo/tools/lang.d.ts +30 -0
  37. package/dist/cores/dynamo/tools/lang.js +75 -0
  38. package/dist/cores/dynamo/tools/lang.js.map +1 -0
  39. package/dist/cores/dynamo/tools/query.js +20 -21
  40. package/dist/cores/dynamo/tools/query.js.map +1 -1
  41. package/dist/cores/dynamo/tools/scan.js +15 -16
  42. package/dist/cores/dynamo/tools/scan.js.map +1 -1
  43. package/dist/cores/dynamo/tools/serializer.js +40 -38
  44. package/dist/cores/dynamo/tools/serializer.js.map +1 -1
  45. package/dist/cores/dynamo/tools/utils.d.ts +6 -2
  46. package/dist/cores/dynamo/tools/utils.js +11 -8
  47. package/dist/cores/dynamo/tools/utils.js.map +1 -1
  48. package/dist/cores/elastic/elastic6-query-service.d.ts +1 -104
  49. package/dist/cores/elastic/elastic6-query-service.js +15 -489
  50. package/dist/cores/elastic/elastic6-query-service.js.map +1 -1
  51. package/dist/cores/elastic/elastic6-service.d.ts +1 -482
  52. package/dist/cores/elastic/elastic6-service.js +15 -1153
  53. package/dist/cores/elastic/elastic6-service.js.map +1 -1
  54. package/dist/cores/elastic/index.d.ts +2 -2
  55. package/dist/cores/elastic/index.js +3 -2
  56. package/dist/cores/elastic/index.js.map +1 -1
  57. package/dist/cores/elastic/os2-query-service.d.ts +104 -0
  58. package/dist/cores/elastic/os2-query-service.js +495 -0
  59. package/dist/cores/elastic/os2-query-service.js.map +1 -0
  60. package/dist/cores/elastic/os2-service.d.ts +372 -0
  61. package/dist/cores/elastic/os2-service.js +943 -0
  62. package/dist/cores/elastic/os2-service.js.map +1 -0
  63. package/dist/cores/index.d.ts +6 -1
  64. package/dist/cores/index.js +9 -2
  65. package/dist/cores/index.js.map +1 -1
  66. package/dist/cores/lambda/index.js +2 -1
  67. package/dist/cores/lambda/index.js.map +1 -1
  68. package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -0
  69. package/dist/cores/lambda/lambda-cron-handler.js +5 -1
  70. package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
  71. package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +5 -4
  72. package/dist/cores/lambda/lambda-dynamo-stream-handler.js +18 -5
  73. package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
  74. package/dist/cores/lambda/lambda-handler.d.ts +22 -2
  75. package/dist/cores/lambda/lambda-handler.js +85 -23
  76. package/dist/cores/lambda/lambda-handler.js.map +1 -1
  77. package/dist/cores/lambda/lambda-sns-handler.d.ts +1 -0
  78. package/dist/cores/lambda/lambda-sns-handler.js +5 -0
  79. package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
  80. package/dist/cores/lambda/lambda-sqs-handler.d.ts +1 -0
  81. package/dist/cores/lambda/lambda-sqs-handler.js +20 -5
  82. package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
  83. package/dist/cores/lambda/lambda-web-handler.d.ts +10 -0
  84. package/dist/cores/lambda/lambda-web-handler.js +107 -41
  85. package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
  86. package/dist/cores/protocol/aws-lambda-helper.js +58 -11
  87. package/dist/cores/protocol/aws-lambda-helper.js.map +1 -1
  88. package/dist/cores/protocol/index.js +3 -0
  89. package/dist/cores/protocol/index.js.map +1 -1
  90. package/dist/cores/protocol/protocol-service.d.ts +26 -5
  91. package/dist/cores/protocol/protocol-service.js +42 -12
  92. package/dist/cores/protocol/protocol-service.js.map +1 -1
  93. package/dist/cores/protocol/protocol-sign.d.ts +72 -0
  94. package/dist/cores/protocol/protocol-sign.js +194 -0
  95. package/dist/cores/protocol/protocol-sign.js.map +1 -0
  96. package/dist/cores/storage/index.d.ts +0 -1
  97. package/dist/cores/storage/index.js +0 -1
  98. package/dist/cores/storage/index.js.map +1 -1
  99. package/dist/cores/storage/model-fields.d.ts +7 -0
  100. package/dist/cores/storage/model-fields.js +21 -0
  101. package/dist/cores/storage/model-fields.js.map +1 -0
  102. package/dist/cores/storage/model-manager.d.ts +3 -2
  103. package/dist/cores/storage/model-manager.js +7 -3
  104. package/dist/cores/storage/model-manager.js.map +1 -1
  105. package/dist/engine/builder.js +20 -2
  106. package/dist/engine/builder.js.map +1 -1
  107. package/dist/engine/engine.d.ts +2 -2
  108. package/dist/engine/engine.js +4 -4
  109. package/dist/engine/engine.js.map +1 -1
  110. package/dist/engine/utilities.d.ts +11 -12
  111. package/dist/engine/utilities.js +30 -82
  112. package/dist/engine/utilities.js.map +1 -1
  113. package/dist/environ.d.ts +0 -6
  114. package/dist/environ.js +1 -12
  115. package/dist/environ.js.map +1 -1
  116. package/dist/esm/index.mjs +140 -0
  117. package/dist/esm/testing.mjs +12 -0
  118. package/dist/extended/abstract-service.d.ts +48 -139
  119. package/dist/extended/abstract-service.js +46 -382
  120. package/dist/extended/abstract-service.js.map +1 -1
  121. package/dist/extended/cores/abstract-controllers.d.ts +170 -0
  122. package/dist/extended/cores/abstract-controllers.js +533 -0
  123. package/dist/extended/cores/abstract-controllers.js.map +1 -0
  124. package/dist/extended/cores/abstract-rest-apis.d.ts +142 -0
  125. package/dist/extended/cores/abstract-rest-apis.js +203 -0
  126. package/dist/extended/cores/abstract-rest-apis.js.map +1 -0
  127. package/dist/extended/cores/abstract-services.d.ts +771 -0
  128. package/dist/extended/cores/abstract-services.js +2042 -0
  129. package/dist/extended/cores/abstract-services.js.map +1 -0
  130. package/dist/extended/cores/browser-cache.d.ts +2 -0
  131. package/dist/extended/cores/browser-cache.js +34 -0
  132. package/dist/extended/cores/browser-cache.js.map +1 -0
  133. package/dist/extended/cores/commons.d.ts +20 -0
  134. package/dist/extended/cores/commons.js +31 -0
  135. package/dist/extended/cores/commons.js.map +1 -0
  136. package/dist/extended/cores/index.d.ts +15 -0
  137. package/dist/extended/cores/index.js +32 -0
  138. package/dist/extended/cores/index.js.map +1 -0
  139. package/dist/extended/cores/types.d.ts +14 -0
  140. package/dist/extended/cores/types.js +31 -0
  141. package/dist/extended/cores/types.js.map +1 -0
  142. package/dist/helpers/helpers.d.ts +10 -5
  143. package/dist/helpers/helpers.js +46 -58
  144. package/dist/helpers/helpers.js.map +1 -1
  145. package/dist/helpers/types.d.ts +22 -10
  146. package/dist/index.d.ts +4 -0
  147. package/dist/index.js +12 -1
  148. package/dist/index.js.map +1 -1
  149. package/dist/lib/http-fetch.d.ts +54 -0
  150. package/dist/lib/http-fetch.js +133 -0
  151. package/dist/lib/http-fetch.js.map +1 -0
  152. package/dist/lib/lazy.d.ts +22 -0
  153. package/dist/lib/lazy.js +54 -0
  154. package/dist/lib/lazy.js.map +1 -0
  155. package/dist/lib/perf.d.ts +35 -0
  156. package/dist/lib/perf.js +52 -0
  157. package/dist/lib/perf.js.map +1 -0
  158. package/dist/tools/tools.d.ts +15 -3
  159. package/dist/tools/tools.js +21 -4
  160. package/dist/tools/tools.js.map +1 -1
  161. package/package.json +96 -39
  162. package/dist/cores/storage/redis-storage-service.d.ts +0 -183
  163. package/dist/cores/storage/redis-storage-service.js +0 -377
  164. package/dist/cores/storage/redis-storage-service.js.map +0 -1
  165. package/dist/generated/field-registry.d.ts +0 -10
  166. package/dist/generated/field-registry.js +0 -17
  167. package/dist/generated/field-registry.js.map +0 -1
@@ -0,0 +1,495 @@
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.OS2QueryService = void 0;
7
+ /**
8
+ * `os2-query-service.ts`
9
+ * - common service to query with id via OpenSearch
10
+ *
11
+ *
12
+ * @author Steve Jung <steve@lemoncloud.io>
13
+ * @date 2019-11-20 initial version via backbone
14
+ * @date 2021-12-07 support SearchBody
15
+ * @date 2026-10-28 v5 B3: renamed from the ES-era file name (that name is now a re-export shim).
16
+ *
17
+ * @copyright (C) 2019 LemonCloud Co Ltd. - All Rights Reserved.
18
+ */
19
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
20
+ const engine_1 = require("../../engine/");
21
+ //* v5 B3: import the renamed file directly (not the shim).
22
+ const os2_service_1 = require("./os2-service");
23
+ const hangul_service_1 = __importDefault(require("./hangul-service"));
24
+ const NS = engine_1.$U.NS('ES6Q', 'green'); // NAMESPACE TO BE PRINTED.
25
+ /**
26
+ * class: `OS2QueryService`
27
+ * - support simple query like range search (over an `OS2CoreService`).
28
+ */
29
+ class OS2QueryService {
30
+ service;
31
+ /**
32
+ * use query w/ the given search-service.
33
+ * @param service the origin search-service to use.
34
+ */
35
+ constructor(service) {
36
+ const options = service.options;
37
+ if (!options.indexName)
38
+ throw new Error('.indexName is required');
39
+ this.service = service;
40
+ }
41
+ /**
42
+ * get options
43
+ */
44
+ get options() {
45
+ return this.service.options;
46
+ }
47
+ /**
48
+ * say hello of identity.
49
+ */
50
+ hello = () => `os2-query-service:${this.options.indexName}`;
51
+ /**
52
+ * query all by id.
53
+ *
54
+ * @param id
55
+ * @param limit
56
+ * @param isDesc
57
+ */
58
+ async queryAll(id, limit, isDesc) {
59
+ const { idName } = this.options;
60
+ const param = {
61
+ [idName]: id,
62
+ };
63
+ if (limit !== undefined)
64
+ param['$limit'] = limit;
65
+ if (isDesc !== undefined)
66
+ param['$O'] = (isDesc ? '!' : '') + id;
67
+ return this.searchSimple(param);
68
+ }
69
+ /**
70
+ * search in simple mode
71
+ * - 기본적으로 'mini-language'를 그대로 지원하도록한다.
72
+ * - 입력의 파라마터의 키값은 테스트할 필드들이다.
73
+ * {"stock":">1"} => query_string : "stock:>1"
74
+ *
75
+ * - 파라미터 예약:
76
+ * $query : ES _search 용 쿼리를 그대로 이용.
77
+ * $exist : 'a,!b,c' => a AND NOT b AND c 를 _exists_ 항목으로 풀어씀.
78
+ * $source : _source 항목에 포함될 내용. (undefined => _source:false)
79
+ * $limit : same as "size"
80
+ * $page : same as "from" / "size" ($limit 를 ipp 으로 함축하여 이용).
81
+ *
82
+ *
83
+ *
84
+ * [Mini-Language]
85
+ * ```
86
+ * # find title field which contains quick or brown.
87
+ * title:(quick OR brown)
88
+ *
89
+ * # not-null value.
90
+ * _exists_:title
91
+ *
92
+ * # regular exp.
93
+ * name:/joh?n(ath[oa]n)/
94
+ * ```
95
+ *
96
+ *
97
+ * 참고: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax
98
+ * 참고: http://okfnlabs.org/blog/2013/07/01/elasticsearch-query-tutorial.html
99
+ *
100
+ * @param param search param
101
+ */
102
+ async searchSimple(param) {
103
+ if (!param)
104
+ throw new Error('@param (SimpleSearchParam) is required');
105
+ const { indexName } = this.options;
106
+ (0, engine_1._log)(NS, `- searchSimple(${indexName})....`);
107
+ (0, engine_1._log)(NS, `> param =`, engine_1.$U.json(param));
108
+ //* build query body.
109
+ const body = this.buildQueryBody(param);
110
+ //* search via client
111
+ const res = await this.search(body);
112
+ //* convert to query-result.
113
+ return this.asQueryResult(body, res);
114
+ }
115
+ /**
116
+ * search with raw query language.
117
+ *
118
+ * @param body SearchBody.
119
+ * @returns results.
120
+ */
121
+ async search(body, searchType) {
122
+ if (!body)
123
+ throw new Error('@body (SearchBody) is required');
124
+ return this.service.searchRaw(body, searchType);
125
+ }
126
+ /**
127
+ * convert result as `QueryResult`
128
+ * @param body the query body requested
129
+ * @param res the result
130
+ * @returns QueryResult
131
+ */
132
+ asQueryResult(body, res) {
133
+ const size = engine_1.$U.N(body?.size, 10);
134
+ //* extract for result.
135
+ const hits = res?.hits;
136
+ if (typeof hits !== 'object')
137
+ throw new Error(`.hits (object) is required - hists:${engine_1.$U.json(hits)}`);
138
+ const total = engine_1.$U.N(typeof hits.total?.value === 'number' ? hits.total?.value : hits.total, 0); // since v7.x
139
+ const last = hits?.hits.length === size ? hits.hits[size - 1]?.sort : undefined;
140
+ const list = ((hits && hits.hits) || []).map((N) => {
141
+ const id = N && N._id; // id of elastic-search
142
+ const score = N && N._score; // search score.
143
+ const source = N && N._source; // origin data
144
+ //* save as internal
145
+ source._id = source._id || id; // attach to internal-id
146
+ source._score = score;
147
+ // delete internal autocomplete data
148
+ delete source[os2_service_1.OS2CoreService.DECOMPOSED_FIELD];
149
+ delete source[os2_service_1.OS2CoreService.QWERTY_FIELD];
150
+ return source;
151
+ });
152
+ const result = { list, total, last };
153
+ if (res?.aggregations) {
154
+ const $aggregations = res.aggregations || {};
155
+ result.aggregations = Object.keys($aggregations).reduce((aggrs, field) => {
156
+ const { doc_count_error_upper_bound: docCountError = 0, sum_other_doc_count: docSkippedCount = 0, buckets, } = res.aggregations[field];
157
+ if (docCountError > 0)
158
+ (0, engine_1._err)(NS, `> [WARN] aggregation: counts for each term are not accurate.`);
159
+ if (docSkippedCount > 0)
160
+ (0, engine_1._err)(NS, '> [WARN] aggregation: too many unique terms in the result. some terms are skipped.');
161
+ if (Array.isArray(buckets)) {
162
+ aggrs[field] = buckets.map((bucket) => {
163
+ return { key: bucket.key, count: bucket.doc_count };
164
+ });
165
+ }
166
+ return aggrs;
167
+ }, {});
168
+ }
169
+ return result;
170
+ }
171
+ /**
172
+ * convert `AutocompleteSearchParam` to `SearchBody`
173
+ * @param param AutocompleteSearchParam
174
+ * @returns SearchBody
175
+ */
176
+ asSearchBody(param) {
177
+ const { autocompleteFields } = this.options;
178
+ // validate parameters
179
+ if (!param)
180
+ throw new Error('@param (AutocompleteSearchParam) is required');
181
+ if (!param.$query || !Object.keys(param.$query).length)
182
+ throw new Error('.query is required');
183
+ if (Object.keys(param.$query).length > 1)
184
+ throw new Error('.query accepts only one property');
185
+ const [field, query] = Object.entries(param.$query)[0];
186
+ if (!field || !query)
187
+ throw new Error(`.query is invalid`);
188
+ if (!autocompleteFields.includes(field))
189
+ throw new Error(`.query has no autocomplete field`);
190
+ // build query body
191
+ const decomposedField = `${os2_service_1.OS2CoreService.DECOMPOSED_FIELD}.${field}`;
192
+ const qwertyField = `${os2_service_1.OS2CoreService.QWERTY_FIELD}.${field}`;
193
+ const body = {
194
+ query: {
195
+ bool: {
196
+ should: [
197
+ { match: { [decomposedField]: hangul_service_1.default.asJamoSequence(query) } },
198
+ { match: { [qwertyField]: query } },
199
+ ],
200
+ minimum_should_match: 1,
201
+ },
202
+ },
203
+ };
204
+ if (param.$filter) {
205
+ body.query.bool.filter = Object.entries(param.$filter).map(([field, filter]) => {
206
+ return { term: { [field]: filter } };
207
+ });
208
+ }
209
+ body.size = engine_1.$U.N(param.$limit, 10);
210
+ body.from = engine_1.$U.N(param.$page, 0) * body.size;
211
+ return { field, query, body };
212
+ }
213
+ /**
214
+ * search item in Search-as-You-Type way
215
+ * @param param AutocompleteSearchParam
216
+ */
217
+ async searchAutocomplete(param) {
218
+ const { field, query, body } = this.asSearchBody(param);
219
+ const res = await this.service.searchRaw(body);
220
+ const result = this.asQueryResult(body, res);
221
+ // highlighting result manually
222
+ let list = result.list;
223
+ if (param.$highlight) {
224
+ // prepare tag name to wrap highlighted text
225
+ const tagName = typeof param.$highlight == 'string' ? param.$highlight : 'em';
226
+ // create a regular expression which has optional whitespaces between each character
227
+ // e.g. 'COVID-19' => /C *O *V *I *D *- *1 *9/i
228
+ const regexp = new RegExp([...query.replace(/\s/g, '')].join(' *'), 'i');
229
+ // try to match regular expression with items found
230
+ list = result.list.map((item) => {
231
+ const target = `${item[field] || ''}`;
232
+ const match = target.match(regexp);
233
+ if (match) {
234
+ item._highlight =
235
+ target.slice(0, match.index) +
236
+ `<${tagName}>${match[0]}</${tagName}>` +
237
+ target.slice(match.index + match[0].length);
238
+ }
239
+ else {
240
+ item._highlight = target;
241
+ }
242
+ return item;
243
+ });
244
+ }
245
+ //* finally, override list.
246
+ return { ...result, list };
247
+ }
248
+ /**
249
+ * build query parameter from search param.
250
+ */
251
+ buildQueryBody = (param) => {
252
+ //* parameters.
253
+ let $query = null;
254
+ let $source = null;
255
+ let $page = -1;
256
+ let $limit = -1;
257
+ let $A = ''; // Aggregation
258
+ let $O = ''; // OrderBy
259
+ let $H = ''; // Highlight
260
+ //* build query.
261
+ const queries = Object.keys(param).reduce((list, key) => {
262
+ let val = param[key];
263
+ // ignore internal values.
264
+ if (key.startsWith('_'))
265
+ return list;
266
+ // _log(NS, `>> param[${key}] = `, val);
267
+ if (key === '$query') {
268
+ $query = {
269
+ query: typeof val === 'object' ? val : typeof val === 'string' ? JSON.parse(val) : `${val || ''}`,
270
+ };
271
+ }
272
+ else if (key === '$limit') {
273
+ $limit = engine_1.$U.N(val, 0);
274
+ }
275
+ else if (key === '$page') {
276
+ $page = engine_1.$U.N(val, 0);
277
+ }
278
+ else if (key === '$Q') {
279
+ if (!val) {
280
+ //NOP;
281
+ }
282
+ else if (typeof val === 'object') {
283
+ // ONLY IF object. use it as raw query.
284
+ $query = val;
285
+ }
286
+ else if (typeof val === 'string' && val.startsWith('{') && val.endsWith('}')) {
287
+ // might be the json data.
288
+ $query = JSON.parse(val);
289
+ }
290
+ else if (typeof val === 'string') {
291
+ // might be query string.
292
+ //* escape queries..
293
+ // + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
294
+ // val = val.replace(/([\(\)])/ig,'\\$1'); //TODO - 이걸 무시하면, 중복 조건 검색에 문제가 생김, 하여 일단 안하는걸루. @180828.
295
+ list.push(`(${val})`);
296
+ }
297
+ }
298
+ else if (key === '$A') {
299
+ $A = `${val}`.trim(); // ',' delimited terms to count
300
+ }
301
+ else if (key === '$O') {
302
+ $O = `${val}`.trim(); // ',' delimited terms to order
303
+ }
304
+ else if (key === '$H') {
305
+ $H = `${val}`.trim(); // ',' delimited terms to highlight
306
+ }
307
+ else if (key === '$source') {
308
+ // returned source fields set. '*', 'obj.*', '!abc'
309
+ if (val === '*') {
310
+ // all.
311
+ $source = '*';
312
+ }
313
+ else if (typeof val === 'string' && val.indexOf !== undefined) {
314
+ // string array set.
315
+ const vals = val.split(',') || [];
316
+ const $includes = [];
317
+ const $excludes = [];
318
+ vals.forEach(val => {
319
+ val = `${val || ''}`.trim();
320
+ if (!val)
321
+ return;
322
+ if (val.startsWith('!')) {
323
+ $excludes.push(val.substr(1));
324
+ }
325
+ else {
326
+ $includes.push(val);
327
+ }
328
+ });
329
+ $source = { includes: $includes, excludes: $excludes };
330
+ }
331
+ else {
332
+ $source = val;
333
+ }
334
+ }
335
+ else if (key === '$exist' || key === '$exists') {
336
+ (Array.isArray(val) ? val : `${val}`.split(',') || []).forEach((val) => {
337
+ val = `${val || ''}`.trim();
338
+ if (!val)
339
+ return;
340
+ if (val.startsWith('!')) {
341
+ list.push('NOT _exists_:' + val.substr(1));
342
+ }
343
+ else {
344
+ list.push('_exists_:' + val);
345
+ }
346
+ });
347
+ }
348
+ else {
349
+ //* escape if there is ' ' except like '(a AND B)'
350
+ const escape_val = (val) => {
351
+ if (typeof val === 'string' && val === '') {
352
+ return '"' + val + '"';
353
+ }
354
+ else if (val && typeof val === 'string') {
355
+ if (val.startsWith('(') && val.endsWith(')')) {
356
+ // nop
357
+ }
358
+ else if (val.startsWith('"') && val.endsWith('"')) {
359
+ // must be string block
360
+ return val;
361
+ }
362
+ else if (val.indexOf(',') > 0) {
363
+ // list of array.
364
+ return val.split(',').map(s => {
365
+ return (s || '').trim();
366
+ });
367
+ }
368
+ else if (
369
+ // special chars
370
+ val.indexOf(' ') >= 0 ||
371
+ val.indexOf('\n') >= 0 ||
372
+ val.indexOf(':') >= 0 ||
373
+ val.indexOf('\\') >= 0 ||
374
+ val.indexOf('#') >= 0 ||
375
+ val.indexOf('^') >= 0) {
376
+ const str = val.replace(/([\"\'])/gi, '\\$1'); // replace '"' -> '\"'
377
+ return '"' + str + '"';
378
+ }
379
+ }
380
+ return val;
381
+ };
382
+ val = escape_val(val);
383
+ //* add to query-list.
384
+ if (key.startsWith('!')) {
385
+ if (val) {
386
+ if (Array.isArray(val)) {
387
+ const vals = val.map((_) => escape_val(_));
388
+ list.push(key.substr(1) + ':(NOT (' + vals.join(' OR ') + '))');
389
+ }
390
+ else {
391
+ list.push(key.substr(1) + ':(NOT ' + val + ')');
392
+ }
393
+ }
394
+ else {
395
+ list.push('_exists_:' + key.substr(1));
396
+ }
397
+ }
398
+ else if (key.startsWith('#')) {
399
+ // projection.
400
+ $source = $source || { includes: [], excludes: [] };
401
+ if ($source && $source.includes) {
402
+ $source.includes.push(key.substr(1));
403
+ }
404
+ }
405
+ else if (val === undefined) {
406
+ //* nop
407
+ }
408
+ else if (val && Array.isArray(val)) {
409
+ // list.push('(' + val.map(val => `${key}:${val}`).join(' OR ') + ')');
410
+ list.push(`${key}:` + '(' + val.map((val) => `${escape_val(val)}`).join(' OR ') + ')');
411
+ }
412
+ else {
413
+ list.push(`${key}:${val}`);
414
+ }
415
+ }
416
+ return list;
417
+ }, []);
418
+ //* prepare returned body.
419
+ const $body = $query
420
+ ? $query
421
+ : (queries.length && { query: { query_string: { query: queries.join(' AND ') } } }) || {}; // $query 이게 있으면 그냥 이걸 이용.
422
+ //* Aggregation.
423
+ if ($A) {
424
+ // const $aggs = {
425
+ // // "types_count" : { "value_count" : { "field" : "brand" } }
426
+ // "types_count" : { "terms" : { "field" : "brand" } }
427
+ // }
428
+ const $aggs = $A.split(',').reduce(($a, val) => {
429
+ val = ('' + val).trim();
430
+ if (val) {
431
+ if (val.indexOf(':') > 0) {
432
+ // must be size.
433
+ const [nm, size] = val.split(':', 2);
434
+ $a[nm] = { terms: { field: nm, size: parseInt(size) } };
435
+ }
436
+ else {
437
+ $a[val] = { terms: { field: val } };
438
+ }
439
+ }
440
+ return $a;
441
+ }, {});
442
+ $body['aggs'] = $aggs;
443
+ }
444
+ //* OrderBy.
445
+ if ($O) {
446
+ //see sorting: see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html.
447
+ const $sort = $O.split(',').reduce(($a, val) => {
448
+ val = ('' + val).trim();
449
+ if (val) {
450
+ let name = val;
451
+ let asc = true;
452
+ if (val.startsWith('!')) {
453
+ // reverse
454
+ name = val.slice(1);
455
+ asc = false;
456
+ }
457
+ if (name) {
458
+ $a.push({ [name]: { order: asc ? 'asc' : 'desc' } });
459
+ }
460
+ }
461
+ return $a;
462
+ }, []);
463
+ if ($sort.length) {
464
+ $body.sort = $sort;
465
+ }
466
+ }
467
+ //* Highlight.
468
+ if ($H) {
469
+ const $highlight = $H.split(',').reduce(($h, val) => {
470
+ val = ('' + val).trim();
471
+ if (val) {
472
+ $h[val] = { type: 'unified' };
473
+ }
474
+ return $h;
475
+ }, {});
476
+ $body['highlight'] = {};
477
+ $body['highlight']['fields'] = $highlight;
478
+ }
479
+ //* if valid limit, then paginating.
480
+ if ($limit > -1) {
481
+ $body.size = $limit;
482
+ if ($page > -1) {
483
+ // starts from 0
484
+ $body.from = $page * $limit;
485
+ }
486
+ }
487
+ //* field projection with _source parameter.
488
+ if ($source !== null)
489
+ $body._source = $source;
490
+ //* returns body.
491
+ return $body;
492
+ };
493
+ }
494
+ exports.OS2QueryService = OS2QueryService;
495
+ //# sourceMappingURL=os2-query-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os2-query-service.js","sourceRoot":"","sources":["../../../src/cores/elastic/os2-query-service.ts"],"names":[],"mappings":"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"}