@dcupl/common 1.8.2-beta.3 → 1.8.2-beta.4
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/browser/common.umd.js +1 -1
- package/dist/browser/common.umd.js.map +1 -1
- package/dist/esm/analytics.controller.js +50 -60
- package/dist/esm/analytics.controller.js.map +1 -1
- package/dist/esm/cache.controller.js +18 -18
- package/dist/esm/cache.controller.js.map +1 -1
- package/dist/esm/changeDetection.js +46 -53
- package/dist/esm/changeDetection.js.map +1 -1
- package/dist/esm/computeSuggestions.js +26 -64
- package/dist/esm/computeSuggestions.js.map +1 -1
- package/dist/esm/dependency-graph.js +61 -177
- package/dist/esm/dependency-graph.js.map +1 -1
- package/dist/esm/getAggregation.js +78 -182
- package/dist/esm/getAggregation.js.map +1 -1
- package/dist/esm/getFacets.js +38 -106
- package/dist/esm/getFacets.js.map +1 -1
- package/dist/esm/helper.js +27 -52
- package/dist/esm/helper.js.map +1 -1
- package/dist/esm/indices.controller.js +61 -129
- package/dist/esm/indices.controller.js.map +1 -1
- package/dist/esm/object-hash.js +8 -8
- package/dist/esm/object-hash.js.map +1 -1
- package/dist/esm/performance.js +6 -6
- package/dist/esm/performance.js.map +1 -1
- package/dist/esm/pivot.js +77 -234
- package/dist/esm/pivot.js.map +1 -1
- package/dist/esm/property-parser.js +21 -72
- package/dist/esm/property-parser.js.map +1 -1
- package/dist/esm/query-builder.js +67 -133
- package/dist/esm/query-builder.js.map +1 -1
- package/dist/esm/query.helper.js +21 -21
- package/dist/esm/query.helper.js.map +1 -1
- package/dist/esm/queryData.js +119 -222
- package/dist/esm/queryData.js.map +1 -1
- package/dist/esm/script.controller.js +35 -60
- package/dist/esm/script.controller.js.map +1 -1
- package/dist/esm/template-parser.js +6 -6
- package/dist/esm/template-parser.js.map +1 -1
- package/dist/esm/types/model.types.js +3 -3
- package/dist/esm/types/model.types.js.map +1 -1
- package/dist/esm/types/query.types.js +1 -1
- package/dist/esm/types/query.types.js.map +1 -1
- package/dist/node/index.cjs.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,116 +1,66 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
next: function () {
|
|
6
|
-
if (o && i >= o.length) o = void 0;
|
|
7
|
-
return { value: o && o[i++], done: !o };
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
-
};
|
|
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
|
-
var DependencyGraph = /** @class */ (function () {
|
|
29
|
-
function DependencyGraph() {
|
|
1
|
+
export class DependencyGraph {
|
|
2
|
+
nodes;
|
|
3
|
+
edges;
|
|
4
|
+
constructor() {
|
|
30
5
|
this.nodes = new Set();
|
|
31
6
|
this.edges = new Map();
|
|
32
7
|
}
|
|
33
|
-
|
|
8
|
+
addNode(name) {
|
|
34
9
|
if (!this.nodes.has(name)) {
|
|
35
10
|
this.nodes.add(name);
|
|
36
11
|
this.edges.set(name, new Set());
|
|
37
12
|
}
|
|
38
|
-
}
|
|
39
|
-
|
|
13
|
+
}
|
|
14
|
+
addDependency(from, to) {
|
|
40
15
|
if (!this.nodes.has(from) || !this.nodes.has(to)) {
|
|
41
16
|
throw new Error('Both nodes must exist before adding a dependency.');
|
|
42
17
|
}
|
|
43
18
|
this.edges.get(from).add(to);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
var e_1, _a;
|
|
19
|
+
}
|
|
20
|
+
removeNode(name) {
|
|
47
21
|
if (!this.nodes.has(name)) {
|
|
48
22
|
throw new Error('Node does not exist.');
|
|
49
23
|
}
|
|
50
24
|
this.nodes.delete(name);
|
|
51
25
|
this.edges.delete(name);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
var deps = _c.value;
|
|
55
|
-
deps.delete(name);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
59
|
-
finally {
|
|
60
|
-
try {
|
|
61
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
62
|
-
}
|
|
63
|
-
finally { if (e_1) throw e_1.error; }
|
|
26
|
+
for (let deps of this.edges.values()) {
|
|
27
|
+
deps.delete(name);
|
|
64
28
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
29
|
+
}
|
|
30
|
+
removeDependency(from, to) {
|
|
67
31
|
if (!this.edges.has(from)) {
|
|
68
32
|
throw new Error('From node does not exist.');
|
|
69
33
|
}
|
|
70
34
|
this.edges.get(from).delete(to);
|
|
71
|
-
}
|
|
72
|
-
|
|
35
|
+
}
|
|
36
|
+
hasNode(name) {
|
|
73
37
|
return this.nodes.has(name);
|
|
74
|
-
}
|
|
75
|
-
|
|
38
|
+
}
|
|
39
|
+
hasDependency(from, to) {
|
|
76
40
|
if (!this.edges.has(from)) {
|
|
77
41
|
return false;
|
|
78
42
|
}
|
|
79
43
|
return this.edges.get(from).has(to);
|
|
80
|
-
}
|
|
81
|
-
|
|
44
|
+
}
|
|
45
|
+
getDependencies(name) {
|
|
82
46
|
if (!this.edges.has(name)) {
|
|
83
47
|
throw new Error('Node does not exist.');
|
|
84
48
|
}
|
|
85
49
|
return Array.from(this.edges.get(name));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
var _d = __read(_c.value, 2), node = _d[0], deps = _d[1];
|
|
93
|
-
if (deps.has(name)) {
|
|
94
|
-
dependents.push(node);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
99
|
-
finally {
|
|
100
|
-
try {
|
|
101
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
50
|
+
}
|
|
51
|
+
getDependents(name) {
|
|
52
|
+
const dependents = [];
|
|
53
|
+
for (let [node, deps] of this.edges) {
|
|
54
|
+
if (deps.has(name)) {
|
|
55
|
+
dependents.push(node);
|
|
102
56
|
}
|
|
103
|
-
finally { if (e_2) throw e_2.error; }
|
|
104
57
|
}
|
|
105
58
|
return dependents;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
var visiting = new Set();
|
|
112
|
-
var visit = function (node) {
|
|
113
|
-
var e_4, _a;
|
|
59
|
+
}
|
|
60
|
+
isCyclic() {
|
|
61
|
+
const visited = new Set();
|
|
62
|
+
const visiting = new Set();
|
|
63
|
+
const visit = (node) => {
|
|
114
64
|
if (visited.has(node)) {
|
|
115
65
|
return false;
|
|
116
66
|
}
|
|
@@ -118,53 +68,30 @@ var DependencyGraph = /** @class */ (function () {
|
|
|
118
68
|
return true;
|
|
119
69
|
}
|
|
120
70
|
visiting.add(node);
|
|
121
|
-
|
|
71
|
+
const dependencies = this.edges.get(node);
|
|
122
72
|
if (dependencies) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (visit(dep)) {
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
73
|
+
for (let dep of dependencies) {
|
|
74
|
+
if (visit(dep)) {
|
|
75
|
+
return true;
|
|
129
76
|
}
|
|
130
77
|
}
|
|
131
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
132
|
-
finally {
|
|
133
|
-
try {
|
|
134
|
-
if (dependencies_1_1 && !dependencies_1_1.done && (_a = dependencies_1.return)) _a.call(dependencies_1);
|
|
135
|
-
}
|
|
136
|
-
finally { if (e_4) throw e_4.error; }
|
|
137
|
-
}
|
|
138
78
|
}
|
|
139
79
|
visiting.delete(node);
|
|
140
80
|
visited.add(node);
|
|
141
81
|
return false;
|
|
142
82
|
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (visit(node)) {
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
152
|
-
finally {
|
|
153
|
-
try {
|
|
154
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
83
|
+
for (let node of this.nodes) {
|
|
84
|
+
if (visit(node)) {
|
|
85
|
+
return true;
|
|
155
86
|
}
|
|
156
|
-
finally { if (e_3) throw e_3.error; }
|
|
157
87
|
}
|
|
158
88
|
return false;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
var result = [];
|
|
166
|
-
var visit = function (node) {
|
|
167
|
-
var e_6, _a;
|
|
89
|
+
}
|
|
90
|
+
order() {
|
|
91
|
+
const visited = new Set();
|
|
92
|
+
const visiting = new Set();
|
|
93
|
+
const result = [];
|
|
94
|
+
const visit = (node) => {
|
|
168
95
|
if (visited.has(node)) {
|
|
169
96
|
return;
|
|
170
97
|
}
|
|
@@ -172,81 +99,38 @@ var DependencyGraph = /** @class */ (function () {
|
|
|
172
99
|
throw new Error('Graph has a cycle.');
|
|
173
100
|
}
|
|
174
101
|
visiting.add(node);
|
|
175
|
-
|
|
102
|
+
const dependencies = this.edges.get(node);
|
|
176
103
|
if (dependencies) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
var dep = dependencies_2_1.value;
|
|
180
|
-
visit(dep);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
184
|
-
finally {
|
|
185
|
-
try {
|
|
186
|
-
if (dependencies_2_1 && !dependencies_2_1.done && (_a = dependencies_2.return)) _a.call(dependencies_2);
|
|
187
|
-
}
|
|
188
|
-
finally { if (e_6) throw e_6.error; }
|
|
104
|
+
for (let dep of dependencies) {
|
|
105
|
+
visit(dep);
|
|
189
106
|
}
|
|
190
107
|
}
|
|
191
108
|
visiting.delete(node);
|
|
192
109
|
visited.add(node);
|
|
193
110
|
result.push(node);
|
|
194
111
|
};
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (!visited.has(node)) {
|
|
199
|
-
visit(node);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
204
|
-
finally {
|
|
205
|
-
try {
|
|
206
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
112
|
+
for (let node of this.nodes) {
|
|
113
|
+
if (!visited.has(node)) {
|
|
114
|
+
visit(node);
|
|
207
115
|
}
|
|
208
|
-
finally { if (e_5) throw e_5.error; }
|
|
209
116
|
}
|
|
210
117
|
return result;
|
|
211
|
-
}
|
|
212
|
-
|
|
118
|
+
}
|
|
119
|
+
clear() {
|
|
213
120
|
this.nodes.clear();
|
|
214
121
|
this.edges.clear();
|
|
215
|
-
}
|
|
216
|
-
|
|
122
|
+
}
|
|
123
|
+
getNodes() {
|
|
217
124
|
return Array.from(this.nodes);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
var _e = __read(_d.value, 2), from = _e[0], deps = _e[1];
|
|
225
|
-
try {
|
|
226
|
-
for (var deps_1 = (e_8 = void 0, __values(deps)), deps_1_1 = deps_1.next(); !deps_1_1.done; deps_1_1 = deps_1.next()) {
|
|
227
|
-
var to = deps_1_1.value;
|
|
228
|
-
edges.push([from, to]);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
232
|
-
finally {
|
|
233
|
-
try {
|
|
234
|
-
if (deps_1_1 && !deps_1_1.done && (_b = deps_1.return)) _b.call(deps_1);
|
|
235
|
-
}
|
|
236
|
-
finally { if (e_8) throw e_8.error; }
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
241
|
-
finally {
|
|
242
|
-
try {
|
|
243
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
125
|
+
}
|
|
126
|
+
getAllEdges() {
|
|
127
|
+
const edges = [];
|
|
128
|
+
for (let [from, deps] of this.edges) {
|
|
129
|
+
for (let to of deps) {
|
|
130
|
+
edges.push([from, to]);
|
|
244
131
|
}
|
|
245
|
-
finally { if (e_7) throw e_7.error; }
|
|
246
132
|
}
|
|
247
133
|
return edges;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
}());
|
|
251
|
-
export { DependencyGraph };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
252
136
|
//# sourceMappingURL=dependency-graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/dependency-graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/dependency-graph.ts"],"names":[],"mappings":"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"}
|