@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
232 lines • 24.3 kB
JavaScript
const clear = (el) => el === 0 || Boolean(el);
const ɵ0 = clear;
const first = (arr) => arr[0];
const ɵ1 = first;
const last = (arr) => arr[arr.length - 1];
const ɵ2 = last;
export class IgxSummaryOperand {
/**
* Counts all the records in the data source.
* If filtering is applied, counts only the filtered records.
* ```typescript
* IgxSummaryOperand.count(dataSource);
* ```
* @memberof IgxSummaryOperand
*/
static count(data) {
return data.length;
}
/**
* Executes the static `count` method and returns `IgxSummaryResult[]`.
* ```typescript
* interface IgxSummaryResult {
* key: string;
* label: string;
* summaryResult: any;
* }
* ```
* Can be overridden in the inherited classes to provide customization for the `summary`.
* ```typescript
* class CustomSummary extends IgxSummaryOperand {
* constructor() {
* super();
* }
* public operate(data: any[], allData: any[], fieldName: string): IgxSummaryResult[] {
* const result = [];
* result.push({
* key: "test",
* label: "Test",
* summaryResult: IgxSummaryOperand.count(data)
* });
* return result;
* }
* }
* this.grid.getColumnByName('ColumnName').summaries = CustomSummary;
* ```
* @memberof IgxSummaryOperand
*/
operate(data = [], allData = [], fieldName) {
return [{
key: 'count',
label: 'Count',
summaryResult: IgxSummaryOperand.count(data)
}];
}
}
// @dynamic
export class IgxNumberSummaryOperand extends IgxSummaryOperand {
/**
* Returns the minimum numeric value in the provided data records.
* If filtering is applied, returns the minimum value in the filtered data records.
* ```typescript
* IgxNumberSummaryOperand.min(data);
* ```
* @memberof IgxNumberSummaryOperand
*/
static min(data) {
return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.min(a, b)) : 0;
}
/**
* Returns the maximum numeric value in the provided data records.
* If filtering is applied, returns the maximum value in the filtered data records.
* ```typescript
* IgxNumberSummaryOperand.max(data);
* ```
* @memberof IgxNumberSummaryOperand
*/
static max(data) {
return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.max(a, b)) : 0;
}
/**
* Returns the sum of the numeric values in the provided data records.
* If filtering is applied, returns the sum of the numeric values in the data records.
* ```typescript
* IgxNumberSummaryOperand.sum(data);
* ```
* @memberof IgxNumberSummaryOperand
*/
static sum(data) {
return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => +a + +b) : 0;
}
/**
* Returns the average numeric value in the data provided data records.
* If filtering is applied, returns the average numeric value in the filtered data records.
* ```typescript
* IgxSummaryOperand.average(data);
* ```
* @memberof IgxNumberSummaryOperand
*/
static average(data) {
return data.length && data.filter(clear).length ? this.sum(data) / this.count(data) : 0;
}
/**
* Executes the static methods and returns `IgxSummaryResult[]`.
* ```typescript
* interface IgxSummaryResult {
* key: string;
* label: string;
* summaryResult: any;
* }
* ```
* Can be overridden in the inherited classes to provide customization for the `summary`.
* ```typescript
* class CustomNumberSummary extends IgxNumberSummaryOperand {
* constructor() {
* super();
* }
* public operate(data: any[], allData: any[], fieldName: string): IgxSummaryResult[] {
* const result = [];
* result.push({
* key: "avg",
* label: "Avg",
* summaryResult: IgxNumberSummaryOperand.average(data)
* });
* result.push({
* key: "max",
* label: "Max",
* summaryResult: IgxNumberSummaryOperand.max(data)
* });
* return result;
* }
* }
* this.grid.getColumnByName('ColumnName').summaries = CustomNumberSummary;
* ```
* @memberof IgxNumberSummaryOperand
*/
operate(data = [], allData = [], fieldName) {
const result = super.operate(data, allData, fieldName);
result.push({
key: 'min',
label: 'Min',
summaryResult: IgxNumberSummaryOperand.min(data)
});
result.push({
key: 'max',
label: 'Max',
summaryResult: IgxNumberSummaryOperand.max(data)
});
result.push({
key: 'sum',
label: 'Sum',
summaryResult: IgxNumberSummaryOperand.sum(data)
});
result.push({
key: 'average',
label: 'Avg',
summaryResult: IgxNumberSummaryOperand.average(data)
});
return result;
}
}
// @dynamic
export class IgxDateSummaryOperand extends IgxSummaryOperand {
/**
* Returns the latest date value in the data records.
* If filtering is applied, returns the latest date value in the filtered data records.
* ```typescript
* IgxDateSummaryOperand.latest(data);
* ```
* @memberof IgxDateSummaryOperand
*/
static latest(data) {
return data.length && data.filter(clear).length ?
first(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;
}
/**
* Returns the earliest date value in the data records.
* If filtering is applied, returns the latest date value in the filtered data records.
* ```typescript
* IgxDateSummaryOperand.earliest(data);
* ```
* @memberof IgxDateSummaryOperand
*/
static earliest(data) {
return data.length && data.filter(clear).length ?
last(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;
}
/**
* Executes the static methods and returns `IgxSummaryResult[]`.
* ```typescript
* interface IgxSummaryResult {
* key: string;
* label: string;
* summaryResult: any;
* }
* ```
* Can be overridden in the inherited classes to provide customization for the `summary`.
* ```typescript
* class CustomDateSummary extends IgxDateSummaryOperand {
* constructor() {
* super();
* }
* public operate(data: any[], allData: any[], fieldName: string): IgxSummaryResult[] {
* const result = [];
* result.push({
* key: "latest",
* label: "Latest Date",
* summaryResult: IgxDateSummaryOperand.latest(data)
* });
* return result;
* }
* }
* this.grid.getColumnByName('ColumnName').summaries = CustomDateSummary;
* ```
* @memberof IgxDateSummaryOperand
*/
operate(data = [], allData = [], fieldName) {
const result = super.operate(data, allData, fieldName);
result.push({
key: 'earliest',
label: 'Earliest',
summaryResult: IgxDateSummaryOperand.earliest(data)
});
result.push({
key: 'latest',
label: 'Latest',
summaryResult: IgxDateSummaryOperand.latest(data)
});
return result;
}
}
export { ɵ0, ɵ1, ɵ2 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQSxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBQzlDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBQzlCLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzs7QUFFMUMsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQjs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E0Qkc7SUFDSSxPQUFPLENBQUMsT0FBYyxFQUFFLEVBQUUsVUFBaUIsRUFBRSxFQUFFLFNBQWtCO1FBQ3BFLE9BQU8sQ0FBQztnQkFDSixHQUFHLEVBQUUsT0FBTztnQkFDWixLQUFLLEVBQUUsT0FBTztnQkFDZCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzthQUMvQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFFRCxXQUFXO0FBQ1gsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQUMxRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFXO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFD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YSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDdEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNSLEdBQUcsRUFBRSxRQUFRO1lBQ2IsS0FBSyxFQUFFLFFBQVE7WUFDZixhQUFhLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNwRCxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElTdW1tYXJ5RXhwcmVzc2lvbiB7XG4gICAgZmllbGROYW1lOiBzdHJpbmc7XG4gICAgY3VzdG9tU3VtbWFyeT86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSWd4U3VtbWFyeVJlc3VsdCB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBzdW1tYXJ5UmVzdWx0OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1bW1hcnlSZWNvcmQge1xuICAgIHN1bW1hcmllczogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPjtcbiAgICBtYXg/OiBudW1iZXI7XG4gICAgY2VsbEluZGVudGF0aW9uPzogbnVtYmVyO1xufVxuXG5jb25zdCBjbGVhciA9IChlbCkgPT4gZWwgPT09IDAgfHwgQm9vbGVhbihlbCk7XG5jb25zdCBmaXJzdCA9IChhcnIpID0+IGFyclswXTtcbmNvbnN0IGxhc3QgPSAoYXJyKSA9PiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuXG5leHBvcnQgY2xhc3MgSWd4U3VtbWFyeU9wZXJhbmQge1xuICAgIC8qKlxuICAgICAqIENvdW50cyBhbGwgdGhlIHJlY29yZHMgaW4gdGhlIGRhdGEgc291cmNlLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCBjb3VudHMgb25seSB0aGUgZmlsdGVyZWQgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogSWd4U3VtbWFyeU9wZXJhbmQuY291bnQoZGF0YVNvdXJjZSk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb3VudChkYXRhOiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHN0YXRpYyBgY291bnRgIG1ldGhvZCBhbmQgcmV0dXJucyBgSWd4U3VtbWFyeVJlc3VsdFtdYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaW50ZXJmYWNlIElneFN1bW1hcnlSZXN1bHQge1xuICAgICAqICAga2V5OiBzdHJpbmc7XG4gICAgICogICBsYWJlbDogc3RyaW5nO1xuICAgICAqICAgc3VtbWFyeVJlc3VsdDogYW55O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaW5oZXJpdGVkIGNsYXNzZXMgdG8gcHJvdmlkZSBjdXN0b21pemF0aW9uIGZvciB0aGUgYHN1bW1hcnlgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjbGFzcyBDdXN0b21TdW1tYXJ5IGV4dGVuZHMgSWd4U3VtbWFyeU9wZXJhbmQge1xuICAgICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAgICogICAgIHN1cGVyKCk7XG4gICAgICogICB9XG4gICAgICogICBwdWJsaWMgb3BlcmF0ZShkYXRhOiBhbnlbXSwgYWxsRGF0YTogYW55W10sIGZpZWxkTmFtZTogc3RyaW5nKTogSWd4U3VtbWFyeVJlc3VsdFtdIHtcbiAgICAgKiAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICogICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgKiAgICAgICBrZXk6IFwidGVzdFwiLFxuICAgICAqICAgICAgIGxhYmVsOiBcIlRlc3RcIixcbiAgICAgKiAgICAgICBzdW1tYXJ5UmVzdWx0OiBJZ3hTdW1tYXJ5T3BlcmFuZC5jb3VudChkYXRhKVxuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSgnQ29sdW1uTmFtZScpLnN1bW1hcmllcyA9IEN1c3RvbVN1bW1hcnk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIG9wZXJhdGUoZGF0YTogYW55W10gPSBbXSwgYWxsRGF0YTogYW55W10gPSBbXSwgZmllbGROYW1lPzogc3RyaW5nKTogSWd4U3VtbWFyeVJlc3VsdFtdIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICBrZXk6ICdjb3VudCcsXG4gICAgICAgICAgICBsYWJlbDogJ0NvdW50JyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneFN1bW1hcnlPcGVyYW5kLmNvdW50KGRhdGEpXG4gICAgICAgIH1dO1xuICAgIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZCBleHRlbmRzIElneFN1bW1hcnlPcGVyYW5kIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWVyaWMgdmFsdWUgaW4gdGhlIHByb3ZpZGVkIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBJZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCwgcmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgZmlsdGVyZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZC5taW4oZGF0YSk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneE51bWJlclN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBtaW4oZGF0YTogYW55W10pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggJiYgZGF0YS5maWx0ZXIoY2xlYXIpLmxlbmd0aCA/IGRhdGEuZmlsdGVyKGNsZWFyKS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpKSA6IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtZXJpYyB2YWx1ZSBpbiB0aGUgcHJvdmlkZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCByZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIElneE51bWJlclN1bW1hcnlPcGVyYW5kLm1heChkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG1heChkYXRhOiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCAmJiBkYXRhLmZpbHRlcihjbGVhcikubGVuZ3RoID8gZGF0YS5maWx0ZXIoY2xlYXIpLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYikpIDogMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3VtIG9mIHRoZSBudW1lcmljIHZhbHVlcyBpbiB0aGUgcHJvdmlkZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCByZXR1cm5zIHRoZSBzdW0gb2YgdGhlIG51bWVyaWMgdmFsdWVzIGluIHRoZSBkYXRhIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIElneE51bWJlclN1bW1hcnlPcGVyYW5kLnN1bShkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHN1bShkYXRhOiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCAmJiBkYXRhLmZpbHRlcihjbGVhcikubGVuZ3RoID8gZGF0YS5maWx0ZXIoY2xlYXIpLnJlZHVjZSgoYSwgYikgPT4gK2EgKyArYikgOiAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhdmVyYWdlIG51bWVyaWMgdmFsdWUgaW4gdGhlIGRhdGEgcHJvdmlkZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCByZXR1cm5zIHRoZSBhdmVyYWdlIG51bWVyaWMgdmFsdWUgaW4gdGhlIGZpbHRlcmVkIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogSWd4U3VtbWFyeU9wZXJhbmQuYXZlcmFnZShkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGF2ZXJhZ2UoZGF0YTogYW55W10pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggJiYgZGF0YS5maWx0ZXIoY2xlYXIpLmxlbmd0aCA/IHRoaXMuc3VtKGRhdGEpIC8gdGhpcy5jb3VudChkYXRhKSA6IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBzdGF0aWMgbWV0aG9kcyBhbmQgcmV0dXJucyBgSWd4U3VtbWFyeVJlc3VsdFtdYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaW50ZXJmYWNlIElneFN1bW1hcnlSZXN1bHQge1xuICAgICAqICAga2V5OiBzdHJpbmc7XG4gICAgICogICBsYWJlbDogc3RyaW5nO1xuICAgICAqICAgc3VtbWFyeVJlc3VsdDogYW55O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaW5oZXJpdGVkIGNsYXNzZXMgdG8gcHJvdmlkZSBjdXN0b21pemF0aW9uIGZvciB0aGUgYHN1bW1hcnlgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjbGFzcyBDdXN0b21OdW1iZXJTdW1tYXJ5IGV4dGVuZHMgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmQge1xuICAgICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAgICogICAgIHN1cGVyKCk7XG4gICAgICogICB9XG4gICAgICogICBwdWJsaWMgb3BlcmF0ZShkYXRhOiBhbnlbXSwgYWxsRGF0YTogYW55W10sIGZpZWxkTmFtZTogc3RyaW5nKTogSWd4U3VtbWFyeVJlc3VsdFtdIHtcbiAgICAgKiAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICogICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgKiAgICAgICBrZXk6IFwiYXZnXCIsXG4gICAgICogICAgICAgbGFiZWw6IFwiQXZnXCIsXG4gICAgICogICAgICAgc3VtbWFyeVJlc3VsdDogSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmQuYXZlcmFnZShkYXRhKVxuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmVzdWx0LnB1c2goe1xuICAgICAqICAgICAgIGtleTogXCJtYXhcIixcbiAgICAgKiAgICAgICBsYWJlbDogXCJNYXhcIixcbiAgICAgKiAgICAgICBzdW1tYXJ5UmVzdWx0OiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZC5tYXgoZGF0YSlcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJldHVybiByZXN1bHQ7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUoJ0NvbHVtbk5hbWUnKS5zdW1tYXJpZXMgPSBDdXN0b21OdW1iZXJTdW1tYXJ5O1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVyYXRlKGRhdGE6IGFueVtdID0gW10sIGFsbERhdGE6IGFueVtdID0gW10sIGZpZWxkTmFtZT86IHN0cmluZyk6IElneFN1bW1hcnlSZXN1bHRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLm9wZXJhdGUoZGF0YSwgYWxsRGF0YSwgZmllbGROYW1lKTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnbWluJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTWluJyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneE51bWJlclN1bW1hcnlPcGVyYW5kLm1pbihkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnbWF4JyxcbiAgICAgICAgICAgIGxhYmVsOiAnTWF4JyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneE51bWJlclN1bW1hcnlPcGVyYW5kLm1heChkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnc3VtJyxcbiAgICAgICAgICAgIGxhYmVsOiAnU3VtJyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneE51bWJlclN1bW1hcnlPcGVyYW5kLnN1bShkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnYXZlcmFnZScsXG4gICAgICAgICAgICBsYWJlbDogJ0F2ZycsXG4gICAgICAgICAgICBzdW1tYXJ5UmVzdWx0OiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZC5hdmVyYWdlKGRhdGEpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBJZ3hEYXRlU3VtbWFyeU9wZXJhbmQgZXh0ZW5kcyBJZ3hTdW1tYXJ5T3BlcmFuZCB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGF0ZXN0IGRhdGUgdmFsdWUgaW4gdGhlIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBJZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCwgcmV0dXJucyB0aGUgbGF0ZXN0IGRhdGUgdmFsdWUgaW4gdGhlIGZpbHRlcmVkIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmxhdGVzdChkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4RGF0ZVN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBsYXRlc3QoZGF0YTogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoICYmIGRhdGEuZmlsdGVyKGNsZWFyKS5sZW5ndGggP1xuICAgICAgICAgICAgZmlyc3QoZGF0YS5maWx0ZXIoY2xlYXIpLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGIpLnZhbHVlT2YoKSAtIG5ldyBEYXRlKGEpLnZhbHVlT2YoKSkpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlYXJsaWVzdCBkYXRlIHZhbHVlIGluIHRoZSBkYXRhIHJlY29yZHMuXG4gICAgICogSWYgZmlsdGVyaW5nIGlzIGFwcGxpZWQsIHJldHVybnMgdGhlIGxhdGVzdCBkYXRlIHZhbHVlIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIElneERhdGVTdW1tYXJ5T3BlcmFuZC5lYXJsaWVzdChkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4RGF0ZVN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBlYXJsaWVzdChkYXRhOiBhbnlbXSkge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggJiYgZGF0YS5maWx0ZXIoY2xlYXIpLmxlbmd0aCA/XG4gICAgICAgICAgICBsYXN0KGRhdGEuZmlsdGVyKGNsZWFyKS5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShiKS52YWx1ZU9mKCkgLSBuZXcgRGF0ZShhKS52YWx1ZU9mKCkpKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHN0YXRpYyBtZXRob2RzIGFuZCByZXR1cm5zIGBJZ3hTdW1tYXJ5UmVzdWx0W11gLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBpbnRlcmZhY2UgSWd4U3VtbWFyeVJlc3VsdCB7XG4gICAgICogICBrZXk6IHN0cmluZztcbiAgICAgKiAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICogICBzdW1tYXJ5UmVzdWx0OiBhbnk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIENhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBpbmhlcml0ZWQgY2xhc3NlcyB0byBwcm92aWRlIGN1c3RvbWl6YXRpb24gZm9yIHRoZSBgc3VtbWFyeWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNsYXNzIEN1c3RvbURhdGVTdW1tYXJ5IGV4dGVuZHMgSWd4RGF0ZVN1bW1hcnlPcGVyYW5kIHtcbiAgICAgKiAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAqICAgICBzdXBlcigpO1xuICAgICAqICAgfVxuICAgICAqICAgcHVibGljIG9wZXJhdGUoZGF0YTogYW55W10sIGFsbERhdGE6IGFueVtdLCBmaWVsZE5hbWU6IHN0cmluZyk6IElneFN1bW1hcnlSZXN1bHRbXSB7XG4gICAgICogICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAqICAgICByZXN1bHQucHVzaCh7XG4gICAgICogICAgICAga2V5OiBcImxhdGVzdFwiLFxuICAgICAqICAgICAgIGxhYmVsOiBcIkxhdGVzdCBEYXRlXCIsXG4gICAgICogICAgICAgc3VtbWFyeVJlc3VsdDogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmxhdGVzdChkYXRhKVxuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSgnQ29sdW1uTmFtZScpLnN1bW1hcmllcyA9IEN1c3RvbURhdGVTdW1tYXJ5O1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hEYXRlU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlcmF0ZShkYXRhOiBhbnlbXSA9IFtdLCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBJZ3hTdW1tYXJ5UmVzdWx0W10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzdXBlci5vcGVyYXRlKGRhdGEsIGFsbERhdGEsIGZpZWxkTmFtZSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgIGtleTogJ2VhcmxpZXN0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnRWFybGllc3QnLFxuICAgICAgICAgICAgc3VtbWFyeVJlc3VsdDogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmVhcmxpZXN0KGRhdGEpXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBrZXk6ICdsYXRlc3QnLFxuICAgICAgICAgICAgbGFiZWw6ICdMYXRlc3QnLFxuICAgICAgICAgICAgc3VtbWFyeVJlc3VsdDogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmxhdGVzdChkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=