@addapptables/notifier
Version:
Material notifier library for angular
152 lines • 15.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable, Injector, Inject } from '@angular/core';
import { NotifierPortalService } from './notifier-portal.service';
import { PortalInjector, ComponentPortal } from '@angular/cdk/portal';
import { NotifierComponent } from '../notifier.component';
import { DOCUMENT } from '@angular/common';
import { NotifierRef } from '../notifier-ref';
import { NotifierConfiguration } from '../models/notifier-configuration.model';
import { ADDAPPTABLE_CONFIGURATION_NOTIFIER_DATA, ADDAPPTABLE_NOTIFIER_DATA } from '../tokens';
import { NotifierPositionType } from '../models/notifier-position-enum.model';
import { BottomRightStrategy } from '../strategies/bottom-right.strategy';
import { TopRightStrategy } from '../strategies/top-right.strategy';
import { BottomLeftStrategy } from '../strategies/bottom-left.strategy';
import { TopLeftStrategy } from '../strategies/top-left.strategy';
import { NotifierType } from '../models/notifier-type.model';
export class NotifierService {
/**
* @param {?} _notifierPortalService
* @param {?} _injector
* @param {?} _document
* @param {?} configuration
*/
constructor(_notifierPortalService, _injector, _document, configuration) {
this._notifierPortalService = _notifierPortalService;
this._injector = _injector;
this._document = _document;
this.defaultConfiguration = {
position: NotifierPositionType.bottomRight,
timeout: 5000,
classIcon: 'material-icons',
iconValue: 'notifications'
};
this.defaultConfiguration = Object.assign(this.defaultConfiguration, configuration);
}
/**
* @param {?} message
* @param {?=} configuration
* @return {?}
*/
openSuccess(message, configuration = (/** @type {?} */ ({}))) {
return this.open({ message: message, type: NotifierType.success }, configuration);
}
/**
* @param {?} message
* @param {?=} configuration
* @return {?}
*/
openError(message, configuration = (/** @type {?} */ ({}))) {
return this.open({ message: message, type: NotifierType.danger }, configuration);
}
/**
* @param {?} message
* @param {?=} configuration
* @return {?}
*/
openInfo(message, configuration = (/** @type {?} */ ({}))) {
return this.open({ message: message, type: NotifierType.info }, configuration);
}
/**
* @param {?} message
* @param {?=} configuration
* @return {?}
*/
openWarning(message, configuration = (/** @type {?} */ ({}))) {
return this.open({ message: message, type: NotifierType.warning }, configuration);
}
/**
* @param {?} data
* @param {?=} configuration
* @return {?}
*/
open(data, configuration = (/** @type {?} */ ({}))) {
/** @type {?} */
const portal = this._notifierPortalService.create();
/** @type {?} */
const componentPortal = this._createComponentPortal(data);
/** @type {?} */
const componentRef = portal.attach(componentPortal);
/** @type {?} */
const notifierRef = new NotifierRef(componentRef.instance, portal, this._document, this._notifierPortalService.getLastUniqueId);
/** @type {?} */
const mergeConfiguration = Object.assign(this.defaultConfiguration, configuration);
this._factoryStrategy(mergeConfiguration).newNotifier(notifierRef);
return notifierRef;
}
/**
* @private
* @param {?} configuration
* @return {?}
*/
_factoryStrategy(configuration) {
switch (configuration.position) {
case NotifierPositionType.bottomRight:
return this._injector.get(BottomRightStrategy);
case NotifierPositionType.bottomLeft:
return this._injector.get(BottomLeftStrategy);
case NotifierPositionType.topLeft:
return this._injector.get(TopLeftStrategy);
case NotifierPositionType.topRight:
return this._injector.get(TopRightStrategy);
default:
return this._injector.get(BottomRightStrategy);
}
}
/**
* @private
* @param {?} data
* @return {?}
*/
_createComponentPortal(data) {
/** @type {?} */
const injectionTokens = new WeakMap([
[ADDAPPTABLE_NOTIFIER_DATA, data]
]);
/** @type {?} */
const injector = new PortalInjector(this._injector, injectionTokens);
return new ComponentPortal(NotifierComponent, null, injector);
}
}
NotifierService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NotifierService.ctorParameters = () => [
{ type: NotifierPortalService },
{ type: Injector },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: NotifierConfiguration, decorators: [{ type: Inject, args: [ADDAPPTABLE_CONFIGURATION_NOTIFIER_DATA,] }] }
];
if (false) {
/** @type {?} */
NotifierService.prototype.defaultConfiguration;
/**
* @type {?}
* @private
*/
NotifierService.prototype._notifierPortalService;
/**
* @type {?}
* @private
*/
NotifierService.prototype._injector;
/**
* @type {?}
* @private
*/
NotifierService.prototype._document;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhZGRhcHB0YWJsZXMvbm90aWZpZXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvbm90aWZpZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUc3RCxNQUFNLE9BQU8sZUFBZTs7Ozs7OztJQVMxQixZQUNVLHNCQUE2QyxFQUM3QyxTQUFtQixFQUNELFNBQWMsRUFDUyxhQUFvQztRQUg3RSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDRCxjQUFTLEdBQVQsU0FBUyxDQUFLO1FBVjFDLHlCQUFvQixHQUEwQjtZQUM1QyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsV0FBVztZQUMxQyxPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsU0FBUyxFQUFFLGVBQWU7U0FDM0IsQ0FBQztRQVFBLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0RixDQUFDOzs7Ozs7SUFFRCxXQUFXLENBQUMsT0FBZSxFQUFFLGdCQUF1QyxtQkFBdUIsRUFBRSxFQUFBO1FBQzNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRixDQUFDOzs7Ozs7SUFFRCxTQUFTLENBQUMsT0FBZSxFQUFFLGdCQUF1QyxtQkFBdUIsRUFBRSxFQUFBO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuRixDQUFDOzs7Ozs7SUFFRCxRQUFRLENBQUMsT0FBZSxFQUFFLGdCQUF1QyxtQkFBdUIsRUFBRSxFQUFBO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRixDQUFDOzs7Ozs7SUFFRCxXQUFXLENBQUMsT0FBZSxFQUFFLGdCQUF1QyxtQkFBdUIsRUFBRSxFQUFBO1FBQzNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRixDQUFDOzs7Ozs7SUFFRCxJQUFJLENBQUMsSUFBYyxFQUFFLGdCQUF1QyxtQkFBdUIsRUFBRSxFQUFBOztjQUM3RSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRTs7Y0FDN0MsZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7O2NBQ25ELFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQzs7Y0FDN0MsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQzs7Y0FDekgsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDO1FBQ2xGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRSxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOzs7Ozs7SUFFTyxnQkFBZ0IsQ0FBQyxhQUFvQztRQUMzRCxRQUFRLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDOUIsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXO2dCQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakQsS0FBSyxvQkFBb0IsQ0FBQyxVQUFVO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDaEQsS0FBSyxvQkFBb0IsQ0FBQyxPQUFPO2dCQUMvQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdDLEtBQUssb0JBQW9CLENBQUMsUUFBUTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDO2dCQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7Ozs7OztJQUVPLHNCQUFzQixDQUFDLElBQVM7O2NBQ2hDLGVBQWUsR0FBRyxJQUFJLE9BQU8sQ0FBVztZQUM1QyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQztTQUNsQyxDQUFDOztjQUNJLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztRQUNwRSxPQUFPLElBQUksZUFBZSxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDOzs7WUFsRUYsVUFBVTs7OztZQWhCRixxQkFBcUI7WUFEVCxRQUFROzRDQThCeEIsTUFBTSxTQUFDLFFBQVE7WUF2QlgscUJBQXFCLHVCQXdCekIsTUFBTSxTQUFDLHVDQUF1Qzs7OztJQVhqRCwrQ0FLRTs7Ozs7SUFHQSxpREFBcUQ7Ozs7O0lBQ3JELG9DQUEyQjs7Ozs7SUFDM0Isb0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm90aWZpZXJQb3J0YWxTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci1wb3J0YWwuc2VydmljZSc7XG5pbXBvcnQgeyBQb3J0YWxJbmplY3RvciwgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBOb3RpZmllckNvbXBvbmVudCB9IGZyb20gJy4uL25vdGlmaWVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOb3RpZmllclJlZiB9IGZyb20gJy4uL25vdGlmaWVyLXJlZic7XG5pbXBvcnQgeyBOb3RpZmllciB9IGZyb20gJy4uL21vZGVscy9ub3RpZmllci5tb2RlbCc7XG5pbXBvcnQgeyBOb3RpZmllckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvbm90aWZpZXItY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBRERBUFBUQUJMRV9DT05GSUdVUkFUSU9OX05PVElGSUVSX0RBVEEsIEFEREFQUFRBQkxFX05PVElGSUVSX0RBVEEgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgTm90aWZpZXJQb3NpdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvbm90aWZpZXItcG9zaXRpb24tZW51bS5tb2RlbCc7XG5pbXBvcnQgeyBCb3R0b21SaWdodFN0cmF0ZWd5IH0gZnJvbSAnLi4vc3RyYXRlZ2llcy9ib3R0b20tcmlnaHQuc3RyYXRlZ3knO1xuaW1wb3J0IHsgU3RyYXRlZ3kgfSBmcm9tICcuLi9zdHJhdGVnaWVzL3N0cmF0ZWd5JztcbmltcG9ydCB7IFRvcFJpZ2h0U3RyYXRlZ3kgfSBmcm9tICcuLi9zdHJhdGVnaWVzL3RvcC1yaWdodC5zdHJhdGVneSc7XG5pbXBvcnQgeyBCb3R0b21MZWZ0U3RyYXRlZ3kgfSBmcm9tICcuLi9zdHJhdGVnaWVzL2JvdHRvbS1sZWZ0LnN0cmF0ZWd5JztcbmltcG9ydCB7IFRvcExlZnRTdHJhdGVneSB9IGZyb20gJy4uL3N0cmF0ZWdpZXMvdG9wLWxlZnQuc3RyYXRlZ3knO1xuaW1wb3J0IHsgTm90aWZpZXJUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL25vdGlmaWVyLXR5cGUubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTm90aWZpZXJTZXJ2aWNlIHtcblxuICBkZWZhdWx0Q29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0ge1xuICAgIHBvc2l0aW9uOiBOb3RpZmllclBvc2l0aW9uVHlwZS5ib3R0b21SaWdodCxcbiAgICB0aW1lb3V0OiA1MDAwLFxuICAgIGNsYXNzSWNvbjogJ21hdGVyaWFsLWljb25zJyxcbiAgICBpY29uVmFsdWU6ICdub3RpZmljYXRpb25zJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX25vdGlmaWVyUG9ydGFsU2VydmljZTogTm90aWZpZXJQb3J0YWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIEBJbmplY3QoQUREQVBQVEFCTEVfQ09ORklHVVJBVElPTl9OT1RJRklFUl9EQVRBKSBjb25maWd1cmF0aW9uOiBOb3RpZmllckNvbmZpZ3VyYXRpb25cbiAgKSB7XG4gICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBvcGVuU3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbiA9IDxOb3RpZmllckNvbmZpZ3VyYXRpb24+e30pOiBOb3RpZmllclJlZiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7IG1lc3NhZ2U6IG1lc3NhZ2UsIHR5cGU6IE5vdGlmaWVyVHlwZS5zdWNjZXNzIH0sIGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgb3BlbkVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0gPE5vdGlmaWVyQ29uZmlndXJhdGlvbj57fSk6IE5vdGlmaWVyUmVmIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuKHsgbWVzc2FnZTogbWVzc2FnZSwgdHlwZTogTm90aWZpZXJUeXBlLmRhbmdlciB9LCBjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIG9wZW5JbmZvKG1lc3NhZ2U6IHN0cmluZywgY29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0gPE5vdGlmaWVyQ29uZmlndXJhdGlvbj57fSk6IE5vdGlmaWVyUmVmIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuKHsgbWVzc2FnZTogbWVzc2FnZSwgdHlwZTogTm90aWZpZXJUeXBlLmluZm8gfSwgY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBvcGVuV2FybmluZyhtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IE5vdGlmaWVyQ29uZmlndXJhdGlvbiA9IDxOb3RpZmllckNvbmZpZ3VyYXRpb24+e30pOiBOb3RpZmllclJlZiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7IG1lc3NhZ2U6IG1lc3NhZ2UsIHR5cGU6IE5vdGlmaWVyVHlwZS53YXJuaW5nIH0sIGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgb3BlbihkYXRhOiBOb3RpZmllciwgY29uZmlndXJhdGlvbjogTm90aWZpZXJDb25maWd1cmF0aW9uID0gPE5vdGlmaWVyQ29uZmlndXJhdGlvbj57fSk6IE5vdGlmaWVyUmVmIHtcbiAgICBjb25zdCBwb3J0YWwgPSB0aGlzLl9ub3RpZmllclBvcnRhbFNlcnZpY2UuY3JlYXRlKCk7XG4gICAgY29uc3QgY29tcG9uZW50UG9ydGFsID0gdGhpcy5fY3JlYXRlQ29tcG9uZW50UG9ydGFsKGRhdGEpO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHBvcnRhbC5hdHRhY2goY29tcG9uZW50UG9ydGFsKTtcbiAgICBjb25zdCBub3RpZmllclJlZiA9IG5ldyBOb3RpZmllclJlZihjb21wb25lbnRSZWYuaW5zdGFuY2UsIHBvcnRhbCwgdGhpcy5fZG9jdW1lbnQsIHRoaXMuX25vdGlmaWVyUG9ydGFsU2VydmljZS5nZXRMYXN0VW5pcXVlSWQpO1xuICAgIGNvbnN0IG1lcmdlQ29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgY29uZmlndXJhdGlvbik7XG4gICAgdGhpcy5fZmFjdG9yeVN0cmF0ZWd5KG1lcmdlQ29uZmlndXJhdGlvbikubmV3Tm90aWZpZXIobm90aWZpZXJSZWYpO1xuICAgIHJldHVybiBub3RpZmllclJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX2ZhY3RvcnlTdHJhdGVneShjb25maWd1cmF0aW9uOiBOb3RpZmllckNvbmZpZ3VyYXRpb24pOiBTdHJhdGVneSB7XG4gICAgc3dpdGNoIChjb25maWd1cmF0aW9uLnBvc2l0aW9uKSB7XG4gICAgICBjYXNlIE5vdGlmaWVyUG9zaXRpb25UeXBlLmJvdHRvbVJpZ2h0OlxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3IuZ2V0KEJvdHRvbVJpZ2h0U3RyYXRlZ3kpO1xuICAgICAgY2FzZSBOb3RpZmllclBvc2l0aW9uVHlwZS5ib3R0b21MZWZ0OlxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3IuZ2V0KEJvdHRvbUxlZnRTdHJhdGVneSk7XG4gICAgICBjYXNlIE5vdGlmaWVyUG9zaXRpb25UeXBlLnRvcExlZnQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoVG9wTGVmdFN0cmF0ZWd5KTtcbiAgICAgIGNhc2UgTm90aWZpZXJQb3NpdGlvblR5cGUudG9wUmlnaHQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoVG9wUmlnaHRTdHJhdGVneSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0b3IuZ2V0KEJvdHRvbVJpZ2h0U3RyYXRlZ3kpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUNvbXBvbmVudFBvcnRhbChkYXRhOiBhbnkpOiBDb21wb25lbnRQb3J0YWw8Tm90aWZpZXJDb21wb25lbnQ+IHtcbiAgICBjb25zdCBpbmplY3Rpb25Ub2tlbnMgPSBuZXcgV2Vha01hcDxhbnksIGFueT4oW1xuICAgICAgW0FEREFQUFRBQkxFX05PVElGSUVSX0RBVEEsIGRhdGFdXG4gICAgXSk7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBuZXcgUG9ydGFsSW5qZWN0b3IodGhpcy5faW5qZWN0b3IsIGluamVjdGlvblRva2Vucyk7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRQb3J0YWwoTm90aWZpZXJDb21wb25lbnQsIG51bGwsIGluamVjdG9yKTtcbiAgfVxufVxuIl19