UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

255 lines 26 kB
import { __extends } from "tslib"; var clear = function (el) { return el === 0 || Boolean(el); }; var ɵ0 = clear; var first = function (arr) { return arr[0]; }; var ɵ1 = first; var last = function (arr) { return arr[arr.length - 1]; }; var ɵ2 = last; var IgxSummaryOperand = /** @class */ (function () { function IgxSummaryOperand() { } /** * Counts all the records in the data source. * If filtering is applied, counts only the filtered records. * ```typescript * IgxSummaryOperand.count(dataSource); * ``` * @memberof IgxSummaryOperand */ IgxSummaryOperand.count = function (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 */ IgxSummaryOperand.prototype.operate = function (data, allData, fieldName) { if (data === void 0) { data = []; } if (allData === void 0) { allData = []; } return [{ key: 'count', label: 'Count', summaryResult: IgxSummaryOperand.count(data) }]; }; return IgxSummaryOperand; }()); export { IgxSummaryOperand }; // @dynamic var IgxNumberSummaryOperand = /** @class */ (function (_super) { __extends(IgxNumberSummaryOperand, _super); function IgxNumberSummaryOperand() { return _super !== null && _super.apply(this, arguments) || this; } /** * 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 */ IgxNumberSummaryOperand.min = function (data) { return data.length && data.filter(clear).length ? data.filter(clear).reduce(function (a, b) { return 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 */ IgxNumberSummaryOperand.max = function (data) { return data.length && data.filter(clear).length ? data.filter(clear).reduce(function (a, b) { return 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 */ IgxNumberSummaryOperand.sum = function (data) { return data.length && data.filter(clear).length ? data.filter(clear).reduce(function (a, b) { return +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 */ IgxNumberSummaryOperand.average = function (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 */ IgxNumberSummaryOperand.prototype.operate = function (data, allData, fieldName) { if (data === void 0) { data = []; } if (allData === void 0) { allData = []; } var result = _super.prototype.operate.call(this, 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; }; return IgxNumberSummaryOperand; }(IgxSummaryOperand)); export { IgxNumberSummaryOperand }; // @dynamic var IgxDateSummaryOperand = /** @class */ (function (_super) { __extends(IgxDateSummaryOperand, _super); function IgxDateSummaryOperand() { return _super !== null && _super.apply(this, arguments) || this; } /** * 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 */ IgxDateSummaryOperand.latest = function (data) { return data.length && data.filter(clear).length ? first(data.filter(clear).sort(function (a, b) { return 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 */ IgxDateSummaryOperand.earliest = function (data) { return data.length && data.filter(clear).length ? last(data.filter(clear).sort(function (a, b) { return 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 */ IgxDateSummaryOperand.prototype.operate = function (data, allData, fieldName) { if (data === void 0) { data = []; } if (allData === void 0) { allData = []; } var result = _super.prototype.operate.call(this, 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; }; return IgxDateSummaryOperand; }(IgxSummaryOperand)); export { IgxDateSummaryOperand }; export { ɵ0, ɵ1, ɵ2 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFnQkEsSUFBTSxLQUFLLEdBQUcsVUFBQyxFQUFFLElBQUssT0FBQSxFQUFFLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBdkIsQ0FBdUIsQ0FBQzs7QUFDOUMsSUFBTSxLQUFLLEdBQUcsVUFBQyxHQUFHLElBQUssT0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQU4sQ0FBTSxDQUFDOztBQUM5QixJQUFNLElBQUksR0FBRyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFuQixDQUFtQixDQUFDOztBQUUxQztJQUFBO0lBZ0RBLENBQUM7SUEvQ0c7Ozs7Ozs7T0FPRztJQUNXLHVCQUFLLEdBQW5CLFVBQW9CLElBQVc7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTRCRztJQUNJLG1DQUFPLEdBQWQsVUFBZSxJQUFnQixFQUFFLE9BQW1CLEVBQUUsU0FBa0I7UUFBekQscUJBQUEsRUFBQSxTQUFnQjtRQUFFLHdCQUFBLEVBQUEsWUFBbUI7UUFDaEQsT0FBTyxDQUFDO2dCQUNKLEdBQUcsRUFBRSxPQUFPO2dCQUNaLEtBQUssRUFBRSxPQUFPO2dCQUNkLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQy9DLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDTCx3QkFBQztBQUFELENBQUMsQUFoREQsSUFnREM7O0FBRUQsV0FBVztBQUNYO0lBQTZDLDJDQUFpQjtJQUE5RDs7SUF1R0EsQ0FBQztJQXRHRzs7Ozs7OztPQU9HO0lBQ1cs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QWQsVUFBZSxJQUFnQixFQUFFLE9BQW1CLEVBQUUsU0FBa0I7UUFBekQscUJBQUEsRUFBQSxTQUFnQjtRQUFFLHdCQUFBLEVBQUEsWUFBbUI7UUFDaEQsSUFBTSxNQUFNLEdBQUcsaUJBQU0sT0FBTyxZQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNSLEdBQUcsRUFBRSxVQUFVO1lBQ2YsS0FBSyxFQUFFLFVBQVU7WUFDakIsYUFBYSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDdEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNSLEdBQUcsRUFBRSxRQUFRO1lBQ2IsS0FBSyxFQUFFLFFBQVE7WUFDZixhQUFhLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNwRCxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ0wsNEJBQUM7QUFBRCxDQUFDLEFBcEVELENBQTJDLGlCQUFpQixHQW9FM0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElTdW1tYXJ5RXhwcmVzc2lvbiB7XG4gICAgZmllbGROYW1lOiBzdHJpbmc7XG4gICAgY3VzdG9tU3VtbWFyeT86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSWd4U3VtbWFyeVJlc3VsdCB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBzdW1tYXJ5UmVzdWx0OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1bW1hcnlSZWNvcmQge1xuICAgIHN1bW1hcmllczogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPjtcbiAgICBtYXg/OiBudW1iZXI7XG4gICAgY2VsbEluZGVudGF0aW9uPzogbnVtYmVyO1xufVxuXG5jb25zdCBjbGVhciA9IChlbCkgPT4gZWwgPT09IDAgfHwgQm9vbGVhbihlbCk7XG5jb25zdCBmaXJzdCA9IChhcnIpID0+IGFyclswXTtcbmNvbnN0IGxhc3QgPSAoYXJyKSA9PiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuXG5leHBvcnQgY2xhc3MgSWd4U3VtbWFyeU9wZXJhbmQge1xuICAgIC8qKlxuICAgICAqIENvdW50cyBhbGwgdGhlIHJlY29yZHMgaW4gdGhlIGRhdGEgc291cmNlLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCBjb3VudHMgb25seSB0aGUgZmlsdGVyZWQgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogSWd4U3VtbWFyeU9wZXJhbmQuY291bnQoZGF0YVNvdXJjZSk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb3VudChkYXRhOiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHN0YXRpYyBgY291bnRgIG1ldGhvZCBhbmQgcmV0dXJucyBgSWd4U3VtbWFyeVJlc3VsdFtdYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaW50ZXJmYWNlIElneFN1bW1hcnlSZXN1bHQge1xuICAgICAqICAga2V5OiBzdHJpbmc7XG4gICAgICogICBsYWJlbDogc3RyaW5nO1xuICAgICAqICAgc3VtbWFyeVJlc3VsdDogYW55O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaW5oZXJpdGVkIGNsYXNzZXMgdG8gcHJvdmlkZSBjdXN0b21pemF0aW9uIGZvciB0aGUgYHN1bW1hcnlgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjbGFzcyBDdXN0b21TdW1tYXJ5IGV4dGVuZHMgSWd4U3VtbWFyeU9wZXJhbmQge1xuICAgICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAgICogICAgIHN1cGVyKCk7XG4gICAgICogICB9XG4gICAgICogICBwdWJsaWMgb3BlcmF0ZShkYXRhOiBhbnlbXSwgYWxsRGF0YTogYW55W10sIGZpZWxkTmFtZTogc3RyaW5nKTogSWd4U3VtbWFyeVJlc3VsdFtdIHtcbiAgICAgKiAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICogICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgKiAgICAgICBrZXk6IFwidGVzdFwiLFxuICAgICAqICAgICAgIGxhYmVsOiBcIlRlc3RcIixcbiAgICAgKiAgICAgICBzdW1tYXJ5UmVzdWx0OiBJZ3hTdW1tYXJ5T3BlcmFuZC5jb3VudChkYXRhKVxuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSgnQ29sdW1uTmFtZScpLnN1bW1hcmllcyA9IEN1c3RvbVN1bW1hcnk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIG9wZXJhdGUoZGF0YTogYW55W10gPSBbXSwgYWxsRGF0YTogYW55W10gPSBbXSwgZmllbGROYW1lPzogc3RyaW5nKTogSWd4U3VtbWFyeVJlc3VsdFtdIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICBrZXk6ICdjb3VudCcsXG4gICAgICAgICAgICBsYWJlbDogJ0NvdW50JyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneFN1bW1hcnlPcGVyYW5kLmNvdW50KGRhdGEpXG4gICAgICAgIH1dO1xuICAgIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZCBleHRlbmRzIElneFN1bW1hcnlPcGVyYW5kIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWVyaWMgdmFsdWUgaW4gdGhlIHByb3ZpZGVkIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBJZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCwgcmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgZmlsdGVyZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZC5taW4oZGF0YSk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneE51bWJlclN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBtaW4oZGF0YTogYW55W10pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggJiYgZGF0YS5maWx0ZXIoY2xlYXIpLmxlbmd0aCA/IGRhdGEuZmlsdGVyKGNsZWFyKS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpKSA6IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtZXJpYyB2YWx1ZSBpbiB0aGUgcHJvdmlkZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCByZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIElneE51bWJlclN1bW1hcnlPcGVyYW5kLm1heChkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG1heChkYXRhOiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCAmJiBkYXRhLmZpbHRlcihjbGVhcikubGVuZ3RoID8gZGF0YS5maWx0ZXIoY2xlYXIpLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYikpIDogMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3VtIG9mIHRoZSBudW1lcmljIHZhbHVlcyBpbiB0aGUgcHJvdmlkZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCByZXR1cm5zIHRoZSBzdW0gb2YgdGhlIG51bWVyaWMgdmFsdWVzIGluIHRoZSBkYXRhIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIElneE51bWJlclN1bW1hcnlPcGVyYW5kLnN1bShkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHN1bShkYXRhOiBhbnlbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCAmJiBkYXRhLmZpbHRlcihjbGVhcikubGVuZ3RoID8gZGF0YS5maWx0ZXIoY2xlYXIpLnJlZHVjZSgoYSwgYikgPT4gK2EgKyArYikgOiAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhdmVyYWdlIG51bWVyaWMgdmFsdWUgaW4gdGhlIGRhdGEgcHJvdmlkZWQgZGF0YSByZWNvcmRzLlxuICAgICAqIElmIGZpbHRlcmluZyBpcyBhcHBsaWVkLCByZXR1cm5zIHRoZSBhdmVyYWdlIG51bWVyaWMgdmFsdWUgaW4gdGhlIGZpbHRlcmVkIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogSWd4U3VtbWFyeU9wZXJhbmQuYXZlcmFnZShkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGF2ZXJhZ2UoZGF0YTogYW55W10pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggJiYgZGF0YS5maWx0ZXIoY2xlYXIpLmxlbmd0aCA/IHRoaXMuc3VtKGRhdGEpIC8gdGhpcy5jb3VudChkYXRhKSA6IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBzdGF0aWMgbWV0aG9kcyBhbmQgcmV0dXJucyBgSWd4U3VtbWFyeVJlc3VsdFtdYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaW50ZXJmYWNlIElneFN1bW1hcnlSZXN1bHQge1xuICAgICAqICAga2V5OiBzdHJpbmc7XG4gICAgICogICBsYWJlbDogc3RyaW5nO1xuICAgICAqICAgc3VtbWFyeVJlc3VsdDogYW55O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaW5oZXJpdGVkIGNsYXNzZXMgdG8gcHJvdmlkZSBjdXN0b21pemF0aW9uIGZvciB0aGUgYHN1bW1hcnlgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjbGFzcyBDdXN0b21OdW1iZXJTdW1tYXJ5IGV4dGVuZHMgSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmQge1xuICAgICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAgICogICAgIHN1cGVyKCk7XG4gICAgICogICB9XG4gICAgICogICBwdWJsaWMgb3BlcmF0ZShkYXRhOiBhbnlbXSwgYWxsRGF0YTogYW55W10sIGZpZWxkTmFtZTogc3RyaW5nKTogSWd4U3VtbWFyeVJlc3VsdFtdIHtcbiAgICAgKiAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICogICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgKiAgICAgICBrZXk6IFwiYXZnXCIsXG4gICAgICogICAgICAgbGFiZWw6IFwiQXZnXCIsXG4gICAgICogICAgICAgc3VtbWFyeVJlc3VsdDogSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmQuYXZlcmFnZShkYXRhKVxuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmVzdWx0LnB1c2goe1xuICAgICAqICAgICAgIGtleTogXCJtYXhcIixcbiAgICAgKiAgICAgICBsYWJlbDogXCJNYXhcIixcbiAgICAgKiAgICAgICBzdW1tYXJ5UmVzdWx0OiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZC5tYXgoZGF0YSlcbiAgICAgKiAgICAgfSk7XG4gICAgICogICAgIHJldHVybiByZXN1bHQ7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUoJ0NvbHVtbk5hbWUnKS5zdW1tYXJpZXMgPSBDdXN0b21OdW1iZXJTdW1tYXJ5O1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVyYXRlKGRhdGE6IGFueVtdID0gW10sIGFsbERhdGE6IGFueVtdID0gW10sIGZpZWxkTmFtZT86IHN0cmluZyk6IElneFN1bW1hcnlSZXN1bHRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLm9wZXJhdGUoZGF0YSwgYWxsRGF0YSwgZmllbGROYW1lKTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnbWluJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTWluJyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneE51bWJlclN1bW1hcnlPcGVyYW5kLm1pbihkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnbWF4JyxcbiAgICAgICAgICAgIGxhYmVsOiAnTWF4JyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneE51bWJlclN1bW1hcnlPcGVyYW5kLm1heChkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnc3VtJyxcbiAgICAgICAgICAgIGxhYmVsOiAnU3VtJyxcbiAgICAgICAgICAgIHN1bW1hcnlSZXN1bHQ6IElneE51bWJlclN1bW1hcnlPcGVyYW5kLnN1bShkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAga2V5OiAnYXZlcmFnZScsXG4gICAgICAgICAgICBsYWJlbDogJ0F2ZycsXG4gICAgICAgICAgICBzdW1tYXJ5UmVzdWx0OiBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZC5hdmVyYWdlKGRhdGEpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBJZ3hEYXRlU3VtbWFyeU9wZXJhbmQgZXh0ZW5kcyBJZ3hTdW1tYXJ5T3BlcmFuZCB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGF0ZXN0IGRhdGUgdmFsdWUgaW4gdGhlIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBJZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCwgcmV0dXJucyB0aGUgbGF0ZXN0IGRhdGUgdmFsdWUgaW4gdGhlIGZpbHRlcmVkIGRhdGEgcmVjb3Jkcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmxhdGVzdChkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4RGF0ZVN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBsYXRlc3QoZGF0YTogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoICYmIGRhdGEuZmlsdGVyKGNsZWFyKS5sZW5ndGggP1xuICAgICAgICAgICAgZmlyc3QoZGF0YS5maWx0ZXIoY2xlYXIpLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGIpLnZhbHVlT2YoKSAtIG5ldyBEYXRlKGEpLnZhbHVlT2YoKSkpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlYXJsaWVzdCBkYXRlIHZhbHVlIGluIHRoZSBkYXRhIHJlY29yZHMuXG4gICAgICogSWYgZmlsdGVyaW5nIGlzIGFwcGxpZWQsIHJldHVybnMgdGhlIGxhdGVzdCBkYXRlIHZhbHVlIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHJlY29yZHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIElneERhdGVTdW1tYXJ5T3BlcmFuZC5lYXJsaWVzdChkYXRhKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4RGF0ZVN1bW1hcnlPcGVyYW5kXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBlYXJsaWVzdChkYXRhOiBhbnlbXSkge1xuICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggJiYgZGF0YS5maWx0ZXIoY2xlYXIpLmxlbmd0aCA/XG4gICAgICAgICAgICBsYXN0KGRhdGEuZmlsdGVyKGNsZWFyKS5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShiKS52YWx1ZU9mKCkgLSBuZXcgRGF0ZShhKS52YWx1ZU9mKCkpKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHN0YXRpYyBtZXRob2RzIGFuZCByZXR1cm5zIGBJZ3hTdW1tYXJ5UmVzdWx0W11gLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBpbnRlcmZhY2UgSWd4U3VtbWFyeVJlc3VsdCB7XG4gICAgICogICBrZXk6IHN0cmluZztcbiAgICAgKiAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICogICBzdW1tYXJ5UmVzdWx0OiBhbnk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIENhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBpbmhlcml0ZWQgY2xhc3NlcyB0byBwcm92aWRlIGN1c3RvbWl6YXRpb24gZm9yIHRoZSBgc3VtbWFyeWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNsYXNzIEN1c3RvbURhdGVTdW1tYXJ5IGV4dGVuZHMgSWd4RGF0ZVN1bW1hcnlPcGVyYW5kIHtcbiAgICAgKiAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAqICAgICBzdXBlcigpO1xuICAgICAqICAgfVxuICAgICAqICAgcHVibGljIG9wZXJhdGUoZGF0YTogYW55W10sIGFsbERhdGE6IGFueVtdLCBmaWVsZE5hbWU6IHN0cmluZyk6IElneFN1bW1hcnlSZXN1bHRbXSB7XG4gICAgICogICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAqICAgICByZXN1bHQucHVzaCh7XG4gICAgICogICAgICAga2V5OiBcImxhdGVzdFwiLFxuICAgICAqICAgICAgIGxhYmVsOiBcIkxhdGVzdCBEYXRlXCIsXG4gICAgICogICAgICAgc3VtbWFyeVJlc3VsdDogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmxhdGVzdChkYXRhKVxuICAgICAqICAgICB9KTtcbiAgICAgKiAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSgnQ29sdW1uTmFtZScpLnN1bW1hcmllcyA9IEN1c3RvbURhdGVTdW1tYXJ5O1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hEYXRlU3VtbWFyeU9wZXJhbmRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlcmF0ZShkYXRhOiBhbnlbXSA9IFtdLCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBJZ3hTdW1tYXJ5UmVzdWx0W10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzdXBlci5vcGVyYXRlKGRhdGEsIGFsbERhdGEsIGZpZWxkTmFtZSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgIGtleTogJ2VhcmxpZXN0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnRWFybGllc3QnLFxuICAgICAgICAgICAgc3VtbWFyeVJlc3VsdDogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmVhcmxpZXN0KGRhdGEpXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBrZXk6ICdsYXRlc3QnLFxuICAgICAgICAgICAgbGFiZWw6ICdMYXRlc3QnLFxuICAgICAgICAgICAgc3VtbWFyeVJlc3VsdDogSWd4RGF0ZVN1bW1hcnlPcGVyYW5kLmxhdGVzdChkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=