@angular-generic-table/core 5.0.0-rc.13 → 5.0.0-rc.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/core.component.mjs +37 -13
- package/esm2020/lib/core.module.mjs +11 -8
- package/esm2020/lib/core.service.mjs +3 -3
- package/esm2020/lib/gt-delta/gt-delta.component.mjs +95 -73
- package/esm2020/lib/models/table-column.interface.mjs +1 -1
- package/esm2020/lib/models/table-config.interface.mjs +1 -1
- package/esm2020/lib/models/table-events.interface.mjs +1 -1
- package/esm2020/lib/models/table-meta.interface.mjs +1 -1
- package/esm2020/lib/models/table-row.interface.mjs +1 -1
- package/esm2020/lib/pagination/pagination.component.mjs +6 -6
- package/esm2020/lib/pagination/pagination.module.mjs +6 -7
- package/esm2020/lib/pipes/capital-case.pipe.mjs +5 -4
- package/esm2020/lib/pipes/dash-case.pipe.mjs +5 -4
- package/esm2020/lib/pipes/dynamic.pipe.mjs +5 -4
- package/esm2020/lib/pipes/highlight.pipe.mjs +5 -4
- package/esm2020/lib/pipes/sort-class.pipe.mjs +5 -4
- package/esm2020/lib/utilities/utilities.mjs +72 -2
- package/fesm2015/angular-generic-table-core.mjs +274 -144
- package/fesm2015/angular-generic-table-core.mjs.map +1 -1
- package/fesm2020/angular-generic-table-core.mjs +266 -144
- package/fesm2020/angular-generic-table-core.mjs.map +1 -1
- package/lib/core.component.d.ts +12 -6
- package/lib/core.module.d.ts +9 -9
- package/lib/gt-delta/gt-delta.component.d.ts +18 -6
- package/lib/models/table-column.interface.d.ts +4 -2
- package/lib/models/table-config.interface.d.ts +22 -3
- package/lib/models/table-events.interface.d.ts +4 -4
- package/lib/models/table-meta.interface.d.ts +3 -3
- package/lib/models/table-row.interface.d.ts +0 -1
- package/lib/pagination/pagination.component.d.ts +3 -3
- package/lib/pagination/pagination.module.d.ts +3 -3
- package/lib/pipes/capital-case.pipe.d.ts +1 -1
- package/lib/pipes/dash-case.pipe.d.ts +1 -1
- package/lib/pipes/dynamic.pipe.d.ts +1 -1
- package/lib/pipes/highlight.pipe.d.ts +1 -1
- package/lib/pipes/sort-class.pipe.d.ts +1 -1
- package/lib/utilities/utilities.d.ts +5 -0
- package/package.json +1 -1
- package/scss/index.scss +41 -3
|
@@ -35,11 +35,17 @@ search = (text, caseSensitive, data, config) => {
|
|
|
35
35
|
const match = Object.entries(row)
|
|
36
36
|
.filter(([key, value]) => searchColumns.indexOf(key) !== -1)
|
|
37
37
|
.reduce((acc, [key, value], index) => {
|
|
38
|
+
const search = config?.columns[key]?.search;
|
|
39
|
+
// if search is a function...
|
|
40
|
+
if (typeof search === 'function') {
|
|
41
|
+
// ...use search function to return value to search
|
|
42
|
+
value = search(row, key, value);
|
|
43
|
+
}
|
|
38
44
|
return (acc +
|
|
39
45
|
(index === 0 ? '' : ' ? ') +
|
|
40
46
|
(caseSensitive ? value + '' : (value + '').toLowerCase()));
|
|
41
47
|
}, '')
|
|
42
|
-
.indexOf(text) !== -1;
|
|
48
|
+
.indexOf(caseSensitive ? text : text.toLowerCase()) !== -1;
|
|
43
49
|
if (match) {
|
|
44
50
|
FILTERED[FILTERED.length] = row;
|
|
45
51
|
}
|
|
@@ -50,4 +56,68 @@ search = (text, caseSensitive, data, config) => {
|
|
|
50
56
|
return data;
|
|
51
57
|
}
|
|
52
58
|
};
|
|
53
|
-
|
|
59
|
+
export let calculate = (data, config) => {
|
|
60
|
+
const CALCULATIONS = {};
|
|
61
|
+
const COLUMN_CALCULATIONS = {};
|
|
62
|
+
let CALCULATED = Object.entries(config.footer?.columns || {})
|
|
63
|
+
.filter(([columnName, calculations]) => Object.values(calculations || {}).filter((value) => value !== false)
|
|
64
|
+
.length >= 0)
|
|
65
|
+
.reduce((acc, [columnName, calculations], index) => {
|
|
66
|
+
acc[columnName] = Object.entries(calculations || {})
|
|
67
|
+
.filter(([calculation, value]) => value !== false)
|
|
68
|
+
.reduce((acc, [calculation, value]) => {
|
|
69
|
+
if (COLUMN_CALCULATIONS[columnName]) {
|
|
70
|
+
COLUMN_CALCULATIONS[columnName].push(calculation);
|
|
71
|
+
}
|
|
72
|
+
else if (value === true) {
|
|
73
|
+
COLUMN_CALCULATIONS[columnName] = [calculation];
|
|
74
|
+
}
|
|
75
|
+
CALCULATIONS[calculation] = true;
|
|
76
|
+
if (typeof value === 'function') {
|
|
77
|
+
value = value(data, columnName);
|
|
78
|
+
}
|
|
79
|
+
acc[calculation] = value === true ? 0 : value;
|
|
80
|
+
return acc;
|
|
81
|
+
}, {});
|
|
82
|
+
return acc;
|
|
83
|
+
}, {});
|
|
84
|
+
if (Object.keys(CALCULATED).length > 0) {
|
|
85
|
+
for (let i = 0; i < data.length; i++) {
|
|
86
|
+
Object.entries(COLUMN_CALCULATIONS).forEach(([column, calculations]) => {
|
|
87
|
+
if (calculations.indexOf('sum') > -1) {
|
|
88
|
+
CALCULATED[column].sum += data[i][column];
|
|
89
|
+
}
|
|
90
|
+
if (calculations.indexOf('avg') > -1 &&
|
|
91
|
+
calculations.indexOf('sum') === -1) {
|
|
92
|
+
if (CALCULATED[column].sum === undefined) {
|
|
93
|
+
CALCULATED[column].sum = 0;
|
|
94
|
+
}
|
|
95
|
+
CALCULATED[column].sum += data[i][column];
|
|
96
|
+
}
|
|
97
|
+
if (calculations.indexOf('max') > -1 &&
|
|
98
|
+
(!CALCULATED[column].max || +data[i][column] > CALCULATED[column].max)) {
|
|
99
|
+
CALCULATED[column].max = +data[i][column];
|
|
100
|
+
}
|
|
101
|
+
if (calculations.indexOf('min') > -1 &&
|
|
102
|
+
(!CALCULATED[column].min || +data[i][column] < CALCULATED[column].min)) {
|
|
103
|
+
CALCULATED[column].min = +data[i][column];
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
Object.entries(COLUMN_CALCULATIONS).forEach(([column, calculations]) => {
|
|
108
|
+
if (calculations.indexOf('avg') !== -1) {
|
|
109
|
+
CALCULATED[column].avg = CALCULATED[column]?.sum / data.length;
|
|
110
|
+
}
|
|
111
|
+
if (calculations.indexOf('count') !== -1) {
|
|
112
|
+
CALCULATED[column].count = data.length;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
calculated: CALCULATED,
|
|
118
|
+
calculations: Object.keys(CALCULATIONS).sort((a, b) => (config.footer?.rowOrder?.indexOf(a) || 0) -
|
|
119
|
+
(config.footer?.rowOrder?.indexOf(b) || 0)),
|
|
120
|
+
calculatedColumnsCount: Object.keys(CALCULATED).length || 0,
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3V0aWxpdGllcy91dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLElBQUksTUFBNkIsQ0FBQztBQUN6QyxNQUFNLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFFMUUsTUFBTSxDQUFDLElBQUksVUFBaUMsQ0FBQztBQUM3QyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNqQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztLQUNsQixPQUFPLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO0tBQ2hDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO0tBQzlCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO0tBQ3ZCLElBQUksRUFBRSxDQUFDO0FBRVosTUFBTSxDQUFDLElBQUksS0FHZ0IsQ0FBQztBQUM1QixLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7SUFDM0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztLQUN2QztJQUNELElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEI7SUFDRCxNQUFNLEtBQUss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QUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDeEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU87UUFDTCxVQUFVLEVBQUUsVUFBVTtRQUN0QixZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ1AsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM3QztRQUNELHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUM7S0FDNUQsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5cbmV4cG9ydCBsZXQgZGFzaGVkOiAoczogc3RyaW5nKSA9PiBzdHJpbmc7XG5kYXNoZWQgPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoL1tBLVpdL2csIChtKSA9PiAnLScgKyBtLnRvTG93ZXJDYXNlKCkpO1xuXG5leHBvcnQgbGV0IGNhcGl0YWxpemU6IChzOiBzdHJpbmcpID0+IHN0cmluZztcbmNhcGl0YWxpemUgPSAocykgPT5cbiAgKHMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpKVxuICAgIC5yZXBsYWNlKC9fL2csICcgJylcbiAgICAucmVwbGFjZSgvKFtBLVpdW2Etel0rKS9nLCAnICQxJylcbiAgICAucmVwbGFjZSgvKFtBLVpdezIsfSkvZywgJyAkMScpXG4gICAgLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKVxuICAgIC50cmltKCk7XG5cbmV4cG9ydCBsZXQgY2h1bms6IChcbiAgYXJyYXk6IEFycmF5PGFueT4sXG4gIGNodW5rU2l6ZTogbnVtYmVyXG4pID0+IEFycmF5PEFycmF5PFRhYmxlUm93Pj47XG5jaHVuayA9IChhcnJheSwgY2h1bmtTaXplKSA9PiB7XG4gIGlmIChjaHVua1NpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNodW5rIHNpemUnKTtcbiAgfVxuICBpZiAoY2h1bmtTaXplID09PSAwICYmICFjaHVua1NpemUpIHtcbiAgICByZXR1cm4gW2FycmF5XTtcbiAgfVxuICBjb25zdCBDSFVOSyA9IFtdO1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpICs9IGNodW5rU2l6ZSkge1xuICAgIENIVU5LLnB1c2goYXJyYXkuc2xpY2UoaSwgaSArIGNodW5rU2l6ZSkpO1xuICB9XG4gIHJldHVybiBDSFVOSztcbn07XG5cbmV4cG9ydCBsZXQgc2VhcmNoOiAoXG4gIHRleHQ6IHN0cmluZyxcbiAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbixcbiAgZGF0YTogQXJyYXk8VGFibGVSb3c+LFxuICBjb25maWc6IFRhYmxlQ29uZmlnXG4pID0+IFRhYmxlUm93W107XG5zZWFyY2ggPSAoXG4gIHRleHQ6IHN0cmluZyxcbiAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbixcbiAgZGF0YTogQXJyYXk8VGFibGVSb3c+LFxuICBjb25maWc6IFRhYmxlQ29uZmlnXG4pID0+IHtcbiAgaWYgKGNvbmZpZy5jb2x1bW5zKSB7XG4gICAgY29uc3Qgc2VhcmNoQ29sdW1ucyA9IE9iamVjdC5rZXlzKGNvbmZpZy5jb2x1bW5zKS5maWx0ZXIoXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAoa2V5KSA9PlxuICAgICAgICBjb25maWcuY29sdW1ucyAmJlxuICAgICAgICAhY29uZmlnLmNvbHVtbnNba2V5XT8uaGlkZGVuICYmXG4gICAgICAgIGNvbmZpZy5jb2x1bW5zW2tleV0/LnNlYXJjaCAhPT0gZmFsc2VcbiAgICApO1xuXG4gICAgY29uc3QgRklMVEVSRUQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaV07XG4gICAgICBjb25zdCBtYXRjaCA9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJvdylcbiAgICAgICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHNlYXJjaENvbHVtbnMuaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSwgaW5kZXgpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gY29uZmlnPy5jb2x1bW5zIVtrZXldPy5zZWFyY2g7XG4gICAgICAgICAgICAvLyBpZiBzZWFyY2ggaXMgYSBmdW5jdGlvbi4uLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgLy8gLi4udXNlIHNlYXJjaCBmdW5jdGlvbiB0byByZXR1cm4gdmFsdWUgdG8gc2VhcmNoXG4gICAgICAgICAgICAgIHZhbHVlID0gc2VhcmNoKHJvdywga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBhY2MgK1xuICAgICAgICAgICAgICAoaW5kZXggPT09IDAgPyAnJyA6ICcgPyAnKSArXG4gICAgICAgICAgICAgIChjYXNlU2Vuc2l0aXZlID8gdmFsdWUgKyAnJyA6ICh2YWx1ZSArICcnKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LCAnJylcbiAgICAgICAgICAuaW5kZXhPZihjYXNlU2Vuc2l0aXZlID8gdGV4dCA6IHRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIEZJTFRFUkVEW0ZJTFRFUkVELmxlbmd0aF0gPSByb3c7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBGSUxURVJFRDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxufTtcblxuZXhwb3J0IGxldCBjYWxjdWxhdGUgPSAoZGF0YTogQXJyYXk8VGFibGVSb3c+LCBjb25maWc6IFRhYmxlQ29uZmlnKSA9PiB7XG4gIGNvbnN0IENBTENVTEFUSU9OUzogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgY29uc3QgQ09MVU1OX0NBTENVTEFUSU9OUzogeyBba2V5OiBzdHJpbmddOiBBcnJheTxzdHJpbmc+IH0gPSB7fTtcbiAgbGV0IENBTENVTEFURUQgPSBPYmplY3QuZW50cmllcyhjb25maWcuZm9vdGVyPy5jb2x1bW5zIHx8IHt9KVxuICAgIC5maWx0ZXIoXG4gICAgICAoW2NvbHVtbk5hbWUsIGNhbGN1bGF0aW9uc10pID0+XG4gICAgICAgIE9iamVjdC52YWx1ZXMoY2FsY3VsYXRpb25zIHx8IHt9KS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gZmFsc2UpXG4gICAgICAgICAgLmxlbmd0aCA+PSAwXG4gICAgKVxuICAgIC5yZWR1Y2UoKGFjYzogYW55LCBbY29sdW1uTmFtZSwgY2FsY3VsYXRpb25zXSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1tjb2x1bW5OYW1lXSA9IE9iamVjdC5lbnRyaWVzKGNhbGN1bGF0aW9ucyB8fCB7fSlcbiAgICAgICAgLmZpbHRlcigoW2NhbGN1bGF0aW9uLCB2YWx1ZV0pID0+IHZhbHVlICE9PSBmYWxzZSlcbiAgICAgICAgLnJlZHVjZSgoYWNjOiBhbnksIFtjYWxjdWxhdGlvbiwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKENPTFVNTl9DQUxDVUxBVElPTlNbY29sdW1uTmFtZV0pIHtcbiAgICAgICAgICAgIENPTFVNTl9DQUxDVUxBVElPTlNbY29sdW1uTmFtZV0ucHVzaChjYWxjdWxhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgQ09MVU1OX0NBTENVTEFUSU9OU1tjb2x1bW5OYW1lXSA9IFtjYWxjdWxhdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICAgIENBTENVTEFUSU9OU1tjYWxjdWxhdGlvbl0gPSB0cnVlO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoZGF0YSwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjY1tjYWxjdWxhdGlvbl0gPSB2YWx1ZSA9PT0gdHJ1ZSA/IDAgOiB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgaWYgKE9iamVjdC5rZXlzKENBTENVTEFURUQpLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKENPTFVNTl9DQUxDVUxBVElPTlMpLmZvckVhY2goKFtjb2x1bW4sIGNhbGN1bGF0aW9uc10pID0+IHtcbiAgICAgICAgaWYgKGNhbGN1bGF0aW9ucy5pbmRleE9mKCdzdW0nKSA+IC0xKSB7XG4gICAgICAgICAgQ0FMQ1VMQVRFRFtjb2x1bW5dLnN1bSArPSBkYXRhW2ldW2NvbHVtbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNhbGN1bGF0aW9ucy5pbmRleE9mKCdhdmcnKSA+IC0xICYmXG4gICAgICAgICAgY2FsY3VsYXRpb25zLmluZGV4T2YoJ3N1bScpID09PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoQ0FMQ1VMQVRFRFtjb2x1bW5dLnN1bSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBDQUxDVUxBVEVEW2NvbHVtbl0uc3VtID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgQ0FMQ1VMQVRFRFtjb2x1bW5dLnN1bSArPSBkYXRhW2ldW2NvbHVtbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNhbGN1bGF0aW9ucy5pbmRleE9mKCdtYXgnKSA+IC0xICYmXG4gICAgICAgICAgKCFDQUxDVUxBVEVEW2NvbHVtbl0ubWF4IHx8ICtkYXRhW2ldW2NvbHVtbl0gPiBDQUxDVUxBVEVEW2NvbHVtbl0ubWF4KVxuICAgICAgICApIHtcbiAgICAgICAgICBDQUxDVUxBVEVEW2NvbHVtbl0ubWF4ID0gK2RhdGFbaV1bY29sdW1uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2FsY3VsYXRpb25zLmluZGV4T2YoJ21pbicpID4gLTEgJiZcbiAgICAgICAgICAoIUNBTENVTEFURURbY29sdW1uXS5taW4gfHwgK2RhdGFbaV1bY29sdW1uXSA8IENBTENVTEFURURbY29sdW1uXS5taW4pXG4gICAgICAgICkge1xuICAgICAgICAgIENBTENVTEFURURbY29sdW1uXS5taW4gPSArZGF0YVtpXVtjb2x1bW5dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmVudHJpZXMoQ09MVU1OX0NBTENVTEFUSU9OUykuZm9yRWFjaCgoW2NvbHVtbiwgY2FsY3VsYXRpb25zXSkgPT4ge1xuICAgICAgaWYgKGNhbGN1bGF0aW9ucy5pbmRleE9mKCdhdmcnKSAhPT0gLTEpIHtcbiAgICAgICAgQ0FMQ1VMQVRFRFtjb2x1bW5dLmF2ZyA9IENBTENVTEFURURbY29sdW1uXT8uc3VtIC8gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoY2FsY3VsYXRpb25zLmluZGV4T2YoJ2NvdW50JykgIT09IC0xKSB7XG4gICAgICAgIENBTENVTEFURURbY29sdW1uXS5jb3VudCA9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2FsY3VsYXRlZDogQ0FMQ1VMQVRFRCxcbiAgICBjYWxjdWxhdGlvbnM6IE9iamVjdC5rZXlzKENBTENVTEFUSU9OUykuc29ydChcbiAgICAgIChhLCBiKSA9PlxuICAgICAgICAoY29uZmlnLmZvb3Rlcj8ucm93T3JkZXI/LmluZGV4T2YoYSkgfHwgMCkgLVxuICAgICAgICAoY29uZmlnLmZvb3Rlcj8ucm93T3JkZXI/LmluZGV4T2YoYikgfHwgMClcbiAgICApLFxuICAgIGNhbGN1bGF0ZWRDb2x1bW5zQ291bnQ6IE9iamVjdC5rZXlzKENBTENVTEFURUQpLmxlbmd0aCB8fCAwLFxuICB9O1xufTtcbiJdfQ==
|