UNPKG

lucide-angular

Version:

A Lucide icon library package for Angular applications.

176 lines 23.2 kB
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==