UNPKG

@firestitch/filter

Version:
917 lines 67.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { toUTC } from '@firestitch/date'; import { Alias, Model } from 'tsmodels'; import { take, takeUntil } from 'rxjs/operators'; import { isObservable } from 'rxjs/internal/util/isObservable'; import { isFunction, isObject, toString, clone, filter } from 'lodash-es'; import { isDate, isValid, parse } from 'date-fns'; /** @enum {string} */ var ItemType = { Text: 'text', Select: 'select', Range: 'range', Date: 'date', DateTime: 'datetime', DateRange: 'daterange', DateTimeRange: 'datetimerange', AutoComplete: 'autocomplete', AutoCompleteChips: 'autocompletechips', Checkbox: 'checkbox', Chips: 'chips', }; export { ItemType }; var FsFilterConfigItem = /** @class */ (function (_super) { tslib_1.__extends(FsFilterConfigItem, _super); function FsFilterConfigItem(_configItem, _config, _route, _persists) { if (_configItem === void 0) { _configItem = {}; } var _this = _super.call(this) || this; _this._configItem = _configItem; _this._config = _config; _this._route = _route; _this._persists = _persists; _this.initialLoading = false; _this.valueChanged = false; _this._pendingValues = false; _this._fromJSON(_configItem); return _this; } Object.defineProperty(FsFilterConfigItem.prototype, "hasPendingValues", { get: /** * @return {?} */ function () { return this._pendingValues; }, enumerable: true, configurable: true }); Object.defineProperty(FsFilterConfigItem.prototype, "model", { get: /** * @return {?} */ function () { return this._model; }, set: /** * @param {?} val * @return {?} */ function (val) { this._model = val; this._tmpModel = val; this.checkIfValueChanged(); }, enumerable: true, configurable: true }); Object.defineProperty(FsFilterConfigItem.prototype, "tmpModel", { get: /** * @return {?} */ function () { return this._tmpModel; }, set: /** * @param {?} val * @return {?} */ function (val) { this._tmpModel = val; }, enumerable: true, configurable: true }); /** * @param {?} values * @return {?} */ FsFilterConfigItem.prototype.setValues = /** * @param {?} values * @return {?} */ function (values) { this.values = values; if (Array.isArray(values)) { this.sanitizeItem(((/** @type {?} */ (values))).slice()); } }; /** * @param {?} data * @return {?} */ FsFilterConfigItem.prototype._fromJSON = /** * @param {?} data * @return {?} */ function (data) { _super.prototype._fromJSON.call(this, data); if (this.name && isObject(this.name)) { this.names = this.name; this.name = Object.keys(this.names).join('-'); } if (this._config.persist) { /** @type {?} */ var persisted = this._persists[this._config.persist.name].data; if (persisted[this.name]) { this.parseAndSetValue(persisted[this.name]); } } }; /** * @return {?} */ FsFilterConfigItem.prototype.initValues = /** * @return {?} */ function () { if (isFunction(this._configItem.values) && !this.isTypeAutocomplete() && !this.isTypeAutocompleteChips()) { /** @type {?} */ var obj = this._configItem.values(); this.setValues(obj); if (isObservable(obj)) { this._pendingValues = true; } } else { this.setValues(this._configItem.values); } }; /** * @param {?} value * @return {?} */ FsFilterConfigItem.prototype.updateValue = /** * @param {?} value * @return {?} */ function (value) { var _this = this; var _a; switch (this.type) { case ItemType.Select: { if (value === '__all' || value === null) { this.model = value; return; } /** @type {?} */ var valueExists = null; /** @type {?} */ var isolated = null; if (this.multiple) { isolated = this.isolate && Array.isArray(value) && value[0] === this.isolate.value; valueExists = Array.isArray(this.values) ? value.every((/** * @param {?} val * @return {?} */ function (val) { return _this.values.find((/** * @param {?} valueItem * @return {?} */ function (valueItem) { return valueItem.value === val; })); })) || isolated : false; } else { valueExists = Array.isArray(this.values) ? this.values.some((/** * @param {?} valueItem * @return {?} */ function (valueItem) { return valueItem.value === value; })) : false; } if (valueExists) { this.model = value; if (this.isolate) { this.isolate.enabled = isolated; } return; } } break; case ItemType.Range: { this.model = isObject(value) ? tslib_1.__assign({}, this.model, value) : {}; } break; case ItemType.Chips: { this.model = []; } break; case ItemType.Date: case ItemType.DateTime: { this.model = value; } break; case ItemType.AutoCompleteChips: { if (Array.isArray(value)) { (_a = this.model).push.apply(_a, tslib_1.__spread(value)); } else if (isObject(value)) { this.model.push(value); } else { this.model = []; } } break; default: { this.model = value; } } }; /** * @param {?=} reload * @return {?} */ FsFilterConfigItem.prototype.loadValues = /** * @param {?=} reload * @return {?} */ function (reload) { var _this = this; if (reload === void 0) { reload = true; } if (reload || (!this.initialLoading && this.hasPendingValues)) { this.initialLoading = true; if (isFunction(this._configItem.values) && !this.isTypeAutocomplete() && !this.isTypeAutocompleteChips()) { /** @type {?} */ var obj = this._configItem.values(); if (isObservable(obj)) { // Clear out values so the interfaces go into a loading state this.values = []; obj .pipe(take(1), takeUntil(this._config.destroy$)) .subscribe((/** * @param {?} values * @return {?} */ function (values) { _this.setValues(values); _this._pendingValues = false; _this.initialLoading = false; })); } else { this.setValues(obj); } } } }; /** * @return {?} */ FsFilterConfigItem.prototype.clear = /** * @return {?} */ function () { this.valueChanged = false; this.model = undefined; switch (this.type) { case ItemType.AutoComplete: { this.model = null; this.tmpModel = null; this.search = ''; } break; case ItemType.AutoCompleteChips: case ItemType.Chips: { this.model = []; this.tmpModel = []; this.search = ''; } break; case ItemType.Checkbox: { this.model = false; this.tmpModel = false; } break; case ItemType.Select: { if (this.multiple) { this.model = []; this.tmpModel = []; } else { this.model = Array.isArray(this.values) && this.values.some((/** * @param {?} val * @return {?} */ function (val) { return val.value === '__all'; })) ? '__all' : null; this.tmpModel = this.model; } if (this.isolate) { this.isolate.enabled = false; } } break; case ItemType.Range: { this.model = {}; this.tmpModel = {}; } break; case ItemType.Text: { this.model = ''; this.tmpModel = ''; } break; case ItemType.Date: case ItemType.DateTime: { this.model = null; this.tmpModel = null; } break; } }; /** * @return {?} */ FsFilterConfigItem.prototype.checkIfValueChanged = /** * @return {?} */ function () { switch (this.type) { case ItemType.AutoCompleteChips: { this.valueChanged = this.model && this.model.length; } break; case ItemType.Checkbox: { this.valueChanged = this.model && this.model !== false; } break; case ItemType.Select: { if (this.multiple) { this.valueChanged = this.model && this.model.length; } else { /** @type {?} */ var hasAllOption = Array.isArray(this.values) && this.values.some((/** * @param {?} val * @return {?} */ function (val) { return val.value === '__all'; })); if (hasAllOption && this.model && this.model !== '__all') { this.valueChanged = true; } else { this.valueChanged = !!this.model; } } } break; case ItemType.Range: { if (this.model && Object.keys(this.model).length > 0) { this.valueChanged = true; } } break; case ItemType.Text: { this.valueChanged = this.model && this.model !== ''; } break; case ItemType.AutoComplete: case ItemType.Date: case ItemType.DateTime: { this.valueChanged = !!this.model; } break; default: { this.valueChanged = false; } } }; /** * @param {?} value * @return {?} */ FsFilterConfigItem.prototype.parseAndSetValue = /** * @param {?} value * @return {?} */ function (value) { if (value) { if (this.isTypeDateRange() || this.isTypeDateTimeRange()) { value.from = value.from ? toUTC(value.from) : null; value.to = value.to ? toUTC(value.to) : null; } else if (this.isTypeDate() || this.isTypeDateTime()) { if (!isDate(value) || !isValid(value)) { value = parse(value, 'yyyy-MM-dd\'T\'HH:mm:ssxxxxx', new Date()); } } else if (this.isTypeCheckbox() && this.checked !== undefined) { value = value == this.checked; } else if (this.isTypeSelect() && this.multiple) { value = clone(value); } else if (this.isTypeSelect() || this.isTypeAutocomplete()) { value = +value; } } this.model = value; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeAutocomplete = /** * @return {?} */ function () { return this.type === ItemType.AutoComplete; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeAutocompleteChips = /** * @return {?} */ function () { return this.type === ItemType.AutoCompleteChips; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeChips = /** * @return {?} */ function () { return this.type === ItemType.Chips; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeCheckbox = /** * @return {?} */ function () { return this.type === ItemType.Checkbox; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeSelect = /** * @return {?} */ function () { return this.type === ItemType.Select; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeDate = /** * @return {?} */ function () { return this.type === ItemType.Date; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeDateRange = /** * @return {?} */ function () { return this.type === ItemType.DateRange; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeDateTimeRange = /** * @return {?} */ function () { return this.type === ItemType.DateTimeRange; }; /** * @return {?} */ FsFilterConfigItem.prototype.isTypeDateTime = /** * @return {?} */ function () { return this.type === ItemType.DateTime; }; /** * @private * @param {?} values * @return {?} */ FsFilterConfigItem.prototype.sanitizeItem = /** * @private * @param {?} values * @return {?} */ function (values) { var _this = this; switch (this.type) { case ItemType.Text: { //????? } break; case ItemType.Select: { this.sanitizeSelectItem(); } break; case ItemType.Chips: { this.sanitizeChipsItem(); } break; case ItemType.Range: { this.sanitizeRange(); } break; case ItemType.Checkbox: { this.sanitizeCheckbox(); } break; } if (this.model === undefined) { if (this.isTypeCheckbox()) { this.model = this.checked == this.defaultValue; } else { this.model = this.defaultValue; } } if (this.model === undefined) { if (this.isTypeCheckbox()) { this.model = false; } else if (this.isTypeSelect()) { if (this.multiple) { if (!Array.isArray(this.defaultValue)) { this.model = []; } } else { if (this.defaultValue === undefined) { this.model = '__all'; } } } else if (this.isTypeAutocompleteChips() || this.isTypeChips()) { this.model = []; } } if (this.isTypeSelect()) { if (this.multiple) { this.model = filter(this.model || [], (/** * @param {?} item * @return {?} */ function (item) { return _this.values.find((/** * @param {?} value * @return {?} */ function (value) { return value.value === item; })); })); } else { /** @type {?} */ var exists = this.modelValueExists(this.values); if (!exists) { this.model = '__all'; } } } }; /** * @private * @param {?} values * @return {?} */ FsFilterConfigItem.prototype.modelValueExists = /** * @private * @param {?} values * @return {?} */ function (values) { for (var i = 0; i < values.length; i++) { if (values[i].value === this.model) { return true; } if (values[i][this.children]) { /** @type {?} */ var model = this.modelValueExists(values[i][this.children]); if (model) { return true; } } } return false; }; /** * @private * @return {?} */ FsFilterConfigItem.prototype.sanitizeSelectItem = /** * @private * @return {?} */ function () { this.groups = null; // let data = []; // if (this.nested) { // // generate a list of values from objects that have not been nested. // if (!this.multiple) { // data.push({value: '__all', name: 'All', depth: 0}); // } // // Array.prototype.push.apply(data, this.walkSelectNestedValues(filter, null, this.values)); // } else { // // data = this.walkSelectValues(filter, this.values); // } // this.values = data; if (this.isolate) { for (var index in this.values) { if (this.values.hasOwnProperty(index)) { if (!this.values[index]) { continue; } if (this.values[index].value == this.isolate.value) { this.values.splice(index, 1); } } } if (Array.isArray(this.model)) { if (this.model.length == this.values.length) { this.model = null; this.isolate.enabled = false; } else if (this.model[0] == this.isolate.value) { this.isolate.enabled = true; } } } }; /** * @private * @return {?} */ FsFilterConfigItem.prototype.sanitizeChipsItem = /** * @private * @return {?} */ function () { var _this = this; this.groups = null; if (this.model && Array.isArray(this.model)) { if (Number.isInteger(this.model[0])) { this.model = this.model.map((/** * @param {?} id * @return {?} */ function (id) { return _this.values.find((/** * @param {?} value * @return {?} */ function (value) { return value.value === id; })); })); } } }; /** * @private * @return {?} */ FsFilterConfigItem.prototype.sanitizeCheckbox = /** * @private * @return {?} */ function () { this.checked = this.checked ? toString(this.checked) : true; this.unchecked = this.unchecked ? toString(this.unchecked) : false; this.defaultValue = this.defaultValue === undefined ? this.unchecked : toString(this.defaultValue); }; /** * @private * @return {?} */ FsFilterConfigItem.prototype.sanitizeRange = /** * @private * @return {?} */ function () { if (!this.placeholder) { this.placeholder = ['Min', 'Max']; } if (!this.model) { this.model = {}; } }; tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", String) ], FsFilterConfigItem.prototype, "name", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", String) ], FsFilterConfigItem.prototype, "type", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", String) ], FsFilterConfigItem.prototype, "label", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", String) ], FsFilterConfigItem.prototype, "chipLabel", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", String) ], FsFilterConfigItem.prototype, "children", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Boolean) ], FsFilterConfigItem.prototype, "multiple", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "groups", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Boolean) ], FsFilterConfigItem.prototype, "wait", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", String) ], FsFilterConfigItem.prototype, "query", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "values$", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "selectedValue", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "isolate", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "names", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Boolean) ], FsFilterConfigItem.prototype, "primary", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "search", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "unchecked", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "checked", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "alias", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "placeholder", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "values", void 0); tslib_1.__decorate([ Alias(), tslib_1.__metadata("design:type", Function) ], FsFilterConfigItem.prototype, "change", void 0); tslib_1.__decorate([ Alias('default'), tslib_1.__metadata("design:type", Object) ], FsFilterConfigItem.prototype, "defaultValue", void 0); return FsFilterConfigItem; }(Model)); export { FsFilterConfigItem }; if (false) { /** @type {?} */ FsFilterConfigItem.prototype.name; /** @type {?} */ FsFilterConfigItem.prototype.type; /** @type {?} */ FsFilterConfigItem.prototype.label; /** @type {?} */ FsFilterConfigItem.prototype.chipLabel; /** @type {?} */ FsFilterConfigItem.prototype.children; /** @type {?} */ FsFilterConfigItem.prototype.multiple; /** @type {?} */ FsFilterConfigItem.prototype.groups; /** @type {?} */ FsFilterConfigItem.prototype.wait; /** @type {?} */ FsFilterConfigItem.prototype.query; /** @type {?} */ FsFilterConfigItem.prototype.values$; /** @type {?} */ FsFilterConfigItem.prototype.selectedValue; /** @type {?} */ FsFilterConfigItem.prototype.isolate; /** @type {?} */ FsFilterConfigItem.prototype.names; /** @type {?} */ FsFilterConfigItem.prototype.primary; /** @type {?} */ FsFilterConfigItem.prototype.search; /** @type {?} */ FsFilterConfigItem.prototype.unchecked; /** @type {?} */ FsFilterConfigItem.prototype.checked; /** @type {?} */ FsFilterConfigItem.prototype.alias; /** @type {?} */ FsFilterConfigItem.prototype.placeholder; /** @type {?} */ FsFilterConfigItem.prototype.values; /** @type {?} */ FsFilterConfigItem.prototype.change; /** @type {?} */ FsFilterConfigItem.prototype.defaultValue; /** @type {?} */ FsFilterConfigItem.prototype.initialLoading; /** @type {?} */ FsFilterConfigItem.prototype.valueChanged; /** * @type {?} * @private */ FsFilterConfigItem.prototype._model; /** * @type {?} * @private */ FsFilterConfigItem.prototype._tmpModel; /** * @type {?} * @private */ FsFilterConfigItem.prototype._pendingValues; /** * @type {?} * @private */ FsFilterConfigItem.prototype._configItem; /** * @type {?} * @private */ FsFilterConfigItem.prototype._config; /** * @type {?} * @private */ FsFilterConfigItem.prototype._route; /** * @type {?} * @private */ FsFilterConfigItem.prototype._persists; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWl0ZW0uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9maWx0ZXIvIiwic291cmNlcyI6WyJhcHAvbW9kZWxzL2ZpbHRlci1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0lBT2hELE1BQWtCLE1BQU07SUFDeEIsUUFBa0IsUUFBUTtJQUMxQixPQUFrQixPQUFPO0lBQ3pCLE1BQWtCLE1BQU07SUFDeEIsVUFBa0IsVUFBVTtJQUM1QixXQUFrQixXQUFXO0lBQzdCLGVBQWtCLGVBQWU7SUFDakMsY0FBa0IsY0FBYztJQUNoQyxtQkFBb0IsbUJBQW1CO0lBQ3ZDLFVBQWtCLFVBQVU7SUFDNUIsT0FBa0IsT0FBTzs7O0FBRzNCO0lBQXdDLDhDQUFLO0lBZ0MzQyw0QkFBb0IsV0FBeUMsRUFDekMsT0FBdUIsRUFDdkIsTUFBc0IsRUFDdEIsU0FBYztRQUhkLDRCQUFBLEVBQUEsZ0JBQXlDO1FBQTdELFlBSUUsaUJBQU8sU0FFUjtRQU5tQixpQkFBVyxHQUFYLFdBQVcsQ0FBOEI7UUFDekMsYUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsWUFBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsZUFBUyxHQUFULFNBQVMsQ0FBSztRQVYz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O3lEQUF1QjtJQUN0QjtRQUFSLEtBQUssRUFBRTs7dURBQXFCO0lBQ3BCO1FBQVIsS0FBSyxFQUFFOztxREFBbUI7SUFDbEI7UUFBUixLQUFLLEVBQUU7OzJEQUF5QjtJQUN4QjtRQUFSLEtBQUssRUFBRTs7c0RBQW9CO0lBQ25CO1FBQVIsS0FBSyxFQUFFOzBDQUFnQixRQUFRO3NEQUFDO0lBQ2Y7UUFBakIsS0FBSyxDQUFDLFNBQVMsQ0FBQzs7NERBQTBCO0lBNGU3Qyx5QkFBQztDQUFBLEFBbmdCRCxDQUF3QyxLQUFLLEdBbWdCNUM7U0FuZ0JZLGtCQUFrQjs7O0lBRTdCLGtDQUE2Qjs7SUFDN0Isa0NBQStCOztJQUMvQixtQ0FBOEI7O0lBQzlCLHVDQUFrQzs7SUFDbEMsc0NBQWlDOztJQUNqQyxzQ0FBa0M7O0lBQ2xDLG9DQUE0Qjs7SUFDNUIsa0NBQThCOztJQUM5QixtQ0FBOEI7O0lBQzlCLHFDQUE2Qjs7SUFDN0IsMkNBQW1DOztJQUNuQyxxQ0FBNkI7O0lBQzdCLG1DQUEyQjs7SUFDM0IscUNBQWlDOztJQUNqQyxvQ0FBNEI7O0lBQzVCLHVDQUErQjs7SUFDL0IscUNBQTZCOztJQUM3QixtQ0FBMkI7O0lBQzNCLHlDQUFpQzs7SUFDakMsb0NBQTRCOztJQUM1QixvQ0FBaUM7O0lBQ2pDLDBDQUEyQzs7SUFFM0MsNENBQThCOztJQUM5QiwwQ0FBNEI7Ozs7O0lBRTVCLG9DQUFvQjs7Ozs7SUFDcEIsdUNBQXVCOzs7OztJQUN2Qiw0Q0FBK0I7Ozs7O0lBRW5CLHlDQUFpRDs7Ozs7SUFDakQscUNBQStCOzs7OztJQUMvQixvQ0FBOEI7Ozs7O0lBQzlCLHVDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRvVVRDIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGF0ZSc7XG5cbmltcG9ydCB7IEFsaWFzLCBNb2RlbCB9IGZyb20gJ3RzbW9kZWxzJztcblxuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC91dGlsL2lzT2JzZXJ2YWJsZSc7XG5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCB0b1N0cmluZywgY2xvbmUsIGZpbHRlciB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBpc0RhdGUsIGlzVmFsaWQsIHBhcnNlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBGc0ZpbHRlckNvbmZpZyB9IGZyb20gJy4vZmlsdGVyLWNvbmZpZyc7XG5pbXBvcnQgeyBJRmlsdGVyQ29uZmlnSXRlbSB9IGZyb20gJy4uL2ludGVyZmFjZXMvaXRlbS1jb25maWcuaW50ZXJmYWNlJztcblxuXG5leHBvcnQgZW51bSBJdGVtVHlwZSB7XG4gIFRleHQgICAgICAgICAgICA9ICd0ZXh0JyxcbiAgU2VsZWN0ICAgICAgICAgID0gJ3NlbGVjdCcsXG4gIFJhbmdlICAgICAgICAgICA9ICdyYW5nZScsXG4gIERhdGUgICAgICAgICAgICA9ICdkYXRlJyxcbiAgRGF0ZVRpbWUgICAgICAgID0gJ2RhdGV0aW1lJyxcbiAgRGF0ZVJhbmdlICAgICAgID0gJ2RhdGVyYW5nZScsXG4gIERhdGVUaW1lUmFuZ2UgICA9ICdkYXRldGl