@dcupl/common 1.2.15 → 1.3.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.
@@ -27,393 +27,411 @@ var __read = (this && this.__read) || function (o, n) {
27
27
  return ar;
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.queryData = exports.queryFind = exports.transformValue = void 0;
30
+ exports.QueryManager = void 0;
31
31
  var lodash_1 = require("lodash");
32
32
  var query_builder_1 = require("./query-builder");
33
- var queryBuilder = new query_builder_1.DcuplQueryBuilder();
34
- var transformValue = function (value, transformers) {
35
- var e_1, _a;
36
- if (typeof value !== 'string') {
37
- return value;
33
+ var QueryManager = /** @class */ (function () {
34
+ function QueryManager() {
35
+ this.registeredCustomOperator = new Map();
36
+ this.queryBuilder = new query_builder_1.DcuplQueryBuilder();
38
37
  }
39
- try {
40
- for (var transformers_1 = __values(transformers), transformers_1_1 = transformers_1.next(); !transformers_1_1.done; transformers_1_1 = transformers_1.next()) {
41
- var transformer = transformers_1_1.value;
42
- if (transformer === 'lowercase') {
43
- value = value.toLowerCase();
44
- }
45
- else if (transformer === 'trim') {
46
- value = value.trim();
38
+ QueryManager.prototype.registerCustomOperator = function (operator, fn) {
39
+ this.registeredCustomOperator.set(operator, fn);
40
+ };
41
+ QueryManager.prototype.transformValue = function (value, transformers) {
42
+ var e_1, _a;
43
+ if (typeof value !== 'string') {
44
+ return value;
45
+ }
46
+ try {
47
+ for (var transformers_1 = __values(transformers), transformers_1_1 = transformers_1.next(); !transformers_1_1.done; transformers_1_1 = transformers_1.next()) {
48
+ var transformer = transformers_1_1.value;
49
+ if (transformer === 'lowercase') {
50
+ value = value.toLowerCase();
51
+ }
52
+ else if (transformer === 'trim') {
53
+ value = value.trim();
54
+ }
55
+ else if (transformer === 'removeWhitespace') {
56
+ value = value.replace(/\s/g, '');
57
+ }
47
58
  }
48
- else if (transformer === 'removeWhitespace') {
49
- value = value.replace(/\s/g, '');
59
+ }
60
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
61
+ finally {
62
+ try {
63
+ if (transformers_1_1 && !transformers_1_1.done && (_a = transformers_1.return)) _a.call(transformers_1);
50
64
  }
65
+ finally { if (e_1) throw e_1.error; }
51
66
  }
52
- }
53
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
54
- finally {
55
- try {
56
- if (transformers_1_1 && !transformers_1_1.done && (_a = transformers_1.return)) _a.call(transformers_1);
67
+ return value;
68
+ };
69
+ QueryManager.prototype.evaluateQuery = function (query, dataEntry) {
70
+ var _a, _b, _c, _d, _e, _f;
71
+ var dataEntryValue;
72
+ var queryValue = query.value;
73
+ var arrayValueHandling = ((_a = query.options) === null || _a === void 0 ? void 0 : _a.arrayValueHandling) || 'some';
74
+ if (Array.isArray((_b = query.options) === null || _b === void 0 ? void 0 : _b.transform) && query.options.transform.length > 0) {
75
+ queryValue = this.transformValue(queryValue, query.options.transform);
57
76
  }
58
- finally { if (e_1) throw e_1.error; }
59
- }
60
- return value;
61
- };
62
- exports.transformValue = transformValue;
63
- var evaluateQuery = function (query, dataEntry) {
64
- var _a, _b, _c, _d, _e, _f;
65
- var dataEntryValue;
66
- var queryValue = query.value;
67
- var arrayValueHandling = ((_a = query.options) === null || _a === void 0 ? void 0 : _a.arrayValueHandling) || 'some';
68
- if (Array.isArray((_b = query.options) === null || _b === void 0 ? void 0 : _b.transform) && query.options.transform.length > 0) {
69
- queryValue = (0, exports.transformValue)(queryValue, query.options.transform);
70
- }
71
- if (query.attribute.includes('.') || query.attribute.includes('[')) {
72
- dataEntryValue = (0, lodash_1.get)(dataEntry, query.attribute);
73
- }
74
- else {
75
- dataEntryValue = dataEntry[query.attribute];
76
- }
77
- if (Array.isArray((_c = query.options) === null || _c === void 0 ? void 0 : _c.transform) && query.options.transform.length > 0) {
78
- dataEntryValue = (0, exports.transformValue)(dataEntryValue, query.options.transform);
79
- }
80
- if (typeof dataEntryValue === 'undefined' || dataEntryValue === null) {
81
- var allowedUndefinedAndNullOperators = ['typeof', 'isTruthy', 'eq'];
82
- if (!allowedUndefinedAndNullOperators.includes(query.operator)) {
83
- return false;
77
+ if (query.attribute.includes('.') || query.attribute.includes('[')) {
78
+ dataEntryValue = (0, lodash_1.get)(dataEntry, query.attribute);
84
79
  }
85
- }
86
- switch (query.operator) {
87
- case 'eq':
88
- if (!((_d = query.options) === null || _d === void 0 ? void 0 : _d.invert)) {
89
- return (0, lodash_1.isEqual)(dataEntryValue, queryValue);
90
- }
91
- else {
92
- return !(0, lodash_1.isEqual)(dataEntryValue, queryValue);
93
- }
94
- case 'find': {
95
- if (!((_e = query.options) === null || _e === void 0 ? void 0 : _e.invert)) {
96
- return (0, exports.queryFind)(dataEntryValue, queryValue, arrayValueHandling);
97
- }
98
- else {
99
- return !(0, exports.queryFind)(dataEntryValue, queryValue, arrayValueHandling);
80
+ else {
81
+ dataEntryValue = dataEntry[query.attribute];
82
+ }
83
+ if (Array.isArray((_c = query.options) === null || _c === void 0 ? void 0 : _c.transform) && query.options.transform.length > 0) {
84
+ dataEntryValue = this.transformValue(dataEntryValue, query.options.transform);
85
+ }
86
+ if (typeof dataEntryValue === 'undefined' || dataEntryValue === null) {
87
+ var allowedUndefinedAndNullOperators = ['typeof', 'isTruthy', 'eq'];
88
+ if (!allowedUndefinedAndNullOperators.includes(query.operator)) {
89
+ return false;
100
90
  }
101
91
  }
102
- case 'lt':
103
- if (Array.isArray(dataEntryValue)) {
104
- if (arrayValueHandling === 'some') {
105
- return dataEntryValue.some(function (value) { return value < queryValue; });
92
+ switch (query.operator) {
93
+ case 'eq':
94
+ if (!((_d = query.options) === null || _d === void 0 ? void 0 : _d.invert)) {
95
+ return (0, lodash_1.isEqual)(dataEntryValue, queryValue);
106
96
  }
107
97
  else {
108
- return dataEntryValue.every(function (value) { return value < queryValue; });
98
+ return !(0, lodash_1.isEqual)(dataEntryValue, queryValue);
109
99
  }
110
- }
111
- else {
112
- return dataEntryValue < queryValue;
113
- }
114
- case 'gt':
115
- if (Array.isArray(dataEntryValue)) {
116
- if (arrayValueHandling === 'some') {
117
- return dataEntryValue.some(function (value) { return value > queryValue; });
100
+ case 'find': {
101
+ if (!((_e = query.options) === null || _e === void 0 ? void 0 : _e.invert)) {
102
+ return this.queryFind(dataEntryValue, queryValue, arrayValueHandling);
118
103
  }
119
104
  else {
120
- return dataEntryValue.every(function (value) { return value > queryValue; });
105
+ return !this.queryFind(dataEntryValue, queryValue, arrayValueHandling);
121
106
  }
122
107
  }
123
- else {
124
- return dataEntryValue > queryValue;
125
- }
126
- case 'lte':
127
- if (Array.isArray(dataEntryValue)) {
128
- if (arrayValueHandling === 'some') {
129
- return dataEntryValue.some(function (value) { return value <= queryValue; });
108
+ case 'lt':
109
+ if (Array.isArray(dataEntryValue)) {
110
+ if (arrayValueHandling === 'some') {
111
+ return dataEntryValue.some(function (value) { return value < queryValue; });
112
+ }
113
+ else {
114
+ return dataEntryValue.every(function (value) { return value < queryValue; });
115
+ }
130
116
  }
131
117
  else {
132
- return dataEntryValue.every(function (value) { return value <= queryValue; });
118
+ return dataEntryValue < queryValue;
133
119
  }
134
- }
135
- else {
136
- return dataEntryValue <= queryValue;
137
- }
138
- case 'gte':
139
- if (Array.isArray(dataEntryValue)) {
140
- if (arrayValueHandling === 'some') {
141
- return dataEntryValue.some(function (value) { return value >= queryValue; });
120
+ case 'gt':
121
+ if (Array.isArray(dataEntryValue)) {
122
+ if (arrayValueHandling === 'some') {
123
+ return dataEntryValue.some(function (value) { return value > queryValue; });
124
+ }
125
+ else {
126
+ return dataEntryValue.every(function (value) { return value > queryValue; });
127
+ }
142
128
  }
143
129
  else {
144
- return dataEntryValue.every(function (value) { return value >= queryValue; });
130
+ return dataEntryValue > queryValue;
145
131
  }
146
- }
147
- else {
148
- return dataEntryValue >= queryValue;
149
- }
150
- case 'typeof':
151
- if (!((_f = query.options) === null || _f === void 0 ? void 0 : _f.invert)) {
132
+ case 'lte':
152
133
  if (Array.isArray(dataEntryValue)) {
153
134
  if (arrayValueHandling === 'some') {
154
- return dataEntryValue.some(function (value) { return typeof value === queryValue; });
135
+ return dataEntryValue.some(function (value) { return value <= queryValue; });
155
136
  }
156
137
  else {
157
- return dataEntryValue.every(function (value) { return typeof value === queryValue; });
138
+ return dataEntryValue.every(function (value) { return value <= queryValue; });
158
139
  }
159
140
  }
160
141
  else {
161
- return typeof dataEntryValue === queryValue;
142
+ return dataEntryValue <= queryValue;
162
143
  }
163
- }
164
- else {
165
- return typeof dataEntryValue !== queryValue;
166
- }
167
- case 'isTruthy':
168
- if (queryValue === true) {
144
+ case 'gte':
169
145
  if (Array.isArray(dataEntryValue)) {
170
146
  if (arrayValueHandling === 'some') {
171
- return dataEntryValue.some(function (value) { return typeof !!value; });
147
+ return dataEntryValue.some(function (value) { return value >= queryValue; });
172
148
  }
173
149
  else {
174
- return dataEntryValue.every(function (value) { return typeof !!value; });
150
+ return dataEntryValue.every(function (value) { return value >= queryValue; });
175
151
  }
176
152
  }
177
153
  else {
178
- return !!dataEntryValue;
154
+ return dataEntryValue >= queryValue;
179
155
  }
180
- }
181
- else {
182
- return !dataEntryValue;
183
- }
184
- case 'size':
185
- return (0, lodash_1.size)(dataEntryValue) === queryValue;
186
- }
187
- return false;
188
- };
189
- var evaluateEqOperator = function (query, initialDataset, indexMap) {
190
- var e_2, _a;
191
- var _b;
192
- var filteredData = new Map();
193
- var indices = indexMap.get(query.attribute);
194
- if (indices) {
195
- var value = void 0;
196
- if (typeof query.value === 'string') {
197
- value = query.value;
198
- }
199
- else if (((_b = query.value) === null || _b === void 0 ? void 0 : _b.key) && Object.keys(query.value).length === 1) {
200
- value = query.value.key;
201
- }
202
- if (typeof value !== 'undefined') {
203
- var indexValues = indices.get(value);
204
- if (indexValues) {
205
- indexValues.forEach(function (key) {
206
- if (initialDataset.has(key)) {
207
- filteredData.set(key, initialDataset.get(key));
156
+ case 'typeof':
157
+ if (!((_f = query.options) === null || _f === void 0 ? void 0 : _f.invert)) {
158
+ if (Array.isArray(dataEntryValue)) {
159
+ if (arrayValueHandling === 'some') {
160
+ return dataEntryValue.some(function (value) { return typeof value === queryValue; });
161
+ }
162
+ else {
163
+ return dataEntryValue.every(function (value) { return typeof value === queryValue; });
164
+ }
208
165
  }
209
- });
210
- return filteredData;
211
- }
166
+ else {
167
+ return typeof dataEntryValue === queryValue;
168
+ }
169
+ }
170
+ else {
171
+ return typeof dataEntryValue !== queryValue;
172
+ }
173
+ case 'isTruthy':
174
+ if (queryValue === true) {
175
+ if (Array.isArray(dataEntryValue)) {
176
+ if (arrayValueHandling === 'some') {
177
+ return dataEntryValue.some(function (value) { return typeof !!value; });
178
+ }
179
+ else {
180
+ return dataEntryValue.every(function (value) { return typeof !!value; });
181
+ }
182
+ }
183
+ else {
184
+ return !!dataEntryValue;
185
+ }
186
+ }
187
+ else {
188
+ return !dataEntryValue;
189
+ }
190
+ case 'size':
191
+ return (0, lodash_1.size)(dataEntryValue) === queryValue;
192
+ default:
193
+ if (this.registeredCustomOperator.has(query.operator)) {
194
+ var fn = this.registeredCustomOperator.get(query.operator);
195
+ if (typeof fn === 'function') {
196
+ return fn(query, dataEntry);
197
+ }
198
+ }
212
199
  }
213
- }
214
- try {
215
- // fallback if indices do not work properly...
216
- for (var initialDataset_1 = __values(initialDataset), initialDataset_1_1 = initialDataset_1.next(); !initialDataset_1_1.done; initialDataset_1_1 = initialDataset_1.next()) {
217
- var _c = __read(initialDataset_1_1.value, 2), key = _c[0], value = _c[1];
218
- if (evaluateQuery(query, value)) {
219
- filteredData.set(key, value);
200
+ return false;
201
+ };
202
+ QueryManager.prototype.evaluateEqOperator = function (query, initialDataset, indexMap) {
203
+ var e_2, _a;
204
+ var _b;
205
+ var filteredData = new Map();
206
+ var indices = indexMap.get(query.attribute);
207
+ if (indices) {
208
+ var value = void 0;
209
+ if (typeof query.value === 'string') {
210
+ value = query.value;
211
+ }
212
+ else if (((_b = query.value) === null || _b === void 0 ? void 0 : _b.key) && Object.keys(query.value).length === 1) {
213
+ value = query.value.key;
214
+ }
215
+ if (typeof value !== 'undefined') {
216
+ var indexValues = indices.get(value);
217
+ if (indexValues) {
218
+ indexValues.forEach(function (key) {
219
+ if (initialDataset.has(key)) {
220
+ filteredData.set(key, initialDataset.get(key));
221
+ }
222
+ });
223
+ return filteredData;
224
+ }
220
225
  }
221
226
  }
222
- }
223
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
224
- finally {
225
227
  try {
226
- if (initialDataset_1_1 && !initialDataset_1_1.done && (_a = initialDataset_1.return)) _a.call(initialDataset_1);
228
+ // fallback if indices do not work properly...
229
+ for (var initialDataset_1 = __values(initialDataset), initialDataset_1_1 = initialDataset_1.next(); !initialDataset_1_1.done; initialDataset_1_1 = initialDataset_1.next()) {
230
+ var _c = __read(initialDataset_1_1.value, 2), key = _c[0], value = _c[1];
231
+ if (this.evaluateQuery(query, value)) {
232
+ filteredData.set(key, value);
233
+ }
234
+ }
227
235
  }
228
- finally { if (e_2) throw e_2.error; }
229
- }
230
- return filteredData;
231
- };
232
- var equalRegexFn = function (value, queryValue) {
233
- if (typeof queryValue === 'string' && (0, lodash_1.startsWith)(queryValue, '/') && (0, lodash_1.endsWith)(queryValue, '/')) {
234
- try {
235
- var regex = new RegExp(queryValue.slice(1, -1));
236
- return regex.test(value);
236
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
237
+ finally {
238
+ try {
239
+ if (initialDataset_1_1 && !initialDataset_1_1.done && (_a = initialDataset_1.return)) _a.call(initialDataset_1);
240
+ }
241
+ finally { if (e_2) throw e_2.error; }
237
242
  }
238
- catch (err) {
239
- return false;
243
+ return filteredData;
244
+ };
245
+ QueryManager.prototype.equalRegexFn = function (value, queryValue) {
246
+ var _this = this;
247
+ if (typeof queryValue === 'string' && (0, lodash_1.startsWith)(queryValue, '/') && (0, lodash_1.endsWith)(queryValue, '/')) {
248
+ try {
249
+ var regex = new RegExp(queryValue.slice(1, -1));
250
+ return regex.test(value);
251
+ }
252
+ catch (err) {
253
+ return false;
254
+ }
240
255
  }
241
- }
242
- else if (Array.isArray(value)) {
243
- return !!value.find(function (val) { return (0, lodash_1.isEqualWith)(val, queryValue, equalRegexFn); });
244
- }
245
- else {
246
- return (0, lodash_1.isEqual)(value, queryValue);
247
- }
248
- };
249
- var queryFind = function (entryValue, queryValue, arrayValueHandling) {
250
- if (Array.isArray(entryValue)) {
251
- if (typeof queryValue === 'string' || typeof queryValue === 'number' || typeof queryValue === 'boolean') {
252
- if (arrayValueHandling === 'some') {
253
- return entryValue.some(function (value) { return (0, lodash_1.isEqualWith)(value, queryValue, equalRegexFn); });
256
+ else if (Array.isArray(value)) {
257
+ return !!value.find(function (val) { return (0, lodash_1.isEqualWith)(val, queryValue, _this.equalRegexFn); });
258
+ }
259
+ else {
260
+ return (0, lodash_1.isEqual)(value, queryValue);
261
+ }
262
+ };
263
+ QueryManager.prototype.queryFind = function (entryValue, queryValue, arrayValueHandling) {
264
+ var _this = this;
265
+ if (Array.isArray(entryValue)) {
266
+ if (typeof queryValue === 'string' || typeof queryValue === 'number' || typeof queryValue === 'boolean') {
267
+ if (arrayValueHandling === 'some') {
268
+ return entryValue.some(function (value) { return (0, lodash_1.isEqualWith)(value, queryValue, _this.equalRegexFn); });
269
+ }
270
+ else {
271
+ return entryValue.every(function (value) { return (0, lodash_1.isEqualWith)(value, queryValue, _this.equalRegexFn); });
272
+ }
254
273
  }
255
274
  else {
256
- return entryValue.every(function (value) { return (0, lodash_1.isEqualWith)(value, queryValue, equalRegexFn); });
275
+ return !!(0, lodash_1.find)(entryValue, queryValue);
257
276
  }
258
277
  }
259
278
  else {
260
- return !!(0, lodash_1.find)(entryValue, queryValue);
279
+ return (0, lodash_1.isEqualWith)(entryValue, queryValue, this.equalRegexFn);
261
280
  }
262
- }
263
- else {
264
- return (0, lodash_1.isEqualWith)(entryValue, queryValue, equalRegexFn);
265
- }
266
- };
267
- exports.queryFind = queryFind;
268
- var validateQuery = function (query) {
269
- if (queryBuilder.isQuery(query)) {
270
- if (!query.attribute || !query.operator) {
271
- throw new Error('invalid query - missing attribute or operator');
281
+ };
282
+ QueryManager.prototype.validateQuery = function (query) {
283
+ var _this = this;
284
+ if (this.queryBuilder.isQuery(query)) {
285
+ if (!query.attribute || !query.operator) {
286
+ throw new Error('invalid query - missing attribute or operator');
287
+ }
288
+ if (query.operator === 'find' && Array.isArray(query.value)) {
289
+ throw new Error('invalid query - find operator cannot have array value');
290
+ }
291
+ return true;
272
292
  }
273
- if (query.operator === 'find' && Array.isArray(query.value)) {
274
- throw new Error('invalid query - find operator cannot have array value');
293
+ else if (this.queryBuilder.isQueryGroup(query)) {
294
+ return (0, lodash_1.every)(query.queries, function (q) { return _this.validateQuery(q); });
275
295
  }
276
- return true;
277
- }
278
- else if (queryBuilder.isQueryGroup(query)) {
279
- return (0, lodash_1.every)(query.queries, function (q) { return validateQuery(q); });
280
- }
281
- else {
282
- throw new Error('invalid query - missing query or attribute');
283
- }
284
- };
285
- var getEvaluatedQueryDataset = function (query, initialDataset, indexMap) {
286
- var e_3, _a, e_4, _b;
287
- var filteredData = new Map();
288
- if (query.attribute.includes('[*]')) {
289
- var attribute = query.attribute.replace('[*]', '');
290
- var _loop_1 = function (key, value) {
291
- var arrayValue = value[attribute];
292
- if (Array.isArray(arrayValue)) {
293
- var results = arrayValue.map(function (arrayItem, index) {
294
- arrayItem;
295
- var queryCopy = (0, lodash_1.cloneDeep)(query);
296
- queryCopy.attribute = queryCopy.attribute.replace('[*]', "[".concat(index, "]"));
297
- return evaluateQuery(queryCopy, value);
298
- });
299
- if ((0, lodash_1.some)(results)) {
300
- filteredData.set(key, value);
296
+ else {
297
+ throw new Error('invalid query - missing query or attribute');
298
+ }
299
+ };
300
+ QueryManager.prototype.getEvaluatedQueryDataset = function (query, initialDataset, indexMap) {
301
+ var e_3, _a, e_4, _b;
302
+ var _this = this;
303
+ var filteredData = new Map();
304
+ if (query.attribute.includes('[*]')) {
305
+ var attribute = query.attribute.replace('[*]', '');
306
+ var _loop_1 = function (key, value) {
307
+ var arrayValue = value[attribute];
308
+ if (Array.isArray(arrayValue)) {
309
+ var results = arrayValue.map(function (arrayItem, index) {
310
+ arrayItem;
311
+ var queryCopy = (0, lodash_1.cloneDeep)(query);
312
+ queryCopy.attribute = queryCopy.attribute.replace('[*]', "[".concat(index, "]"));
313
+ return _this.evaluateQuery(queryCopy, value);
314
+ });
315
+ if ((0, lodash_1.some)(results)) {
316
+ filteredData.set(key, value);
317
+ }
318
+ }
319
+ };
320
+ try {
321
+ for (var initialDataset_2 = __values(initialDataset), initialDataset_2_1 = initialDataset_2.next(); !initialDataset_2_1.done; initialDataset_2_1 = initialDataset_2.next()) {
322
+ var _c = __read(initialDataset_2_1.value, 2), key = _c[0], value = _c[1];
323
+ _loop_1(key, value);
301
324
  }
302
325
  }
303
- };
304
- try {
305
- for (var initialDataset_2 = __values(initialDataset), initialDataset_2_1 = initialDataset_2.next(); !initialDataset_2_1.done; initialDataset_2_1 = initialDataset_2.next()) {
306
- var _c = __read(initialDataset_2_1.value, 2), key = _c[0], value = _c[1];
307
- _loop_1(key, value);
326
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
327
+ finally {
328
+ try {
329
+ if (initialDataset_2_1 && !initialDataset_2_1.done && (_a = initialDataset_2.return)) _a.call(initialDataset_2);
330
+ }
331
+ finally { if (e_3) throw e_3.error; }
308
332
  }
309
333
  }
310
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
311
- finally {
334
+ else if (query.operator === 'eq') {
335
+ return this.evaluateEqOperator(query, initialDataset, indexMap);
336
+ }
337
+ else {
312
338
  try {
313
- if (initialDataset_2_1 && !initialDataset_2_1.done && (_a = initialDataset_2.return)) _a.call(initialDataset_2);
339
+ for (var initialDataset_3 = __values(initialDataset), initialDataset_3_1 = initialDataset_3.next(); !initialDataset_3_1.done; initialDataset_3_1 = initialDataset_3.next()) {
340
+ var _d = __read(initialDataset_3_1.value, 2), key = _d[0], value = _d[1];
341
+ if (this.evaluateQuery(query, value)) {
342
+ filteredData.set(key, value);
343
+ }
344
+ }
314
345
  }
315
- finally { if (e_3) throw e_3.error; }
316
- }
317
- }
318
- else if (query.operator === 'eq') {
319
- return evaluateEqOperator(query, initialDataset, indexMap);
320
- }
321
- else {
322
- try {
323
- for (var initialDataset_3 = __values(initialDataset), initialDataset_3_1 = initialDataset_3.next(); !initialDataset_3_1.done; initialDataset_3_1 = initialDataset_3.next()) {
324
- var _d = __read(initialDataset_3_1.value, 2), key = _d[0], value = _d[1];
325
- if (evaluateQuery(query, value)) {
326
- filteredData.set(key, value);
346
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
347
+ finally {
348
+ try {
349
+ if (initialDataset_3_1 && !initialDataset_3_1.done && (_b = initialDataset_3.return)) _b.call(initialDataset_3);
327
350
  }
351
+ finally { if (e_4) throw e_4.error; }
328
352
  }
329
353
  }
330
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
331
- finally {
332
- try {
333
- if (initialDataset_3_1 && !initialDataset_3_1.done && (_b = initialDataset_3.return)) _b.call(initialDataset_3);
334
- }
335
- finally { if (e_4) throw e_4.error; }
354
+ return filteredData;
355
+ };
356
+ QueryManager.prototype.evaluateQueryGroup = function (queryGroup, initialDataset, earlyReturn, indexMap) {
357
+ var e_5, _a, e_6, _b;
358
+ var _c;
359
+ var filteredData = new Map();
360
+ var currentDataset = initialDataset;
361
+ earlyReturn;
362
+ if (!queryGroup.queries || ((_c = queryGroup.queries) === null || _c === void 0 ? void 0 : _c.length) === 0) {
363
+ return currentDataset;
336
364
  }
337
- }
338
- return filteredData;
339
- };
340
- var evaluateQueryGroup = function (queryGroup, initialDataset, earlyReturn, indexMap) {
341
- var e_5, _a, e_6, _b;
342
- var _c;
343
- var filteredData = new Map();
344
- var currentDataset = initialDataset;
345
- earlyReturn;
346
- if (!queryGroup.queries || ((_c = queryGroup.queries) === null || _c === void 0 ? void 0 : _c.length) === 0) {
347
- return currentDataset;
348
- }
349
- try {
350
- for (var _d = __values(queryGroup.queries), _e = _d.next(); !_e.done; _e = _d.next()) {
351
- var query = _e.value;
352
- var result = new Map();
353
- if (queryBuilder.isQuery(query)) {
354
- result = getEvaluatedQueryDataset(query, currentDataset, indexMap);
355
- }
356
- else {
357
- result = evaluateQueryGroup(query, currentDataset, earlyReturn, indexMap);
358
- }
359
- if (filteredData.size === 0) {
360
- filteredData = result;
361
- }
362
- if (queryGroup.groupType === 'or') {
363
- result.forEach(function (item) {
364
- filteredData.set(item.key, item);
365
- });
366
- }
367
- else {
368
- var diff = (0, lodash_1.differenceBy)(Array.from(filteredData.values()), Array.from(result.values()), 'key');
369
- try {
370
- for (var diff_1 = (e_6 = void 0, __values(diff)), diff_1_1 = diff_1.next(); !diff_1_1.done; diff_1_1 = diff_1.next()) {
371
- var item = diff_1_1.value;
372
- filteredData.delete(item.key);
373
- }
365
+ try {
366
+ for (var _d = __values(queryGroup.queries), _e = _d.next(); !_e.done; _e = _d.next()) {
367
+ var query = _e.value;
368
+ var result = new Map();
369
+ if (this.queryBuilder.isQuery(query)) {
370
+ result = this.getEvaluatedQueryDataset(query, currentDataset, indexMap);
374
371
  }
375
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
376
- finally {
372
+ else {
373
+ result = this.evaluateQueryGroup(query, currentDataset, earlyReturn, indexMap);
374
+ }
375
+ if (filteredData.size === 0) {
376
+ filteredData = result;
377
+ }
378
+ if (queryGroup.groupType === 'or') {
379
+ result.forEach(function (item) {
380
+ filteredData.set(item.key, item);
381
+ });
382
+ }
383
+ else {
384
+ var diff = (0, lodash_1.differenceBy)(Array.from(filteredData.values()), Array.from(result.values()), 'key');
377
385
  try {
378
- if (diff_1_1 && !diff_1_1.done && (_b = diff_1.return)) _b.call(diff_1);
386
+ for (var diff_1 = (e_6 = void 0, __values(diff)), diff_1_1 = diff_1.next(); !diff_1_1.done; diff_1_1 = diff_1.next()) {
387
+ var item = diff_1_1.value;
388
+ filteredData.delete(item.key);
389
+ }
390
+ }
391
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
392
+ finally {
393
+ try {
394
+ if (diff_1_1 && !diff_1_1.done && (_b = diff_1.return)) _b.call(diff_1);
395
+ }
396
+ finally { if (e_6) throw e_6.error; }
379
397
  }
380
- finally { if (e_6) throw e_6.error; }
398
+ }
399
+ if (queryGroup.groupType === 'and') {
400
+ currentDataset = filteredData;
401
+ }
402
+ else {
403
+ currentDataset = initialDataset;
381
404
  }
382
405
  }
383
- if (queryGroup.groupType === 'and') {
384
- currentDataset = filteredData;
385
- }
386
- else {
387
- currentDataset = initialDataset;
406
+ }
407
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
408
+ finally {
409
+ try {
410
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
388
411
  }
412
+ finally { if (e_5) throw e_5.error; }
389
413
  }
390
- }
391
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
392
- finally {
393
- try {
394
- if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
414
+ return filteredData;
415
+ };
416
+ QueryManager.prototype.queryData = function (initialData, rootQuery, earlyReturn, indexMap) {
417
+ // const currentDataset = new Map(initialData);
418
+ var currentDataset = initialData;
419
+ if (rootQuery.queries.length === 0) {
420
+ return initialData;
395
421
  }
396
- finally { if (e_5) throw e_5.error; }
397
- }
398
- return filteredData;
399
- };
400
- function queryData(initialData, rootQuery, earlyReturn, indexMap) {
401
- // const currentDataset = new Map(initialData);
402
- var currentDataset = initialData;
403
- if (rootQuery.queries.length === 0) {
404
- return initialData;
405
- }
406
- if (!rootQuery.groupKey) {
407
- rootQuery.groupKey = 'root';
408
- }
409
- if (!rootQuery.groupType) {
410
- rootQuery.groupType = 'and';
411
- }
412
- if (!rootQuery.queries) {
413
- rootQuery.queries = [];
414
- }
415
- validateQuery(rootQuery);
416
- return evaluateQueryGroup(rootQuery, currentDataset, earlyReturn, indexMap);
417
- }
418
- exports.queryData = queryData;
422
+ if (!rootQuery.groupKey) {
423
+ rootQuery.groupKey = 'root';
424
+ }
425
+ if (!rootQuery.groupType) {
426
+ rootQuery.groupType = 'and';
427
+ }
428
+ if (!rootQuery.queries) {
429
+ rootQuery.queries = [];
430
+ }
431
+ this.validateQuery(rootQuery);
432
+ return this.evaluateQueryGroup(rootQuery, currentDataset, earlyReturn, indexMap);
433
+ };
434
+ return QueryManager;
435
+ }());
436
+ exports.QueryManager = QueryManager;
419
437
  //# sourceMappingURL=queryData.js.map