@angular-generic-table/core
Version:
A generic table component for Angular
173 lines (172 loc) • 17.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Pipe } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { GtHighlightPipe } from './gt-highlight.pipe';
// unsupported: template constraints.
/**
* @template R
*/
export class GtRenderPipe {
/**
* @param {?} sanitizer
* @param {?} gtHighlightPipe
*/
constructor(sanitizer, gtHighlightPipe) {
this.sanitizer = sanitizer;
this.gtHighlightPipe = gtHighlightPipe;
/**
* Sort by column order
*/
this.getColumnOrder = function (a, b) {
if (a.columnOrder < b.columnOrder) {
return -1;
}
if (a.columnOrder > b.columnOrder || typeof a.columnOrder === 'undefined') {
return 1;
}
return 0;
};
/**
* Sort by length
*/
this.getOrderByLength = function (a, b) {
return b.length - a.length;
};
/**
* Return property
*/
this.getProperty = function (array, key) {
for (let /** @type {?} */ i = 0; i < array.length; i++) {
if (array[i].objectKey === key) {
return array[i];
}
}
};
}
/**
* @param {?} row
* @param {?} settings
* @param {?} fields
* @param {?} updated
* @param {?} loading
* @param {?=} highlight
* @param {?=} searchString
* @return {?}
*/
transform(row, settings, fields, updated, loading, highlight = false, searchString) {
// let arr = [{"temp":123,"name":"happy"},{"temp":456,"name":"dfgdfg"},{"temp":789,"name":"asdasd"}];
// console.log(arr,arr.map(function(item){return item.temp}));
// console.log(settings.map('objectKey'));
// console.log('render');
const /** @type {?} */ columns = [];
for (let /** @type {?} */ i = 0; i < settings.length; i++) {
if (settings[i].visible !== false && settings[i].enabled !== false) {
columns.push(settings[i].objectKey);
}
}
for (let /** @type {?} */ i = 0; i < fields.length; i++) {
// console.log(!row[fields[i].objectKey]);
if (fields[i].value &&
typeof fields[i].value === 'function' &&
!row.hasOwnProperty(fields[i].objectKey)) {
row[fields[i].objectKey] = loading ? '' : fields[i].value(row);
}
}
// console.log(row);
const /** @type {?} */ keys = [];
for (const /** @type {?} */ key in row) {
// console.log(key);
if (columns.indexOf(key) !== -1) {
let /** @type {?} */ fieldSetting;
for (let /** @type {?} */ i = 0; i < fields.length; i++) {
if (fields[i].objectKey === key) {
fieldSetting = fields[i];
// console.log(fieldSetting);
}
}
const /** @type {?} */ columnObject = {
objectKey: key,
sortValue: row[key]
};
// add component if defined
if (fieldSetting.columnComponent) {
columnObject.columnComponent = fieldSetting.columnComponent;
}
if (loading) {
columnObject.renderValue = row[key] !== null ? row[key] : '';
}
else if (highlight &&
searchString &&
this.getProperty(settings, key).search !== false) {
columnObject.renderValue =
fieldSetting.render && typeof fieldSetting.render === 'function'
? this.gtHighlightPipe.transform(fieldSetting.render(row), searchString)
: this.gtHighlightPipe.transform(row[key] !== null ? row[key] : '', searchString);
}
else {
columnObject.renderValue =
fieldSetting.render && typeof fieldSetting.render === 'function'
? this.sanitizer.bypassSecurityTrustHtml(fieldSetting.render(row))
: row[key] !== null
? row[key]
: '';
}
if (fieldSetting.click && typeof fieldSetting.click === 'function') {
columnObject.click = fieldSetting.click;
}
if (fieldSetting.expand) {
columnObject.expand = fieldSetting.expand;
}
keys.push(columnObject);
}
}
keys.sort(function (a, b) {
return columns.indexOf(a.objectKey) < columns.indexOf(b.objectKey)
? -1
: 1;
});
return keys;
}
}
GtRenderPipe.decorators = [
{ type: Pipe, args: [{
name: 'gtRender'
},] },
];
/** @nocollapse */
GtRenderPipe.ctorParameters = () => [
{ type: DomSanitizer, },
{ type: GtHighlightPipe, },
];
function GtRenderPipe_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
GtRenderPipe.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
GtRenderPipe.ctorParameters;
/**
* Sort by column order
* @type {?}
*/
GtRenderPipe.prototype.getColumnOrder;
/**
* Sort by length
* @type {?}
*/
GtRenderPipe.prototype.getOrderByLength;
/**
* Return property
* @type {?}
*/
GtRenderPipe.prototype.getProperty;
/** @type {?} */
GtRenderPipe.prototype.sanitizer;
/** @type {?} */
GtRenderPipe.prototype.gtHighlightPipe;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtcmVuZGVyLnBpcGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYW5ndWxhci1nZW5lcmljLXRhYmxlL2NvcmUvIiwic291cmNlcyI6WyJwaXBlcy9ndC1yZW5kZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFLdEQsTUFBTTs7Ozs7SUFDTCxZQUNTLFdBQ0E7UUFEQSxjQUFTLEdBQVQsU0FBUztRQUNULG9CQUFlLEdBQWYsZUFBZTs7Ozs4QkFLQyxVQUFTLENBQWtCLEVBQUUsQ0FBa0I7WUFDdkUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDVDtZQUNELE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDVDs7OztnQ0FHMEIsVUFBUyxDQUFNLEVBQUUsQ0FBTTtZQUNqRCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQzNCOzs7OzJCQUdxQixVQUFTLEtBQWlCLEVBQUUsR0FBVztZQUM1RCxHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEI7YUFDRDtTQUNEO0tBMUJHOzs7Ozs7Ozs7OztJQTRCSixTQUFTLENBQ1IsR0FBUSxFQUNSLFFBQWdDLEVBQ2hDLE1BQW9DLEVBQ3BDLE9BQWdCLEVBQ2hCLE9BQWdCLEVBQ2hCLFlBQXFCLEtBQUssRUFDMUIsWUFBcUI7Ozs7O1FBT3JCLHVCQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Q7UUFFRCxHQUFHLENBQUMsQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7O1lBRXhDLEVBQUUsQ0FBQyxDQUNGLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNmLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVO2dCQUNyQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMvRDtTQUNEOztRQUVELHVCQUFNLElBQUksR0FBZSxFQUFFLENBQUM7UUFDNUIsR0FBRyxDQUFDLENBQUMsdUJBQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1lBRXZCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxxQkFBSSxZQUFZLENBQUM7Z0JBQ2pCLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDeEMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOztxQkFFekI7aUJBQ0Q7Z0JBRUQsdUJBQU0sWUFBWSxHQUEwQjtvQkFDM0MsU0FBUyxFQUFFLEdBQUc7b0JBQ2QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7aUJBQ25CLENBQUM7O2dCQUdGLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxZQUFZLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7aUJBQzVEO2dCQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ2IsWUFBWSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDN0Q7Z0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNULFNBQVM7b0JBQ1QsWUFBWTtvQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FDNUMsQ0FBQyxDQUFDLENBQUM7b0JBQ0YsWUFBWSxDQUFDLFdBQVc7d0JBQ3ZCLFlBQVksQ0FBQyxNQUFNLElBQUksT0FBTyxZQUFZLENBQUMsTUFBTSxLQUFLLFVBQVU7NEJBQy9ELENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDOUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFDeEIsWUFBWSxDQUNYOzRCQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDOUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ2pDLFlBQVksQ0FDWCxDQUFDO2lCQUNOO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNQLFlBQVksQ0FBQyxXQUFXO3dCQUN2QixZQUFZLENBQUMsTUFBTSxJQUFJLE9BQU8sWUFBWSxDQUFDLE1BQU0sS0FBSyxVQUFVOzRCQUMvRCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNsRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUk7Z0NBQ2xCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dDQUNWLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ1I7Z0JBRUQsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxPQUFPLFlBQVksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDcEUsWUFBWSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO2lCQUN4QztnQkFDRCxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDekIsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2lCQUMxQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hCO1NBQ0Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVMsQ0FBTSxFQUFFLENBQU07WUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ0wsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQztLQUNaOzs7WUFwSUQsSUFBSSxTQUFDO2dCQUNMLElBQUksRUFBRSxVQUFVO2FBQ2hCOzs7O1lBUFEsWUFBWTtZQUdaLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHdENvbmZpZ1NldHRpbmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2d0LWNvbmZpZy1zZXR0aW5nJztcbmltcG9ydCB7IEd0Q29uZmlnRmllbGQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2d0LWNvbmZpZy1maWVsZCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEd0Um93IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ndC1yb3cnO1xuaW1wb3J0IHsgR3RSZW5kZXJGaWVsZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3QtcmVuZGVyLWZpZWxkJztcbmltcG9ydCB7IEd0SGlnaGxpZ2h0UGlwZSB9IGZyb20gJy4vZ3QtaGlnaGxpZ2h0LnBpcGUnO1xuXG5AUGlwZSh7XG5cdG5hbWU6ICdndFJlbmRlcidcbn0pXG5leHBvcnQgY2xhc3MgR3RSZW5kZXJQaXBlPFIgZXh0ZW5kcyBHdFJvdz4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcblx0XHRwcml2YXRlIGd0SGlnaGxpZ2h0UGlwZTogR3RIaWdobGlnaHRQaXBlXG5cdCkge31cblxuXHQvLyBUT0RPOiBtb3ZlIHRvIGhlbHBlciBmdW5jdGlvbnNcblx0LyoqIFNvcnQgYnkgY29sdW1uIG9yZGVyICovXG5cdHByaXZhdGUgZ2V0Q29sdW1uT3JkZXIgPSBmdW5jdGlvbihhOiBHdENvbmZpZ1NldHRpbmcsIGI6IEd0Q29uZmlnU2V0dGluZykge1xuXHRcdGlmIChhLmNvbHVtbk9yZGVyIDwgYi5jb2x1bW5PcmRlcikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoYS5jb2x1bW5PcmRlciA+IGIuY29sdW1uT3JkZXIgfHwgdHlwZW9mIGEuY29sdW1uT3JkZXIgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH07XG5cblx0LyoqIFNvcnQgYnkgbGVuZ3RoICovXG5cdHByaXZhdGUgZ2V0T3JkZXJCeUxlbmd0aCA9IGZ1bmN0aW9uKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG5cdH07XG5cblx0LyoqIFJldHVybiBwcm9wZXJ0eSAqL1xuXHRwcml2YXRlIGdldFByb3BlcnR5ID0gZnVuY3Rpb24oYXJyYXk6IEFycmF5PGFueT4sIGtleTogc3RyaW5nKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFycmF5W2ldLm9iamVjdEtleSA9PT0ga2V5KSB7XG5cdFx0XHRcdHJldHVybiBhcnJheVtpXTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dHJhbnNmb3JtKFxuXHRcdHJvdzogYW55LFxuXHRcdHNldHRpbmdzOiBBcnJheTxHdENvbmZpZ1NldHRpbmc+LFxuXHRcdGZpZWxkczogQXJyYXk8R3RDb25maWdGaWVsZDxSLCBhbnk+Pixcblx0XHR1cGRhdGVkOiBib29sZWFuLFxuXHRcdGxvYWRpbmc6IGJvb2xlYW4sXG5cdFx0aGlnaGxpZ2h0OiBib29sZWFuID0gZmFsc2UsXG5cdFx0c2VhcmNoU3RyaW5nPzogc3RyaW5nXG5cdCk6IEFycmF5PEd0UmVuZGVyRmllbGQ8UiwgYW55Pj4ge1xuXHRcdC8vIGxldCBhcnIgPSBbe1widGVtcFwiOjEyMyxcIm5hbWVcIjpcImhhcHB5XCJ9LHtcInRlbXBcIjo0NTYsXCJuYW1lXCI6XCJkZmdkZmdcIn0se1widGVtcFwiOjc4OSxcIm5hbWVcIjpcImFzZGFzZFwifV07XG5cdFx0Ly8gY29uc29sZS5sb2coYXJyLGFyci5tYXAoZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGl0ZW0udGVtcH0pKTtcblx0XHQvLyBjb25zb2xlLmxvZyhzZXR0aW5ncy5tYXAoJ29iamVjdEtleScpKTtcblxuXHRcdC8vIGNvbnNvbGUubG9nKCdyZW5kZXInKTtcblx0XHRjb25zdCBjb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHNldHRpbmdzW2ldLnZpc2libGUgIT09IGZhbHNlICYmIHNldHRpbmdzW2ldLmVuYWJsZWQgIT09IGZhbHNlKSB7XG5cdFx0XHRcdGNvbHVtbnMucHVzaChzZXR0aW5nc1tpXS5vYmplY3RLZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyghcm93W2ZpZWxkc1tpXS5vYmplY3RLZXldKTtcblx0XHRcdGlmIChcblx0XHRcdFx0ZmllbGRzW2ldLnZhbHVlICYmXG5cdFx0XHRcdHR5cGVvZiBmaWVsZHNbaV0udmFsdWUgPT09ICdmdW5jdGlvbicgJiZcblx0XHRcdFx0IXJvdy5oYXNPd25Qcm9wZXJ0eShmaWVsZHNbaV0ub2JqZWN0S2V5KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJvd1tmaWVsZHNbaV0ub2JqZWN0S2V5XSA9IGxvYWRpbmcgPyAnJyA6IGZpZWxkc1tpXS52YWx1ZShyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBjb25zb2xlLmxvZyhyb3cpO1xuXHRcdGNvbnN0IGtleXM6IEFycmF5PGFueT4gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKGtleSk7XG5cdFx0XHRpZiAoY29sdW1ucy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG5cdFx0XHRcdGxldCBmaWVsZFNldHRpbmc7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGZpZWxkc1tpXS5vYmplY3RLZXkgPT09IGtleSkge1xuXHRcdFx0XHRcdFx0ZmllbGRTZXR0aW5nID0gZmllbGRzW2ldO1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZmllbGRTZXR0aW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjb2x1bW5PYmplY3Q6IEd0UmVuZGVyRmllbGQ8UiwgYW55PiA9IHtcblx0XHRcdFx0XHRvYmplY3RLZXk6IGtleSxcblx0XHRcdFx0XHRzb3J0VmFsdWU6IHJvd1trZXldXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gYWRkIGNvbXBvbmVudCBpZiBkZWZpbmVkXG5cdFx0XHRcdGlmIChmaWVsZFNldHRpbmcuY29sdW1uQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LmNvbHVtbkNvbXBvbmVudCA9IGZpZWxkU2V0dGluZy5jb2x1bW5Db21wb25lbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobG9hZGluZykge1xuXHRcdFx0XHRcdGNvbHVtbk9iamVjdC5yZW5kZXJWYWx1ZSA9IHJvd1trZXldICE9PSBudWxsID8gcm93W2tleV0gOiAnJztcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRoaWdobGlnaHQgJiZcblx0XHRcdFx0XHRzZWFyY2hTdHJpbmcgJiZcblx0XHRcdFx0XHR0aGlzLmdldFByb3BlcnR5KHNldHRpbmdzLCBrZXkpLnNlYXJjaCAhPT0gZmFsc2Vcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LnJlbmRlclZhbHVlID1cblx0XHRcdFx0XHRcdGZpZWxkU2V0dGluZy5yZW5kZXIgJiYgdHlwZW9mIGZpZWxkU2V0dGluZy5yZW5kZXIgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0XHRcdFx0PyB0aGlzLmd0SGlnaGxpZ2h0UGlwZS50cmFuc2Zvcm0oXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFNldHRpbmcucmVuZGVyKHJvdyksXG5cdFx0XHRcdFx0XHRcdFx0XHRzZWFyY2hTdHJpbmdcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5ndEhpZ2hsaWdodFBpcGUudHJhbnNmb3JtKFxuXHRcdFx0XHRcdFx0XHRcdFx0cm93W2tleV0gIT09IG51bGwgPyByb3dba2V5XSA6ICcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VhcmNoU3RyaW5nXG5cdFx0XHRcdFx0XHRcdCAgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2x1bW5PYmplY3QucmVuZGVyVmFsdWUgPVxuXHRcdFx0XHRcdFx0ZmllbGRTZXR0aW5nLnJlbmRlciAmJiB0eXBlb2YgZmllbGRTZXR0aW5nLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGZpZWxkU2V0dGluZy5yZW5kZXIocm93KSlcblx0XHRcdFx0XHRcdFx0OiByb3dba2V5XSAhPT0gbnVsbFxuXHRcdFx0XHRcdFx0XHRcdD8gcm93W2tleV1cblx0XHRcdFx0XHRcdFx0XHQ6ICcnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpZWxkU2V0dGluZy5jbGljayAmJiB0eXBlb2YgZmllbGRTZXR0aW5nLmNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LmNsaWNrID0gZmllbGRTZXR0aW5nLmNsaWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmaWVsZFNldHRpbmcuZXhwYW5kKSB7XG5cdFx0XHRcdFx0Y29sdW1uT2JqZWN0LmV4cGFuZCA9IGZpZWxkU2V0dGluZy5leHBhbmQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRrZXlzLnB1c2goY29sdW1uT2JqZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRrZXlzLnNvcnQoZnVuY3Rpb24oYTogYW55LCBiOiBhbnkpIHtcblx0XHRcdHJldHVybiBjb2x1bW5zLmluZGV4T2YoYS5vYmplY3RLZXkpIDwgY29sdW1ucy5pbmRleE9mKGIub2JqZWN0S2V5KVxuXHRcdFx0XHQ/IC0xXG5cdFx0XHRcdDogMTtcblx0XHR9KTtcblx0XHRyZXR1cm4ga2V5cztcblx0fVxufVxuIl19