UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

155 lines 21.4 kB
import { Directive, ElementRef, Injector, Renderer2 } from '@angular/core'; import { LogLevel } from '@microsoft/windows-admin-center-sdk/core/diagnostics/log-level'; import { Logging } from '@microsoft/windows-admin-center-sdk/core/diagnostics/logging'; import { Dom } from '@microsoft/windows-admin-center-sdk/core/dom/dom'; import { NgLifecycleBaseComponent } from './ng-lifecycle-base.component'; import * as i0 from "@angular/core"; /** * A base class for all components. * - TResourceStrings The typed interface for resource strings. */ // eslint-disable-next-line @angular-eslint/directive-class-suffix export class BaseComponent extends NgLifecycleBaseComponent { /** * Initializes a new instance of the {BaseComponent} class. * @param injector The angular injection service. required by @SmeInjectableBase() decorator */ constructor(injector) { super(injector); this.renderer = injector.get(Renderer2); this.hostElement = injector.get(ElementRef); // load the strings for the application this.strings = MsftSme.self().Resources.strings; // initialize subscriptions to empty this.subscriptions = []; // setup component id and idBag this.componentId = `component-${BaseComponent.nextComponentId++}`; this.idBag = this.createIdBag(); MsftSme.forEachKey(this.idBag, (key) => { this.idBag[key] = `${this.componentId}-${key}`; }); // setup initial host classes on this element this.applyInitialHostClasses(); } /** * Implementation of angular OnDestroy interface * derived classes are always expected to call super.ngOnDestroy() when overriding */ ngOnDestroy() { this.subscriptions.forEach((subscription) => { if (subscription && !subscription.closed) { subscription.unsubscribe(); } }); super.ngOnDestroy(); } /** * Creates the idBag used by this component to store unique element ids * Derived classes are always expected to call super.createIdBag() when overriding */ createIdBag() { return {}; } /** * Gets the initial host classes to be applied to this element * Derived classes are always expected to call super.getInitialHostClasses() when overriding */ getInitialHostClasses() { return []; } /** * Shortcut to get an attribute on the host element * @param name The name of the attribute */ getAttribute(name) { return this.hostElement.nativeElement.getAttribute(name); } /** * Shortcut to set an attribute on the host element * @param name The name of the attribute * @param value The value of the attribute */ setAttribute(name, value) { this.renderer.setAttribute(this.hostElement.nativeElement, name, value); } /** * Shortcut to remove an attribute on the host element * @param name The name of the attribute */ removeAttribute(name) { this.renderer.removeAttribute(this.hostElement.nativeElement, name); } /** * Shortcut to add a class on the host element * @param className The name of the attribute */ addClass(className) { this.renderer.addClass(this.hostElement.nativeElement, className); } /** * Shortcut to remove a class on the host element * @param className The name of the class */ removeClass(className) { this.renderer.removeClass(this.hostElement.nativeElement, className); } /** * Shortcut to set a style on the host element * @param style The name of the style * @param value The new value */ setStyle(style, value) { this.renderer.setStyle(this.hostElement.nativeElement, style, value); } /** * Shortcut to remove a style on the host element * @param style The name of the style */ removeStyle(style) { this.renderer.removeStyle(this.hostElement.nativeElement, style); } /** * Shortcut to log a record. The source name is automatically picked up from the class instance * @param message the message of the log record * @param level (optional) the log level (defaults to Debug) * @param params (optional) the parameters to log * @param source (optional) the source of the log message. Defaults to the name of the constructor that instantiated this instance * @return Promise<any> settle to resolve if buffered. */ log(message, level = LogLevel.Debug, params, source = this.logSourceName) { return Logging.log({ level: level, message: message, localParams: params, source: source }); } /** * Applies the initial classes to this components host element. * We preserve any custom classes by removing them, applying the base classes and reapplying the custom classes. */ applyInitialHostClasses() { const customClasses = Dom.getClasses(this.hostElement.nativeElement); customClasses.forEach(c => this.renderer.removeClass(this.hostElement.nativeElement, c)); this.getInitialHostClasses() .concat(customClasses) .forEach(c => this.renderer.addClass(this.hostElement.nativeElement, c)); } } /** * Static constant to provide unique ids for each component * @see {componentId} */ BaseComponent.nextComponentId = 0; /** @nocollapse */ BaseComponent.ɵfac = function BaseComponent_Factory(t) { return new (t || BaseComponent)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ BaseComponent.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: BaseComponent, features: [i0.ɵɵInheritDefinitionFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseComponent, [{ type: Directive }], function () { return [{ type: i0.Injector }]; }, null); })(); /** * Internal base component for SME Core controls. It simply removes the need to supply the string type parameter * This class is exported from this file, but not meant to be exported from index.ts bundles. */ export class CoreBaseComponent extends BaseComponent { } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9jb21tb24vYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUd2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFekU7OztHQUdHO0FBRUgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsYUFBZ0MsU0FBUSx3QkFBd0I7SUE2Q2xGOzs7T0FHRztJQUNILFlBQVksUUFBa0I7UUFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQXFCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBRWxFLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV4QiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLGFBQWEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcs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Q3JFLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUN2QixNQUFNLENBQUMsYUFBYSxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQzs7QUF4TEQ7OztHQUdHO0FBQ1ksNkJBQWUsR0FBRyxDQUFDLENBQUM7NkZBTmpCLGFBQWE7K0ZBQWIsYUFBYTt1RkFBYixhQUFhO2NBRmxDLFNBQVM7O0FBK0xWOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsaUJBQWtCLFNBQVEsYUFBc0I7Q0FFckUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nLWxldmVsJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBOZ0xpZmVjeWNsZUJhc2VDb21wb25lbnQgfSBmcm9tICcuL25nLWxpZmVjeWNsZS1iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQSBiYXNlIGNsYXNzIGZvciBhbGwgY29tcG9uZW50cy5cclxuICogLSBUUmVzb3VyY2VTdHJpbmdzIFRoZSB0eXBlZCBpbnRlcmZhY2UgZm9yIHJlc291cmNlIHN0cmluZ3MuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50PFRSZXNvdXJjZVN0cmluZ3M+IGV4dGVuZHMgTmdMaWZlY3ljbGVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXRpYyBjb25zdGFudCB0byBwcm92aWRlIHVuaXF1ZSBpZHMgZm9yIGVhY2ggY29tcG9uZW50XHJcbiAgICAgKiBAc2VlIHtjb21wb25lbnRJZH1cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgbmV4dENvbXBvbmVudElkID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGxvZ1NvdXJjZU5hbWU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb2NhbGl6ZWQgc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RyaW5nczogVFJlc291cmNlU3RyaW5ncztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgYmFnIG9mIGlkcyBnZW5lcmF0ZWQgdXNpbmcgQHNlZSB7Y29tcG9uZW50SWR9IGFuZCB0aGUgbWFwIHJldHVybmVkIGZyb20gQHNlZSB7Y3JlYXRlSWRCYWd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpZEJhZzogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB1bmlxdWUgaWQgb2YgdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGNvbnRyb2xzIG5lZWQgdG8gdXNlIGFuIElEIChzdWNoIGFzIGluIGZvcm1zKSBidXQgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBwYWdlLlxyXG4gICAgICogVXNpbmcgdGhpcyBJRCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjb250cm9scyBpbnRlcm5hbCBJRHMgZ2VuZXJhdGVkIGluIEBzZWUge2NyZWF0ZUlkQmFnfSBrZWVwcyB0aGUgSURzIHVuaXF1ZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNvbXBvbmVudElkOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWluZXIgZm9yIGFjdGl2ZSBzdWJzY3JpcHRpb25zIHRoYXQgc2hvdWxkIGJlIGNsZWFuZWQgdXAgaW4gdGhlIE9uRGVzdHJveSBjYWxsLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYW5ndWxhciByZW5kZXJlciBzZXJ2aWNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGVsZW1lbnQgcmVmZXJlbmNlIGZvciB0aGlzIGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUge0Jhc2VDb21wb25lbnR9IGNsYXNzLlxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIFRoZSBhbmd1bGFyIGluamVjdGlvbiBzZXJ2aWNlLiByZXF1aXJlZCBieSBAU21lSW5qZWN0YWJsZUJhc2UoKSBkZWNvcmF0b3JcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcmVyID0gaW5qZWN0b3IuZ2V0KFJlbmRlcmVyMik7XHJcbiAgICAgICAgdGhpcy5ob3N0RWxlbWVudCA9IGluamVjdG9yLmdldChFbGVtZW50UmVmKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBsb2FkIHRoZSBzdHJpbmdzIGZvciB0aGUgYXBwbGljYXRpb25cclxuICAgICAgICB0aGlzLnN0cmluZ3MgPSA8VFJlc291cmNlU3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncztcclxuXHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBzdWJzY3JpcHRpb25zIHRvIGVtcHR5XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGNvbXBvbmVudCBpZCBhbmQgaWRCYWdcclxuICAgICAgICB0aGlzLmNvbXBvbmVudElkID0gYGNvbXBvbmVudC0ke0Jhc2VDb21wb25lbnQubmV4dENvbXBvbmVudElkKyt9YDtcclxuICAgICAgICB0aGlzLmlkQmFnID0gdGhpcy5jcmVhdGVJZEJhZygpO1xyXG4gICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleSh0aGlzLmlkQmFnLCAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaWRCYWdba2V5XSA9IGAke3RoaXMuY29tcG9uZW50SWR9LSR7a2V5fWA7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGluaXRpYWwgaG9zdCBjbGFzc2VzIG9uIHRoaXMgZWxlbWVudFxyXG4gICAgICAgIHRoaXMuYXBwbHlJbml0aWFsSG9zdENsYXNzZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25EZXN0cm95IGludGVyZmFjZVxyXG4gICAgICogZGVyaXZlZCBjbGFzc2VzIGFyZSBhbHdheXMgZXhwZWN0ZWQgdG8gY2FsbCBzdXBlci5uZ09uRGVzdHJveSgpIHdoZW4gb3ZlcnJpZGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uICYmICFzdWJzY3JpcHRpb24uY2xvc2VkKSB7XHJcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkc1xyXG4gICAgICogRGVyaXZlZCBjbGFzc2VzIGFyZSBhbHdheXMgZXhwZWN0ZWQgdG8gY2FsbCBzdXBlci5jcmVhdGVJZEJhZygpIHdoZW4gb3ZlcnJpZGluZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaW5pdGlhbCBob3N0IGNsYXNzZXMgdG8gYmUgYXBwbGllZCB0byB0aGlzIGVsZW1lbnRcclxuICAgICAqIERlcml2ZWQgY2xhc3NlcyBhcmUgYWx3YXlzIGV4cGVjdGVkIHRvIGNhbGwgc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkgd2hlbiBvdmVycmlkaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3J0Y3V0IHRvIGdldCBhbiBhdHRyaWJ1dGUgb24gdGhlIGhvc3QgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG9ydGN1dCB0byBzZXQgYW4gYXR0cmlidXRlIG9uIHRoZSBob3N0IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgbmFtZSwgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvcnRjdXQgdG8gcmVtb3ZlIGFuIGF0dHJpYnV0ZSBvbiB0aGUgaG9zdCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCByZW1vdmVBdHRyaWJ1dGUobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCBuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3J0Y3V0IHRvIGFkZCBhIGNsYXNzIG9uIHRoZSBob3N0IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWRkQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3J0Y3V0IHRvIHJlbW92ZSBhIGNsYXNzIG9uIHRoZSBob3N0IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCByZW1vdmVDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvcnRjdXQgdG8gc2V0IGEgc3R5bGUgb24gdGhlIGhvc3QgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHN0eWxlIFRoZSBuYW1lIG9mIHRoZSBzdHlsZVxyXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHNldFN0eWxlKHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgc3R5bGUsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3J0Y3V0IHRvIHJlbW92ZSBhIHN0eWxlIG9uIHRoZSBob3N0IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSBzdHlsZSBUaGUgbmFtZSBvZiB0aGUgc3R5bGVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHJlbW92ZVN0eWxlKHN0eWxlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgc3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvcnRjdXQgdG8gbG9nIGEgcmVjb3JkLiBUaGUgc291cmNlIG5hbWUgaXMgYXV0b21hdGljYWxseSBwaWNrZWQgdXAgZnJvbSB0aGUgY2xhc3MgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIG9mIHRoZSBsb2cgcmVjb3JkXHJcbiAgICAgKiBAcGFyYW0gbGV2ZWwgKG9wdGlvbmFsKSB0aGUgbG9nIGxldmVsIChkZWZhdWx0cyB0byBEZWJ1ZylcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgKG9wdGlvbmFsKSB0aGUgcGFyYW1ldGVycyB0byBsb2dcclxuICAgICAqIEBwYXJhbSBzb3VyY2UgKG9wdGlvbmFsKSB0aGUgc291cmNlIG9mIHRoZSBsb2cgbWVzc2FnZS4gRGVmYXVsdHMgdG8gdGhlIG5hbWUgb2YgdGhlIGNvbnN0cnVjdG9yIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgaW5zdGFuY2VcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+IHNldHRsZSB0byByZXNvbHZlIGlmIGJ1ZmZlcmVkLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbG9nKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw6IExvZ0xldmVsID0gTG9nTGV2ZWwuRGVidWcsIHBhcmFtcz86IGFueSwgc291cmNlOiBzdHJpbmcgPSB0aGlzLmxvZ1NvdXJjZU5hbWUpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCxcclxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgICAgICAgbG9jYWxQYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGluaXRpYWwgY2xhc3NlcyB0byB0aGlzIGNvbXBvbmVudHMgaG9zdCBlbGVtZW50LlxyXG4gICAgICogV2UgcHJlc2VydmUgYW55IGN1c3RvbSBjbGFzc2VzIGJ5IHJlbW92aW5nIHRoZW0sIGFwcGx5aW5nIHRoZSBiYXNlIGNsYXNzZXMgYW5kIHJlYXBwbHlpbmcgdGhlIGN1c3RvbSBjbGFzc2VzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFwcGx5SW5pdGlhbEhvc3RDbGFzc2VzKCkge1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbUNsYXNzZXMgPSBEb20uZ2V0Q2xhc3Nlcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIGN1c3RvbUNsYXNzZXMuZm9yRWFjaChjID0+IHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCBjKSk7XHJcbiAgICAgICAgdGhpcy5nZXRJbml0aWFsSG9zdENsYXNzZXMoKVxyXG4gICAgICAgICAgICAuY29uY2F0KGN1c3RvbUNsYXNzZXMpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGMgPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGMpKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGJhc2UgY29tcG9uZW50IGZvciBTTUUgQ29yZSBjb250cm9scy4gSXQgc2ltcGx5IHJlbW92ZXMgdGhlIG5lZWQgdG8gc3VwcGx5IHRoZSBzdHJpbmcgdHlwZSBwYXJhbWV0ZXJcclxuICogVGhpcyBjbGFzcyBpcyBleHBvcnRlZCBmcm9tIHRoaXMgZmlsZSwgYnV0IG5vdCBtZWFudCB0byBiZSBleHBvcnRlZCBmcm9tIGluZGV4LnRzIGJ1bmRsZXMuXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29yZUJhc2VDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50PFN0cmluZ3M+IHtcclxuICAgIC8vIFNob3VsZCBSZW1haW4gRW1wdHkuXHJcbn1cclxuIl19