UNPKG

@bi8/am-dyn-form

Version:

ng update @angular/cli yarn add @angular/cli

144 lines 21.2 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluLWF1dG8tY29tcGxldGUtY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BiaTgvYW0tZHluLWZvcm0vIiwic291cmNlcyI6WyJhcHAvbW9kdWxlcy9hbS1keW4tZm9ybS9keW4tYXV0by1jb21wbGV0ZS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsRUFBRSxJQUFJLFlBQVksRUFBRSxPQUFPLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFFN0QsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUk1QjtJQUE0QyxrREFBYztJQU94RCxnQ0FBWSxPQUFnQixFQUFFLFNBQThDLEVBQUUsY0FBNkQ7UUFBL0gsd0JBQUEsRUFBQSxZQUFnQjtRQUE1QixZQUNFLGtCQUFNLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBVzFDO1FBbEJELFVBQUksR0FBRyxlQUFlLENBQUM7UUFFdkIsb0JBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO1FBQ3RDLFdBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsV0FBSyxHQUFVLEVBQUUsQ0FBQztRQUloQixLQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQywrQ0FBK0M7UUFDL0MsVUFBVSxDQUFDO1lBQ1QsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTixLQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFDLEtBQVU7WUFDckMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQzs7SUFDTCxDQUFDO0lBRUQsMkNBQVUsR0FBVixVQUFXLEtBQUs7UUFBaEIsaUJBU0M7UUFSQyx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDWixLQUFLLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUMsTUFBVztZQUN2QixLQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsS0FBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzFCLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwQ0FBUyxHQUFULFVBQVUsSUFBSTtRQUNaLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQVEsQ0FBQztJQUN2RCxDQUFDO0lBb0JILDZCQUFDO0FBQUQsQ0FBQyxBQXRERCxDQUE0QyxjQUFjLEdBc0R6RDs7QUFpQkQ7SUFNRSxpQ0FBbUIsS0FBWSxFQUFTLFFBQXVDLEVBQUUsT0FBWTtRQUExRSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBK0I7UUFDN0UsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkYsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekYsQ0FBQztJQUVELHlDQUFPLEdBQVAsVUFBUSxLQUFVO1FBQWxCLGlCQW9CQztRQW5CQyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFDLEtBQVU7WUFDbEQsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRXRCLGdHQUFnRztZQUNoRyxrR0FBa0c7WUFDbEcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSSxFQUFFLEtBQUs7Z0JBQ3hCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxRQUFRLElBQUksS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUMvQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxLQUFJLENBQUMsZUFBZSxDQUFDO2dCQUMxQixLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU07Z0JBQzFCLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWTthQUM1RixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGlEQUFlLEdBQWYsVUFBZ0IsUUFBUTtRQUN0QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0gsOEJBQUM7QUFBRCxDQUFDLEFBdENELElBc0NDOztBQUVEO0lBTUUsc0NBQW1CLE1BQTBCLEVBQUUsT0FBYTtRQUF6QyxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMzQyxJQUFJLE9BQU8sRUFBQztZQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRUQsOENBQU8sR0FBUCxVQUFRLEtBQVU7UUFBbEIsaUJBVUM7UUFUQyxJQUFJLEdBQUcsR0FBRztZQUNSLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUMsUUFBYztZQUM5QyxPQUFPLEtBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxzREFBZSxHQUFmLFVBQWdCLFFBQVE7UUFDdEIsT0FBTztZQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU87U0FDeEIsQ0FBQTtJQUNILENBQUM7SUFDSCxtQ0FBQztBQUFELENBQUMsQUEvQkQsSUErQkM7O0FBRUQ7SUFRRSwyQ0FBbUIsTUFBMEIsRUFBRSxPQUFhO1FBQXpDLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBQzNDLElBQUksT0FBTyxFQUFDO1lBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ25GLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ3hGO0lBQ0gsQ0FBQztJQUVELDBEQUFjLEdBQWQsVUFBZSxLQUFVO1FBQ3ZCLElBQUksR0FBRyxHQUFHO1lBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUM7WUFDN0MsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDbkM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxtREFBTyxHQUFQLFVBQVEsS0FBVTtRQUFsQixpQkFLQztRQUpDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQyxRQUFjO1lBQzlDLE9BQU8sS0FBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELDJEQUFlLEdBQWYsVUFBZ0IsUUFBUTtRQUN0QixPQUFPO1lBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTztTQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUNILHdDQUFDO0FBQUQsQ0FBQyxBQS9DRCxJQStDQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQge29mIGFzIG9ic2VydmFibGVPZiwgU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0Zvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgQXN5bmNWYWxpZGF0b3JGbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7RHluRm9ybUNvbnRyb2x9IGZyb20gXCIuL2R5bi1mb3JtLWNvbnRyb2xcIjtcclxuXHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIER5bkF1dG9Db21wbGV0ZUNvbnRyb2wgZXh0ZW5kcyBEeW5Gb3JtQ29udHJvbCB7XHJcbiAgdHlwZSA9ICdhdXRvLWNvbXBsZXRlJztcclxuICBsb2FkZXI6IEF1dG9Db21wbGV0ZUNyaXRlcmlhTG9hZGVyO1xyXG4gIHNlbGVjdE9wdGlvbnMkID0gbmV3IFN1YmplY3Q8YW55W10+KCk7XHJcbiAgdG90YWw6IG51bWJlciA9IDA7XHJcbiAgaXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHt9ID0ge30sIHZhbGlkYXRvcj86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGwsIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGwpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMsIHZhbGlkYXRvciwgYXN5bmNWYWxpZGF0b3IpO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBvcHRpb25zWydsb2FkZXInXTtcclxuXHJcbiAgICAvLyBsb2FkIHRoZSBpbml0aWFsIHZhbHVlcyBhZnRlciB0aGUgZmlyc3QgdGlja1xyXG4gICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICB0aGlzLmxvYWRWYWx1ZXMobnVsbCk7XHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+e1xyXG4gICAgICB0aGlzLmxvYWRWYWx1ZXModmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkVmFsdWVzKHZhbHVlKXtcclxuICAgIC8vY29uc29sZS5sb2coXCJsb2FkaW5nIHZhbHVlczogXCIsIHZhbHVlKTtcclxuICAgIHRoaXMubG9hZGVyLnByZXBhcmUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgIH0pLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpPT57XHJcbiAgICAgIHRoaXMudG90YWwgPSByZXN1bHQudG90YWw7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSByZXN1bHQuaXRlbXM7XHJcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9ucyQubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZuKGl0ZW0pIHtcclxuICAgIHJldHVybiBfLmdldChpdGVtLCB0aGlzLmxvYWRlci52YWx1ZVByb3BlcnR5KSBhcyBhbnk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIEBUT0RPXHJcbiAgMSkgU2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBhIHRlbXBsYXRlIGZvciByZW5kZXJpbmcgdGhlIG9wdGlvbnMgZGlzcGxheSBIVE1MXHJcbiAgMikgU2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBteSBvd24gXCJzZWxlY3RlZCBpdGVtIGRpc3BsYXlcIiBmdW5jdGlvbiAtIGJ5IGRlZmF1bHQgaXQgc2hvdWxkIHVzZSB0aGUgZGlzcGxheSB2YWx1ZVxyXG4gICovXHJcblxyXG4gIC8qc2V0VmFsdWUodmFsdWU6IGFueSwgb3B0aW9ucz86IHtcclxuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcclxuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgICBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U/OiBib29sZWFuO1xyXG4gICAgZW1pdFZpZXdUb01vZGVsQ2hhbmdlPzogYm9vbGVhbjtcclxuICB9KSA6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpe1xyXG4gICAgICBzdXBlci5zZXRWYWx1ZSgnJywgb3B0aW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfSovXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlTG9hZEZuIHtcclxuICAoY3JpdGVyaWE6IGFueSk6IE9ic2VydmFibGU8T2JqZWN0PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcnJheUF1dG9Db21wbGV0ZUZpbHRlckxvYWRGbiB7XHJcbiAgKGl0ZW06IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlQ3JpdGVyaWFMb2FkZXIge1xyXG4gIGNvZGVQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIHZhbHVlUHJvcGVydHk6IHN0cmluZztcclxuICBwcmVwYXJlKGNyaXRlcmlhOiBhbnkpIDogT2JzZXJ2YWJsZTxPYmplY3Q+O1xyXG4gIHByb2Nlc3NSZXNwb25zZShyZXNwb25zZTogYW55KSA6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFycmF5QXV0b0NvbXBsZXRlTG9hZGVyIGltcGxlbWVudHMgQXV0b0NvbXBsZXRlQ3JpdGVyaWFMb2FkZXIge1xyXG4gIHNpemU6IG51bWJlcjtcclxuICBwYWdlOiBudW1iZXI7XHJcbiAgY29kZVByb3BlcnR5OiBzdHJpbmc7XHJcbiAgdmFsdWVQcm9wZXJ0eTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaXRlbXM6IGFueVtdLCBwdWJsaWMgZmlsdGVyRm46IEFycmF5QXV0b0NvbXBsZXRlRmlsdGVyTG9hZEZuLCBvcHRpb25zOiBhbnkpe1xyXG4gICAgdGhpcy5zaXplID0gIV8uaXNOaWwob3B0aW9ucy5zaXplKSA/IG9wdGlvbnMuc2l6ZSA6IDE1O1xyXG4gICAgdGhpcy5wYWdlID0gIV8uaXNOaWwob3B0aW9ucy5wYWdlKSA/IG9wdGlvbnMucGFnZSA6IDA7XHJcbiAgICB0aGlzLmNvZGVQcm9wZXJ0eSA9ICFfLmlzTmlsKG9wdGlvbnMuY29kZVByb3BlcnR5KSA/IG9wdGlvbnMuY29kZVByb3BlcnR5IDogJ2NvZGUnO1xyXG4gICAgdGhpcy52YWx1ZVByb3BlcnR5ID0gIV8uaXNOaWwob3B0aW9ucy52YWx1ZVByb3BlcnR5KSA/IG9wdGlvbnMudmFsdWVQcm9wZXJ0eSA6ICd2YWx1ZSc7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlKHZhbHVlOiBhbnkpIDogT2JzZXJ2YWJsZTxPYmplY3Q+IHtcclxuICAgIHJldHVybiBvYnNlcnZhYmxlT2YodGhpcy5pdGVtcykucGlwZShtYXAoKGl0ZW1zOiBhbnkpPT57XHJcbiAgICAgIGxldCBmaWx0ZXJlZExpc3QgPSBbXTtcclxuXHJcbiAgICAgIC8vIG5vdGUgdGhhdCB3aGVuIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHRha2VzIHBsYWNlLCB0aGUgdmFsdWUgd2lsbCBiZSB0aGUgYWN0dWFsIHNlbGVjdGVkIG9iamVjdFxyXG4gICAgICAvLyBhbmQgbm90IHRoZSBzdHJpbmcgdGhhdCB3ZSBleHBlY3QuICBJZiBpdCBpcyBhbiBvYmplY3QsIHRoZXJlIGlzIG5vIHJlYXNvbiBmb3IgbG9hZGluZyB0aGUgbGlzdFxyXG4gICAgICBsZXQgaXNPYmplY3QgPSBfLmlzT2JqZWN0KHZhbHVlKTtcclxuXHJcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGl0ZW1WYWx1ZSA9IF8uZ2V0KGl0ZW0sIHRoaXMudmFsdWVQcm9wZXJ0eSk7XHJcbiAgICAgICAgaWYgKGlzT2JqZWN0IHx8IHRoaXMuZmlsdGVyRm4oaXRlbSwgdmFsdWUudmFsdWUpKXtcclxuICAgICAgICAgIGZpbHRlcmVkTGlzdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2Uoe1xyXG4gICAgICAgIHRvdGFsOiBmaWx0ZXJlZExpc3QubGVuZ3RoLFxyXG4gICAgICAgIGl0ZW1zOiBmaWx0ZXJlZExpc3QubGVuZ3RoID4gMCA/IF8uY2h1bmsoZmlsdGVyZWRMaXN0LCB0aGlzLnNpemUpW3RoaXMucGFnZV0gOiBmaWx0ZXJlZExpc3RcclxuICAgICAgfSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzcG9uc2UocmVzcG9uc2Upe1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVBdXRvQ29tcGxldGVMb2FkZXIgaW1wbGVtZW50cyBBdXRvQ29tcGxldGVDcml0ZXJpYUxvYWRlciB7XHJcbiAgc2l6ZTogbnVtYmVyO1xyXG4gIHBhZ2U6IG51bWJlcjtcclxuICBjb2RlUHJvcGVydHk6IHN0cmluZztcclxuICB2YWx1ZVByb3BlcnR5OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBsb2FkRm46IEF1dG9Db21wbGV0ZUxvYWRGbiwgb3B0aW9ucz86IGFueSl7XHJcbiAgICBpZiAob3B0aW9ucyl7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IF8uaXNOaWwob3B0aW9ucy5zaXplKSA/IG9wdGlvbnMuc2l6ZSA6IDE1O1xyXG4gICAgICB0aGlzLnBhZ2UgPSBfLmlzTmlsKG9wdGlvbnMucGFnZSkgPyBvcHRpb25zLnBhZ2UgOiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJlcGFyZSh2YWx1ZTogYW55KSA6IE9ic2VydmFibGU8T2JqZWN0PiB7XHJcbiAgICBsZXQgY3R4ID0ge1xyXG4gICAgICBzaXplOiB0aGlzLnNpemUsXHJcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmxvYWRGbihjdHgpLnBpcGUobWFwKChyZXNwb25zZSA6IGFueSk9PntcclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NSZXNwb25zZShyZXNwb25zZSl7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3RhbDogcmVzcG9uc2UudG90YWwsXHJcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5yZXN1bHRzXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgS2V5d29yZEF1dG9Db21wbGV0ZUNyaXRlcmlhTG9hZGVyIGltcGxlbWVudHMgQXV0b0NvbXBsZXRlQ3JpdGVyaWFMb2FkZXIge1xyXG4gIHNpemU6IG51bWJlcjtcclxuICBwYWdlOiBudW1iZXI7XHJcbiAgaW5jbHVzaXZlOiBib29sZWFuO1xyXG4gIGtleXdvcmRQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIGNvZGVQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIHZhbHVlUHJvcGVydHk6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGxvYWRGbjogQXV0b0NvbXBsZXRlTG9hZEZuLCBvcHRpb25zPzogYW55KXtcclxuICAgIGlmIChvcHRpb25zKXtcclxuICAgICAgdGhpcy5zaXplID0gXy5pc05pbChvcHRpb25zLnNpemUpID8gb3B0aW9ucy5zaXplIDogNTA7XHJcbiAgICAgIHRoaXMucGFnZSA9IF8uaXNOaWwob3B0aW9ucy5wYWdlKSA/IG9wdGlvbnMucGFnZSA6IDA7XHJcbiAgICAgIHRoaXMuaW5jbHVzaXZlID0gXy5pc05pbChvcHRpb25zLmluY2x1c2l2ZSkgPyBvcHRpb25zLmluY2x1c2l2ZSA6IHRydWU7XHJcbiAgICAgIHRoaXMua2V5d29yZFByb3BlcnR5ID0gb3B0aW9ucy5rZXl3b3JkUHJvcGVydHk7XHJcbiAgICAgIHRoaXMuY29kZVByb3BlcnR5ID0gIV8uaXNOaWwob3B0aW9ucy5jb2RlUHJvcGVydHkpID8gb3B0aW9ucy5jb2RlUHJvcGVydHkgOiAnY29kZSc7XHJcbiAgICAgIHRoaXMudmFsdWVQcm9wZXJ0eSA9ICFfLmlzTmlsKG9wdGlvbnMudmFsdWVQcm9wZXJ0eSkgPyBvcHRpb25zLnZhbHVlUHJvcGVydHkgOiAndmFsdWUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZUNvbnRleHQodmFsdWU6IGFueSl7XHJcbiAgICBsZXQgY3R4ID0ge1xyXG4gICAgICBzaXplOiB0aGlzLnNpemUsXHJcbiAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgaW5jbHVzaXZlOiB0aGlzLmluY2x1c2l2ZSxcclxuICAgICAgY3JpdGVyaWE6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmtleXdvcmRQcm9wZXJ0eSAmJiAhXy5pc09iamVjdCh2YWx1ZSkpe1xyXG4gICAgICBjdHhbdGhpcy5rZXl3b3JkUHJvcGVydHldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN0eDtcclxuICB9XHJcblxyXG4gIHByZXBhcmUodmFsdWU6IGFueSkgOiBPYnNlcnZhYmxlPE9iamVjdD4ge1xyXG4gICAgbGV0IGN0eCA9IHRoaXMucmVzb2x2ZUNvbnRleHQodmFsdWUpO1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZEZuKGN0eCkucGlwZShtYXAoKHJlc3BvbnNlIDogYW55KT0+e1xyXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKXtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRvdGFsOiByZXNwb25zZS50b3RhbCxcclxuICAgICAgaXRlbXM6IHJlc3BvbnNlLnJlc3VsdHNcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==