lucide-angular
Version:
A Lucide icon library package for Angular applications.
176 lines • 23.2 kB
JavaScript
import { ChangeDetectorRef, Component, ElementRef, Inject, Input, Renderer2, } from '@angular/core';
import defaultAttributes from '../icons/constants/default-attributes';
import { LUCIDE_ICONS } from './lucide-icon.provider';
import { LucideIconConfig } from './lucide-icon.config';
import * as i0 from "@angular/core";
import * as i1 from "./lucide-icon.config";
export function formatFixed(number, decimals = 3) {
return parseFloat(number.toFixed(decimals)).toString(10);
}
export class LucideAngularComponent {
constructor(elem, renderer, changeDetector, iconProviders, iconConfig) {
this.elem = elem;
this.renderer = renderer;
this.changeDetector = changeDetector;
this.iconProviders = iconProviders;
this.iconConfig = iconConfig;
this.absoluteStrokeWidth = false;
this.defaultSize = defaultAttributes.height;
}
get size() {
return this._size ?? this.iconConfig.size;
}
set size(value) {
if (value) {
this._size = this.parseNumber(value);
}
else {
delete this._size;
}
}
get strokeWidth() {
return this._strokeWidth ?? this.iconConfig.strokeWidth;
}
set strokeWidth(value) {
if (value) {
this._strokeWidth = this.parseNumber(value);
}
else {
delete this._strokeWidth;
}
}
ngOnChanges(changes) {
if (changes.name ||
changes.img ||
changes.color ||
changes.size ||
changes.absoluteStrokeWidth ||
changes.strokeWidth ||
changes.class) {
this.color = this.color ?? this.iconConfig.color;
this.size = this.parseNumber(this.size ?? this.iconConfig.size);
this.strokeWidth = this.parseNumber(this.strokeWidth ?? this.iconConfig.strokeWidth);
this.absoluteStrokeWidth = this.absoluteStrokeWidth ?? this.iconConfig.absoluteStrokeWidth;
const nameOrIcon = this.img ?? this.name;
if (typeof nameOrIcon === 'string') {
const icoOfName = this.getIcon(this.toPascalCase(nameOrIcon));
if (icoOfName) {
this.replaceElement(icoOfName);
}
else {
throw new Error(`The "${nameOrIcon}" icon has not been provided by any available icon providers.`);
}
}
else if (Array.isArray(nameOrIcon)) {
this.replaceElement(nameOrIcon);
}
else {
throw new Error(`No icon name or image has been provided.`);
}
}
this.changeDetector.markForCheck();
}
replaceElement(img) {
const attributes = {
...defaultAttributes,
width: this.size,
height: this.size,
stroke: this.color ?? this.iconConfig.color,
'stroke-width': this.absoluteStrokeWidth
? formatFixed(this.strokeWidth / (this.size / this.defaultSize))
: this.strokeWidth.toString(10),
};
const icoElement = this.createElement(['svg', attributes, img]);
icoElement.classList.add('lucide');
if (typeof this.name === 'string') {
icoElement.classList.add(`lucide-${this.name.replace('_', '-')}`);
}
if (this.class) {
icoElement.classList.add(...this.class
.split(/ /)
.map((a) => a.trim())
.filter((a) => a.length > 0));
}
const childElements = this.elem.nativeElement.childNodes;
for (const child of childElements) {
this.renderer.removeChild(this.elem.nativeElement, child);
}
this.renderer.appendChild(this.elem.nativeElement, icoElement);
}
toPascalCase(str) {
return str.replace(/(\w)([a-z0-9]*)(_|-|\s*)/g, (g0, g1, g2) => g1.toUpperCase() + g2.toLowerCase());
}
parseNumber(value) {
if (typeof value === 'string') {
const parsedValue = parseInt(value, 10);
if (isNaN(parsedValue)) {
throw new Error(`${value} is not numeric.`);
}
return parsedValue;
}
return value;
}
getIcon(name) {
for (const iconProvider of Array.isArray(this.iconProviders)
? this.iconProviders
: [this.iconProviders]) {
if (iconProvider.hasIcon(name)) {
return iconProvider.getIcon(name);
}
}
return null;
}
createElement([tag, attrs, children = []]) {
const element = this.renderer.createElement(tag, 'http://www.w3.org/2000/svg');
Object.keys(attrs).forEach((name) => {
const attrValue = typeof attrs[name] === 'string' ? attrs[name] : attrs[name].toString(10);
this.renderer.setAttribute(element, name, attrValue);
});
if (children.length) {
children.forEach((child) => {
const childElement = this.createElement(child);
this.renderer.appendChild(element, childElement);
});
}
return element;
}
}
LucideAngularComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: LucideAngularComponent, deps: [{ token: ElementRef }, { token: Renderer2 }, { token: ChangeDetectorRef }, { token: LUCIDE_ICONS }, { token: LucideIconConfig }], target: i0.ɵɵFactoryTarget.Component });
LucideAngularComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: { class: "class", name: "name", img: "img", color: "color", absoluteStrokeWidth: "absoluteStrokeWidth", size: "size", strokeWidth: "strokeWidth" }, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: LucideAngularComponent, decorators: [{
type: Component,
args: [{
selector: 'lucide-angular, lucide-icon, i-lucide, span-lucide',
template: '<ng-content></ng-content>',
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef, decorators: [{
type: Inject,
args: [ElementRef]
}] }, { type: i0.Renderer2, decorators: [{
type: Inject,
args: [Renderer2]
}] }, { type: i0.ChangeDetectorRef, decorators: [{
type: Inject,
args: [ChangeDetectorRef]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [LUCIDE_ICONS]
}] }, { type: i1.LucideIconConfig, decorators: [{
type: Inject,
args: [LucideIconConfig]
}] }]; }, propDecorators: { class: [{
type: Input
}], name: [{
type: Input
}], img: [{
type: Input
}], color: [{
type: Input
}], absoluteStrokeWidth: [{
type: Input
}], size: [{
type: Input
}], strokeWidth: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVjaWRlLWFuZ3VsYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9sdWNpZGUtYW5ndWxhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8saUJBQWlCLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBK0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBbUJ4RCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFRLEdBQUcsQ0FBQztJQUN0RCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFNRCxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQzhCLElBQWdCLEVBQ2pCLFFBQW1CLEVBQ1gsY0FBaUMsRUFDdEMsYUFBNEMsRUFDeEMsVUFBNEI7UUFKbEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ1gsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUErQjtRQUN4QyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQVJ2RCx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFVbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFDOUMsQ0FBQztJQUlELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztJ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QkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFtQk8sSUFBSTtzQkFBaEIsS0FBSztnQkFjTyxXQUFXO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMdWNpZGVJY29uRGF0YSB9IGZyb20gJy4uL2ljb25zL3R5cGVzJztcbmltcG9ydCBkZWZhdWx0QXR0cmlidXRlcyBmcm9tICcuLi9pY29ucy9jb25zdGFudHMvZGVmYXVsdC1hdHRyaWJ1dGVzJztcbmltcG9ydCB7IExVQ0lERV9JQ09OUywgTHVjaWRlSWNvblByb3ZpZGVySW50ZXJmYWNlIH0gZnJvbSAnLi9sdWNpZGUtaWNvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBMdWNpZGVJY29uQ29uZmlnIH0gZnJvbSAnLi9sdWNpZGUtaWNvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHlwZWRDaGFuZ2U8VD4gZXh0ZW5kcyBTaW1wbGVDaGFuZ2Uge1xuICBwcmV2aW91c1ZhbHVlOiBUO1xuICBjdXJyZW50VmFsdWU6IFQ7XG59XG5cbnR5cGUgU3ZnQXR0cmlidXRlcyA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH07XG5cbnR5cGUgTHVjaWRlQW5ndWxhckNvbXBvbmVudENoYW5nZXMgPSB7XG4gIG5hbWU/OiBUeXBlZENoYW5nZTxzdHJpbmcgfCBMdWNpZGVJY29uRGF0YT47XG4gIGltZz86IFR5cGVkQ2hhbmdlPEx1Y2lkZUljb25EYXRhIHwgdW5kZWZpbmVkPjtcbiAgY29sb3I/OiBUeXBlZENoYW5nZTxzdHJpbmc+O1xuICBzaXplPzogVHlwZWRDaGFuZ2U8bnVtYmVyPjtcbiAgc3Ryb2tlV2lkdGg/OiBUeXBlZENoYW5nZTxudW1iZXI+O1xuICBhYnNvbHV0ZVN0cm9rZVdpZHRoPzogVHlwZWRDaGFuZ2U8Ym9vbGVhbj47XG4gIGNsYXNzOiBUeXBlZENoYW5nZTxzdHJpbmc+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpeGVkKG51bWJlcjogbnVtYmVyLCBkZWNpbWFscyA9IDMpOiBzdHJpbmcge1xuICByZXR1cm4gcGFyc2VGbG9hdChudW1iZXIudG9GaXhlZChkZWNpbWFscykpLnRvU3RyaW5nKDEwKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHVjaWRlLWFuZ3VsYXIsIGx1Y2lkZS1pY29uLCBpLWx1Y2lkZSwgc3Bhbi1sdWNpZGUnLFxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxufSlcbmV4cG9ydCBjbGFzcyBMdWNpZGVBbmd1bGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5hbWU/OiBzdHJpbmcgfCBMdWNpZGVJY29uRGF0YTtcbiAgQElucHV0KCkgaW1nPzogTHVjaWRlSWNvbkRhdGE7XG4gIEBJbnB1dCgpIGNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBhYnNvbHV0ZVN0cm9rZVdpZHRoID0gZmFsc2U7XG4gIGRlZmF1bHRTaXplOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIGVsZW06IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChSZW5kZXJlcjIpIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENoYW5nZURldGVjdG9yUmVmKSBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KExVQ0lERV9JQ09OUykgcHJpdmF0ZSBpY29uUHJvdmlkZXJzOiBMdWNpZGVJY29uUHJvdmlkZXJJbnRlcmZhY2VbXSxcbiAgICBASW5qZWN0KEx1Y2lkZUljb25Db25maWcpIHByaXZhdGUgaWNvbkNvbmZpZzogTHVjaWRlSWNvbkNvbmZpZyxcbiAgKSB7XG4gICAgdGhpcy5kZWZhdWx0U2l6ZSA9IGRlZmF1bHRBdHRyaWJ1dGVzLmhlaWdodDtcbiAgfVxuXG4gIF9zaXplPzogbnVtYmVyO1xuXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemUgPz8gdGhpcy5pY29uQ29uZmlnLnNpemU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgc2l6ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zaXplID0gdGhpcy5wYXJzZU51bWJlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9zaXplO1xuICAgIH1cbiAgfVxuXG4gIF9zdHJva2VXaWR0aD86IG51bWJlcjtcblxuICBnZXQgc3Ryb2tlV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGggPz8gdGhpcy5pY29uQ29uZmlnLnN0cm9rZVdpZHRoO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHN0cm9rZVdpZHRoKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3N0cm9rZVdpZHRoID0gdGhpcy5wYXJzZU51bWJlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9zdHJva2VXaWR0aDtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBMdWNpZGVBbmd1bGFyQ29tcG9uZW50Q2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMubmFtZSB8fFxuICAgICAgY2hhbmdlcy5pbWcgfHxcbiAgICAgIGNoYW5nZXMuY29sb3IgfHxcbiAgICAgIGNoYW5nZXMuc2l6ZSB8fFxuICAgICAgY2hhbmdlcy5hYnNvbHV0ZVN0cm9rZVdpZHRoIHx8XG4gICAgICBjaGFuZ2VzLnN0cm9rZVdpZHRoIHx8XG4gICAgICBjaGFuZ2VzLmNsYXNzXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbG9yID0gdGhpcy5jb2xvciA/PyB0aGlzLmljb25Db25maWcuY29sb3I7XG4gICAgICB0aGlzLnNpemUgPSB0aGlzLnBhcnNlTnVtYmVyKHRoaXMuc2l6ZSA/PyB0aGlzLmljb25Db25maWcuc2l6ZSk7XG4gICAgICB0aGlzLnN0cm9rZVdpZHRoID0gdGhpcy5wYXJzZU51bWJlcih0aGlzLnN0cm9rZVdpZHRoID8/IHRoaXMuaWNvbkNvbmZpZy5zdHJva2VXaWR0aCk7XG4gICAgICB0aGlzLmFic29sdXRlU3Ryb2tlV2lkdGggPSB0aGlzLmFic29sdXRlU3Ryb2tlV2lkdGggPz8gdGhpcy5pY29uQ29uZmlnLmFic29sdXRlU3Ryb2tlV2lkdGg7XG4gICAgICBjb25zdCBuYW1lT3JJY29uID0gdGhpcy5pbWcgPz8gdGhpcy5uYW1lO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lT3JJY29uID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBpY29PZk5hbWUgPSB0aGlzLmdldEljb24odGhpcy50b1Bhc2NhbENhc2UobmFtZU9ySWNvbikpO1xuICAgICAgICBpZiAoaWNvT2ZOYW1lKSB7XG4gICAgICAgICAgdGhpcy5yZXBsYWNlRWxlbWVudChpY29PZk5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgXCIke25hbWVPckljb259XCIgaWNvbiBoYXMgbm90IGJlZW4gcHJvdmlkZWQgYnkgYW55IGF2YWlsYWJsZSBpY29uIHByb3ZpZGVycy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuYW1lT3JJY29uKSkge1xuICAgICAgICB0aGlzLnJlcGxhY2VFbGVtZW50KG5hbWVPckljb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBpY29uIG5hbWUgb3IgaW1hZ2UgaGFzIGJlZW4gcHJvdmlkZWQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlcGxhY2VFbGVtZW50KGltZzogTHVjaWRlSWNvbkRhdGEpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsXG4gICAgICB3aWR0aDogdGhpcy5zaXplLFxuICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICBzdHJva2U6IHRoaXMuY29sb3IgPz8gdGhpcy5pY29uQ29uZmlnLmNvbG9yLFxuICAgICAgJ3N0cm9rZS13aWR0aCc6IHRoaXMuYWJzb2x1dGVTdHJva2VXaWR0aFxuICAgICAgICA/IGZvcm1hdEZpeGVkKHRoaXMuc3Ryb2tlV2lkdGggLyAodGhpcy5zaXplIC8gdGhpcy5kZWZhdWx0U2l6ZSkpXG4gICAgICAgIDogdGhpcy5zdHJva2VXaWR0aC50b1N0cmluZygxMCksXG4gICAgfTtcbiAgICBjb25zdCBpY29FbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KFsnc3ZnJywgYXR0cmlidXRlcywgaW1nXSk7XG4gICAgaWNvRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdsdWNpZGUnKTtcbiAgICBpZiAodHlwZW9mIHRoaXMubmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGljb0VsZW1lbnQuY2xhc3NMaXN0LmFkZChgbHVjaWRlLSR7dGhpcy5uYW1lLnJlcGxhY2UoJ18nLCAnLScpfWApO1xuICAgIH1cbiAgICBpZiAodGhpcy5jbGFzcykge1xuICAgICAgaWNvRWxlbWVudC5jbGFzc0xpc3QuYWRkKFxuICAgICAgICAuLi50aGlzLmNsYXNzXG4gICAgICAgICAgLnNwbGl0KC8gLylcbiAgICAgICAgICAubWFwKChhKSA9PiBhLnRyaW0oKSlcbiAgICAgICAgICAuZmlsdGVyKChhKSA9PiBhLmxlbmd0aCA+IDApLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXM7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZEVsZW1lbnRzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LCBjaGlsZCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQsIGljb0VsZW1lbnQpO1xuICB9XG5cbiAgdG9QYXNjYWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoXG4gICAgICAvKFxcdykoW2EtejAtOV0qKShffC18XFxzKikvZyxcbiAgICAgIChnMCwgZzEsIGcyKSA9PiBnMS50b1VwcGVyQ2FzZSgpICsgZzIudG9Mb3dlckNhc2UoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU51bWJlcih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgaWYgKGlzTmFOKHBhcnNlZFZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWV9IGlzIG5vdCBudW1lcmljLmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEljb24obmFtZTogc3RyaW5nKTogTHVjaWRlSWNvbkRhdGEgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGljb25Qcm92aWRlciBvZiBBcnJheS5pc0FycmF5KHRoaXMuaWNvblByb3ZpZGVycylcbiAgICAgID8gdGhpcy5pY29uUHJvdmlkZXJzXG4gICAgICA6IFt0aGlzLmljb25Qcm92aWRlcnNdKSB7XG4gICAgICBpZiAoaWNvblByb3ZpZGVyLmhhc0ljb24obmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGljb25Qcm92aWRlci5nZXRJY29uKG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWxlbWVudChbdGFnLCBhdHRycywgY2hpbGRyZW4gPSBbXV06IHJlYWRvbmx5IFtcbiAgICBzdHJpbmcsXG4gICAgU3ZnQXR0cmlidXRlcyxcbiAgICBMdWNpZGVJY29uRGF0YT8sXG4gIF0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KHRhZywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgYXR0clZhbHVlOiBzdHJpbmcgPVxuICAgICAgICB0eXBlb2YgYXR0cnNbbmFtZV0gPT09ICdzdHJpbmcnID8gKGF0dHJzW25hbWVdIGFzIHN0cmluZykgOiBhdHRyc1tuYW1lXS50b1N0cmluZygxMCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCBhdHRyVmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KGNoaWxkKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChlbGVtZW50LCBjaGlsZEVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cbiJdfQ==