@bi8/am-dyn-form
Version:
ng update @angular/cli yarn add @angular/cli
128 lines • 19.7 kB
JavaScript
import { of as observableOf, Subject } from 'rxjs';
import { map } from 'rxjs/operators';
import { DynFormControl } from "./dyn-form-control";
import * as _ from 'lodash';
export class DynAutoCompleteControl extends DynFormControl {
constructor(options = {}, validator, asyncValidator) {
super(options, validator, asyncValidator);
this.type = 'auto-complete';
this.selectOptions$ = new Subject();
this.total = 0;
this.items = [];
this.loader = options['loader'];
// load the initial values after the first tick
setTimeout(() => {
this.loadValues(null);
}, 0);
this.valueChanges.subscribe((value) => {
this.loadValues(value);
});
}
loadValues(value) {
//console.log("loading values: ", value);
this.loader.prepare({
value: value
}).subscribe((result) => {
this.total = result.total;
this.items = result.items;
this.selectOptions$.next(this.items);
});
}
displayFn(item) {
return _.get(item, this.loader.valueProperty);
}
}
export class ArrayAutoCompleteLoader {
constructor(items, filterFn, options) {
this.items = items;
this.filterFn = filterFn;
this.size = !_.isNil(options.size) ? options.size : 15;
this.page = !_.isNil(options.page) ? options.page : 0;
this.codeProperty = !_.isNil(options.codeProperty) ? options.codeProperty : 'code';
this.valueProperty = !_.isNil(options.valueProperty) ? options.valueProperty : 'value';
}
prepare(value) {
return observableOf(this.items).pipe(map((items) => {
let filteredList = [];
// note that when the actual selection takes place, the value will be the actual selected object
// and not the string that we expect. If it is an object, there is no reason for loading the list
let isObject = _.isObject(value);
items.forEach((item, index) => {
let itemValue = _.get(item, this.valueProperty);
if (isObject || this.filterFn(item, value.value)) {
filteredList.push(item);
}
});
return this.processResponse({
total: filteredList.length,
items: filteredList.length > 0 ? _.chunk(filteredList, this.size)[this.page] : filteredList
});
}));
}
processResponse(response) {
return response;
}
}
export class ObservableAutoCompleteLoader {
constructor(loadFn, options) {
this.loadFn = loadFn;
if (options) {
this.size = _.isNil(options.size) ? options.size : 15;
this.page = _.isNil(options.page) ? options.page : 0;
}
}
prepare(value) {
let ctx = {
size: this.size,
page: this.page,
value: value
};
return this.loadFn(ctx).pipe(map((response) => {
return this.processResponse(response);
}));
}
processResponse(response) {
return {
total: response.total,
items: response.results
};
}
}
export class KeywordAutoCompleteCriteriaLoader {
constructor(loadFn, options) {
this.loadFn = loadFn;
if (options) {
this.size = _.isNil(options.size) ? options.size : 50;
this.page = _.isNil(options.page) ? options.page : 0;
this.inclusive = _.isNil(options.inclusive) ? options.inclusive : true;
this.keywordProperty = options.keywordProperty;
this.codeProperty = !_.isNil(options.codeProperty) ? options.codeProperty : 'code';
this.valueProperty = !_.isNil(options.valueProperty) ? options.valueProperty : 'value';
}
}
resolveContext(value) {
let ctx = {
size: this.size,
page: this.page,
inclusive: this.inclusive,
criteria: []
};
if (this.keywordProperty && !_.isObject(value)) {
ctx[this.keywordProperty] = value;
}
return ctx;
}
prepare(value) {
let ctx = this.resolveContext(value);
return this.loadFn(ctx).pipe(map((response) => {
return this.processResponse(response);
}));
}
processResponse(response) {
return {
total: response.total,
items: response.results
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluLWF1dG8tY29tcGxldGUtY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BiaTgvYW0tZHluLWZvcm0vIiwic291cmNlcyI6WyJhcHAvbW9kdWxlcy9hbS1keW4tZm9ybS9keW4tYXV0by1jb21wbGV0ZS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxFQUFFLElBQUksWUFBWSxFQUFFLE9BQU8sRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUU3RCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBSTVCLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxjQUFjO0lBT3hELFlBQVksVUFBYyxFQUFFLEVBQUUsU0FBOEMsRUFBRSxjQUE2RDtRQUN6SSxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQVA1QyxTQUFJLEdBQUcsZUFBZSxDQUFDO1FBRXZCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVMsQ0FBQztRQUN0QyxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFVBQUssR0FBVSxFQUFFLENBQUM7UUFJaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEMsK0NBQStDO1FBQy9DLFVBQVUsQ0FBQyxHQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNaLEtBQUssRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBSTtRQUNaLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQVEsQ0FBQztJQUN2RCxDQUFDO0NBb0JGO0FBaUJELE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFBbUIsS0FBWSxFQUFTLFFBQXVDLEVBQUUsT0FBWTtRQUExRSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBK0I7UUFDN0UsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkYsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekYsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBVSxFQUFDLEVBQUU7WUFDckQsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRXRCLGdHQUFnRztZQUNoRyxrR0FBa0c7WUFDbEcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM1QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2hELElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBQztvQkFDL0MsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDMUIsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNO2dCQUMxQixLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7YUFDNUYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBUTtRQUN0QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sNEJBQTRCO0lBTXZDLFlBQW1CLE1BQTBCLEVBQUUsT0FBYTtRQUF6QyxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMzQyxJQUFJLE9BQU8sRUFBQztZQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxHQUFHLEdBQUc7WUFDUixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWMsRUFBQyxFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFRO1FBQ3RCLE9BQU87WUFDTCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7WUFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1NBQ3hCLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8saUNBQWlDO0lBUTVDLFlBQW1CLE1BQTBCLEVBQUUsT0FBYTtRQUF6QyxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMzQyxJQUFJLE9BQU8sRUFBQztZQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNuRixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUN4RjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLEdBQUcsR0FBRztZQUNSLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFDO1lBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ25DO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWMsRUFBQyxFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFRO1FBQ3RCLE9BQU87WUFDTCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7WUFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1NBQ3hCLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHtvZiBhcyBvYnNlcnZhYmxlT2YsIFN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4sIEFzeW5jVmFsaWRhdG9yRm59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0R5bkZvcm1Db250cm9sfSBmcm9tIFwiLi9keW4tZm9ybS1jb250cm9sXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBEeW5BdXRvQ29tcGxldGVDb250cm9sIGV4dGVuZHMgRHluRm9ybUNvbnRyb2wge1xyXG4gIHR5cGUgPSAnYXV0by1jb21wbGV0ZSc7XHJcbiAgbG9hZGVyOiBBdXRvQ29tcGxldGVDcml0ZXJpYUxvYWRlcjtcclxuICBzZWxlY3RPcHRpb25zJCA9IG5ldyBTdWJqZWN0PGFueVtdPigpO1xyXG4gIHRvdGFsOiBudW1iZXIgPSAwO1xyXG4gIGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiB7fSA9IHt9LCB2YWxpZGF0b3I/OiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCBudWxsLCBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10gfCBudWxsKSB7XHJcbiAgICBzdXBlcihvcHRpb25zLCB2YWxpZGF0b3IsIGFzeW5jVmFsaWRhdG9yKTtcclxuICAgIHRoaXMubG9hZGVyID0gb3B0aW9uc1snbG9hZGVyJ107XHJcblxyXG4gICAgLy8gbG9hZCB0aGUgaW5pdGlhbCB2YWx1ZXMgYWZ0ZXIgdGhlIGZpcnN0IHRpY2tcclxuICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgdGhpcy5sb2FkVmFsdWVzKG51bGwpO1xyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PntcclxuICAgICAgdGhpcy5sb2FkVmFsdWVzKHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFZhbHVlcyh2YWx1ZSl7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwibG9hZGluZyB2YWx1ZXM6IFwiLCB2YWx1ZSk7XHJcbiAgICB0aGlzLmxvYWRlci5wcmVwYXJlKHtcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICB9KS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KT0+e1xyXG4gICAgICB0aGlzLnRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICB0aGlzLml0ZW1zID0gcmVzdWx0Lml0ZW1zO1xyXG4gICAgICB0aGlzLnNlbGVjdE9wdGlvbnMkLm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlGbihpdGVtKSB7XHJcbiAgICByZXR1cm4gXy5nZXQoaXRlbSwgdGhpcy5sb2FkZXIudmFsdWVQcm9wZXJ0eSkgYXMgYW55O1xyXG4gIH1cclxuXHJcbiAgLypcclxuICBAVE9ET1xyXG4gIDEpIFNob3VsZCBiZSBhYmxlIHRvIHNwZWNpZnkgYSB0ZW1wbGF0ZSBmb3IgcmVuZGVyaW5nIHRoZSBvcHRpb25zIGRpc3BsYXkgSFRNTFxyXG4gIDIpIFNob3VsZCBiZSBhYmxlIHRvIHNwZWNpZnkgbXkgb3duIFwic2VsZWN0ZWQgaXRlbSBkaXNwbGF5XCIgZnVuY3Rpb24gLSBieSBkZWZhdWx0IGl0IHNob3VsZCB1c2UgdGhlIGRpc3BsYXkgdmFsdWVcclxuICAqL1xyXG5cclxuICAvKnNldFZhbHVlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiB7XHJcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xyXG4gICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlPzogYm9vbGVhbjtcclxuICAgIGVtaXRWaWV3VG9Nb2RlbENoYW5nZT86IGJvb2xlYW47XHJcbiAgfSkgOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsKXtcclxuICAgICAgc3VwZXIuc2V0VmFsdWUoJycsIG9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gIH0qL1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Db21wbGV0ZUxvYWRGbiB7XHJcbiAgKGNyaXRlcmlhOiBhbnkpOiBPYnNlcnZhYmxlPE9iamVjdD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXJyYXlBdXRvQ29tcGxldGVGaWx0ZXJMb2FkRm4ge1xyXG4gIChpdGVtOiBhbnksIHZhbHVlOiBhbnkpOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Db21wbGV0ZUNyaXRlcmlhTG9hZGVyIHtcclxuICBjb2RlUHJvcGVydHk6IHN0cmluZztcclxuICB2YWx1ZVByb3BlcnR5OiBzdHJpbmc7XHJcbiAgcHJlcGFyZShjcml0ZXJpYTogYW55KSA6IE9ic2VydmFibGU8T2JqZWN0PjtcclxuICBwcm9jZXNzUmVzcG9uc2UocmVzcG9uc2U6IGFueSkgOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBcnJheUF1dG9Db21wbGV0ZUxvYWRlciBpbXBsZW1lbnRzIEF1dG9Db21wbGV0ZUNyaXRlcmlhTG9hZGVyIHtcclxuICBzaXplOiBudW1iZXI7XHJcbiAgcGFnZTogbnVtYmVyO1xyXG4gIGNvZGVQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIHZhbHVlUHJvcGVydHk6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGl0ZW1zOiBhbnlbXSwgcHVibGljIGZpbHRlckZuOiBBcnJheUF1dG9Db21wbGV0ZUZpbHRlckxvYWRGbiwgb3B0aW9uczogYW55KXtcclxuICAgIHRoaXMuc2l6ZSA9ICFfLmlzTmlsKG9wdGlvbnMuc2l6ZSkgPyBvcHRpb25zLnNpemUgOiAxNTtcclxuICAgIHRoaXMucGFnZSA9ICFfLmlzTmlsKG9wdGlvbnMucGFnZSkgPyBvcHRpb25zLnBhZ2UgOiAwO1xyXG4gICAgdGhpcy5jb2RlUHJvcGVydHkgPSAhXy5pc05pbChvcHRpb25zLmNvZGVQcm9wZXJ0eSkgPyBvcHRpb25zLmNvZGVQcm9wZXJ0eSA6ICdjb2RlJztcclxuICAgIHRoaXMudmFsdWVQcm9wZXJ0eSA9ICFfLmlzTmlsKG9wdGlvbnMudmFsdWVQcm9wZXJ0eSkgPyBvcHRpb25zLnZhbHVlUHJvcGVydHkgOiAndmFsdWUnO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZSh2YWx1ZTogYW55KSA6IE9ic2VydmFibGU8T2JqZWN0PiB7XHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKHRoaXMuaXRlbXMpLnBpcGUobWFwKChpdGVtczogYW55KT0+e1xyXG4gICAgICBsZXQgZmlsdGVyZWRMaXN0ID0gW107XHJcblxyXG4gICAgICAvLyBub3RlIHRoYXQgd2hlbiB0aGUgYWN0dWFsIHNlbGVjdGlvbiB0YWtlcyBwbGFjZSwgdGhlIHZhbHVlIHdpbGwgYmUgdGhlIGFjdHVhbCBzZWxlY3RlZCBvYmplY3RcclxuICAgICAgLy8gYW5kIG5vdCB0aGUgc3RyaW5nIHRoYXQgd2UgZXhwZWN0LiAgSWYgaXQgaXMgYW4gb2JqZWN0LCB0aGVyZSBpcyBubyByZWFzb24gZm9yIGxvYWRpbmcgdGhlIGxpc3RcclxuICAgICAgbGV0IGlzT2JqZWN0ID0gXy5pc09iamVjdCh2YWx1ZSk7XHJcblxyXG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBpdGVtVmFsdWUgPSBfLmdldChpdGVtLCB0aGlzLnZhbHVlUHJvcGVydHkpO1xyXG4gICAgICAgIGlmIChpc09iamVjdCB8fCB0aGlzLmZpbHRlckZuKGl0ZW0sIHZhbHVlLnZhbHVlKSl7XHJcbiAgICAgICAgICBmaWx0ZXJlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHtcclxuICAgICAgICB0b3RhbDogZmlsdGVyZWRMaXN0Lmxlbmd0aCxcclxuICAgICAgICBpdGVtczogZmlsdGVyZWRMaXN0Lmxlbmd0aCA+IDAgPyBfLmNodW5rKGZpbHRlcmVkTGlzdCwgdGhpcy5zaXplKVt0aGlzLnBhZ2VdIDogZmlsdGVyZWRMaXN0XHJcbiAgICAgIH0pO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKXtcclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlQXV0b0NvbXBsZXRlTG9hZGVyIGltcGxlbWVudHMgQXV0b0NvbXBsZXRlQ3JpdGVyaWFMb2FkZXIge1xyXG4gIHNpemU6IG51bWJlcjtcclxuICBwYWdlOiBudW1iZXI7XHJcbiAgY29kZVByb3BlcnR5OiBzdHJpbmc7XHJcbiAgdmFsdWVQcm9wZXJ0eTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbG9hZEZuOiBBdXRvQ29tcGxldGVMb2FkRm4sIG9wdGlvbnM/OiBhbnkpe1xyXG4gICAgaWYgKG9wdGlvbnMpe1xyXG4gICAgICB0aGlzLnNpemUgPSBfLmlzTmlsKG9wdGlvbnMuc2l6ZSkgPyBvcHRpb25zLnNpemUgOiAxNTtcclxuICAgICAgdGhpcy5wYWdlID0gXy5pc05pbChvcHRpb25zLnBhZ2UpID8gb3B0aW9ucy5wYWdlIDogMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXBhcmUodmFsdWU6IGFueSkgOiBPYnNlcnZhYmxlPE9iamVjdD4ge1xyXG4gICAgbGV0IGN0eCA9IHtcclxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxyXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5sb2FkRm4oY3R4KS5waXBlKG1hcCgocmVzcG9uc2UgOiBhbnkpPT57XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzcG9uc2UocmVzcG9uc2Upe1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdG90YWw6IHJlc3BvbnNlLnRvdGFsLFxyXG4gICAgICBpdGVtczogcmVzcG9uc2UucmVzdWx0c1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEtleXdvcmRBdXRvQ29tcGxldGVDcml0ZXJpYUxvYWRlciBpbXBsZW1lbnRzIEF1dG9Db21wbGV0ZUNyaXRlcmlhTG9hZGVyIHtcclxuICBzaXplOiBudW1iZXI7XHJcbiAgcGFnZTogbnVtYmVyO1xyXG4gIGluY2x1c2l2ZTogYm9vbGVhbjtcclxuICBrZXl3b3JkUHJvcGVydHk6IHN0cmluZztcclxuICBjb2RlUHJvcGVydHk6IHN0cmluZztcclxuICB2YWx1ZVByb3BlcnR5OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBsb2FkRm46IEF1dG9Db21wbGV0ZUxvYWRGbiwgb3B0aW9ucz86IGFueSl7XHJcbiAgICBpZiAob3B0aW9ucyl7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IF8uaXNOaWwob3B0aW9ucy5zaXplKSA/IG9wdGlvbnMuc2l6ZSA6IDUwO1xyXG4gICAgICB0aGlzLnBhZ2UgPSBfLmlzTmlsKG9wdGlvbnMucGFnZSkgPyBvcHRpb25zLnBhZ2UgOiAwO1xyXG4gICAgICB0aGlzLmluY2x1c2l2ZSA9IF8uaXNOaWwob3B0aW9ucy5pbmNsdXNpdmUpID8gb3B0aW9ucy5pbmNsdXNpdmUgOiB0cnVlO1xyXG4gICAgICB0aGlzLmtleXdvcmRQcm9wZXJ0eSA9IG9wdGlvbnMua2V5d29yZFByb3BlcnR5O1xyXG4gICAgICB0aGlzLmNvZGVQcm9wZXJ0eSA9ICFfLmlzTmlsKG9wdGlvbnMuY29kZVByb3BlcnR5KSA/IG9wdGlvbnMuY29kZVByb3BlcnR5IDogJ2NvZGUnO1xyXG4gICAgICB0aGlzLnZhbHVlUHJvcGVydHkgPSAhXy5pc05pbChvcHRpb25zLnZhbHVlUHJvcGVydHkpID8gb3B0aW9ucy52YWx1ZVByb3BlcnR5IDogJ3ZhbHVlJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc29sdmVDb250ZXh0KHZhbHVlOiBhbnkpe1xyXG4gICAgbGV0IGN0eCA9IHtcclxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxyXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgIGluY2x1c2l2ZTogdGhpcy5pbmNsdXNpdmUsXHJcbiAgICAgIGNyaXRlcmlhOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5rZXl3b3JkUHJvcGVydHkgJiYgIV8uaXNPYmplY3QodmFsdWUpKXtcclxuICAgICAgY3R4W3RoaXMua2V5d29yZFByb3BlcnR5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdHg7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlKHZhbHVlOiBhbnkpIDogT2JzZXJ2YWJsZTxPYmplY3Q+IHtcclxuICAgIGxldCBjdHggPSB0aGlzLnJlc29sdmVDb250ZXh0KHZhbHVlKTtcclxuICAgIHJldHVybiB0aGlzLmxvYWRGbihjdHgpLnBpcGUobWFwKChyZXNwb25zZSA6IGFueSk9PntcclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NSZXNwb25zZShyZXNwb25zZSl7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3RhbDogcmVzcG9uc2UudG90YWwsXHJcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5yZXN1bHRzXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=