UNPKG

@firestitch/filter

Version:
243 lines 20.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { pickBy, isEqual, isObject, isArray } from 'lodash-es'; import { list as arrayList } from '@firestitch/common'; var FilterParams = /** @class */ (function () { function FilterParams(_router, _route, _filterItems) { this._router = _router; this._route = _route; this._filterItems = _filterItems; this._preserveParams = {}; } /** * @return {?} */ FilterParams.prototype.getValues = /** * @return {?} */ function () { /** @type {?} */ var values = {}; this._filterItems.forEach((/** * @param {?} filter * @return {?} */ function (filter) { values[filter.name] = filter.value; })); return values; }; /** * @return {?} */ FilterParams.prototype.getFlattenedParams = /** * @return {?} */ function () { /** @type {?} */ var params = {}; this._filterItems.forEach((/** * @param {?} filterItem * @return {?} */ function (filterItem) { Object.assign(params, filterItem.flattenedParams); })); return pickBy(params); }; /** * @return {?} */ FilterParams.prototype.updateQueryParams = /** * @return {?} */ function () { /** @type {?} */ var flattenedParams = this.getFlattenedParams(); this._filterItems.forEach((/** * @param {?} filterItem * @return {?} */ function (filterItem) { if (filterItem.isTypeSelect && filterItem.isolate) { /** @type {?} */ var isolated = arrayList(filterItem.values, 'value').sort(); /** @type {?} */ var value = filterItem.value.sort(); if (isEqual(value, isolated)) { flattenedParams[filterItem.name] = null; } } if (filterItem.isTypeAutocomplete) { if (isObject(filterItem.model)) { flattenedParams[filterItem.name] = filterItem.model.value + ':' + filterItem.model.name; } } else if (filterItem.isTypeAutocompleteChips) { if (isArray(filterItem.model) && filterItem.model.length) { flattenedParams[filterItem.name] = filterItem.model.map((/** * @param {?} item * @return {?} */ function (item) { return item.value + ':' + item.name; })).join(','); } } })); /** @type {?} */ var params = Object.assign({}, this._preserveParams, flattenedParams); // Update query this._router.navigate([], { replaceUrl: true, relativeTo: this._route, queryParams: params }).then((/** * @return {?} */ function () { })); }; /** * Parse query and update filter values * @param params */ /** * Parse query and update filter values * @param {?} params * @return {?} */ FilterParams.prototype.updateFromQueryParams = /** * Parse query and update filter values * @param {?} params * @return {?} */ function (params) { var _this = this; Object.keys(params).forEach((/** * @param {?} name * @return {?} */ function (name) { /** @type {?} */ var found = _this._filterItems.some((/** * @param {?} filterItem * @return {?} */ function (filterItem) { if (filterItem.isTypeRange) { return name === filterItem.name.concat('_min') || name === filterItem.name.concat('_max') || name === filterItem.name; } else if (filterItem.isTypeDateRange || filterItem.isTypeDateTimeRange) { return name === filterItem.name.concat('_from') || name === filterItem.name.concat('_to'); } return filterItem.name === name; })); if (!found) { _this._preserveParams[name] = params[name]; } })); this._filterItems.forEach((/** * @param {?} filterItem * @return {?} */ function (filterItem) { /** @type {?} */ var param = params[filterItem.name]; if (filterItem.isTypeRange) { /** @type {?} */ var min = params[filterItem.name + '_min']; /** @type {?} */ var max = params[filterItem.name + '_max']; filterItem.model = { min: min, max: max }; } else if (filterItem.isTypeDateRange || filterItem.isTypeDateTimeRange) { /** @type {?} */ var from = params[filterItem.name + '_from']; /** @type {?} */ var to = params[filterItem.name + '_to']; filterItem.model = { from: from, to: to }; } else if (param) { if (filterItem.isTypeSelect && filterItem.multiple) { if (filterItem.isolate && param === filterItem.isolate.value) { filterItem.model = [param]; filterItem.isolate.enabled = true; } else { filterItem.model = param.split(','); } } else if (filterItem.isTypeChips) { filterItem.model = param .split(',') .map((/** * @param {?} value * @return {?} */ function (value) { return +value; })); } else if (filterItem.isTypeCheckbox) { filterItem.model = param; } else if (filterItem.isTypeAutocomplete) { /** @type {?} */ var filterParts = param.split(':'); filterItem.model = { name: filterParts[1], value: +filterParts[0] }; } else if (filterItem.isTypeAutocompleteChips) { /** @type {?} */ var filterParts = param.split(','); filterItem.model = filterParts.reduce((/** * @param {?} arry * @param {?} value * @return {?} */ function (arry, value) { /** @type {?} */ var chipParts = value.split(':'); arry.push({ name: chipParts[1], value: +chipParts[0], }); return arry; }), []); } else { filterItem.model = param; } } })); }; return FilterParams; }()); export { FilterParams }; if (false) { /** * @type {?} * @private */ FilterParams.prototype._preserveParams; /** * @type {?} * @private */ FilterParams.prototype._router; /** * @type {?} * @private */ FilterParams.prototype._route; /** * @type {?} * @private */ FilterParams.prototype._filterItems; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXJlc3RpdGNoL2ZpbHRlci8iLCJzb3VyY2VzIjpbImFwcC9tb2RlbHMvZmlsdGVyLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvRCxPQUFPLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSXZEO0lBSUUsc0JBQ1UsT0FBZSxFQUNmLE1BQXNCLEVBQ3RCLFlBQWtDO1FBRmxDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBc0I7UUFMcEMsb0JBQWUsR0FBRyxFQUFFLENBQUM7SUFNMUIsQ0FBQzs7OztJQUVHLGdDQUFTOzs7SUFBaEI7O1lBRVEsTUFBTSxHQUFHLEVBQUU7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxNQUFNO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNyQyxDQUFDLEVBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Ozs7SUFFTSx5Q0FBa0I7OztJQUF6Qjs7WUFFUSxNQUFNLEdBQUcsRUFBRTtRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLFVBQThCO1lBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwRCxDQUFDLEVBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFFTSx3Q0FBaUI7OztJQUF4Qjs7WUFFUSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBRWpELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsVUFBVTtZQUVsQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRTs7b0JBRTNDLFFBQVEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7O29CQUN2RCxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBRXJDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDNUIsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ3pDO2FBQ0Y7WUFFRCxJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDakMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM5QixlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDekY7YUFDRjtpQkFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDN0MsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO29CQUN4RCxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRzs7OztvQkFBQyxVQUFDLElBQUk7d0JBQzNELE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDdEMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO2FBQ0Y7UUFDSCxDQUFDLEVBQUMsQ0FBQzs7WUFFRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDeEIsRUFBRSxFQUNGLElBQUksQ0FBQyxlQUFlLEVBQ3BCLGVBQWUsQ0FBQztRQUVwQixlQUFlO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN2QixXQUFXLEVBQUUsTUFBTTtTQUNwQixDQUFDLENBQUMsSUFBSTs7O1FBQUMsY0FBTyxDQUFDLEVBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSSw0Q0FBcUI7Ozs7O0lBQTVCLFVBQTZCLE1BQWM7UUFBM0MsaUJBd0ZDO1FBdEZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTzs7OztRQUFDLFVBQUMsSUFBSTs7Z0JBRXpCLEtBQUssR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUk7Ozs7WUFBQyxVQUFBLFVBQVU7Z0JBRTdDLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRTtvQkFDMUIsT0FBUSxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO3dCQUN2QyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO3dCQUN2QyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQztpQkFFbEM7cUJBQU0sSUFBSSxVQUFVLENBQUMsZUFBZSxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtvQkFDdkUsT0FBTyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMzRjtnQkFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQ2xDLENBQUMsRUFBQztZQUVGLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsS0FBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLEVBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsVUFBVTs7Z0JBRTVCLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUVyQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUU7O29CQUVwQixHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDOztvQkFDdEMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztnQkFFNUMsVUFBVSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBRTNDO2lCQUFNLElBQUksVUFBVSxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsbUJBQW1CLEVBQUU7O29CQUVqRSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDOztvQkFDeEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztnQkFFMUMsVUFBVSxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBRTNDO2lCQUFNLElBQUksS0FBSyxFQUFFO2dCQUVoQixJQUFJLFVBQVUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFFbEQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDNUQsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMzQixVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ25DO3lCQUFNO3dCQUNMLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDckM7aUJBRUY7cUJBQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO29CQUUvQixVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUs7eUJBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDVixHQUFHOzs7O29CQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUEsQ0FBQyxLQUFLLEVBQU4sQ0FBTSxFQUFDLENBQUM7aUJBRS9DO3FCQUFNLElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRTtvQkFDcEMsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7aUJBRTFCO3FCQUFNLElBQUksVUFBVSxDQUFDLGtCQUFrQixFQUFFOzt3QkFDbEMsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUVwQyxVQUFVLENBQUMsS0FBSyxHQUFHO3dCQUNqQixJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDcEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztxQkFDdkIsQ0FBQTtpQkFDRjtxQkFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRTs7d0JBQ3ZDLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztvQkFFcEMsVUFBVSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTTs7Ozs7b0JBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSzs7NEJBRTFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzt3QkFFbEMsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDUixJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQzs0QkFDbEIsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt5QkFDckIsQ0FBQyxDQUFDO3dCQUVILE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUMsR0FBRSxFQUFFLENBQUMsQ0FBQTtpQkFFUDtxQkFBTTtvQkFDTCxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDMUI7YUFDRjtRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQXJLRCxJQXFLQzs7Ozs7OztJQW5LQyx1Q0FBNkI7Ozs7O0lBRzNCLCtCQUF1Qjs7Ozs7SUFDdkIsOEJBQThCOzs7OztJQUM5QixvQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgcGlja0J5LCBpc0VxdWFsLCBpc09iamVjdCwgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBsaXN0IGFzIGFycmF5TGlzdCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBGc0ZpbHRlckNvbmZpZ0l0ZW0gfSBmcm9tICcuLi9tb2RlbHMvZmlsdGVyLWl0ZW0nO1xuXG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJQYXJhbXMge1xuXG4gIHByaXZhdGUgX3ByZXNlcnZlUGFyYW1zID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgX2ZpbHRlckl0ZW1zOiBGc0ZpbHRlckNvbmZpZ0l0ZW1bXSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXRWYWx1ZXMoKSB7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICB2YWx1ZXNbZmlsdGVyLm5hbWVdID0gZmlsdGVyLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRGbGF0dGVuZWRQYXJhbXMoKSB7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5mb3JFYWNoKChmaWx0ZXJJdGVtOiBGc0ZpbHRlckNvbmZpZ0l0ZW0pID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCBmaWx0ZXJJdGVtLmZsYXR0ZW5lZFBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGlja0J5KHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUXVlcnlQYXJhbXMoKSB7XG5cbiAgICBjb25zdCBmbGF0dGVuZWRQYXJhbXMgPSB0aGlzLmdldEZsYXR0ZW5lZFBhcmFtcygpO1xuXG4gICAgdGhpcy5fZmlsdGVySXRlbXMuZm9yRWFjaChmaWx0ZXJJdGVtID0+IHtcblxuICAgICAgaWYgKGZpbHRlckl0ZW0uaXNUeXBlU2VsZWN0ICYmIGZpbHRlckl0ZW0uaXNvbGF0ZSkge1xuXG4gICAgICAgIGNvbnN0IGlzb2xhdGVkID0gYXJyYXlMaXN0KGZpbHRlckl0ZW0udmFsdWVzLCAndmFsdWUnKS5zb3J0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVySXRlbS52YWx1ZS5zb3J0KCk7XG5cbiAgICAgICAgaWYgKGlzRXF1YWwodmFsdWUsIGlzb2xhdGVkKSkge1xuICAgICAgICAgIGZsYXR0ZW5lZFBhcmFtc1tmaWx0ZXJJdGVtLm5hbWVdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVySXRlbS5pc1R5cGVBdXRvY29tcGxldGUpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGZpbHRlckl0ZW0ubW9kZWwpKSB7XG4gICAgICAgICAgZmxhdHRlbmVkUGFyYW1zW2ZpbHRlckl0ZW0ubmFtZV0gPSBmaWx0ZXJJdGVtLm1vZGVsLnZhbHVlICsgJzonICsgZmlsdGVySXRlbS5tb2RlbC5uYW1lO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0uaXNUeXBlQXV0b2NvbXBsZXRlQ2hpcHMpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZmlsdGVySXRlbS5tb2RlbCkgJiYgZmlsdGVySXRlbS5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgICBmbGF0dGVuZWRQYXJhbXNbZmlsdGVySXRlbS5uYW1lXSA9IGZpbHRlckl0ZW0ubW9kZWwubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSArICc6JyArIGl0ZW0ubmFtZTtcbiAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB0aGlzLl9wcmVzZXJ2ZVBhcmFtcyxcbiAgICAgICAgZmxhdHRlbmVkUGFyYW1zKTtcblxuICAgIC8vIFVwZGF0ZSBxdWVyeVxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuX3JvdXRlLFxuICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtc1xuICAgIH0pLnRoZW4oKCkgPT4ge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHF1ZXJ5IGFuZCB1cGRhdGUgZmlsdGVyIHZhbHVlc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRnJvbVF1ZXJ5UGFyYW1zKHBhcmFtczogUGFyYW1zKSB7XG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKG5hbWUpID0+IHtcblxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9maWx0ZXJJdGVtcy5zb21lKGZpbHRlckl0ZW0gPT4ge1xuXG4gICAgICAgIGlmIChmaWx0ZXJJdGVtLmlzVHlwZVJhbmdlKSB7XG4gICAgICAgICAgcmV0dXJuICBuYW1lID09PSBmaWx0ZXJJdGVtLm5hbWUuY29uY2F0KCdfbWluJykgfHxcbiAgICAgICAgICAgICAgICAgIG5hbWUgPT09IGZpbHRlckl0ZW0ubmFtZS5jb25jYXQoJ19tYXgnKSB8fFxuICAgICAgICAgICAgICAgICAgbmFtZSA9PT0gZmlsdGVySXRlbS5uYW1lO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS5pc1R5cGVEYXRlUmFuZ2UgfHwgZmlsdGVySXRlbS5pc1R5cGVEYXRlVGltZVJhbmdlKSB7XG4gICAgICAgICAgcmV0dXJuIG5hbWUgPT09IGZpbHRlckl0ZW0ubmFtZS5jb25jYXQoJ19mcm9tJykgfHwgbmFtZSA9PT0gZmlsdGVySXRlbS5uYW1lLmNvbmNhdCgnX3RvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVySXRlbS5uYW1lID09PSBuYW1lO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgdGhpcy5fcHJlc2VydmVQYXJhbXNbbmFtZV0gPSBwYXJhbXNbbmFtZV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5mb3JFYWNoKGZpbHRlckl0ZW0gPT4ge1xuXG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tmaWx0ZXJJdGVtLm5hbWVdO1xuXG4gICAgICBpZiAoZmlsdGVySXRlbS5pc1R5cGVSYW5nZSkge1xuXG4gICAgICAgIGNvbnN0IG1pbiA9IHBhcmFtc1tmaWx0ZXJJdGVtLm5hbWUgKyAnX21pbiddO1xuICAgICAgICBjb25zdCBtYXggPSBwYXJhbXNbZmlsdGVySXRlbS5uYW1lICsgJ19tYXgnXTtcblxuICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0geyBtaW46IG1pbiwgbWF4OiBtYXggfTtcblxuICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLmlzVHlwZURhdGVSYW5nZSB8fCBmaWx0ZXJJdGVtLmlzVHlwZURhdGVUaW1lUmFuZ2UpIHtcblxuICAgICAgICBjb25zdCBmcm9tID0gcGFyYW1zW2ZpbHRlckl0ZW0ubmFtZSArICdfZnJvbSddO1xuICAgICAgICBjb25zdCB0byA9IHBhcmFtc1tmaWx0ZXJJdGVtLm5hbWUgKyAnX3RvJ107XG5cbiAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHsgZnJvbTogZnJvbSwgdG86IHRvIH07XG5cbiAgICAgIH0gZWxzZSBpZiAocGFyYW0pIHtcblxuICAgICAgICBpZiAoZmlsdGVySXRlbS5pc1R5cGVTZWxlY3QgJiYgZmlsdGVySXRlbS5tdWx0aXBsZSkge1xuXG4gICAgICAgICAgaWYgKGZpbHRlckl0ZW0uaXNvbGF0ZSAmJiBwYXJhbSA9PT0gZmlsdGVySXRlbS5pc29sYXRlLnZhbHVlKSB7XG4gICAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gW3BhcmFtXTtcbiAgICAgICAgICAgIGZpbHRlckl0ZW0uaXNvbGF0ZS5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHBhcmFtLnNwbGl0KCcsJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS5pc1R5cGVDaGlwcykge1xuXG4gICAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gcGFyYW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+ICt2YWx1ZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJJdGVtLmlzVHlwZUNoZWNrYm94KSB7XG4gICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHBhcmFtO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVySXRlbS5pc1R5cGVBdXRvY29tcGxldGUpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHBhcmFtLnNwbGl0KCc6Jyk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0ge1xuICAgICAgICAgICAgbmFtZTogZmlsdGVyUGFydHNbMV0sXG4gICAgICAgICAgICB2YWx1ZTogK2ZpbHRlclBhcnRzWzBdXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckl0ZW0uaXNUeXBlQXV0b2NvbXBsZXRlQ2hpcHMpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJ0cyA9IHBhcmFtLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gZmlsdGVyUGFydHMucmVkdWNlKChhcnJ5LCB2YWx1ZSkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBjaGlwUGFydHMgPSB2YWx1ZS5zcGxpdCgnOicpO1xuXG4gICAgICAgICAgICBhcnJ5LnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBjaGlwUGFydHNbMV0sXG4gICAgICAgICAgICAgIHZhbHVlOiArY2hpcFBhcnRzWzBdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcnJ5O1xuICAgICAgICAgIH0sIFtdKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHBhcmFtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==