@ethlete/core 2.2.1 → 2.3.0
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/esm2022/lib/utils/public-api.mjs +3 -1
- package/esm2022/lib/utils/runtime-error.utils.mjs +28 -0
- package/esm2022/lib/utils/selection-model.utils.mjs +292 -0
- package/fesm2022/ethlete-core.mjs +320 -2
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/lib/utils/public-api.d.ts +2 -0
- package/lib/utils/runtime-error.utils.d.ts +6 -0
- package/lib/utils/selection-model.utils.d.ts +72 -0
- package/package.json +1 -1
|
@@ -6,8 +6,10 @@ export * from './destroy.utils';
|
|
|
6
6
|
export * from './equal.util';
|
|
7
7
|
export * from './media-query-observable.util';
|
|
8
8
|
export * from './reactive-binding.util';
|
|
9
|
+
export * from './runtime-error.utils';
|
|
9
10
|
export * from './rxjs.utils';
|
|
10
11
|
export * from './scrollable.utils';
|
|
12
|
+
export * from './selection-model.utils';
|
|
11
13
|
export * from './smart-block-scroll-strategy.utils';
|
|
12
14
|
export * from './viewport.util';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbi51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYW1wLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jbG9uZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY29va2llLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXN0cm95LnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZXF1YWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL21lZGlhLXF1ZXJ5LW9ic2VydmFibGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWN0aXZlLWJpbmRpbmcudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUtZXJyb3IudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9yeGpzLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsYWJsZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGVjdGlvbi1tb2RlbC51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0LWJsb2NrLXNjcm9sbC1zdHJhdGVneS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0LnV0aWwnO1xuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { clone } from './clone.util';
|
|
2
|
+
export class RuntimeError extends Error {
|
|
3
|
+
constructor(code, message, data = '__ET_NO_DATA__') {
|
|
4
|
+
super(formatRuntimeError(code, message));
|
|
5
|
+
this.code = code;
|
|
6
|
+
this.data = data;
|
|
7
|
+
if (data !== '__ET_NO_DATA__') {
|
|
8
|
+
try {
|
|
9
|
+
const _data = clone(data);
|
|
10
|
+
setTimeout(() => {
|
|
11
|
+
console.error(_data);
|
|
12
|
+
}, 1);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
setTimeout(() => {
|
|
16
|
+
console.error(data);
|
|
17
|
+
}, 1);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function formatRuntimeError(code, message) {
|
|
23
|
+
// prefix code with zeros if it's less than 100
|
|
24
|
+
const codeWithZeros = code < 10 ? `00${code}` : code < 100 ? `0${code}` : code;
|
|
25
|
+
const fullCode = `ET${codeWithZeros}`;
|
|
26
|
+
return `${fullCode}${message ? ': ' + message : ''}`;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1lcnJvci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3J1bnRpbWUtZXJyb3IudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLE9BQU8sWUFBK0IsU0FBUSxLQUFLO0lBQ3ZELFlBQW1CLElBQU8sRUFBRSxPQUE4QixFQUFTLE9BQWdCLGdCQUFnQjtRQUNqRyxLQUFLLENBQUMsa0JBQWtCLENBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFEM0IsU0FBSSxHQUFKLElBQUksQ0FBRztRQUF5QyxTQUFJLEdBQUosSUFBSSxDQUE0QjtRQUdqRyxJQUFJLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtZQUM3QixJQUFJO2dCQUNGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFMUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDUDtZQUFDLE1BQU07Z0JBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDUDtTQUNGO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFtQixJQUFPLEVBQUUsT0FBOEI7SUFDMUYsK0NBQStDO0lBQy9DLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUUvRSxNQUFNLFFBQVEsR0FBRyxLQUFLLGFBQWEsRUFBRSxDQUFDO0lBRXRDLE9BQU8sR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmUgfSBmcm9tICcuL2Nsb25lLnV0aWwnO1xuXG5leHBvcnQgY2xhc3MgUnVudGltZUVycm9yPFQgZXh0ZW5kcyBudW1iZXI+IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29kZTogVCwgbWVzc2FnZTogbnVsbCB8IGZhbHNlIHwgc3RyaW5nLCBwdWJsaWMgZGF0YTogdW5rbm93biA9ICdfX0VUX05PX0RBVEFfXycpIHtcbiAgICBzdXBlcihmb3JtYXRSdW50aW1lRXJyb3I8VD4oY29kZSwgbWVzc2FnZSkpO1xuXG4gICAgaWYgKGRhdGEgIT09ICdfX0VUX05PX0RBVEFfXycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IF9kYXRhID0gY2xvbmUoZGF0YSk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihfZGF0YSk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YSk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UnVudGltZUVycm9yPFQgZXh0ZW5kcyBudW1iZXI+KGNvZGU6IFQsIG1lc3NhZ2U6IG51bGwgfCBmYWxzZSB8IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIHByZWZpeCBjb2RlIHdpdGggemVyb3MgaWYgaXQncyBsZXNzIHRoYW4gMTAwXG4gIGNvbnN0IGNvZGVXaXRoWmVyb3MgPSBjb2RlIDwgMTAgPyBgMDAke2NvZGV9YCA6IGNvZGUgPCAxMDAgPyBgMCR7Y29kZX1gIDogY29kZTtcblxuICBjb25zdCBmdWxsQ29kZSA9IGBFVCR7Y29kZVdpdGhaZXJvc31gO1xuXG4gIHJldHVybiBgJHtmdWxsQ29kZX0ke21lc3NhZ2UgPyAnOiAnICsgbWVzc2FnZSA6ICcnfWA7XG59XG4iXX0=
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { BehaviorSubject, combineLatest, map, shareReplay } from 'rxjs';
|
|
2
|
+
const isObject = (value) => {
|
|
3
|
+
return typeof value === 'object' && value !== null;
|
|
4
|
+
};
|
|
5
|
+
const getObjectProperty = (obj, prop) => {
|
|
6
|
+
const hasDotNotation = prop.includes('.');
|
|
7
|
+
if (!hasDotNotation)
|
|
8
|
+
return obj[prop];
|
|
9
|
+
const props = prop.split('.');
|
|
10
|
+
let value = obj;
|
|
11
|
+
for (const prop of props) {
|
|
12
|
+
if (!isObject(value))
|
|
13
|
+
return undefined;
|
|
14
|
+
value = value[prop];
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
};
|
|
18
|
+
export class SelectionModel {
|
|
19
|
+
constructor() {
|
|
20
|
+
this._selection$ = new BehaviorSubject([]);
|
|
21
|
+
this._options$ = new BehaviorSubject([]);
|
|
22
|
+
this._valueBinding$ = new BehaviorSubject(null);
|
|
23
|
+
this._keyBinding$ = new BehaviorSubject(null);
|
|
24
|
+
this._labelBinding$ = new BehaviorSubject(null);
|
|
25
|
+
this._allowMultiple$ = new BehaviorSubject(false);
|
|
26
|
+
this._filter$ = new BehaviorSubject('');
|
|
27
|
+
this.value$ = combineLatest([this.selection$, this.valueBinding$, this.allowMultiple$]).pipe(map(([selection, valueBinding, allowMultiple]) => {
|
|
28
|
+
if (allowMultiple) {
|
|
29
|
+
return selection.map((option) => this.getOptionProperty(option, valueBinding));
|
|
30
|
+
}
|
|
31
|
+
const [option] = selection;
|
|
32
|
+
if (!option)
|
|
33
|
+
return null;
|
|
34
|
+
return this.getOptionProperty(option, valueBinding);
|
|
35
|
+
}));
|
|
36
|
+
this.filteredOptions$ = combineLatest([this.options$, this.filter$, this.labelBinding$]).pipe(map(([options, filter]) => this.getFilteredOptions(filter, options)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
37
|
+
this._optionsAndSelection$ = combineLatest([this._options$, this._selection$]);
|
|
38
|
+
}
|
|
39
|
+
get selection$() {
|
|
40
|
+
return this._selection$.asObservable();
|
|
41
|
+
}
|
|
42
|
+
get selection() {
|
|
43
|
+
return this._selection$.value;
|
|
44
|
+
}
|
|
45
|
+
get options$() {
|
|
46
|
+
return this._options$.asObservable();
|
|
47
|
+
}
|
|
48
|
+
get options() {
|
|
49
|
+
return this._options$.value;
|
|
50
|
+
}
|
|
51
|
+
get valueBinding$() {
|
|
52
|
+
return this._valueBinding$.asObservable();
|
|
53
|
+
}
|
|
54
|
+
get valueBinding() {
|
|
55
|
+
return this._valueBinding$.value;
|
|
56
|
+
}
|
|
57
|
+
get keyBinding$() {
|
|
58
|
+
return combineLatest([this._keyBinding$, this.valueBinding$]).pipe(map(([keyBinding, valueBinding]) => keyBinding || valueBinding));
|
|
59
|
+
}
|
|
60
|
+
get keyBinding() {
|
|
61
|
+
return this._keyBinding$.value || this.valueBinding;
|
|
62
|
+
}
|
|
63
|
+
get labelBinding$() {
|
|
64
|
+
return this._labelBinding$.asObservable();
|
|
65
|
+
}
|
|
66
|
+
get labelBinding() {
|
|
67
|
+
return this._labelBinding$.value;
|
|
68
|
+
}
|
|
69
|
+
get allowMultiple$() {
|
|
70
|
+
return this._allowMultiple$.asObservable();
|
|
71
|
+
}
|
|
72
|
+
get allowMultiple() {
|
|
73
|
+
return this._allowMultiple$.value;
|
|
74
|
+
}
|
|
75
|
+
get filter$() {
|
|
76
|
+
return this._filter$.asObservable();
|
|
77
|
+
}
|
|
78
|
+
get filter() {
|
|
79
|
+
return this._filter$.value;
|
|
80
|
+
}
|
|
81
|
+
setSelection(selection) {
|
|
82
|
+
if (!Array.isArray(selection)) {
|
|
83
|
+
selection = [selection];
|
|
84
|
+
}
|
|
85
|
+
this._selection$.next(selection);
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
setValueBinding(propertyPath) {
|
|
89
|
+
this._valueBinding$.next(propertyPath);
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
setKeyBinding(propertyPath) {
|
|
93
|
+
this._keyBinding$.next(propertyPath);
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
setLabelBinding(propertyPath) {
|
|
97
|
+
this._labelBinding$.next(propertyPath);
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
setOptions(options) {
|
|
101
|
+
this._options$.next(options);
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
setAllowMultiple(allowMultiple) {
|
|
105
|
+
this._allowMultiple$.next(allowMultiple);
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
setFilter(filter) {
|
|
109
|
+
const sanitizedFilter = filter?.trim() || '';
|
|
110
|
+
this._filter$.next(sanitizedFilter);
|
|
111
|
+
}
|
|
112
|
+
reset() {
|
|
113
|
+
this._selection$.next([]);
|
|
114
|
+
this._options$.next([]);
|
|
115
|
+
this._valueBinding$.next(null);
|
|
116
|
+
this._keyBinding$.next(null);
|
|
117
|
+
this._labelBinding$.next(null);
|
|
118
|
+
this._allowMultiple$.next(false);
|
|
119
|
+
}
|
|
120
|
+
getOptionByValue$(value) {
|
|
121
|
+
return this._optionsAndSelection$.pipe(map(() => this.getOptionByValue(value)));
|
|
122
|
+
}
|
|
123
|
+
getOptionByLabel$(label) {
|
|
124
|
+
return this._optionsAndSelection$.pipe(map(() => this.getOptionByLabel(label)));
|
|
125
|
+
}
|
|
126
|
+
getOptionByKey$(key) {
|
|
127
|
+
return this._optionsAndSelection$.pipe(map(() => this.getOptionByKey(key)));
|
|
128
|
+
}
|
|
129
|
+
isSelected$(option) {
|
|
130
|
+
return this._selection$.pipe(map(() => this.isSelected(option)));
|
|
131
|
+
}
|
|
132
|
+
getLabel$(option) {
|
|
133
|
+
return this.labelBinding$.pipe(map((labelBinding) => this.getOptionProperty(option, labelBinding)));
|
|
134
|
+
}
|
|
135
|
+
getValue$(option) {
|
|
136
|
+
return this.valueBinding$.pipe(map((valueBinding) => this.getOptionProperty(option, valueBinding)));
|
|
137
|
+
}
|
|
138
|
+
getKey$(option) {
|
|
139
|
+
return this.keyBinding$.pipe(map((keyBinding) => this.getOptionProperty(option, keyBinding)));
|
|
140
|
+
}
|
|
141
|
+
getOptionByValue(value) {
|
|
142
|
+
return this.getOption(value, this.valueBinding);
|
|
143
|
+
}
|
|
144
|
+
getOptionByLabel(label) {
|
|
145
|
+
return this.getOption(label, this.labelBinding);
|
|
146
|
+
}
|
|
147
|
+
getOptionByKey(key) {
|
|
148
|
+
return this.getOption(key, this.keyBinding);
|
|
149
|
+
}
|
|
150
|
+
getOption(value, propertyPath = null, options = [...this.options, ...this.selection]) {
|
|
151
|
+
if (!propertyPath) {
|
|
152
|
+
return options.find((option) => option === value);
|
|
153
|
+
}
|
|
154
|
+
return options.find((option) => {
|
|
155
|
+
if (!isObject(option))
|
|
156
|
+
return false;
|
|
157
|
+
return getObjectProperty(option, propertyPath) === value;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
getOptionByIndex(index, options = this.getFilteredOptions()) {
|
|
161
|
+
return options[index] || null;
|
|
162
|
+
}
|
|
163
|
+
getOptionByOffset(offset, index, options = this.getFilteredOptions(), config = { clamp: true }) {
|
|
164
|
+
const { loop, clamp } = config;
|
|
165
|
+
const newIndex = index + offset;
|
|
166
|
+
const remainingOffset = newIndex * -1;
|
|
167
|
+
if (newIndex < 0) {
|
|
168
|
+
if (loop) {
|
|
169
|
+
return this.getOptionByOffset(remainingOffset, options.length - 1, options, config);
|
|
170
|
+
}
|
|
171
|
+
if (clamp) {
|
|
172
|
+
return this.getFirstOption();
|
|
173
|
+
}
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
if (newIndex >= options.length) {
|
|
177
|
+
if (loop) {
|
|
178
|
+
return this.getOptionByOffset(remainingOffset, 0, options, config);
|
|
179
|
+
}
|
|
180
|
+
if (clamp) {
|
|
181
|
+
return this.getLastOption();
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
return this.getOptionByIndex(newIndex);
|
|
186
|
+
}
|
|
187
|
+
getFirstOption(options = this.options) {
|
|
188
|
+
return this.getOptionByIndex(0, options);
|
|
189
|
+
}
|
|
190
|
+
getLastOption(options = this.options) {
|
|
191
|
+
return this.getOptionByIndex(options.length - 1, options);
|
|
192
|
+
}
|
|
193
|
+
getOptionIndex(option, options = this.options) {
|
|
194
|
+
const key = this.getKey(option);
|
|
195
|
+
const index = options.findIndex((o) => this.getKey(o) === key);
|
|
196
|
+
return index === -1 ? null : index;
|
|
197
|
+
}
|
|
198
|
+
getNonMultipleSelectedOption() {
|
|
199
|
+
if (this.allowMultiple)
|
|
200
|
+
return null;
|
|
201
|
+
return this.selection[0] || null;
|
|
202
|
+
}
|
|
203
|
+
getNonMultipleSelectedOptionIndex() {
|
|
204
|
+
if (this.allowMultiple)
|
|
205
|
+
return null;
|
|
206
|
+
const opt = this.getNonMultipleSelectedOption();
|
|
207
|
+
if (!opt)
|
|
208
|
+
return null;
|
|
209
|
+
return this.getOptionIndex(opt);
|
|
210
|
+
}
|
|
211
|
+
getNonMultipleOptionByOffsetFromSelected(offset, config = { clamp: true }) {
|
|
212
|
+
if (this.allowMultiple)
|
|
213
|
+
return null;
|
|
214
|
+
const index = this.getNonMultipleSelectedOptionIndex();
|
|
215
|
+
if (index === null)
|
|
216
|
+
return null;
|
|
217
|
+
return this.getOptionByOffset(index, offset, this.getFilteredOptions(), config);
|
|
218
|
+
}
|
|
219
|
+
getLabel(option) {
|
|
220
|
+
return this.getOptionProperty(option, this.labelBinding);
|
|
221
|
+
}
|
|
222
|
+
getValue(option) {
|
|
223
|
+
return this.getOptionProperty(option, this.valueBinding);
|
|
224
|
+
}
|
|
225
|
+
getKey(option) {
|
|
226
|
+
return this.getOptionProperty(option, this.keyBinding);
|
|
227
|
+
}
|
|
228
|
+
getOptionProperty(option, propertyPath) {
|
|
229
|
+
if (!propertyPath || !isObject(option))
|
|
230
|
+
return option;
|
|
231
|
+
return getObjectProperty(option, propertyPath);
|
|
232
|
+
}
|
|
233
|
+
isSelected(option) {
|
|
234
|
+
const optionKey = this.getOptionProperty(option, this.keyBinding);
|
|
235
|
+
return this.getOption(optionKey, this.keyBinding, this.selection) !== undefined;
|
|
236
|
+
}
|
|
237
|
+
getFilteredOptions(filter = this.filter, options = this.options) {
|
|
238
|
+
if (!filter)
|
|
239
|
+
return options;
|
|
240
|
+
const splitFilter = filter.split(' ').filter((f) => f);
|
|
241
|
+
return options.filter((option) => {
|
|
242
|
+
const label = this.getLabel(option);
|
|
243
|
+
if (!label || typeof label !== 'string')
|
|
244
|
+
return false;
|
|
245
|
+
const splitLabel = label.split(' ').filter((l) => l);
|
|
246
|
+
return splitFilter.every((f) => splitLabel.some((l) => l.toLowerCase().includes(f.toLowerCase())));
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
addSelectedOption(option) {
|
|
250
|
+
if (this.allowMultiple) {
|
|
251
|
+
if (this.isSelected(option))
|
|
252
|
+
return;
|
|
253
|
+
this._selection$.next([...this.selection, option]);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
this._selection$.next([option]);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
removeSelectedOption(option) {
|
|
260
|
+
const optionKey = this.getOptionProperty(option, this.keyBinding);
|
|
261
|
+
if (!this.isSelected(option))
|
|
262
|
+
return;
|
|
263
|
+
this._selection$.next(this.selection.filter((selectedOption) => {
|
|
264
|
+
const key = this.getOptionProperty(selectedOption, this.keyBinding);
|
|
265
|
+
return key !== optionKey;
|
|
266
|
+
}));
|
|
267
|
+
}
|
|
268
|
+
clearSelectedOptions() {
|
|
269
|
+
this._selection$.next([]);
|
|
270
|
+
}
|
|
271
|
+
toggleSelectedOption(option) {
|
|
272
|
+
if (this.isSelected(option)) {
|
|
273
|
+
this.removeSelectedOption(option);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
this.addSelectedOption(option);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
toggleAllSelectedOptions() {
|
|
280
|
+
const filteredOptions = this.getFilteredOptions();
|
|
281
|
+
const unselectedOptions = filteredOptions.filter((option) => !this.isSelected(option));
|
|
282
|
+
if (unselectedOptions.length) {
|
|
283
|
+
const selection = unselectedOptions.filter((o) => !this.selection.some((s) => this.getKey(s) === this.getKey(o)));
|
|
284
|
+
this._selection$.next([...this.selection, ...selection]);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
const selection = this.selection.filter((s) => !filteredOptions.some((o) => this.getKey(o) === this.getKey(s)));
|
|
288
|
+
this._selection$.next(selection);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLW1vZGVsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2VsZWN0aW9uLW1vZGVsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFjLEVBQW9DLEVBQUU7SUFDcEUsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBNEIsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN2RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTFDLElBQUksQ0FBQyxjQUFjO1FBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5QixJQUFJLEtBQUssR0FBWSxHQUFHLENBQUM7SUFFekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV2QyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFJRixNQUFNLE9BQU8sY0FBYztJQUEzQjtRQU9tQixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBUTNDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQVF6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QUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcblxuY29uc3QgaXNPYmplY3QgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufTtcblxuY29uc3QgZ2V0T2JqZWN0UHJvcGVydHkgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJvcDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGhhc0RvdE5vdGF0aW9uID0gcHJvcC5pbmNsdWRlcygnLicpO1xuXG4gIGlmICghaGFzRG90Tm90YXRpb24pIHJldHVybiBvYmpbcHJvcF07XG5cbiAgY29uc3QgcHJvcHMgPSBwcm9wLnNwbGl0KCcuJyk7XG5cbiAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqO1xuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgdmFsdWUgPSB2YWx1ZVtwcm9wXTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnR5cGUgU2VsZWN0aW9uTW9kZWxUeXBlcyA9IHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bjtcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbk1vZGVsPFQgZXh0ZW5kcyBTZWxlY3Rpb25Nb2RlbFR5cGVzID0gdW5rbm93bj4ge1xuICBnZXQgc2VsZWN0aW9uJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuXG4gIGdldCBvcHRpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcblxuICBnZXQgdmFsdWVCaW5kaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVCaW5kaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgdmFsdWVCaW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZUJpbmRpbmckLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlQmluZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBrZXlCaW5kaW5nJCgpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fa2V5QmluZGluZyQsIHRoaXMudmFsdWVCaW5kaW5nJF0pLnBpcGUoXG4gICAgICBtYXAoKFtrZXlCaW5kaW5nLCB2YWx1ZUJpbmRpbmddKSA9PiBrZXlCaW5kaW5nIHx8IHZhbHVlQmluZGluZyksXG4gICAgKTtcbiAgfVxuICBnZXQga2V5QmluZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5QmluZGluZyQudmFsdWUgfHwgdGhpcy52YWx1ZUJpbmRpbmc7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfa2V5QmluZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBsYWJlbEJpbmRpbmckKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbEJpbmRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBsYWJlbEJpbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQmluZGluZyQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFiZWxCaW5kaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGFsbG93TXVsdGlwbGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd011bHRpcGxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgYWxsb3dNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dNdWx0aXBsZSQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsb3dNdWx0aXBsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBnZXQgZmlsdGVyJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgZmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXIkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IHZhbHVlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0aW9uJCwgdGhpcy52YWx1ZUJpbmRpbmckLCB0aGlzLmFsbG93TXVsdGlwbGUkXSkucGlwZShcbiAgICBtYXAoKFtzZWxlY3Rpb24sIHZhbHVlQmluZGluZywgYWxsb3dNdWx0aXBsZV0pID0+IHtcbiAgICAgIGlmIChhbGxvd011bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChvcHRpb24pID0+IHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCB2YWx1ZUJpbmRpbmcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW29wdGlvbl0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGlmICghb3B0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCB2YWx1ZUJpbmRpbmcpO1xuICAgIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmZpbHRlciQsIHRoaXMubGFiZWxCaW5kaW5nJF0pLnBpcGUoXG4gICAgbWFwKChbb3B0aW9ucywgZmlsdGVyXSkgPT4gdGhpcy5nZXRGaWx0ZXJlZE9wdGlvbnMoZmlsdGVyLCBvcHRpb25zKSksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zQW5kU2VsZWN0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMkLCB0aGlzLl9zZWxlY3Rpb24kXSk7XG5cbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbjogVCB8IFRbXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3Rpb24pKSB7XG4gICAgICBzZWxlY3Rpb24gPSBbc2VsZWN0aW9uXTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoc2VsZWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0VmFsdWVCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlQmluZGluZyQubmV4dChwcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRLZXlCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX2tleUJpbmRpbmckLm5leHQocHJvcGVydHlQYXRoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0TGFiZWxCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX2xhYmVsQmluZGluZyQubmV4dChwcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IFRbXSkge1xuICAgIHRoaXMuX29wdGlvbnMkLm5leHQob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFsbG93TXVsdGlwbGUoYWxsb3dNdWx0aXBsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2FsbG93TXVsdGlwbGUkLm5leHQoYWxsb3dNdWx0aXBsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IHN0cmluZyB8IG51bGwpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWRGaWx0ZXIgPSBmaWx0ZXI/LnRyaW0oKSB8fCAnJztcblxuICAgIHRoaXMuX2ZpbHRlciQubmV4dChzYW5pdGl6ZWRGaWx0ZXIpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtdKTtcbiAgICB0aGlzLl9vcHRpb25zJC5uZXh0KFtdKTtcbiAgICB0aGlzLl92YWx1ZUJpbmRpbmckLm5leHQobnVsbCk7XG4gICAgdGhpcy5fa2V5QmluZGluZyQubmV4dChudWxsKTtcbiAgICB0aGlzLl9sYWJlbEJpbmRpbmckLm5leHQobnVsbCk7XG4gICAgdGhpcy5fYWxsb3dNdWx0aXBsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICBnZXRPcHRpb25CeVZhbHVlJCh2YWx1ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpKSk7XG4gIH1cblxuICBnZXRPcHRpb25CeUxhYmVsJChsYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNBbmRTZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0T3B0aW9uQnlMYWJlbChsYWJlbCkpKTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5S2V5JChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5S2V5KGtleSkpKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSk7XG4gIH1cblxuICBnZXRMYWJlbCQob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxCaW5kaW5nJC5waXBlKG1hcCgobGFiZWxCaW5kaW5nKSA9PiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgbGFiZWxCaW5kaW5nKSkpO1xuICB9XG5cbiAgZ2V0VmFsdWUkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQmluZGluZyQucGlwZShtYXAoKHZhbHVlQmluZGluZykgPT4gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHZhbHVlQmluZGluZykpKTtcbiAgfVxuXG4gIGdldEtleSQob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5QmluZGluZyQucGlwZShtYXAoKGtleUJpbmRpbmcpID0+IHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCBrZXlCaW5kaW5nKSkpO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbih2YWx1ZSwgdGhpcy52YWx1ZUJpbmRpbmcpO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlMYWJlbChsYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKGxhYmVsLCB0aGlzLmxhYmVsQmluZGluZyk7XG4gIH1cblxuICBnZXRPcHRpb25CeUtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihrZXksIHRoaXMua2V5QmluZGluZyk7XG4gIH1cblxuICBnZXRPcHRpb24odmFsdWU6IHVua25vd24sIHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGwsIG9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCAuLi50aGlzLnNlbGVjdGlvbl0pIHtcbiAgICBpZiAoIXByb3BlcnR5UGF0aCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24gPT09IHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IHtcbiAgICAgIGlmICghaXNPYmplY3Qob3B0aW9uKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gZ2V0T2JqZWN0UHJvcGVydHkob3B0aW9uLCBwcm9wZXJ0eVBhdGgpID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5SW5kZXgoaW5kZXg6IG51bWJlciwgb3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCkpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIG9wdGlvbnNbaW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBnZXRPcHRpb25CeU9mZnNldChcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICk6IFQgfCBudWxsIHtcbiAgICBjb25zdCB7IGxvb3AsIGNsYW1wIH0gPSBjb25maWc7XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IGluZGV4ICsgb2Zmc2V0O1xuICAgIGNvbnN0IHJlbWFpbmluZ09mZnNldCA9IG5ld0luZGV4ICogLTE7XG5cbiAgICBpZiAobmV3SW5kZXggPCAwKSB7XG4gICAgICBpZiAobG9vcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeU9mZnNldChyZW1haW5pbmdPZmZzZXQsIG9wdGlvbnMubGVuZ3RoIC0gMSwgb3B0aW9ucywgY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYW1wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0T3B0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChuZXdJbmRleCA+PSBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uQnlPZmZzZXQocmVtYWluaW5nT2Zmc2V0LCAwLCBvcHRpb25zLCBjb25maWcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xhbXApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFzdE9wdGlvbigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeUluZGV4KG5ld0luZGV4KTtcbiAgfVxuXG4gIGdldEZpcnN0T3B0aW9uKG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uQnlJbmRleCgwLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldExhc3RPcHRpb24ob3B0aW9ucyA9IHRoaXMub3B0aW9ucyk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeUluZGV4KG9wdGlvbnMubGVuZ3RoIC0gMSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRPcHRpb25JbmRleChvcHRpb246IFQsIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleShvcHRpb24pO1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IHRoaXMuZ2V0S2V5KG8pID09PSBrZXkpO1xuXG4gICAgcmV0dXJuIGluZGV4ID09PSAtMSA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTogVCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uWzBdIHx8IG51bGw7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZVNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBvcHQgPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTtcblxuICAgIGlmICghb3B0KSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkluZGV4KG9wdCk7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZU9wdGlvbkJ5T2Zmc2V0RnJvbVNlbGVjdGVkKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICkge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5T2Zmc2V0KGluZGV4LCBvZmZzZXQsIHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCksIGNvbmZpZyk7XG4gIH1cblxuICBnZXRMYWJlbChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHRoaXMubGFiZWxCaW5kaW5nKTtcbiAgfVxuXG4gIGdldFZhbHVlKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy52YWx1ZUJpbmRpbmcpO1xuICB9XG5cbiAgZ2V0S2V5KG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcbiAgfVxuXG4gIGdldE9wdGlvblByb3BlcnR5KG9wdGlvbjogVCwgcHJvcGVydHlQYXRoOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKCFwcm9wZXJ0eVBhdGggfHwgIWlzT2JqZWN0KG9wdGlvbikpIHJldHVybiBvcHRpb247XG5cbiAgICByZXR1cm4gZ2V0T2JqZWN0UHJvcGVydHkob3B0aW9uLCBwcm9wZXJ0eVBhdGgpO1xuICB9XG5cbiAgaXNTZWxlY3RlZChvcHRpb246IFQpIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihvcHRpb25LZXksIHRoaXMua2V5QmluZGluZywgdGhpcy5zZWxlY3Rpb24pICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRGaWx0ZXJlZE9wdGlvbnMoZmlsdGVyID0gdGhpcy5maWx0ZXIsIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpIHtcbiAgICBpZiAoIWZpbHRlcikgcmV0dXJuIG9wdGlvbnM7XG5cbiAgICBjb25zdCBzcGxpdEZpbHRlciA9IGZpbHRlci5zcGxpdCgnICcpLmZpbHRlcigoZikgPT4gZik7XG5cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsKG9wdGlvbik7XG5cbiAgICAgIGlmICghbGFiZWwgfHwgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBzcGxpdExhYmVsID0gbGFiZWwuc3BsaXQoJyAnKS5maWx0ZXIoKGwpID0+IGwpO1xuXG4gICAgICByZXR1cm4gc3BsaXRGaWx0ZXIuZXZlcnkoKGYpID0+IHNwbGl0TGFiZWwuc29tZSgobCkgPT4gbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYudG9Mb3dlckNhc2UoKSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoWy4uLnRoaXMuc2VsZWN0aW9uLCBvcHRpb25dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtvcHRpb25dKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb246IFQpIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKG9wdGlvbikpIHJldHVybjtcblxuICAgIHRoaXMuX3NlbGVjdGlvbiQubmV4dChcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmZpbHRlcigoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShzZWxlY3RlZE9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgICAgICByZXR1cm4ga2V5ICE9PSBvcHRpb25LZXk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtdKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQWxsU2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCk7XG4gICAgY29uc3QgdW5zZWxlY3RlZE9wdGlvbnMgPSBmaWx0ZXJlZE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICF0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSk7XG5cbiAgICBpZiAodW5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB1bnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKG8pID0+ICF0aGlzLnNlbGVjdGlvbi5zb21lKChzKSA9PiB0aGlzLmdldEtleShzKSA9PT0gdGhpcy5nZXRLZXkobykpKTtcblxuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFsuLi50aGlzLnNlbGVjdGlvbiwgLi4uc2VsZWN0aW9uXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigocykgPT4gIWZpbHRlcmVkT3B0aW9ucy5zb21lKChvKSA9PiB0aGlzLmdldEtleShvKSA9PT0gdGhpcy5nZXRLZXkocykpKTtcblxuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KHNlbGVjdGlvbik7XG4gICAgfVxuICB9XG59XG4iXX0=
|