ngx-logger
Version:
[](https://www.npmjs.com/package/ngx-logger)
131 lines • 22.3 kB
JavaScript
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { NGXLogger } from './logger.service';
import { CustomNGXLoggerService } from './custom-logger.service';
import { TOKEN_LOGGER_CONFIG } from './config/iconfig';
import { NGXLoggerMapperService } from './mapper/mapper.service';
import { TOKEN_LOGGER_METADATA_SERVICE } from './metadata/imetadata.service';
import { NGXLoggerMetadataService } from './metadata/metadata.service';
import { TOKEN_LOGGER_RULES_SERVICE } from './rules/irules.service';
import { NGXLoggerRulesService } from './rules/rules.service';
import { TOKEN_LOGGER_MAPPER_SERVICE } from './mapper/imapper.service';
import { NGXLoggerWriterService } from './writer/writer.service';
import { TOKEN_LOGGER_WRITER_SERVICE } from './writer/iwriter.service';
import { NGXLoggerServerService } from './server/server.service';
import { TOKEN_LOGGER_SERVER_SERVICE } from './server/iserver.service';
import { NGXLoggerConfigEngineFactory } from './config/config-engine-factory';
import { TOKEN_LOGGER_CONFIG_ENGINE_FACTORY } from './config/iconfig-engine-factory';
import * as i0 from "@angular/core";
export class LoggerModule {
static forRoot(config, customProvider) {
if (!customProvider) {
customProvider = {};
}
// default config provider
if (!customProvider.configProvider) {
customProvider.configProvider = { provide: TOKEN_LOGGER_CONFIG, useValue: config || {} };
}
else {
// if the user provided its own config, we just make sure the injection token is correct
if (customProvider.configProvider.provide !== TOKEN_LOGGER_CONFIG) {
throw new Error(`Wrong injection token for configProvider, it should be ${TOKEN_LOGGER_CONFIG} and you used ${customProvider.configProvider.provide}`);
}
}
// default configEngine provider
if (!customProvider.configEngineFactoryProvider) {
customProvider.configEngineFactoryProvider = { provide: TOKEN_LOGGER_CONFIG_ENGINE_FACTORY, useClass: NGXLoggerConfigEngineFactory };
}
else {
// if the user provided its own configEngineFactory, we just make sure the injection token is correct
if (customProvider.configEngineFactoryProvider.provide !== TOKEN_LOGGER_CONFIG_ENGINE_FACTORY) {
throw new Error(`Wrong injection token for configEngineFactoryProvider, it should be '${TOKEN_LOGGER_CONFIG_ENGINE_FACTORY}' and you used '${customProvider.configEngineFactoryProvider.provide}'`);
}
}
// default metadata provider
if (!customProvider.metadataProvider) {
customProvider.metadataProvider = { provide: TOKEN_LOGGER_METADATA_SERVICE, useClass: NGXLoggerMetadataService };
}
else {
// if the user provided its own metadataService, we just make sure the injection token is correct
if (customProvider.metadataProvider.provide !== TOKEN_LOGGER_METADATA_SERVICE) {
throw new Error(`Wrong injection token for metadataProvider, it should be '${TOKEN_LOGGER_METADATA_SERVICE}' and you used '${customProvider.metadataProvider.provide}'`);
}
}
// default rule provider
if (!customProvider.ruleProvider) {
customProvider.ruleProvider = { provide: TOKEN_LOGGER_RULES_SERVICE, useClass: NGXLoggerRulesService };
}
else {
// if the user provided its own ruleService, we just make sure the injection token is correct
if (customProvider.ruleProvider.provide !== TOKEN_LOGGER_RULES_SERVICE) {
throw new Error(`Wrong injection token for ruleProvider, it should be '${TOKEN_LOGGER_RULES_SERVICE}' and you used '${customProvider.ruleProvider.provide}'`);
}
}
// default mapper provider
if (!customProvider.mapperProvider) {
customProvider.mapperProvider = { provide: TOKEN_LOGGER_MAPPER_SERVICE, useClass: NGXLoggerMapperService };
}
else {
// if the user provided its own mapperService, we just make sure the injection token is correct
if (customProvider.mapperProvider.provide !== TOKEN_LOGGER_MAPPER_SERVICE) {
throw new Error(`Wrong injection token for mapperProvider, it should be '${TOKEN_LOGGER_MAPPER_SERVICE}' and you used '${customProvider.mapperProvider.provide}'`);
}
}
// default writer provider
if (!customProvider.writerProvider) {
customProvider.writerProvider = { provide: TOKEN_LOGGER_WRITER_SERVICE, useClass: NGXLoggerWriterService };
}
else {
// if the user provided its own writerService, we just make sure the injection token is correct
if (customProvider.writerProvider.provide !== TOKEN_LOGGER_WRITER_SERVICE) {
throw new Error(`Wrong injection token for writerProvider, it should be '${TOKEN_LOGGER_WRITER_SERVICE}' and you used '${customProvider.writerProvider.provide}'`);
}
}
// default server provider
if (!customProvider.serverProvider) {
customProvider.serverProvider = { provide: TOKEN_LOGGER_SERVER_SERVICE, useClass: NGXLoggerServerService };
}
else {
// if the user provided its own serverService, we just make sure the injection token is correct
if (customProvider.serverProvider.provide !== TOKEN_LOGGER_SERVER_SERVICE) {
throw new Error(`Wrong injection token for serverProvider, it should be '${TOKEN_LOGGER_SERVER_SERVICE}' and you used '${customProvider.writerProvider.provide}'`);
}
}
return {
ngModule: LoggerModule,
providers: [
NGXLogger,
customProvider.configProvider,
customProvider.configEngineFactoryProvider,
customProvider.metadataProvider,
customProvider.ruleProvider,
customProvider.mapperProvider,
customProvider.writerProvider,
customProvider.serverProvider,
CustomNGXLoggerService,
]
};
}
static forChild() {
// todo : this forChild is useless for now because nothing is different from forRoot.
// This should be implemented so that user can change the providers in the forChild
return {
ngModule: LoggerModule,
};
}
}
/** @nocollapse */ LoggerModule.ɵfac = function LoggerModule_Factory(t) { return new (t || LoggerModule)(); };
/** @nocollapse */ LoggerModule.ɵmod = i0.ɵɵdefineNgModule({ type: LoggerModule });
/** @nocollapse */ LoggerModule.ɵinj = i0.ɵɵdefineInjector({ imports: [[
CommonModule
]] });
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(LoggerModule, { imports: [CommonModule] }); })();
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoggerModule, [{
type: NgModule,
args: [{
imports: [
CommonModule
],
}]
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbG9nZ2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUE4RixRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBT3JGLE1BQU0s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Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLFlBQVk7aUJBQ2I7YUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENsYXNzUHJvdmlkZXIsIENvbnN0cnVjdG9yUHJvdmlkZXIsIEV4aXN0aW5nUHJvdmlkZXIsIEZhY3RvcnlQcm92aWRlciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE5HWExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21OR1hMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9jdXN0b20tbG9nZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJTkdYTG9nZ2VyQ29uZmlnLCBUT0tFTl9MT0dHRVJfQ09ORklHIH0gZnJvbSAnLi9jb25maWcvaWNvbmZpZyc7XHJcbmltcG9ydCB7IE5HWExvZ2dlck1hcHBlclNlcnZpY2UgfSBmcm9tICcuL21hcHBlci9tYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRPS0VOX0xPR0dFUl9NRVRBREFUQV9TRVJWSUNFIH0gZnJvbSAnLi9tZXRhZGF0YS9pbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE5HWExvZ2dlck1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vbWV0YWRhdGEvbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFRPS0VOX0xPR0dFUl9SVUxFU19TRVJWSUNFIH0gZnJvbSAnLi9ydWxlcy9pcnVsZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IE5HWExvZ2dlclJ1bGVzU2VydmljZSB9IGZyb20gJy4vcnVsZXMvcnVsZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRPS0VOX0xPR0dFUl9NQVBQRVJfU0VSVklDRSB9IGZyb20gJy4vbWFwcGVyL2ltYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5HWExvZ2dlcldyaXRlclNlcnZpY2UgfSBmcm9tICcuL3dyaXRlci93cml0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRPS0VOX0xPR0dFUl9XUklURVJfU0VSVklDRSB9IGZyb20gJy4vd3JpdGVyL2l3cml0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5HWExvZ2dlclNlcnZlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZlci9zZXJ2ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRPS0VOX0xPR0dFUl9TRVJWRVJfU0VSVklDRSB9IGZyb20gJy4vc2VydmVyL2lzZXJ2ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5HWExvZ2dlckNvbmZpZ0VuZ2luZUZhY3RvcnkgfSBmcm9tICcuL2NvbmZpZy9jb25maWctZW5naW5lLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBUT0tFTl9MT0dHRVJfQ09ORklHX0VOR0lORV9GQUNUT1JZIH0gZnJvbSAnLi9jb25maWcvaWNvbmZpZy1lbmdpbmUtZmFjdG9yeSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZVxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dnZXJNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KFxyXG4gICAgY29uZmlnOiBJTkdYTG9nZ2VyQ29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICAgIGN1c3RvbVByb3ZpZGVyPzoge1xyXG4gICAgICBjb25maWdQcm92aWRlcj86IFZhbHVlUHJvdmlkZXIgfCBDbGFzc1Byb3ZpZGVyIHwgQ29uc3RydWN0b3JQcm92aWRlciB8IEV4aXN0aW5nUHJvdmlkZXIgfCBGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICAgIGNvbmZpZ0VuZ2luZUZhY3RvcnlQcm92aWRlcj86IFZhbHVlUHJvdmlkZXIgfCBDbGFzc1Byb3ZpZGVyIHwgQ29uc3RydWN0b3JQcm92aWRlciB8IEV4aXN0aW5nUHJvdmlkZXIgfCBGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICAgIG1ldGFkYXRhUHJvdmlkZXI/OiBWYWx1ZVByb3ZpZGVyIHwgQ2xhc3NQcm92aWRlciB8IENvbnN0cnVjdG9yUHJvdmlkZXIgfCBFeGlzdGluZ1Byb3ZpZGVyIHwgRmFjdG9yeVByb3ZpZGVyLFxyXG4gICAgICBydWxlUHJvdmlkZXI/OiBWYWx1ZVByb3ZpZGVyIHwgQ2xhc3NQcm92aWRlciB8IENvbnN0cnVjdG9yUHJvdmlkZXIgfCBFeGlzdGluZ1Byb3ZpZGVyIHwgRmFjdG9yeVByb3ZpZGVyLFxyXG4gICAgICBtYXBwZXJQcm92aWRlcj86IFZhbHVlUHJvdmlkZXIgfCBDbGFzc1Byb3ZpZGVyIHwgQ29uc3RydWN0b3JQcm92aWRlciB8IEV4aXN0aW5nUHJvdmlkZXIgfCBGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICAgIHdyaXRlclByb3ZpZGVyPzogVmFsdWVQcm92aWRlciB8IENsYXNzUHJvdmlkZXIgfCBDb25zdHJ1Y3RvclByb3ZpZGVyIHwgRXhpc3RpbmdQcm92aWRlciB8IEZhY3RvcnlQcm92aWRlcixcclxuICAgICAgc2VydmVyUHJvdmlkZXI/OiBWYWx1ZVByb3ZpZGVyIHwgQ2xhc3NQcm92aWRlciB8IENvbnN0cnVjdG9yUHJvdmlkZXIgfCBFeGlzdGluZ1Byb3ZpZGVyIHwgRmFjdG9yeVByb3ZpZGVyLFxyXG4gICAgfVxyXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TG9nZ2VyTW9kdWxlPiB7XHJcbiAgICBpZiAoIWN1c3RvbVByb3ZpZGVyKSB7XHJcbiAgICAgIGN1c3RvbVByb3ZpZGVyID0ge31cclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0IGNvbmZpZyBwcm92aWRlclxyXG4gICAgaWYgKCFjdXN0b21Qcm92aWRlci5jb25maWdQcm92aWRlcikge1xyXG4gICAgICBjdXN0b21Qcm92aWRlci5jb25maWdQcm92aWRlciA9IHsgcHJvdmlkZTogVE9LRU5fTE9HR0VSX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB8fCB7fSB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgdGhlIHVzZXIgcHJvdmlkZWQgaXRzIG93biBjb25maWcsIHdlIGp1c3QgbWFrZSBzdXJlIHRoZSBpbmplY3Rpb24gdG9rZW4gaXMgY29ycmVjdFxyXG4gICAgICBpZiAoY3VzdG9tUHJvdmlkZXIuY29uZmlnUHJvdmlkZXIucHJvdmlkZSAhPT0gVE9LRU5fTE9HR0VSX0NPTkZJRykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW5qZWN0aW9uIHRva2VuIGZvciBjb25maWdQcm92aWRlciwgaXQgc2hvdWxkIGJlICR7VE9LRU5fTE9HR0VSX0NPTkZJR30gYW5kIHlvdSB1c2VkICR7Y3VzdG9tUHJvdmlkZXIuY29uZmlnUHJvdmlkZXIucHJvdmlkZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlZmF1bHQgY29uZmlnRW5naW5lIHByb3ZpZGVyXHJcbiAgICBpZiAoIWN1c3RvbVByb3ZpZGVyLmNvbmZpZ0VuZ2luZUZhY3RvcnlQcm92aWRlcikge1xyXG4gICAgICBjdXN0b21Qcm92aWRlci5jb25maWdFbmdpbmVGYWN0b3J5UHJvdmlkZXIgPSB7IHByb3ZpZGU6IFRPS0VOX0xPR0dFUl9DT05GSUdfRU5HSU5FX0ZBQ1RPUlksIHVzZUNsYXNzOiBOR1hMb2dnZXJDb25maWdFbmdpbmVGYWN0b3J5IH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiB0aGUgdXNlciBwcm92aWRlZCBpdHMgb3duIGNvbmZpZ0VuZ2luZUZhY3RvcnksIHdlIGp1c3QgbWFrZSBzdXJlIHRoZSBpbmplY3Rpb24gdG9rZW4gaXMgY29ycmVjdFxyXG4gICAgICBpZiAoY3VzdG9tUHJvdmlkZXIuY29uZmlnRW5naW5lRmFjdG9yeVByb3ZpZGVyLnByb3ZpZGUgIT09IFRPS0VOX0xPR0dFUl9DT05GSUdfRU5HSU5FX0ZBQ1RPUlkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdyb25nIGluamVjdGlvbiB0b2tlbiBmb3IgY29uZmlnRW5naW5lRmFjdG9yeVByb3ZpZGVyLCBpdCBzaG91bGQgYmUgJyR7VE9LRU5fTE9HR0VSX0NPTkZJR19FTkdJTkVfRkFDVE9SWX0nIGFuZCB5b3UgdXNlZCAnJHtjdXN0b21Qcm92aWRlci5jb25maWdFbmdpbmVGYWN0b3J5UHJvdmlkZXIucHJvdmlkZX0nYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0IG1ldGFkYXRhIHByb3ZpZGVyXHJcbiAgICBpZiAoIWN1c3RvbVByb3ZpZGVyLm1ldGFkYXRhUHJvdmlkZXIpIHtcclxuICAgICAgY3VzdG9tUHJvdmlkZXIubWV0YWRhdGFQcm92aWRlciA9IHsgcHJvdmlkZTogVE9LRU5fTE9HR0VSX01FVEFEQVRBX1NFUlZJQ0UsIHVzZUNsYXNzOiBOR1hMb2dnZXJNZXRhZGF0YVNlcnZpY2UgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGl0cyBvd24gbWV0YWRhdGFTZXJ2aWNlLCB3ZSBqdXN0IG1ha2Ugc3VyZSB0aGUgaW5qZWN0aW9uIHRva2VuIGlzIGNvcnJlY3RcclxuICAgICAgaWYgKGN1c3RvbVByb3ZpZGVyLm1ldGFkYXRhUHJvdmlkZXIucHJvdmlkZSAhPT0gVE9LRU5fTE9HR0VSX01FVEFEQVRBX1NFUlZJQ0UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdyb25nIGluamVjdGlvbiB0b2tlbiBmb3IgbWV0YWRhdGFQcm92aWRlciwgaXQgc2hvdWxkIGJlICcke1RPS0VOX0xPR0dFUl9NRVRBREFUQV9TRVJWSUNFfScgYW5kIHlvdSB1c2VkICcke2N1c3RvbVByb3ZpZGVyLm1ldGFkYXRhUHJvdmlkZXIucHJvdmlkZX0nYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0IHJ1bGUgcHJvdmlkZXJcclxuICAgIGlmICghY3VzdG9tUHJvdmlkZXIucnVsZVByb3ZpZGVyKSB7XHJcbiAgICAgIGN1c3RvbVByb3ZpZGVyLnJ1bGVQcm92aWRlciA9IHsgcHJvdmlkZTogVE9LRU5fTE9HR0VSX1JVTEVTX1NFUlZJQ0UsIHVzZUNsYXNzOiBOR1hMb2dnZXJSdWxlc1NlcnZpY2UgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGl0cyBvd24gcnVsZVNlcnZpY2UsIHdlIGp1c3QgbWFrZSBzdXJlIHRoZSBpbmplY3Rpb24gdG9rZW4gaXMgY29ycmVjdFxyXG4gICAgICBpZiAoY3VzdG9tUHJvdmlkZXIucnVsZVByb3ZpZGVyLnByb3ZpZGUgIT09IFRPS0VOX0xPR0dFUl9SVUxFU19TRVJWSUNFKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXcm9uZyBpbmplY3Rpb24gdG9rZW4gZm9yIHJ1bGVQcm92aWRlciwgaXQgc2hvdWxkIGJlICcke1RPS0VOX0xPR0dFUl9SVUxFU19TRVJWSUNFfScgYW5kIHlvdSB1c2VkICcke2N1c3RvbVByb3ZpZGVyLnJ1bGVQcm92aWRlci5wcm92aWRlfSdgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlZmF1bHQgbWFwcGVyIHByb3ZpZGVyXHJcbiAgICBpZiAoIWN1c3RvbVByb3ZpZGVyLm1hcHBlclByb3ZpZGVyKSB7XHJcbiAgICAgIGN1c3RvbVByb3ZpZGVyLm1hcHBlclByb3ZpZGVyID0geyBwcm92aWRlOiBUT0tFTl9MT0dHRVJfTUFQUEVSX1NFUlZJQ0UsIHVzZUNsYXNzOiBOR1hMb2dnZXJNYXBwZXJTZXJ2aWNlIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiB0aGUgdXNlciBwcm92aWRlZCBpdHMgb3duIG1hcHBlclNlcnZpY2UsIHdlIGp1c3QgbWFrZSBzdXJlIHRoZSBpbmplY3Rpb24gdG9rZW4gaXMgY29ycmVjdFxyXG4gICAgICBpZiAoY3VzdG9tUHJvdmlkZXIubWFwcGVyUHJvdmlkZXIucHJvdmlkZSAhPT0gVE9LRU5fTE9HR0VSX01BUFBFUl9TRVJWSUNFKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXcm9uZyBpbmplY3Rpb24gdG9rZW4gZm9yIG1hcHBlclByb3ZpZGVyLCBpdCBzaG91bGQgYmUgJyR7VE9LRU5fTE9HR0VSX01BUFBFUl9TRVJWSUNFfScgYW5kIHlvdSB1c2VkICcke2N1c3RvbVByb3ZpZGVyLm1hcHBlclByb3ZpZGVyLnByb3ZpZGV9J2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVmYXVsdCB3cml0ZXIgcHJvdmlkZXJcclxuICAgIGlmICghY3VzdG9tUHJvdmlkZXIud3JpdGVyUHJvdmlkZXIpIHtcclxuICAgICAgY3VzdG9tUHJvdmlkZXIud3JpdGVyUHJvdmlkZXIgPSB7IHByb3ZpZGU6IFRPS0VOX0xPR0dFUl9XUklURVJfU0VSVklDRSwgdXNlQ2xhc3M6IE5HWExvZ2dlcldyaXRlclNlcnZpY2UgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGl0cyBvd24gd3JpdGVyU2VydmljZSwgd2UganVzdCBtYWtlIHN1cmUgdGhlIGluamVjdGlvbiB0b2tlbiBpcyBjb3JyZWN0XHJcbiAgICAgIGlmIChjdXN0b21Qcm92aWRlci53cml0ZXJQcm92aWRlci5wcm92aWRlICE9PSBUT0tFTl9MT0dHRVJfV1JJVEVSX1NFUlZJQ0UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdyb25nIGluamVjdGlvbiB0b2tlbiBmb3Igd3JpdGVyUHJvdmlkZXIsIGl0IHNob3VsZCBiZSAnJHtUT0tFTl9MT0dHRVJfV1JJVEVSX1NFUlZJQ0V9JyBhbmQgeW91IHVzZWQgJyR7Y3VzdG9tUHJvdmlkZXIud3JpdGVyUHJvdmlkZXIucHJvdmlkZX0nYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0IHNlcnZlciBwcm92aWRlclxyXG4gICAgaWYgKCFjdXN0b21Qcm92aWRlci5zZXJ2ZXJQcm92aWRlcikge1xyXG4gICAgICBjdXN0b21Qcm92aWRlci5zZXJ2ZXJQcm92aWRlciA9IHsgcHJvdmlkZTogVE9LRU5fTE9HR0VSX1NFUlZFUl9TRVJWSUNFLCB1c2VDbGFzczogTkdYTG9nZ2VyU2VydmVyU2VydmljZSB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgdGhlIHVzZXIgcHJvdmlkZWQgaXRzIG93biBzZXJ2ZXJTZXJ2aWNlLCB3ZSBqdXN0IG1ha2Ugc3VyZSB0aGUgaW5qZWN0aW9uIHRva2VuIGlzIGNvcnJlY3RcclxuICAgICAgaWYgKGN1c3RvbVByb3ZpZGVyLnNlcnZlclByb3ZpZGVyLnByb3ZpZGUgIT09IFRPS0VOX0xPR0dFUl9TRVJWRVJfU0VSVklDRSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW5qZWN0aW9uIHRva2VuIGZvciBzZXJ2ZXJQcm92aWRlciwgaXQgc2hvdWxkIGJlICcke1RPS0VOX0xPR0dFUl9TRVJWRVJfU0VSVklDRX0nIGFuZCB5b3UgdXNlZCAnJHtjdXN0b21Qcm92aWRlci53cml0ZXJQcm92aWRlci5wcm92aWRlfSdgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBMb2dnZXJNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE5HWExvZ2dlcixcclxuICAgICAgICBjdXN0b21Qcm92aWRlci5jb25maWdQcm92aWRlcixcclxuICAgICAgICBjdXN0b21Qcm92aWRlci5jb25maWdFbmdpbmVGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICAgICAgY3VzdG9tUHJvdmlkZXIubWV0YWRhdGFQcm92aWRlcixcclxuICAgICAgICBjdXN0b21Qcm92aWRlci5ydWxlUHJvdmlkZXIsXHJcbiAgICAgICAgY3VzdG9tUHJvdmlkZXIubWFwcGVyUHJvdmlkZXIsXHJcbiAgICAgICAgY3VzdG9tUHJvdmlkZXIud3JpdGVyUHJvdmlkZXIsXHJcbiAgICAgICAgY3VzdG9tUHJvdmlkZXIuc2VydmVyUHJvdmlkZXIsXHJcbiAgICAgICAgQ3VzdG9tTkdYTG9nZ2VyU2VydmljZSxcclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmb3JDaGlsZCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPExvZ2dlck1vZHVsZT4ge1xyXG4gICAgLy8gdG9kbyA6IHRoaXMgZm9yQ2hpbGQgaXMgdXNlbGVzcyBmb3Igbm93IGJlY2F1c2Ugbm90aGluZyBpcyBkaWZmZXJlbnQgZnJvbSBmb3JSb290LlxyXG4gICAgLy8gVGhpcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgc28gdGhhdCB1c2VyIGNhbiBjaGFuZ2UgdGhlIHByb3ZpZGVycyBpbiB0aGUgZm9yQ2hpbGRcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBMb2dnZXJNb2R1bGUsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=