@ngutil/data 0.0.81 → 0.0.82
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/fesm2022/ngutil-data.mjs +25 -31
- package/fesm2022/ngutil-data.mjs.map +1 -1
- package/package.json +6 -8
- package/esm2022/index.mjs +0 -45
- package/esm2022/model/index.mjs +0 -2
- package/esm2022/model/meta.mjs +0 -125
- package/esm2022/ngutil-data.mjs +0 -5
- package/esm2022/provider/array.mjs +0 -9
- package/esm2022/provider/index.mjs +0 -5
- package/esm2022/provider/local.mjs +0 -30
- package/esm2022/provider/observable.mjs +0 -11
- package/esm2022/provider/provider.mjs +0 -26
- package/esm2022/query/common.mjs +0 -33
- package/esm2022/query/executor.mjs +0 -78
- package/esm2022/query/filter.mjs +0 -313
- package/esm2022/query/grouper.mjs +0 -85
- package/esm2022/query/index.mjs +0 -9
- package/esm2022/query/path.mjs +0 -18
- package/esm2022/query/query-property.mjs +0 -56
- package/esm2022/query/query.mjs +0 -19
- package/esm2022/query/slice.mjs +0 -64
- package/esm2022/query/slimer.mjs +0 -24
- package/esm2022/query/sorter.mjs +0 -215
- package/esm2022/source/index.mjs +0 -3
- package/esm2022/source/proxy.directive.mjs +0 -197
- package/esm2022/source/source.mjs +0 -121
- package/esm2022/store/collection-store.mjs +0 -3
- package/esm2022/store/index.mjs +0 -3
- package/esm2022/store/memory-store.mjs +0 -79
package/esm2022/query/slice.mjs
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { deepClone } from "@ngutil/common";
|
|
2
|
-
export function sliceMerge(...slices) {
|
|
3
|
-
let result = undefined;
|
|
4
|
-
for (const slice of slices) {
|
|
5
|
-
if (slice == null) {
|
|
6
|
-
continue;
|
|
7
|
-
}
|
|
8
|
-
if (result == null) {
|
|
9
|
-
result = deepClone(slice);
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
result = { ...result, ...slice };
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return result;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Apply slice to array, and force the result length to equal with Slice length,
|
|
19
|
-
* so fill array with undefined if not enought elements
|
|
20
|
-
*/
|
|
21
|
-
export function sliceApply(slice, array) {
|
|
22
|
-
const result = array.slice(slice.start, slice.end);
|
|
23
|
-
result.length = slice.end - slice.start;
|
|
24
|
-
return result;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`
|
|
28
|
-
*/
|
|
29
|
-
export function sliceToPages(slice) {
|
|
30
|
-
if (slice.pageSize == null) {
|
|
31
|
-
throw new Error("Missing `step` from slice");
|
|
32
|
-
}
|
|
33
|
-
const start = Math.floor(slice.start / slice.pageSize);
|
|
34
|
-
const end = Math.ceil(slice.end / slice.pageSize);
|
|
35
|
-
return Array.from({ length: end - start }, (_, i) => start + i);
|
|
36
|
-
}
|
|
37
|
-
export function sliceInsert(slice, array, newItems) {
|
|
38
|
-
if (slice.start === slice.end) {
|
|
39
|
-
return array;
|
|
40
|
-
}
|
|
41
|
-
let result = array.slice(0, slice.start);
|
|
42
|
-
result.length = slice.start;
|
|
43
|
-
result = result.concat(newItems);
|
|
44
|
-
if (!isNaN(slice.end) && isFinite(slice.end)) {
|
|
45
|
-
result.length = slice.end;
|
|
46
|
-
result = result.concat(array.slice(slice.end));
|
|
47
|
-
}
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
export function sliceClamp(slice, constraint) {
|
|
51
|
-
return {
|
|
52
|
-
start: Math.max(slice.start, constraint.start),
|
|
53
|
-
end: Math.min(slice.end, constraint.end),
|
|
54
|
-
pageSize: slice.pageSize
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
export function sliceEq(a, b) {
|
|
58
|
-
return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize;
|
|
59
|
-
}
|
|
60
|
-
// TODO: sliceOverlap(other: Slice): Slice
|
|
61
|
-
// TODO: sliceIncludes(other: Slice): boolean
|
|
62
|
-
// TODO: sliceConcat(...slices: Slice[]): Slice[]
|
|
63
|
-
// TODO: sliceDiff(slice: Slice): Slice[]
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9zbGljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUF1QjFDLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBRyxNQUFlO0lBQ3pDLElBQUksTUFBTSxHQUFzQixTQUFTLENBQUE7SUFFekMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixTQUFRO1FBQ1osQ0FBQztRQUNELElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLEdBQUcsRUFBRSxHQUFJLE1BQWMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFBO1FBQzdDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBWSxFQUFFLEtBQXFCO0lBQzFELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7SUFDdkMsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFZO0lBQ3JDLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ25FLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVksRUFBRSxLQUFxQixFQUFFLFFBQXdCO0lBQ3JGLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsT0FBTyxLQUFZLENBQUE7SUFDdkIsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN4QyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7SUFFM0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQTtRQUN6QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFZLEVBQUUsVUFBaUI7SUFDdEQsT0FBTztRQUNILEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUM5QyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDeEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO0tBQzNCLENBQUE7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxDQUFRLEVBQUUsQ0FBUTtJQUN0QyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFBO0FBQzlFLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsNkNBQTZDO0FBQzdDLGlEQUFpRDtBQUNqRCx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXN0UmFuZ2UgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zXCJcblxuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYXJyYXktdmlld1xuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICoge3N0YXJ0OiAwLCBlbmQ6IDB9IC8vIGVtcHR5IHJhbmdlXG4gKiB7c3RhcnQ6IDAsIGVuZDogMX0gLy8gcmFuZ2Ugd2l0aCBvbmUgaXRlbS5lZyBzbGljZUFwcGx5KFsxLCAyLCAzXSwge3N0YXJ0OjAsIGVuZDoxfSkgLT4gWzFdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGljZSBleHRlbmRzIExpc3RSYW5nZSB7XG4gICAgLyoqXG4gICAgICogU3RhcnQgb2Ygc2xpY2UsIGV4YWN0IGluZGV4IG9mIGl0ZW0gaW4gbGlzdFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBFbmQgb2Ygc2xpY2UsIG5vdCBpbmNsdWRlIGVuZCBpbmRleCBvZiBpdGVtIGluIGxpc3RcbiAgICAgKi9cbiAgICByZWFkb25seSBlbmQ6IG51bWJlclxuICAgIHJlYWRvbmx5IHBhZ2VTaXplPzogbnVtYmVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGljZU1lcmdlKC4uLnNsaWNlczogU2xpY2VbXSkge1xuICAgIGxldCByZXN1bHQ6IFNsaWNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IHNsaWNlIG9mIHNsaWNlcykge1xuICAgICAgICBpZiAoc2xpY2UgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGRlZXBDbG9uZShzbGljZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHsgLi4uKHJlc3VsdCBhcyBhbnkpLCAuLi5zbGljZSB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQXBwbHkgc2xpY2UgdG8gYXJyYXksIGFuZCBmb3JjZSB0aGUgcmVzdWx0IGxlbmd0aCB0byBlcXVhbCB3aXRoIFNsaWNlIGxlbmd0aCxcbiAqIHNvIGZpbGwgYXJyYXkgd2l0aCB1bmRlZmluZWQgaWYgbm90IGVub3VnaHQgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlQXBwbHkoc2xpY2U6IFNsaWNlLCBhcnJheTogcmVhZG9ubHkgYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXJyYXkuc2xpY2Uoc2xpY2Uuc3RhcnQsIHNsaWNlLmVuZClcbiAgICByZXN1bHQubGVuZ3RoID0gc2xpY2UuZW5kIC0gc2xpY2Uuc3RhcnRcbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHJldHVybnMgUGFnZSBudW1iZXJzLCBlZy46IGBbMTAsIDExLCAxMiwgMTMsIC4uLl1gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZVRvUGFnZXMoc2xpY2U6IFNsaWNlKTogbnVtYmVyW10ge1xuICAgIGlmIChzbGljZS5wYWdlU2l6ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYHN0ZXBgIGZyb20gc2xpY2VcIilcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IE1hdGguZmxvb3Ioc2xpY2Uuc3RhcnQgLyBzbGljZS5wYWdlU2l6ZSlcbiAgICBjb25zdCBlbmQgPSBNYXRoLmNlaWwoc2xpY2UuZW5kIC8gc2xpY2UucGFnZVNpemUpXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCAtIHN0YXJ0IH0sIChfLCBpKSA9PiBzdGFydCArIGkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGljZUluc2VydChzbGljZTogU2xpY2UsIGFycmF5OiByZWFkb25seSBhbnlbXSwgbmV3SXRlbXM6IHJlYWRvbmx5IGFueVtdKTogYW55W10ge1xuICAgIGlmIChzbGljZS5zdGFydCA9PT0gc2xpY2UuZW5kKSB7XG4gICAgICAgIHJldHVybiBhcnJheSBhcyBhbnlcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gYXJyYXkuc2xpY2UoMCwgc2xpY2Uuc3RhcnQpXG4gICAgcmVzdWx0Lmxlbmd0aCA9IHNsaWNlLnN0YXJ0XG5cbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KG5ld0l0ZW1zKVxuXG4gICAgaWYgKCFpc05hTihzbGljZS5lbmQpICYmIGlzRmluaXRlKHNsaWNlLmVuZCkpIHtcbiAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IHNsaWNlLmVuZFxuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGFycmF5LnNsaWNlKHNsaWNlLmVuZCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xpY2VDbGFtcChzbGljZTogU2xpY2UsIGNvbnN0cmFpbnQ6IFNsaWNlKTogU2xpY2Uge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBNYXRoLm1heChzbGljZS5zdGFydCwgY29uc3RyYWludC5zdGFydCksXG4gICAgICAgIGVuZDogTWF0aC5taW4oc2xpY2UuZW5kLCBjb25zdHJhaW50LmVuZCksXG4gICAgICAgIHBhZ2VTaXplOiBzbGljZS5wYWdlU2l6ZVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlRXEoYTogU2xpY2UsIGI6IFNsaWNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGEuc3RhcnQgPT09IGIuc3RhcnQgJiYgYS5lbmQgPT09IGIuZW5kICYmIGEucGFnZVNpemUgPT09IGIucGFnZVNpemVcbn1cblxuLy8gVE9ETzogc2xpY2VPdmVybGFwKG90aGVyOiBTbGljZSk6IFNsaWNlXG4vLyBUT0RPOiBzbGljZUluY2x1ZGVzKG90aGVyOiBTbGljZSk6IGJvb2xlYW5cbi8vIFRPRE86IHNsaWNlQ29uY2F0KC4uLnNsaWNlczogU2xpY2VbXSk6IFNsaWNlW11cbi8vIFRPRE86IHNsaWNlRGlmZihzbGljZTogU2xpY2UpOiBTbGljZVtdXG4iXX0=
|
package/esm2022/query/slimer.mjs
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { QueryProperty, QueryPropertySet } from "./query-property";
|
|
2
|
-
export function slimBy(slimer) { }
|
|
3
|
-
export function slimerNormalize(slimer) { }
|
|
4
|
-
function slimerCompile(slimer) {
|
|
5
|
-
return item => item;
|
|
6
|
-
}
|
|
7
|
-
export function slimerMerge(...slimers) { }
|
|
8
|
-
export class SlimerProperty extends QueryProperty {
|
|
9
|
-
norm(a) {
|
|
10
|
-
return slimerNormalize(a);
|
|
11
|
-
}
|
|
12
|
-
merge(a, b) {
|
|
13
|
-
return slimerMerge(a, b);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export class SlimerPropertySet extends QueryPropertySet {
|
|
17
|
-
newProperty() {
|
|
18
|
-
return new SlimerProperty(undefined);
|
|
19
|
-
}
|
|
20
|
-
merge(...args) {
|
|
21
|
-
return slimerMerge(...args);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpbWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc2xpbWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQWtCbEUsTUFBTSxVQUFVLE1BQU0sQ0FBa0IsTUFBaUIsSUFBUyxDQUFDO0FBRW5FLE1BQU0sVUFBVSxlQUFlLENBQWtCLE1BQWlCLElBQXFCLENBQUM7QUFFeEYsU0FBUyxhQUFhLENBQWtCLE1BQWlCO0lBQ3JELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUE7QUFDdkIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQWtCLEdBQUcsT0FBa0IsSUFBUSxDQUFDO0FBRTNFLE1BQU0sT0FBTyxjQUFnQyxTQUFRLGFBQTBDO0lBQ3hFLElBQUksQ0FBQyxDQUFNO1FBQzFCLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFa0IsS0FBSyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ3JDLE9BQU8sV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUM1QixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8saUJBQW1DLFNBQVEsZ0JBQTJCO0lBQzVELFdBQVc7UUFDMUIsT0FBTyxJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBRWtCLEtBQUssQ0FBQyxHQUFHLElBQVc7UUFDbkMsT0FBTyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtJQUMvQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBRdWVyeVByb3BlcnR5LCBRdWVyeVByb3BlcnR5U2V0IH0gZnJvbSBcIi4vcXVlcnktcHJvcGVydHlcIlxuXG4vKipcbiAqIEBleG1hcGxlXG4gKiBgYGB0c1xuICogW1xuICogIFwiZmllbGRfbmFtZVwiLFxuICogIHtcImNoaWxkX25hbWVcIjogW1wiY2hpbGRfZmllbGRfbmFtZVwiXX0sXG4gKiAge1wiY2hpbGRyZW5cIjogW1wiY2hpbGRyZW5fZmllbGRfbmFtZVwiLCB7XCIkdHlwZVwiOiBBcnRpY2xlLCBzbGltZXI6IFtcImlkXCIsIFwidGl0bGVcIl19XX0sXG4gKiAge1wiJHR5cGVcIjogRW1wbG95ZWUsIHNsaW1lcjogW1wibmFtZVwiXX0uXG4gKiAge1wiJGZpbHRlclwiOiBGaWx0ZXI8VCwgRj59XG4gKiBdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgU2xpbWVyPFQgZXh0ZW5kcyBNb2RlbD4gPSBhbnlcbmV4cG9ydCB0eXBlIFNsaW1lck5vcm1hbGl6ZWQgPSBhbnlcbmV4cG9ydCB0eXBlIFNsaW1lckZuPFQ+ID0gKGl0ZW06IFQpID0+IFRcblxuZXhwb3J0IGZ1bmN0aW9uIHNsaW1CeTxUIGV4dGVuZHMgTW9kZWw+KHNsaW1lcjogU2xpbWVyPFQ+KTogdm9pZCB7fVxuXG5leHBvcnQgZnVuY3Rpb24gc2xpbWVyTm9ybWFsaXplPFQgZXh0ZW5kcyBNb2RlbD4oc2xpbWVyOiBTbGltZXI8VD4pOiBTbGltZXJOb3JtYWxpemVkIHt9XG5cbmZ1bmN0aW9uIHNsaW1lckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsPihzbGltZXI6IFNsaW1lcjxUPik6IFNsaW1lckZuPFQ+IHtcbiAgICByZXR1cm4gaXRlbSA9PiBpdGVtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGltZXJNZXJnZTxUIGV4dGVuZHMgTW9kZWw+KC4uLnNsaW1lcnM6IFNsaW1lcjxUPik6IGFueSB7fVxuXG5leHBvcnQgY2xhc3MgU2xpbWVyUHJvcGVydHk8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFF1ZXJ5UHJvcGVydHk8U2xpbWVyPFQ+LCBTbGltZXJOb3JtYWxpemVkPiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5vcm0oYTogYW55KSB7XG4gICAgICAgIHJldHVybiBzbGltZXJOb3JtYWxpemUoYSlcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbWVyZ2UoYT86IGFueSwgYj86IGFueSkge1xuICAgICAgICByZXR1cm4gc2xpbWVyTWVyZ2UoYSwgYilcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTbGltZXJQcm9wZXJ0eVNldDxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUXVlcnlQcm9wZXJ0eVNldDxTbGltZXI8VD4+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmV3UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2xpbWVyUHJvcGVydHkodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBtZXJnZSguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICByZXR1cm4gc2xpbWVyTWVyZ2UoLi4uYXJncylcbiAgICB9XG59XG4iXX0=
|
package/esm2022/query/sorter.mjs
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import { map } from "rxjs";
|
|
2
|
-
import { flattenDeep, isEqual } from "lodash-es";
|
|
3
|
-
import { deepClone, isPlainObject } from "@ngutil/common";
|
|
4
|
-
import { pathGetterCompile } from "./path";
|
|
5
|
-
import { QueryProperty, QueryPropertySet } from "./query-property";
|
|
6
|
-
/**
|
|
7
|
-
* @example
|
|
8
|
-
*```ts
|
|
9
|
-
* items.toSorted(sortBy([{"author.name": "asc"}]))
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export function sortBy(sorters) {
|
|
13
|
-
if (sorters.length === 0) {
|
|
14
|
-
throw new Error("Empty sorter");
|
|
15
|
-
}
|
|
16
|
-
return _sorterCompile(sorters);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Normalize sorter definition
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```ts
|
|
23
|
-
* normalizeSorter([{id: "asc"}]) -> [{path: "id", isAsc: true, emptyFirst: true}]
|
|
24
|
-
* normalizeSorter([{id: {dir: "desc", emptyFirst: false}}]) -> [{path: "id", isAsc: false, emptyFirst: false}]
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export function sorterNormalize(sorters) {
|
|
28
|
-
return _sorterNormalize(sorters);
|
|
29
|
-
}
|
|
30
|
-
function _sorterNormalize(sorters) {
|
|
31
|
-
if (!Array.isArray(sorters)) {
|
|
32
|
-
sorters = [sorters];
|
|
33
|
-
}
|
|
34
|
-
return flattenDeep(sorters.map((s) => {
|
|
35
|
-
if (isPlainObject(s)) {
|
|
36
|
-
// entry is normalized
|
|
37
|
-
if (s["path"] != null && s["isAsc"] != null && s["emptyFirst"] != null) {
|
|
38
|
-
return s;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return Object.entries(s).map(([k, v]) => {
|
|
42
|
-
if (v == null) {
|
|
43
|
-
return { path: k, remove: true };
|
|
44
|
-
}
|
|
45
|
-
else if (typeof v === "string") {
|
|
46
|
-
const isAsc = v.toLowerCase() === "asc";
|
|
47
|
-
return { path: k, isAsc, emptyFirst: isAsc ? false : true };
|
|
48
|
-
}
|
|
49
|
-
else if (isPlainObject(v)) {
|
|
50
|
-
return {
|
|
51
|
-
path: k,
|
|
52
|
-
isAsc: (v.dir || "asc").toLowerCase() === "asc",
|
|
53
|
-
emptyFirst: v.emptyFirst == null ? true : !!v.emptyFirst
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
throw new Error(`Invalid sorter: ${v}`);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
function _sorterCompile(sorters) {
|
|
63
|
-
if (sorters.length === 0) {
|
|
64
|
-
return (_a, _b) => 0;
|
|
65
|
-
}
|
|
66
|
-
const norm = sorterNormalize(sorters).map(createComparator);
|
|
67
|
-
if (norm.length === 1) {
|
|
68
|
-
return norm[0];
|
|
69
|
-
}
|
|
70
|
-
const initial = norm.pop();
|
|
71
|
-
return norm.reduceRight((next, curr) => (a, b) => {
|
|
72
|
-
const r = curr(a, b);
|
|
73
|
-
return r === 0 ? next(a, b) : r;
|
|
74
|
-
}, initial);
|
|
75
|
-
}
|
|
76
|
-
function createComparator({ path, isAsc, emptyFirst }) {
|
|
77
|
-
const getter = pathGetterCompile(path);
|
|
78
|
-
if (isAsc) {
|
|
79
|
-
return (a, b) => compare(getter(a), getter(b), emptyFirst);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
export function compare(a, b, emptyFirst) {
|
|
86
|
-
// console.log("COMPARE", a, b)
|
|
87
|
-
if (a == null && b != null) {
|
|
88
|
-
return emptyFirst === true ? -1 : 1;
|
|
89
|
-
}
|
|
90
|
-
else if (a != null && b == null) {
|
|
91
|
-
return emptyFirst === true ? 1 : -1;
|
|
92
|
-
}
|
|
93
|
-
else if (a == null && b == null) {
|
|
94
|
-
return 0;
|
|
95
|
-
}
|
|
96
|
-
else if (isEqual(a, b)) {
|
|
97
|
-
return 0;
|
|
98
|
-
}
|
|
99
|
-
else if (typeof a === "number" && typeof b === "number") {
|
|
100
|
-
return a - b;
|
|
101
|
-
}
|
|
102
|
-
else if (typeof a === "string" && typeof b === "string") {
|
|
103
|
-
const al = a.length;
|
|
104
|
-
const bl = b.length;
|
|
105
|
-
// if both lengths is 0 the code execution not reach that point, because a === b
|
|
106
|
-
if (emptyFirst === true) {
|
|
107
|
-
if (al === 0) {
|
|
108
|
-
return -1;
|
|
109
|
-
}
|
|
110
|
-
else if (bl === 0) {
|
|
111
|
-
return 1;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
if (al === 0) {
|
|
116
|
-
return 1;
|
|
117
|
-
}
|
|
118
|
-
else if (bl === 0) {
|
|
119
|
-
return -1;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return a.localeCompare(b);
|
|
123
|
-
}
|
|
124
|
-
else if (Array.isArray(a) && Array.isArray(b)) {
|
|
125
|
-
const al = a.length;
|
|
126
|
-
const bl = b.length;
|
|
127
|
-
const l = Math.min(al, bl);
|
|
128
|
-
for (let i = 0; i < l; i++) {
|
|
129
|
-
const res = compare(a[i], b[i], emptyFirst);
|
|
130
|
-
if (res !== 0) {
|
|
131
|
-
return res;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
if (al === bl) {
|
|
135
|
-
return 0;
|
|
136
|
-
}
|
|
137
|
-
if (emptyFirst === true) {
|
|
138
|
-
if (al === 0) {
|
|
139
|
-
return -1;
|
|
140
|
-
}
|
|
141
|
-
else if (bl === 0) {
|
|
142
|
-
return 1;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
if (al === 0) {
|
|
147
|
-
return 1;
|
|
148
|
-
}
|
|
149
|
-
else if (bl === 0) {
|
|
150
|
-
return -1;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return al - bl;
|
|
154
|
-
}
|
|
155
|
-
else if (isPlainObject(a) && isPlainObject(b)) {
|
|
156
|
-
return JSON.stringify(a).localeCompare(JSON.stringify(b));
|
|
157
|
-
}
|
|
158
|
-
return a > b ? -1 : 1;
|
|
159
|
-
}
|
|
160
|
-
export function sorterMerge(...sorters) {
|
|
161
|
-
let result;
|
|
162
|
-
for (const sorter of sorters) {
|
|
163
|
-
if (sorter == null) {
|
|
164
|
-
continue;
|
|
165
|
-
}
|
|
166
|
-
if (result == null) {
|
|
167
|
-
result = deepClone(sorter);
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
for (const sentry of sorter) {
|
|
171
|
-
const existingIndex = result.findIndex(value => value.path === sentry.path);
|
|
172
|
-
if (existingIndex > -1) {
|
|
173
|
-
if (sentry.remove) {
|
|
174
|
-
result.splice(existingIndex, 1);
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
result[existingIndex] = deepClone(sentry);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
else if (!sentry.remove) {
|
|
181
|
-
result.push(deepClone(sentry));
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
if (result?.length === 0) {
|
|
186
|
-
return undefined;
|
|
187
|
-
}
|
|
188
|
-
return result;
|
|
189
|
-
}
|
|
190
|
-
export class SorterProperty extends QueryProperty {
|
|
191
|
-
norm(a) {
|
|
192
|
-
return sorterNormalize(a);
|
|
193
|
-
}
|
|
194
|
-
merge(a, b) {
|
|
195
|
-
return sorterMerge(a, b);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
export class SorterPropertySet extends QueryPropertySet {
|
|
199
|
-
of(name) {
|
|
200
|
-
return this.pipe(map(sorters => (sorters == null ? undefined : sorters.find(value => value.path === name))));
|
|
201
|
-
}
|
|
202
|
-
isAsc(name) {
|
|
203
|
-
return this.of(name).pipe(map(v => (v != null ? v.isAsc : undefined)));
|
|
204
|
-
}
|
|
205
|
-
isDesc(name) {
|
|
206
|
-
return this.of(name).pipe(map(v => (v != null ? !v.isAsc : undefined)));
|
|
207
|
-
}
|
|
208
|
-
newProperty() {
|
|
209
|
-
return new SorterProperty(undefined);
|
|
210
|
-
}
|
|
211
|
-
merge(...args) {
|
|
212
|
-
return sorterMerge(...args);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBb0JsRTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFrQixPQUFrQjtJQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDNUIsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQixzQkFBc0I7WUFDdEIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNyRSxPQUFPLENBQUMsQ0FBQTtZQUNaLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFBO1lBQ3BDLENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtnQkFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDL0QsQ0FBQztpQkFBTSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPO29CQUNILElBQUksRUFBRSxDQUFDO29CQUNQLEtBQUssRUFBRSxDQUFFLENBQWtCLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUs7b0JBQ2pFLFVBQVUsRUFBRyxDQUFrQixDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQWtCLENBQUMsVUFBVTtpQkFDL0YsQ0FBQTtZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzNDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUNMLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQWtCLE9BQWtCO0lBQ3ZELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDOUQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFHLENBQUE7SUFDM0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUNuQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkMsQ0FBQyxFQUNELE9BQU8sQ0FDVixDQUFBO0FBQ0wsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBbUI7SUFDbEUsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNSLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUM5RCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLFVBQW1CO0lBQ3ZELCtCQUErQjtJQUMvQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QyxDQUFDO1NBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxPQUFPLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkMsQ0FBQztTQUFNLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLENBQUE7SUFDWixDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLENBQUE7SUFDWixDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN4RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ25CLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDbkIsZ0ZBQWdGO1FBQ2hGLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFDYixDQUFDO2lCQUFNLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQTtZQUNaLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxDQUFBO1lBQ1osQ0FBQztpQkFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUNiLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDbkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUUxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDM0MsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxHQUFHLENBQUE7WUFDZCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLENBQUE7UUFDWixDQUFDO1FBRUQsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUNiLENBQUM7aUJBQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFBO1lBQ1osQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLENBQUE7WUFDWixDQUFDO2lCQUFNLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ2IsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFDbEIsQ0FBQztTQUFNLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBRyxPQUFnRDtJQUMzRSxJQUFJLE1BQW9DLENBQUE7SUFFeEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixTQUFRO1FBQ1osQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDMUIsU0FBUTtRQUNaLENBQUM7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMzRSxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBQ25DLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUM3QyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQ2xDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksTUFBTSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQztBQUVELE1BQU0sT0FBTyxjQUFnQyxTQUFRLGFBQTBDO0lBQ3hFLElBQUksQ0FBQyxDQUFZO1FBQ2hDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFDa0IsS0FBSyxDQUFDLENBQW9CLEVBQUUsQ0FBb0I7UUFDL0QsT0FBTyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzVCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxnQkFBa0M7SUFDckUsRUFBRSxDQUFDLElBQVk7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFa0IsV0FBVztRQUMxQixPQUFPLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFDa0IsS0FBSyxDQUFDLEdBQUcsSUFBVztRQUNuQyxPQUFPLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQy9CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgZmxhdHRlbkRlZXAsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCJcblxuaW1wb3J0IHsgZGVlcENsb25lLCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgcGF0aEdldHRlckNvbXBpbGUgfSBmcm9tIFwiLi9wYXRoXCJcbmltcG9ydCB7IFF1ZXJ5UHJvcGVydHksIFF1ZXJ5UHJvcGVydHlTZXQgfSBmcm9tIFwiLi9xdWVyeS1wcm9wZXJ0eVwiXG5cbmV4cG9ydCB0eXBlIFNvcnRlckZuPFQgPSBhbnk+ID0gKGE6IFQsIGI6IFQpID0+IG51bWJlclxuXG5leHBvcnQgY29uc3QgZW51bSBTb3J0RGlyZWN0aW9uIHtcbiAgICBBc2MgPSBcImFzY1wiLFxuICAgIERlc2MgPSBcImRlc2NcIlxufVxuXG5leHBvcnQgdHlwZSBTb3J0RGlyID0gU29ydERpcmVjdGlvbi5Bc2MgfCBTb3J0RGlyZWN0aW9uLkRlc2MgfCBcImFzY1wiIHwgXCJkZXNjXCJcbmV4cG9ydCB0eXBlIFNvcnREaXJFeHRyYSA9IHsgZGlyOiBTb3J0RGlyOyBlbXB0eUZpcnN0OiBib29sZWFuIH1cblxudHlwZSBfU29ydGVyPEY+ID0geyBbSyBpbiBrZXlvZiBGXTogeyBba2V5IGluIEtdOiBTb3J0RGlyIHwgU29ydERpckV4dHJhIH0gfVtrZXlvZiBGXVxuLy8gVE9ETzogZml4IHJlY3Vyc2lvblxuLy8gZXhwb3J0IHR5cGUgU29ydGVyPFQgZXh0ZW5kcyBNb2RlbD4gPSBBcnJheTxfU29ydGVyPEZsYXR0ZW48VD4+PlxuZXhwb3J0IHR5cGUgU29ydGVyPFQgZXh0ZW5kcyBNb2RlbD4gPSBBcnJheTx7IFtrZXk6IHN0cmluZ106IFNvcnREaXIgfCBTb3J0RGlyRXh0cmEgfCBOb3JtYWxpemVkRW50cnkgfCB1bmRlZmluZWQgfT5cblxudHlwZSBOb3JtYWxpemVkRW50cnkgPSB7IHBhdGg6IHN0cmluZzsgaXNBc2M6IGJvb2xlYW47IGVtcHR5Rmlyc3Q6IGJvb2xlYW47IHJlbW92ZT86IGJvb2xlYW4gfVxuZXhwb3J0IHR5cGUgU29ydGVyTm9ybWFsaXplZCA9IEFycmF5PE5vcm1hbGl6ZWRFbnRyeT5cblxuLyoqXG4gKiBAZXhhbXBsZVxuICpgYGB0c1xuICogaXRlbXMudG9Tb3J0ZWQoc29ydEJ5KFt7XCJhdXRob3IubmFtZVwiOiBcImFzY1wifV0pKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0Qnk8VCBleHRlbmRzIE1vZGVsPihzb3J0ZXJzOiBTb3J0ZXI8VD4pOiBTb3J0ZXJGbjxUPiB7XG4gICAgaWYgKHNvcnRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IHNvcnRlclwiKVxuICAgIH1cbiAgICByZXR1cm4gX3NvcnRlckNvbXBpbGU8VD4oc29ydGVycykgYXMgYW55XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHNvcnRlciBkZWZpbml0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBub3JtYWxpemVTb3J0ZXIoW3tpZDogXCJhc2NcIn1dKSAtPiBbe3BhdGg6IFwiaWRcIiwgaXNBc2M6IHRydWUsIGVtcHR5Rmlyc3Q6IHRydWV9XVxuICogbm9ybWFsaXplU29ydGVyKFt7aWQ6IHtkaXI6IFwiZGVzY1wiLCBlbXB0eUZpcnN0OiBmYWxzZX19XSkgLT4gW3twYXRoOiBcImlkXCIsIGlzQXNjOiBmYWxzZSwgZW1wdHlGaXJzdDogZmFsc2V9XVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0ZXJOb3JtYWxpemU8VCBleHRlbmRzIE1vZGVsPihzb3J0ZXJzOiBTb3J0ZXI8VD4pOiBTb3J0ZXJOb3JtYWxpemVkIHtcbiAgICByZXR1cm4gX3NvcnRlck5vcm1hbGl6ZShzb3J0ZXJzKVxufVxuXG5mdW5jdGlvbiBfc29ydGVyTm9ybWFsaXplPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyTm9ybWFsaXplZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNvcnRlcnMpKSB7XG4gICAgICAgIHNvcnRlcnMgPSBbc29ydGVyc11cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbkRlZXAoXG4gICAgICAgIChzb3J0ZXJzIGFzIGFueSkubWFwKChzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHMpKSB7XG4gICAgICAgICAgICAgICAgLy8gZW50cnkgaXMgbm9ybWFsaXplZFxuICAgICAgICAgICAgICAgIGlmIChzW1wicGF0aFwiXSAhPSBudWxsICYmIHNbXCJpc0FzY1wiXSAhPSBudWxsICYmIHNbXCJlbXB0eUZpcnN0XCJdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzKS5tYXAoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGF0aDogaywgcmVtb3ZlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXNjID0gdi50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IGssIGlzQXNjLCBlbXB0eUZpcnN0OiBpc0FzYyA/IGZhbHNlIDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBrLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBc2M6ICgodiBhcyBTb3J0RGlyRXh0cmEpLmRpciB8fCBcImFzY1wiKS50b0xvd2VyQ2FzZSgpID09PSBcImFzY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlGaXJzdDogKHYgYXMgU29ydERpckV4dHJhKS5lbXB0eUZpcnN0ID09IG51bGwgPyB0cnVlIDogISEodiBhcyBTb3J0RGlyRXh0cmEpLmVtcHR5Rmlyc3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzb3J0ZXI6ICR7dn1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgKVxufVxuXG5mdW5jdGlvbiBfc29ydGVyQ29tcGlsZTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlckZuPFQ+IHtcbiAgICBpZiAoc29ydGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIChfYSwgX2IpID0+IDBcbiAgICB9XG5cbiAgICBjb25zdCBub3JtID0gc29ydGVyTm9ybWFsaXplPFQ+KHNvcnRlcnMpLm1hcChjcmVhdGVDb21wYXJhdG9yKVxuICAgIGlmIChub3JtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbm9ybVswXVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWwgPSBub3JtLnBvcCgpIVxuICAgIHJldHVybiBub3JtLnJlZHVjZVJpZ2h0PFNvcnRlckZuPFQ+PihcbiAgICAgICAgKG5leHQsIGN1cnIpID0+IChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByID0gY3VycihhLCBiKVxuICAgICAgICAgICAgcmV0dXJuIHIgPT09IDAgPyBuZXh0KGEsIGIpIDogclxuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsXG4gICAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wYXJhdG9yKHsgcGF0aCwgaXNBc2MsIGVtcHR5Rmlyc3QgfTogTm9ybWFsaXplZEVudHJ5KTogU29ydGVyRm4ge1xuICAgIGNvbnN0IGdldHRlciA9IHBhdGhHZXR0ZXJDb21waWxlKHBhdGgpXG4gICAgaWYgKGlzQXNjKSB7XG4gICAgICAgIHJldHVybiAoYSwgYikgPT4gY29tcGFyZShnZXR0ZXIoYSksIGdldHRlcihiKSwgZW1wdHlGaXJzdClcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGEsIGIpID0+IGNvbXBhcmUoZ2V0dGVyKGEpLCBnZXR0ZXIoYiksICFlbXB0eUZpcnN0KSAqIC0xXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShhOiBhbnksIGI6IGFueSwgZW1wdHlGaXJzdDogYm9vbGVhbik6IG51bWJlciB7XG4gICAgLy8gY29uc29sZS5sb2coXCJDT01QQVJFXCIsIGEsIGIpXG4gICAgaWYgKGEgPT0gbnVsbCAmJiBiICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5Rmlyc3QgPT09IHRydWUgPyAtMSA6IDFcbiAgICB9IGVsc2UgaWYgKGEgIT0gbnVsbCAmJiBiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5Rmlyc3QgPT09IHRydWUgPyAxIDogLTFcbiAgICB9IGVsc2UgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICB9IGVsc2UgaWYgKGlzRXF1YWwoYSwgYikpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBiID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBhIC0gYlxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgYWwgPSBhLmxlbmd0aFxuICAgICAgICBjb25zdCBibCA9IGIubGVuZ3RoXG4gICAgICAgIC8vIGlmIGJvdGggbGVuZ3RocyBpcyAwIHRoZSBjb2RlIGV4ZWN1dGlvbiBub3QgcmVhY2ggdGhhdCBwb2ludCwgYmVjYXVzZSBhID09PSBiXG4gICAgICAgIGlmIChlbXB0eUZpcnN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgY29uc3QgYWwgPSBhLmxlbmd0aFxuICAgICAgICBjb25zdCBibCA9IGIubGVuZ3RoXG4gICAgICAgIGNvbnN0IGwgPSBNYXRoLm1pbihhbCwgYmwpXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGNvbXBhcmUoYVtpXSwgYltpXSwgZW1wdHlGaXJzdClcbiAgICAgICAgICAgIGlmIChyZXMgIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWwgPT09IGJsKSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVtcHR5Rmlyc3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsIC0gYmxcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkubG9jYWxlQ29tcGFyZShKU09OLnN0cmluZ2lmeShiKSlcbiAgICB9XG5cbiAgICByZXR1cm4gYSA+IGIgPyAtMSA6IDFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRlck1lcmdlKC4uLnNvcnRlcnM6IChTb3J0ZXJOb3JtYWxpemVkIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IFNvcnRlck5vcm1hbGl6ZWQgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IFNvcnRlck5vcm1hbGl6ZWQgfCB1bmRlZmluZWRcblxuICAgIGZvciAoY29uc3Qgc29ydGVyIG9mIHNvcnRlcnMpIHtcbiAgICAgICAgaWYgKHNvcnRlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBkZWVwQ2xvbmUoc29ydGVyKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc2VudHJ5IG9mIHNvcnRlcikge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHJlc3VsdC5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUucGF0aCA9PT0gc2VudHJ5LnBhdGgpXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbnRyeS5yZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNwbGljZShleGlzdGluZ0luZGV4LCAxKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtleGlzdGluZ0luZGV4XSA9IGRlZXBDbG9uZShzZW50cnkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghc2VudHJ5LnJlbW92ZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRlZXBDbG9uZShzZW50cnkpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjbGFzcyBTb3J0ZXJQcm9wZXJ0eTxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUXVlcnlQcm9wZXJ0eTxTb3J0ZXI8VD4sIFNvcnRlck5vcm1hbGl6ZWQ+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbm9ybShhOiBTb3J0ZXI8VD4pOiBTb3J0ZXJOb3JtYWxpemVkIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHNvcnRlck5vcm1hbGl6ZShhKVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbWVyZ2UoYT86IFNvcnRlck5vcm1hbGl6ZWQsIGI/OiBTb3J0ZXJOb3JtYWxpemVkKTogU29ydGVyTm9ybWFsaXplZCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBzb3J0ZXJNZXJnZShhLCBiKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNvcnRlclByb3BlcnR5U2V0IGV4dGVuZHMgUXVlcnlQcm9wZXJ0eVNldDxTb3J0ZXJOb3JtYWxpemVkPiB7XG4gICAgb2YobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxOb3JtYWxpemVkRW50cnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlwZShtYXAoc29ydGVycyA9PiAoc29ydGVycyA9PSBudWxsID8gdW5kZWZpbmVkIDogc29ydGVycy5maW5kKHZhbHVlID0+IHZhbHVlLnBhdGggPT09IG5hbWUpKSkpXG4gICAgfVxuXG4gICAgaXNBc2MobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mKG5hbWUpLnBpcGUobWFwKHYgPT4gKHYgIT0gbnVsbCA/IHYuaXNBc2MgOiB1bmRlZmluZWQpKSlcbiAgICB9XG5cbiAgICBpc0Rlc2MobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mKG5hbWUpLnBpcGUobWFwKHYgPT4gKHYgIT0gbnVsbCA/ICF2LmlzQXNjIDogdW5kZWZpbmVkKSkpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5ld1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IFNvcnRlclByb3BlcnR5KHVuZGVmaW5lZClcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG1lcmdlKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiBzb3J0ZXJNZXJnZSguLi5hcmdzKVxuICAgIH1cbn1cbiJdfQ==
|
package/esm2022/source/index.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { DataSource } from "./source";
|
|
2
|
-
export { DataSourceProxy, DataSourceProxyBusy, DataSourceProxyFilter, DataSourceProxyGrouper, DataSourceProxySlimer, DataSourceProxySorter } from "./proxy.directive";
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9zb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNyQyxPQUFPLEVBQ0gsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFFeEIsTUFBTSxtQkFBbUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VcIlxuZXhwb3J0IHtcbiAgICBEYXRhU291cmNlUHJveHksXG4gICAgRGF0YVNvdXJjZVByb3h5QnVzeSxcbiAgICBEYXRhU291cmNlUHJveHlGaWx0ZXIsXG4gICAgRGF0YVNvdXJjZVByb3h5R3JvdXBlcixcbiAgICBEYXRhU291cmNlUHJveHlTbGltZXIsXG4gICAgRGF0YVNvdXJjZVByb3h5U29ydGVyLFxuICAgIERhdGFTb3VyY2VQcm94eUlucHV0XG59IGZyb20gXCIuL3Byb3h5LmRpcmVjdGl2ZVwiXG4iXX0=
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { DataSource as CdkDataSource } from "@angular/cdk/collections";
|
|
2
|
-
import { Directive, inject, input, Input } from "@angular/core";
|
|
3
|
-
import { takeUntilDestroyed, toObservable } from "@angular/core/rxjs-interop";
|
|
4
|
-
import { combineLatest, finalize, map, of, ReplaySubject, shareReplay, Subject, switchMap, takeUntil, throwError } from "rxjs";
|
|
5
|
-
import { BusyDirective } from "@ngutil/aria";
|
|
6
|
-
import { DataProvider } from "../provider/provider";
|
|
7
|
-
import { DataSource } from "./source";
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
/**
|
|
10
|
-
* @example
|
|
11
|
-
* ```html
|
|
12
|
-
* <table [nuDataSource]="..." [filter]="{isActive: true}" [sorter]="[{name: 'asc'}]"></table>
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* ```ts
|
|
16
|
-
* @Component({
|
|
17
|
-
* template: `<table [nuDataSource]="users$"></table>`
|
|
18
|
-
* })
|
|
19
|
-
* class UserTable {
|
|
20
|
-
* readonly userService = inject(UserService)
|
|
21
|
-
* readonly users$ = UserService.all()
|
|
22
|
-
* }
|
|
23
|
-
* ```
|
|
24
|
-
*
|
|
25
|
-
* ```ts
|
|
26
|
-
* @Component({
|
|
27
|
-
* selector: "table.my-table",
|
|
28
|
-
* template: `
|
|
29
|
-
* <cdk-virtual-scroll-viewport itemSize="50" class="example-viewport">
|
|
30
|
-
* <div *cdkVirtualFor="let item of dataSource" class="example-item">{{item}}</div>
|
|
31
|
-
* </cdk-virtual-scroll-viewport>
|
|
32
|
-
* `
|
|
33
|
-
* })
|
|
34
|
-
* class TableComponent {
|
|
35
|
-
* readonly dataSource = inject(DataSourceProxy)
|
|
36
|
-
* }
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export class DataSourceProxy extends CdkDataSource {
|
|
40
|
-
constructor() {
|
|
41
|
-
super(...arguments);
|
|
42
|
-
this.#value = new ReplaySubject(1);
|
|
43
|
-
this.value$ = this.#value.pipe(takeUntilDestroyed());
|
|
44
|
-
this.query$ = this.value$.pipe(map(value => value.query$), shareReplay(1));
|
|
45
|
-
this.items$ = this.value$.pipe(switchMap(value => value.items$), shareReplay(1));
|
|
46
|
-
this.isBusy$ = this.value$.pipe(switchMap(value => value.isBusy$), shareReplay(1));
|
|
47
|
-
this.isEmpty$ = this.value$.pipe(switchMap(value => value.isEmpty$), shareReplay(1));
|
|
48
|
-
this.#cvSubs = new Map();
|
|
49
|
-
}
|
|
50
|
-
set value(value) {
|
|
51
|
-
this.#valueSub?.unsubscribe();
|
|
52
|
-
this.#valueSub = coerceDataSource(value).subscribe(this.#value);
|
|
53
|
-
}
|
|
54
|
-
#valueSub;
|
|
55
|
-
#value;
|
|
56
|
-
#cvSubs;
|
|
57
|
-
connect(collectionViewer) {
|
|
58
|
-
const until = new Subject();
|
|
59
|
-
this.#cvSubs.get(collectionViewer)?.next();
|
|
60
|
-
this.#cvSubs.set(collectionViewer, until);
|
|
61
|
-
return this.value$.pipe(switchMap(value => value.connect(collectionViewer)), takeUntil(until), finalize(() => this.#cvSubs.delete(collectionViewer)));
|
|
62
|
-
}
|
|
63
|
-
disconnect(collectionViewer) {
|
|
64
|
-
this.#cvSubs.get(collectionViewer)?.next();
|
|
65
|
-
this.#cvSubs.delete(collectionViewer);
|
|
66
|
-
}
|
|
67
|
-
ngOnDestroy() {
|
|
68
|
-
this.#valueSub?.unsubscribe();
|
|
69
|
-
this.#valueSub = undefined;
|
|
70
|
-
}
|
|
71
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxy, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
72
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: DataSourceProxy, isStandalone: true, selector: "[nuDataSource]", inputs: { value: ["nuDataSource", "value"] }, exportAs: ["nuDataSource"], usesInheritance: true, ngImport: i0 }); }
|
|
73
|
-
}
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxy, decorators: [{
|
|
75
|
-
type: Directive,
|
|
76
|
-
args: [{
|
|
77
|
-
standalone: true,
|
|
78
|
-
selector: "[nuDataSource]",
|
|
79
|
-
exportAs: "nuDataSource"
|
|
80
|
-
}]
|
|
81
|
-
}], propDecorators: { value: [{
|
|
82
|
-
type: Input,
|
|
83
|
-
args: [{ required: true, alias: "nuDataSource" }]
|
|
84
|
-
}] } });
|
|
85
|
-
export class DataSourceProxyFilter {
|
|
86
|
-
#proxy;
|
|
87
|
-
constructor() {
|
|
88
|
-
this.#proxy = inject(DataSourceProxy);
|
|
89
|
-
this.filter = input.required();
|
|
90
|
-
this.filter$ = toObservable(this.filter);
|
|
91
|
-
combineLatest({ query: this.#proxy.query$, filter: this.filter$ })
|
|
92
|
-
.pipe(takeUntilDestroyed())
|
|
93
|
-
.subscribe(({ query, filter }) => query.filter.forced.set(filter));
|
|
94
|
-
}
|
|
95
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyFilter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
96
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxyFilter, isStandalone: true, selector: "[nuDataSource][filter]", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
97
|
-
}
|
|
98
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyFilter, decorators: [{
|
|
99
|
-
type: Directive,
|
|
100
|
-
args: [{
|
|
101
|
-
standalone: true,
|
|
102
|
-
selector: "[nuDataSource][filter]"
|
|
103
|
-
}]
|
|
104
|
-
}], ctorParameters: () => [] });
|
|
105
|
-
export class DataSourceProxySorter {
|
|
106
|
-
#proxy;
|
|
107
|
-
constructor() {
|
|
108
|
-
this.#proxy = inject(DataSourceProxy);
|
|
109
|
-
this.sorter = input.required();
|
|
110
|
-
this.sorter$ = toObservable(this.sorter);
|
|
111
|
-
combineLatest({ query: this.#proxy.query$, sorter: this.sorter$ })
|
|
112
|
-
.pipe(takeUntilDestroyed())
|
|
113
|
-
.subscribe(({ query, sorter }) => query.sorter.forced.set(sorter));
|
|
114
|
-
}
|
|
115
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySorter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
116
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxySorter, isStandalone: true, selector: "[nuDataSource][sorter]", inputs: { sorter: { classPropertyName: "sorter", publicName: "sorter", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
117
|
-
}
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySorter, decorators: [{
|
|
119
|
-
type: Directive,
|
|
120
|
-
args: [{
|
|
121
|
-
standalone: true,
|
|
122
|
-
selector: "[nuDataSource][sorter]"
|
|
123
|
-
}]
|
|
124
|
-
}], ctorParameters: () => [] });
|
|
125
|
-
export class DataSourceProxySlimer {
|
|
126
|
-
#proxy;
|
|
127
|
-
constructor() {
|
|
128
|
-
this.#proxy = inject(DataSourceProxy);
|
|
129
|
-
this.slimer = input.required();
|
|
130
|
-
this.slimer$ = toObservable(this.slimer);
|
|
131
|
-
combineLatest({ query: this.#proxy.query$, slimer: this.slimer$ })
|
|
132
|
-
.pipe(takeUntilDestroyed())
|
|
133
|
-
.subscribe(({ query, slimer }) => query.slimer.forced.set(slimer));
|
|
134
|
-
}
|
|
135
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySlimer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
136
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxySlimer, isStandalone: true, selector: "[nuDataSource][slimer]", inputs: { slimer: { classPropertyName: "slimer", publicName: "slimer", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
137
|
-
}
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxySlimer, decorators: [{
|
|
139
|
-
type: Directive,
|
|
140
|
-
args: [{
|
|
141
|
-
standalone: true,
|
|
142
|
-
selector: "[nuDataSource][slimer]"
|
|
143
|
-
}]
|
|
144
|
-
}], ctorParameters: () => [] });
|
|
145
|
-
export class DataSourceProxyGrouper {
|
|
146
|
-
#proxy;
|
|
147
|
-
constructor() {
|
|
148
|
-
this.#proxy = inject(DataSourceProxy);
|
|
149
|
-
this.grouper = input.required();
|
|
150
|
-
this.grouper$ = toObservable(this.grouper);
|
|
151
|
-
combineLatest({ query: this.#proxy.query$, grouper: this.grouper$ })
|
|
152
|
-
.pipe(takeUntilDestroyed())
|
|
153
|
-
.subscribe(({ query, grouper }) => query.grouper.forced.set(grouper));
|
|
154
|
-
}
|
|
155
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyGrouper, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
156
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DataSourceProxyGrouper, isStandalone: true, selector: "[nuDataSource][grouper]", inputs: { grouper: { classPropertyName: "grouper", publicName: "grouper", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
157
|
-
}
|
|
158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyGrouper, decorators: [{
|
|
159
|
-
type: Directive,
|
|
160
|
-
args: [{
|
|
161
|
-
standalone: true,
|
|
162
|
-
selector: "[nuDataSource][grouper]"
|
|
163
|
-
}]
|
|
164
|
-
}], ctorParameters: () => [] });
|
|
165
|
-
export class DataSourceProxyBusy {
|
|
166
|
-
#proxy = inject(DataSourceProxy);
|
|
167
|
-
#busy = inject(BusyDirective);
|
|
168
|
-
constructor() {
|
|
169
|
-
this.#proxy.value$
|
|
170
|
-
.pipe(takeUntilDestroyed(), switchMap(value => value.isBusy$))
|
|
171
|
-
.subscribe(isBusy => this.#busy.set(isBusy, "data-source"));
|
|
172
|
-
}
|
|
173
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyBusy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
174
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: DataSourceProxyBusy, isStandalone: true, selector: "[nuDataSource][nuBusy]", ngImport: i0 }); }
|
|
175
|
-
}
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DataSourceProxyBusy, decorators: [{
|
|
177
|
-
type: Directive,
|
|
178
|
-
args: [{
|
|
179
|
-
standalone: true,
|
|
180
|
-
selector: "[nuDataSource][nuBusy]"
|
|
181
|
-
}]
|
|
182
|
-
}], ctorParameters: () => [] });
|
|
183
|
-
function coerceDataSource(value) {
|
|
184
|
-
if (value instanceof DataSourceProxy) {
|
|
185
|
-
return value.value$;
|
|
186
|
-
}
|
|
187
|
-
else if (value instanceof DataSource) {
|
|
188
|
-
return of(value);
|
|
189
|
-
}
|
|
190
|
-
else if (value instanceof DataProvider) {
|
|
191
|
-
return of(value.toDataSource());
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
return throwError(() => new Error("Invalid DataSource value"));
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3h5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU3RSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUk1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7QUFJckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBTUgsTUFBTSxPQUFPLGVBQ1QsU0FBUSxhQUE0QjtJQU54Qzs7UUFnQmEsV0FBTSxHQUFHLElBQUksYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQTtRQUM1QyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFBO1FBQy9DLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUMxQixXQUFXLENBQUMsQ0FBQyxD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QUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSBhcyBDZGtEYXRhU291cmNlLCBDb2xsZWN0aW9uVmlld2VyIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiXG5pbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgaW5wdXQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7XG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBmaW5hbGl6ZSxcbiAgICBtYXAsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICBSZXBsYXlTdWJqZWN0LFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaXB0aW9uLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlVW50aWwsXG4gICAgdGhyb3dFcnJvclxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IEJ1c3lEaXJlY3RpdmUgfSBmcm9tIFwiQG5ndXRpbC9hcmlhXCJcbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB7IERhdGFQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci9wcm92aWRlclwiXG5pbXBvcnQgeyBGaWx0ZXIsIEdyb3VwZXIsIFNsaW1lciwgU29ydGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi9zb3VyY2VcIlxuXG5leHBvcnQgdHlwZSBEYXRhU291cmNlUHJveHlJbnB1dDxUIGV4dGVuZHMgTW9kZWw+ID0gRGF0YVNvdXJjZVByb3h5PFQ+IHwgRGF0YVNvdXJjZTxUPiB8IERhdGFQcm92aWRlcjxUPlxuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dGFibGUgW251RGF0YVNvdXJjZV09XCIuLi5cIiBbZmlsdGVyXT1cIntpc0FjdGl2ZTogdHJ1ZX1cIiBbc29ydGVyXT1cIlt7bmFtZTogJ2FzYyd9XVwiPjwvdGFibGU+XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogQENvbXBvbmVudCh7XG4gKiAgIHRlbXBsYXRlOiBgPHRhYmxlIFtudURhdGFTb3VyY2VdPVwidXNlcnMkXCI+PC90YWJsZT5gXG4gKiB9KVxuICogY2xhc3MgVXNlclRhYmxlIHtcbiAqICAgcmVhZG9ubHkgdXNlclNlcnZpY2UgPSBpbmplY3QoVXNlclNlcnZpY2UpXG4gKiAgIHJlYWRvbmx5IHVzZXJzJCA9IFVzZXJTZXJ2aWNlLmFsbCgpXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiBcInRhYmxlLm15LXRhYmxlXCIsXG4gKiAgIHRlbXBsYXRlOiBgXG4gKiAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgaXRlbVNpemU9XCI1MFwiIGNsYXNzPVwiZXhhbXBsZS12aWV3cG9ydFwiPlxuICogICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGRhdGFTb3VyY2VcIiBjbGFzcz1cImV4YW1wbGUtaXRlbVwiPnt7aXRlbX19PC9kaXY+XG4gKiAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICogICBgXG4gKiB9KVxuICogY2xhc3MgVGFibGVDb21wb25lbnQge1xuICogICByZWFkb25seSBkYXRhU291cmNlID0gaW5qZWN0KERhdGFTb3VyY2VQcm94eSlcbiAqIH1cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdXCIsXG4gICAgZXhwb3J0QXM6IFwibnVEYXRhU291cmNlXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5PFQgZXh0ZW5kcyBNb2RlbD5cbiAgICBleHRlbmRzIENka0RhdGFTb3VyY2U8VCB8IHVuZGVmaW5lZD5cbiAgICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQ29ubmVjdFByb3RvY29sXG57XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiBcIm51RGF0YVNvdXJjZVwiIH0pXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBEYXRhU291cmNlUHJveHlJbnB1dDxUPikge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IGNvZXJjZURhdGFTb3VyY2U8VD4odmFsdWUpLnN1YnNjcmliZSh0aGlzLiN2YWx1ZSlcbiAgICB9XG5cbiAgICAjdmFsdWVTdWI/OiBTdWJzY3JpcHRpb25cbiAgICByZWFkb25seSAjdmFsdWUgPSBuZXcgUmVwbGF5U3ViamVjdDxEYXRhU291cmNlPFQ+PigxKVxuICAgIHJlYWRvbmx5IHZhbHVlJCA9IHRoaXMuI3ZhbHVlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgcmVhZG9ubHkgcXVlcnkkID0gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgICAgbWFwKHZhbHVlID0+IHZhbHVlLnF1ZXJ5JCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXRlbXMkID0gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHZhbHVlLml0ZW1zJCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXNCdXN5JCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pc0J1c3kkKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBpc0VtcHR5JCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pc0VtcHR5JCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5jb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXIpKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh1bnRpbCksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLiNjdlN1YnMuZGVsZXRlKGNvbGxlY3Rpb25WaWV3ZXIpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGlzY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuI2N2U3Vicy5nZXQoY29sbGVjdGlvblZpZXdlcik/Lm5leHQoKVxuICAgICAgICB0aGlzLiNjdlN1YnMuZGVsZXRlKGNvbGxlY3Rpb25WaWV3ZXIpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuI3ZhbHVlU3ViPy51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMuI3ZhbHVlU3ViID0gdW5kZWZpbmVkXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdW2ZpbHRlcl1cIlxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlUHJveHlGaWx0ZXI8VCBleHRlbmRzIE1vZGVsLCBGIGV4dGVuZHMgRmlsdGVyPFQ+PiB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxUPj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5IGZpbHRlciA9IGlucHV0LnJlcXVpcmVkPEY+KClcbiAgICByZWFkb25seSBmaWx0ZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuZmlsdGVyKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoeyBxdWVyeTogdGhpcy4jcHJveHkucXVlcnkkLCBmaWx0ZXI6IHRoaXMuZmlsdGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBmaWx0ZXIgfSkgPT4gcXVlcnkuZmlsdGVyLmZvcmNlZC5zZXQoZmlsdGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bc29ydGVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eVNvcnRlcjxUIGV4dGVuZHMgTW9kZWwsIFMgZXh0ZW5kcyBTb3J0ZXI8VD4+IHtcbiAgICByZWFkb25seSAjcHJveHkgPSBpbmplY3Q8RGF0YVNvdXJjZVByb3h5PFQ+PihEYXRhU291cmNlUHJveHkpXG4gICAgcmVhZG9ubHkgc29ydGVyID0gaW5wdXQucmVxdWlyZWQ8Uz4oKVxuICAgIHJlYWRvbmx5IHNvcnRlciQgPSB0b09ic2VydmFibGUodGhpcy5zb3J0ZXIpXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLiNwcm94eS5xdWVyeSQsIHNvcnRlcjogdGhpcy5zb3J0ZXIkIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcXVlcnksIHNvcnRlciB9KSA9PiBxdWVyeS5zb3J0ZXIuZm9yY2VkLnNldChzb3J0ZXIpKVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtzbGltZXJdXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5U2xpbWVyPFQgZXh0ZW5kcyBNb2RlbCwgUyBleHRlbmRzIFNsaW1lcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBzbGltZXIgPSBpbnB1dC5yZXF1aXJlZDxTPigpXG4gICAgcmVhZG9ubHkgc2xpbWVyJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNsaW1lcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgc2xpbWVyOiB0aGlzLnNsaW1lciQgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBxdWVyeSwgc2xpbWVyIH0pID0+IHF1ZXJ5LnNsaW1lci5mb3JjZWQuc2V0KHNsaW1lcikpXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdW2dyb3VwZXJdXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5R3JvdXBlcjxUIGV4dGVuZHMgTW9kZWwsIEcgZXh0ZW5kcyBHcm91cGVyPFQ+PiB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxUPj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5IGdyb3VwZXIgPSBpbnB1dC5yZXF1aXJlZDxHPigpXG4gICAgcmVhZG9ubHkgZ3JvdXBlciQgPSB0b09ic2VydmFibGUodGhpcy5ncm91cGVyKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoeyBxdWVyeTogdGhpcy4jcHJveHkucXVlcnkkLCBncm91cGVyOiB0aGlzLmdyb3VwZXIkIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcXVlcnksIGdyb3VwZXIgfSkgPT4gcXVlcnkuZ3JvdXBlci5mb3JjZWQuc2V0KGdyb3VwZXIpKVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtudUJ1c3ldXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5QnVzeSB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxhbnk+PihEYXRhU291cmNlUHJveHkpXG4gICAgcmVhZG9ubHkgI2J1c3kgPSBpbmplY3QoQnVzeURpcmVjdGl2ZSlcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLiNwcm94eS52YWx1ZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pc0J1c3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShpc0J1c3kgPT4gdGhpcy4jYnVzeS5zZXQoaXNCdXN5LCBcImRhdGEtc291cmNlXCIpKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29lcmNlRGF0YVNvdXJjZTxUIGV4dGVuZHMgTW9kZWw+KHZhbHVlOiBEYXRhU291cmNlUHJveHlJbnB1dDxUPik6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxUPj4ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2VQcm94eSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUkXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlLnRvRGF0YVNvdXJjZSgpKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIkludmFsaWQgRGF0YVNvdXJjZSB2YWx1ZVwiKSlcbiAgICB9XG59XG4iXX0=
|