@junte/ui
Version:
Quality Angular UI components kit
270 lines • 23.3 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, ContentChildren, HostBinding, Input, QueryList, ViewChild } from '@angular/core';
import { RouterLinkActive } from '@angular/router';
import { PropertyApi } from '../../core/decorators/api';
import { Context } from '../../core/enums/context';
import { Feature } from '../../core/enums/feature';
import { Outline } from '../../core/enums/outline';
import { Position } from '../../core/enums/position';
import { UI } from '../../core/enums/ui';
import { UrlMatching } from '../../core/enums/url';
import { BadgeComponent } from '../../elements/badge/badge.component';
import { LinkTarget } from './enums';
var LinkComponent = /** @class */ (function () {
function LinkComponent() {
this.host = 'jnt-link-host';
this.ui = UI;
this._target = LinkTarget.self;
this._matching = UrlMatching.fullMatch;
this.externalLink = true;
this._context = Context.text;
this._outline = Outline.transparent;
this.disabled = false;
this._orphan = false;
this.features = [];
}
Object.defineProperty(LinkComponent.prototype, "withTitle", {
get: function () {
return !!this.title;
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "linkActive", {
// TODO: we must find better solution
get: function () {
return !!this.linkRef ? this.linkRef.isActive : false;
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "outline", {
set: function (outline) {
this._outline = outline || Outline.transparent;
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "__icon__", {
set: function (icon) {
this.icon = (typeof (icon) === 'string'
? { icon: icon, position: Position.left } : icon);
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "position", {
get: function () {
return !!this.icon ? this.icon.position : null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "source", {
get: function () {
return this._source;
},
set: function (source) {
if (!!source) {
this.externalLink = !Array.isArray(source);
this._source = source;
}
else {
this._orphan = true;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "target", {
get: function () {
return this._target;
},
set: function (target) {
this._target = target || LinkTarget.self;
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "matching", {
get: function () {
return this._matching;
},
set: function (matching) {
this._matching = matching || UrlMatching.fullMatch;
},
enumerable: true,
configurable: true
});
Object.defineProperty(LinkComponent.prototype, "context", {
set: function (context) {
this._context = context || Context.text;
},
enumerable: true,
configurable: true
});
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], LinkComponent.prototype, "host", void 0);
__decorate([
HostBinding('attr.data-context'),
__metadata("design:type", String)
], LinkComponent.prototype, "_context", void 0);
__decorate([
HostBinding('attr.data-outline'),
__metadata("design:type", Object)
], LinkComponent.prototype, "_outline", void 0);
__decorate([
HostBinding('attr.data-with-title'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], LinkComponent.prototype, "withTitle", null);
__decorate([
Input(),
__metadata("design:type", Boolean)
], LinkComponent.prototype, "collapsed", void 0);
__decorate([
HostBinding('attr.data-active'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], LinkComponent.prototype, "linkActive", null);
__decorate([
PropertyApi({
description: 'Disable link',
type: 'boolean',
default: 'false'
}),
HostBinding('attr.data-disabled'),
Input(),
__metadata("design:type", Object)
], LinkComponent.prototype, "disabled", void 0);
__decorate([
PropertyApi({
description: 'Link outline',
path: 'ui.outline',
default: Outline.transparent,
options: [Outline.transparent,
Outline.ghost,
Outline.fill]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "outline", null);
__decorate([
PropertyApi({
description: 'Icon for link',
type: 'string',
name: 'icon'
}),
Input('icon'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], LinkComponent.prototype, "__icon__", null);
__decorate([
HostBinding('attr.data-position'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], LinkComponent.prototype, "position", null);
__decorate([
PropertyApi({
description: 'Link title',
type: 'string'
}),
Input(),
__metadata("design:type", String)
], LinkComponent.prototype, "title", void 0);
__decorate([
PropertyApi({
description: 'Link query params',
type: '{[k: string]: any}'
}),
Input(),
__metadata("design:type", Object)
], LinkComponent.prototype, "queryParams", void 0);
__decorate([
PropertyApi({
description: 'Link source',
type: 'string | string[]'
}),
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], LinkComponent.prototype, "source", null);
__decorate([
HostBinding('attr.data-orphan'),
__metadata("design:type", Object)
], LinkComponent.prototype, "_orphan", void 0);
__decorate([
PropertyApi({
description: 'Link target',
path: 'ui.target',
default: LinkTarget.self,
options: [LinkTarget.blank,
LinkTarget.self,
LinkTarget.parent,
LinkTarget.top]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "target", null);
__decorate([
PropertyApi({
description: 'Fragment for link #anchor',
default: 'null',
}),
Input(),
__metadata("design:type", String)
], LinkComponent.prototype, "fragment", void 0);
__decorate([
PropertyApi({
description: 'Matching to activate link',
path: 'ui.matching',
default: UrlMatching.fullMatch,
options: [UrlMatching.fullMatch, UrlMatching.wildcard]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "matching", null);
__decorate([
PropertyApi({
description: 'Show chevron near link',
path: 'ui.feature',
options: [Feature.dropdown],
}),
HostBinding('attr.data-features'),
Input(),
__metadata("design:type", Array)
], LinkComponent.prototype, "features", void 0);
__decorate([
PropertyApi({
description: 'Link context',
path: 'ui.context',
default: Context.text,
options: [Context.text, Context.box]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "context", null);
__decorate([
ViewChild(RouterLinkActive),
__metadata("design:type", RouterLinkActive)
], LinkComponent.prototype, "linkRef", void 0);
__decorate([
ContentChildren(BadgeComponent),
__metadata("design:type", QueryList)
], LinkComponent.prototype, "badges", void 0);
LinkComponent = __decorate([
Component({
selector: 'jnt-link',
template: "<ng-container *ngIf=\"externalLink; else internalLinkTemplate\">\n <ng-container *ngIf=\"!!source; else emptySourceTemplate\">\n <a child-of=\"jnt-link-host\" data-link [href]=\"source\" [target]=\"'_' + target\">\n <ng-container *ngTemplateOutlet=\"linkTemplate\"></ng-container>\n </a>\n </ng-container>\n <ng-template #emptySourceTemplate>\n <a child-of=\"jnt-link-host\" data-link>\n <ng-container *ngTemplateOutlet=\"linkTemplate\"></ng-container>\n </a>\n </ng-template>\n</ng-container>\n\n<ng-template #internalLinkTemplate>\n <a child-of=\"jnt-link-host\" data-link #link=\"routerLinkActive\" routerLinkActive [attr.data-active]=\"link.isActive\"\n [routerLink]=\"source\"\n [routerLinkActiveOptions]=\"{exact: matching === ui.matching.fullMatch}\"\n [queryParams]=\"queryParams\"\n [fragment]=\"fragment\">\n <ng-container *ngTemplateOutlet=\"linkTemplate\"></ng-container>\n </a>\n</ng-template>\n\n<ng-template #linkTemplate>\n <span child-of=\"jnt-link-host\" data-title *ngIf=\"!!icon || !!title\">\n <jnt-icon child-of=\"jnt-link-host\" *ngIf=\"!!icon && icon.position === ui.position.left\" [icon]=\"icon?.icon\"></jnt-icon>\n <span child-of=\"jnt-link-host\" *ngIf=\"!!title\" [innerHTML]=\"title | sanitizeHtml\"></span>\n <jnt-icon child-of=\"jnt-link-host\" *ngIf=\"!!icon && icon.position === ui.position.right\" [icon]=\"icon?.icon\"></jnt-icon>\n </span>\n <div child-of=\"jnt-link-host\" data-empty *ngIf=\"collapsed && !icon\"></div>\n <ng-container *ngIf=\"!!badges.length\">\n <jnt-badge child-of=\"jnt-link-host\" data-badge *ngFor=\"let badge of badges\"\n [color]=\"badge.color\"\n [value]=\"badge.value\"\n [text]=\"badge.text\"\n [position]=\"ui.position.inline\">\n </jnt-badge>\n </ng-container>\n <jnt-icon child-of=\"jnt-link-host\" *ngIf=\"features | includes : ui.feature.dropdown\"\n [icon]=\"ui.icons.selectClose\" data-toggle>\n </jnt-icon>\n</ng-template>"
})
], LinkComponent);
return LinkComponent;
}());
export { LinkComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AanVudGUvdWkvIiwic291cmNlcyI6WyJsaWIvbmF2aWdhdGlvbi9saW5rL2xpbmsuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBV3JDO0lBQUE7UUFFcUMsU0FBSSxHQUFHLGVBQWUsQ0FBQztRQUUxRCxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBSUEsWUFBTyxHQUFlLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdEMsY0FBUyxHQUFnQixXQUFXLENBQUMsU0FBUyxDQUFDO1FBRXZELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBR3BCLGFBQVEsR0FBWSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBR2pDLGFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFD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O1lBQ3BCLDYvREFBdUM7U0FDeEMsQ0FBQztPQUNXLGFBQWEsQ0FzS3pCO0lBQUQsb0JBQUM7Q0FBQSxBQXRLRCxJQXNLQztTQXRLWSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEhvc3RCaW5kaW5nLCBJbnB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlckxpbmtBY3RpdmUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUHJvcGVydHlBcGkgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL2NvbnRleHQnO1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvZmVhdHVyZSc7XG5pbXBvcnQgeyBPdXRsaW5lIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9vdXRsaW5lJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9wb3NpdGlvbic7XG5pbXBvcnQgeyBVSSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvdWknO1xuaW1wb3J0IHsgVXJsTWF0Y2hpbmcgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VybCc7XG5pbXBvcnQgeyBCYWRnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2JhZGdlL2JhZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaW5rVGFyZ2V0IH0gZnJvbSAnLi9lbnVtcyc7XG5cbmludGVyZmFjZSBJY29uIHtcbiAgaWNvbjogc3RyaW5nO1xuICBwb3NpdGlvbjogUG9zaXRpb247XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1saW5rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmsuZW5jYXBzdWxhdGVkLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIExpbmtDb21wb25lbnQge1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JykgcmVhZG9ubHkgaG9zdCA9ICdqbnQtbGluay1ob3N0JztcblxuICB1aSA9IFVJO1xuICBpY29uOiBJY29uO1xuXG4gIHByaXZhdGUgX3NvdXJjZTogc3RyaW5nIHwgYW55W107XG4gIHByaXZhdGUgX3RhcmdldDogTGlua1RhcmdldCA9IExpbmtUYXJnZXQuc2VsZjtcbiAgcHJpdmF0ZSBfbWF0Y2hpbmc6IFVybE1hdGNoaW5nID0gVXJsTWF0Y2hpbmcuZnVsbE1hdGNoO1xuXG4gIGV4dGVybmFsTGluayA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtY29udGV4dCcpXG4gIF9jb250ZXh0OiBDb250ZXh0ID0gQ29udGV4dC50ZXh0O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLW91dGxpbmUnKVxuICBfb3V0bGluZSA9IE91dGxpbmUudHJhbnNwYXJlbnQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtd2l0aC10aXRsZScpXG4gIGdldCB3aXRoVGl0bGUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50aXRsZTtcbiAgfVxuXG4gIEBJbnB1dCgpIGNvbGxhcHNlZDogYm9vbGVhbjtcblxuICAvLyBUT0RPOiB3ZSBtdXN0IGZpbmQgYmV0dGVyIHNvbHV0aW9uXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWFjdGl2ZScpXG4gIGdldCBsaW5rQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubGlua1JlZiA/IHRoaXMubGlua1JlZi5pc0FjdGl2ZSA6IGZhbHNlO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0Rpc2FibGUgbGluaycsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6ICdmYWxzZSdcbiAgfSlcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZGlzYWJsZWQnKVxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdMaW5rIG91dGxpbmUnLFxuICAgIHBhdGg6ICd1aS5vdXRsaW5lJyxcbiAgICBkZWZhdWx0OiBPdXRsaW5lLnRyYW5zcGFyZW50LFxuICAgIG9wdGlvbnM6IFtPdXRsaW5lLnRyYW5zcGFyZW50LFxuICAgICAgT3V0bGluZS5naG9zdCxcbiAgICAgIE91dGxpbmUuZmlsbF1cbiAgfSlcbiAgQElucHV0KCkgc2V0IG91dGxpbmUob3V0bGluZTogT3V0bGluZSkge1xuICAgIHRoaXMuX291dGxpbmUgPSBvdXRsaW5lIHx8IE91dGxpbmUudHJhbnNwYXJlbnQ7XG4gIH1cblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnSWNvbiBmb3IgbGluaycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgbmFtZTogJ2ljb24nXG4gIH0pXG4gIEBJbnB1dCgnaWNvbicpXG4gIHNldCBfX2ljb25fXyhpY29uOiBzdHJpbmcgfCBJY29uKSB7XG4gICAgdGhpcy5pY29uID0gKHR5cGVvZiAoaWNvbikgPT09ICdzdHJpbmcnXG4gICAgICA/IHtpY29uOiBpY29uLCBwb3NpdGlvbjogUG9zaXRpb24ubGVmdH0gOiBpY29uKSBhcyBJY29uO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcG9zaXRpb24nKSBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5pY29uID8gdGhpcy5pY29uLnBvc2l0aW9uIDogbnVsbDtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdMaW5rIHRpdGxlJyxcbiAgICB0eXBlOiAnc3RyaW5nJ1xuICB9KVxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdMaW5rIHF1ZXJ5IHBhcmFtcycsXG4gICAgdHlwZTogJ3tbazogc3RyaW5nXTogYW55fSdcbiAgfSlcbiAgQElucHV0KClcbiAgcXVlcnlQYXJhbXM6IHtbazogc3RyaW5nXTogYW55fTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnTGluayBzb3VyY2UnLFxuICAgIHR5cGU6ICdzdHJpbmcgfCBzdHJpbmdbXSdcbiAgfSlcbiAgQElucHV0KClcbiAgc2V0IHNvdXJjZShzb3VyY2U6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKCEhc291cmNlKSB7XG4gICAgICB0aGlzLmV4dGVybmFsTGluayA9ICFBcnJheS5pc0FycmF5KHNvdXJjZSk7XG4gICAgICB0aGlzLl9zb3VyY2UgPSBzb3VyY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29ycGhhbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtb3JwaGFuJylcbiAgX29ycGhhbiA9IGZhbHNlO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdMaW5rIHRhcmdldCcsXG4gICAgcGF0aDogJ3VpLnRhcmdldCcsXG4gICAgZGVmYXVsdDogTGlua1RhcmdldC5zZWxmLFxuICAgIG9wdGlvbnM6IFtMaW5rVGFyZ2V0LmJsYW5rLFxuICAgICAgTGlua1RhcmdldC5zZWxmLFxuICAgICAgTGlua1RhcmdldC5wYXJlbnQsXG4gICAgICBMaW5rVGFyZ2V0LnRvcF1cbiAgfSlcbiAgQElucHV0KClcbiAgc2V0IHRhcmdldCh0YXJnZXQ6IExpbmtUYXJnZXQpIHtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQgfHwgTGlua1RhcmdldC5zZWxmO1xuICB9XG5cbiAgZ2V0IHRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0ZyYWdtZW50IGZvciBsaW5rICNhbmNob3InLFxuICAgIGRlZmF1bHQ6ICdudWxsJyxcbiAgfSlcbiAgQElucHV0KClcbiAgZnJhZ21lbnQ6IHN0cmluZztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnTWF0Y2hpbmcgdG8gYWN0aXZhdGUgbGluaycsXG4gICAgcGF0aDogJ3VpLm1hdGNoaW5nJyxcbiAgICBkZWZhdWx0OiBVcmxNYXRjaGluZy5mdWxsTWF0Y2gsXG4gICAgb3B0aW9uczogW1VybE1hdGNoaW5nLmZ1bGxNYXRjaCwgVXJsTWF0Y2hpbmcud2lsZGNhcmRdXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBtYXRjaGluZyhtYXRjaGluZzogVXJsTWF0Y2hpbmcpIHtcbiAgICB0aGlzLl9tYXRjaGluZyA9IG1hdGNoaW5nIHx8IFVybE1hdGNoaW5nLmZ1bGxNYXRjaDtcbiAgfVxuXG4gIGdldCBtYXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF0Y2hpbmc7XG4gIH1cblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnU2hvdyBjaGV2cm9uIG5lYXIgbGluaycsXG4gICAgcGF0aDogJ3VpLmZlYXR1cmUnLFxuICAgIG9wdGlvbnM6IFtGZWF0dXJlLmRyb3Bkb3duXSxcbiAgfSlcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZmVhdHVyZXMnKVxuICBASW5wdXQoKVxuICBmZWF0dXJlczogRmVhdHVyZVtdID0gW107XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0xpbmsgY29udGV4dCcsXG4gICAgcGF0aDogJ3VpLmNvbnRleHQnLFxuICAgIGRlZmF1bHQ6IENvbnRleHQudGV4dCxcbiAgICBvcHRpb25zOiBbQ29udGV4dC50ZXh0LCBDb250ZXh0LmJveF1cbiAgfSlcbiAgQElucHV0KClcbiAgc2V0IGNvbnRleHQoY29udGV4dDogQ29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0IHx8IENvbnRleHQudGV4dDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoUm91dGVyTGlua0FjdGl2ZSlcbiAgbGlua1JlZjogUm91dGVyTGlua0FjdGl2ZTtcblxuICBAQ29udGVudENoaWxkcmVuKEJhZGdlQ29tcG9uZW50KVxuICBiYWRnZXM6IFF1ZXJ5TGlzdDxCYWRnZUNvbXBvbmVudD47XG59XG4iXX0=