@dcupl/common 0.0.81-beta.1 → 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.
@@ -50,26 +50,59 @@ export type DcuplGlobalQueryOptions<T> = DcuplItemsOptions<T> & {
50
50
  listKey: string;
51
51
  query: FilterOptions[];
52
52
  };
53
- type DcuplQueryTransformOptions = 'none' | 'lowercase' | 'uppercase' | 'trim' | 'removeWhitespace';
53
+ export type DcuplQueryTransformOptions = 'lowercase' | 'trim' | 'removeWhitespace';
54
54
  type DcuplQueryOptions = {
55
- transform: DcuplQueryTransformOptions[];
55
+ transform?: DcuplQueryTransformOptions[];
56
+ /**
57
+ * Invert possible for eq, typeof
58
+ */
59
+ invert?: boolean;
56
60
  };
57
- type DcuplQueryArrayOperators = 'in' | 'nin';
58
- type DcuplQueryStringOperators = 'startsWith' | 'endsWith' | 'includes' | 'notIncludes';
59
- type DcuplQueryGeneralOperators = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte';
60
- type DcuplQueryFalsy = 'isUndefined' | 'isNotUndefined' | 'isNull' | 'isNotNull' | 'isFalsy' | 'isTruthy';
61
- export type DcuplQueryOperator = DcuplQueryGeneralOperators | DcuplQueryArrayOperators | DcuplQueryFalsy | DcuplQueryStringOperators;
61
+ type DcuplQueryFindOperator = 'find';
62
+ type DcuplQueryGeneralOperators = 'eq' | 'gt' | 'gte' | 'lt' | 'lte';
63
+ type DcuplQuerySpecialOperator = 'typeof' | 'isTruthy' | 'size';
64
+ export type DcuplQueryOperator = DcuplQueryGeneralOperators | DcuplQueryFindOperator | DcuplQuerySpecialOperator;
62
65
  export type DcuplQueryType = 'and' | 'or';
63
- export type DcuplQuery = {
66
+ type DcuplQueryBase = {
67
+ /**
68
+ * title, something.key someArray[0].key
69
+ * */
64
70
  attribute: string;
65
- operator: DcuplQueryOperator;
66
- value: any;
67
71
  options?: DcuplQueryOptions;
68
72
  };
73
+ type DcuplQueryEq = DcuplQueryBase & {
74
+ operator: 'eq';
75
+ /**
76
+ * You may search for any value but
77
+ * only values of type string and { key:string } may be used for indexed search
78
+ */
79
+ value: any;
80
+ };
81
+ type DcuplQueryFind = DcuplQueryBase & {
82
+ operator: 'find';
83
+ value: Record<string, unknown> | string;
84
+ };
85
+ type DcuplQueryNumbers = DcuplQueryBase & {
86
+ operator: 'gt' | 'lt' | 'gte' | 'lte';
87
+ value: string | number | Date;
88
+ };
89
+ type DcuplQueryTypeOf = DcuplQueryBase & {
90
+ operator: 'typeof';
91
+ value: string;
92
+ };
93
+ type DcuplQueryIsTruthy = DcuplQueryBase & {
94
+ operator: 'isTruthy';
95
+ value: boolean;
96
+ };
97
+ type DcuplQuerySize = DcuplQueryBase & {
98
+ operator: 'size';
99
+ value: number;
100
+ };
101
+ export type DcuplQuery = DcuplQueryEq | DcuplQueryNumbers | DcuplQueryTypeOf | DcuplQueryIsTruthy | DcuplQuerySize | DcuplQueryFind;
69
102
  export type DcuplQueryGroup = {
70
103
  queryType?: DcuplQueryType;
71
104
  queryKey?: string;
72
- query: Array<DcuplQuery> | Array<DcuplQueryGroup>;
105
+ query: Array<DcuplQuery | DcuplQueryGroup>;
73
106
  options?: DcuplQueryOptions;
74
107
  };
75
108
  export type DcuplGlobalQueryOptionsNew<T> = DcuplItemsOptions<T> & {
@@ -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,133 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ var __values = (this && this.__values) || function(o) {
27
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
28
+ if (m) return m.call(o);
29
+ if (o && typeof o.length === "number") return {
30
+ next: function () {
31
+ if (o && i >= o.length) o = void 0;
32
+ return { value: o && o[i++], done: !o };
33
+ }
34
+ };
35
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
36
+ };
37
+ import { queryData } from './queryData';
38
+ export function getFacets(modelData, remoteModelData, options, query, attributeKey, modelIndexMap) {
39
+ var e_1, _a, e_2, _b, e_3, _c;
40
+ var filterItemEntries = [];
41
+ var currentFilteredData = queryData(modelData, query, false, modelIndexMap);
42
+ var remoteModelDataKeys = remoteModelData ? __spreadArray([], __read(remoteModelData === null || remoteModelData === void 0 ? void 0 : remoteModelData.keys()), false) : [];
43
+ var validFacetKeys = new Set(remoteModelDataKeys);
44
+ var indexMap = modelIndexMap.get(attributeKey);
45
+ if (!options.excludeUnresolved) {
46
+ try {
47
+ for (var _d = __values(indexMap.keys()), _e = _d.next(); !_e.done; _e = _d.next()) {
48
+ var key = _e.value;
49
+ validFacetKeys.add(key);
50
+ }
51
+ }
52
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
53
+ finally {
54
+ try {
55
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
56
+ }
57
+ finally { if (e_1) throw e_1.error; }
58
+ }
59
+ }
60
+ if (options.excludeUndefineds) {
61
+ validFacetKeys.delete(undefined);
62
+ }
63
+ else {
64
+ validFacetKeys.add(undefined);
65
+ }
66
+ try {
67
+ for (var _f = __values(validFacetKeys.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
68
+ var validFacetKey = _g.value;
69
+ var result = new Map();
70
+ var indexedValueKeys = indexMap.get(validFacetKey) || [];
71
+ try {
72
+ 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()) {
73
+ var key = indexedValueKeys_1_1.value;
74
+ var value = currentFilteredData.get(key);
75
+ if (value) {
76
+ result.set(key, value);
77
+ if (!(options === null || options === void 0 ? void 0 : options.calculateFacets)) {
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
84
+ finally {
85
+ try {
86
+ if (indexedValueKeys_1_1 && !indexedValueKeys_1_1.done && (_c = indexedValueKeys_1.return)) _c.call(indexedValueKeys_1);
87
+ }
88
+ finally { if (e_3) throw e_3.error; }
89
+ }
90
+ var facetEntry = {
91
+ key: String(validFacetKey),
92
+ value: validFacetKey,
93
+ selected: isFilterItemEntrySelected(attributeKey, validFacetKey, query),
94
+ enabled: result.size > 0,
95
+ size: result.size,
96
+ entry: remoteModelData.get(validFacetKey),
97
+ resultKeys: Array.from(result.keys()),
98
+ };
99
+ if ((options === null || options === void 0 ? void 0 : options.excludeZeros) && facetEntry.size === 0) {
100
+ continue;
101
+ }
102
+ if ((options === null || options === void 0 ? void 0 : options.count) && filterItemEntries.length === (options === null || options === void 0 ? void 0 : options.count)) {
103
+ return filterItemEntries;
104
+ }
105
+ filterItemEntries.push(facetEntry);
106
+ }
107
+ }
108
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
109
+ finally {
110
+ try {
111
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
112
+ }
113
+ finally { if (e_2) throw e_2.error; }
114
+ }
115
+ return filterItemEntries;
116
+ }
117
+ var isFilterItemEntrySelected = function (groupKey, facetKey, query) {
118
+ var idx = query.query.findIndex(function (query) { return 'queryKey' in query && query.queryKey === groupKey; });
119
+ // console.log('isFilterItemEntrySelected', groupKey, facetKey, JSON.stringify(query, null, 2), idx);
120
+ if (idx > -1) {
121
+ var queryGroup = query.query[idx];
122
+ return !!queryGroup.query.find(function (query) {
123
+ var _a;
124
+ if ('attribute' in query) {
125
+ var key = ((_a = query.value) === null || _a === void 0 ? void 0 : _a.key) || query.value;
126
+ return query.attribute === groupKey && key === facetKey;
127
+ }
128
+ return false;
129
+ });
130
+ }
131
+ return false;
132
+ };
133
+ //# 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';
@@ -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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
@@ -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>;
@@ -9,123 +9,296 @@ var __values = (this && this.__values) || function(o) {
9
9
  };
10
10
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
11
11
  };
12
- import { get, isEqual } from 'lodash';
13
- // import { groupBy } from './helper';
14
- // import { isAfter, isBefore, isEqual, isValid } from 'date-fns';
12
+ var __read = (this && this.__read) || function (o, n) {
13
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
14
+ if (!m) return o;
15
+ var i = m.call(o), r, ar = [], e;
16
+ try {
17
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
18
+ }
19
+ catch (error) { e = { error: error }; }
20
+ finally {
21
+ try {
22
+ if (r && !r.done && (m = i["return"])) m.call(i);
23
+ }
24
+ finally { if (e) throw e.error; }
25
+ }
26
+ return ar;
27
+ };
28
+ import { get, isEqual, find, size, startsWith, isEqualWith, differenceBy, every } from 'lodash';
29
+ var transformValue = function (value, transformers) {
30
+ var e_1, _a;
31
+ if (typeof value !== 'string') {
32
+ return value;
33
+ }
34
+ try {
35
+ for (var transformers_1 = __values(transformers), transformers_1_1 = transformers_1.next(); !transformers_1_1.done; transformers_1_1 = transformers_1.next()) {
36
+ var transformer = transformers_1_1.value;
37
+ if (transformer === 'lowercase') {
38
+ value = value.toLowerCase();
39
+ }
40
+ else if (transformer === 'trim') {
41
+ value = value.trim();
42
+ }
43
+ else if (transformer === 'removeWhitespace') {
44
+ value = value.replace(/\s/g, '');
45
+ }
46
+ }
47
+ }
48
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
49
+ finally {
50
+ try {
51
+ if (transformers_1_1 && !transformers_1_1.done && (_a = transformers_1.return)) _a.call(transformers_1);
52
+ }
53
+ finally { if (e_1) throw e_1.error; }
54
+ }
55
+ return value;
56
+ };
15
57
  var evaluateQuery = function (query, dataEntry) {
16
- var value = get(dataEntry, query.attribute);
58
+ var _a, _b, _c, _d, _e;
59
+ var dataEntryValue;
60
+ var queryValue = query.value;
61
+ if (Array.isArray((_a = query.options) === null || _a === void 0 ? void 0 : _a.transform) && query.options.transform.length > 0) {
62
+ queryValue = transformValue(queryValue, query.options.transform);
63
+ }
64
+ if (query.attribute.includes('.') || query.attribute.includes('[')) {
65
+ dataEntryValue = get(dataEntry, query.attribute);
66
+ }
67
+ else {
68
+ dataEntryValue = dataEntry[query.attribute];
69
+ }
70
+ if (Array.isArray((_b = query.options) === null || _b === void 0 ? void 0 : _b.transform) && query.options.transform.length > 0) {
71
+ dataEntryValue = transformValue(dataEntryValue, query.options.transform);
72
+ }
73
+ if (typeof dataEntryValue === 'undefined' || dataEntryValue === null) {
74
+ var allowedUndefinedAndNullOperators = ['typeof', 'isTruthy', 'eq'];
75
+ if (!allowedUndefinedAndNullOperators.includes(query.operator)) {
76
+ return false;
77
+ }
78
+ }
17
79
  switch (query.operator) {
18
80
  case 'eq':
19
- return isEqual(value, query.value);
20
- case 'neq':
21
- return !isEqual(value, query.value);
81
+ if (!((_c = query.options) === null || _c === void 0 ? void 0 : _c.invert)) {
82
+ return isEqual(dataEntryValue, queryValue);
83
+ }
84
+ else {
85
+ return !isEqual(dataEntryValue, queryValue);
86
+ }
87
+ case 'find': {
88
+ if (!((_d = query.options) === null || _d === void 0 ? void 0 : _d.invert)) {
89
+ return queryFind(dataEntryValue, queryValue);
90
+ }
91
+ else {
92
+ return !queryFind(dataEntryValue, queryValue);
93
+ }
94
+ }
22
95
  case 'lt':
23
- return value < query.value;
96
+ return dataEntryValue < queryValue;
24
97
  case 'gt':
25
- return value > query.value;
98
+ return dataEntryValue > queryValue;
26
99
  case 'lte':
27
- return value >= query.value;
100
+ return dataEntryValue <= queryValue;
28
101
  case 'gte':
29
- return value <= query.value;
30
- case 'isUndefined':
31
- return typeof value === 'undefined';
32
- case 'isNotUndefined':
33
- return typeof value !== 'undefined';
34
- case 'isNull':
35
- return value === null;
36
- case 'isNotNull':
37
- return value !== null;
38
- case 'isFalsy':
39
- return !value;
40
- case 'isTruthy':
41
- return !!value;
42
- case 'startsWith': {
43
- if (typeof value === 'string') {
44
- return value.startsWith(query.value);
102
+ return dataEntryValue >= queryValue;
103
+ case 'typeof':
104
+ if (!((_e = query.options) === null || _e === void 0 ? void 0 : _e.invert)) {
105
+ return typeof dataEntryValue === queryValue;
45
106
  }
46
107
  else {
47
- return String(value).startsWith(query.value);
108
+ return typeof dataEntryValue !== queryValue;
48
109
  }
49
- }
50
- case 'endsWith': {
51
- if (typeof value === 'string') {
52
- return value.endsWith(query.value);
110
+ case 'isTruthy':
111
+ if (queryValue === true) {
112
+ return !!dataEntryValue;
53
113
  }
54
114
  else {
55
- return String(value).endsWith(query.value);
115
+ return !dataEntryValue;
56
116
  }
117
+ case 'size':
118
+ return size(dataEntryValue) === queryValue;
119
+ }
120
+ return false;
121
+ };
122
+ var evaluateEqOperator = function (query, initialDataset, indexMap) {
123
+ var e_2, _a;
124
+ var _b;
125
+ var filteredData = new Map();
126
+ var indices = indexMap.get(query.attribute);
127
+ if (indices) {
128
+ var value = void 0;
129
+ if (typeof query.value === 'string') {
130
+ value = query.value;
57
131
  }
58
- case 'includes': {
59
- return queryIncludes(value, query.value);
132
+ else if (((_b = query.value) === null || _b === void 0 ? void 0 : _b.key) && Object.keys(query.value).length === 1) {
133
+ value = query.value.key;
60
134
  }
61
- case 'notIncludes': {
62
- return !queryIncludes(value, query.value);
135
+ if (typeof value !== 'undefined') {
136
+ var indexValues = indices.get(value);
137
+ if (indexValues) {
138
+ indexValues.forEach(function (key) {
139
+ if (initialDataset.has(key)) {
140
+ filteredData.set(key, initialDataset.get(key));
141
+ }
142
+ });
143
+ return filteredData;
144
+ }
63
145
  }
64
146
  }
65
- return false;
66
- };
67
- var evaluateQueryGroup = function (queryGroup, dataEntry) {
68
- var e_1, _a;
69
- var results = [];
70
147
  try {
71
- for (var _b = __values(queryGroup.query), _c = _b.next(); !_c.done; _c = _b.next()) {
72
- var query = _c.value;
73
- if ('attribute' in query) {
74
- results.push(evaluateQuery(query, dataEntry));
75
- }
76
- else {
77
- results.push(evaluateQueryGroup(query, dataEntry));
148
+ // fallback if indices do not work properly...
149
+ for (var initialDataset_1 = __values(initialDataset), initialDataset_1_1 = initialDataset_1.next(); !initialDataset_1_1.done; initialDataset_1_1 = initialDataset_1.next()) {
150
+ var _c = __read(initialDataset_1_1.value, 2), key = _c[0], value = _c[1];
151
+ if (evaluateQuery(query, value)) {
152
+ filteredData.set(key, value);
78
153
  }
79
154
  }
80
155
  }
81
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
156
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
82
157
  finally {
83
158
  try {
84
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
159
+ if (initialDataset_1_1 && !initialDataset_1_1.done && (_a = initialDataset_1.return)) _a.call(initialDataset_1);
85
160
  }
86
- finally { if (e_1) throw e_1.error; }
161
+ finally { if (e_2) throw e_2.error; }
162
+ }
163
+ return filteredData;
164
+ };
165
+ var equalRegexFn = function (value, queryValue) {
166
+ if (typeof queryValue === 'string' && startsWith(queryValue, '/')) {
167
+ var regex = new RegExp(queryValue.slice(1, -1));
168
+ return regex.test(value);
169
+ }
170
+ else if (Array.isArray(value)) {
171
+ return !!value.find(function (val) { return isEqualWith(val, queryValue, equalRegexFn); });
172
+ }
173
+ else {
174
+ return isEqual(value, queryValue);
87
175
  }
88
- if (queryGroup.queryType === 'and') {
89
- return results.every(function (result) { return result; });
176
+ };
177
+ var queryFind = function (entryValue, queryValue) {
178
+ if (Array.isArray(entryValue)) {
179
+ if (typeof queryValue === 'string' || typeof queryValue === 'number' || typeof queryValue === 'boolean') {
180
+ return !!entryValue.find(function (value) { return isEqualWith(value, queryValue, equalRegexFn); });
181
+ }
182
+ else {
183
+ if (Array.isArray(entryValue)) {
184
+ return !!find(entryValue, queryValue);
185
+ }
186
+ else {
187
+ return isEqualWith(entryValue, queryValue, equalRegexFn);
188
+ }
189
+ }
90
190
  }
91
191
  else {
92
- return results.some(function (result) { return result; });
192
+ return isEqualWith(entryValue, queryValue, equalRegexFn);
93
193
  }
94
194
  };
95
- var queryIncludes = function (entryValue, queryValue) {
96
- if (typeof entryValue === 'string') {
97
- return entryValue.includes(queryValue);
195
+ var validateQuery = function (query) {
196
+ if ('attribute' in query) {
197
+ if (!query.attribute || !query.operator)
198
+ throw new Error('invalid query - missing attribute or operator');
199
+ if (query.operator === 'find' && Array.isArray(query.value))
200
+ throw new Error('invalid query - find operator cannot have array value');
201
+ return true;
98
202
  }
99
- else if (Array.isArray(entryValue)) {
100
- return entryValue.includes(queryValue);
203
+ else if (query.query) {
204
+ return every(query.query, function (q) { return validateQuery(q); });
101
205
  }
102
206
  else {
103
- return String(entryValue).includes(queryValue);
207
+ throw new Error('invalid query - missing query or attribute');
104
208
  }
105
209
  };
106
- export function queryData(initialData, rootQuery, earlyReturn) {
107
- var e_2, _a;
210
+ var getEvaluatedQueryDataset = function (query, initialDataset, indexMap) {
211
+ var e_3, _a;
108
212
  var filteredData = new Map();
109
- var currentDataset = new Map(initialData);
213
+ if (query.operator === 'eq') {
214
+ return evaluateEqOperator(query, initialDataset, indexMap);
215
+ }
216
+ else {
217
+ try {
218
+ for (var initialDataset_2 = __values(initialDataset), initialDataset_2_1 = initialDataset_2.next(); !initialDataset_2_1.done; initialDataset_2_1 = initialDataset_2.next()) {
219
+ var _b = __read(initialDataset_2_1.value, 2), key = _b[0], value = _b[1];
220
+ if (evaluateQuery(query, value)) {
221
+ filteredData.set(key, value);
222
+ }
223
+ }
224
+ }
225
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
226
+ finally {
227
+ try {
228
+ if (initialDataset_2_1 && !initialDataset_2_1.done && (_a = initialDataset_2.return)) _a.call(initialDataset_2);
229
+ }
230
+ finally { if (e_3) throw e_3.error; }
231
+ }
232
+ }
233
+ return filteredData;
234
+ };
235
+ var evaluateQueryGroup = function (queryGroup, initialDataset, earlyReturn, indexMap) {
236
+ var e_4, _a, e_5, _b;
237
+ var _c;
238
+ var filteredData = new Map();
239
+ var currentDataset = initialDataset;
110
240
  earlyReturn;
111
- if (rootQuery.query.length === 0) {
241
+ if (!queryGroup.query || ((_c = queryGroup.query) === null || _c === void 0 ? void 0 : _c.length) === 0) {
112
242
  return currentDataset;
113
243
  }
114
244
  try {
115
- for (var _b = __values(currentDataset.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
116
- var dataEntry = _c.value;
117
- if (evaluateQueryGroup(rootQuery, dataEntry)) {
118
- filteredData.set(dataEntry.key, dataEntry);
245
+ for (var _d = __values(queryGroup.query), _e = _d.next(); !_e.done; _e = _d.next()) {
246
+ var query = _e.value;
247
+ var result = new Map();
248
+ if ('attribute' in query) {
249
+ result = getEvaluatedQueryDataset(query, currentDataset, indexMap);
250
+ }
251
+ else {
252
+ result = evaluateQueryGroup(query, currentDataset, earlyReturn, indexMap);
253
+ }
254
+ if (filteredData.size === 0) {
255
+ filteredData = result;
256
+ }
257
+ if (queryGroup.queryType === 'or') {
258
+ result.forEach(function (item) {
259
+ filteredData.set(item.key, item);
260
+ });
261
+ }
262
+ else {
263
+ var diff = differenceBy(Array.from(filteredData.values()), Array.from(result.values()), 'key');
264
+ try {
265
+ 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()) {
266
+ var item = diff_1_1.value;
267
+ filteredData.delete(item.key);
268
+ }
269
+ }
270
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
271
+ finally {
272
+ try {
273
+ if (diff_1_1 && !diff_1_1.done && (_b = diff_1.return)) _b.call(diff_1);
274
+ }
275
+ finally { if (e_5) throw e_5.error; }
276
+ }
277
+ }
278
+ if (queryGroup.queryType === 'and') {
279
+ currentDataset = filteredData;
280
+ }
281
+ else {
282
+ currentDataset = initialDataset;
119
283
  }
120
284
  }
121
285
  }
122
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
286
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
123
287
  finally {
124
288
  try {
125
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
289
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
126
290
  }
127
- finally { if (e_2) throw e_2.error; }
291
+ finally { if (e_4) throw e_4.error; }
128
292
  }
129
293
  return filteredData;
294
+ };
295
+ export function queryData(initialData, rootQuery, earlyReturn, indexMap) {
296
+ // const currentDataset = new Map(initialData);
297
+ var currentDataset = initialData;
298
+ if (rootQuery.query.length === 0) {
299
+ return initialData;
300
+ }
301
+ validateQuery(rootQuery);
302
+ return evaluateQueryGroup(rootQuery, currentDataset, earlyReturn, indexMap);
130
303
  }
131
304
  //# sourceMappingURL=queryData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryData.js","sourceRoot":"","sources":["../../src/queryData.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryData.js","sourceRoot":"","sources":["../../src/queryData.ts"],"names":[],"mappings":"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"}