@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,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.
|
|
30
|
+
exports.QueryManager = void 0;
|
|
31
31
|
var lodash_1 = require("lodash");
|
|
32
32
|
var query_builder_1 = require("./query-builder");
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
if (
|
|
105
|
-
return
|
|
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
|
|
98
|
+
return !(0, lodash_1.isEqual)(dataEntryValue, queryValue);
|
|
109
99
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
|
105
|
+
return !this.queryFind(dataEntryValue, queryValue, arrayValueHandling);
|
|
121
106
|
}
|
|
122
107
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
|
118
|
+
return dataEntryValue < queryValue;
|
|
133
119
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
|
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
|
|
135
|
+
return dataEntryValue.some(function (value) { return value <= queryValue; });
|
|
155
136
|
}
|
|
156
137
|
else {
|
|
157
|
-
return dataEntryValue.every(function (value) { return
|
|
138
|
+
return dataEntryValue.every(function (value) { return value <= queryValue; });
|
|
158
139
|
}
|
|
159
140
|
}
|
|
160
141
|
else {
|
|
161
|
-
return
|
|
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
|
|
147
|
+
return dataEntryValue.some(function (value) { return value >= queryValue; });
|
|
172
148
|
}
|
|
173
149
|
else {
|
|
174
|
-
return dataEntryValue.every(function (value) { return
|
|
150
|
+
return dataEntryValue.every(function (value) { return value >= queryValue; });
|
|
175
151
|
}
|
|
176
152
|
}
|
|
177
153
|
else {
|
|
178
|
-
return
|
|
154
|
+
return dataEntryValue >= queryValue;
|
|
179
155
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
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
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
-
|
|
239
|
-
|
|
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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
var
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
|
275
|
+
return !!(0, lodash_1.find)(entryValue, queryValue);
|
|
257
276
|
}
|
|
258
277
|
}
|
|
259
278
|
else {
|
|
260
|
-
return
|
|
279
|
+
return (0, lodash_1.isEqualWith)(entryValue, queryValue, this.equalRegexFn);
|
|
261
280
|
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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 (
|
|
274
|
-
|
|
293
|
+
else if (this.queryBuilder.isQueryGroup(query)) {
|
|
294
|
+
return (0, lodash_1.every)(query.queries, function (q) { return _this.validateQuery(q); });
|
|
275
295
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
var
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
|
|
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
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
|
|
311
|
-
|
|
334
|
+
else if (query.operator === 'eq') {
|
|
335
|
+
return this.evaluateEqOperator(query, initialDataset, indexMap);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
312
338
|
try {
|
|
313
|
-
|
|
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
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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
|
-
|
|
339
|
-
|
|
340
|
-
var
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
376
|
-
|
|
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
|
-
|
|
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
|
-
|
|
398
|
+
}
|
|
399
|
+
if (queryGroup.groupType === 'and') {
|
|
400
|
+
currentDataset = filteredData;
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
currentDataset = initialDataset;
|
|
381
404
|
}
|
|
382
405
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
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
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
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
|