@dcupl/common 0.0.81-beta.0 → 0.0.81-beta.2

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.
@@ -0,0 +1,2 @@
1
+ import { ListItem, FilterItemEntry, DcuplFilterOptions, InverseIndexReferenceMap, DcuplGlobalQueryOptionsNew } from './types';
2
+ export declare function getFacets<ListType extends ListItem = ListItem>(modelData: Map<string, ListType>, remoteModelData: Map<string, ListType>, options: DcuplFilterOptions, query: DcuplGlobalQueryOptionsNew<any>, attributeKey: string, modelIndexMap: InverseIndexReferenceMap): FilterItemEntry[];
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ var __values = (this && this.__values) || function(o) {
28
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
29
+ if (m) return m.call(o);
30
+ if (o && typeof o.length === "number") return {
31
+ next: function () {
32
+ if (o && i >= o.length) o = void 0;
33
+ return { value: o && o[i++], done: !o };
34
+ }
35
+ };
36
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getFacets = void 0;
40
+ var queryData_1 = require("./queryData");
41
+ function getFacets(modelData, remoteModelData, options, query, attributeKey, modelIndexMap) {
42
+ var e_1, _a, e_2, _b, e_3, _c;
43
+ var filterItemEntries = [];
44
+ var currentFilteredData = (0, queryData_1.queryData)(modelData, query, false, modelIndexMap);
45
+ var remoteModelDataKeys = remoteModelData ? __spreadArray([], __read(remoteModelData === null || remoteModelData === void 0 ? void 0 : remoteModelData.keys()), false) : [];
46
+ var validFacetKeys = new Set(remoteModelDataKeys);
47
+ var indexMap = modelIndexMap.get(attributeKey);
48
+ if (!options.excludeUnresolved) {
49
+ try {
50
+ for (var _d = __values(indexMap.keys()), _e = _d.next(); !_e.done; _e = _d.next()) {
51
+ var key = _e.value;
52
+ validFacetKeys.add(key);
53
+ }
54
+ }
55
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
56
+ finally {
57
+ try {
58
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
59
+ }
60
+ finally { if (e_1) throw e_1.error; }
61
+ }
62
+ }
63
+ if (options.excludeUndefineds) {
64
+ validFacetKeys.delete(undefined);
65
+ }
66
+ else {
67
+ validFacetKeys.add(undefined);
68
+ }
69
+ try {
70
+ for (var _f = __values(validFacetKeys.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
71
+ var validFacetKey = _g.value;
72
+ var result = new Map();
73
+ var indexedValueKeys = indexMap.get(validFacetKey) || [];
74
+ try {
75
+ for (var indexedValueKeys_1 = (e_3 = void 0, __values(indexedValueKeys)), indexedValueKeys_1_1 = indexedValueKeys_1.next(); !indexedValueKeys_1_1.done; indexedValueKeys_1_1 = indexedValueKeys_1.next()) {
76
+ var key = indexedValueKeys_1_1.value;
77
+ var value = currentFilteredData.get(key);
78
+ if (value) {
79
+ result.set(key, value);
80
+ if (!(options === null || options === void 0 ? void 0 : options.calculateFacets)) {
81
+ break;
82
+ }
83
+ }
84
+ }
85
+ }
86
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
87
+ finally {
88
+ try {
89
+ if (indexedValueKeys_1_1 && !indexedValueKeys_1_1.done && (_c = indexedValueKeys_1.return)) _c.call(indexedValueKeys_1);
90
+ }
91
+ finally { if (e_3) throw e_3.error; }
92
+ }
93
+ var facetEntry = {
94
+ key: String(validFacetKey),
95
+ value: validFacetKey,
96
+ selected: isFilterItemEntrySelected(attributeKey, validFacetKey, query),
97
+ enabled: result.size > 0,
98
+ size: result.size,
99
+ entry: remoteModelData.get(validFacetKey),
100
+ resultKeys: Array.from(result.keys()),
101
+ };
102
+ if ((options === null || options === void 0 ? void 0 : options.excludeZeros) && facetEntry.size === 0) {
103
+ continue;
104
+ }
105
+ if ((options === null || options === void 0 ? void 0 : options.count) && filterItemEntries.length === (options === null || options === void 0 ? void 0 : options.count)) {
106
+ return filterItemEntries;
107
+ }
108
+ filterItemEntries.push(facetEntry);
109
+ }
110
+ }
111
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
112
+ finally {
113
+ try {
114
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
115
+ }
116
+ finally { if (e_2) throw e_2.error; }
117
+ }
118
+ return filterItemEntries;
119
+ }
120
+ exports.getFacets = getFacets;
121
+ var isFilterItemEntrySelected = function (groupKey, facetKey, query) {
122
+ var idx = query.query.findIndex(function (query) { return 'queryKey' in query && query.queryKey === groupKey; });
123
+ // console.log('isFilterItemEntrySelected', groupKey, facetKey, JSON.stringify(query, null, 2), idx);
124
+ if (idx > -1) {
125
+ var queryGroup = query.query[idx];
126
+ return !!queryGroup.query.find(function (query) {
127
+ var _a;
128
+ if ('attribute' in query) {
129
+ var key = ((_a = query.value) === null || _a === void 0 ? void 0 : _a.key) || query.value;
130
+ return query.attribute === groupKey && key === facetKey;
131
+ }
132
+ return false;
133
+ });
134
+ }
135
+ return false;
136
+ };
137
+ //# sourceMappingURL=getFacets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFacets.js","sourceRoot":"","sources":["../../src/getFacets.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export * from './queryData';
3
3
  export * from './computeSuggestions';
4
4
  export * from './helper';
5
5
  export * from './getFacetEntries';
6
+ export * from './getFacets';
6
7
  export * from './getConstraints';
7
8
  export * from './types';
8
9
  export * from './changeDetection';
@@ -19,6 +19,7 @@ __exportStar(require("./queryData"), exports);
19
19
  __exportStar(require("./computeSuggestions"), exports);
20
20
  __exportStar(require("./helper"), exports);
21
21
  __exportStar(require("./getFacetEntries"), exports);
22
+ __exportStar(require("./getFacets"), exports);
22
23
  __exportStar(require("./getConstraints"), exports);
23
24
  __exportStar(require("./types"), exports);
24
25
  __exportStar(require("./changeDetection"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,8CAA4B;AAC5B,uDAAqC;AACrC,2CAAyB;AACzB,oDAAkC;AAClC,mDAAiC;AACjC,0CAAwB;AACxB,oDAAkC;AAClC,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,8CAA4B;AAC5B,uDAAqC;AACrC,2CAAyB;AACzB,oDAAkC;AAClC,8CAA4B;AAC5B,mDAAiC;AACjC,0CAAwB;AACxB,oDAAkC;AAClC,gDAA8B"}
@@ -1,2 +1,2 @@
1
- import { ListItem, DcuplQueryGroup } from './types';
2
- export declare function queryData<ListType extends ListItem = ListItem>(initialData: Map<string, ListType>, rootQuery: DcuplQueryGroup, earlyReturn: boolean): Map<string, ListType>;
1
+ import { ListItem, DcuplQueryGroup, InverseIndexReferenceMap } from './types';
2
+ export declare function queryData<ListType extends ListItem = ListItem>(initialData: Map<string, ListType>, rootQuery: DcuplQueryGroup, earlyReturn: boolean, indexMap: InverseIndexReferenceMap): Map<string, ListType>;
@@ -10,126 +10,299 @@ var __values = (this && this.__values) || function(o) {
10
10
  };
11
11
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
12
  };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
13
29
  Object.defineProperty(exports, "__esModule", { value: true });
14
30
  exports.queryData = void 0;
15
31
  var lodash_1 = require("lodash");
16
- // import { groupBy } from './helper';
17
- // import { isAfter, isBefore, isEqual, isValid } from 'date-fns';
32
+ var transformValue = function (value, transformers) {
33
+ var e_1, _a;
34
+ if (typeof value !== 'string') {
35
+ return value;
36
+ }
37
+ try {
38
+ for (var transformers_1 = __values(transformers), transformers_1_1 = transformers_1.next(); !transformers_1_1.done; transformers_1_1 = transformers_1.next()) {
39
+ var transformer = transformers_1_1.value;
40
+ if (transformer === 'lowercase') {
41
+ value = value.toLowerCase();
42
+ }
43
+ else if (transformer === 'trim') {
44
+ value = value.trim();
45
+ }
46
+ else if (transformer === 'removeWhitespace') {
47
+ value = value.replace(/\s/g, '');
48
+ }
49
+ }
50
+ }
51
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
52
+ finally {
53
+ try {
54
+ if (transformers_1_1 && !transformers_1_1.done && (_a = transformers_1.return)) _a.call(transformers_1);
55
+ }
56
+ finally { if (e_1) throw e_1.error; }
57
+ }
58
+ return value;
59
+ };
18
60
  var evaluateQuery = function (query, dataEntry) {
19
- var value = (0, lodash_1.get)(dataEntry, query.attribute);
61
+ var _a, _b, _c, _d, _e;
62
+ var dataEntryValue;
63
+ var queryValue = query.value;
64
+ if (Array.isArray((_a = query.options) === null || _a === void 0 ? void 0 : _a.transform) && query.options.transform.length > 0) {
65
+ queryValue = transformValue(queryValue, query.options.transform);
66
+ }
67
+ if (query.attribute.includes('.') || query.attribute.includes('[')) {
68
+ dataEntryValue = (0, lodash_1.get)(dataEntry, query.attribute);
69
+ }
70
+ else {
71
+ dataEntryValue = dataEntry[query.attribute];
72
+ }
73
+ if (Array.isArray((_b = query.options) === null || _b === void 0 ? void 0 : _b.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;
80
+ }
81
+ }
20
82
  switch (query.operator) {
21
83
  case 'eq':
22
- return (0, lodash_1.isEqual)(value, query.value);
23
- case 'neq':
24
- return !(0, lodash_1.isEqual)(value, query.value);
84
+ if (!((_c = query.options) === null || _c === void 0 ? void 0 : _c.invert)) {
85
+ return (0, lodash_1.isEqual)(dataEntryValue, queryValue);
86
+ }
87
+ else {
88
+ return !(0, lodash_1.isEqual)(dataEntryValue, queryValue);
89
+ }
90
+ case 'find': {
91
+ if (!((_d = query.options) === null || _d === void 0 ? void 0 : _d.invert)) {
92
+ return queryFind(dataEntryValue, queryValue);
93
+ }
94
+ else {
95
+ return !queryFind(dataEntryValue, queryValue);
96
+ }
97
+ }
25
98
  case 'lt':
26
- return value < query.value;
99
+ return dataEntryValue < queryValue;
27
100
  case 'gt':
28
- return value > query.value;
101
+ return dataEntryValue > queryValue;
29
102
  case 'lte':
30
- return value >= query.value;
103
+ return dataEntryValue <= queryValue;
31
104
  case 'gte':
32
- return value <= query.value;
33
- case 'isUndefined':
34
- return typeof value === 'undefined';
35
- case 'isNotUndefined':
36
- return typeof value !== 'undefined';
37
- case 'isNull':
38
- return value === null;
39
- case 'isNotNull':
40
- return value !== null;
41
- case 'isFalsy':
42
- return !value;
43
- case 'isTruthy':
44
- return !!value;
45
- case 'startsWith': {
46
- if (typeof value === 'string') {
47
- return value.startsWith(query.value);
105
+ return dataEntryValue >= queryValue;
106
+ case 'typeof':
107
+ if (!((_e = query.options) === null || _e === void 0 ? void 0 : _e.invert)) {
108
+ return typeof dataEntryValue === queryValue;
48
109
  }
49
110
  else {
50
- return String(value).startsWith(query.value);
111
+ return typeof dataEntryValue !== queryValue;
51
112
  }
52
- }
53
- case 'endsWith': {
54
- if (typeof value === 'string') {
55
- return value.endsWith(query.value);
113
+ case 'isTruthy':
114
+ if (queryValue === true) {
115
+ return !!dataEntryValue;
56
116
  }
57
117
  else {
58
- return String(value).endsWith(query.value);
118
+ return !dataEntryValue;
59
119
  }
120
+ case 'size':
121
+ return (0, lodash_1.size)(dataEntryValue) === queryValue;
122
+ }
123
+ return false;
124
+ };
125
+ var evaluateEqOperator = function (query, initialDataset, indexMap) {
126
+ var e_2, _a;
127
+ var _b;
128
+ var filteredData = new Map();
129
+ var indices = indexMap.get(query.attribute);
130
+ if (indices) {
131
+ var value = void 0;
132
+ if (typeof query.value === 'string') {
133
+ value = query.value;
60
134
  }
61
- case 'includes': {
62
- return queryIncludes(value, query.value);
135
+ else if (((_b = query.value) === null || _b === void 0 ? void 0 : _b.key) && Object.keys(query.value).length === 1) {
136
+ value = query.value.key;
63
137
  }
64
- case 'notIncludes': {
65
- return !queryIncludes(value, query.value);
138
+ if (typeof value !== 'undefined') {
139
+ var indexValues = indices.get(value);
140
+ if (indexValues) {
141
+ indexValues.forEach(function (key) {
142
+ if (initialDataset.has(key)) {
143
+ filteredData.set(key, initialDataset.get(key));
144
+ }
145
+ });
146
+ return filteredData;
147
+ }
66
148
  }
67
149
  }
68
- return false;
69
- };
70
- var evaluateQueryGroup = function (queryGroup, dataEntry) {
71
- var e_1, _a;
72
- var results = [];
73
150
  try {
74
- for (var _b = __values(queryGroup.query), _c = _b.next(); !_c.done; _c = _b.next()) {
75
- var query = _c.value;
76
- if ('attribute' in query) {
77
- results.push(evaluateQuery(query, dataEntry));
78
- }
79
- else {
80
- results.push(evaluateQueryGroup(query, dataEntry));
151
+ // fallback if indices do not work properly...
152
+ for (var initialDataset_1 = __values(initialDataset), initialDataset_1_1 = initialDataset_1.next(); !initialDataset_1_1.done; initialDataset_1_1 = initialDataset_1.next()) {
153
+ var _c = __read(initialDataset_1_1.value, 2), key = _c[0], value = _c[1];
154
+ if (evaluateQuery(query, value)) {
155
+ filteredData.set(key, value);
81
156
  }
82
157
  }
83
158
  }
84
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
159
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
85
160
  finally {
86
161
  try {
87
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
162
+ if (initialDataset_1_1 && !initialDataset_1_1.done && (_a = initialDataset_1.return)) _a.call(initialDataset_1);
88
163
  }
89
- finally { if (e_1) throw e_1.error; }
164
+ finally { if (e_2) throw e_2.error; }
165
+ }
166
+ return filteredData;
167
+ };
168
+ var equalRegexFn = function (value, queryValue) {
169
+ if (typeof queryValue === 'string' && (0, lodash_1.startsWith)(queryValue, '/')) {
170
+ var regex = new RegExp(queryValue.slice(1, -1));
171
+ return regex.test(value);
172
+ }
173
+ else if (Array.isArray(value)) {
174
+ return !!value.find(function (val) { return (0, lodash_1.isEqualWith)(val, queryValue, equalRegexFn); });
175
+ }
176
+ else {
177
+ return (0, lodash_1.isEqual)(value, queryValue);
90
178
  }
91
- if (queryGroup.queryType === 'and') {
92
- return results.every(function (result) { return result; });
179
+ };
180
+ var queryFind = function (entryValue, queryValue) {
181
+ if (Array.isArray(entryValue)) {
182
+ if (typeof queryValue === 'string' || typeof queryValue === 'number' || typeof queryValue === 'boolean') {
183
+ return !!entryValue.find(function (value) { return (0, lodash_1.isEqualWith)(value, queryValue, equalRegexFn); });
184
+ }
185
+ else {
186
+ if (Array.isArray(entryValue)) {
187
+ return !!(0, lodash_1.find)(entryValue, queryValue);
188
+ }
189
+ else {
190
+ return (0, lodash_1.isEqualWith)(entryValue, queryValue, equalRegexFn);
191
+ }
192
+ }
93
193
  }
94
194
  else {
95
- return results.some(function (result) { return result; });
195
+ return (0, lodash_1.isEqualWith)(entryValue, queryValue, equalRegexFn);
96
196
  }
97
197
  };
98
- var queryIncludes = function (entryValue, queryValue) {
99
- if (typeof entryValue === 'string') {
100
- return entryValue.includes(queryValue);
198
+ var validateQuery = function (query) {
199
+ if ('attribute' in query) {
200
+ if (!query.attribute || !query.operator)
201
+ throw new Error('invalid query - missing attribute or operator');
202
+ if (query.operator === 'find' && Array.isArray(query.value))
203
+ throw new Error('invalid query - find operator cannot have array value');
204
+ return true;
101
205
  }
102
- else if (Array.isArray(entryValue)) {
103
- return entryValue.includes(queryValue);
206
+ else if (query.query) {
207
+ return (0, lodash_1.every)(query.query, function (q) { return validateQuery(q); });
104
208
  }
105
209
  else {
106
- return String(entryValue).includes(queryValue);
210
+ throw new Error('invalid query - missing query or attribute');
107
211
  }
108
212
  };
109
- function queryData(initialData, rootQuery, earlyReturn) {
110
- var e_2, _a;
213
+ var getEvaluatedQueryDataset = function (query, initialDataset, indexMap) {
214
+ var e_3, _a;
111
215
  var filteredData = new Map();
112
- var currentDataset = new Map(initialData);
216
+ if (query.operator === 'eq') {
217
+ return evaluateEqOperator(query, initialDataset, indexMap);
218
+ }
219
+ else {
220
+ try {
221
+ for (var initialDataset_2 = __values(initialDataset), initialDataset_2_1 = initialDataset_2.next(); !initialDataset_2_1.done; initialDataset_2_1 = initialDataset_2.next()) {
222
+ var _b = __read(initialDataset_2_1.value, 2), key = _b[0], value = _b[1];
223
+ if (evaluateQuery(query, value)) {
224
+ filteredData.set(key, value);
225
+ }
226
+ }
227
+ }
228
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
229
+ finally {
230
+ try {
231
+ if (initialDataset_2_1 && !initialDataset_2_1.done && (_a = initialDataset_2.return)) _a.call(initialDataset_2);
232
+ }
233
+ finally { if (e_3) throw e_3.error; }
234
+ }
235
+ }
236
+ return filteredData;
237
+ };
238
+ var evaluateQueryGroup = function (queryGroup, initialDataset, earlyReturn, indexMap) {
239
+ var e_4, _a, e_5, _b;
240
+ var _c;
241
+ var filteredData = new Map();
242
+ var currentDataset = initialDataset;
113
243
  earlyReturn;
114
- if (rootQuery.query.length === 0) {
244
+ if (!queryGroup.query || ((_c = queryGroup.query) === null || _c === void 0 ? void 0 : _c.length) === 0) {
115
245
  return currentDataset;
116
246
  }
117
247
  try {
118
- for (var _b = __values(currentDataset.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
119
- var dataEntry = _c.value;
120
- if (evaluateQueryGroup(rootQuery, dataEntry)) {
121
- filteredData.set(dataEntry.key, dataEntry);
248
+ for (var _d = __values(queryGroup.query), _e = _d.next(); !_e.done; _e = _d.next()) {
249
+ var query = _e.value;
250
+ var result = new Map();
251
+ if ('attribute' in query) {
252
+ result = getEvaluatedQueryDataset(query, currentDataset, indexMap);
253
+ }
254
+ else {
255
+ result = evaluateQueryGroup(query, currentDataset, earlyReturn, indexMap);
256
+ }
257
+ if (filteredData.size === 0) {
258
+ filteredData = result;
259
+ }
260
+ if (queryGroup.queryType === 'or') {
261
+ result.forEach(function (item) {
262
+ filteredData.set(item.key, item);
263
+ });
264
+ }
265
+ else {
266
+ var diff = (0, lodash_1.differenceBy)(Array.from(filteredData.values()), Array.from(result.values()), 'key');
267
+ try {
268
+ for (var diff_1 = (e_5 = void 0, __values(diff)), diff_1_1 = diff_1.next(); !diff_1_1.done; diff_1_1 = diff_1.next()) {
269
+ var item = diff_1_1.value;
270
+ filteredData.delete(item.key);
271
+ }
272
+ }
273
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
274
+ finally {
275
+ try {
276
+ if (diff_1_1 && !diff_1_1.done && (_b = diff_1.return)) _b.call(diff_1);
277
+ }
278
+ finally { if (e_5) throw e_5.error; }
279
+ }
280
+ }
281
+ if (queryGroup.queryType === 'and') {
282
+ currentDataset = filteredData;
283
+ }
284
+ else {
285
+ currentDataset = initialDataset;
122
286
  }
123
287
  }
124
288
  }
125
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
289
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
126
290
  finally {
127
291
  try {
128
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
292
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
129
293
  }
130
- finally { if (e_2) throw e_2.error; }
294
+ finally { if (e_4) throw e_4.error; }
131
295
  }
132
296
  return filteredData;
297
+ };
298
+ function queryData(initialData, rootQuery, earlyReturn, indexMap) {
299
+ // const currentDataset = new Map(initialData);
300
+ var currentDataset = initialData;
301
+ if (rootQuery.query.length === 0) {
302
+ return initialData;
303
+ }
304
+ validateQuery(rootQuery);
305
+ return evaluateQueryGroup(rootQuery, currentDataset, earlyReturn, indexMap);
133
306
  }
134
307
  exports.queryData = queryData;
135
308
  //# sourceMappingURL=queryData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryData.js","sourceRoot":"","sources":["../../src/queryData.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,iCAAsC;AACtC,sCAAsC;AACtC,kEAAkE;AAElE,IAAM,aAAa,GAAG,UAAC,KAAiB,EAAE,SAAmB;IAC3D,IAAM,KAAK,GAAG,IAAA,YAAG,EAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAE9C,QAAQ,KAAK,CAAC,QAAQ,EAAE;QACtB,KAAK,IAAI;YACP,OAAO,IAAA,gBAAO,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,KAAK;YACR,OAAO,CAAC,IAAA,gBAAO,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,IAAI;YACP,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC7B,KAAK,IAAI;YACP,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC7B,KAAK,KAAK;YACR,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;QAC9B,KAAK,KAAK;YACR,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;QAC9B,KAAK,aAAa;YAChB,OAAO,OAAO,KAAK,KAAK,WAAW,CAAC;QACtC,KAAK,gBAAgB;YACnB,OAAO,OAAO,KAAK,KAAK,WAAW,CAAC;QACtC,KAAK,QAAQ;YACX,OAAO,KAAK,KAAK,IAAI,CAAC;QACxB,KAAK,WAAW;YACd,OAAO,KAAK,KAAK,IAAI,CAAC;QACxB,KAAK,SAAS;YACZ,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,KAAK,YAAY,CAAC,CAAC;YACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACtC;iBAAM;gBACL,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC9C;SACF;QACD,KAAK,UAAU,CAAC,CAAC;YACf,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACpC;iBAAM;gBACL,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC5C;SACF;QACD,KAAK,UAAU,CAAC,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C;QACD,KAAK,aAAa,CAAC,CAAC;YAClB,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;SAC3C;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,IAAM,kBAAkB,GAAG,UAAC,UAA2B,EAAE,SAAmB;;IAC1E,IAAM,OAAO,GAAc,EAAE,CAAC;;QAC9B,KAAoB,IAAA,KAAA,SAAA,UAAU,CAAC,KAAK,CAAA,gBAAA,4BAAE;YAAjC,IAAM,KAAK,WAAA;YACd,IAAI,WAAW,IAAI,KAAK,EAAE;gBACxB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;aAC/C;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;aACpD;SACF;;;;;;;;;IAED,IAAI,UAAU,CAAC,SAAS,KAAK,KAAK,EAAE;QAClC,OAAO,OAAO,CAAC,KAAK,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,EAAN,CAAM,CAAC,CAAC;KAC1C;SAAM;QACL,OAAO,OAAO,CAAC,IAAI,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,EAAN,CAAM,CAAC,CAAC;KACzC;AACH,CAAC,CAAC;AAEF,IAAM,aAAa,GAAG,UAAC,UAAuB,EAAE,UAAe;IAC7D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAClC,OAAO,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KACxC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KACxC;SAAM;QACL,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KAChD;AACH,CAAC,CAAC;AAEF,SAAgB,SAAS,CACvB,WAAkC,EAClC,SAA0B,EAC1B,WAAoB;;IAEpB,IAAM,YAAY,GAA0B,IAAI,GAAG,EAAE,CAAC;IACtD,IAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,WAAW,CAAC;IACZ,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAChC,OAAO,cAAc,CAAC;KACvB;;QAED,KAAwB,IAAA,KAAA,SAAA,cAAc,CAAC,MAAM,EAAE,CAAA,gBAAA,4BAAE;YAA5C,IAAM,SAAS,WAAA;YAClB,IAAI,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;gBAC5C,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;aAC5C;SACF;;;;;;;;;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAnBD,8BAmBC"}
1
+ {"version":3,"file":"queryData.js","sourceRoot":"","sources":["../../src/queryData.ts"],"names":[],"mappings":"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"}