e5core-angular-ui
Version:
e5 Anywhere Angular UI
211 lines • 19 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { UiDocumentService } from 'e5core-angular-services';
import { DataSourceColumnStatus } from './data-source-column';
import { map } from 'rxjs/operators';
import { of } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "e5core-angular-services";
export class DocumentDataSourceService {
/**
* @param {?} uiDocumentService
*/
constructor(uiDocumentService) {
this.uiDocumentService = uiDocumentService;
this.folderName = "";
this.fieldsToShow = null;
this.searchOptions = {};
}
/**
* @return {?}
*/
defaultOptions() {
return (this.searchOptions);
}
/**
* @param {?} options
* @return {?}
*/
setDefaultOptions(options) {
this.searchOptions = Object.assign({}, options); // clone
}
/**
* @param {?} libraryId
* @param {?} folderName
* @param {?} includeSelect
* @param {?} fieldsToShow
* @param {?} searchText
* @return {?}
*/
setLibrary(libraryId, folderName, includeSelect, fieldsToShow, searchText) {
this.libraryId = libraryId;
this.folderName = folderName;
this.includeSelect = includeSelect;
this.fieldsToShow = fieldsToShow;
this.searchText = searchText;
return (this);
}
/**
* @return {?}
*/
columns() {
/** @type {?} */
let columns = this.fieldsToShow.filter(f => f.display).map(sf => (/** @type {?} */ ({
code: sf.fieldCode,
label: sf.name,
type: "Input",
status: DataSourceColumnStatus.Selected
})));
columns = this.addOptionalColumns(columns);
return of(columns);
}
/**
* @private
* @param {?} columns
* @return {?}
*/
addOptionalColumns(columns) {
if (this.includeSelect)
// Add to start
columns.unshift((/** @type {?} */ ({
label: "",
code: "ActionSelect",
type: "ActionSelect",
status: DataSourceColumnStatus.Selected
})));
return (columns);
}
/**
* @param {?} page
* @param {?} pageSize
* @param {?} optionsIn
* @return {?}
*/
read(page, pageSize, optionsIn) {
/** @type {?} */
let options = Object.assign({}, this.searchOptions, optionsIn);
/** @type {?} */
var returnFields = "";
if (this.fieldsToShow && typeof (this.fieldsToShow) !== 'undefined') {
//var fieldsToRetrieve = fieldsToShow.reduce((fid, fs) => [ ...fid, ...fs.fieldId ], <string[]> []);
//.join(",")
/** @type {?} */
var fieldsToRetrieve = this.fieldsToShow.filter(f => f.display).reduce(function (a, b) { return [a, b.fieldId]; }, []).toString();
if (fieldsToRetrieve.length > 0)
fieldsToRetrieve = fieldsToRetrieve.substring(1);
returnFields = fieldsToRetrieve;
}
/** @type {?} */
var orderBy = (options && options.orderBy) ? options.orderBy : "";
pageSize = (pageSize) ? pageSize : 10;
//return this.uiDocumentService.getAll(this.libraryId, returnFields, page, pageSize, "", this.searchText, orderBy)
return this.uiDocumentService.getAll(this.libraryId, {
returnFields: returnFields,
page: page,
pageSize: pageSize,
orderBy: "",
searchBy: this.searchText,
filter: "",
folderName: ""
})
.pipe(map(results => {
return {
total: results.length,
data: this.mapResults(results)
};
}));
}
/**
* @private
* @param {?} result
* @return {?}
*/
mapResults(result) {
/** @type {?} */
let results = [];
if (result && result.length > 0) {
for (var r = 0; r < result.length; r++) {
/** @type {?} */
let dataRow = result[r];
/** @type {?} */
let objectRow = {};
for (var c = 0; c < this.fieldsToShow.length; c++) {
/** @type {?} */
let field = this.fieldsToShow[c];
objectRow[field.fieldCode] = dataRow.fields[field.fieldCode];
}
results[results.length] = objectRow;
}
}
return results;
}
// In order to use the foundation service we need to map the DataSourceQuery into
// the underlying foundation query
// {
// "filters": [
// {
// "field": "string",
// "operator": "string",
// "value": "string"
// }
// ],
// "logic": "string"
// }
/**
* @private
* @param {?} query
* @return {?}
*/
mapQueryToFilterBy(query) {
/** @type {?} */
let filterBy = {};
if (query && query.Expressions && query.Expressions.length > 0) {
/** @type {?} */
let filters = query.Expressions
.filter(e => e.Value)
.map(e => {
return {
field: e.Field,
value: e.Value
};
});
filterBy = {
filters: filters
};
}
return (filterBy);
}
}
DocumentDataSourceService.decorators = [
{ type: Injectable, args: [{
providedIn: null //'root'
},] }
];
/** @nocollapse */
DocumentDataSourceService.ctorParameters = () => [
{ type: UiDocumentService }
];
/** @nocollapse */ DocumentDataSourceService.ngInjectableDef = i0.defineInjectable({ factory: function DocumentDataSourceService_Factory() { return new DocumentDataSourceService(i0.inject(i1.UiDocumentService)); }, token: DocumentDataSourceService, providedIn: null });
if (false) {
/** @type {?} */
DocumentDataSourceService.prototype.libraryId;
/** @type {?} */
DocumentDataSourceService.prototype.folderName;
/** @type {?} */
DocumentDataSourceService.prototype.includeSelect;
/** @type {?} */
DocumentDataSourceService.prototype.searchText;
/** @type {?} */
DocumentDataSourceService.prototype.fieldsToShow;
/** @type {?} */
DocumentDataSourceService.prototype.searchOptions;
/**
* @type {?}
* @private
*/
DocumentDataSourceService.prototype.uiDocumentService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZGF0YS1zb3VyY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2U1Y29yZS1hbmd1bGFyLXVpLyIsInNvdXJjZXMiOlsibGliL2RhdGFzb3VyY2UvZG9jdW1lbnQtZGF0YS1zb3VyY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUk1RCxPQUFPLEVBQW9CLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUsxQixNQUFNLE9BQU8seUJBQXlCOzs7O0lBU3JDLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBTnhELGVBQVUsR0FBWSxFQUFFLENBQUM7UUFHeEIsaUJBQVksR0FBNEIsSUFBSSxDQUFDO1FBQzlDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBRTtJQUd2QyxDQUFDOzs7O0lBRU0sY0FBYztRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFFO0lBQzlCLENBQUM7Ozs7O0lBRU0saUJBQWlCLENBQUMsT0FBeUI7UUFDakQsSUFBSSxDQUFDLGFBQWEscUJBQU8sT0FBTyxDQUFDLENBQUUsQ0FBQyxRQUFRO0lBQzdDLENBQUM7Ozs7Ozs7OztJQUVNLFVBQVUsQ0FBQyxTQUFrQixFQUFFLFVBQW1CLEVBQUUsYUFBdUIsRUFBRSxZQUFvQyxFQUFFLFVBQWtCO1FBQ3pJLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxD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QUMsRUFBRTtnQkFDVCxPQUFPO29CQUNOLEtBQUssRUFBRyxDQUFDLENBQUMsS0FBSztvQkFDZixLQUFLLEVBQUcsQ0FBQyxDQUFDLEtBQUs7aUJBQ2YsQ0FBQTtZQUNGLENBQUMsQ0FBQztZQUNILFFBQVEsR0FBRztnQkFDVixPQUFPLEVBQUcsT0FBTzthQUNqQixDQUFBO1NBQ0Q7UUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEIsQ0FBQzs7O1lBM0lELFVBQVUsU0FBQztnQkFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDekI7Ozs7WUFiUSxpQkFBaUI7Ozs7O0lBZ0J4Qiw4Q0FBbUI7O0lBQ3BCLCtDQUF5Qjs7SUFDekIsa0RBQXdCOztJQUN4QiwrQ0FBb0I7O0lBQ25CLGlEQUE2Qzs7SUFDOUMsa0RBQXVDOzs7OztJQUUzQixzREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVaURvY3VtZW50U2VydmljZSB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElEYXRhU291cmNlIH0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4vZGF0YS1zb3VyY2Utb3B0aW9ucyc7XG5pbXBvcnQgeyBEYXRhU291cmNlQ29sdW1uLCBEYXRhU291cmNlQ29sdW1uU3RhdHVzIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1jb2x1bW4nO1xuaW1wb3J0IHsgRGF0YVNvdXJjZVF1ZXJ5IH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1xdWVyeSc7XG5pbXBvcnQgeyBEYXRhU291cmNlUmVzdWx0cyB9IGZyb20gJy4vZGF0YS1zb3VyY2UtcmVzdWx0cyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGaWVsZERlZmluaXRpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9maWVsZC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogbnVsbCAvLydyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudERhdGFTb3VyY2VTZXJ2aWNlIGltcGxlbWVudHMgSURhdGFTb3VyY2Uge1xuXG4gIGxpYnJhcnlJZCA6IG51bWJlcjtcblx0Zm9sZGVyTmFtZSA6IHN0cmluZyA9IFwiXCI7XG5cdGluY2x1ZGVTZWxlY3QgOiBib29sZWFuO1xuXHRzZWFyY2hUZXh0IDogc3RyaW5nO1xuICBmaWVsZHNUb1Nob3cgOiBGaWVsZERlZmluaXRpb25Nb2RlbFtdID0gbnVsbDtcblx0c2VhcmNoT3B0aW9uczogRGF0YVNvdXJjZU9wdGlvbnMgPSB7fSA7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSB1aURvY3VtZW50U2VydmljZTogVWlEb2N1bWVudFNlcnZpY2UpIHtcblx0fVxuXG5cdHB1YmxpYyBkZWZhdWx0T3B0aW9ucygpOiBEYXRhU291cmNlT3B0aW9ucyB7XG5cdFx0cmV0dXJuICh0aGlzLnNlYXJjaE9wdGlvbnMpIDtcblx0fVxuXG5cdHB1YmxpYyBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zOkRhdGFTb3VyY2VPcHRpb25zKSB7XG5cdFx0dGhpcy5zZWFyY2hPcHRpb25zID0gey4uLm9wdGlvbnN9IDsgLy8gY2xvbmVcblx0fVxuXG5cdHB1YmxpYyBzZXRMaWJyYXJ5KGxpYnJhcnlJZCA6IG51bWJlciwgZm9sZGVyTmFtZSA6IHN0cmluZywgaW5jbHVkZVNlbGVjdCA6IGJvb2xlYW4sIGZpZWxkc1RvU2hvdzogRmllbGREZWZpbml0aW9uTW9kZWxbXSwgc2VhcmNoVGV4dDogc3RyaW5nKTogRG9jdW1lbnREYXRhU291cmNlU2VydmljZSB7XG4gICAgdGhpcy5saWJyYXJ5SWQgPSBsaWJyYXJ5SWQ7XG5cdFx0dGhpcy5mb2xkZXJOYW1lID0gZm9sZGVyTmFtZTtcblx0XHR0aGlzLmluY2x1ZGVTZWxlY3QgPSBpbmNsdWRlU2VsZWN0O1xuXHRcdHRoaXMuZmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93O1xuXHRcdHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG5cdFx0cmV0dXJuICh0aGlzKVxuXHR9XG5cblx0Y29sdW1ucygpOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VDb2x1bW5bXT4ge1xuXHRcdGxldCBjb2x1bW5zID0gdGhpcy5maWVsZHNUb1Nob3cuZmlsdGVyKGYgPT4gZi5kaXNwbGF5KS5tYXA8RGF0YVNvdXJjZUNvbHVtbj4oc2YgPT4gPERhdGFTb3VyY2VDb2x1bW4+e1xuXHRcdFx0Y29kZTogc2YuZmllbGRDb2RlLFxuXHRcdFx0bGFiZWw6IHNmLm5hbWUsXG5cdFx0XHR0eXBlOiBcIklucHV0XCIsXG5cdFx0XHRzdGF0dXM6IERhdGFTb3VyY2VDb2x1bW5TdGF0dXMuU2VsZWN0ZWRcblx0XHR9KTtcblx0XHRjb2x1bW5zID0gdGhpcy5hZGRPcHRpb25hbENvbHVtbnMoY29sdW1ucyk7XG5cdFx0cmV0dXJuIG9mKGNvbHVtbnMpO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRPcHRpb25hbENvbHVtbnMoY29sdW1uczpEYXRhU291cmNlQ29sdW1uW10pOiBEYXRhU291cmNlQ29sdW1uW10ge1xuXHRcdGlmKHRoaXMuaW5jbHVkZVNlbGVjdClcblx0XHRcdC8vIEFkZCB0byBzdGFydFxuXHRcdFx0Y29sdW1ucy51bnNoaWZ0KDxEYXRhU291cmNlQ29sdW1uPntcblx0XHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRcdGNvZGU6IFwiQWN0aW9uU2VsZWN0XCIsXG5cdFx0XHRcdHR5cGU6IFwiQWN0aW9uU2VsZWN0XCIsXG5cdFx0XHRcdHN0YXR1czogRGF0YVNvdXJjZUNvbHVtblN0YXR1cy5TZWxlY3RlZFxuXHRcdFx0fSk7XG5cdFx0cmV0dXJuIChjb2x1bW5zKSA7XG5cdH1cblxuXHRwdWJsaWMgcmVhZChwYWdlOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIsIG9wdGlvbnNJbjogRGF0YVNvdXJjZU9wdGlvbnMpOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VSZXN1bHRzPiB7XG5cdFx0bGV0IG9wdGlvbnM6IERhdGFTb3VyY2VPcHRpb25zID0ge1xuXHRcdFx0Li4udGhpcy5zZWFyY2hPcHRpb25zLFxuXHRcdFx0Li4ub3B0aW9uc0luXG5cdFx0fVxuXHRcdFxuXHRcdHZhciByZXR1cm5GaWVsZHMgPSBcIlwiO1xuICAgIGlmICh0aGlzLmZpZWxkc1RvU2hvdyAmJiB0eXBlb2YodGhpcy5maWVsZHNUb1Nob3cpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy92YXIgZmllbGRzVG9SZXRyaWV2ZSA9IGZpZWxkc1RvU2hvdy5yZWR1Y2UoKGZpZCwgZnMpID0+IFsgLi4uZmlkLCAuLi5mcy5maWVsZElkIF0sIDxzdHJpbmdbXT4gW10pO1xuICAgICAgLy8uam9pbihcIixcIilcbiAgICAgIHZhciBmaWVsZHNUb1JldHJpZXZlID0gdGhpcy5maWVsZHNUb1Nob3cuZmlsdGVyKGYgPT4gZi5kaXNwbGF5KS5yZWR1Y2UoZnVuY3Rpb24oYSwgYikge3JldHVybiBbYSxiLmZpZWxkSWRdfSwgW10pLnRvU3RyaW5nKCk7XG4gICAgICBpZiAoZmllbGRzVG9SZXRyaWV2ZS5sZW5ndGg+IDApXG4gICAgICAgIGZpZWxkc1RvUmV0cmlldmUgPSBmaWVsZHNUb1JldHJpZXZlLnN1YnN0cmluZygxKTtcbiAgICAgIHJldHVybkZpZWxkcyA9IGZpZWxkc1RvUmV0cmlldmU7XG5cdFx0fVxuXHRcdHZhciBvcmRlckJ5ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlckJ5KSA/IG9wdGlvbnMub3JkZXJCeSA6IFwiXCI7XG5cdFx0XG5cdFx0cGFnZVNpemUgPSAocGFnZVNpemUpID8gcGFnZVNpemUgOiAxMFxuXG5cdFx0Ly9yZXR1cm4gdGhpcy51aURvY3VtZW50U2VydmljZS5nZXRBbGwodGhpcy5saWJyYXJ5SWQsIHJldHVybkZpZWxkcywgcGFnZSwgcGFnZVNpemUsIFwiXCIsIHRoaXMuc2VhcmNoVGV4dCwgb3JkZXJCeSlcblx0XHRyZXR1cm4gdGhpcy51aURvY3VtZW50U2VydmljZS5nZXRBbGwodGhpcy5saWJyYXJ5SWQsIHsgXG5cdFx0XHRyZXR1cm5GaWVsZHM6IHJldHVybkZpZWxkcywgXG5cdFx0XHRwYWdlOiBwYWdlLCBcblx0XHRcdHBhZ2VTaXplOnBhZ2VTaXplLCBcblx0XHRcdG9yZGVyQnk6XCJcIiwgXG5cdFx0XHRzZWFyY2hCeTp0aGlzLnNlYXJjaFRleHQsIFxuXHRcdFx0ZmlsdGVyOiBcIlwiLFxuXHRcdFx0Zm9sZGVyTmFtZTogXCJcIlxuXHRcdH0pXG5cdFx0LnBpcGU8RGF0YVNvdXJjZVJlc3VsdHM+KFxuXHRcdFx0bWFwKHJlc3VsdHMgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRvdGFsOiByZXN1bHRzLmxlbmd0aCxcblx0XHRcdFx0XHRkYXRhOiB0aGlzLm1hcFJlc3VsdHMocmVzdWx0cylcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cbiAgcHJpdmF0ZSBtYXBSZXN1bHRzKHJlc3VsdDogYW55KTogYW55W10ge1xuICAgIGxldCByZXN1bHRzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgZm9yICh2YXIgcjogbnVtYmVyID0gMDsgciA8IHJlc3VsdC5sZW5ndGg7IHIrKykge1xuICAgICAgICBsZXQgZGF0YVJvdzogYW55ID0gcmVzdWx0W3JdO1xuICAgICAgICBsZXQgb2JqZWN0Um93OiBhbnkgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgYzogbnVtYmVyID0gMDsgYyA8IHRoaXMuZmllbGRzVG9TaG93Lmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgbGV0IGZpZWxkID0gdGhpcy5maWVsZHNUb1Nob3dbY107XG4gICAgICAgICAgb2JqZWN0Um93W2ZpZWxkLmZpZWxkQ29kZV0gPSBkYXRhUm93LmZpZWxkc1tmaWVsZC5maWVsZENvZGVdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGhdID0gb2JqZWN0Um93O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0c1xuICB9XG5cblx0Ly8gSW4gb3JkZXIgdG8gdXNlIHRoZSBmb3VuZGF0aW9uIHNlcnZpY2Ugd2UgbmVlZCB0byBtYXAgdGhlIERhdGFTb3VyY2VRdWVyeSBpbnRvIFxuXHQvL1x0dGhlIHVuZGVybHlpbmcgZm91bmRhdGlvbiBxdWVyeVxuXHQvLyBcdHtcblx0Ly8gXHRcdFwiZmlsdGVyc1wiOiBbXG5cdC8vIFx0ICBcdFx0e1xuXHQvLyBcdFx0XHRcdFwiZmllbGRcIjogXCJzdHJpbmdcIixcblx0Ly8gXHRcdFx0XHRcIm9wZXJhdG9yXCI6IFwic3RyaW5nXCIsXG5cdC8vIFx0XHRcdFx0XCJ2YWx1ZVwiOiBcInN0cmluZ1wiXG5cdC8vIFx0ICBcdFx0fVxuXHQvLyBcdFx0XSxcblx0Ly8gXHRcdFwibG9naWNcIjogXCJzdHJpbmdcIlxuXHQvLyBcdH1cblx0cHJpdmF0ZSBtYXBRdWVyeVRvRmlsdGVyQnkocXVlcnk6RGF0YVNvdXJjZVF1ZXJ5KTogYW55IHtcblx0XHRsZXQgZmlsdGVyQnkgPSB7fSA7XG5cdFx0aWYocXVlcnkgJiYgcXVlcnkuRXhwcmVzc2lvbnMgJiYgcXVlcnkuRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0bGV0IGZpbHRlcnMgPSBxdWVyeS5FeHByZXNzaW9uc1xuXHRcdFx0XHQuZmlsdGVyKCBlID0+IGUuVmFsdWUgKVxuXHRcdFx0XHQubWFwKCBlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZmllbGQgOiBlLkZpZWxkLFxuXHRcdFx0XHRcdFx0dmFsdWUgOiBlLlZhbHVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA7XG5cdFx0XHRmaWx0ZXJCeSA9IHtcblx0XHRcdFx0ZmlsdGVycyA6IGZpbHRlcnNcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIChmaWx0ZXJCeSlcblx0fVxufVxuIl19