UNPKG

@miracledevs/paradigm-web-angular

Version:

An angular wrapper with base functionality and helper services.

336 lines 22.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /*! * Paradigm Framework - Angular Wrapper * Copyright (c) 2017 Miracle Devs, Inc * Licensed under MIT (https://github.com/MiracleDevs/Paradigm.Web.Angular/blob/master/LICENSE) */ import { MessageBusService } from '../services/message-bus.service'; import { ArrayList } from '@miracledevs/paradigm-ui-web-shared'; import { AlertService } from '../services/alert.service'; var ComponentBase = /** @class */ (function () { /** * Creates a new instance of @see ComponentBase * @param injector reference to an injector service. */ function ComponentBase(injector) { this.injector = injector; } /** * Called when the component is initialized. */ /** * Called when the component is initialized. * @return {?} */ ComponentBase.prototype.ngOnInit = /** * Called when the component is initialized. * @return {?} */ function () { }; /** * Called when the component is destroyed. */ /** * Called when the component is destroyed. * @return {?} */ ComponentBase.prototype.ngOnDestroy = /** * Called when the component is destroyed. * @return {?} */ function () { this.unregisterTokens(); }; /** * Gets a reference to the message bus. */ /** * Gets a reference to the message bus. * @protected * @return {?} */ ComponentBase.prototype.getMessageBus = /** * Gets a reference to the message bus. * @protected * @return {?} */ function () { if (!this.messageBus) { this.messageBus = this.injector.get(MessageBusService); this.messageTokens = new ArrayList(); } return this.messageBus; }; /** * Registers a message handler for a given message type. * @param type the message type. * @param handler the message handler to process when some part of the application sends a message of type @see type */ /** * Registers a message handler for a given message type. * @protected * @template T * @param {?} type the message type. * @param {?} handler the message handler to process when some part of the application sends a message of type \@see type * @return {?} */ ComponentBase.prototype.registerMessage = /** * Registers a message handler for a given message type. * @protected * @template T * @param {?} type the message type. * @param {?} handler the message handler to process when some part of the application sends a message of type \@see type * @return {?} */ function (type, handler) { /** @type {?} */ var token = this.getMessageBus().register(type, handler); this.messageTokens.add(token); }; /** * Unregisters all the tokens registered within this component. */ /** * Unregisters all the tokens registered within this component. * @protected * @return {?} */ ComponentBase.prototype.unregisterTokens = /** * Unregisters all the tokens registered within this component. * @protected * @return {?} */ function () { if (this.messageTokens && this.messageTokens.count() > 0) { this.messageTokens.forEach((/** * @param {?} x * @return {?} */ function (x) { return x.unregister(); })); this.messageTokens.clear(); } }; /** * Unregisters a particular token. * If no unregister take place, the component will unregister all the tokens * on @see ngOnDestroy * @param type the type of message to unregister */ /** * Unregisters a particular token. * If no unregister take place, the component will unregister all the tokens * on \@see ngOnDestroy * @protected * @template T * @param {?} type the type of message to unregister * @return {?} */ ComponentBase.prototype.unregisterToken = /** * Unregisters a particular token. * If no unregister take place, the component will unregister all the tokens * on \@see ngOnDestroy * @protected * @template T * @param {?} type the type of message to unregister * @return {?} */ function (type) { if (this.messageTokens && this.messageTokens.count() > 0) { /** @type {?} */ var token = this.messageTokens.firstOrDefault((/** * @param {?} x * @return {?} */ function (x) { return x.type === type; })); if (token) { token.unregister(); this.messageTokens.remove(token); } } }; /** * Sends a message using the message bus. * @param message The message instance to send using the message bus. * @param token if specified, the component can target one specific registration token and handler; * if not, all the handlers registered for this message type, will receive the message. */ /** * Sends a message using the message bus. * @protected * @template T * @param {?} message The message instance to send using the message bus. * @param {?=} token if specified, the component can target one specific registration token and handler; * if not, all the handlers registered for this message type, will receive the message. * @return {?} */ ComponentBase.prototype.sendMessage = /** * Sends a message using the message bus. * @protected * @template T * @param {?} message The message instance to send using the message bus. * @param {?=} token if specified, the component can target one specific registration token and handler; * if not, all the handlers registered for this message type, will receive the message. * @return {?} */ function (message, token) { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.getMessageBus().send(message, token)]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; /** * Gets the alert service. */ /** * Gets the alert service. * @protected * @return {?} */ ComponentBase.prototype.getAlerts = /** * Gets the alert service. * @protected * @return {?} */ function () { if (!this.alerts) { this.alerts = this.injector.get(AlertService); } return this.alerts; }; /** * Adds a message in the alert service. * @param message message to add. */ /** * Adds a message in the alert service. * @protected * @param {?} message message to add. * @return {?} */ ComponentBase.prototype.addMessage = /** * Adds a message in the alert service. * @protected * @param {?} message message to add. * @return {?} */ function (message) { this.getAlerts().addMessage(message); }; /** * Adds a warning in the alert service. * @param warning warning to add. */ /** * Adds a warning in the alert service. * @protected * @param {?} warning warning to add. * @return {?} */ ComponentBase.prototype.addWarning = /** * Adds a warning in the alert service. * @protected * @param {?} warning warning to add. * @return {?} */ function (warning) { this.getAlerts().addWarning(warning); }; /** * Adds an error in the alert service. * @param error error to add. */ /** * Adds an error in the alert service. * @protected * @param {?} error error to add. * @return {?} */ ComponentBase.prototype.addError = /** * Adds an error in the alert service. * @protected * @param {?} error error to add. * @return {?} */ function (error) { this.getAlerts().addError(error); }; /** * Handles an application error, reporting the error to the alert service. * @param error the error that needs to be handled. */ /** * Handles an application error, reporting the error to the alert service. * @protected * @param {?} error the error that needs to be handled. * @return {?} */ ComponentBase.prototype.handleError = /** * Handles an application error, reporting the error to the alert service. * @protected * @param {?} error the error that needs to be handled. * @return {?} */ function (error) { if (!error) { return; } if (error.message) { this.addError(error.message); } else if (error.Message) { this.addError(error.Message); } else if (error.exceptionMessage) { this.addError(error.exceptionMessage); } else if (error.ExceptionMessage) { this.addError(error.ExceptionMessage); } else if (error.error && error.error.message) { this.addError(error.error.message); } else if (error.error && error.error.Message) { this.addError(error.error.Message); } }; return ComponentBase; }()); export { ComponentBase }; if (false) { /** * Reference to a message bus service. * @type {?} * @private */ ComponentBase.prototype.messageBus; /** * Array of message bus registration tokens that needs to be * unregistered before destroying the component. * @type {?} * @private */ ComponentBase.prototype.messageTokens; /** * Reference to an alert service. * @type {?} * @private */ ComponentBase.prototype.alerts; /** * @type {?} * @protected */ ComponentBase.prototype.injector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWlyYWNsZWRldnMvcGFyYWRpZ20td2ViLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBT0EsT0FBTyxFQUFFLGlCQUFpQixFQUFxQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQ7SUFrQkk7OztPQUdHO0lBQ0gsdUJBQXNCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFFeEMsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNILGdDQUFROzs7O0lBQVI7SUFFQSxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0gsbUNBQVc7Ozs7SUFBWDtRQUVJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRzs7Ozs7O0lBQ08scUNBQWE7Ozs7O0lBQXZCO1FBRUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQ3BCO1lBQ0ksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztTQUN4QztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7Ozs7O0lBQ08sdUNBQWU7Ozs7Ozs7O0lBQXpCLFVBQTZCLElBQWEsRUFBRSxPQUEwQjs7WUFFNUQsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxD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QUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUN6QzthQUNJLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFDM0M7WUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7YUFDSSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQzNDO1lBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUNMLG9CQUFDO0FBQUQsQ0FBQyxBQXpMRCxJQXlMQzs7Ozs7Ozs7SUFwTEcsbUNBQXNDOzs7Ozs7O0lBTXRDLHNDQUF5RDs7Ozs7O0lBS3pELCtCQUE2Qjs7Ozs7SUFNakIsaUNBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBQYXJhZGlnbSBGcmFtZXdvcmsgLSBBbmd1bGFyIFdyYXBwZXJcbiAqIENvcHlyaWdodCAoYykgMjAxNyBNaXJhY2xlIERldnMsIEluY1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vTWlyYWNsZURldnMvUGFyYWRpZ20uV2ViLkFuZ3VsYXIvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqL1xuXG5pbXBvcnQgeyBPbkRlc3Ryb3ksIE9uSW5pdCwgSW5qZWN0b3IsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VCdXNTZXJ2aWNlLCBSZWdpc3RyYXRpb25Ub2tlbiwgTWVzc2FnZUhhbmRsZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcbmltcG9ydCB7IEFycmF5TGlzdCB9IGZyb20gJ0BtaXJhY2xlZGV2cy9wYXJhZGlnbS11aS13ZWItc2hhcmVkJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FsZXJ0LnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGEgbWVzc2FnZSBidXMgc2VydmljZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIG1lc3NhZ2VCdXM6IE1lc3NhZ2VCdXNTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgbWVzc2FnZSBidXMgcmVnaXN0cmF0aW9uIHRva2VucyB0aGF0IG5lZWRzIHRvIGJlXG4gICAgICogdW5yZWdpc3RlcmVkIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXNzYWdlVG9rZW5zOiBBcnJheUxpc3Q8UmVnaXN0cmF0aW9uVG9rZW48YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gYW4gYWxlcnQgc2VydmljZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFsZXJ0czogQWxlcnRTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBAc2VlIENvbXBvbmVudEJhc2VcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgcmVmZXJlbmNlIHRvIGFuIGluamVjdG9yIHNlcnZpY2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcilcbiAgICB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkXG4gICAge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWRcbiAgICB7XG4gICAgICAgIHRoaXMudW5yZWdpc3RlclRva2VucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgYnVzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRNZXNzYWdlQnVzKCk6IE1lc3NhZ2VCdXNTZXJ2aWNlXG4gICAge1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUJ1cylcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQnVzID0gdGhpcy5pbmplY3Rvci5nZXQoTWVzc2FnZUJ1c1NlcnZpY2UpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlVG9rZW5zID0gbmV3IEFycmF5TGlzdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUJ1cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBtZXNzYWdlIGhhbmRsZXIgZm9yIGEgZ2l2ZW4gbWVzc2FnZSB0eXBlLlxuICAgICAqIEBwYXJhbSB0eXBlIHRoZSBtZXNzYWdlIHR5cGUuXG4gICAgICogQHBhcmFtIGhhbmRsZXIgdGhlIG1lc3NhZ2UgaGFuZGxlciB0byBwcm9jZXNzIHdoZW4gc29tZSBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvbiBzZW5kcyBhIG1lc3NhZ2Ugb2YgdHlwZSBAc2VlIHR5cGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVnaXN0ZXJNZXNzYWdlPFQ+KHR5cGU6IFR5cGU8VD4sIGhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyPFQ+KTogdm9pZFxuICAgIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldE1lc3NhZ2VCdXMoKS5yZWdpc3Rlcih0eXBlLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlVG9rZW5zLmFkZCh0b2tlbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5yZWdpc3RlcnMgYWxsIHRoZSB0b2tlbnMgcmVnaXN0ZXJlZCB3aXRoaW4gdGhpcyBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVucmVnaXN0ZXJUb2tlbnMoKTogdm9pZFxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVRva2VucyAmJiB0aGlzLm1lc3NhZ2VUb2tlbnMuY291bnQoKSA+IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVRva2Vucy5mb3JFYWNoKHggPT4geC51bnJlZ2lzdGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlVG9rZW5zLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnJlZ2lzdGVycyBhIHBhcnRpY3VsYXIgdG9rZW4uXG4gICAgICogSWYgbm8gdW5yZWdpc3RlciB0YWtlIHBsYWNlLCB0aGUgY29tcG9uZW50IHdpbGwgdW5yZWdpc3RlciBhbGwgdGhlIHRva2Vuc1xuICAgICAqIG9uIEBzZWUgbmdPbkRlc3Ryb3lcbiAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiBtZXNzYWdlIHRvIHVucmVnaXN0ZXJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdW5yZWdpc3RlclRva2VuPFQ+KHR5cGU6IFR5cGU8VD4pOiB2b2lkXG4gICAge1xuICAgICAgICBpZiAodGhpcy5tZXNzYWdlVG9rZW5zICYmIHRoaXMubWVzc2FnZVRva2Vucy5jb3VudCgpID4gMClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm1lc3NhZ2VUb2tlbnMuZmlyc3RPckRlZmF1bHQoeCA9PiB4LnR5cGUgPT09IHR5cGUpO1xuXG4gICAgICAgICAgICBpZiAodG9rZW4pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdG9rZW4udW5yZWdpc3RlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVRva2Vucy5yZW1vdmUodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VuZHMgYSBtZXNzYWdlIHVzaW5nIHRoZSBtZXNzYWdlIGJ1cy5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBpbnN0YW5jZSB0byBzZW5kIHVzaW5nIHRoZSBtZXNzYWdlIGJ1cy5cbiAgICAgKiBAcGFyYW0gdG9rZW4gaWYgc3BlY2lmaWVkLCB0aGUgY29tcG9uZW50IGNhbiB0YXJnZXQgb25lIHNwZWNpZmljIHJlZ2lzdHJhdGlvbiB0b2tlbiBhbmQgaGFuZGxlcjtcbiAgICAgKiBpZiBub3QsIGFsbCB0aGUgaGFuZGxlcnMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBtZXNzYWdlIHR5cGUsIHdpbGwgcmVjZWl2ZSB0aGUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc2VuZE1lc3NhZ2U8VD4obWVzc2FnZTogVCwgdG9rZW4/OiBSZWdpc3RyYXRpb25Ub2tlbjxUPik6IFByb21pc2U8dm9pZD5cbiAgICB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0TWVzc2FnZUJ1cygpLnNlbmQobWVzc2FnZSwgdG9rZW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFsZXJ0IHNlcnZpY2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldEFsZXJ0cygpOiBBbGVydFNlcnZpY2VcbiAgICB7XG4gICAgICAgIGlmICghdGhpcy5hbGVydHMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRzID0gdGhpcy5pbmplY3Rvci5nZXQoQWxlcnRTZXJ2aWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbWVzc2FnZSBpbiB0aGUgYWxlcnQgc2VydmljZS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIHRvIGFkZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLmdldEFsZXJ0cygpLmFkZE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHdhcm5pbmcgaW4gdGhlIGFsZXJ0IHNlcnZpY2UuXG4gICAgICogQHBhcmFtIHdhcm5pbmcgd2FybmluZyB0byBhZGQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZFdhcm5pbmcod2FybmluZzogc3RyaW5nKTogdm9pZFxuICAgIHtcbiAgICAgICAgdGhpcy5nZXRBbGVydHMoKS5hZGRXYXJuaW5nKHdhcm5pbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gZXJyb3IgaW4gdGhlIGFsZXJ0IHNlcnZpY2UuXG4gICAgICogQHBhcmFtIGVycm9yIGVycm9yIHRvIGFkZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkRXJyb3IoZXJyb3I6IHN0cmluZyk6IHZvaWRcbiAgICB7XG4gICAgICAgIHRoaXMuZ2V0QWxlcnRzKCkuYWRkRXJyb3IoZXJyb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYW4gYXBwbGljYXRpb24gZXJyb3IsIHJlcG9ydGluZyB0aGUgZXJyb3IgdG8gdGhlIGFsZXJ0IHNlcnZpY2UuXG4gICAgICogQHBhcmFtIGVycm9yIHRoZSBlcnJvciB0aGF0IG5lZWRzIHRvIGJlIGhhbmRsZWQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiB2b2lkXG4gICAge1xuICAgICAgICBpZiAoIWVycm9yKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJvci5NZXNzYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLk1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVycm9yLmV4Y2VwdGlvbk1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IuZXhjZXB0aW9uTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyb3IuRXhjZXB0aW9uTWVzc2FnZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5FeGNlcHRpb25NZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5tZXNzYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLk1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IuZXJyb3IuTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=