@ngutil/data 0.0.81 → 0.0.83

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.
@@ -1,313 +0,0 @@
1
- import { flattenDeep, intersection } from "lodash-es";
2
- import { deepClone, isFalsy, isPlainObject, isTruthy } from "@ngutil/common";
3
- import { pathGetterCompile } from "./path";
4
- import { QueryProperty, QueryPropertySet } from "./query-property";
5
- export const OPERATORS = [
6
- "==" /* FilterOp.Eq */,
7
- "===" /* FilterOp.EqStrict */,
8
- "==*" /* FilterOp.EqInsesitive */,
9
- "!=" /* FilterOp.Neq */,
10
- "!==" /* FilterOp.NeqStrict */,
11
- "!=*" /* FilterOp.NeqInsesitive */,
12
- ">" /* FilterOp.Gt */,
13
- ">*" /* FilterOp.GtInsesitive */,
14
- ">=" /* FilterOp.Gte */,
15
- ">=*" /* FilterOp.GteInsesitive */,
16
- "<" /* FilterOp.Lt */,
17
- "<*" /* FilterOp.LtInsesitive */,
18
- "<=" /* FilterOp.Lte */,
19
- "<=*" /* FilterOp.LteInsesitive */,
20
- "%" /* FilterOp.Contains */,
21
- "%*" /* FilterOp.ContainsInsesitive */,
22
- "^" /* FilterOp.StartsWith */,
23
- "^*" /* FilterOp.StartsWithInsesitive */,
24
- "$" /* FilterOp.EndsWith */,
25
- "$*" /* FilterOp.EndsWithInsesitive */,
26
- "~" /* FilterOp.Regexp */,
27
- "~*" /* FilterOp.RegexpInsesitive */,
28
- "|" /* FilterOp.Or */,
29
- "&" /* FilterOp.And */
30
- ];
31
- export function asOperators(value) {
32
- const ops = intersection(Object.keys(value), OPERATORS);
33
- if (ops.length > 0) {
34
- return ops.map(op => {
35
- return { op, value: value[op] };
36
- });
37
- }
38
- else {
39
- return [{ op: "==" /* FilterOp.Eq */, value }];
40
- }
41
- }
42
- /**
43
- * @example
44
- * ```ts
45
- * items.filter(filterBy({id: 42}))
46
- * ```
47
- */
48
- export function filterBy(filters) {
49
- return _filterCompile(filters);
50
- }
51
- /**
52
- * @example
53
- * ```ts
54
- * filterNormalize({id: {">": 0, "<": 10}})
55
- * {op: "&", value: [{path: "id", op: ">", value: 0}, {path: "id", op: "<", value: 10}]}
56
- * ```
57
- */
58
- export function filterNormalize(filters) {
59
- return _normalizeFilter(filters);
60
- }
61
- function _normalizeFilter(filters, parent) {
62
- if ("op" in filters && "value" in filters) {
63
- if (filters["op"] === "|" /* FilterOp.Or */ || filters["op"] === "&" /* FilterOp.And */) {
64
- return { op: filters["op"], value: filters["value"].map((v) => _normalizeFilter(v, parent)) };
65
- }
66
- if ("path" in filters) {
67
- return filters;
68
- }
69
- }
70
- const norm = flattenDeep(Object.entries(filters).map(([path, value]) => {
71
- switch (path) {
72
- case "&" /* FilterOp.And */:
73
- if (!Array.isArray(value)) {
74
- throw new Error(`Operator AND (${"&" /* FilterOp.And */}) must have array type`);
75
- }
76
- return { op: "&" /* FilterOp.And */, value: value.map(v => _normalizeFilter(v, parent)) };
77
- case "|" /* FilterOp.Or */:
78
- if (!Array.isArray(value)) {
79
- throw new Error(`Operator OR (${"|" /* FilterOp.Or */}) must have array type`);
80
- }
81
- return { op: "|" /* FilterOp.Or */, value: value.map(v => _normalizeFilter(v, parent)) };
82
- // TODO: check all filter, and if not found filter key, taht object maybne not a filter
83
- default:
84
- if (isPlainObject(value)) {
85
- return _normalizeFilter(value, path);
86
- }
87
- if (parent != null) {
88
- return { path: parent, op: path, value };
89
- }
90
- else {
91
- return { path, op: "===" /* FilterOp.EqStrict */, value };
92
- }
93
- }
94
- }));
95
- if (norm.length === 0) {
96
- return norm;
97
- }
98
- else if (norm.length === 1) {
99
- return norm[0];
100
- }
101
- else {
102
- return { op: "&" /* FilterOp.And */, value: norm };
103
- }
104
- }
105
- function _filterCompile(filters) {
106
- const pathCache = {};
107
- const getPath = (pth) => {
108
- if (pathCache[pth] != null) {
109
- return pathCache[pth];
110
- }
111
- return (pathCache[pth] = pathGetterCompile(pth));
112
- };
113
- const normalized = filterNormalize(filters);
114
- return _filterCompileNorm(normalized, getPath);
115
- }
116
- function _filterCompileNorm(filter, getPath) {
117
- switch (filter.op) {
118
- case "&" /* FilterOp.And */:
119
- return and_(filter.value.map(v => _filterCompileNorm(v, getPath)));
120
- case "|" /* FilterOp.Or */:
121
- return or_(filter.value.map(v => _filterCompileNorm(v, getPath)));
122
- default:
123
- return _filterComplileNormPath(getPath(filter.path), filter.op, filter.value, getPath);
124
- }
125
- }
126
- function _filterComplileNormPath(getter, op, value, getPath) {
127
- let lower;
128
- let regex;
129
- switch (op) {
130
- case "&" /* FilterOp.And */:
131
- return and_(value.map(v => _filterCompileNorm(v, getPath)));
132
- case "|" /* FilterOp.Or */:
133
- return or_(value.map(v => _filterCompileNorm(v, getPath)));
134
- case "==" /* FilterOp.Eq */:
135
- // eslint-disable-next-line eqeqeq
136
- return matcher(getter, v => v == value);
137
- case "===" /* FilterOp.EqStrict */:
138
- return matcher(getter, v => v === value);
139
- case "==*" /* FilterOp.EqInsesitive */:
140
- lower = String(value).toLocaleLowerCase();
141
- return matcher(getter, v => String(v).toLocaleLowerCase() === lower);
142
- case "!=" /* FilterOp.Neq */:
143
- // eslint-disable-next-line eqeqeq
144
- return matcher(getter, v => v != value);
145
- case "!==" /* FilterOp.NeqStrict */:
146
- return matcher(getter, v => v !== value);
147
- case "!=*" /* FilterOp.NeqInsesitive */:
148
- lower = String(value).toLocaleLowerCase();
149
- return matcher(getter, v => String(v).toLocaleLowerCase() !== lower);
150
- case ">" /* FilterOp.Gt */:
151
- return matcher(getter, v => v > value);
152
- case ">*" /* FilterOp.GtInsesitive */:
153
- lower = String(value).toLocaleLowerCase();
154
- return matcher(getter, v => String(v).toLocaleLowerCase() > lower);
155
- case ">=" /* FilterOp.Gte */:
156
- return matcher(getter, v => v >= value);
157
- case ">=*" /* FilterOp.GteInsesitive */:
158
- lower = String(value).toLocaleLowerCase();
159
- return matcher(getter, v => String(v).toLocaleLowerCase() >= lower);
160
- case "<" /* FilterOp.Lt */:
161
- return matcher(getter, v => v < value);
162
- case "<*" /* FilterOp.LtInsesitive */:
163
- lower = String(value).toLocaleLowerCase();
164
- return matcher(getter, v => String(v).toLocaleLowerCase() < lower);
165
- case "<=" /* FilterOp.Lte */:
166
- return matcher(getter, v => v <= value);
167
- case "<=*" /* FilterOp.LteInsesitive */:
168
- lower = String(value).toLocaleLowerCase();
169
- return matcher(getter, v => String(v).toLocaleLowerCase() <= lower);
170
- case "%" /* FilterOp.Contains */:
171
- lower = String(value);
172
- return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)));
173
- case "%*" /* FilterOp.ContainsInsesitive */:
174
- lower = String(value).toLocaleLowerCase();
175
- return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower));
176
- case "^" /* FilterOp.StartsWith */:
177
- lower = String(value);
178
- return matcher(getter, v => String(v).startsWith(lower));
179
- case "^*" /* FilterOp.StartsWithInsesitive */:
180
- lower = String(value).toLocaleLowerCase();
181
- return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower));
182
- case "$" /* FilterOp.EndsWith */:
183
- lower = String(value);
184
- return matcher(getter, v => String(v).endsWith(lower));
185
- case "$*" /* FilterOp.EndsWithInsesitive */:
186
- lower = String(value).toLocaleLowerCase();
187
- return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower));
188
- case "~" /* FilterOp.Regexp */:
189
- regex = value instanceof RegExp ? value : new RegExp(value, "msv");
190
- return matcher(getter, v => regex.test(v));
191
- case "~*" /* FilterOp.RegexpInsesitive */:
192
- regex = value instanceof RegExp ? value : new RegExp(value, "msvi");
193
- return matcher(getter, v => regex.test(v));
194
- }
195
- throw new Error(`Unexpected operator: ${op}`);
196
- }
197
- function matcher(getter, predict) {
198
- return obj => getter(obj).some(predict);
199
- }
200
- function and_(fns) {
201
- if (fns.length === 0) {
202
- return _ => true;
203
- }
204
- if (fns.length === 1) {
205
- return fns[0];
206
- }
207
- return item => {
208
- for (const fn of fns) {
209
- if (!fn(item)) {
210
- return false;
211
- }
212
- }
213
- return true;
214
- };
215
- }
216
- function or_(fns) {
217
- if (fns.length === 0) {
218
- return _ => true;
219
- }
220
- if (fns.length === 1) {
221
- return fns[0];
222
- }
223
- return item => {
224
- for (const fn of fns) {
225
- if (fn(item)) {
226
- return true;
227
- }
228
- }
229
- return false;
230
- };
231
- }
232
- export function filterMerge(...filters) {
233
- const value = filters
234
- .filter(v => v && ((Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0)))
235
- .map(filter => deepClone(filter));
236
- return compact({ op: "&" /* FilterOp.And */, value });
237
- }
238
- export class FilterProperty extends QueryProperty {
239
- merge(a, b) {
240
- return filterMerge(a, b);
241
- }
242
- norm(a) {
243
- return filterNormalize(a);
244
- }
245
- }
246
- export class FilterPropertySet extends QueryPropertySet {
247
- newProperty() {
248
- return new FilterProperty(undefined);
249
- }
250
- merge(...args) {
251
- return filterMerge(...args);
252
- }
253
- }
254
- export function filterSimplify(filters) {
255
- if (isTruthy(filters)) {
256
- filters = compact(filterNormalize(filters));
257
- const result = {};
258
- if (filters["op"] === "&" /* FilterOp.And */) {
259
- filters = filters["value"];
260
- if (filters == null) {
261
- return result;
262
- }
263
- }
264
- if (!Array.isArray(filters)) {
265
- filters = [filters];
266
- }
267
- for (const f of filters) {
268
- if (f["value"] != null &&
269
- (f["op"] === "==" /* FilterOp.Eq */ || f["op"] === "===" /* FilterOp.EqStrict */ || f["op"] === "==*" /* FilterOp.EqInsesitive */)) {
270
- result[f["path"]] = f["value"];
271
- }
272
- }
273
- return result;
274
- }
275
- else {
276
- return null;
277
- }
278
- }
279
- function compact(filters) {
280
- if (filters.op === "&" /* FilterOp.And */ || filters.op === "|" /* FilterOp.Or */) {
281
- if (isFalsy(filters.value)) {
282
- return null;
283
- }
284
- let value = filters.value.map(compact).filter(isTruthy);
285
- if (value.length === 0) {
286
- return null;
287
- }
288
- // remove subfilters with the same operator
289
- value = value.reduce((acc, value) => {
290
- if (value.op === filters.op) {
291
- return acc.concat(value.value);
292
- }
293
- else {
294
- acc.push(value);
295
- return acc;
296
- }
297
- }, []);
298
- // deduplicate, and latest filter is the most priority
299
- value = value
300
- .reverse()
301
- .filter((v, i, a) => a.findIndex(v2 => v.path === v2.path && v.op === v2.op) === i)
302
- .reverse();
303
- if (value.length === 1) {
304
- return value[0];
305
- }
306
- return { op: filters.op, value };
307
- }
308
- else if (filters.value == null) {
309
- return null;
310
- }
311
- return filters;
312
- }
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXJELE9BQU8sRUFBZSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFHdkcsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQTZCbEUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlCdkMsQ0FBQTtBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBVTtJQUNsQyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQWUsQ0FBQTtJQUNyRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsRUFBRSxFQUFFLHdCQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0FBQ0wsQ0FBQztBQW9FRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQWtCLE9BQWtCO0lBQ3hELE9BQU8sY0FBYyxDQUFJLE9BQU8sQ0FBQyxDQUFBO0FBQ3JD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T0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEtBQUssS0FBSyxDQUFDLENBQUE7UUFFeEU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFMUM7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFdEU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUE7UUFFM0M7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksS0FBSyxDQUFDLENBQUE7UUFFdkU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFMUM7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFdEU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxD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QUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQTtJQUNwQyxDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbGF0dGVuRGVlcCwgaW50ZXJzZWN0aW9uIH0gZnJvbSBcImxvZGFzaC1lc1wiXG5cbmltcG9ydCB7IEFzUHJpbWl0aXZlLCBkZWVwQ2xvbmUsIGlzRmFsc3ksIGlzUGxhaW5PYmplY3QsIGlzVHJ1dGh5LCBNYXhSZWN1cnNpb24gfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBQYXRoR2V0dGVyLCBwYXRoR2V0dGVyQ29tcGlsZSB9IGZyb20gXCIuL3BhdGhcIlxuaW1wb3J0IHsgUXVlcnlQcm9wZXJ0eSwgUXVlcnlQcm9wZXJ0eVNldCB9IGZyb20gXCIuL3F1ZXJ5LXByb3BlcnR5XCJcblxuZXhwb3J0IGNvbnN0IGVudW0gRmlsdGVyT3Age1xuICAgIEVxID0gXCI9PVwiLFxuICAgIEVxU3RyaWN0ID0gXCI9PT1cIixcbiAgICBFcUluc2VzaXRpdmUgPSBcIj09KlwiLFxuICAgIE5lcSA9IFwiIT1cIixcbiAgICBOZXFTdHJpY3QgPSBcIiE9PVwiLFxuICAgIE5lcUluc2VzaXRpdmUgPSBcIiE9KlwiLFxuICAgIEd0ID0gXCI+XCIsXG4gICAgR3RJbnNlc2l0aXZlID0gXCI+KlwiLFxuICAgIEd0ZSA9IFwiPj1cIixcbiAgICBHdGVJbnNlc2l0aXZlID0gXCI+PSpcIixcbiAgICBMdCA9IFwiPFwiLFxuICAgIEx0SW5zZXNpdGl2ZSA9IFwiPCpcIixcbiAgICBMdGUgPSBcIjw9XCIsXG4gICAgTHRlSW5zZXNpdGl2ZSA9IFwiPD0qXCIsXG4gICAgQ29udGFpbnMgPSBcIiVcIixcbiAgICBDb250YWluc0luc2VzaXRpdmUgPSBcIiUqXCIsXG4gICAgU3RhcnRzV2l0aCA9IFwiXlwiLFxuICAgIFN0YXJ0c1dpdGhJbnNlc2l0aXZlID0gXCJeKlwiLFxuICAgIEVuZHNXaXRoID0gXCIkXCIsXG4gICAgRW5kc1dpdGhJbnNlc2l0aXZlID0gXCIkKlwiLFxuICAgIFJlZ2V4cCA9IFwiflwiLFxuICAgIFJlZ2V4cEluc2VzaXRpdmUgPSBcIn4qXCIsXG4gICAgT3IgPSBcInxcIixcbiAgICBBbmQgPSBcIiZcIlxufVxuXG5leHBvcnQgY29uc3QgT1BFUkFUT1JTOiBBcnJheTxzdHJpbmc+ID0gW1xuICAgIEZpbHRlck9wLkVxLFxuICAgIEZpbHRlck9wLkVxU3RyaWN0LFxuICAgIEZpbHRlck9wLkVxSW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5OZXEsXG4gICAgRmlsdGVyT3AuTmVxU3RyaWN0LFxuICAgIEZpbHRlck9wLk5lcUluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuR3QsXG4gICAgRmlsdGVyT3AuR3RJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLkd0ZSxcbiAgICBGaWx0ZXJPcC5HdGVJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLkx0LFxuICAgIEZpbHRlck9wLkx0SW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5MdGUsXG4gICAgRmlsdGVyT3AuTHRlSW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5Db250YWlucyxcbiAgICBGaWx0ZXJPcC5Db250YWluc0luc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuU3RhcnRzV2l0aCxcbiAgICBGaWx0ZXJPcC5TdGFydHNXaXRoSW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5FbmRzV2l0aCxcbiAgICBGaWx0ZXJPcC5FbmRzV2l0aEluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuUmVnZXhwLFxuICAgIEZpbHRlck9wLlJlZ2V4cEluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuT3IsXG4gICAgRmlsdGVyT3AuQW5kXG5dXG5cbmV4cG9ydCBmdW5jdGlvbiBhc09wZXJhdG9ycyh2YWx1ZTogYW55KTogQXJyYXk8eyBvcDogRmlsdGVyT3A7IHZhbHVlOiBhbnkgfT4ge1xuICAgIGNvbnN0IG9wcyA9IGludGVyc2VjdGlvbihPYmplY3Qua2V5cyh2YWx1ZSksIE9QRVJBVE9SUykgYXMgRmlsdGVyT3BbXVxuICAgIGlmIChvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb3BzLm1hcChvcCA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBvcCwgdmFsdWU6IHZhbHVlW29wXSB9XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt7IG9wOiBGaWx0ZXJPcC5FcSwgdmFsdWUgfV1cbiAgICB9XG59XG5cbi8vIGV4cG9ydCB0eXBlIEZpbHRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gX0ZpbHRlcjxGbGF0dGVuPFQ+LCBbXSwgTWF4UmVjdXJzaW9uPlxuLy8gVE9ETzogZml4IHJlY3Vyc2lvblxuZXhwb3J0IHR5cGUgRmlsdGVyPFQgZXh0ZW5kcyBNb2RlbD4gPSB7IFtrZXk6IHN0cmluZ106IGFueSB9XG5cbnR5cGUgX0ZpbHRlcjxGLCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIEQgPyBuZXZlciA6IF9PYmplY3RGaWx0ZXI8RiwgUCwgRD5cblxudHlwZSBfT2JqZWN0RmlsdGVyPEYsIFAgZXh0ZW5kcyBudW1iZXJbXSwgRCBleHRlbmRzIG51bWJlcj4gPSBQW1wibGVuZ3RoXCJdIGV4dGVuZHMgRFxuICAgID8gbmV2ZXJcbiAgICA6IHsgW0sgaW4ga2V5b2YgRl0/OiBPcGVyYXRvcnM8RltLXSwgUCwgRD4gfVxuXG50eXBlIFJvb3RPcjxGLCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiB7IFtGaWx0ZXJPcC5Pcl06IEFycmF5PF9GaWx0ZXI8RiwgWy4uLlAsIDBdLCBEPj4gfCB1bmRlZmluZWQgfVxuXG50eXBlIFJvb3RBbmQ8RiwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IFBbXCJsZW5ndGhcIl0gZXh0ZW5kcyBEXG4gICAgPyBuZXZlclxuICAgIDogeyBbRmlsdGVyT3AuQW5kXTogQXJyYXk8X0ZpbHRlcjxGLCBbLi4uUCwgMF0sIEQ+PiB8IHVuZGVmaW5lZCB9XG5cbmV4cG9ydCB0eXBlIE9wZXJhdG9yczxULCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXIgPSBNYXhSZWN1cnNpb24+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiBTaW1wbGVPcGVyYXRvcnM8VD5cblxudHlwZSBMb2NhbE9yPFQsIFAgZXh0ZW5kcyBudW1iZXJbXSwgRCBleHRlbmRzIG51bWJlcj4gPSBQW1wibGVuZ3RoXCJdIGV4dGVuZHMgRFxuICAgID8gbmV2ZXJcbiAgICA6IHsgW0ZpbHRlck9wLk9yXTogQXJyYXk8T3BlcmF0b3JzPFQsIFsuLi5QLCAwXSwgRD4+IHwgdW5kZWZpbmVkIH1cblxudHlwZSBMb2NhbEFuZDxULCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiB7IFtGaWx0ZXJPcC5BbmRdOiBBcnJheTxPcGVyYXRvcnM8VCwgWy4uLlAsIDBdLCBEPj4gfCB1bmRlZmluZWQgfVxuXG50eXBlIFNpbXBsZU9wZXJhdG9yczxUPiA9XG4gICAgfCBFcVN0cmljdDxUPlxuICAgIHwgTmVxU3RyaWN0PFQ+XG4gICAgfCBFcTxUPlxuICAgIHwgTmVxPFQ+XG4gICAgfCBHdDxUPlxuICAgIHwgR3RlPFQ+XG4gICAgfCBMdDxUPlxuICAgIHwgTHRlPFQ+XG4gICAgfCBDb250YWluczxUPlxuICAgIHwgU3RhcnRzV2l0aDxUPlxuICAgIHwgRW5kc1dpdGg8VD5cbiAgICB8IFJlZ2V4cDxUPlxuICAgIHwgVFxuICAgIHwgdW5kZWZpbmVkXG4gICAgfCBudWxsXG5cbnR5cGUgRXFTdHJpY3Q8VD4gPSBPcGVyYXRvcjxULCBULCBGaWx0ZXJPcC5FcVN0cmljdCwgbmV2ZXIsIG51bGw+XG50eXBlIE5lcVN0cmljdDxUPiA9IE9wZXJhdG9yPFQsIFQsIEZpbHRlck9wLk5lcVN0cmljdCwgbmV2ZXIsIG51bGw+XG50eXBlIEVxPFQ+ID0gT3BlcmF0b3I8VCwgVCB8IEFzUHJpbWl0aXZlPFQ+LCBGaWx0ZXJPcC5FcSwgRmlsdGVyT3AuRXFJbnNlc2l0aXZlLCBudWxsPlxudHlwZSBOZXE8VD4gPSBPcGVyYXRvcjxULCBUIHwgQXNQcmltaXRpdmU8VD4sIEZpbHRlck9wLk5lcSwgRmlsdGVyT3AuTmVxSW5zZXNpdGl2ZSwgbnVsbD5cbnR5cGUgR3Q8VD4gPSBPcGVyYXRvcjxULCBUIHwgQXNQcmltaXRpdmU8VD4sIEZpbHRlck9wLkd0LCBGaWx0ZXJPcC5HdEluc2VzaXRpdmU+XG50eXBlIEd0ZTxUPiA9IE9wZXJhdG9yPFQsIFQgfCBBc1ByaW1pdGl2ZTxUPiwgRmlsdGVyT3AuR3RlLCBGaWx0ZXJPcC5HdGVJbnNlc2l0aXZlPlxudHlwZSBMdDxUPiA9IE9wZXJhdG9yPFQsIFQgfCBBc1ByaW1pdGl2ZTxUPiwgRmlsdGVyT3AuTHQsIEZpbHRlck9wLkx0SW5zZXNpdGl2ZT5cbnR5cGUgTHRlPFQ+ID0gT3BlcmF0b3I8VCwgVCB8IEFzUHJpbWl0aXZlPFQ+LCBGaWx0ZXJPcC5MdGUsIEZpbHRlck9wLkx0ZUluc2VzaXRpdmU+XG50eXBlIENvbnRhaW5zPFQ+ID0gT3BlcmF0b3I8VCwgc3RyaW5nLCBGaWx0ZXJPcC5Db250YWlucywgRmlsdGVyT3AuQ29udGFpbnNJbnNlc2l0aXZlPlxudHlwZSBTdGFydHNXaXRoPFQ+ID0gT3BlcmF0b3I8VCwgc3RyaW5nLCBGaWx0ZXJPcC5TdGFydHNXaXRoLCBGaWx0ZXJPcC5TdGFydHNXaXRoSW5zZXNpdGl2ZT5cbnR5cGUgRW5kc1dpdGg8VD4gPSBPcGVyYXRvcjxULCBzdHJpbmcsIEZpbHRlck9wLkVuZHNXaXRoLCBGaWx0ZXJPcC5FbmRzV2l0aEluc2VzaXRpdmU+XG50eXBlIFJlZ2V4cDxUPiA9IE9wZXJhdG9yPFQsIHN0cmluZywgRmlsdGVyT3AuUmVnZXhwLCBGaWx0ZXJPcC5SZWdleHBJbnNlc2l0aXZlLCBSZWdFeHA+XG5cbnR5cGUgT3BlcmF0b3I8VCwgUiwgT1AgZXh0ZW5kcyBzdHJpbmcsIE9QSSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBFVCA9IG5ldmVyPiA9XG4gICAgfCAoVCBleHRlbmRzIFIgPyB7IFtrIGluIE9QXTogVCB8IEVUIHwgUiB9IDogbmV2ZXIpXG4gICAgfCAoVCBleHRlbmRzIHN0cmluZyA/IChPUEkgZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogeyBbayBpbiBPUEldOiBzdHJpbmcgfSkgOiBuZXZlcilcblxuZXhwb3J0IHR5cGUgRmlsdGVyRm48VCA9IGFueT4gPSAoaXRlbTogVCkgPT4gYm9vbGVhblxuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaXRlbXMuZmlsdGVyKGZpbHRlckJ5KHtpZDogNDJ9KSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQnk8VCBleHRlbmRzIE1vZGVsPihmaWx0ZXJzOiBGaWx0ZXI8VD4pOiBGaWx0ZXJGbjxUPiB7XG4gICAgcmV0dXJuIF9maWx0ZXJDb21waWxlPFQ+KGZpbHRlcnMpXG59XG5cbi8vIFRPRE86IE5vcm1hbGl6ZSBmaWx0ZXJcbi8vIHR5cGUgX0ZpbHRlciA9IHsgcGF0aDogc3RyaW5nOyBvcDogRmlsdGVyT3A7IHZhbHVlOiBhbnkgfVxuLy8gdHlwZSBfT3IgPSB7IFwifFwiOiBBcnJheTxfRmlsdGVyPiB9XG4vLyB0eXBlIF9BbmQgPSB7IFwiJlwiOiBBcnJheTxfRmlsdGVyPiB9XG4vLyBleHBvcnQgdHlwZSBOb3JtYWxpemVkRmlsdGVyID0gX09yIHwgX0FuZFxudHlwZSBOb3JtUGF0aCA9IHsgcGF0aDogc3RyaW5nOyBvcDogRXhjbHVkZTxGaWx0ZXJPcCwgRmlsdGVyT3AuT3IgfCBGaWx0ZXJPcC5BbmQ+OyB2YWx1ZTogYW55IH1cbnR5cGUgTm9ybU9yID0geyBvcDogRmlsdGVyT3AuT3I7IHZhbHVlOiBBcnJheTxOb3JtRW50cnk+IH1cbnR5cGUgTm9ybUFuZCA9IHsgb3A6IEZpbHRlck9wLkFuZDsgdmFsdWU6IEFycmF5PE5vcm1FbnRyeT4gfVxudHlwZSBOb3JtRW50cnkgPSBOb3JtUGF0aCB8IE5vcm1PciB8IE5vcm1BbmRcbmV4cG9ydCB0eXBlIEZpbHRlck5vcm1hbGl6ZWQgPSBOb3JtRW50cnlcblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGZpbHRlck5vcm1hbGl6ZSh7aWQ6IHtcIj5cIjogMCwgXCI8XCI6IDEwfX0pXG4gKiB7b3A6IFwiJlwiLCB2YWx1ZTogW3twYXRoOiBcImlkXCIsIG9wOiBcIj5cIiwgdmFsdWU6IDB9LCB7cGF0aDogXCJpZFwiLCBvcDogXCI8XCIsIHZhbHVlOiAxMH1dfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOb3JtYWxpemU8VCBleHRlbmRzIE1vZGVsPihmaWx0ZXJzOiBGaWx0ZXI8VD4pOiBGaWx0ZXJOb3JtYWxpemVkIHtcbiAgICByZXR1cm4gX25vcm1hbGl6ZUZpbHRlcihmaWx0ZXJzKVxufVxuXG5mdW5jdGlvbiBfbm9ybWFsaXplRmlsdGVyPFQgZXh0ZW5kcyBNb2RlbD4oZmlsdGVyczogRmlsdGVyPFQ+LCBwYXJlbnQ/OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChcIm9wXCIgaW4gZmlsdGVycyAmJiBcInZhbHVlXCIgaW4gZmlsdGVycykge1xuICAgICAgICBpZiAoZmlsdGVyc1tcIm9wXCJdID09PSBGaWx0ZXJPcC5PciB8fCBmaWx0ZXJzW1wib3BcIl0gPT09IEZpbHRlck9wLkFuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3A6IGZpbHRlcnNbXCJvcFwiXSwgdmFsdWU6IGZpbHRlcnNbXCJ2YWx1ZVwiXS5tYXAoKHY6IGFueSkgPT4gX25vcm1hbGl6ZUZpbHRlcih2LCBwYXJlbnQpKSB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwicGF0aFwiIGluIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBub3JtID0gZmxhdHRlbkRlZXAoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLm1hcCgoW3BhdGgsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcC5BbmQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0b3IgQU5EICgke0ZpbHRlck9wLkFuZH0pIG11c3QgaGF2ZSBhcnJheSB0eXBlYClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcDogRmlsdGVyT3AuQW5kLCB2YWx1ZTogdmFsdWUubWFwKHYgPT4gX25vcm1hbGl6ZUZpbHRlcih2LCBwYXJlbnQpKSB9XG5cbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlck9wLk9yOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdG9yIE9SICgke0ZpbHRlck9wLk9yfSkgbXVzdCBoYXZlIGFycmF5IHR5cGVgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9wOiBGaWx0ZXJPcC5PciwgdmFsdWU6IHZhbHVlLm1hcCh2ID0+IF9ub3JtYWxpemVGaWx0ZXIodiwgcGFyZW50KSkgfVxuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogY2hlY2sgYWxsIGZpbHRlciwgYW5kIGlmIG5vdCBmb3VuZCBmaWx0ZXIga2V5LCB0YWh0IG9iamVjdCBtYXlibmUgbm90IGEgZmlsdGVyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX25vcm1hbGl6ZUZpbHRlcih2YWx1ZSwgcGF0aClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IHBhcmVudCwgb3A6IHBhdGgsIHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGgsIG9wOiBGaWx0ZXJPcC5FcVN0cmljdCwgdmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuXG4gICAgaWYgKG5vcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBub3JtXG4gICAgfSBlbHNlIGlmIChub3JtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbm9ybVswXVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IG9wOiBGaWx0ZXJPcC5BbmQsIHZhbHVlOiBub3JtIH1cbiAgICB9XG59XG5cbnR5cGUgR2V0UGF0aEZuID0gKHB0aDogc3RyaW5nKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBwYXRoR2V0dGVyQ29tcGlsZT5cblxuZnVuY3Rpb24gX2ZpbHRlckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsPihmaWx0ZXJzOiBGaWx0ZXI8VD4pOiBGaWx0ZXJGbjxUPiB7XG4gICAgY29uc3QgcGF0aENhY2hlOiB7IFtrZXk6IHN0cmluZ106IFBhdGhHZXR0ZXIgfSA9IHt9XG4gICAgY29uc3QgZ2V0UGF0aCA9IChwdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocGF0aENhY2hlW3B0aF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhDYWNoZVtwdGhdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChwYXRoQ2FjaGVbcHRoXSA9IHBhdGhHZXR0ZXJDb21waWxlKHB0aCkpXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWx0ZXJOb3JtYWxpemUoZmlsdGVycylcbiAgICByZXR1cm4gX2ZpbHRlckNvbXBpbGVOb3JtKG5vcm1hbGl6ZWQsIGdldFBhdGgpXG59XG5cbmZ1bmN0aW9uIF9maWx0ZXJDb21waWxlTm9ybShmaWx0ZXI6IEZpbHRlck5vcm1hbGl6ZWQsIGdldFBhdGg6IEdldFBhdGhGbik6IEZpbHRlckZuPGFueT4ge1xuICAgIHN3aXRjaCAoZmlsdGVyLm9wKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyT3AuQW5kOlxuICAgICAgICAgICAgcmV0dXJuIGFuZF8oZmlsdGVyLnZhbHVlLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5PcjpcbiAgICAgICAgICAgIHJldHVybiBvcl8oZmlsdGVyLnZhbHVlLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyQ29tcGxpbGVOb3JtUGF0aChnZXRQYXRoKGZpbHRlci5wYXRoKSwgZmlsdGVyLm9wLCBmaWx0ZXIudmFsdWUsIGdldFBhdGgpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZmlsdGVyQ29tcGxpbGVOb3JtUGF0aChnZXR0ZXI6IFBhdGhHZXR0ZXIsIG9wOiBGaWx0ZXJPcCwgdmFsdWU6IGFueSwgZ2V0UGF0aDogR2V0UGF0aEZuKTogRmlsdGVyRm48YW55PiB7XG4gICAgbGV0IGxvd2VyOiBzdHJpbmdcbiAgICBsZXQgcmVnZXg6IFJlZ0V4cFxuICAgIHN3aXRjaCAob3ApIHtcbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5BbmQ6XG4gICAgICAgICAgICByZXR1cm4gYW5kXygodmFsdWUgYXMgTm9ybUVudHJ5W10pLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5PcjpcbiAgICAgICAgICAgIHJldHVybiBvcl8oKHZhbHVlIGFzIE5vcm1FbnRyeVtdKS5tYXAodiA9PiBfZmlsdGVyQ29tcGlsZU5vcm0odiwgZ2V0UGF0aCkpKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuRXE6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiA9PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkVxU3RyaWN0OlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IHYgPT09IHZhbHVlKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuRXFJbnNlc2l0aXZlOlxuICAgICAgICAgICAgbG93ZXIgPSBTdHJpbmcodmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiBTdHJpbmcodikudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5OZXE6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiAhPSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLk5lcVN0cmljdDpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2ICE9PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLk5lcUluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpICE9PSBsb3dlcilcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0OlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IHYgPiB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0SW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPiBsb3dlcilcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0ZTpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2ID49IHZhbHVlKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuR3RlSW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPj0gbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdDpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2IDwgdmFsdWUpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdEluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpIDwgbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdGU6XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiA8PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkx0ZUluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpIDw9IGxvd2VyKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuQ29udGFpbnM6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHYuaW5jbHVkZXModmFsdWUpIDogU3RyaW5nKHYpLmluY2x1ZGVzKGxvd2VyKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5Db250YWluc0luc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlN0YXJ0c1dpdGg6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiBTdHJpbmcodikuc3RhcnRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5TdGFydHNXaXRoSW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5FbmRzV2l0aDpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS5lbmRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5FbmRzV2l0aEluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpLmVuZHNXaXRoKGxvd2VyKSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlJlZ2V4cDpcbiAgICAgICAgICAgIHJlZ2V4ID0gdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgPyB2YWx1ZSA6IG5ldyBSZWdFeHAodmFsdWUsIFwibXN2XCIpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gcmVnZXgudGVzdCh2KSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlJlZ2V4cEluc2VzaXRpdmU6XG4gICAgICAgICAgICByZWdleCA9IHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwID8gdmFsdWUgOiBuZXcgUmVnRXhwKHZhbHVlLCBcIm1zdmlcIilcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiByZWdleC50ZXN0KHYpKVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBvcGVyYXRvcjogJHtvcH1gKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVyKGdldHRlcjogUGF0aEdldHRlciwgcHJlZGljdDogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pOiBGaWx0ZXJGbiB7XG4gICAgcmV0dXJuIG9iaiA9PiBnZXR0ZXIob2JqKS5zb21lKHByZWRpY3QpXG59XG5cbmZ1bmN0aW9uIGFuZF8oZm5zOiBGaWx0ZXJGbltdKTogRmlsdGVyRm4ge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBfID0+IHRydWVcbiAgICB9XG5cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0gPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZucykge1xuICAgICAgICAgICAgaWYgKCFmbihpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufVxuXG5mdW5jdGlvbiBvcl8oZm5zOiBGaWx0ZXJGbltdKTogRmlsdGVyRm4ge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBfID0+IHRydWVcbiAgICB9XG5cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0gPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZucykge1xuICAgICAgICAgICAgaWYgKGZuKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJNZXJnZSguLi5maWx0ZXJzOiBhbnlbXSk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJzXG4gICAgICAgIC5maWx0ZXIodiA9PiB2ICYmICgoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA+IDApIHx8IChpc1BsYWluT2JqZWN0KHYpICYmIE9iamVjdC5rZXlzKHYpLmxlbmd0aCA+IDApKSlcbiAgICAgICAgLm1hcChmaWx0ZXIgPT4gZGVlcENsb25lKGZpbHRlcikpXG5cbiAgICByZXR1cm4gY29tcGFjdCh7IG9wOiBGaWx0ZXJPcC5BbmQsIHZhbHVlIH0pXG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJQcm9wZXJ0eTxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUXVlcnlQcm9wZXJ0eTxGaWx0ZXI8VD4sIEZpbHRlck5vcm1hbGl6ZWQ+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbWVyZ2UoXG4gICAgICAgIGE/OiBGaWx0ZXJOb3JtYWxpemVkIHwgdW5kZWZpbmVkLFxuICAgICAgICBiPzogRmlsdGVyTm9ybWFsaXplZCB8IHVuZGVmaW5lZFxuICAgICk6IEZpbHRlck5vcm1hbGl6ZWQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gZmlsdGVyTWVyZ2UoYSwgYilcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5vcm0oYTogRmlsdGVyTm9ybWFsaXplZCB8IEZpbHRlcjxUPik6IEZpbHRlck5vcm1hbGl6ZWQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gZmlsdGVyTm9ybWFsaXplKGEpXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyUHJvcGVydHlTZXQ8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFF1ZXJ5UHJvcGVydHlTZXQ8RmlsdGVyPFQ+PiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5ld1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlclByb3BlcnR5KHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbWVyZ2UoLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlck1lcmdlKC4uLmFyZ3MpXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyU2ltcGxpZnkoZmlsdGVyczogYW55KTogb2JqZWN0IHwgbnVsbCB7XG4gICAgaWYgKGlzVHJ1dGh5KGZpbHRlcnMpKSB7XG4gICAgICAgIGZpbHRlcnMgPSBjb21wYWN0KGZpbHRlck5vcm1hbGl6ZShmaWx0ZXJzKSlcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cbiAgICAgICAgaWYgKGZpbHRlcnNbXCJvcFwiXSA9PT0gRmlsdGVyT3AuQW5kKSB7XG4gICAgICAgICAgICBmaWx0ZXJzID0gZmlsdGVyc1tcInZhbHVlXCJdXG4gICAgICAgICAgICBpZiAoZmlsdGVycyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkge1xuICAgICAgICAgICAgZmlsdGVycyA9IFtmaWx0ZXJzXVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmW1widmFsdWVcIl0gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIChmW1wib3BcIl0gPT09IEZpbHRlck9wLkVxIHx8IGZbXCJvcFwiXSA9PT0gRmlsdGVyT3AuRXFTdHJpY3QgfHwgZltcIm9wXCJdID09PSBGaWx0ZXJPcC5FcUluc2VzaXRpdmUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZltcInBhdGhcIl0gYXMgc3RyaW5nXSA9IGZbXCJ2YWx1ZVwiXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29tcGFjdChmaWx0ZXJzOiBGaWx0ZXJOb3JtYWxpemVkKTogYW55IHtcbiAgICBpZiAoZmlsdGVycy5vcCA9PT0gRmlsdGVyT3AuQW5kIHx8IGZpbHRlcnMub3AgPT09IEZpbHRlck9wLk9yKSB7XG4gICAgICAgIGlmIChpc0ZhbHN5KGZpbHRlcnMudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlID0gZmlsdGVycy52YWx1ZS5tYXAoY29tcGFjdCkuZmlsdGVyKGlzVHJ1dGh5KVxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIHN1YmZpbHRlcnMgd2l0aCB0aGUgc2FtZSBvcGVyYXRvclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlZHVjZSgoYWNjLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlLm9wID09PSBmaWx0ZXJzLm9wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodmFsdWUudmFsdWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjYy5wdXNoKHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pXG5cbiAgICAgICAgLy8gZGVkdXBsaWNhdGUsIGFuZCBsYXRlc3QgZmlsdGVyIGlzIHRoZSBtb3N0IHByaW9yaXR5XG4gICAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuZmluZEluZGV4KHYyID0+IHYucGF0aCA9PT0gdjIucGF0aCAmJiB2Lm9wID09PSB2Mi5vcCkgPT09IGkpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBvcDogZmlsdGVycy5vcCwgdmFsdWUgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzXG59XG4iXX0=
@@ -1,85 +0,0 @@
1
- import { QueryProperty, QueryPropertySet } from "./query-property";
2
- export function groupBy(grouper) {
3
- return grouperCompile(grouper);
4
- }
5
- function grouperCompile(grouper) {
6
- return _ => undefined;
7
- }
8
- export function grouperMerge(...groupers) {
9
- return undefined;
10
- }
11
- export function grouperNormalize(grouper) { }
12
- // import { Primitive } from "utility-types"
13
- // import { Eval, Flatten } from "@ngutil/common"
14
- // import { type Model } from "./query"
15
- // import { SorterFn } from "./sorter"
16
- // export interface Grouped<T extends Model> {
17
- // items: T[]
18
- // groups: Group<T>
19
- // }
20
- // export type GrouperFn<T extends Model> = (items: T[]) => any
21
- // export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]
22
- // export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean
23
- // export interface GrouperX<T extends Model> {
24
- // name: string
25
- // title?: string
26
- // isMatch?: GroupKey<T>
27
- // [key: string]: any
28
- // }
29
- // export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {
30
- // key: GroupKey<T>
31
- // }
32
- // type _Groupers<T extends Model, F> = keyof F | Grouper<T>
33
- // export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>
34
- // export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }
35
- // export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {
36
- // grouper: G
37
- // begin: number
38
- // end: number
39
- // }
40
- // /**
41
- // * @example
42
- // * ```ts
43
- // * const grouped = groupBy(["status"])(items)
44
- // * // expexted: {[status]: [...items]}
45
- // *
46
- // * const grouped = groupBy(["name", "age"])(items)
47
- // * // expected {[status]: {[age]: [...items]}}
48
- // *
49
- // * const STATUS_LABELS = {active: "Active", inactive: "Inactive"}
50
- // * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || "Undefined")])(items)
51
- // * // expected {["Active" | "Inactive" | "Undefined"]: [...items]}
52
- // *
53
- // * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || "Undefined"), "age"])(items)
54
- // * // expected {["Active" | "Inactive" | "Undefined"]: {[age]: [...items]}}
55
- // * ```
56
- // */
57
- // export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {
58
- // return (_a, _b) => 0
59
- // }
60
- // export function grouperNormalize() {}
61
- // export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {
62
- // return _ => undefined
63
- // }
64
- // export function grouperMerge<T extends Model, F = Flatten<T>>(
65
- // ...groupers: Array<Grouper<T, F> | undefined | null>
66
- // ): Grouper<T, F> | undefined {
67
- // return undefined
68
- // }
69
- export class GrouperProperty extends QueryProperty {
70
- norm(a) {
71
- return grouperNormalize;
72
- }
73
- merge(a, b) {
74
- return grouperMerge(a, b);
75
- }
76
- }
77
- export class GrouperPropertySet extends QueryPropertySet {
78
- newProperty() {
79
- return new GrouperProperty(undefined);
80
- }
81
- merge(...args) {
82
- return grouperMerge(...args);
83
- }
84
- }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RhdGEvc3JjL3F1ZXJ5L2dyb3VwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBT2xFLE1BQU0sVUFBVSxPQUFPLENBQWtDLE9BQXNCO0lBQzNFLE9BQU8sY0FBYyxDQUFPLE9BQU8sQ0FBQyxDQUFBO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBa0MsT0FBc0I7SUFDM0UsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQTtBQUN6QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDeEIsR0FBRyxRQUFpRDtJQUVwRCxPQUFPLFNBQVMsQ0FBQTtBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFrQixPQUFtQixJQUFzQixDQUFDO0FBRTVGLDRDQUE0QztBQUU1QyxpREFBaUQ7QUFFakQsdUNBQXVDO0FBQ3ZDLHNDQUFzQztBQUV0Qyw4Q0FBOEM7QUFDOUMsaUJBQWlCO0FBQ2pCLHVCQUF1QjtBQUN2QixJQUFJO0FBRUosK0RBQStEO0FBRS9ELGtGQUFrRjtBQUVsRixzRkFBc0Y7QUFFdEYsK0NBQStDO0FBQy9DLG1CQUFtQjtBQUNuQixxQkFBcUI7QUFDckIsNEJBQTRCO0FBQzVCLHlCQUF5QjtBQUN6QixJQUFJO0FBRUosNkVBQTZFO0FBQzdFLHVCQUF1QjtBQUN2QixJQUFJO0FBRUosNERBQTREO0FBQzVELHNGQUFzRjtBQUV0Riw0RkFBNEY7QUFFNUYsK0VBQStFO0FBQy9FLGlCQUFpQjtBQUNqQixvQkFBb0I7QUFDcEIsa0JBQWtCO0FBQ2xCLElBQUk7QUFFSixNQUFNO0FBQ04sY0FBYztBQUNkLFdBQVc7QUFDWCxnREFBZ0Q7QUFDaEQseUNBQXlDO0FBQ3pDLEtBQUs7QUFDTCxxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELEtBQUs7QUFDTCxvRUFBb0U7QUFDcEUsNkZBQTZGO0FBQzdGLHFFQUFxRTtBQUNyRSxLQUFLO0FBQ0wsb0dBQW9HO0FBQ3BHLDhFQUE4RTtBQUM5RSxTQUFTO0FBQ1QsTUFBTTtBQUNOLGdGQUFnRjtBQUNoRiwyQkFBMkI7QUFDM0IsSUFBSTtBQUVKLHdDQUF3QztBQUV4Qyx3RkFBd0Y7QUFDeEYsNEJBQTRCO0FBQzVCLElBQUk7QUFFSixpRUFBaUU7QUFDakUsMkRBQTJEO0FBQzNELGlDQUFpQztBQUNqQyx1QkFBdUI7QUFDdkIsSUFBSTtBQUVKLE1BQU0sT0FBTyxlQUFpQyxTQUFRLGFBQTRDO0lBQzNFLElBQUksQ0FBQyxDQUFNO1FBQzFCLE9BQU8sZ0JBQWdCLENBQUE7SUFDM0IsQ0FBQztJQUVrQixLQUFLLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDckMsT0FBTyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxrQkFBb0MsU0FBUSxnQkFBNEI7SUFDOUQsV0FBVztRQUMxQixPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFa0IsS0FBSyxDQUFDLEdBQUcsSUFBVztRQUNuQyxPQUFPLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ2hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYXR0ZW4sIFByaW1pdGl2ZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB7IFF1ZXJ5UHJvcGVydHksIFF1ZXJ5UHJvcGVydHlTZXQgfSBmcm9tIFwiLi9xdWVyeS1wcm9wZXJ0eVwiXG5cbmV4cG9ydCB0eXBlIEdyb3VwZXJGbjxUID0gYW55PiA9IChpdGVtOiBhbnkpID0+IFByaW1pdGl2ZVxuXG5leHBvcnQgdHlwZSBHcm91cGVyPFQgZXh0ZW5kcyBNb2RlbCwgRiA9IEZsYXR0ZW48VD4+ID0gYW55XG5leHBvcnQgdHlwZSBHcm91cGVyTm9ybWFsaXplZCA9IGFueVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxUIGV4dGVuZHMgTW9kZWwsIEYgPSBGbGF0dGVuPFQ+Pihncm91cGVyOiBHcm91cGVyPFQsIEY+KTogR3JvdXBlckZuPFQ+IHtcbiAgICByZXR1cm4gZ3JvdXBlckNvbXBpbGU8VCwgRj4oZ3JvdXBlcilcbn1cblxuZnVuY3Rpb24gZ3JvdXBlckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsLCBGID0gRmxhdHRlbjxUPj4oZ3JvdXBlcjogR3JvdXBlcjxULCBGPik6IEdyb3VwZXJGbjxUPiB7XG4gICAgcmV0dXJuIF8gPT4gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cGVyTWVyZ2U8VCBleHRlbmRzIE1vZGVsLCBGID0gRmxhdHRlbjxUPj4oXG4gICAgLi4uZ3JvdXBlcnM6IEFycmF5PEdyb3VwZXI8VCwgRj4gfCB1bmRlZmluZWQgfCBudWxsPlxuKTogR3JvdXBlcjxULCBGPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBlck5vcm1hbGl6ZTxUIGV4dGVuZHMgTW9kZWw+KGdyb3VwZXI6IEdyb3VwZXI8VD4pOiBHcm91cGVyTm9ybWFsaXplZCB7fVxuXG4vLyBpbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwidXRpbGl0eS10eXBlc1wiXG5cbi8vIGltcG9ydCB7IEV2YWwsIEZsYXR0ZW4gfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG4vLyBpbXBvcnQgeyB0eXBlIE1vZGVsIH0gZnJvbSBcIi4vcXVlcnlcIlxuLy8gaW1wb3J0IHsgU29ydGVyRm4gfSBmcm9tIFwiLi9zb3J0ZXJcIlxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIEdyb3VwZWQ8VCBleHRlbmRzIE1vZGVsPiB7XG4vLyAgICAgaXRlbXM6IFRbXVxuLy8gICAgIGdyb3VwczogR3JvdXA8VD5cbi8vIH1cblxuLy8gZXhwb3J0IHR5cGUgR3JvdXBlckZuPFQgZXh0ZW5kcyBNb2RlbD4gPSAoaXRlbXM6IFRbXSkgPT4gYW55XG5cbi8vIGV4cG9ydCB0eXBlIEdyb3VwS2V5PFQgZXh0ZW5kcyBNb2RlbD4gPSAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gUHJpbWl0aXZlW11cblxuLy8gZXhwb3J0IHR5cGUgR3JvdXBJdGVtSXNNYXRjaDxUIGV4dGVuZHMgTW9kZWw+ID0gKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW5cblxuLy8gZXhwb3J0IGludGVyZmFjZSBHcm91cGVyWDxUIGV4dGVuZHMgTW9kZWw+IHtcbi8vICAgICBuYW1lOiBzdHJpbmdcbi8vICAgICB0aXRsZT86IHN0cmluZ1xuLy8gICAgIGlzTWF0Y2g/OiBHcm91cEtleTxUPlxuLy8gICAgIFtrZXk6IHN0cmluZ106IGFueVxuLy8gfVxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIEdyb3VwZXJYTm9ybWFsaXplZDxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgR3JvdXBlclg8VD4ge1xuLy8gICAgIGtleTogR3JvdXBLZXk8VD5cbi8vIH1cblxuLy8gdHlwZSBfR3JvdXBlcnM8VCBleHRlbmRzIE1vZGVsLCBGPiA9IGtleW9mIEYgfCBHcm91cGVyPFQ+XG4vLyBleHBvcnQgdHlwZSBHcm91cGVyPFQgZXh0ZW5kcyBNb2RlbCwgRiA9IEZsYXR0ZW48VD4+ID0gRXZhbDxBcnJheTxfR3JvdXBlcnM8VCwgRj4+PlxuXG4vLyBleHBvcnQgdHlwZSBHcm91cGVyTm9ybWFsaXplZDxUIGV4dGVuZHMgTW9kZWw+ID0geyBba2V5OiBzdHJpbmddOiBHcm91cGVyWE5vcm1hbGl6ZWQ8VD4gfVxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIEdyb3VwPFQgZXh0ZW5kcyBNb2RlbCwgRyBleHRlbmRzIEdyb3VwZXI8VD4gPSBHcm91cGVyPFQ+PiB7XG4vLyAgICAgZ3JvdXBlcjogR1xuLy8gICAgIGJlZ2luOiBudW1iZXJcbi8vICAgICBlbmQ6IG51bWJlclxuLy8gfVxuXG4vLyAvKipcbi8vICAqIEBleGFtcGxlXG4vLyAgKiBgYGB0c1xuLy8gICogY29uc3QgZ3JvdXBlZCA9IGdyb3VwQnkoW1wic3RhdHVzXCJdKShpdGVtcylcbi8vICAqIC8vIGV4cGV4dGVkOiB7W3N0YXR1c106IFsuLi5pdGVtc119XG4vLyAgKlxuLy8gICogY29uc3QgZ3JvdXBlZCA9IGdyb3VwQnkoW1wibmFtZVwiLCBcImFnZVwiXSkoaXRlbXMpXG4vLyAgKiAvLyBleHBlY3RlZCB7W3N0YXR1c106IHtbYWdlXTogWy4uLml0ZW1zXX19XG4vLyAgKlxuLy8gICogY29uc3QgU1RBVFVTX0xBQkVMUyA9IHthY3RpdmU6IFwiQWN0aXZlXCIsIGluYWN0aXZlOiBcIkluYWN0aXZlXCJ9XG4vLyAgKiBjb25zdCBncm91cGVkID0gZ3JvdXBCeShbKGl0ZW0pID0+IChTVEFUVVNfTEFCRUxTW2l0ZW0uc3RhdHVzXSB8fCBcIlVuZGVmaW5lZFwiKV0pKGl0ZW1zKVxuLy8gICogLy8gZXhwZWN0ZWQge1tcIkFjdGl2ZVwiIHwgXCJJbmFjdGl2ZVwiIHwgXCJVbmRlZmluZWRcIl06IFsuLi5pdGVtc119XG4vLyAgKlxuLy8gICogY29uc3QgZ3JvdXBlZCA9IGdyb3VwQnkoWyhpdGVtKSA9PiAoU1RBVFVTX0xBQkVMU1tpdGVtLnN0YXR1c10gfHwgXCJVbmRlZmluZWRcIiksIFwiYWdlXCJdKShpdGVtcylcbi8vICAqIC8vIGV4cGVjdGVkIHtbXCJBY3RpdmVcIiB8IFwiSW5hY3RpdmVcIiB8IFwiVW5kZWZpbmVkXCJdOiB7W2FnZV06IFsuLi5pdGVtc119fVxuLy8gICogYGBgXG4vLyAgKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PFQgZXh0ZW5kcyBNb2RlbD4oZ3JvdXBlcnM6IEdyb3VwZXI8VD4pOiBTb3J0ZXJGbjxUPiB7XG4vLyAgICAgcmV0dXJuIChfYSwgX2IpID0+IDBcbi8vIH1cblxuLy8gZXhwb3J0IGZ1bmN0aW9uIGdyb3VwZXJOb3JtYWxpemUoKSB7fVxuXG4vLyBleHBvcnQgZnVuY3Rpb24gZ3JvdXBlckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsPihncm91cGVyczogR3JvdXBlcjxUPik6IEdyb3VwZXJGbjxUPiB7XG4vLyAgICAgcmV0dXJuIF8gPT4gdW5kZWZpbmVkXG4vLyB9XG5cbi8vIGV4cG9ydCBmdW5jdGlvbiBncm91cGVyTWVyZ2U8VCBleHRlbmRzIE1vZGVsLCBGID0gRmxhdHRlbjxUPj4oXG4vLyAgICAgLi4uZ3JvdXBlcnM6IEFycmF5PEdyb3VwZXI8VCwgRj4gfCB1bmRlZmluZWQgfCBudWxsPlxuLy8gKTogR3JvdXBlcjxULCBGPiB8IHVuZGVmaW5lZCB7XG4vLyAgICAgcmV0dXJuIHVuZGVmaW5lZFxuLy8gfVxuXG5leHBvcnQgY2xhc3MgR3JvdXBlclByb3BlcnR5PFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBRdWVyeVByb3BlcnR5PEdyb3VwZXI8VD4sIEdyb3VwZXJOb3JtYWxpemVkPiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5vcm0oYTogYW55KSB7XG4gICAgICAgIHJldHVybiBncm91cGVyTm9ybWFsaXplXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG1lcmdlKGE/OiBhbnksIGI/OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwZXJNZXJnZShhLCBiKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwZXJQcm9wZXJ0eVNldDxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUXVlcnlQcm9wZXJ0eVNldDxHcm91cGVyPFQ+PiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5ld1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEdyb3VwZXJQcm9wZXJ0eSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG1lcmdlKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiBncm91cGVyTWVyZ2UoLi4uYXJncylcbiAgICB9XG59XG4iXX0=
@@ -1,9 +0,0 @@
1
- export { filterBy, filterMerge, filterNormalize, filterSimplify } from "./filter";
2
- export { groupBy, grouperMerge } from "./grouper";
3
- export { sortBy, sorterMerge, sorterNormalize } from "./sorter";
4
- export { slimBy, slimerMerge } from "./slimer";
5
- export { sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq } from "./slice";
6
- export { pathGetterCompile } from "./path";
7
- export { querySubject } from "./query";
8
- export { queryExecutor } from "./executor";
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLFFBQVEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFZLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNySCxPQUFPLEVBQVcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxRCxPQUFPLEVBR0gsTUFBTSxFQUNOLFdBQVcsRUFDWCxlQUFlLEVBSWxCLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3RELE9BQU8sRUFBUyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDMUMsT0FBTyxFQUFzQyxZQUFZLEVBQWdCLE1BQU0sU0FBUyxDQUFBO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sWUFBWSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRmlsdGVyLCBGaWx0ZXJOb3JtYWxpemVkLCBmaWx0ZXJCeSwgZmlsdGVyTWVyZ2UsIGZpbHRlck5vcm1hbGl6ZSwgRmlsdGVyT3AsIGZpbHRlclNpbXBsaWZ5IH0gZnJvbSBcIi4vZmlsdGVyXCJcbmV4cG9ydCB7IEdyb3VwZXIsIGdyb3VwQnksIGdyb3VwZXJNZXJnZSB9IGZyb20gXCIuL2dyb3VwZXJcIlxuZXhwb3J0IHtcbiAgICBTb3J0ZXIsXG4gICAgU29ydGVyTm9ybWFsaXplZCxcbiAgICBzb3J0QnksXG4gICAgc29ydGVyTWVyZ2UsXG4gICAgc29ydGVyTm9ybWFsaXplLFxuICAgIFNvcnREaXIsXG4gICAgU29ydERpcmVjdGlvbixcbiAgICBTb3J0RGlyRXh0cmFcbn0gZnJvbSBcIi4vc29ydGVyXCJcbmV4cG9ydCB7IFNsaW1lciwgc2xpbUJ5LCBzbGltZXJNZXJnZSB9IGZyb20gXCIuL3NsaW1lclwiXG5leHBvcnQgeyBTbGljZSwgc2xpY2VNZXJnZSwgc2xpY2VBcHBseSwgc2xpY2VJbnNlcnQsIHNsaWNlVG9QYWdlcywgc2xpY2VDbGFtcCwgc2xpY2VFcSB9IGZyb20gXCIuL3NsaWNlXCJcbmV4cG9ydCB7IHBhdGhHZXR0ZXJDb21waWxlIH0gZnJvbSBcIi4vcGF0aFwiXG5leHBvcnQgeyBRdWVyeSwgUXVlcnlXaXRoU2xpY2UsIFF1ZXJ5UmVzdWx0LCBxdWVyeVN1YmplY3QsIFF1ZXJ5U3ViamVjdCB9IGZyb20gXCIuL3F1ZXJ5XCJcbmV4cG9ydCB7IHF1ZXJ5RXhlY3V0b3IsIFF1ZXJ5RXhlY3V0b3IgfSBmcm9tIFwiLi9leGVjdXRvclwiXG4iXX0=
@@ -1,18 +0,0 @@
1
- import { flattenDepth } from "lodash-es";
2
- export function pathGetterCompile(path) {
3
- if (!path || path.length === 0) {
4
- throw new Error("Empty path");
5
- }
6
- return path.split(".").reduce((parent, part) => makeGetter(part, parent), (obj) => (obj == null ? [] : [obj]));
7
- }
8
- const IsNumber = /^\d+$/;
9
- function makeGetter(part, parent) {
10
- if (part === "*") {
11
- return obj => flattenDepth(parent(obj), 1);
12
- }
13
- else {
14
- const key = IsNumber.test(part) ? Number(part) : part;
15
- return obj => parent(obj).map(v => (v != null ? v[key] : undefined));
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RhdGEvc3JjL3F1ZXJ5L3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUt4QyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBWTtJQUMxQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDekIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUMxQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDM0MsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUE7QUFFeEIsU0FBUyxVQUFVLENBQUMsSUFBWSxFQUFFLE1BQWdCO0lBQzlDLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDOUMsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNyRCxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlcHRoIH0gZnJvbSBcImxvZGFzaC1lc1wiXG5cbnR5cGUgR2V0dGVyRm4gPSAoc3JjczogYW55W10pID0+IGFueVtdXG5leHBvcnQgdHlwZSBQYXRoR2V0dGVyPFQgPSBhbnksIFIgPSBhbnk+ID0gKG9iajogVCkgPT4gUltdXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoR2V0dGVyQ29tcGlsZShwYXRoOiBzdHJpbmcpOiBQYXRoR2V0dGVyIHtcbiAgICBpZiAoIXBhdGggfHwgcGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgcGF0aFwiKVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2U8R2V0dGVyRm4+KFxuICAgICAgICAocGFyZW50LCBwYXJ0KSA9PiBtYWtlR2V0dGVyKHBhcnQsIHBhcmVudCksXG4gICAgICAgIChvYmo6IGFueSkgPT4gKG9iaiA9PSBudWxsID8gW10gOiBbb2JqXSlcbiAgICApXG59XG5cbmNvbnN0IElzTnVtYmVyID0gL15cXGQrJC9cblxuZnVuY3Rpb24gbWFrZUdldHRlcihwYXJ0OiBzdHJpbmcsIHBhcmVudDogR2V0dGVyRm4pOiBHZXR0ZXJGbiB7XG4gICAgaWYgKHBhcnQgPT09IFwiKlwiKSB7XG4gICAgICAgIHJldHVybiBvYmogPT4gZmxhdHRlbkRlcHRoKHBhcmVudChvYmopLCAxKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IElzTnVtYmVyLnRlc3QocGFydCkgPyBOdW1iZXIocGFydCkgOiBwYXJ0XG4gICAgICAgIHJldHVybiBvYmogPT4gcGFyZW50KG9iaikubWFwKHYgPT4gKHYgIT0gbnVsbCA/IHZba2V5XSA6IHVuZGVmaW5lZCkpXG4gICAgfVxufVxuIl19
@@ -1,56 +0,0 @@
1
- import { BehaviorSubject, combineLatest, map, Observable, shareReplay } from "rxjs";
2
- import { isEqual } from "lodash-es";
3
- import { deepClone, deepFreeze } from "@ngutil/common";
4
- import { readonlyProp } from "./common";
5
- export class QueryProperty extends BehaviorSubject {
6
- set(value) {
7
- this.#nextClone(value != null ? this.norm(value) : undefined);
8
- }
9
- update(value) {
10
- const norm = value != null ? this.norm(value) : undefined;
11
- if (!isEqual(this.value, norm)) {
12
- this.#next(this.merge(this.value, norm));
13
- }
14
- }
15
- del() {
16
- this.set(undefined);
17
- }
18
- #next(value) {
19
- if (!isEqual(this.value, value)) {
20
- if (value == null) {
21
- this.next(undefined);
22
- }
23
- else {
24
- this.next(value);
25
- }
26
- }
27
- }
28
- #nextClone(value) {
29
- if (!isEqual(this.value, value)) {
30
- if (value == null) {
31
- this.next(undefined);
32
- }
33
- else {
34
- this.next(deepClone(value));
35
- }
36
- }
37
- }
38
- }
39
- export class QueryPropertySet extends Observable {
40
- #combined;
41
- constructor(...names) {
42
- super(dest => this.#combined.subscribe(dest));
43
- const observables = [];
44
- const props = {};
45
- for (const name of names) {
46
- const o = this.newProperty();
47
- observables.push(o);
48
- props[name] = o;
49
- }
50
- this.#combined = combineLatest(observables).pipe(map(values => deepFreeze(this.merge(...values))), shareReplay(1));
51
- for (const [k, v] of Object.entries(props)) {
52
- readonlyProp(this, k, v);
53
- }
54
- }
55
- }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9xdWVyeS1wcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUVuRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRW5DLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV2QyxNQUFNLE9BQWdCLGFBQW9CLFNBQVEsZUFBOEI7SUFDNUUsR0FBRyxDQUFDLEtBQWE7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNoQixNQUFNLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM1QyxDQUFDO0lBQ0wsQ0FBQztJQUVELEdBQUc7UUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZCLENBQUM7SUFRRCxLQUFLLENBQUMsS0FBUztRQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFTO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBTSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ3BDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFnQixnQkFBb0IsU0FBUSxVQUFhO0lBQ2xELFNBQVMsQ0FBZTtJQUVqQyxZQUFZLEdBQUcsS0FBZTtRQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRTdDLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUE7UUFDOUMsTUFBTSxLQUFLLEdBQXVDLEVBQUUsQ0FBQTtRQUVwRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUM1QixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ25CLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkIsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDNUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ2hELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtRQUVELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDNUIsQ0FBQztJQUNMLENBQUM7Q0FJSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIlxuXG5pbXBvcnQgeyBkZWVwQ2xvbmUsIGRlZXBGcmVlemUgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyByZWFkb25seVByb3AgfSBmcm9tIFwiLi9jb21tb25cIlxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXVlcnlQcm9wZXJ0eTxJLCBPPiBleHRlbmRzIEJlaGF2aW9yU3ViamVjdDxPIHwgdW5kZWZpbmVkPiB7XG4gICAgc2V0KHZhbHVlPzogSSB8IE8pIHtcbiAgICAgICAgdGhpcy4jbmV4dENsb25lKHZhbHVlICE9IG51bGwgPyB0aGlzLm5vcm0odmFsdWUpIDogdW5kZWZpbmVkKVxuICAgIH1cblxuICAgIHVwZGF0ZSh2YWx1ZT86IEkgfCBPKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vcm0gPSB2YWx1ZSAhPSBudWxsID8gdGhpcy5ub3JtKHZhbHVlKSA6IHVuZGVmaW5lZFxuICAgICAgICBpZiAoIWlzRXF1YWwodGhpcy52YWx1ZSwgbm9ybSkpIHtcbiAgICAgICAgICAgIHRoaXMuI25leHQodGhpcy5tZXJnZSh0aGlzLnZhbHVlLCBub3JtKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXQodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlIHZhbHVlcyBhbmQgZW1pdCB3aGVuIGNoYW5nZWQgKGRvbnQgY2hhbmdlIG9yaWdpbmFsIHZhbHVlcylcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgbWVyZ2UoYT86IE8sIGI/OiBPKTogTyB8IHVuZGVmaW5lZFxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBub3JtKGE6IEkgfCBPKTogTyB8IHVuZGVmaW5lZFxuXG4gICAgI25leHQodmFsdWU/OiBPKSB7XG4gICAgICAgIGlmICghaXNFcXVhbCh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KHVuZGVmaW5lZClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI25leHRDbG9uZSh2YWx1ZT86IE8pIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKHRoaXMudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQodW5kZWZpbmVkKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoZGVlcENsb25lPGFueT4odmFsdWUpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXVlcnlQcm9wZXJ0eVNldDxPPiBleHRlbmRzIE9ic2VydmFibGU8Tz4ge1xuICAgIHJlYWRvbmx5ICNjb21iaW5lZDogT2JzZXJ2YWJsZTxPPlxuXG4gICAgY29uc3RydWN0b3IoLi4ubmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHN1cGVyKGRlc3QgPT4gdGhpcy4jY29tYmluZWQuc3Vic2NyaWJlKGRlc3QpKVxuXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW11cbiAgICAgICAgY29uc3QgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxhbnk+IH0gPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgICAgICAgY29uc3QgbyA9IHRoaXMubmV3UHJvcGVydHkoKVxuICAgICAgICAgICAgb2JzZXJ2YWJsZXMucHVzaChvKVxuICAgICAgICAgICAgcHJvcHNbbmFtZV0gPSBvXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNjb21iaW5lZCA9IGNvbWJpbmVMYXRlc3Qob2JzZXJ2YWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAodmFsdWVzID0+IGRlZXBGcmVlemUodGhpcy5tZXJnZSguLi52YWx1ZXMpKSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApXG5cbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMpKSB7XG4gICAgICAgICAgICByZWFkb25seVByb3AodGhpcywgaywgdilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBuZXdQcm9wZXJ0eSgpOiBRdWVyeVByb3BlcnR5PGFueSwgYW55PlxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBtZXJnZSguLi5hcmdzOiBhbnlbXSk6IGFueSB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgdHlwZSBRdWVyeVByb3BlcnR5U2V0T2Y8VCwgUCwgTiBleHRlbmRzIHN0cmluZ1tdPiA9IFQgJiB7IFtLIGluIE5bbnVtYmVyXV06IFAgfVxuIl19
@@ -1,19 +0,0 @@
1
- import { combineLatest, shareReplay } from "rxjs";
2
- import { readonlyProp } from "./common";
3
- import { FilterPropertySet } from "./filter";
4
- import { GrouperPropertySet } from "./grouper";
5
- import { SlimerPropertySet } from "./slimer";
6
- import { SorterPropertySet } from "./sorter";
7
- export function querySubject(...names) {
8
- const filter = new FilterPropertySet(...names);
9
- const sorter = new SorterPropertySet(...names);
10
- const slimer = new SlimerPropertySet(...names);
11
- const grouper = new GrouperPropertySet(...names);
12
- const result = combineLatest({ filter, sorter, slimer, grouper }).pipe(shareReplay(1));
13
- readonlyProp(result, "filter", filter);
14
- readonlyProp(result, "sorter", sorter);
15
- readonlyProp(result, "slimer", slimer);
16
- readonlyProp(result, "grouper", grouper);
17
- return result;
18
- }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUs3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBK0IsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekUsT0FBTyxFQUFpQyxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUc3RSxPQUFPLEVBQStCLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3pFLE9BQU8sRUFBK0IsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUEwQnpFLE1BQU0sVUFBVSxZQUFZLENBQXNDLEdBQUcsS0FBUTtJQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7SUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO0lBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQWlCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQTtJQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7SUFFaEQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdEYsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdEMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdEMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdEMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFeEMsT0FBTyxNQUFhLENBQUE7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyB0eXBlIERlZXBSZWFkb25seSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IHR5cGUgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgcmVhZG9ubHlQcm9wIH0gZnJvbSBcIi4vY29tbW9uXCJcbmltcG9ydCB7IHR5cGUgRmlsdGVyLCBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyUHJvcGVydHlTZXQgfSBmcm9tIFwiLi9maWx0ZXJcIlxuaW1wb3J0IHsgdHlwZSBHcm91cGVyLCBHcm91cGVyUHJvcGVydHksIEdyb3VwZXJQcm9wZXJ0eVNldCB9IGZyb20gXCIuL2dyb3VwZXJcIlxuaW1wb3J0IHsgdHlwZSBRdWVyeVByb3BlcnR5U2V0T2YgfSBmcm9tIFwiLi9xdWVyeS1wcm9wZXJ0eVwiXG5pbXBvcnQgeyB0eXBlIFNsaWNlIH0gZnJvbSBcIi4vc2xpY2VcIlxuaW1wb3J0IHsgdHlwZSBTbGltZXIsIFNsaW1lclByb3BlcnR5LCBTbGltZXJQcm9wZXJ0eVNldCB9IGZyb20gXCIuL3NsaW1lclwiXG5pbXBvcnQgeyB0eXBlIFNvcnRlciwgU29ydGVyUHJvcGVydHksIFNvcnRlclByb3BlcnR5U2V0IH0gZnJvbSBcIi4vc29ydGVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeTxUIGV4dGVuZHMgTW9kZWw+IHtcbiAgICBmaWx0ZXI/OiBEZWVwUmVhZG9ubHk8RmlsdGVyPFQ+PlxuICAgIHNvcnRlcj86IERlZXBSZWFkb25seTxTb3J0ZXI8VD4+XG4gICAgc2xpbWVyPzogRGVlcFJlYWRvbmx5PFNsaW1lcjxUPj5cbiAgICBncm91cGVyPzogRGVlcFJlYWRvbmx5PEdyb3VwZXI8VD4+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlXaXRoU2xpY2U8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFF1ZXJ5PFQ+IHtcbiAgICBzbGljZTogRGVlcFJlYWRvbmx5PFNsaWNlPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UmVzdWx0PFQgZXh0ZW5kcyBNb2RlbD4ge1xuICAgIGl0ZW1zOiByZWFkb25seSBUW11cbiAgICB0b3RhbD86IG51bWJlclxuICAgIGdyb3Vwcz86IGFueVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlTdWJqZWN0PFQgZXh0ZW5kcyBNb2RlbCwgTiBleHRlbmRzIHN0cmluZ1tdPiBleHRlbmRzIE9ic2VydmFibGU8UXVlcnk8VD4+IHtcbiAgICByZWFkb25seSBmaWx0ZXI6IFF1ZXJ5UHJvcGVydHlTZXRPZjxGaWx0ZXJQcm9wZXJ0eVNldDxUPiwgRmlsdGVyUHJvcGVydHk8VD4sIE4+XG4gICAgcmVhZG9ubHkgc29ydGVyOiBRdWVyeVByb3BlcnR5U2V0T2Y8U29ydGVyUHJvcGVydHlTZXQsIFNvcnRlclByb3BlcnR5PFQ+LCBOPlxuICAgIHJlYWRvbmx5IHNsaW1lcjogUXVlcnlQcm9wZXJ0eVNldE9mPFNsaW1lclByb3BlcnR5U2V0PFQ+LCBTbGltZXJQcm9wZXJ0eTxUPiwgTj5cbiAgICByZWFkb25seSBncm91cGVyOiBRdWVyeVByb3BlcnR5U2V0T2Y8R3JvdXBlclByb3BlcnR5U2V0PFQ+LCBHcm91cGVyUHJvcGVydHk8VD4sIE4+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN1YmplY3Q8VCBleHRlbmRzIE1vZGVsLCBOIGV4dGVuZHMgc3RyaW5nW10+KC4uLm5hbWVzOiBOKTogUXVlcnlTdWJqZWN0PFQsIE4+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyUHJvcGVydHlTZXQoLi4ubmFtZXMpXG4gICAgY29uc3Qgc29ydGVyID0gbmV3IFNvcnRlclByb3BlcnR5U2V0KC4uLm5hbWVzKVxuICAgIGNvbnN0IHNsaW1lciA9IG5ldyBTbGltZXJQcm9wZXJ0eVNldCguLi5uYW1lcylcbiAgICBjb25zdCBncm91cGVyID0gbmV3IEdyb3VwZXJQcm9wZXJ0eVNldCguLi5uYW1lcylcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbWJpbmVMYXRlc3QoeyBmaWx0ZXIsIHNvcnRlciwgc2xpbWVyLCBncm91cGVyIH0pLnBpcGUoc2hhcmVSZXBsYXkoMSkpXG4gICAgcmVhZG9ubHlQcm9wKHJlc3VsdCwgXCJmaWx0ZXJcIiwgZmlsdGVyKVxuICAgIHJlYWRvbmx5UHJvcChyZXN1bHQsIFwic29ydGVyXCIsIHNvcnRlcilcbiAgICByZWFkb25seVByb3AocmVzdWx0LCBcInNsaW1lclwiLCBzbGltZXIpXG4gICAgcmVhZG9ubHlQcm9wKHJlc3VsdCwgXCJncm91cGVyXCIsIGdyb3VwZXIpXG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIGFueVxufVxuIl19