UNPKG

ngx-logger

Version:

[![npm version](https://badge.fury.io/js/ngx-logger.svg)](https://www.npmjs.com/package/ngx-logger)

154 lines 22.6 kB
import { Inject, Injectable } from '@angular/core'; import { NgxLoggerLevel } from './types/logger-level.enum'; import { TOKEN_LOGGER_CONFIG } from './config/iconfig'; import { TOKEN_LOGGER_METADATA_SERVICE } from './metadata/imetadata.service'; import { TOKEN_LOGGER_RULES_SERVICE } from './rules/irules.service'; import { TOKEN_LOGGER_MAPPER_SERVICE } from './mapper/imapper.service'; import { TOKEN_LOGGER_WRITER_SERVICE } from './writer/iwriter.service'; import { TOKEN_LOGGER_SERVER_SERVICE } from './server/iserver.service'; import { take } from 'rxjs/operators'; import { TOKEN_LOGGER_CONFIG_ENGINE_FACTORY } from './config/iconfig-engine-factory'; import * as i0 from "@angular/core"; export class NGXLogger { constructor(config, configEngineFactory, metadataService, ruleService, mapperService, writerService, serverService) { this.metadataService = metadataService; this.ruleService = ruleService; this.mapperService = mapperService; this.writerService = writerService; this.serverService = serverService; this.configEngine = configEngineFactory.provideConfigEngine(config); } /** Get a readonly access to the level configured for the NGXLogger */ get level() { return this.configEngine.level; } /** Get a readonly access to the serverLogLevel configured for the NGXLogger */ get serverLogLevel() { return this.configEngine.serverLogLevel; } trace(message, ...additional) { this._log(NgxLoggerLevel.TRACE, message, additional); } debug(message, ...additional) { this._log(NgxLoggerLevel.DEBUG, message, additional); } info(message, ...additional) { this._log(NgxLoggerLevel.INFO, message, additional); } log(message, ...additional) { this._log(NgxLoggerLevel.LOG, message, additional); } warn(message, ...additional) { this._log(NgxLoggerLevel.WARN, message, additional); } error(message, ...additional) { this._log(NgxLoggerLevel.ERROR, message, additional); } fatal(message, ...additional) { this._log(NgxLoggerLevel.FATAL, message, additional); } /** @deprecated customHttpHeaders is now part of the config, this should be updated via @see updateConfig */ setCustomHttpHeaders(headers) { const config = this.getConfigSnapshot(); config.customHttpHeaders = headers; this.updateConfig(config); } /** @deprecated customHttpParams is now part of the config, this should be updated via @see updateConfig */ setCustomParams(params) { const config = this.getConfigSnapshot(); config.customHttpParams = params; this.updateConfig(config); } /** @deprecated withCredentials is now part of the config, this should be updated via @see updateConfig */ setWithCredentialsOptionValue(withCredentials) { const config = this.getConfigSnapshot(); config.withCredentials = withCredentials; this.updateConfig(config); } /** * Register a INGXLoggerMonitor that will be trigger when a log is either written or sent to server * * There is only one monitor, registering one will overwrite the last one if there was one * @param monitor */ registerMonitor(monitor) { this._loggerMonitor = monitor; } /** Set config of logger * * Warning : This overwrites all the config, if you want to update only one property, you should use @see getConfigSnapshot before */ updateConfig(config) { this.configEngine.updateConfig(config); } partialUpdateConfig(partialConfig) { this.configEngine.partialUpdateConfig(partialConfig); } /** Get config of logger */ getConfigSnapshot() { return this.configEngine.getConfig(); } /** * Flush the serveur queue */ flushServerQueue() { this.serverService.flushQueue(this.getConfigSnapshot()); } _log(level, message, additional = []) { const config = this.configEngine.getConfig(); const shouldCallWriter = this.ruleService.shouldCallWriter(level, config, message, additional); const shouldCallServer = this.ruleService.shouldCallServer(level, config, message, additional); const shouldCallMonitor = this.ruleService.shouldCallMonitor(level, config, message, additional); if (!shouldCallWriter && !shouldCallServer && !shouldCallMonitor) { // If nothing is to be called we return return; } const metadata = this.metadataService.getMetadata(level, config, message, additional); this.mapperService.getLogPosition(config, metadata).pipe(take(1)).subscribe(logPosition => { if (logPosition) { metadata.fileName = logPosition.fileName; metadata.lineNumber = logPosition.lineNumber; metadata.columnNumber = logPosition.columnNumber; } if (shouldCallMonitor && this._loggerMonitor) { this._loggerMonitor.onLog(metadata, config); } if (shouldCallWriter) { this.writerService.writeMessage(metadata, config); } if (shouldCallServer) { this.serverService.sendToServer(metadata, config); } }); } } /** @nocollapse */ /** @nocollapse */ NGXLogger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NGXLogger, deps: [{ token: TOKEN_LOGGER_CONFIG }, { token: TOKEN_LOGGER_CONFIG_ENGINE_FACTORY }, { token: TOKEN_LOGGER_METADATA_SERVICE }, { token: TOKEN_LOGGER_RULES_SERVICE }, { token: TOKEN_LOGGER_MAPPER_SERVICE }, { token: TOKEN_LOGGER_WRITER_SERVICE }, { token: TOKEN_LOGGER_SERVER_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable }); /** @nocollapse */ /** @nocollapse */ NGXLogger.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NGXLogger, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NGXLogger, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [TOKEN_LOGGER_CONFIG] }] }, { type: undefined, decorators: [{ type: Inject, args: [TOKEN_LOGGER_CONFIG_ENGINE_FACTORY] }] }, { type: undefined, decorators: [{ type: Inject, args: [TOKEN_LOGGER_METADATA_SERVICE] }] }, { type: undefined, decorators: [{ type: Inject, args: [TOKEN_LOGGER_RULES_SERVICE] }] }, { type: undefined, decorators: [{ type: Inject, args: [TOKEN_LOGGER_MAPPER_SERVICE] }] }, { type: undefined, decorators: [{ type: Inject, args: [TOKEN_LOGGER_WRITER_SERVICE] }] }, { type: undefined, decorators: [{ type: Inject, args: [TOKEN_LOGGER_SERVER_SERVICE] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2xvZ2dlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRCxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUE2Qiw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hHLE9BQU8sRUFBMEIsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RixPQUFPLEVBQTJCLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEcsT0FBTyxFQUEyQiwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hHLE9BQU8sRUFBMkIsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFpQyxrQ0FBa0MsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUtwSCxNQUFNLE9BQU8sU0FBUztJQUlwQixZQUMrQixNQUF3QixFQUNULG1CQUFrRCxFQUMvQyxlQUEwQyxFQUM3QyxXQUFtQyxFQUNsQyxhQUFzQyxFQUN0QyxhQUFzQyxFQUN0QyxhQUFzQztRQUpwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBMkI7UUFDN0MsZ0JBQVcsR0FBWCxXQUFXLENBQXdCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBeUI7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQXlCO1FBRW5GLElBQUksQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFD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bmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTmd4TG9nZ2VyTGV2ZWwgfSBmcm9tICcuL3R5cGVzL2xvZ2dlci1sZXZlbC5lbnVtJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlckNvbmZpZ0VuZ2luZSB9IGZyb20gJy4vY29uZmlnL2ljb25maWctZW5naW5lJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlckNvbmZpZywgVE9LRU5fTE9HR0VSX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnL2ljb25maWcnO1xyXG5pbXBvcnQgeyBJTkdYTG9nZ2VyTWV0YWRhdGFTZXJ2aWNlLCBUT0tFTl9MT0dHRVJfTUVUQURBVEFfU0VSVklDRSB9IGZyb20gJy4vbWV0YWRhdGEvaW1ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJTkdYTG9nZ2VyUnVsZXNTZXJ2aWNlLCBUT0tFTl9MT0dHRVJfUlVMRVNfU0VSVklDRSB9IGZyb20gJy4vcnVsZXMvaXJ1bGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJTkdYTG9nZ2VyTWFwcGVyU2VydmljZSwgVE9LRU5fTE9HR0VSX01BUFBFUl9TRVJWSUNFIH0gZnJvbSAnLi9tYXBwZXIvaW1hcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlck1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvaWxvZ2dlci1tb25pdG9yJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlcldyaXRlclNlcnZpY2UsIFRPS0VOX0xPR0dFUl9XUklURVJfU0VSVklDRSB9IGZyb20gJy4vd3JpdGVyL2l3cml0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJTZXJ2ZXJTZXJ2aWNlLCBUT0tFTl9MT0dHRVJfU0VSVkVSX1NFUlZJQ0UgfSBmcm9tICcuL3NlcnZlci9pc2VydmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJTkdYTG9nZ2VyQ29uZmlnRW5naW5lRmFjdG9yeSwgVE9LRU5fTE9HR0VSX0NPTkZJR19FTkdJTkVfRkFDVE9SWSB9IGZyb20gJy4vY29uZmlnL2ljb25maWctZW5naW5lLWZhY3RvcnknO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTkdYTG9nZ2VyIHtcclxuICBwcml2YXRlIF9sb2dnZXJNb25pdG9yOiBJTkdYTG9nZ2VyTW9uaXRvcjtcclxuICBwcml2YXRlIGNvbmZpZ0VuZ2luZTogSU5HWExvZ2dlckNvbmZpZ0VuZ2luZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFRPS0VOX0xPR0dFUl9DT05GSUcpIGNvbmZpZzogSU5HWExvZ2dlckNvbmZpZyxcclxuICAgIEBJbmplY3QoVE9LRU5fTE9HR0VSX0NPTkZJR19FTkdJTkVfRkFDVE9SWSkgY29uZmlnRW5naW5lRmFjdG9yeTogSU5HWExvZ2dlckNvbmZpZ0VuZ2luZUZhY3RvcnksXHJcbiAgICBASW5qZWN0KFRPS0VOX0xPR0dFUl9NRVRBREFUQV9TRVJWSUNFKSBwcml2YXRlIG1ldGFkYXRhU2VydmljZTogSU5HWExvZ2dlck1ldGFkYXRhU2VydmljZSxcclxuICAgIEBJbmplY3QoVE9LRU5fTE9HR0VSX1JVTEVTX1NFUlZJQ0UpIHByaXZhdGUgcnVsZVNlcnZpY2U6IElOR1hMb2dnZXJSdWxlc1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KFRPS0VOX0xPR0dFUl9NQVBQRVJfU0VSVklDRSkgcHJpdmF0ZSBtYXBwZXJTZXJ2aWNlOiBJTkdYTG9nZ2VyTWFwcGVyU2VydmljZSxcclxuICAgIEBJbmplY3QoVE9LRU5fTE9HR0VSX1dSSVRFUl9TRVJWSUNFKSBwcml2YXRlIHdyaXRlclNlcnZpY2U6IElOR1hMb2dnZXJXcml0ZXJTZXJ2aWNlLFxyXG4gICAgQEluamVjdChUT0tFTl9MT0dHRVJfU0VSVkVSX1NFUlZJQ0UpIHByaXZhdGUgc2VydmVyU2VydmljZTogSU5HWExvZ2dlclNlcnZlclNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbmZpZ0VuZ2luZSA9IGNvbmZpZ0VuZ2luZUZhY3RvcnkucHJvdmlkZUNvbmZpZ0VuZ2luZShjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCBhIHJlYWRvbmx5IGFjY2VzcyB0byB0aGUgbGV2ZWwgY29uZmlndXJlZCBmb3IgdGhlIE5HWExvZ2dlciAqL1xyXG4gIGdldCBsZXZlbCgpOiBOZ3hMb2dnZXJMZXZlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdFbmdpbmUubGV2ZWw7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IGEgcmVhZG9ubHkgYWNjZXNzIHRvIHRoZSBzZXJ2ZXJMb2dMZXZlbCBjb25maWd1cmVkIGZvciB0aGUgTkdYTG9nZ2VyICovXHJcbiAgZ2V0IHNlcnZlckxvZ0xldmVsKCk6IE5neExvZ2dlckxldmVsIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ0VuZ2luZS5zZXJ2ZXJMb2dMZXZlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFjZShtZXNzYWdlPzogYW55IHwgKCgpID0+IGFueSksIC4uLmFkZGl0aW9uYWw6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2coTmd4TG9nZ2VyTGV2ZWwuVFJBQ0UsIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlYnVnKG1lc3NhZ2U/OiBhbnkgfCAoKCkgPT4gYW55KSwgLi4uYWRkaXRpb25hbDogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvZyhOZ3hMb2dnZXJMZXZlbC5ERUJVRywgbWVzc2FnZSwgYWRkaXRpb25hbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5mbyhtZXNzYWdlPzogYW55IHwgKCgpID0+IGFueSksIC4uLmFkZGl0aW9uYWw6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2coTmd4TG9nZ2VyTGV2ZWwuSU5GTywgbWVzc2FnZSwgYWRkaXRpb25hbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nKG1lc3NhZ2U/OiBhbnkgfCAoKCkgPT4gYW55KSwgLi4uYWRkaXRpb25hbDogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvZyhOZ3hMb2dnZXJMZXZlbC5MT0csIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdhcm4obWVzc2FnZT86IGFueSB8ICgoKSA9PiBhbnkpLCAuLi5hZGRpdGlvbmFsOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9nKE5neExvZ2dlckxldmVsLldBUk4sIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVycm9yKG1lc3NhZ2U/OiBhbnkgfCAoKCkgPT4gYW55KSwgLi4uYWRkaXRpb25hbDogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvZyhOZ3hMb2dnZXJMZXZlbC5FUlJPUiwgbWVzc2FnZSwgYWRkaXRpb25hbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmF0YWwobWVzc2FnZT86IGFueSB8ICgoKSA9PiBhbnkpLCAuLi5hZGRpdGlvbmFsOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9nKE5neExvZ2dlckxldmVsLkZBVEFMLCBtZXNzYWdlLCBhZGRpdGlvbmFsKTtcclxuICB9XHJcblxyXG4gIC8qKiBAZGVwcmVjYXRlZCBjdXN0b21IdHRwSGVhZGVycyBpcyBub3cgcGFydCBvZiB0aGUgY29uZmlnLCB0aGlzIHNob3VsZCBiZSB1cGRhdGVkIHZpYSBAc2VlIHVwZGF0ZUNvbmZpZyAqL1xyXG4gIHB1YmxpYyBzZXRDdXN0b21IdHRwSGVhZGVycyhoZWFkZXJzOiBIdHRwSGVhZGVycykge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWdTbmFwc2hvdCgpO1xyXG4gICAgY29uZmlnLmN1c3RvbUh0dHBIZWFkZXJzID0gaGVhZGVycztcclxuICAgIHRoaXMudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKiogQGRlcHJlY2F0ZWQgY3VzdG9tSHR0cFBhcmFtcyBpcyBub3cgcGFydCBvZiB0aGUgY29uZmlnLCB0aGlzIHNob3VsZCBiZSB1cGRhdGVkIHZpYSBAc2VlIHVwZGF0ZUNvbmZpZyAqL1xyXG4gIHB1YmxpYyBzZXRDdXN0b21QYXJhbXMocGFyYW1zOiBIdHRwUGFyYW1zKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZ1NuYXBzaG90KCk7XHJcbiAgICBjb25maWcuY3VzdG9tSHR0cFBhcmFtcyA9IHBhcmFtcztcclxuICAgIHRoaXMudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKiogQGRlcHJlY2F0ZWQgd2l0aENyZWRlbnRpYWxzIGlzIG5vdyBwYXJ0IG9mIHRoZSBjb25maWcsIHRoaXMgc2hvdWxkIGJlIHVwZGF0ZWQgdmlhIEBzZWUgdXBkYXRlQ29uZmlnICovXHJcbiAgcHVibGljIHNldFdpdGhDcmVkZW50aWFsc09wdGlvblZhbHVlKHdpdGhDcmVkZW50aWFsczogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWdTbmFwc2hvdCgpO1xyXG4gICAgY29uZmlnLndpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscztcclxuICAgIHRoaXMudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlciBhIElOR1hMb2dnZXJNb25pdG9yIHRoYXQgd2lsbCBiZSB0cmlnZ2VyIHdoZW4gYSBsb2cgaXMgZWl0aGVyIHdyaXR0ZW4gb3Igc2VudCB0byBzZXJ2ZXJcclxuICAgKiBcclxuICAgKiBUaGVyZSBpcyBvbmx5IG9uZSBtb25pdG9yLCByZWdpc3RlcmluZyBvbmUgd2lsbCBvdmVyd3JpdGUgdGhlIGxhc3Qgb25lIGlmIHRoZXJlIHdhcyBvbmVcclxuICAgKiBAcGFyYW0gbW9uaXRvciBcclxuICAgKi9cclxuICBwdWJsaWMgcmVnaXN0ZXJNb25pdG9yKG1vbml0b3I6IElOR1hMb2dnZXJNb25pdG9yKSB7XHJcbiAgICB0aGlzLl9sb2dnZXJNb25pdG9yID0gbW9uaXRvcjtcclxuICB9XHJcblxyXG4gIC8qKiBTZXQgY29uZmlnIG9mIGxvZ2dlclxyXG4gICAqIFxyXG4gICAqIFdhcm5pbmcgOiBUaGlzIG92ZXJ3cml0ZXMgYWxsIHRoZSBjb25maWcsIGlmIHlvdSB3YW50IHRvIHVwZGF0ZSBvbmx5IG9uZSBwcm9wZXJ0eSwgeW91IHNob3VsZCB1c2UgQHNlZSBnZXRDb25maWdTbmFwc2hvdCBiZWZvcmVcclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlQ29uZmlnKGNvbmZpZzogSU5HWExvZ2dlckNvbmZpZykge1xyXG4gICAgdGhpcy5jb25maWdFbmdpbmUudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFydGlhbFVwZGF0ZUNvbmZpZyhwYXJ0aWFsQ29uZmlnOiBQYXJ0aWFsPElOR1hMb2dnZXJDb25maWc+KTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ0VuZ2luZS5wYXJ0aWFsVXBkYXRlQ29uZmlnKHBhcnRpYWxDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCBjb25maWcgb2YgbG9nZ2VyICovXHJcbiAgcHVibGljIGdldENvbmZpZ1NuYXBzaG90KCk6IElOR1hMb2dnZXJDb25maWcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnRW5naW5lLmdldENvbmZpZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmx1c2ggdGhlIHNlcnZldXIgcXVldWVcclxuICAgKi9cclxuICBwdWJsaWMgZmx1c2hTZXJ2ZXJRdWV1ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VydmVyU2VydmljZS5mbHVzaFF1ZXVlKHRoaXMuZ2V0Q29uZmlnU25hcHNob3QoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2cobGV2ZWw6IE5neExvZ2dlckxldmVsLCBtZXNzYWdlPzogYW55IHwgKCgpID0+IGFueSksIGFkZGl0aW9uYWw6IGFueVtdID0gW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnRW5naW5lLmdldENvbmZpZygpO1xyXG5cclxuICAgIGNvbnN0IHNob3VsZENhbGxXcml0ZXIgPSB0aGlzLnJ1bGVTZXJ2aWNlLnNob3VsZENhbGxXcml0ZXIobGV2ZWwsIGNvbmZpZywgbWVzc2FnZSwgYWRkaXRpb25hbCk7XHJcbiAgICBjb25zdCBzaG91bGRDYWxsU2VydmVyID0gdGhpcy5ydWxlU2VydmljZS5zaG91bGRDYWxsU2VydmVyKGxldmVsLCBjb25maWcsIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gICAgY29uc3Qgc2hvdWxkQ2FsbE1vbml0b3IgPSB0aGlzLnJ1bGVTZXJ2aWNlLnNob3VsZENhbGxNb25pdG9yKGxldmVsLCBjb25maWcsIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG5cclxuICAgIGlmICghc2hvdWxkQ2FsbFdyaXRlciAmJiAhc2hvdWxkQ2FsbFNlcnZlciAmJiAhc2hvdWxkQ2FsbE1vbml0b3IpIHtcclxuICAgICAgLy8gSWYgbm90aGluZyBpcyB0byBiZSBjYWxsZWQgd2UgcmV0dXJuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMubWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhKGxldmVsLCBjb25maWcsIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gICAgdGhpcy5tYXBwZXJTZXJ2aWNlLmdldExvZ1Bvc2l0aW9uKGNvbmZpZywgbWV0YWRhdGEpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGxvZ1Bvc2l0aW9uID0+IHtcclxuICAgICAgaWYgKGxvZ1Bvc2l0aW9uKSB7XHJcbiAgICAgICAgbWV0YWRhdGEuZmlsZU5hbWUgPSBsb2dQb3NpdGlvbi5maWxlTmFtZTtcclxuICAgICAgICBtZXRhZGF0YS5saW5lTnVtYmVyID0gbG9nUG9zaXRpb24ubGluZU51bWJlcjtcclxuICAgICAgICBtZXRhZGF0YS5jb2x1bW5OdW1iZXIgPSBsb2dQb3NpdGlvbi5jb2x1bW5OdW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzaG91bGRDYWxsTW9uaXRvciAmJiB0aGlzLl9sb2dnZXJNb25pdG9yKSB7XHJcbiAgICAgICAgdGhpcy5fbG9nZ2VyTW9uaXRvci5vbkxvZyhtZXRhZGF0YSwgY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hvdWxkQ2FsbFdyaXRlcikge1xyXG4gICAgICAgIHRoaXMud3JpdGVyU2VydmljZS53cml0ZU1lc3NhZ2UobWV0YWRhdGEsIGNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNob3VsZENhbGxTZXJ2ZXIpIHtcclxuICAgICAgICB0aGlzLnNlcnZlclNlcnZpY2Uuc2VuZFRvU2VydmVyKG1ldGFkYXRhLCBjb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19