@dcupl/common 1.2.15 → 1.3.1

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