ngx-logger
Version:
[](https://www.npmjs.com/package/ngx-logger)
145 lines • 21.4 kB
JavaScript
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);
}
/** Get config of logger */
getConfigSnapshot() {
return this.configEngine.getConfig();
}
_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 */ NGXLogger.ɵfac = function NGXLogger_Factory(t) { return new (t || NGXLogger)(i0.ɵɵinject(TOKEN_LOGGER_CONFIG), i0.ɵɵinject(TOKEN_LOGGER_CONFIG_ENGINE_FACTORY), i0.ɵɵinject(TOKEN_LOGGER_METADATA_SERVICE), i0.ɵɵinject(TOKEN_LOGGER_RULES_SERVICE), i0.ɵɵinject(TOKEN_LOGGER_MAPPER_SERVICE), i0.ɵɵinject(TOKEN_LOGGER_WRITER_SERVICE), i0.ɵɵinject(TOKEN_LOGGER_SERVER_SERVICE)); };
/** @nocollapse */ NGXLogger.ɵprov = i0.ɵɵdefineInjectable({ token: NGXLogger, factory: NGXLogger.ɵfac, providedIn: 'root' });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NGXLogger, [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], 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]
}] }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2xvZ2dlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRCxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUE2Qiw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hHLE9BQU8sRUFBMEIsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RixPQUFPLEVBQTJCLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEcsT0FBTyxFQUEyQiwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hHLE9BQU8sRUFBMkIsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFpQyxrQ0FBa0MsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUtwSCxNQUFNLE9BQU8sU0FBUztJQUlwQixZQUMrQixNQUF3QixFQUNULG1CQUFrRCxFQUMvQyxlQUEwQyxFQUM3QyxXQUFtQyxFQUNsQyxhQUFzQyxFQUN0QyxhQUFzQyxFQUN0QyxhQUFzQztRQUpwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBMkI7UUFDN0MsZ0JBQVcsR0FBWCxXQUFXLENBQXdCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUN0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBeUI7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQXlCO1FBRW5GLElBQUksQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFD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LGNBQWMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ25EO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztxRkFoSVUsU0FBUyxjQUtWLG1CQUFtQixlQUNuQixrQ0FBa0MsZUFDbEMsNkJBQTZCLGVBQzdCLDBCQUEwQixlQUMxQiwyQkFBMkIsZUFDM0IsMkJBQTJCLGVBQzNCLDJCQUEyQjtvRUFYMUIsU0FBUyxXQUFULFNBQVMsbUJBRlIsTUFBTTt1RkFFUCxTQUFTO2NBSHJCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7c0JBTUksTUFBTTt1QkFBQyxtQkFBbUI7O3NCQUMxQixNQUFNO3VCQUFDLGtDQUFrQzs7c0JBQ3pDLE1BQU07dUJBQUMsNkJBQTZCOztzQkFDcEMsTUFBTTt1QkFBQywwQkFBMEI7O3NCQUNqQyxNQUFNO3VCQUFDLDJCQUEyQjs7c0JBQ2xDLE1BQU07dUJBQUMsMkJBQTJCOztzQkFDbEMsTUFBTTt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE5neExvZ2dlckxldmVsIH0gZnJvbSAnLi90eXBlcy9sb2dnZXItbGV2ZWwuZW51bSc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJDb25maWdFbmdpbmUgfSBmcm9tICcuL2NvbmZpZy9pY29uZmlnLWVuZ2luZSc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJDb25maWcsIFRPS0VOX0xPR0dFUl9DT05GSUcgfSBmcm9tICcuL2NvbmZpZy9pY29uZmlnJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlck1ldGFkYXRhU2VydmljZSwgVE9LRU5fTE9HR0VSX01FVEFEQVRBX1NFUlZJQ0UgfSBmcm9tICcuL21ldGFkYXRhL2ltZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlclJ1bGVzU2VydmljZSwgVE9LRU5fTE9HR0VSX1JVTEVTX1NFUlZJQ0UgfSBmcm9tICcuL3J1bGVzL2lydWxlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlck1hcHBlclNlcnZpY2UsIFRPS0VOX0xPR0dFUl9NQVBQRVJfU0VSVklDRSB9IGZyb20gJy4vbWFwcGVyL2ltYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJNb25pdG9yIH0gZnJvbSAnLi9tb25pdG9yL2lsb2dnZXItbW9uaXRvcic7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJXcml0ZXJTZXJ2aWNlLCBUT0tFTl9MT0dHRVJfV1JJVEVSX1NFUlZJQ0UgfSBmcm9tICcuL3dyaXRlci9pd3JpdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJTkdYTG9nZ2VyU2VydmVyU2VydmljZSwgVE9LRU5fTE9HR0VSX1NFUlZFUl9TRVJWSUNFIH0gZnJvbSAnLi9zZXJ2ZXIvaXNlcnZlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSU5HWExvZ2dlckNvbmZpZ0VuZ2luZUZhY3RvcnksIFRPS0VOX0xPR0dFUl9DT05GSUdfRU5HSU5FX0ZBQ1RPUlkgfSBmcm9tICcuL2NvbmZpZy9pY29uZmlnLWVuZ2luZS1mYWN0b3J5JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5HWExvZ2dlciB7XHJcbiAgcHJpdmF0ZSBfbG9nZ2VyTW9uaXRvcjogSU5HWExvZ2dlck1vbml0b3I7XHJcbiAgcHJpdmF0ZSBjb25maWdFbmdpbmU6IElOR1hMb2dnZXJDb25maWdFbmdpbmU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChUT0tFTl9MT0dHRVJfQ09ORklHKSBjb25maWc6IElOR1hMb2dnZXJDb25maWcsXHJcbiAgICBASW5qZWN0KFRPS0VOX0xPR0dFUl9DT05GSUdfRU5HSU5FX0ZBQ1RPUlkpIGNvbmZpZ0VuZ2luZUZhY3Rvcnk6IElOR1hMb2dnZXJDb25maWdFbmdpbmVGYWN0b3J5LFxyXG4gICAgQEluamVjdChUT0tFTl9MT0dHRVJfTUVUQURBVEFfU0VSVklDRSkgcHJpdmF0ZSBtZXRhZGF0YVNlcnZpY2U6IElOR1hMb2dnZXJNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFRPS0VOX0xPR0dFUl9SVUxFU19TRVJWSUNFKSBwcml2YXRlIHJ1bGVTZXJ2aWNlOiBJTkdYTG9nZ2VyUnVsZXNTZXJ2aWNlLFxyXG4gICAgQEluamVjdChUT0tFTl9MT0dHRVJfTUFQUEVSX1NFUlZJQ0UpIHByaXZhdGUgbWFwcGVyU2VydmljZTogSU5HWExvZ2dlck1hcHBlclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFRPS0VOX0xPR0dFUl9XUklURVJfU0VSVklDRSkgcHJpdmF0ZSB3cml0ZXJTZXJ2aWNlOiBJTkdYTG9nZ2VyV3JpdGVyU2VydmljZSxcclxuICAgIEBJbmplY3QoVE9LRU5fTE9HR0VSX1NFUlZFUl9TRVJWSUNFKSBwcml2YXRlIHNlcnZlclNlcnZpY2U6IElOR1hMb2dnZXJTZXJ2ZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5jb25maWdFbmdpbmUgPSBjb25maWdFbmdpbmVGYWN0b3J5LnByb3ZpZGVDb25maWdFbmdpbmUoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKiBHZXQgYSByZWFkb25seSBhY2Nlc3MgdG8gdGhlIGxldmVsIGNvbmZpZ3VyZWQgZm9yIHRoZSBOR1hMb2dnZXIgKi9cclxuICBnZXQgbGV2ZWwoKTogTmd4TG9nZ2VyTGV2ZWwge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnRW5naW5lLmxldmVsO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCBhIHJlYWRvbmx5IGFjY2VzcyB0byB0aGUgc2VydmVyTG9nTGV2ZWwgY29uZmlndXJlZCBmb3IgdGhlIE5HWExvZ2dlciAqL1xyXG4gIGdldCBzZXJ2ZXJMb2dMZXZlbCgpOiBOZ3hMb2dnZXJMZXZlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdFbmdpbmUuc2VydmVyTG9nTGV2ZWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2UobWVzc2FnZT86IGFueSB8ICgoKSA9PiBhbnkpLCAuLi5hZGRpdGlvbmFsOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9nKE5neExvZ2dlckxldmVsLlRSQUNFLCBtZXNzYWdlLCBhZGRpdGlvbmFsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWJ1ZyhtZXNzYWdlPzogYW55IHwgKCgpID0+IGFueSksIC4uLmFkZGl0aW9uYWw6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2coTmd4TG9nZ2VyTGV2ZWwuREVCVUcsIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluZm8obWVzc2FnZT86IGFueSB8ICgoKSA9PiBhbnkpLCAuLi5hZGRpdGlvbmFsOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9nKE5neExvZ2dlckxldmVsLklORk8sIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZyhtZXNzYWdlPzogYW55IHwgKCgpID0+IGFueSksIC4uLmFkZGl0aW9uYWw6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2coTmd4TG9nZ2VyTGV2ZWwuTE9HLCBtZXNzYWdlLCBhZGRpdGlvbmFsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YXJuKG1lc3NhZ2U/OiBhbnkgfCAoKCkgPT4gYW55KSwgLi4uYWRkaXRpb25hbDogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvZyhOZ3hMb2dnZXJMZXZlbC5XQVJOLCBtZXNzYWdlLCBhZGRpdGlvbmFsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlcnJvcihtZXNzYWdlPzogYW55IHwgKCgpID0+IGFueSksIC4uLmFkZGl0aW9uYWw6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2coTmd4TG9nZ2VyTGV2ZWwuRVJST1IsIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZhdGFsKG1lc3NhZ2U/OiBhbnkgfCAoKCkgPT4gYW55KSwgLi4uYWRkaXRpb25hbDogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvZyhOZ3hMb2dnZXJMZXZlbC5GQVRBTCwgbWVzc2FnZSwgYWRkaXRpb25hbCk7XHJcbiAgfVxyXG5cclxuICAvKiogQGRlcHJlY2F0ZWQgY3VzdG9tSHR0cEhlYWRlcnMgaXMgbm93IHBhcnQgb2YgdGhlIGNvbmZpZywgdGhpcyBzaG91bGQgYmUgdXBkYXRlZCB2aWEgQHNlZSB1cGRhdGVDb25maWcgKi9cclxuICBwdWJsaWMgc2V0Q3VzdG9tSHR0cEhlYWRlcnMoaGVhZGVyczogSHR0cEhlYWRlcnMpIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnU25hcHNob3QoKTtcclxuICAgIGNvbmZpZy5jdXN0b21IdHRwSGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBkZXByZWNhdGVkIGN1c3RvbUh0dHBQYXJhbXMgaXMgbm93IHBhcnQgb2YgdGhlIGNvbmZpZywgdGhpcyBzaG91bGQgYmUgdXBkYXRlZCB2aWEgQHNlZSB1cGRhdGVDb25maWcgKi9cclxuICBwdWJsaWMgc2V0Q3VzdG9tUGFyYW1zKHBhcmFtczogSHR0cFBhcmFtcykge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWdTbmFwc2hvdCgpO1xyXG4gICAgY29uZmlnLmN1c3RvbUh0dHBQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBkZXByZWNhdGVkIHdpdGhDcmVkZW50aWFscyBpcyBub3cgcGFydCBvZiB0aGUgY29uZmlnLCB0aGlzIHNob3VsZCBiZSB1cGRhdGVkIHZpYSBAc2VlIHVwZGF0ZUNvbmZpZyAqL1xyXG4gIHB1YmxpYyBzZXRXaXRoQ3JlZGVudGlhbHNPcHRpb25WYWx1ZSh3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnU25hcHNob3QoKTtcclxuICAgIGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHM7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgYSBJTkdYTG9nZ2VyTW9uaXRvciB0aGF0IHdpbGwgYmUgdHJpZ2dlciB3aGVuIGEgbG9nIGlzIGVpdGhlciB3cml0dGVuIG9yIHNlbnQgdG8gc2VydmVyXHJcbiAgICogXHJcbiAgICogVGhlcmUgaXMgb25seSBvbmUgbW9uaXRvciwgcmVnaXN0ZXJpbmcgb25lIHdpbGwgb3ZlcndyaXRlIHRoZSBsYXN0IG9uZSBpZiB0aGVyZSB3YXMgb25lXHJcbiAgICogQHBhcmFtIG1vbml0b3IgXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyTW9uaXRvcihtb25pdG9yOiBJTkdYTG9nZ2VyTW9uaXRvcikge1xyXG4gICAgdGhpcy5fbG9nZ2VyTW9uaXRvciA9IG1vbml0b3I7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IGNvbmZpZyBvZiBsb2dnZXJcclxuICAgKiBcclxuICAgKiBXYXJuaW5nIDogVGhpcyBvdmVyd3JpdGVzIGFsbCB0aGUgY29uZmlnLCBpZiB5b3Ugd2FudCB0byB1cGRhdGUgb25seSBvbmUgcHJvcGVydHksIHlvdSBzaG91bGQgdXNlIEBzZWUgZ2V0Q29uZmlnU25hcHNob3QgYmVmb3JlXHJcbiAgICovXHJcbiAgcHVibGljIHVwZGF0ZUNvbmZpZyhjb25maWc6IElOR1hMb2dnZXJDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnRW5naW5lLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCBjb25maWcgb2YgbG9nZ2VyICovXHJcbiAgcHVibGljIGdldENvbmZpZ1NuYXBzaG90KCk6IElOR1hMb2dnZXJDb25maWcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnRW5naW5lLmdldENvbmZpZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9nKGxldmVsOiBOZ3hMb2dnZXJMZXZlbCwgbWVzc2FnZT86IGFueSB8ICgoKSA9PiBhbnkpLCBhZGRpdGlvbmFsOiBhbnlbXSA9IFtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0VuZ2luZS5nZXRDb25maWcoKTtcclxuXHJcbiAgICBjb25zdCBzaG91bGRDYWxsV3JpdGVyID0gdGhpcy5ydWxlU2VydmljZS5zaG91bGRDYWxsV3JpdGVyKGxldmVsLCBjb25maWcsIG1lc3NhZ2UsIGFkZGl0aW9uYWwpO1xyXG4gICAgY29uc3Qgc2hvdWxkQ2FsbFNlcnZlciA9IHRoaXMucnVsZVNlcnZpY2Uuc2hvdWxkQ2FsbFNlcnZlcihsZXZlbCwgY29uZmlnLCBtZXNzYWdlLCBhZGRpdGlvbmFsKTtcclxuICAgIGNvbnN0IHNob3VsZENhbGxNb25pdG9yID0gdGhpcy5ydWxlU2VydmljZS5zaG91bGRDYWxsTW9uaXRvcihsZXZlbCwgY29uZmlnLCBtZXNzYWdlLCBhZGRpdGlvbmFsKTtcclxuXHJcbiAgICBpZiAoIXNob3VsZENhbGxXcml0ZXIgJiYgIXNob3VsZENhbGxTZXJ2ZXIgJiYgIXNob3VsZENhbGxNb25pdG9yKSB7XHJcbiAgICAgIC8vIElmIG5vdGhpbmcgaXMgdG8gYmUgY2FsbGVkIHdlIHJldHVyblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YShsZXZlbCwgY29uZmlnLCBtZXNzYWdlLCBhZGRpdGlvbmFsKTtcclxuICAgIHRoaXMubWFwcGVyU2VydmljZS5nZXRMb2dQb3NpdGlvbihjb25maWcsIG1ldGFkYXRhKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShsb2dQb3NpdGlvbiA9PiB7XHJcbiAgICAgIGlmIChsb2dQb3NpdGlvbikge1xyXG4gICAgICAgIG1ldGFkYXRhLmZpbGVOYW1lID0gbG9nUG9zaXRpb24uZmlsZU5hbWU7XHJcbiAgICAgICAgbWV0YWRhdGEubGluZU51bWJlciA9IGxvZ1Bvc2l0aW9uLmxpbmVOdW1iZXI7XHJcbiAgICAgICAgbWV0YWRhdGEuY29sdW1uTnVtYmVyID0gbG9nUG9zaXRpb24uY29sdW1uTnVtYmVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2hvdWxkQ2FsbE1vbml0b3IgJiYgdGhpcy5fbG9nZ2VyTW9uaXRvcikge1xyXG4gICAgICAgIHRoaXMuX2xvZ2dlck1vbml0b3Iub25Mb2cobWV0YWRhdGEsIGNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNob3VsZENhbGxXcml0ZXIpIHtcclxuICAgICAgICB0aGlzLndyaXRlclNlcnZpY2Uud3JpdGVNZXNzYWdlKG1ldGFkYXRhLCBjb25maWcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzaG91bGRDYWxsU2VydmVyKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2ZXJTZXJ2aWNlLnNlbmRUb1NlcnZlcihtZXRhZGF0YSwgY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==