@dcupl/common 1.2.14 → 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.
- package/dist/lib-cjs/computeSuggestions.d.ts +2 -1
- package/dist/lib-cjs/computeSuggestions.js +6 -5
- package/dist/lib-cjs/computeSuggestions.js.map +1 -1
- package/dist/lib-cjs/getFacets.d.ts +2 -1
- package/dist/lib-cjs/getFacets.js +2 -3
- package/dist/lib-cjs/getFacets.js.map +1 -1
- package/dist/lib-cjs/queryData.d.ts +16 -4
- package/dist/lib-cjs/queryData.js +334 -316
- package/dist/lib-cjs/queryData.js.map +1 -1
- package/dist/lib-cjs/types/model.types.d.ts +49 -9
- package/dist/lib-cjs/types/query.types.d.ts +3 -0
- package/dist/lib-cjs/types/query.types.js.map +1 -1
- package/dist/lib-esm/computeSuggestions.d.ts +2 -1
- package/dist/lib-esm/computeSuggestions.js +6 -5
- package/dist/lib-esm/computeSuggestions.js.map +1 -1
- package/dist/lib-esm/getFacets.d.ts +2 -1
- package/dist/lib-esm/getFacets.js +2 -3
- package/dist/lib-esm/getFacets.js.map +1 -1
- package/dist/lib-esm/queryData.d.ts +16 -4
- package/dist/lib-esm/queryData.js +333 -312
- package/dist/lib-esm/queryData.js.map +1 -1
- package/dist/lib-esm/types/model.types.d.ts +49 -9
- package/dist/lib-esm/types/query.types.d.ts +3 -0
- package/dist/lib-esm/types/query.types.js.map +1 -1
- package/dist/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return value;
|
|
30
|
+
var QueryManager = /** @class */ (function () {
|
|
31
|
+
function QueryManager() {
|
|
32
|
+
this.registeredCustomOperator = new Map();
|
|
33
|
+
this.queryBuilder = new DcuplQueryBuilder();
|
|
35
34
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
46
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
if (
|
|
101
|
-
return dataEntryValue
|
|
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
|
|
95
|
+
return !isEqual(dataEntryValue, queryValue);
|
|
105
96
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
102
|
+
return !this.queryFind(dataEntryValue, queryValue, arrayValueHandling);
|
|
117
103
|
}
|
|
118
104
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
|
115
|
+
return dataEntryValue < queryValue;
|
|
129
116
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
|
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
|
|
132
|
+
return dataEntryValue.some(function (value) { return value <= queryValue; });
|
|
151
133
|
}
|
|
152
134
|
else {
|
|
153
|
-
return dataEntryValue.every(function (value) { return
|
|
135
|
+
return dataEntryValue.every(function (value) { return value <= queryValue; });
|
|
154
136
|
}
|
|
155
137
|
}
|
|
156
138
|
else {
|
|
157
|
-
return
|
|
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
|
|
144
|
+
return dataEntryValue.some(function (value) { return value >= queryValue; });
|
|
168
145
|
}
|
|
169
146
|
else {
|
|
170
|
-
return dataEntryValue.every(function (value) { return
|
|
147
|
+
return dataEntryValue.every(function (value) { return value >= queryValue; });
|
|
171
148
|
}
|
|
172
149
|
}
|
|
173
150
|
else {
|
|
174
|
-
return
|
|
151
|
+
return dataEntryValue >= queryValue;
|
|
175
152
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
-
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
|
|
235
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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
|
|
272
|
+
return !!find(entryValue, queryValue);
|
|
253
273
|
}
|
|
254
274
|
}
|
|
255
275
|
else {
|
|
256
|
-
return
|
|
276
|
+
return isEqualWith(entryValue, queryValue, this.equalRegexFn);
|
|
257
277
|
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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 (
|
|
269
|
-
|
|
290
|
+
else if (this.queryBuilder.isQueryGroup(query)) {
|
|
291
|
+
return every(query.queries, function (q) { return _this.validateQuery(q); });
|
|
270
292
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
var
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
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
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
306
|
-
|
|
331
|
+
else if (query.operator === 'eq') {
|
|
332
|
+
return this.evaluateEqOperator(query, initialDataset, indexMap);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
307
335
|
try {
|
|
308
|
-
|
|
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
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
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
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
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
|
-
|
|
334
|
-
|
|
335
|
-
var
|
|
336
|
-
|
|
337
|
-
|
|
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
|
-
|
|
371
|
-
|
|
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
|
-
|
|
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
|
-
|
|
395
|
+
}
|
|
396
|
+
if (queryGroup.groupType === 'and') {
|
|
397
|
+
currentDataset = filteredData;
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
currentDataset = initialDataset;
|
|
376
401
|
}
|
|
377
402
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
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
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
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
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
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
|