@neocomplexx/ngx-neo-completer-mat
Version:
136 lines • 16 kB
JavaScript
import { __extends, __values } from "tslib";
import { Subject } from 'rxjs';
import { isNil } from '../globals';
var CompleterBaseData = /** @class */ (function (_super) {
__extends(CompleterBaseData, _super);
function CompleterBaseData() {
return _super.call(this) || this;
}
CompleterBaseData.prototype.cancel = function () {
return;
};
CompleterBaseData.prototype.searchFields = function (searchFields) {
this._searchFields = searchFields;
return this;
};
CompleterBaseData.prototype.titleField = function (titleField) {
this._titleField = titleField;
return this;
};
CompleterBaseData.prototype.descriptionField = function (descriptionField) {
this._descriptionField = descriptionField;
return this;
};
CompleterBaseData.prototype.imageField = function (imageField) {
this._imageField = imageField;
return this;
};
CompleterBaseData.prototype.convertToItem = function (data) {
var image = null;
var formattedText;
var formattedDesc = null;
if (this._titleField) {
formattedText = this.extractTitle(data);
}
else {
formattedText = data;
}
if (typeof formattedText !== 'string') {
formattedText = JSON.stringify(formattedText);
}
if (this._descriptionField) {
formattedDesc = this.extractValue(data, this._descriptionField);
}
if (this._imageField) {
image = this.extractValue(data, this._imageField);
}
if (isNil(formattedText)) {
return null;
}
return {
description: formattedDesc,
image: image,
originalObject: data,
title: formattedText
};
};
CompleterBaseData.prototype.extractMatches = function (data, term) {
var _this = this;
var matches = [];
var searchFields = this._searchFields ? this._searchFields.split(',') : null;
if (this._searchFields !== null && this._searchFields !== undefined && term !== '') {
matches = data.filter(function (item) {
var values = searchFields ? _this.extractBySearchFields(searchFields, item) : [item];
return values.some(function (value) { return value
.toString()
.toLowerCase()
.indexOf(term.toString().toLowerCase()) >= 0; });
});
}
else {
matches = data;
}
return matches;
};
CompleterBaseData.prototype.extractTitle = function (item) {
var _this = this;
// split title fields and run extractValue for each and join with ' '
if (!this._titleField) {
return '';
}
return this._titleField.split(',')
.map(function (field) {
return _this.extractValue(item, field);
})
.reduce(function (acc, titlePart) { return acc ? acc + " " + titlePart : titlePart; });
};
CompleterBaseData.prototype.extractValue = function (obj, key) {
var e_1, _a;
var keys;
var result;
if (key) {
keys = key.split('.');
result = obj;
try {
for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
key = keys_1_1.value;
if (result) {
result = result[key];
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
}
finally { if (e_1) throw e_1.error; }
}
}
else {
result = obj;
}
return result;
};
CompleterBaseData.prototype.processResults = function (matches) {
var i;
var results = [];
if (matches && matches.length > 0) {
for (i = 0; i < matches.length; i++) {
var item = this.convertToItem(matches[i]);
if (item) {
results.push(item);
}
}
}
return results;
};
CompleterBaseData.prototype.extractBySearchFields = function (searchFields, item) {
var _this = this;
return searchFields
.map(function (searchField) { return _this.extractValue(item, searchField); }).filter(function (value) { return !!value; });
};
return CompleterBaseData;
}(Subject));
export { CompleterBaseData };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGVyLWJhc2UtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWNvbXBsZXRlci1tYXQvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvY29tcGxldGVyLWJhc2UtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRW5DO0lBQWdELHFDQUErQjtJQVEzRTtlQUNJLGlCQUFPO0lBQ1gsQ0FBQztJQUlNLGtDQUFNLEdBQWI7UUFDSSxPQUFPO0lBQ1gsQ0FBQztJQUVNLHdDQUFZLEdBQW5CLFVBQW9CLFlBQTJCO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxzQ0FBVSxHQUFqQixVQUFrQixVQUF5QjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sNENBQWdCLEdBQXZCLFVBQXdCLGdCQUF3QjtRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHNDQUFVLEdBQWpCLFVBQWtCLFVBQWtCO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSx5Q0FBYSxHQUFwQixVQUFxQixJQUFTO1FBQzFCLElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7UUFDaEMsSUFBSSxhQUFxQixDQUFDO1FBQzFCLElBQUksYUFBYSxHQUFrQixJQUFJLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDSCxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7WUFDbkMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDakQ7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDbkU7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPO1lBQ0gsV0FBVyxFQUFFLGFBQWE7WUFDMUIsS0FBSyxPQUFBO1lBQ0wsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFLGFBQWE7U0FDTixDQUFDO0lBRXZCLENBQUM7SUFFUywwQ0FBYyxHQUF4QixVQUF5QixJQUFXLEVBQUUsSUFBWTtRQUFsRCxpQkFpQkM7UUFoQkcsSUFBSSxPQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3hCLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDL0UsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2hGLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQUMsSUFBSTtnQkFDdkIsSUFBTSxNQUFNLEdBQVUsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBQyxLQUFLLElBQUssT0FBQSxLQUFLO3FCQUM5QixRQUFRLEVBQUU7cUJBQ1YsV0FBVyxFQUFFO3FCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBSGxCLENBR2tCLENBQy9DLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVTLHdDQUFZLEdBQXRCLFVBQXVCLElBQVM7UUFBaEMsaUJBV0M7UUFWRyxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQzdCLEdBQUcsQ0FBQyxVQUFDLEtBQUs7WUFDUCxPQUFPLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxVQUFDLEdBQUcsRUFBRSxTQUFTLElBQUssT0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFJLEdBQUcsU0FBSSxTQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBdkMsQ0FBdUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFUyx3Q0FBWSxHQUF0QixVQUF1QixHQUFRLEVBQUUsR0FBa0I7O1FBQy9DLElBQUksSUFBYyxDQUFDO1FBQ25CLElBQUksTUFBVyxDQUFDO1FBQ2hCLElBQUksR0FBRyxFQUFFO1lBQ0wsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsTUFBTSxHQUFHLEdBQUcsQ0FBQzs7Z0JBQ2IsS0FBWSxJQUFBLFNBQUEsU0FBQSxJQUFJLENBQUEsMEJBQUEsNENBQUU7b0JBQWIsR0FBRyxpQkFBQTtvQkFDSixJQUFJLE1BQU0sRUFBRTt3QkFDUixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN4QjtpQkFDSjs7Ozs7Ozs7O1NBQ0o7YUFBTTtZQUNILE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRVMsMENBQWMsR0FBeEIsVUFBeUIsT0FBaUI7UUFDdEMsSUFBSSxDQUFTLENBQUM7UUFDZCxJQUFNLE9BQU8sR0FBb0IsRUFBRSxDQUFDO1FBRXBDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxJQUFJLEVBQUU7b0JBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEI7YUFDSjtTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLGlEQUFxQixHQUE3QixVQUE4QixZQUFzQixFQUFFLElBQVM7UUFBL0QsaUJBR0M7UUFGRyxPQUFPLFlBQVk7YUFDZCxHQUFHLENBQUMsVUFBQyxXQUFXLElBQUssT0FBQSxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBcEMsQ0FBb0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEtBQUssSUFBSyxPQUFBLENBQUMsQ0FBQyxLQUFLLEVBQVAsQ0FBTyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUNMLHdCQUFDO0FBQUQsQ0FBQyxBQTlJRCxDQUFnRCxPQUFPLEdBOEl0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IENvbXBsZXRlckl0ZW0gfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBsZXRlci1pdGVtJztcclxuaW1wb3J0IHsgQ29tcGxldGVyRGF0YSB9IGZyb20gJy4vY29tcGxldGVyLWRhdGEnO1xyXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL2dsb2JhbHMnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBsZXRlckJhc2VEYXRhIGV4dGVuZHMgU3ViamVjdDxDb21wbGV0ZXJJdGVtW10gfCBudWxsPiBpbXBsZW1lbnRzIENvbXBsZXRlckRhdGEge1xyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NlYXJjaEZpZWxkczogc3RyaW5nIHwgbnVsbDtcclxuICAgIHByb3RlY3RlZCBfdGl0bGVGaWVsZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHByb3RlY3RlZCBfZGVzY3JpcHRpb25GaWVsZDogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIF9pbWFnZUZpZWxkOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2VhcmNoKHRlcm06IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGNhbmNlbCgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEZpZWxkcyhzZWFyY2hGaWVsZHM6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRpdGxlRmllbGQodGl0bGVGaWVsZDogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3RpdGxlRmllbGQgPSB0aXRsZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXNjcmlwdGlvbkZpZWxkKGRlc2NyaXB0aW9uRmllbGQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uRmllbGQgPSBkZXNjcmlwdGlvbkZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbWFnZUZpZWxkKGltYWdlRmllbGQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2ltYWdlRmllbGQgPSBpbWFnZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0VG9JdGVtKGRhdGE6IGFueSkge1xyXG4gICAgICAgIGxldCBpbWFnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQ6IHN0cmluZztcclxuICAgICAgICBsZXQgZm9ybWF0dGVkRGVzYzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aXRsZUZpZWxkKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlZFRleHQgPSB0aGlzLmV4dHJhY3RUaXRsZShkYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRUZXh0ID0gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0dGVkVGV4dCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9IEpTT04uc3RyaW5naWZ5KGZvcm1hdHRlZFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2Rlc2NyaXB0aW9uRmllbGQpIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVkRGVzYyA9IHRoaXMuZXh0cmFjdFZhbHVlKGRhdGEsIHRoaXMuX2Rlc2NyaXB0aW9uRmllbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ltYWdlRmllbGQpIHtcclxuICAgICAgICAgICAgaW1hZ2UgPSB0aGlzLmV4dHJhY3RWYWx1ZShkYXRhLCB0aGlzLl9pbWFnZUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc05pbChmb3JtYXR0ZWRUZXh0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtYXR0ZWREZXNjLFxyXG4gICAgICAgICAgICBpbWFnZSxcclxuICAgICAgICAgICAgb3JpZ2luYWxPYmplY3Q6IGRhdGEsXHJcbiAgICAgICAgICAgIHRpdGxlOiBmb3JtYXR0ZWRUZXh0XHJcbiAgICAgICAgfSBhcyBDb21wbGV0ZXJJdGVtO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXh0cmFjdE1hdGNoZXMoZGF0YTogYW55W10sIHRlcm06IHN0cmluZykge1xyXG4gICAgICAgIGxldCBtYXRjaGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IHRoaXMuX3NlYXJjaEZpZWxkcyA/IHRoaXMuX3NlYXJjaEZpZWxkcy5zcGxpdCgnLCcpIDogbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5fc2VhcmNoRmllbGRzICE9PSBudWxsICYmIHRoaXMuX3NlYXJjaEZpZWxkcyAhPT0gdW5kZWZpbmVkICYmIHRlcm0gIT09ICcnKSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSBkYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBhbnlbXSA9IHNlYXJjaEZpZWxkcyA/IHRoaXMuZXh0cmFjdEJ5U2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkcywgaXRlbSkgOiBbaXRlbV07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZih0ZXJtLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkgPj0gMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXh0cmFjdFRpdGxlKGl0ZW06IGFueSkge1xyXG4gICAgICAgIC8vIHNwbGl0IHRpdGxlIGZpZWxkcyBhbmQgcnVuIGV4dHJhY3RWYWx1ZSBmb3IgZWFjaCBhbmQgam9pbiB3aXRoICcgJ1xyXG4gICAgICAgIGlmICghdGhpcy5fdGl0bGVGaWVsZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVGaWVsZC5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0VmFsdWUoaXRlbSwgZmllbGQpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHRpdGxlUGFydCkgPT4gYWNjID8gYCR7YWNjfSAke3RpdGxlUGFydH1gIDogdGl0bGVQYXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXh0cmFjdFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICBsZXQga2V5czogc3RyaW5nW107XHJcbiAgICAgICAgbGV0IHJlc3VsdDogYW55O1xyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAga2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBvYmo7XHJcbiAgICAgICAgICAgIGZvciAoa2V5IG9mIGtleXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMobWF0Y2hlczogc3RyaW5nW10pOiBDb21wbGV0ZXJJdGVtW10ge1xyXG4gICAgICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0czogQ29tcGxldGVySXRlbVtdID0gW107XHJcblxyXG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY29udmVydFRvSXRlbShtYXRjaGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZXh0cmFjdEJ5U2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkczogc3RyaW5nW10sIGl0ZW06IGFueSkge1xyXG4gICAgICAgIHJldHVybiBzZWFyY2hGaWVsZHNcclxuICAgICAgICAgICAgLm1hcCgoc2VhcmNoRmllbGQpID0+IHRoaXMuZXh0cmFjdFZhbHVlKGl0ZW0sIHNlYXJjaEZpZWxkKSkuZmlsdGVyKCh2YWx1ZSkgPT4gISF2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuIl19