@bi8/am-dyn-form
Version:
ng update @angular/cli yarn add @angular/cli
144 lines • 21.2 kB
JavaScript
import * as tslib_1 from "tslib";
import { of as observableOf, Subject } from 'rxjs';
import { map } from 'rxjs/operators';
import { DynFormControl } from "./dyn-form-control";
import * as _ from 'lodash';
var DynAutoCompleteControl = /** @class */ (function (_super) {
tslib_1.__extends(DynAutoCompleteControl, _super);
function DynAutoCompleteControl(options, validator, asyncValidator) {
if (options === void 0) { options = {}; }
var _this = _super.call(this, options, validator, asyncValidator) || this;
_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(function () {
_this.loadValues(null);
}, 0);
_this.valueChanges.subscribe(function (value) {
_this.loadValues(value);
});
return _this;
}
DynAutoCompleteControl.prototype.loadValues = function (value) {
var _this = this;
//console.log("loading values: ", value);
this.loader.prepare({
value: value
}).subscribe(function (result) {
_this.total = result.total;
_this.items = result.items;
_this.selectOptions$.next(_this.items);
});
};
DynAutoCompleteControl.prototype.displayFn = function (item) {
return _.get(item, this.loader.valueProperty);
};
return DynAutoCompleteControl;
}(DynFormControl));
export { DynAutoCompleteControl };
var ArrayAutoCompleteLoader = /** @class */ (function () {
function ArrayAutoCompleteLoader(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';
}
ArrayAutoCompleteLoader.prototype.prepare = function (value) {
var _this = this;
return observableOf(this.items).pipe(map(function (items) {
var 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
var isObject = _.isObject(value);
items.forEach(function (item, index) {
var 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
});
}));
};
ArrayAutoCompleteLoader.prototype.processResponse = function (response) {
return response;
};
return ArrayAutoCompleteLoader;
}());
export { ArrayAutoCompleteLoader };
var ObservableAutoCompleteLoader = /** @class */ (function () {
function ObservableAutoCompleteLoader(loadFn, options) {
this.loadFn = loadFn;
if (options) {
this.size = _.isNil(options.size) ? options.size : 15;
this.page = _.isNil(options.page) ? options.page : 0;
}
}
ObservableAutoCompleteLoader.prototype.prepare = function (value) {
var _this = this;
var ctx = {
size: this.size,
page: this.page,
value: value
};
return this.loadFn(ctx).pipe(map(function (response) {
return _this.processResponse(response);
}));
};
ObservableAutoCompleteLoader.prototype.processResponse = function (response) {
return {
total: response.total,
items: response.results
};
};
return ObservableAutoCompleteLoader;
}());
export { ObservableAutoCompleteLoader };
var KeywordAutoCompleteCriteriaLoader = /** @class */ (function () {
function KeywordAutoCompleteCriteriaLoader(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';
}
}
KeywordAutoCompleteCriteriaLoader.prototype.resolveContext = function (value) {
var ctx = {
size: this.size,
page: this.page,
inclusive: this.inclusive,
criteria: []
};
if (this.keywordProperty && !_.isObject(value)) {
ctx[this.keywordProperty] = value;
}
return ctx;
};
KeywordAutoCompleteCriteriaLoader.prototype.prepare = function (value) {
var _this = this;
var ctx = this.resolveContext(value);
return this.loadFn(ctx).pipe(map(function (response) {
return _this.processResponse(response);
}));
};
KeywordAutoCompleteCriteriaLoader.prototype.processResponse = function (response) {
return {
total: response.total,
items: response.results
};
};
return KeywordAutoCompleteCriteriaLoader;
}());
export { KeywordAutoCompleteCriteriaLoader };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluLWF1dG8tY29tcGxldGUtY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BiaTgvYW0tZHluLWZvcm0vIiwic291cmNlcyI6WyJhcHAvbW9kdWxlcy9hbS1keW4tZm9ybS9keW4tYXV0by1jb21wbGV0ZS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsRUFBRSxJQUFJLFlBQVksRUFBRSxPQUFPLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFFN0QsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUk1QjtJQUE0QyxrREFBYztJQU94RCxnQ0FBWSxPQUFnQixFQUFFLFNBQThDLEVBQUUsY0FBNkQ7UUFBL0gsd0JBQUEsRUFBQSxZQUFnQjtRQUE1QixZQUNFLGtCQUFNLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBVzFDO1FBbEJELFVBQUksR0FBRyxlQUFlLENBQUM7UUFFdkIsb0JBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO1FBQ3RDLFdBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsV0FBSyxHQUFVLEVBQUUsQ0FBQztRQUloQixLQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQywrQ0FBK0M7UUFDL0MsVUFBVSxDQUFDO1lBQ1QsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTixLQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFDLEtBQVU7WUFDckMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQzs7SUFDTCxDQUFDO0lBRUQsMkNBQVUsR0FBVixVQUFX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UyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUM7WUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDbkM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxtREFBTyxHQUFQLFVBQVEsS0FBVTtRQUFsQixpQkFLQztRQUpDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQyxRQUFjO1lBQzlDLE9BQU8sS0FBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELDJEQUFlLEdBQWYsVUFBZ0IsUUFBUTtRQUN0QixPQUFPO1lBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTztTQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUNILHdDQUFDO0FBQUQsQ0FBQyxBQS9DRCxJQStDQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQge29mIGFzIG9ic2VydmFibGVPZiwgU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0Zvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgQXN5bmNWYWxpZGF0b3JGbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7RHluRm9ybUNvbnRyb2x9IGZyb20gXCIuL2R5bi1mb3JtLWNvbnRyb2xcIjtcclxuXHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIER5bkF1dG9Db21wbGV0ZUNvbnRyb2wgZXh0ZW5kcyBEeW5Gb3JtQ29udHJvbCB7XHJcbiAgdHlwZSA9ICdhdXRvLWNvbXBsZXRlJztcclxuICBsb2FkZXI6IEF1dG9Db21wbGV0ZUNyaXRlcmlhTG9hZGVyO1xyXG4gIHNlbGVjdE9wdGlvbnMkID0gbmV3IFN1YmplY3Q8YW55W10+KCk7XHJcbiAgdG90YWw6IG51bWJlciA9IDA7XHJcbiAgaXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHt9ID0ge30sIHZhbGlkYXRvcj86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGwsIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGwpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIHZhbGlkYXRvciwgYXN5bmNWYWxpZGF0b3IpO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBvcHRpb25zWydsb2FkZXInXTtcclxuXHJcbiAgICAvLyBsb2FkIHRoZSBpbml0aWFsIHZhbHVlcyBhZnRlciB0aGUgZmlyc3QgdGlja1xyXG4gICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICB0aGlzLmxvYWRWYWx1ZXMobnVsbCk7XHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+e1xyXG4gICAgICB0aGlzLmxvYWRWYWx1ZXModmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkVmFsdWVzKHZhbHVlKXtcclxuICAgIC8vY29uc29sZS5sb2coXCJsb2FkaW5nIHZhbHVlczogXCIsIHZhbHVlKTtcclxuICAgIHRoaXMubG9hZGVyLnByZXBhcmUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgIH0pLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpPT57XHJcbiAgICAgIHRoaXMudG90YWwgPSByZXN1bHQudG90YWw7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSByZXN1bHQuaXRlbXM7XHJcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9ucyQubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZuKGl0ZW0pIHtcclxuICAgIHJldHVybiBfLmdldChpdGVtLCB0aGlzLmxvYWRlci52YWx1ZVByb3BlcnR5KSBhcyBhbnk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIEBUT0RPXHJcbiAgMSkgU2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBhIHRlbXBsYXRlIGZvciByZW5kZXJpbmcgdGhlIG9wdGlvbnMgZGlzcGxheSBIVE1MXHJcbiAgMikgU2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBteSBvd24gXCJzZWxlY3RlZCBpdGVtIGRpc3BsYXlcIiBmdW5jdGlvbiAtIGJ5IGRlZmF1bHQgaXQgc2hvdWxkIHVzZSB0aGUgZGlzcGxheSB2YWx1ZVxyXG4gICovXHJcblxyXG4gIC8qc2V0VmFsdWUodmFsdWU6IGFueSwgb3B0aW9ucz86IHtcclxuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcclxuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgICBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U/OiBib29sZWFuO1xyXG4gICAgZW1pdFZpZXdUb01vZGVsQ2hhbmdlPzogYm9vbGVhbjtcclxuICB9KSA6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpe1xyXG4gICAgICBzdXBlci5zZXRWYWx1ZSgnJywgb3B0aW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfSovXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlTG9hZEZuIHtcclxuICAoY3JpdGVyaWE6IGFueSk6IE9ic2VydmFibGU8T2JqZWN0PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcnJheUF1dG9Db21wbGV0ZUZpbHRlckxvYWRGbiB7XHJcbiAgKGl0ZW06IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlQ3JpdGVyaWFMb2FkZXIge1xyXG4gIGNvZGVQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIHZhbHVlUHJvcGVydHk6IHN0cmluZztcclxuICBwcmVwYXJlKGNyaXRlcmlhOiBhbnkpIDogT2JzZXJ2YWJsZTxPYmplY3Q+O1xyXG4gIHByb2Nlc3NSZXNwb25zZShyZXNwb25zZTogYW55KSA6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFycmF5QXV0b0NvbXBsZXRlTG9hZGVyIGltcGxlbWVudHMgQXV0b0NvbXBsZXRlQ3JpdGVyaWFMb2FkZXIge1xyXG4gIHNpemU6IG51bWJlcjtcclxuICBwYWdlOiBudW1iZXI7XHJcbiAgY29kZVByb3BlcnR5OiBzdHJpbmc7XHJcbiAgdmFsdWVQcm9wZXJ0eTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaXRlbXM6IGFueVtdLCBwdWJsaWMgZmlsdGVyRm46IEFycmF5QXV0b0NvbXBsZXRlRmlsdGVyTG9hZEZuLCBvcHRpb25zOiBhbnkpe1xyXG4gICAgdGhpcy5zaXplID0gIV8uaXNOaWwob3B0aW9ucy5zaXplKSA/IG9wdGlvbnMuc2l6ZSA6IDE1O1xyXG4gICAgdGhpcy5wYWdlID0gIV8uaXNOaWwob3B0aW9ucy5wYWdlKSA/IG9wdGlvbnMucGFnZSA6IDA7XHJcbiAgICB0aGlzLmNvZGVQcm9wZXJ0eSA9ICFfLmlzTmlsKG9wdGlvbnMuY29kZVByb3BlcnR5KSA/IG9wdGlvbnMuY29kZVByb3BlcnR5IDogJ2NvZGUnO1xyXG4gICAgdGhpcy52YWx1ZVByb3BlcnR5ID0gIV8uaXNOaWwob3B0aW9ucy52YWx1ZVByb3BlcnR5KSA/IG9wdGlvbnMudmFsdWVQcm9wZXJ0eSA6ICd2YWx1ZSc7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlKHZhbHVlOiBhbnkpIDogT2JzZXJ2YWJsZTxPYmplY3Q+IHtcclxuICAgIHJldHVybiBvYnNlcnZhYmxlT2YodGhpcy5pdGVtcykucGlwZShtYXAoKGl0ZW1zOiBhbnkpPT57XHJcbiAgICAgIGxldCBmaWx0ZXJlZExpc3QgPSBbXTtcclxuXHJcbiAgICAgIC8vIG5vdGUgdGhhdCB3aGVuIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHRha2VzIHBsYWNlLCB0aGUgdmFsdWUgd2lsbCBiZSB0aGUgYWN0dWFsIHNlbGVjdGVkIG9iamVjdFxyXG4gICAgICAvLyBhbmQgbm90IHRoZSBzdHJpbmcgdGhhdCB3ZSBleHBlY3QuICBJZiBpdCBpcyBhbiBvYmplY3QsIHRoZXJlIGlzIG5vIHJlYXNvbiBmb3IgbG9hZGluZyB0aGUgbGlzdFxyXG4gICAgICBsZXQgaXNPYmplY3QgPSBfLmlzT2JqZWN0KHZhbHVlKTtcclxuXHJcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGl0ZW1WYWx1ZSA9IF8uZ2V0KGl0ZW0sIHRoaXMudmFsdWVQcm9wZXJ0eSk7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0IHx8IHRoaXMuZmlsdGVyRm4oaXRlbSwgdmFsdWUudmFsdWUpKXtcclxuICAgICAgICAgIGZpbHRlcmVkTGlzdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2Uoe1xyXG4gICAgICAgIHRvdGFsOiBmaWx0ZXJlZExpc3QubGVuZ3RoLFxyXG4gICAgICAgIGl0ZW1zOiBmaWx0ZXJlZExpc3QubGVuZ3RoID4gMCA/IF8uY2h1bmsoZmlsdGVyZWRMaXN0LCB0aGlzLnNpemUpW3RoaXMucGFnZV0gOiBmaWx0ZXJlZExpc3RcclxuICAgICAgfSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzcG9uc2UocmVzcG9uc2Upe1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVBdXRvQ29tcGxldGVMb2FkZXIgaW1wbGVtZW50cyBBdXRvQ29tcGxldGVDcml0ZXJpYUxvYWRlciB7XHJcbiAgc2l6ZTogbnVtYmVyO1xyXG4gIHBhZ2U6IG51bWJlcjtcclxuICBjb2RlUHJvcGVydHk6IHN0cmluZztcclxuICB2YWx1ZVByb3BlcnR5OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBsb2FkRm46IEF1dG9Db21wbGV0ZUxvYWRGbiwgb3B0aW9ucz86IGFueSl7XHJcbiAgICBpZiAob3B0aW9ucyl7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IF8uaXNOaWwob3B0aW9ucy5zaXplKSA/IG9wdGlvbnMuc2l6ZSA6IDE1O1xyXG4gICAgICB0aGlzLnBhZ2UgPSBfLmlzTmlsKG9wdGlvbnMucGFnZSkgPyBvcHRpb25zLnBhZ2UgOiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJlcGFyZSh2YWx1ZTogYW55KSA6IE9ic2VydmFibGU8T2JqZWN0PiB7XHJcbiAgICBsZXQgY3R4ID0ge1xyXG4gICAgICBzaXplOiB0aGlzLnNpemUsXHJcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmxvYWRGbihjdHgpLnBpcGUobWFwKChyZXNwb25zZSA6IGFueSk9PntcclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NSZXNwb25zZShyZXNwb25zZSl7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3RhbDogcmVzcG9uc2UudG90YWwsXHJcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5yZXN1bHRzXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgS2V5d29yZEF1dG9Db21wbGV0ZUNyaXRlcmlhTG9hZGVyIGltcGxlbWVudHMgQXV0b0NvbXBsZXRlQ3JpdGVyaWFMb2FkZXIge1xyXG4gIHNpemU6IG51bWJlcjtcclxuICBwYWdlOiBudW1iZXI7XHJcbiAgaW5jbHVzaXZlOiBib29sZWFuO1xyXG4gIGtleXdvcmRQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIGNvZGVQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIHZhbHVlUHJvcGVydHk6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGxvYWRGbjogQXV0b0NvbXBsZXRlTG9hZEZuLCBvcHRpb25zPzogYW55KXtcclxuICAgIGlmIChvcHRpb25zKXtcclxuICAgICAgdGhpcy5zaXplID0gXy5pc05pbChvcHRpb25zLnNpemUpID8gb3B0aW9ucy5zaXplIDogNTA7XHJcbiAgICAgIHRoaXMucGFnZSA9IF8uaXNOaWwob3B0aW9ucy5wYWdlKSA/IG9wdGlvbnMucGFnZSA6IDA7XHJcbiAgICAgIHRoaXMuaW5jbHVzaXZlID0gXy5pc05pbChvcHRpb25zLmluY2x1c2l2ZSkgPyBvcHRpb25zLmluY2x1c2l2ZSA6IHRydWU7XHJcbiAgICAgIHRoaXMua2V5d29yZFByb3BlcnR5ID0gb3B0aW9ucy5rZXl3b3JkUHJvcGVydHk7XHJcbiAgICAgIHRoaXMuY29kZVByb3BlcnR5ID0gIV8uaXNOaWwob3B0aW9ucy5jb2RlUHJvcGVydHkpID8gb3B0aW9ucy5jb2RlUHJvcGVydHkgOiAnY29kZSc7XHJcbiAgICAgIHRoaXMudmFsdWVQcm9wZXJ0eSA9ICFfLmlzTmlsKG9wdGlvbnMudmFsdWVQcm9wZXJ0eSkgPyBvcHRpb25zLnZhbHVlUHJvcGVydHkgOiAndmFsdWUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZUNvbnRleHQodmFsdWU6IGFueSl7XHJcbiAgICBsZXQgY3R4ID0ge1xyXG4gICAgICBzaXplOiB0aGlzLnNpemUsXHJcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgaW5jbHVzaXZlOiB0aGlzLmluY2x1c2l2ZSxcclxuICAgICAgY3JpdGVyaWE6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmtleXdvcmRQcm9wZXJ0eSAmJiAhXy5pc09iamVjdCh2YWx1ZSkpe1xyXG4gICAgICBjdHhbdGhpcy5rZXl3b3JkUHJvcGVydHldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN0eDtcclxuICB9XHJcblxyXG4gIHByZXBhcmUodmFsdWU6IGFueSkgOiBPYnNlcnZhYmxlPE9iamVjdD4ge1xyXG4gICAgbGV0IGN0eCA9IHRoaXMucmVzb2x2ZUNvbnRleHQodmFsdWUpO1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZEZuKGN0eCkucGlwZShtYXAoKHJlc3BvbnNlIDogYW55KT0+e1xyXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKXtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRvdGFsOiByZXNwb25zZS50b3RhbCxcclxuICAgICAgaXRlbXM6IHJlc3BvbnNlLnJlc3VsdHNcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==