@angular-generic-table/core
Version:
A generic table component for Angular
223 lines (222 loc) • 23.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Pipe } from '@angular/core';
// unsupported: template constraints.
/**
* @template R
*/
var GtOrderByPipe = /** @class */ (function () {
function GtOrderByPipe() {
/**
* Return property
*/
this.getProperty = function (array, key) {
for (var /** @type {?} */ i = 0; i < array.length; i++) {
if (array[i].objectKey === key) {
return array[i];
}
}
};
}
/**
* @param {?} a
* @param {?} b
* @return {?}
*/
GtOrderByPipe._orderByComparator = /**
* @param {?} a
* @param {?} b
* @return {?}
*/
function (a, b) {
// sort boolean values as strings
if (typeof a === 'boolean') {
a = a.toString();
}
if (typeof b === 'boolean') {
b = b.toString();
}
if (isNaN(parseFloat(a)) ||
!isFinite(a) ||
(isNaN(parseFloat(b)) || !isFinite(b))) {
if (b === null ||
(typeof b === 'undefined' && (a !== null && typeof a !== 'undefined'))) {
return 1;
}
if (a === null ||
(typeof a === 'undefined' && (b !== null && typeof b !== 'undefined'))) {
return -1;
}
// isn't a number so lowercase the string to properly compare
try {
if (a.toLowerCase() < b.toLowerCase()) {
return -1;
}
if (a.toLowerCase() > b.toLowerCase()) {
return 1;
}
}
catch (/** @type {?} */ error) {
return 0;
}
}
else {
// parse strings as numbers to compare properly
if (parseFloat(a) < parseFloat(b)) {
return -1;
}
if (parseFloat(a) > parseFloat(b)) {
return 1;
}
}
return 0; // equal each other
};
/**
* Return sort function
* @param {?} field
* @return {?}
*/
GtOrderByPipe.prototype.getSortFunction = /**
* Return sort function
* @param {?} field
* @return {?}
*/
function (field) {
if (!field) {
// console.log('error trying to sort undefined field');
return false;
}
if (typeof field.sort === 'function') {
return field.sort;
}
else if (typeof field.value === 'function') {
return field.value;
}
else {
return false;
}
};
/**
* @param {?} input
* @param {?} sortByProperties
* @param {?} fields
* @param {?} refreshSorting
* @param {?} refreshData
* @return {?}
*/
GtOrderByPipe.prototype.transform = /**
* @param {?} input
* @param {?} sortByProperties
* @param {?} fields
* @param {?} refreshSorting
* @param {?} refreshData
* @return {?}
*/
function (input, sortByProperties, fields, refreshSorting, refreshData) {
var _this = this;
if (!Array.isArray(input) || input === null) {
return input;
}
if (!Array.isArray(sortByProperties) ||
(Array.isArray(sortByProperties) && sortByProperties.length === 1)) {
var /** @type {?} */ propertyToCheck = sortByProperties[0];
var /** @type {?} */ desc_1 = propertyToCheck.substr(0, 1) === '-';
// basic array
if (!propertyToCheck ||
propertyToCheck === '-' ||
propertyToCheck === '+') {
return !desc_1 ? input.sort() : input.sort().reverse();
}
else {
var /** @type {?} */ property_1 = propertyToCheck.substr(0, 1) === '+' ||
propertyToCheck.substr(0, 1) === '-'
? propertyToCheck.substr(1)
: propertyToCheck;
// check if custom sort function is defined
var /** @type {?} */ sortFunction_1 = this.getSortFunction(this.getProperty(fields, property_1));
// console.log(property);
return input.sort(function (a, b) {
// use custom sort function if one is defined
var /** @type {?} */ propertyA = sortFunction_1 === false
? property_1 === '$$gtRowId'
? +a.$$gtRowId.split('_')[0]
: a[property_1]
: sortFunction_1(a);
var /** @type {?} */ propertyB = sortFunction_1 === false
? property_1 === '$$gtRowId'
? +b.$$gtRowId.split('_')[0]
: b[property_1]
: sortFunction_1(b);
// if both values are undefined...
if (typeof propertyA === 'undefined' &&
typeof propertyB === 'undefined') {
// ...skip comparison
return;
}
return !desc_1
? GtOrderByPipe._orderByComparator(propertyA, propertyB)
: -GtOrderByPipe._orderByComparator(propertyA, propertyB);
});
}
}
else {
// loop over property of the array in order and sort
return input.sort(function (a, b) {
// console.log('multiple');
for (var /** @type {?} */ i = 0; i < sortByProperties.length; i++) {
var /** @type {?} */ desc = sortByProperties[i].substr(0, 1) === '-';
var /** @type {?} */ property = sortByProperties[i].substr(0, 1) === '+' ||
sortByProperties[i].substr(0, 1) === '-'
? sortByProperties[i].substr(1)
: sortByProperties[i];
// console.log(property);
// check if custom sort function is defined
var /** @type {?} */ sortFunction = _this.getSortFunction(_this.getProperty(fields, property));
// use custom sort function if one is defined
var /** @type {?} */ propertyA = sortFunction === false
? property === '$$gtRowId'
? +a.$$gtRowId.split('_')[0]
: a[property]
: sortFunction(a);
var /** @type {?} */ propertyB = sortFunction === false
? property === '$$gtRowId'
? +b.$$gtRowId.split('_')[0]
: b[property]
: sortFunction(b);
var /** @type {?} */ comparison = !desc
? GtOrderByPipe._orderByComparator(propertyA, propertyB)
: -GtOrderByPipe._orderByComparator(propertyA, propertyB);
// don't return 0 yet in case of needing to sort by next property
if (comparison !== 0) {
return comparison;
}
}
return 0; // equal each other
});
}
};
GtOrderByPipe.decorators = [
{ type: Pipe, args: [{
name: 'gtOrderBy'
},] },
];
return GtOrderByPipe;
}());
export { GtOrderByPipe };
function GtOrderByPipe_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
GtOrderByPipe.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
GtOrderByPipe.ctorParameters;
/**
* Return property
* @type {?}
*/
GtOrderByPipe.prototype.getProperty;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Qtb3JkZXItYnkucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhbmd1bGFyLWdlbmVyaWMtdGFibGUvY29yZS8iLCJzb3VyY2VzIjpbInBpcGVzL2d0LW9yZGVyLWJ5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OzJCQTREN0IsVUFBUyxLQUFpQixFQUFFLEdBQVc7WUFDNUQsR0FBRyxDQUFDLENBQUMscUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN2QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2hCO2FBQ0Q7U0FDRDs7Ozs7OztJQTFETSxnQ0FBa0I7Ozs7O0lBQXpCLFVBQTBCLENBQU0sRUFBRSxDQUFNOztRQUV2QyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7UUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7UUFFRCxFQUFFLENBQUMsQ0FDRixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN0QyxDQUFDLENB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QixNQUFNLENBQUMsVUFBVSxDQUFDO3FCQUNsQjtpQkFDRDtnQkFFRCxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ1QsQ0FBQyxDQUFDO1NBQ0g7S0FDRDs7Z0JBN0xELElBQUksU0FBQztvQkFDTCxJQUFJLEVBQUUsV0FBVztpQkFDakI7O3dCQU5EOztTQU9hLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHdENvbmZpZ0ZpZWxkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ndC1jb25maWctZmllbGQnO1xuaW1wb3J0IHsgR3RSb3cgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2d0LXJvdyc7XG5cbkBQaXBlKHtcblx0bmFtZTogJ2d0T3JkZXJCeSdcbn0pXG5leHBvcnQgY2xhc3MgR3RPcmRlckJ5UGlwZTxSIGV4dGVuZHMgR3RSb3c+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cdHN0YXRpYyBfb3JkZXJCeUNvbXBhcmF0b3IoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xuXHRcdC8vIHNvcnQgYm9vbGVhbiB2YWx1ZXMgYXMgc3RyaW5nc1xuXHRcdGlmICh0eXBlb2YgYSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRhID0gYS50b1N0cmluZygpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGIgPT09ICdib29sZWFuJykge1xuXHRcdFx0YiA9IGIudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRpc05hTihwYXJzZUZsb2F0KGEpKSB8fFxuXHRcdFx0IWlzRmluaXRlKGEpIHx8XG5cdFx0XHQoaXNOYU4ocGFyc2VGbG9hdChiKSkgfHwgIWlzRmluaXRlKGIpKVxuXHRcdCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRiID09PSBudWxsIHx8XG5cdFx0XHRcdCh0eXBlb2YgYiA9PT0gJ3VuZGVmaW5lZCcgJiYgKGEgIT09IG51bGwgJiYgdHlwZW9mIGEgIT09ICd1bmRlZmluZWQnKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0YSA9PT0gbnVsbCB8fFxuXHRcdFx0XHQodHlwZW9mIGEgPT09ICd1bmRlZmluZWQnICYmIChiICE9PSBudWxsICYmIHR5cGVvZiBiICE9PSAndW5kZWZpbmVkJykpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBpc24ndCBhIG51bWJlciBzbyBsb3dlcmNhc2UgdGhlIHN0cmluZyB0byBwcm9wZXJseSBjb21wYXJlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoYS50b0xvd2VyQ2FzZSgpIDwgYi50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChhLnRvTG93ZXJDYXNlKCkgPiBiLnRvTG93ZXJDYXNlKCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHBhcnNlIHN0cmluZ3MgYXMgbnVtYmVycyB0byBjb21wYXJlIHByb3Blcmx5XG5cdFx0XHRpZiAocGFyc2VGbG9hdChhKSA8IHBhcnNlRmxvYXQoYikpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcnNlRmxvYXQoYSkgPiBwYXJzZUZsb2F0KGIpKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAwOyAvLyBlcXVhbCBlYWNoIG90aGVyXG5cdH1cblxuXHQvKiogUmV0dXJuIHByb3BlcnR5ICovXG5cdHByaXZhdGUgZ2V0UHJvcGVydHkgPSBmdW5jdGlvbihhcnJheTogQXJyYXk8YW55Piwga2V5OiBzdHJpbmcpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYXJyYXlbaV0ub2JqZWN0S2V5ID09PSBrZXkpIHtcblx0XHRcdFx0cmV0dXJuIGFycmF5W2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKiogUmV0dXJuIHNvcnQgZnVuY3Rpb24gKi9cblx0cHJpdmF0ZSBnZXRTb3J0RnVuY3Rpb24oZmllbGQ6IGFueSkge1xuXHRcdGlmICghZmllbGQpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdlcnJvciB0cnlpbmcgdG8gc29ydCB1bmRlZmluZWQgZmllbGQnKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBmaWVsZC5zb3J0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gZmllbGQuc29ydDtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIGZpZWxkLnZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0dHJhbnNmb3JtKFxuXHRcdGlucHV0OiBhbnksXG5cdFx0c29ydEJ5UHJvcGVydGllczogQXJyYXk8c3RyaW5nPixcblx0XHRmaWVsZHM6IEd0Q29uZmlnRmllbGQ8UiwgYW55PltdLFxuXHRcdHJlZnJlc2hTb3J0aW5nOiBib29sZWFuLFxuXHRcdHJlZnJlc2hEYXRhOiBudW1iZXJcblx0KTogYW55IHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IGlucHV0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gaW5wdXQ7XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdCFBcnJheS5pc0FycmF5KHNvcnRCeVByb3BlcnRpZXMpIHx8XG5cdFx0XHQoQXJyYXkuaXNBcnJheShzb3J0QnlQcm9wZXJ0aWVzKSAmJiBzb3J0QnlQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VG9DaGVjazogc3RyaW5nID0gc29ydEJ5UHJvcGVydGllc1swXTtcblx0XHRcdGNvbnN0IGRlc2MgPSBwcm9wZXJ0eVRvQ2hlY2suc3Vic3RyKDAsIDEpID09PSAnLSc7XG5cblx0XHRcdC8vIGJhc2ljIGFycmF5XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFwcm9wZXJ0eVRvQ2hlY2sgfHxcblx0XHRcdFx0cHJvcGVydHlUb0NoZWNrID09PSAnLScgfHxcblx0XHRcdFx0cHJvcGVydHlUb0NoZWNrID09PSAnKydcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gIWRlc2MgPyBpbnB1dC5zb3J0KCkgOiBpbnB1dC5zb3J0KCkucmV2ZXJzZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHk6IHN0cmluZyA9XG5cdFx0XHRcdFx0cHJvcGVydHlUb0NoZWNrLnN1YnN0cigwLCAxKSA9PT0gJysnIHx8XG5cdFx0XHRcdFx0cHJvcGVydHlUb0NoZWNrLnN1YnN0cigwLCAxKSA9PT0gJy0nXG5cdFx0XHRcdFx0XHQ/IHByb3BlcnR5VG9DaGVjay5zdWJzdHIoMSlcblx0XHRcdFx0XHRcdDogcHJvcGVydHlUb0NoZWNrO1xuXG5cdFx0XHRcdC8vIGNoZWNrIGlmIGN1c3RvbSBzb3J0IGZ1bmN0aW9uIGlzIGRlZmluZWRcblx0XHRcdFx0Y29uc3Qgc29ydEZ1bmN0aW9uOiBhbnkgPSB0aGlzLmdldFNvcnRGdW5jdGlvbihcblx0XHRcdFx0XHR0aGlzLmdldFByb3BlcnR5KGZpZWxkcywgcHJvcGVydHkpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gY29uc29sZS5sb2cocHJvcGVydHkpO1xuXHRcdFx0XHRyZXR1cm4gaW5wdXQuc29ydChmdW5jdGlvbihhOiBhbnksIGI6IGFueSkge1xuXHRcdFx0XHRcdC8vIHVzZSBjdXN0b20gc29ydCBmdW5jdGlvbiBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5QSA9XG5cdFx0XHRcdFx0XHRzb3J0RnVuY3Rpb24gPT09IGZhbHNlXG5cdFx0XHRcdFx0XHRcdD8gcHJvcGVydHkgPT09ICckJGd0Um93SWQnXG5cdFx0XHRcdFx0XHRcdFx0PyArYS4kJGd0Um93SWQuc3BsaXQoJ18nKVswXVxuXHRcdFx0XHRcdFx0XHRcdDogYVtwcm9wZXJ0eV1cblx0XHRcdFx0XHRcdFx0OiBzb3J0RnVuY3Rpb24oYSk7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlCID1cblx0XHRcdFx0XHRcdHNvcnRGdW5jdGlvbiA9PT0gZmFsc2Vcblx0XHRcdFx0XHRcdFx0PyBwcm9wZXJ0eSA9PT0gJyQkZ3RSb3dJZCdcblx0XHRcdFx0XHRcdFx0XHQ/ICtiLiQkZ3RSb3dJZC5zcGxpdCgnXycpWzBdXG5cdFx0XHRcdFx0XHRcdFx0OiBiW3Byb3BlcnR5XVxuXHRcdFx0XHRcdFx0XHQ6IHNvcnRGdW5jdGlvbihiKTtcblxuXHRcdFx0XHRcdC8vIGlmIGJvdGggdmFsdWVzIGFyZSB1bmRlZmluZWQuLi5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHR0eXBlb2YgcHJvcGVydHlBID09PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0XHRcdFx0dHlwZW9mIHByb3BlcnR5QiA9PT0gJ3VuZGVmaW5lZCdcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIC4uLnNraXAgY29tcGFyaXNvblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gIWRlc2Ncblx0XHRcdFx0XHRcdD8gR3RPcmRlckJ5UGlwZS5fb3JkZXJCeUNvbXBhcmF0b3IocHJvcGVydHlBLCBwcm9wZXJ0eUIpXG5cdFx0XHRcdFx0XHQ6IC1HdE9yZGVyQnlQaXBlLl9vcmRlckJ5Q29tcGFyYXRvcihwcm9wZXJ0eUEsIHByb3BlcnR5Qik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBsb29wIG92ZXIgcHJvcGVydHkgb2YgdGhlIGFycmF5IGluIG9yZGVyIGFuZCBzb3J0XG5cdFx0XHRyZXR1cm4gaW5wdXQuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ211bHRpcGxlJyk7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc29ydEJ5UHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBzb3J0QnlQcm9wZXJ0aWVzW2ldLnN1YnN0cigwLCAxKSA9PT0gJy0nO1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5ID1cblx0XHRcdFx0XHRcdHNvcnRCeVByb3BlcnRpZXNbaV0uc3Vic3RyKDAsIDEpID09PSAnKycgfHxcblx0XHRcdFx0XHRcdHNvcnRCeVByb3BlcnRpZXNbaV0uc3Vic3RyKDAsIDEpID09PSAnLSdcblx0XHRcdFx0XHRcdFx0PyBzb3J0QnlQcm9wZXJ0aWVzW2ldLnN1YnN0cigxKVxuXHRcdFx0XHRcdFx0XHQ6IHNvcnRCeVByb3BlcnRpZXNbaV07XG5cblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgY3VzdG9tIHNvcnQgZnVuY3Rpb24gaXMgZGVmaW5lZFxuXHRcdFx0XHRcdGNvbnN0IHNvcnRGdW5jdGlvbjogYW55ID0gdGhpcy5nZXRTb3J0RnVuY3Rpb24oXG5cdFx0XHRcdFx0XHR0aGlzLmdldFByb3BlcnR5KGZpZWxkcywgcHJvcGVydHkpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdC8vIHVzZSBjdXN0b20gc29ydCBmdW5jdGlvbiBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5QSA9XG5cdFx0XHRcdFx0XHRzb3J0RnVuY3Rpb24gPT09IGZhbHNlXG5cdFx0XHRcdFx0XHRcdD8gcHJvcGVydHkgPT09ICckJGd0Um93SWQnXG5cdFx0XHRcdFx0XHRcdFx0PyArYS4kJGd0Um93SWQuc3BsaXQoJ18nKVswXVxuXHRcdFx0XHRcdFx0XHRcdDogYVtwcm9wZXJ0eV1cblx0XHRcdFx0XHRcdFx0OiBzb3J0RnVuY3Rpb24oYSk7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlCID1cblx0XHRcdFx0XHRcdHNvcnRGdW5jdGlvbiA9PT0gZmFsc2Vcblx0XHRcdFx0XHRcdFx0PyBwcm9wZXJ0eSA9PT0gJyQkZ3RSb3dJZCdcblx0XHRcdFx0XHRcdFx0XHQ/ICtiLiQkZ3RSb3dJZC5zcGxpdCgnXycpWzBdXG5cdFx0XHRcdFx0XHRcdFx0OiBiW3Byb3BlcnR5XVxuXHRcdFx0XHRcdFx0XHQ6IHNvcnRGdW5jdGlvbihiKTtcblxuXHRcdFx0XHRcdGNvbnN0IGNvbXBhcmlzb24gPSAhZGVzY1xuXHRcdFx0XHRcdFx0PyBHdE9yZGVyQnlQaXBlLl9vcmRlckJ5Q29tcGFyYXRvcihwcm9wZXJ0eUEsIHByb3BlcnR5Qilcblx0XHRcdFx0XHRcdDogLUd0T3JkZXJCeVBpcGUuX29yZGVyQnlDb21wYXJhdG9yKHByb3BlcnR5QSwgcHJvcGVydHlCKTtcblxuXHRcdFx0XHRcdC8vIGRvbid0IHJldHVybiAwIHlldCBpbiBjYXNlIG9mIG5lZWRpbmcgdG8gc29ydCBieSBuZXh0IHByb3BlcnR5XG5cdFx0XHRcdFx0aWYgKGNvbXBhcmlzb24gIT09IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb21wYXJpc29uO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAwOyAvLyBlcXVhbCBlYWNoIG90aGVyXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==