UNPKG

igniteui-angular

Version:

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

784 lines • 71.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /** * Provides base filtering operations * Implementations should be Singleton * * @export */ var /** * Provides base filtering operations * Implementations should be Singleton * * @export */ IgxFilteringOperand = /** @class */ (function () { function IgxFilteringOperand() { this.operations = [{ name: 'null', isUnary: true, iconName: 'is_null', logic: function (target) { return target === null; } }, { name: 'notNull', isUnary: true, iconName: 'is_not_null', logic: function (target) { return target !== null; } }]; } /** * @return {?} */ IgxFilteringOperand.prototype.conditionList = /** * @return {?} */ function () { return this.operations.map(function (element) { return element.name; }); }; /** * @param {?} name * @return {?} */ IgxFilteringOperand.prototype.condition = /** * @param {?} name * @return {?} */ function (name) { return this.operations.find(function (element) { return element.name === name; }); }; /** * @param {?} operation * @return {?} */ IgxFilteringOperand.prototype.append = /** * @param {?} operation * @return {?} */ function (operation) { this.operations.push(operation); }; return IgxFilteringOperand; }()); /** * Provides base filtering operations * Implementations should be Singleton * * @export */ export { IgxFilteringOperand }; if (false) { /** @type {?} */ IgxFilteringOperand.prototype.operations; } /** * Provides filtering operations for booleans * * @export */ var IgxBooleanFilteringOperand = /** @class */ (function (_super) { tslib_1.__extends(IgxBooleanFilteringOperand, _super); function IgxBooleanFilteringOperand() { var _this = _super.call(this) || this; _this.operations = [{ name: 'all', isUnary: true, iconName: 'all', logic: function (target) { return true; } }, { name: 'true', isUnary: true, iconName: 'is_true', logic: function (target) { return !!(target && target !== null && target !== undefined); } }, { name: 'false', isUnary: true, iconName: 'is_false', logic: function (target) { return !target && target !== null && target !== undefined; } }, { name: 'empty', isUnary: true, iconName: 'empty', logic: function (target) { return target === null || target === undefined; } }, { name: 'notEmpty', isUnary: true, iconName: 'not_empty', logic: function (target) { return target !== null && target !== undefined; } }].concat(_this.operations); return _this; } /** * @return {?} */ IgxBooleanFilteringOperand.instance = /** * @return {?} */ function () { return this._instance || (this._instance = new this()); }; IgxBooleanFilteringOperand._instance = null; return IgxBooleanFilteringOperand; }(IgxFilteringOperand)); export { IgxBooleanFilteringOperand }; if (false) { /** * @type {?} * @private */ IgxBooleanFilteringOperand._instance; } /** * Provides filtering operations for Dates * * @export */ var IgxDateFilteringOperand = /** @class */ (function (_super) { tslib_1.__extends(IgxDateFilteringOperand, _super); function IgxDateFilteringOperand() { var _this = _super.call(this) || this; _this.operations = [{ name: 'equals', isUnary: false, iconName: 'equals', logic: function (target, searchVal) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd'); /** @type {?} */ var searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd'); return targetp.year === searchp.year && targetp.month === searchp.month && targetp.day === searchp.day; } }, { name: 'doesNotEqual', isUnary: false, iconName: 'not_equal', logic: function (target, searchVal) { if (!target) { return true; } _this.validateInputData(target); /** @type {?} */ var targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd'); /** @type {?} */ var searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd'); return targetp.year !== searchp.year || targetp.month !== searchp.month || targetp.day !== searchp.day; } }, { name: 'before', isUnary: false, iconName: 'is_before', logic: function (target, searchVal) { if (!target) { return false; } _this.validateInputData(target); return target < searchVal; } }, { name: 'after', isUnary: false, iconName: 'is_after', logic: function (target, searchVal) { if (!target) { return false; } _this.validateInputData(target); return target > searchVal; } }, { name: 'today', isUnary: true, iconName: 'today', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var d = IgxDateFilteringOperand.getDateParts(target, 'yMd'); /** @type {?} */ var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yMd'); return d.year === now.year && d.month === now.month && d.day === now.day; } }, { name: 'yesterday', isUnary: true, iconName: 'yesterday', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var td = IgxDateFilteringOperand.getDateParts(target, 'yMd'); /** @type {?} */ var y = (function (d) { return new Date(d.setDate(d.getDate() - 1)); })(new Date()); /** @type {?} */ var yesterday = IgxDateFilteringOperand.getDateParts(y, 'yMd'); return td.year === yesterday.year && td.month === yesterday.month && td.day === yesterday.day; } }, { name: 'thisMonth', isUnary: true, iconName: 'this_month', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var d = IgxDateFilteringOperand.getDateParts(target, 'yM'); /** @type {?} */ var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM'); return d.year === now.year && d.month === now.month; } }, { name: 'lastMonth', isUnary: true, iconName: 'last_month', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var d = IgxDateFilteringOperand.getDateParts(target, 'yM'); /** @type {?} */ var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM'); if (!now.month) { now.month = 11; now.year -= 1; } else { now.month--; } return d.year === now.year && d.month === now.month; } }, { name: 'nextMonth', isUnary: true, iconName: 'next_month', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var d = IgxDateFilteringOperand.getDateParts(target, 'yM'); /** @type {?} */ var now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM'); if (now.month === 11) { now.month = 0; now.year += 1; } else { now.month++; } return d.year === now.year && d.month === now.month; } }, { name: 'thisYear', isUnary: true, iconName: 'this_year', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var d = IgxDateFilteringOperand.getDateParts(target, 'y'); /** @type {?} */ var now = IgxDateFilteringOperand.getDateParts(new Date(), 'y'); return d.year === now.year; } }, { name: 'lastYear', isUnary: true, iconName: 'last_year', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var d = IgxDateFilteringOperand.getDateParts(target, 'y'); /** @type {?} */ var now = IgxDateFilteringOperand.getDateParts(new Date(), 'y'); return d.year === now.year - 1; } }, { name: 'nextYear', isUnary: true, iconName: 'next_year', logic: function (target) { if (!target) { return false; } _this.validateInputData(target); /** @type {?} */ var d = IgxDateFilteringOperand.getDateParts(target, 'y'); /** @type {?} */ var now = IgxDateFilteringOperand.getDateParts(new Date(), 'y'); return d.year === now.year + 1; } }, { name: 'empty', isUnary: true, iconName: 'empty', logic: function (target) { return target === null || target === undefined; } }, { name: 'notEmpty', isUnary: true, iconName: 'not_empty', logic: function (target) { return target !== null && target !== undefined; } }].concat(_this.operations); return _this; } /** * @return {?} */ IgxDateFilteringOperand.instance = /** * @return {?} */ function () { return this._instance || (this._instance = new this()); }; /** * Splits a Date object into parts * * @memberof IgxDateFilteringOperand */ /** * Splits a Date object into parts * * \@memberof IgxDateFilteringOperand * @param {?} date * @param {?=} dateFormat * @return {?} */ IgxDateFilteringOperand.getDateParts = /** * Splits a Date object into parts * * \@memberof IgxDateFilteringOperand * @param {?} date * @param {?=} dateFormat * @return {?} */ function (date, dateFormat) { /** @type {?} */ var res = { day: null, hours: null, milliseconds: null, minutes: null, month: null, seconds: null, year: null }; if (!date || !dateFormat) { return res; } if (dateFormat.indexOf('y') >= 0) { res.year = date.getFullYear(); } if (dateFormat.indexOf('M') >= 0) { res.month = date.getMonth(); } if (dateFormat.indexOf('d') >= 0) { res.day = date.getDate(); } if (dateFormat.indexOf('h') >= 0) { res.hours = date.getHours(); } if (dateFormat.indexOf('m') >= 0) { res.minutes = date.getMinutes(); } if (dateFormat.indexOf('s') >= 0) { res.seconds = date.getSeconds(); } if (dateFormat.indexOf('f') >= 0) { res.milliseconds = date.getMilliseconds(); } return res; }; /** * @private * @param {?} target * @return {?} */ IgxDateFilteringOperand.prototype.validateInputData = /** * @private * @param {?} target * @return {?} */ function (target) { if (!(target instanceof Date)) { throw new Error('Could not perform filtering on \'date\' column because the datasource object type is not \'Date\'.'); } }; IgxDateFilteringOperand._instance = null; return IgxDateFilteringOperand; }(IgxFilteringOperand)); export { IgxDateFilteringOperand }; if (false) { /** * @type {?} * @private */ IgxDateFilteringOperand._instance; } /** * Provides filtering operations for numbers * * @export */ var IgxNumberFilteringOperand = /** @class */ (function (_super) { tslib_1.__extends(IgxNumberFilteringOperand, _super); function IgxNumberFilteringOperand() { var _this = _super.call(this) || this; _this.operations = [{ name: 'equals', isUnary: false, iconName: 'equals', logic: function (target, searchVal) { return target === searchVal; } }, { name: 'doesNotEqual', isUnary: false, iconName: 'not_equal', logic: function (target, searchVal) { return target !== searchVal; } }, { name: 'greaterThan', isUnary: false, iconName: 'greater_than', logic: function (target, searchVal) { return target > searchVal; } }, { name: 'lessThan', isUnary: false, iconName: 'less_than', logic: function (target, searchVal) { return target < searchVal; } }, { name: 'greaterThanOrEqualTo', isUnary: false, iconName: 'greater_than_or_equal', logic: function (target, searchVal) { return target >= searchVal; } }, { name: 'lessThanOrEqualTo', isUnary: false, iconName: 'less_than_or_equal', logic: function (target, searchVal) { return target <= searchVal; } }, { name: 'empty', isUnary: true, iconName: 'empty', logic: function (target) { return target === null || target === undefined || isNaN(target); } }, { name: 'notEmpty', isUnary: true, iconName: 'not_empty', logic: function (target) { return target !== null && target !== undefined && !isNaN(target); } }].concat(_this.operations); return _this; } /** * @return {?} */ IgxNumberFilteringOperand.instance = /** * @return {?} */ function () { return this._instance || (this._instance = new this()); }; IgxNumberFilteringOperand._instance = null; return IgxNumberFilteringOperand; }(IgxFilteringOperand)); export { IgxNumberFilteringOperand }; if (false) { /** * @type {?} * @private */ IgxNumberFilteringOperand._instance; } /** * Provides filtering operations for strings * * @export */ var IgxStringFilteringOperand = /** @class */ (function (_super) { tslib_1.__extends(IgxStringFilteringOperand, _super); function IgxStringFilteringOperand() { var _this = _super.call(this) || this; _this.operations = [{ name: 'contains', isUnary: false, iconName: 'contains', logic: function (target, searchVal, ignoreCase) { /** @type {?} */ var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase); target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase); return target.indexOf(search) !== -1; } }, { name: 'doesNotContain', isUnary: false, iconName: 'does_not_contain', logic: function (target, searchVal, ignoreCase) { /** @type {?} */ var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase); target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase); return target.indexOf(search) === -1; } }, { name: 'startsWith', isUnary: false, iconName: 'starts_with', logic: function (target, searchVal, ignoreCase) { /** @type {?} */ var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase); target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase); return target.startsWith(search); } }, { name: 'endsWith', isUnary: false, iconName: 'ends_with', logic: function (target, searchVal, ignoreCase) { /** @type {?} */ var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase); target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase); return target.endsWith(search); } }, { name: 'equals', isUnary: false, iconName: 'equals', logic: function (target, searchVal, ignoreCase) { /** @type {?} */ var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase); target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase); return target === search; } }, { name: 'doesNotEqual', isUnary: false, iconName: 'not_equal', logic: function (target, searchVal, ignoreCase) { /** @type {?} */ var search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase); target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase); return target !== search; } }, { name: 'empty', isUnary: true, iconName: 'empty', logic: function (target) { return target === null || target === undefined || target.length === 0; } }, { name: 'notEmpty', isUnary: true, iconName: 'not_empty', logic: function (target) { return target !== null && target !== undefined && target.length > 0; } }].concat(_this.operations); return _this; } /** * @return {?} */ IgxStringFilteringOperand.instance = /** * @return {?} */ function () { return this._instance || (this._instance = new this()); }; /** * Applies case sensitivity on strings if provided * * @memberof IgxStringFilteringOperand */ /** * Applies case sensitivity on strings if provided * * \@memberof IgxStringFilteringOperand * @param {?} a * @param {?} ignoreCase * @return {?} */ IgxStringFilteringOperand.applyIgnoreCase = /** * Applies case sensitivity on strings if provided * * \@memberof IgxStringFilteringOperand * @param {?} a * @param {?} ignoreCase * @return {?} */ function (a, ignoreCase) { a = a || ''; // bulletproof return ignoreCase ? ('' + a).toLowerCase() : a; }; IgxStringFilteringOperand._instance = null; return IgxStringFilteringOperand; }(IgxFilteringOperand)); export { IgxStringFilteringOperand }; if (false) { /** * @type {?} * @private */ IgxStringFilteringOperand._instance; } /** * Interface describing filtering operations * * @export * @record */ export function IFilteringOperation() { } if (false) { /** @type {?} */ IFilteringOperation.prototype.name; /** @type {?} */ IFilteringOperation.prototype.isUnary; /** @type {?} */ IFilteringOperation.prototype.iconName; /** @type {?} */ IFilteringOperation.prototype.logic; } /** * Interface describing Date object in parts * * @export * @record */ export function IDateParts() { } if (false) { /** @type {?} */ IDateParts.prototype.year; /** @type {?} */ IDateParts.prototype.month; /** @type {?} */ IDateParts.prototype.day; /** @type {?} */ IDateParts.prototype.hours; /** @type {?} */ IDateParts.prototype.minutes; /** @type {?} */ IDateParts.prototype.seconds; /** @type {?} */ IDateParts.prototype.milliseconds; } /** * @hidden */ var /** * @hidden */ InFilteringOperation = /** @class */ (function () { function InFilteringOperation() { this.name = 'in'; this.isUnary = false; this.iconName = 'is_in'; this.logic = function (target, searchVal) { return searchVal.has(target); }; } return InFilteringOperation; }()); /** * @hidden */ export { InFilteringOperation }; if (false) { /** @type {?} */ InFilteringOperation.prototype.name; /** @type {?} */ InFilteringOperation.prototype.isUnary; /** @type {?} */ InFilteringOperation.prototype.iconName; /** @type {?} */ InFilteringOperation.prototype.logic; } /** * @hidden */ var /** * @hidden */ InDateFilteringOperation = /** @class */ (function (_super) { tslib_1.__extends(InDateFilteringOperation, _super); function InDateFilteringOperation() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.logic = function (target, searchVal) { if (target instanceof Date) { return searchVal.has(new Date(target.getFullYear(), target.getMonth(), target.getDate()).toISOString()); } return searchVal.has(target); }; return _this; } return InDateFilteringOperation; }(InFilteringOperation)); /** * @hidden */ export { InDateFilteringOperation }; if (false) { /** @type {?} */ InDateFilteringOperation.prototype.logic; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyaW5nLWNvbmRpdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1jb25kaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFNQTs7Ozs7OztJQUdJO1FBQ0ksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNmLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixLQUFLLEVBQUUsVUFBQyxNQUFXO29CQUNmLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQztnQkFDM0IsQ0FBQzthQUNKLEVBQUU7Z0JBQ0MsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxVQUFDLE1BQVc7b0JBQ2YsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDO2dCQUMzQixDQUFDO2FBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7OztJQUVNLDJDQUFhOzs7SUFBcEI7UUFDSSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUMsT0FBTyxJQUFLLE9BQUEsT0FBTyxDQUFDLElBQUksRUFBWixDQUFZLENBQUMsQ0FBQztJQUMxRCxDQUFDOzs7OztJQUVNLHVDQUFTOzs7O0lBQWhCLFVBQWlCLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFDLE9BQU8sSUFBSyxPQUFBLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFyQixDQUFxQixDQUFDLENBQUM7SUFDcEUsQ0FBQzs7Ozs7SUFFTSxvQ0FBTTs7OztJQUFiLFVBQWMsU0FBOEI7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJ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bUI7O0lBQ25CLHFDQUVDOzs7OztBQU1MOzs7O0lBQThDLG9EQUFvQjtJQUFsRTtRQUFBLHFFQU9DO1FBTkcsV0FBSyxHQUFHLFVBQUMsTUFBVyxFQUFFLFNBQW1CO1lBQ3JDLElBQUksTUFBTSxZQUFZLElBQUksRUFBRTtnQkFDeEIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUMzRztZQUNELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUE7O0lBQ0wsQ0FBQztJQUFELCtCQUFDO0FBQUQsQ0FBQyxBQVBELENBQThDLG9CQUFvQixHQU9qRTs7Ozs7OztJQU5HLHlDQUtDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm92aWRlcyBiYXNlIGZpbHRlcmluZyBvcGVyYXRpb25zXG4gKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGJlIFNpbmdsZXRvblxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIElneEZpbHRlcmluZ09wZXJhbmQge1xuICAgIHB1YmxpYyBvcGVyYXRpb25zOiBJRmlsdGVyaW5nT3BlcmF0aW9uW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnbnVsbCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpc19udWxsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID09PSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnbm90TnVsbCcsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpc19ub3RfbnVsbCcsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCAhPT0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfV07XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmRpdGlvbkxpc3QoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25zLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZGl0aW9uKG5hbWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25zLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGVuZChvcGVyYXRpb246IElGaWx0ZXJpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZmlsdGVyaW5nIG9wZXJhdGlvbnMgZm9yIGJvb2xlYW5zXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY2xhc3MgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQgZXh0ZW5kcyBJZ3hGaWx0ZXJpbmdPcGVyYW5kIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kID0gbnVsbDtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zID0gW3tcbiAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgaXNVbmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIGljb25OYW1lOiAnYWxsJyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICd0cnVlJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2lzX3RydWUnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdmYWxzZScsXG4gICAgICAgICAgICBpc1VuYXJ5OiB0cnVlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdpc19mYWxzZScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGFyZ2V0ICYmIHRhcmdldCAhPT0gbnVsbCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ2VtcHR5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ2VtcHR5JyxcbiAgICAgICAgICAgIGxvZ2ljOiAodGFyZ2V0OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogJ25vdEVtcHR5JyxcbiAgICAgICAgICAgIGlzVW5hcnk6IHRydWUsXG4gICAgICAgICAgICBpY29uTmFtZTogJ25vdF9lbXB0eScsXG4gICAgICAgICAgICBsb2dpYzogKHRhcmdldDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgIT09IG51bGwgJiYgdGFyZ2V0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1dLmNvbmNhdCh0aGlzLm9wZXJhdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2UoKTogSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IHRoaXMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIGZpbHRlcmluZyBvcGVyYXRpb25zIGZvciBEYXRlc1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNsYXNzIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kIGV4dGVuZHMgSWd4RmlsdGVyaW5nT3BlcmFuZCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IFt7XG4gICAgICAgICAgICBuYW1lOiAnZXF1YWxzJyxcbiAgICAgICAgICAgIGlzVW5hcnk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbk5hbWU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgbG9naWM6ICh0YXJnZXQ6IERhdGUsIHNlYXJjaFZhbDogRGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlSW5wdXREYXRhKHRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRwID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuZ2V0RGF0ZVBhcnRzKHRhcmdldCwgJ3lNZCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaHAgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5nZXREYXRlUGFydHMoc2VhcmNoVmFsLCAneU1kJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldHAueWVhciA9PT0gc2VhcmNocC55ZWFyICYmXG4gICAgICAgICAgICA