@vicoders/angular
Version:
- [Vicoders Angular Common Module](#vicoders-angular-common-module) - [Install](#install) - [How to use](#how-to-use) - [Pipes](#pipes) - [hasItem](#hasitem) - [isArray](#isarray) - [length](#length) - [orderBy](#orderby)
206 lines • 21 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ActivatedRoute, Router, NavigationEnd } from '@angular/router';
import { Component, Input } from '@angular/core';
import * as _ from 'lodash';
/** @type {?} */
const ASC = 'asc';
/** @type {?} */
const DESC = 'desc';
export class SortByFieldComponent {
/**
* @param {?} route
* @param {?} activatedRoute
*/
constructor(route, activatedRoute) {
this.allowMulti = false;
this.route = route;
this.activatedRoute = activatedRoute;
}
/**
* @return {?}
*/
ngOnInit() {
if (!_.isUndefined(this.default)) {
if (this.default.toLowerCase() === 'asc') {
this.direction = ASC;
}
if (this.default.toLowerCase() === 'desc') {
this.direction = DESC;
}
}
if (!_.isUndefined(this.activatedRoute.snapshot.queryParams.sort)) {
/** @type {?} */
const fields = this.activatedRoute.snapshot.queryParams.sort.split(',');
if (_.includes(fields, this.field) || _.includes(fields, `+${this.field}`)) {
this.direction = ASC;
}
else if (_.includes(fields, `-${this.field}`)) {
this.direction = DESC;
}
}
this.navigationSubscription = this.route.events.subscribe((e) => {
if (e instanceof NavigationEnd) {
if (!_.isUndefined(this.default)) {
if (this.default.toLowerCase() === 'asc') {
this.direction = ASC;
}
if (this.default.toLowerCase() === 'desc') {
this.direction = DESC;
}
}
if (!_.isUndefined(this.activatedRoute.snapshot.queryParams.sort)) {
/** @type {?} */
const fields = this.activatedRoute.snapshot.queryParams.sort.split(',');
if (_.includes(fields, this.field) || _.includes(fields, `+${this.field}`)) {
this.direction = ASC;
}
else if (_.includes(fields, `-${this.field}`)) {
this.direction = DESC;
}
else {
// tslint:disable-next-line:no-unused-expression
this.direction = undefined;
}
}
else {
// tslint:disable-next-line:no-unused-expression
this.direction = undefined;
}
}
});
}
/**
* @return {?}
*/
ngOnDestroy() {
this.navigationSubscription.unsubscribe();
}
/**
* @return {?}
*/
getDirection() {
return this.direction;
}
/**
* @return {?}
*/
getRouterDirection() {
if (this.direction === ASC) {
return '';
}
else if (this.direction === DESC) {
return '-';
}
else {
return undefined;
}
}
/**
* @return {?}
*/
sort() {
if (this.direction === ASC) {
this.direction = DESC;
}
else if (this.direction === DESC) {
this.direction = undefined;
}
else {
this.direction = ASC;
}
/** @type {?} */
const url = this.activatedRoute.snapshot.url;
/** @type {?} */
const queryParams = this.activatedRoute.snapshot.queryParams;
/** @type {?} */
let fields = [];
if (this.allowMulti === true) {
if (!_.isUndefined(queryParams.sort)) {
fields = queryParams.sort.split(',');
if (_.includes(fields, this.field) || _.includes(fields, `+${this.field}`) || _.includes(fields, `-${this.field}`)) {
if (this.getRouterDirection() === undefined) {
_.remove(fields, item => item === this.field || item === `+${this.field}` || item === `-${this.field}`);
}
else {
fields = _.map(fields, item => {
if (item === this.field || item === `+${this.field}` || item === `-${this.field}`) {
item = `${this.getRouterDirection()}${this.field}`;
}
return item;
});
}
}
else {
if (this.getRouterDirection() !== undefined) {
fields.push(`${this.getRouterDirection()}${this.field}`);
}
}
}
else {
if (this.getRouterDirection() !== undefined) {
fields.push(`${this.getRouterDirection()}${this.field}`);
}
}
}
else {
if (this.getRouterDirection() !== undefined) {
fields.push(`${this.getRouterDirection()}${this.field}`);
}
}
_.remove(fields, item => _.isNil(item) || item === '');
/** @type {?} */
let extras = { queryParams: { sort: fields.join(','), page: 1 } };
if (!_.isUndefined(this.options)) {
extras = _.assign(this.options, extras);
}
if (_.isUndefined(this.callback)) {
this.route.navigate([document.location.pathname], _.assign(extras, { queryParamsHandling: 'merge' }));
}
else {
this.callback(this.field, this.direction, extras);
}
}
}
SortByFieldComponent.decorators = [
{ type: Component, args: [{
// tslint:disable-next-line:component-selector
selector: 'sort-by-field',
template: "<span class=\"sorting fa fa-sort\" [ngClass]=\"{ 'fa-sort-up': direction === 'asc', 'fa-sort-down': direction === 'desc' }\" (click)=\"sort()\"></span>\n",
styles: [":host .sorting{cursor:pointer}"]
}] }
];
SortByFieldComponent.ctorParameters = () => [
{ type: Router },
{ type: ActivatedRoute }
];
SortByFieldComponent.propDecorators = {
field: [{ type: Input }],
allowMulti: [{ type: Input }],
default: [{ type: Input }],
options: [{ type: Input }],
callback: [{ type: Input }]
};
if (false) {
/** @type {?} */
SortByFieldComponent.prototype.navigationSubscription;
/** @type {?} */
SortByFieldComponent.prototype.activatedRoute;
/** @type {?} */
SortByFieldComponent.prototype.route;
/** @type {?} */
SortByFieldComponent.prototype.field;
/** @type {?} */
SortByFieldComponent.prototype.allowMulti;
/** @type {?} */
SortByFieldComponent.prototype.default;
/** @type {?} */
SortByFieldComponent.prototype.options;
/** @type {?} */
SortByFieldComponent.prototype.callback;
/** @type {?} */
SortByFieldComponent.prototype.direction;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1ieS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Admljb2RlcnMvYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL3NvcnQtYnktZmllbGQvc29ydC1ieS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFvQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7TUFHdEIsR0FBRyxHQUFHLEtBQUs7O01BQ1gsSUFBSSxHQUFHLE1BQU07QUFRbkIsTUFBTTs7Ozs7SUFZSixZQUFZLEtBQWEsRUFBRSxjQUE4QjtRQVBoRCxlQUFVLEdBQWEsS0FBSyxDQUFDO1FBUXBDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7Ozs7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRTtnQkFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDdkI7U0FDRjtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTs7a0JBQzNE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RSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2RzthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDOzs7WUF4SUYsU0FBUyxTQUFDOztnQkFFVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIscUtBQTZDOzthQUU5Qzs7O1lBYndCLE1BQU07WUFBdEIsY0FBYzs7O29CQWtCcEIsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLOzs7O0lBUE4sc0RBQXFDOztJQUNyQyw4Q0FBK0I7O0lBQy9CLHFDQUFjOztJQUNkLHFDQUF1Qjs7SUFDdkIsMENBQXNDOztJQUN0Qyx1Q0FBMEI7O0lBQzFCLHVDQUFvQzs7SUFDcEMsd0NBQTZCOztJQUU3Qix5Q0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBOYXZpZ2F0aW9uRXh0cmFzLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuY29uc3QgQVNDID0gJ2FzYyc7XG5jb25zdCBERVNDID0gJ2Rlc2MnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ3NvcnQtYnktZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc29ydC1ieS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NvcnQtYnktZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTb3J0QnlGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgbmF2aWdhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIHJvdXRlOiBSb3V0ZXI7XG4gIEBJbnB1dCgpIGZpZWxkOiBTdHJpbmc7XG4gIEBJbnB1dCgpIGFsbG93TXVsdGk/OiBCb29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRlZmF1bHQ/OiBTdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGlvbnM/OiBOYXZpZ2F0aW9uRXh0cmFzO1xuICBASW5wdXQoKSBjYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG4gIHB1YmxpYyBkaXJlY3Rpb246IFN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZTogUm91dGVyLCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICB0aGlzLnJvdXRlID0gcm91dGU7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZSA9IGFjdGl2YXRlZFJvdXRlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGVmYXVsdCkpIHtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHQudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycpIHtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBBU0M7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZWZhdWx0LnRvTG93ZXJDYXNlKCkgPT09ICdkZXNjJykge1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IERFU0M7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnNvcnQpKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnNvcnQuc3BsaXQoJywnKTtcbiAgICAgIGlmIChfLmluY2x1ZGVzKGZpZWxkcywgdGhpcy5maWVsZCkgfHwgXy5pbmNsdWRlcyhmaWVsZHMsIGArJHt0aGlzLmZpZWxkfWApKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gQVNDO1xuICAgICAgfSBlbHNlIGlmIChfLmluY2x1ZGVzKGZpZWxkcywgYC0ke3RoaXMuZmllbGR9YCkpIHtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBERVNDO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubmF2aWdhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUuZXZlbnRzLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGVmYXVsdCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0LnRvTG93ZXJDYXNlKCkgPT09ICdhc2MnKSB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IEFTQztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC50b0xvd2VyQ2FzZSgpID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gREVTQztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuc29ydCkpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnNvcnQuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhmaWVsZHMsIHRoaXMuZmllbGQpIHx8IF8uaW5jbHVkZXMoZmllbGRzLCBgKyR7dGhpcy5maWVsZH1gKSkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBBU0M7XG4gICAgICAgICAgfSBlbHNlIGlmIChfLmluY2x1ZGVzKGZpZWxkcywgYC0ke3RoaXMuZmllbGR9YCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gREVTQztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVudXNlZC1leHByZXNzaW9uXG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVudXNlZC1leHByZXNzaW9uXG4gICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubmF2aWdhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0RGlyZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbjtcbiAgfVxuXG4gIGdldFJvdXRlckRpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09IEFTQykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3Rpb24gPT09IERFU0MpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHNvcnQoKSB7XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSBBU0MpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gREVTQztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09PSBERVNDKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXJlY3Rpb24gPSBBU0M7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QudXJsO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICBsZXQgZmllbGRzID0gW107XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHF1ZXJ5UGFyYW1zLnNvcnQpKSB7XG4gICAgICAgIGZpZWxkcyA9IHF1ZXJ5UGFyYW1zLnNvcnQuc3BsaXQoJywnKTtcbiAgICAgICAgaWYgKF8uaW5jbHVkZXMoZmllbGRzLCB0aGlzLmZpZWxkKSB8fCBfLmluY2x1ZGVzKGZpZWxkcywgYCske3RoaXMuZmllbGR9YCkgfHwgXy5pbmNsdWRlcyhmaWVsZHMsIGAtJHt0aGlzLmZpZWxkfWApKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0Um91dGVyRGlyZWN0aW9uKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgXy5yZW1vdmUoZmllbGRzLCBpdGVtID0+IGl0ZW0gPT09IHRoaXMuZmllbGQgfHwgaXRlbSA9PT0gYCske3RoaXMuZmllbGR9YCB8fCBpdGVtID09PSBgLSR7dGhpcy5maWVsZH1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzID0gXy5tYXAoZmllbGRzLCBpdGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuZmllbGQgfHwgaXRlbSA9PT0gYCske3RoaXMuZmllbGR9YCB8fCBpdGVtID09PSBgLSR7dGhpcy5maWVsZH1gKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IGAke3RoaXMuZ2V0Um91dGVyRGlyZWN0aW9uKCl9JHt0aGlzLmZpZWxkfWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0Um91dGVyRGlyZWN0aW9uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goYCR7dGhpcy5nZXRSb3V0ZXJEaXJlY3Rpb24oKX0ke3RoaXMuZmllbGR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5nZXRSb3V0ZXJEaXJlY3Rpb24oKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmllbGRzLnB1c2goYCR7dGhpcy5nZXRSb3V0ZXJEaXJlY3Rpb24oKX0ke3RoaXMuZmllbGR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZ2V0Um91dGVyRGlyZWN0aW9uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmaWVsZHMucHVzaChgJHt0aGlzLmdldFJvdXRlckRpcmVjdGlvbigpfSR7dGhpcy5maWVsZH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXy5yZW1vdmUoZmllbGRzLCBpdGVtID0+IF8uaXNOaWwoaXRlbSkgfHwgaXRlbSA9PT0gJycpO1xuICAgIGxldCBleHRyYXMgPSB7IHF1ZXJ5UGFyYW1zOiB7IHNvcnQ6IGZpZWxkcy5qb2luKCcsJyksIHBhZ2U6IDEgfSB9O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICBleHRyYXMgPSBfLmFzc2lnbih0aGlzLm9wdGlvbnMsIGV4dHJhcyk7XG4gICAgfVxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY2FsbGJhY2spKSB7XG4gICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFtkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZV0sIF8uYXNzaWduKGV4dHJhcywgeyBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmZpZWxkLCB0aGlzLmRpcmVjdGlvbiwgZXh0cmFzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==