UNPKG

@miracledevs/paradigm-web-angular

Version:

An angular wrapper with base functionality and helper services.

204 lines 15.2 kB
/** * @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=