@miracledevs/paradigm-web-angular
Version:
An angular wrapper with base functionality and helper services.
204 lines • 15.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*!
* Paradigm Framework - Angular Wrapper
* Copyright (c) 2017 Miracle Devs, Inc
* Licensed under MIT (https://github.com/MiracleDevs/Paradigm.Web.Shared/blob/master/LICENSE)
*/
import { Injectable } from '@angular/core';
import { ArrayList } from '@miracledevs/paradigm-ui-web-shared';
import { LoggingService, LogType } from './logging.service';
import { ServiceBase } from './base.service';
import * as i0 from "@angular/core";
import * as i1 from "./logging.service";
/** @enum {number} */
const AlertType = {
/**
* Represents a message alert.
* It's the equivalent of @see LogType.Information
*/
Message: 2,
/**
* Represents a warning alert.
* It's the equivalent of @see LogType.Warning
*/
Warning: 3,
/**
* Represents an error alert.
* It's the equivalent of @see LogType.Error
*/
Error: 4,
};
export { AlertType };
AlertType[AlertType.Message] = 'Message';
AlertType[AlertType.Warning] = 'Warning';
AlertType[AlertType.Error] = 'Error';
/**
* Represents an alert thrown by the system.
*/
export class Alert {
/**
* Gets the type of the alert.
* @return {?}
*/
get type() { return this.alertType; }
/**
* Gets the type name.
* @return {?}
*/
get typeName() { return AlertType[this.alertType]; }
/**
* Gets the alert message.
* @return {?}
*/
get message() { return this.innerMessage; }
/**
* Creates a new instance of \@see Alert.
* @param {?} alertType
* @param {?} message
*/
constructor(alertType, message) {
this.alertType = alertType;
this.innerMessage = message;
}
}
if (false) {
/**
* The alert type.
* @type {?}
* @private
*/
Alert.prototype.alertType;
/**
* The alert inner message.
* @type {?}
* @private
*/
Alert.prototype.innerMessage;
}
export class AlertService extends ServiceBase {
/**
* Creates a new instance of \@see AlertService
* @param {?} logger The current logging service.
*/
constructor(logger) {
super();
this.logger = logger;
this.alerts = new ArrayList();
}
/**
* Gets the equivalent \@see LogType for the specified \@see AlertType.
* @param {?} alertType The specified alert type.
* @return {?} the log type.
*/
static getLogType(alertType) {
switch (alertType) {
case AlertType.Message:
return LogType.Information;
case AlertType.Warning:
return LogType.Warning;
case AlertType.Error:
return LogType.Error;
}
throw new Error('The alert type is not recognized.');
}
/**
* Adds a new alert.
* The alert service will also notify the \@see LoggingService.
* @param {?} alertType the alert type.
* @param {?} message the alert message.
* @return {?}
*/
add(alertType, message) {
this.alerts.add(new Alert(alertType, message));
this.logger.log(message, AlertService.getLogType(alertType));
}
/**
* Adds a new error alert.
* The alert service will also notify the \@see LoggingService.
* @param {?} message the error message.
* @return {?}
*/
addError(message) {
this.add(AlertType.Error, message);
}
/**
* Adds a new warning alert.
* The alert service will also notify the \@see LoggingService.
* @param {?} message the error message.
* @return {?}
*/
addWarning(message) {
this.add(AlertType.Warning, message);
}
/**
* Adds a new message alert.
* The alert service will also notify the \@see LoggingService.
* @param {?} message the error message.
* @return {?}
*/
addMessage(message) {
this.add(AlertType.Message, message);
}
/**
* Removes one of the alerts from the alerts collection.
* @param {?} index The index of the alert, or the alert that needs to be removed.
* @return {?}
*/
remove(index) {
if (index instanceof Alert) {
this.alerts.remove(index);
}
else {
this.alerts.removeAt((/** @type {?} */ (index)));
}
}
/**
* Gets the specified alert by its index.
* @param {?} index the alert index.
* @return {?}
*/
get(index) {
return this.alerts.get(index);
}
/**
* Gets the alert collection.
* @return {?}
*/
getAlerts() {
return this.alerts;
}
/**
* Clears the alert collection.
* @return {?}
*/
clear() {
this.alerts.clear();
}
}
AlertService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
AlertService.ctorParameters = () => [
{ type: LoggingService }
];
/** @nocollapse */ AlertService.ngInjectableDef = i0.defineInjectable({ factory: function AlertService_Factory() { return new AlertService(i0.inject(i1.LoggingService)); }, token: AlertService, providedIn: "root" });
if (false) {
/**
* An array holding the alerts that are currently alive.
* @type {?}
* @private
*/
AlertService.prototype.alerts;
/**
* @type {?}
* @private
*/
AlertService.prototype.logger;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtaXJhY2xlZGV2cy9wYXJhZGlnbS13ZWItYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztJQU96Qzs7O09BR0c7SUFDSCxVQUE2QjtJQUU3Qjs7O09BR0c7SUFDSCxVQUF5QjtJQUV6Qjs7O09BR0c7SUFDSCxRQUFxQjs7Ozs7Ozs7O0FBTXpCLE1BQU0sT0FBTyxLQUFLOzs7OztJQWVkLElBQUksSUFBSSxLQUFnQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOzs7OztJQUtoRCxJQUFJLFFBQVEsS0FBYSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztJQUs1RCxJQUFJLE9BQU8sS0FBYSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzs7Ozs7SUFLbkQsWUFBWSxTQUFvQixFQUFFLE9BQWU7UUFFN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7SUFDaEMsQ0FBQztDQUNKOzs7Ozs7O0lBOUJHLDBCQUE2Qjs7Ozs7O0lBSzdCLDZCQUE2Qjs7QUE4QmpDLE1BQU0sT0FBTyxZQUFhLFNBQVEsV0FBVzs7Ozs7SUFXekMsWUFBb0IsTUFBc0I7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFGUSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUd0QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksU0FBUyxFQUFTLENBQUM7SUFDekMsQ0FBQzs7Ozs7O0lBT0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFvQjtRQUVsQyxRQUFRLFNBQVMsRUFDakI7WUFDSSxLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNsQixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFFL0IsS0FBSyxTQUFTLENBQUMsT0FBTztnQkFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBRTNCLEtBQUssU0FBUyxDQUFDLEtBQUs7Z0JBQ2hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztTQUM1QjtRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUN6RCxDQUFDOzs7Ozs7OztJQVFELEdBQUcsQ0FBQyxTQUFvQixFQUFFLE9BQWU7UUFFckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDOzs7Ozs7O0lBT0QsUUFBUSxDQUFDLE9BQWU7UUFFcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Ozs7Ozs7SUFPRCxVQUFVLENBQUMsT0FBZTtRQUV0QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQzs7Ozs7OztJQU9ELFVBQVUsQ0FBQyxPQUFlO1FBRXRCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDOzs7Ozs7SUFNRCxNQUFNLENBQUMsS0FBcUI7UUFFeEIsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUMxQjtZQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO2FBRUQ7WUFDSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBQSxLQUFLLEVBQVUsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQzs7Ozs7O0lBTUQsR0FBRyxDQUFDLEtBQWE7UUFFYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7O0lBS0QsU0FBUztRQUVMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDOzs7OztJQUtELEtBQUs7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7OztZQTNISixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7Ozs7WUFyRVEsY0FBYzs7Ozs7Ozs7O0lBMkVuQiw4QkFBaUM7Ozs7O0lBTXJCLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogUGFyYWRpZ20gRnJhbWV3b3JrIC0gQW5ndWxhciBXcmFwcGVyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgTWlyYWNsZSBEZXZzLCBJbmNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL01pcmFjbGVEZXZzL1BhcmFkaWdtLldlYi5TaGFyZWQvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcnJheUxpc3QgfSBmcm9tICdAbWlyYWNsZWRldnMvcGFyYWRpZ20tdWktd2ViLXNoYXJlZCc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZSwgTG9nVHlwZSB9IGZyb20gJy4vbG9nZ2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VCYXNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xuXG4vKipcbiAqIEVudW1lcmF0ZXMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBhbGVydHMuXG4gKi9cbmV4cG9ydCBlbnVtIEFsZXJ0VHlwZVxue1xuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIGFsZXJ0LlxuICAgICAqIEl0J3MgdGhlIGVxdWl2YWxlbnQgb2YgQHNlZSBMb2dUeXBlLkluZm9ybWF0aW9uXG4gICAgICovXG4gICAgTWVzc2FnZSA9IExvZ1R5cGUuSW5mb3JtYXRpb24sXG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgd2FybmluZyBhbGVydC5cbiAgICAgKiBJdCdzIHRoZSBlcXVpdmFsZW50IG9mIEBzZWUgTG9nVHlwZS5XYXJuaW5nXG4gICAgICovXG4gICAgV2FybmluZyA9IExvZ1R5cGUuV2FybmluZyxcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYW4gZXJyb3IgYWxlcnQuXG4gICAgICogSXQncyB0aGUgZXF1aXZhbGVudCBvZiBAc2VlIExvZ1R5cGUuRXJyb3JcbiAgICAgKi9cbiAgICBFcnJvciA9IExvZ1R5cGUuRXJyb3Jcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGFsZXJ0IHRocm93biBieSB0aGUgc3lzdGVtLlxuICovXG5leHBvcnQgY2xhc3MgQWxlcnRcbntcbiAgICAvKipcbiAgICAgKiBUaGUgYWxlcnQgdHlwZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFsZXJ0VHlwZTogQWxlcnRUeXBlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFsZXJ0IGlubmVyIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbm5lck1lc3NhZ2U6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIGFsZXJ0LlxuICAgICAqL1xuICAgIGdldCB0eXBlKCk6IEFsZXJ0VHlwZSB7IHJldHVybiB0aGlzLmFsZXJ0VHlwZTsgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdHlwZSBuYW1lLlxuICAgICAqL1xuICAgIGdldCB0eXBlTmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gQWxlcnRUeXBlW3RoaXMuYWxlcnRUeXBlXTsgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYWxlcnQgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXQgbWVzc2FnZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5pbm5lck1lc3NhZ2U7IH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBBbGVydC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihhbGVydFR5cGU6IEFsZXJ0VHlwZSwgbWVzc2FnZTogc3RyaW5nKVxuICAgIHtcbiAgICAgICAgdGhpcy5hbGVydFR5cGUgPSBhbGVydFR5cGU7XG4gICAgICAgIHRoaXMuaW5uZXJNZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxlcnRTZXJ2aWNlIGV4dGVuZHMgU2VydmljZUJhc2VcbntcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBob2xkaW5nIHRoZSBhbGVydHMgdGhhdCBhcmUgY3VycmVudGx5IGFsaXZlLlxuICAgICAqL1xuICAgIHByaXZhdGUgYWxlcnRzOiBBcnJheUxpc3Q8QWxlcnQ+O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBAc2VlIEFsZXJ0U2VydmljZVxuICAgICAqIEBwYXJhbSBsb2dnZXIgVGhlIGN1cnJlbnQgbG9nZ2luZyBzZXJ2aWNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnaW5nU2VydmljZSlcbiAgICB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxlcnRzID0gbmV3IEFycmF5TGlzdDxBbGVydD4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlcXVpdmFsZW50IEBzZWUgTG9nVHlwZSBmb3IgdGhlIHNwZWNpZmllZCBAc2VlIEFsZXJ0VHlwZS5cbiAgICAgKiBAcGFyYW0gYWxlcnRUeXBlIFRoZSBzcGVjaWZpZWQgYWxlcnQgdHlwZS5cbiAgICAgKiBAcmV0dXJucyB0aGUgbG9nIHR5cGUuXG4gICAgICovXG4gICAgc3RhdGljIGdldExvZ1R5cGUoYWxlcnRUeXBlOiBBbGVydFR5cGUpOiBMb2dUeXBlXG4gICAge1xuICAgICAgICBzd2l0Y2ggKGFsZXJ0VHlwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgY2FzZSBBbGVydFR5cGUuTWVzc2FnZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gTG9nVHlwZS5JbmZvcm1hdGlvbjtcblxuICAgICAgICAgICAgY2FzZSBBbGVydFR5cGUuV2FybmluZzpcbiAgICAgICAgICAgICAgICByZXR1cm4gTG9nVHlwZS5XYXJuaW5nO1xuXG4gICAgICAgICAgICBjYXNlIEFsZXJ0VHlwZS5FcnJvcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gTG9nVHlwZS5FcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFsZXJ0IHR5cGUgaXMgbm90IHJlY29nbml6ZWQuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBhbGVydC5cbiAgICAgKiBUaGUgYWxlcnQgc2VydmljZSB3aWxsIGFsc28gbm90aWZ5IHRoZSBAc2VlIExvZ2dpbmdTZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhbGVydFR5cGUgdGhlIGFsZXJ0IHR5cGUuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGFsZXJ0IG1lc3NhZ2UuXG4gICAgICovXG4gICAgYWRkKGFsZXJ0VHlwZTogQWxlcnRUeXBlLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLmFsZXJ0cy5hZGQobmV3IEFsZXJ0KGFsZXJ0VHlwZSwgbWVzc2FnZSkpO1xuICAgICAgICB0aGlzLmxvZ2dlci5sb2cobWVzc2FnZSwgQWxlcnRTZXJ2aWNlLmdldExvZ1R5cGUoYWxlcnRUeXBlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBlcnJvciBhbGVydC5cbiAgICAgKiBUaGUgYWxlcnQgc2VydmljZSB3aWxsIGFsc28gbm90aWZ5IHRoZSBAc2VlIExvZ2dpbmdTZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAqL1xuICAgIGFkZEVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWRcbiAgICB7XG4gICAgICAgIHRoaXMuYWRkKEFsZXJ0VHlwZS5FcnJvciwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyB3YXJuaW5nIGFsZXJ0LlxuICAgICAqIFRoZSBhbGVydCBzZXJ2aWNlIHdpbGwgYWxzbyBub3RpZnkgdGhlIEBzZWUgTG9nZ2luZ1NlcnZpY2UuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICovXG4gICAgYWRkV2FybmluZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLmFkZChBbGVydFR5cGUuV2FybmluZywgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBtZXNzYWdlIGFsZXJ0LlxuICAgICAqIFRoZSBhbGVydCBzZXJ2aWNlIHdpbGwgYWxzbyBub3RpZnkgdGhlIEBzZWUgTG9nZ2luZ1NlcnZpY2UuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICovXG4gICAgYWRkTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLmFkZChBbGVydFR5cGUuTWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBvbmUgb2YgdGhlIGFsZXJ0cyBmcm9tIHRoZSBhbGVydHMgY29sbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBhbGVydCwgb3IgdGhlIGFsZXJ0IHRoYXQgbmVlZHMgdG8gYmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICByZW1vdmUoaW5kZXg6IG51bWJlciB8IEFsZXJ0KTogdm9pZFxuICAgIHtcbiAgICAgICAgaWYgKGluZGV4IGluc3RhbmNlb2YgQWxlcnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRzLnJlbW92ZShpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy5yZW1vdmVBdChpbmRleCBhcyBudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3BlY2lmaWVkIGFsZXJ0IGJ5IGl0cyBpbmRleC5cbiAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGFsZXJ0IGluZGV4LlxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogQWxlcnRcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0cy5nZXQoaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFsZXJ0IGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgZ2V0QWxlcnRzKCk6IEFycmF5TGlzdDxBbGVydD5cbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGFsZXJ0IGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgY2xlYXIoKTogdm9pZFxuICAgIHtcbiAgICAgICAgdGhpcy5hbGVydHMuY2xlYXIoKTtcbiAgICB9XG59XG4iXX0=