ngx-logger
Version:
[](https://www.npmjs.com/package/ngx-logger)
130 lines • 22.5 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 */ /** @nocollapse */ LoggerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: LoggerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
/** @nocollapse */ /** @nocollapse */ LoggerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: LoggerModule, imports: [CommonModule] });
/** @nocollapse */ /** @nocollapse */ LoggerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: LoggerModule, imports: [[
CommonModule
]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: LoggerModule, decorators: [{
type: NgModule,
args: [{
imports: [
CommonModule
],
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbG9nZ2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUE4RixRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBT3JGLE1BQU0s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O29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3FCQUNiO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2xhc3NQcm92aWRlciwgQ29uc3RydWN0b3JQcm92aWRlciwgRXhpc3RpbmdQcm92aWRlciwgRmFjdG9yeVByb3ZpZGVyLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgVmFsdWVQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbU5HWExvZ2dlclNlcnZpY2UgfSBmcm9tICcuL2N1c3RvbS1sb2dnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJDb25maWcsIFRPS0VOX0xPR0dFUl9DT05GSUcgfSBmcm9tICcuL2NvbmZpZy9pY29uZmlnJztcclxuaW1wb3J0IHsgTkdYTG9nZ2VyTWFwcGVyU2VydmljZSB9IGZyb20gJy4vbWFwcGVyL21hcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVE9LRU5fTE9HR0VSX01FVEFEQVRBX1NFUlZJQ0UgfSBmcm9tICcuL21ldGFkYXRhL2ltZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTkdYTG9nZ2VyTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tZXRhZGF0YS9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVE9LRU5fTE9HR0VSX1JVTEVTX1NFUlZJQ0UgfSBmcm9tICcuL3J1bGVzL2lydWxlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTkdYTG9nZ2VyUnVsZXNTZXJ2aWNlIH0gZnJvbSAnLi9ydWxlcy9ydWxlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVE9LRU5fTE9HR0VSX01BUFBFUl9TRVJWSUNFIH0gZnJvbSAnLi9tYXBwZXIvaW1hcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTkdYTG9nZ2VyV3JpdGVyU2VydmljZSB9IGZyb20gJy4vd3JpdGVyL3dyaXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVE9LRU5fTE9HR0VSX1dSSVRFUl9TRVJWSUNFIH0gZnJvbSAnLi93cml0ZXIvaXdyaXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTkdYTG9nZ2VyU2VydmVyU2VydmljZSB9IGZyb20gJy4vc2VydmVyL3NlcnZlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVE9LRU5fTE9HR0VSX1NFUlZFUl9TRVJWSUNFIH0gZnJvbSAnLi9zZXJ2ZXIvaXNlcnZlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTkdYTG9nZ2VyQ29uZmlnRW5naW5lRmFjdG9yeSB9IGZyb20gJy4vY29uZmlnL2NvbmZpZy1lbmdpbmUtZmFjdG9yeSc7XHJcbmltcG9ydCB7IFRPS0VOX0xPR0dFUl9DT05GSUdfRU5HSU5FX0ZBQ1RPUlkgfSBmcm9tICcuL2NvbmZpZy9pY29uZmlnLWVuZ2luZS1mYWN0b3J5JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvZ2dlck1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoXHJcbiAgICBjb25maWc6IElOR1hMb2dnZXJDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgY3VzdG9tUHJvdmlkZXI/OiB7XHJcbiAgICAgIGNvbmZpZ1Byb3ZpZGVyPzogVmFsdWVQcm92aWRlciB8IENsYXNzUHJvdmlkZXIgfCBDb25zdHJ1Y3RvclByb3ZpZGVyIHwgRXhpc3RpbmdQcm92aWRlciB8IEZhY3RvcnlQcm92aWRlcixcclxuICAgICAgY29uZmlnRW5naW5lRmFjdG9yeVByb3ZpZGVyPzogVmFsdWVQcm92aWRlciB8IENsYXNzUHJvdmlkZXIgfCBDb25zdHJ1Y3RvclByb3ZpZGVyIHwgRXhpc3RpbmdQcm92aWRlciB8IEZhY3RvcnlQcm92aWRlcixcclxuICAgICAgbWV0YWRhdGFQcm92aWRlcj86IFZhbHVlUHJvdmlkZXIgfCBDbGFzc1Byb3ZpZGVyIHwgQ29uc3RydWN0b3JQcm92aWRlciB8IEV4aXN0aW5nUHJvdmlkZXIgfCBGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICAgIHJ1bGVQcm92aWRlcj86IFZhbHVlUHJvdmlkZXIgfCBDbGFzc1Byb3ZpZGVyIHwgQ29uc3RydWN0b3JQcm92aWRlciB8IEV4aXN0aW5nUHJvdmlkZXIgfCBGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICAgIG1hcHBlclByb3ZpZGVyPzogVmFsdWVQcm92aWRlciB8IENsYXNzUHJvdmlkZXIgfCBDb25zdHJ1Y3RvclByb3ZpZGVyIHwgRXhpc3RpbmdQcm92aWRlciB8IEZhY3RvcnlQcm92aWRlcixcclxuICAgICAgd3JpdGVyUHJvdmlkZXI/OiBWYWx1ZVByb3ZpZGVyIHwgQ2xhc3NQcm92aWRlciB8IENvbnN0cnVjdG9yUHJvdmlkZXIgfCBFeGlzdGluZ1Byb3ZpZGVyIHwgRmFjdG9yeVByb3ZpZGVyLFxyXG4gICAgICBzZXJ2ZXJQcm92aWRlcj86IFZhbHVlUHJvdmlkZXIgfCBDbGFzc1Byb3ZpZGVyIHwgQ29uc3RydWN0b3JQcm92aWRlciB8IEV4aXN0aW5nUHJvdmlkZXIgfCBGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICB9XHJcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxMb2dnZXJNb2R1bGU+IHtcclxuICAgIGlmICghY3VzdG9tUHJvdmlkZXIpIHtcclxuICAgICAgY3VzdG9tUHJvdmlkZXIgPSB7fVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlZmF1bHQgY29uZmlnIHByb3ZpZGVyXHJcbiAgICBpZiAoIWN1c3RvbVByb3ZpZGVyLmNvbmZpZ1Byb3ZpZGVyKSB7XHJcbiAgICAgIGN1c3RvbVByb3ZpZGVyLmNvbmZpZ1Byb3ZpZGVyID0geyBwcm92aWRlOiBUT0tFTl9MT0dHRVJfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIHx8IHt9IH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiB0aGUgdXNlciBwcm92aWRlZCBpdHMgb3duIGNvbmZpZywgd2UganVzdCBtYWtlIHN1cmUgdGhlIGluamVjdGlvbiB0b2tlbiBpcyBjb3JyZWN0XHJcbiAgICAgIGlmIChjdXN0b21Qcm92aWRlci5jb25maWdQcm92aWRlci5wcm92aWRlICE9PSBUT0tFTl9MT0dHRVJfQ09ORklHKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXcm9uZyBpbmplY3Rpb24gdG9rZW4gZm9yIGNvbmZpZ1Byb3ZpZGVyLCBpdCBzaG91bGQgYmUgJHtUT0tFTl9MT0dHRVJfQ09ORklHfSBhbmQgeW91IHVzZWQgJHtjdXN0b21Qcm92aWRlci5jb25maWdQcm92aWRlci5wcm92aWRlfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVmYXVsdCBjb25maWdFbmdpbmUgcHJvdmlkZXJcclxuICAgIGlmICghY3VzdG9tUHJvdmlkZXIuY29uZmlnRW5naW5lRmFjdG9yeVByb3ZpZGVyKSB7XHJcbiAgICAgIGN1c3RvbVByb3ZpZGVyLmNvbmZpZ0VuZ2luZUZhY3RvcnlQcm92aWRlciA9IHsgcHJvdmlkZTogVE9LRU5fTE9HR0VSX0NPTkZJR19FTkdJTkVfRkFDVE9SWSwgdXNlQ2xhc3M6IE5HWExvZ2dlckNvbmZpZ0VuZ2luZUZhY3RvcnkgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGl0cyBvd24gY29uZmlnRW5naW5lRmFjdG9yeSwgd2UganVzdCBtYWtlIHN1cmUgdGhlIGluamVjdGlvbiB0b2tlbiBpcyBjb3JyZWN0XHJcbiAgICAgIGlmIChjdXN0b21Qcm92aWRlci5jb25maWdFbmdpbmVGYWN0b3J5UHJvdmlkZXIucHJvdmlkZSAhPT0gVE9LRU5fTE9HR0VSX0NPTkZJR19FTkdJTkVfRkFDVE9SWSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW5qZWN0aW9uIHRva2VuIGZvciBjb25maWdFbmdpbmVGYWN0b3J5UHJvdmlkZXIsIGl0IHNob3VsZCBiZSAnJHtUT0tFTl9MT0dHRVJfQ09ORklHX0VOR0lORV9GQUNUT1JZfScgYW5kIHlvdSB1c2VkICcke2N1c3RvbVByb3ZpZGVyLmNvbmZpZ0VuZ2luZUZhY3RvcnlQcm92aWRlci5wcm92aWRlfSdgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlZmF1bHQgbWV0YWRhdGEgcHJvdmlkZXJcclxuICAgIGlmICghY3VzdG9tUHJvdmlkZXIubWV0YWRhdGFQcm92aWRlcikge1xyXG4gICAgICBjdXN0b21Qcm92aWRlci5tZXRhZGF0YVByb3ZpZGVyID0geyBwcm92aWRlOiBUT0tFTl9MT0dHRVJfTUVUQURBVEFfU0VSVklDRSwgdXNlQ2xhc3M6IE5HWExvZ2dlck1ldGFkYXRhU2VydmljZSB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgdGhlIHVzZXIgcHJvdmlkZWQgaXRzIG93biBtZXRhZGF0YVNlcnZpY2UsIHdlIGp1c3QgbWFrZSBzdXJlIHRoZSBpbmplY3Rpb24gdG9rZW4gaXMgY29ycmVjdFxyXG4gICAgICBpZiAoY3VzdG9tUHJvdmlkZXIubWV0YWRhdGFQcm92aWRlci5wcm92aWRlICE9PSBUT0tFTl9MT0dHRVJfTUVUQURBVEFfU0VSVklDRSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW5qZWN0aW9uIHRva2VuIGZvciBtZXRhZGF0YVByb3ZpZGVyLCBpdCBzaG91bGQgYmUgJyR7VE9LRU5fTE9HR0VSX01FVEFEQVRBX1NFUlZJQ0V9JyBhbmQgeW91IHVzZWQgJyR7Y3VzdG9tUHJvdmlkZXIubWV0YWRhdGFQcm92aWRlci5wcm92aWRlfSdgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlZmF1bHQgcnVsZSBwcm92aWRlclxyXG4gICAgaWYgKCFjdXN0b21Qcm92aWRlci5ydWxlUHJvdmlkZXIpIHtcclxuICAgICAgY3VzdG9tUHJvdmlkZXIucnVsZVByb3ZpZGVyID0geyBwcm92aWRlOiBUT0tFTl9MT0dHRVJfUlVMRVNfU0VSVklDRSwgdXNlQ2xhc3M6IE5HWExvZ2dlclJ1bGVzU2VydmljZSB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgdGhlIHVzZXIgcHJvdmlkZWQgaXRzIG93biBydWxlU2VydmljZSwgd2UganVzdCBtYWtlIHN1cmUgdGhlIGluamVjdGlvbiB0b2tlbiBpcyBjb3JyZWN0XHJcbiAgICAgIGlmIChjdXN0b21Qcm92aWRlci5ydWxlUHJvdmlkZXIucHJvdmlkZSAhPT0gVE9LRU5fTE9HR0VSX1JVTEVTX1NFUlZJQ0UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdyb25nIGluamVjdGlvbiB0b2tlbiBmb3IgcnVsZVByb3ZpZGVyLCBpdCBzaG91bGQgYmUgJyR7VE9LRU5fTE9HR0VSX1JVTEVTX1NFUlZJQ0V9JyBhbmQgeW91IHVzZWQgJyR7Y3VzdG9tUHJvdmlkZXIucnVsZVByb3ZpZGVyLnByb3ZpZGV9J2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVmYXVsdCBtYXBwZXIgcHJvdmlkZXJcclxuICAgIGlmICghY3VzdG9tUHJvdmlkZXIubWFwcGVyUHJvdmlkZXIpIHtcclxuICAgICAgY3VzdG9tUHJvdmlkZXIubWFwcGVyUHJvdmlkZXIgPSB7IHByb3ZpZGU6IFRPS0VOX0xPR0dFUl9NQVBQRVJfU0VSVklDRSwgdXNlQ2xhc3M6IE5HWExvZ2dlck1hcHBlclNlcnZpY2UgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGl0cyBvd24gbWFwcGVyU2VydmljZSwgd2UganVzdCBtYWtlIHN1cmUgdGhlIGluamVjdGlvbiB0b2tlbiBpcyBjb3JyZWN0XHJcbiAgICAgIGlmIChjdXN0b21Qcm92aWRlci5tYXBwZXJQcm92aWRlci5wcm92aWRlICE9PSBUT0tFTl9MT0dHRVJfTUFQUEVSX1NFUlZJQ0UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdyb25nIGluamVjdGlvbiB0b2tlbiBmb3IgbWFwcGVyUHJvdmlkZXIsIGl0IHNob3VsZCBiZSAnJHtUT0tFTl9MT0dHRVJfTUFQUEVSX1NFUlZJQ0V9JyBhbmQgeW91IHVzZWQgJyR7Y3VzdG9tUHJvdmlkZXIubWFwcGVyUHJvdmlkZXIucHJvdmlkZX0nYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0IHdyaXRlciBwcm92aWRlclxyXG4gICAgaWYgKCFjdXN0b21Qcm92aWRlci53cml0ZXJQcm92aWRlcikge1xyXG4gICAgICBjdXN0b21Qcm92aWRlci53cml0ZXJQcm92aWRlciA9IHsgcHJvdmlkZTogVE9LRU5fTE9HR0VSX1dSSVRFUl9TRVJWSUNFLCB1c2VDbGFzczogTkdYTG9nZ2VyV3JpdGVyU2VydmljZSB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgdGhlIHVzZXIgcHJvdmlkZWQgaXRzIG93biB3cml0ZXJTZXJ2aWNlLCB3ZSBqdXN0IG1ha2Ugc3VyZSB0aGUgaW5qZWN0aW9uIHRva2VuIGlzIGNvcnJlY3RcclxuICAgICAgaWYgKGN1c3RvbVByb3ZpZGVyLndyaXRlclByb3ZpZGVyLnByb3ZpZGUgIT09IFRPS0VOX0xPR0dFUl9XUklURVJfU0VSVklDRSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW5qZWN0aW9uIHRva2VuIGZvciB3cml0ZXJQcm92aWRlciwgaXQgc2hvdWxkIGJlICcke1RPS0VOX0xPR0dFUl9XUklURVJfU0VSVklDRX0nIGFuZCB5b3UgdXNlZCAnJHtjdXN0b21Qcm92aWRlci53cml0ZXJQcm92aWRlci5wcm92aWRlfSdgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVyXHJcbiAgICBpZiAoIWN1c3RvbVByb3ZpZGVyLnNlcnZlclByb3ZpZGVyKSB7XHJcbiAgICAgIGN1c3RvbVByb3ZpZGVyLnNlcnZlclByb3ZpZGVyID0geyBwcm92aWRlOiBUT0tFTl9MT0dHRVJfU0VSVkVSX1NFUlZJQ0UsIHVzZUNsYXNzOiBOR1hMb2dnZXJTZXJ2ZXJTZXJ2aWNlIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiB0aGUgdXNlciBwcm92aWRlZCBpdHMgb3duIHNlcnZlclNlcnZpY2UsIHdlIGp1c3QgbWFrZSBzdXJlIHRoZSBpbmplY3Rpb24gdG9rZW4gaXMgY29ycmVjdFxyXG4gICAgICBpZiAoY3VzdG9tUHJvdmlkZXIuc2VydmVyUHJvdmlkZXIucHJvdmlkZSAhPT0gVE9LRU5fTE9HR0VSX1NFUlZFUl9TRVJWSUNFKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXcm9uZyBpbmplY3Rpb24gdG9rZW4gZm9yIHNlcnZlclByb3ZpZGVyLCBpdCBzaG91bGQgYmUgJyR7VE9LRU5fTE9HR0VSX1NFUlZFUl9TRVJWSUNFfScgYW5kIHlvdSB1c2VkICcke2N1c3RvbVByb3ZpZGVyLndyaXRlclByb3ZpZGVyLnByb3ZpZGV9J2ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IExvZ2dlck1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgTkdYTG9nZ2VyLFxyXG4gICAgICAgIGN1c3RvbVByb3ZpZGVyLmNvbmZpZ1Byb3ZpZGVyLFxyXG4gICAgICAgIGN1c3RvbVByb3ZpZGVyLmNvbmZpZ0VuZ2luZUZhY3RvcnlQcm92aWRlcixcclxuICAgICAgICBjdXN0b21Qcm92aWRlci5tZXRhZGF0YVByb3ZpZGVyLFxyXG4gICAgICAgIGN1c3RvbVByb3ZpZGVyLnJ1bGVQcm92aWRlcixcclxuICAgICAgICBjdXN0b21Qcm92aWRlci5tYXBwZXJQcm92aWRlcixcclxuICAgICAgICBjdXN0b21Qcm92aWRlci53cml0ZXJQcm92aWRlcixcclxuICAgICAgICBjdXN0b21Qcm92aWRlci5zZXJ2ZXJQcm92aWRlcixcclxuICAgICAgICBDdXN0b21OR1hMb2dnZXJTZXJ2aWNlLFxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZvckNoaWxkKCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TG9nZ2VyTW9kdWxlPiB7XHJcbiAgICAvLyB0b2RvIDogdGhpcyBmb3JDaGlsZCBpcyB1c2VsZXNzIGZvciBub3cgYmVjYXVzZSBub3RoaW5nIGlzIGRpZmZlcmVudCBmcm9tIGZvclJvb3QuXHJcbiAgICAvLyBUaGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBzbyB0aGF0IHVzZXIgY2FuIGNoYW5nZSB0aGUgcHJvdmlkZXJzIGluIHRoZSBmb3JDaGlsZFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IExvZ2dlck1vZHVsZSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==