diff --git a/src/app/AppComponent.ts b/src/app/AppComponent.ts
index 04ad8d8..4567671 100644
--- a/src/app/AppComponent.ts
+++ b/src/app/AppComponent.ts
@@ -19,13 +19,13 @@
 /**
  * @file App Components
  */
+import { isNullOrUndefined } from 'util';
 import { Component, HostListener, Injector } from '@angular/core';
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
 import { DEFAULT_INTERRUPTSOURCES, Idle } from '@ng-idle/core';
 import { AuthenticationService } from 'AuthenticationService';
 import { DeviceCheckService } from 'DeviceCheckService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
diff --git a/src/app/AppModule.ts b/src/app/AppModule.ts
index 5244bb2..8a4ebaf 100644
--- a/src/app/AppModule.ts
+++ b/src/app/AppModule.ts
@@ -25,44 +25,34 @@
 import { BrowserModule } from '@angular/platform-browser';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { RouterModule } from '@angular/router';
+import { CodemirrorModule } from '@ctrl/ngx-codemirror';
 import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
+import { NgIdleKeepaliveModule } from '@ng-idle/keepalive';
+import { NgSelectModule } from '@ng-select/ng-select';
 import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
 import { TranslateHttpLoader } from '@ngx-translate/http-loader';
 import { NotifierModule, NotifierOptions } from 'angular-notifier';
-import { AuthInterceptorService } from 'AuthInterceptorService';
-import { HeaderComponent } from 'HeaderComponent';
-import { LayoutComponent } from 'LayoutComponent';
-import { Ng2SmartTableModule } from 'ng2-smart-table';
-import { RestService } from 'RestService';
-import { SidebarComponent } from 'SidebarComponent';
-import { AppComponent } from './AppComponent';
-
-import { appRoutes } from './approutes.module';
-
-import { DataService } from 'DataService';
-import { ProjectService } from 'ProjectService';
-import { SharedService } from 'SharedService';
-
-import { CodemirrorModule } from '@ctrl/ngx-codemirror';
-import { NgSelectModule } from '@ng-select/ng-select';
-
-import { NgIdleKeepaliveModule } from '@ng-idle/keepalive';
 import { AuthenticationService } from 'AuthenticationService';
 import { AuthGuardService } from 'AuthGuardService';
+import { AuthInterceptorService } from 'AuthInterceptorService';
 import { BreadcrumbComponent } from 'BreadCrumb';
 import { ChangePasswordComponent } from 'ChangePasswordComponent';
 import { ChangePasswordModule } from 'ChangePasswordModule';
 import { ComposePackages } from 'ComposePackages';
 import { ConfirmationTopologyComponent } from 'ConfirmationTopology';
+import { DataService } from 'DataService';
 import { DeleteComponent } from 'DeleteComponent';
 import { DeviceCheckService } from 'DeviceCheckService';
 import { GoToTopDirective } from 'GoToTopDirective';
+import { HeaderComponent } from 'HeaderComponent';
 import { InstantiateNetSliceTemplateComponent } from 'InstantiateNetSliceTemplate';
 import { InstantiateNsComponent } from 'InstantiateNs';
+import { LayoutComponent } from 'LayoutComponent';
 import { LoaderModule } from 'LoaderModule';
 import { LoginComponent } from 'LoginComponent';
 import { NetsliceInstancesActionComponent } from 'NetsliceInstancesActionComponent';
 import { NetslicePackagesActionComponent } from 'NetslicePackagesAction';
+import { Ng2SmartTableModule } from 'ng2-smart-table';
 import { NSInstancesActionComponent } from 'NSInstancesActionComponent';
 import { NsPackagesActionComponent } from 'NsPackagesAction';
 import { NsUpdateComponent } from 'NsUpdateComponent';
@@ -70,10 +60,14 @@
 import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
 import { ProjectLinkComponent } from 'ProjectLinkComponent';
 import { ProjectsActionComponent } from 'ProjectsAction';
+import { ProjectService } from 'ProjectService';
+import { RestService } from 'RestService';
 import { ScalingComponent } from 'ScalingComponent';
 import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
 import { SharedModule } from 'SharedModule';
+import { SharedService } from 'SharedService';
 import { ShowInfoComponent } from 'ShowInfoComponent';
+import { SidebarComponent } from 'SidebarComponent';
 import { StartStopRebuildComponent } from 'StartStopRebuildComponent';
 import { SwitchProjectComponent } from 'SwitchProjectComponent';
 import { UsersActionComponent } from 'UsersActionComponent';
@@ -86,6 +80,8 @@
 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
 import { WarningComponent } from 'WarningComponent';
 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
+import { AppComponent } from './AppComponent';
+import { appRoutes } from './approutes.module';
 
 /**
  * Custom angular notifier options
@@ -185,39 +181,7 @@
         SharedService,
         DeviceCheckService
     ],
-    bootstrap: [AppComponent],
-    entryComponents: [
-        VNFPackagesActionComponent,
-        NsPackagesActionComponent,
-        NSInstancesActionComponent,
-        VNFInstancesActionComponent,
-        VNFLinkComponent,
-        NetsliceInstancesActionComponent,
-        BreadcrumbComponent,
-        DeleteComponent,
-        NetslicePackagesActionComponent,
-        UsersActionComponent,
-        VimAccountsActionComponent,
-        ProjectsActionComponent,
-        ProjectLinkComponent,
-        UserSettingsComponent,
-        ShowInfoComponent,
-        InstantiateNetSliceTemplateComponent,
-        InstantiateNsComponent,
-        ConfirmationTopologyComponent,
-        ComposePackages,
-        WIMAccountsActionComponent,
-        PDUInstancesActionComponent,
-        SDNControllerActionComponent,
-        SwitchProjectComponent,
-        ScalingComponent,
-        ChangePasswordComponent,
-        VmMigrationComponent,
-        NsUpdateComponent,
-        WarningComponent,
-        StartStopRebuildComponent,
-        VerticalScalingComponent
-    ]
+    bootstrap: [AppComponent]
 })
 
 /** Exporting a class @exports AppModule */
@@ -229,7 +193,7 @@
 /**
  * HttpLoaderFactory is for translate service of the application.
  */
-// tslint:disable:function-name
+/* eslint-disable  */
 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
     const now: number = new Date().getTime();
     return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
@@ -237,9 +201,8 @@
 /**
  * HttpLoaderFactory is for translate service of the application.
  */
-// tslint:disable:function-name
 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
-    // tslint:disable-next-line: no-any
+    // eslint-disable-next-line @typescript-eslint/no-explicit-any
     return async (): Promise<any> => {
         await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
         translate.setDefaultLang('en');
diff --git a/src/app/approutes.module.ts b/src/app/approutes.module.ts
index e75416e..537dc94 100644
--- a/src/app/approutes.module.ts
+++ b/src/app/approutes.module.ts
@@ -15,6 +15,7 @@
 
  Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
 */
+/* eslint-disable @typescript-eslint/no-explicit-any */
 /**
  * @file Routing Module
  */
@@ -38,77 +39,77 @@
         children: [
             {
                 path: '',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./dashboard/DashboardModule')
                     .then((m: typeof import('./dashboard/DashboardModule')) => m.DashboardModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'packages',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./packages/PackagesModule')
                     .then((m: typeof import('./packages/PackagesModule')) => m.PackagesModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'instances',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./instances/InstancesModule')
                     .then((m: typeof import('./instances/InstancesModule')) => m.InstancesModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'vim',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./vim-accounts/VimAccountsModule')
                     .then((m: typeof import('./vim-accounts/VimAccountsModule')) => m.VimAccountsModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'wim',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./wim-accounts/WIMAccountsModule')
                     .then((m: typeof import('./wim-accounts/WIMAccountsModule')) => m.WIMAccountsModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'sdn',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./sdn-controller/SDNControllerModule')
                     .then((m: typeof import('./sdn-controller/SDNControllerModule')) => m.SDNControllerModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'users',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./users/UsersModule')
                     .then((m: typeof import('./users/UsersModule')) => m.UsersModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'projects',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./projects/ProjectsModule')
                     .then((m: typeof import('./projects/ProjectsModule')) => m.ProjectsModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'roles',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./roles/RolesModule')
                     .then((m: typeof import('./roles/RolesModule')) => m.RolesModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'k8s',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./k8s/K8sModule')
                     .then((m: typeof import('./k8s/K8sModule')) => m.K8sModule),
                 canActivate: [AuthGuardService]
             },
             {
                 path: 'repos',
-                // tslint:disable-next-line: no-any
+                // eslint-disable-next-line node/no-unsupported-features/es-syntax
                 loadChildren: async (): Promise<any> => import('./osm-repositories/OsmRepositoriesModule')
                     .then((m: typeof import('./osm-repositories/OsmRepositoriesModule')) => m.OsmRepositoriesModule),
                 canActivate: [AuthGuardService]
diff --git a/src/app/dashboard/DashboardComponent.ts b/src/app/dashboard/DashboardComponent.ts
index b3e48e4..23e928f 100644
--- a/src/app/dashboard/DashboardComponent.ts
+++ b/src/app/dashboard/DashboardComponent.ts
@@ -18,12 +18,14 @@
 /**
  * @file Dashboard Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnInit } from '@angular/core';
 import { TranslateService } from '@ngx-translate/core';
 import { NotifierService } from 'angular-notifier';
 import { AuthenticationService } from 'AuthenticationService';
-import { Chart } from 'chart.js';
-import 'chartjs-plugin-labels';
+import { Chart, ChartType, LineController, LineElement, PointElement, LinearScale, Title, ChartEvent, ActiveElement } from 'chart.js';
+import ChartDataLabels from 'chartjs-plugin-datalabels';
+Chart.register(LineController, LineElement, PointElement, LinearScale, Title, ChartDataLabels);
 import { ERRORDATA, TYPESECTION, VIM_TYPES } from 'CommonModel';
 import { environment } from 'environment';
 import { NSDDetails } from 'NSDModel';
@@ -35,7 +37,6 @@
 import { SDNControllerModel } from 'SDNControllerModel';
 import { SharedService } from 'SharedService';
 import { ProjectRoleMappings, UserDetail } from 'UserModel';
-import { isNullOrUndefined } from 'util';
 import { VimAccountDetails } from 'VimAccountModel';
 import { VNFInstanceDetails } from 'VNFInstanceModel';
 
@@ -172,12 +173,15 @@
     private createdTimes: string[] = [];
 
     /** Contains slice limit const @private */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     private sliceLimit: number = 10;
 
     /** Contians hour converter @private */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     private hourConverter: number = 3600;
 
     /** Converter used to round off time to one decimal point @private */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     private converter: number = 10;
 
     /** Notifier service to popup notification @private */
@@ -321,7 +325,7 @@
     /** Prepare and sketch NS instance chart */
     public drawNsChart(): void {
         this.charts = new Chart('canvas', {
-            type: 'bar',
+            type: 'bar' as ChartType,
             data: {
                 labels: this.nsRunningInstance,
                 datasets: [{
@@ -329,46 +333,48 @@
                     label: this.translateService.instant('NOOFHOURS'),
                     borderColor: this.backgroundColor,
                     fill: false,
-                    backgroundColor: this.backgroundColor
+                    backgroundColor: this.backgroundColor,
+                    hoverBackgroundColor: this.backgroundColor
                 }]
             },
             options: {
                 layout: {
                     padding: {
-                        top: 20
+                        top: 25
                     }
                 },
-                hover: {
-                    onHover(evt: Event, item: {}): void {
-                        const el: HTMLElement = document.getElementById('canvas');
-                        el.style.cursor = item[0] ? 'pointer' : 'default';
-                    }
+                animation: false,
+                // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
+                onHover(event: ChartEvent, item: ActiveElement[], chart: Chart): void {
+                    const el: HTMLElement = document.getElementById('canvas');
+                    el.style.cursor = item[0] ? 'pointer' : 'default';
                 },
                 plugins: {
-                    labels: {
-                        // render 'label', 'value', 'percentage', 'image' or custom function, default is 'percentage'
-                        render: 'value'
+                    legend: { display: false },
+                    datalabels: {
+                        anchor: 'end',
+                        align: 'top',
+                        font: {
+                            weight: 'bold'
+                        }
                     }
                 },
-                legend: { display: false },
                 scales: {
-                    xAxes: [{
+                    x: {
                         display: true,
-                        scaleLabel: {
+                        title: {
                             display: true,
-                            labelString: this.translateService.instant('NSINSTANCES')
+                            text: this.translateService.instant('NSINSTANCES')
                         }
-                    }],
-                    yAxes: [{
-                        ticks: {
-                            beginAtZero: true
-                        },
+                    },
+                    y: {
+                        beginAtZero: true,
                         display: true,
-                        scaleLabel: {
+                        title: {
                             display: true,
-                            labelString: this.translateService.instant('NOOFHOURS')
+                            text: this.translateService.instant('NOOFHOURS')
                         }
-                    }]
+                    }
                 }
             }
         });
@@ -412,7 +418,6 @@
         if (this.vimList.length === 0) {
             this.vimListData = null;
         }
-
     }
 
     /** Get Selected VIM details @public */
diff --git a/src/app/dashboard/DashboardModule.ts b/src/app/dashboard/DashboardModule.ts
index 82b27c0..19aae28 100644
--- a/src/app/dashboard/DashboardModule.ts
+++ b/src/app/dashboard/DashboardModule.ts
@@ -30,7 +30,7 @@
 import { TranslateModule } from '@ngx-translate/core';
 import { DashboardComponent } from 'DashboardComponent';
 import { LoaderModule } from 'LoaderModule';
-import { ChartsModule } from 'ng2-charts';
+import { NgChartsModule } from 'ng2-charts';
 import { SharedModule } from 'SharedModule';
 
 /** To halndle project information */
@@ -53,7 +53,7 @@
  */
 @NgModule({
     imports: [FormsModule, CommonModule, HttpClientModule, FlexLayoutModule, TranslateModule, NgSelectModule,
-        ChartsModule, RouterModule.forChild(routes), NgbModule, LoaderModule, SharedModule],
+        NgChartsModule, RouterModule.forChild(routes), NgbModule, LoaderModule, SharedModule],
     declarations: [DashboardComponent]
 })
 /** Exporting a class @exports DashboardModule */
diff --git a/src/app/instances/InstancesComponent.ts b/src/app/instances/InstancesComponent.ts
index fe46d8c..4186078 100644
--- a/src/app/instances/InstancesComponent.ts
+++ b/src/app/instances/InstancesComponent.ts
@@ -49,7 +49,9 @@
     /** Return to list NS Package List */
     public redirectToList(getURL: string): void {
         if (getURL === '/instances') {
-            this.router.navigate(['/instances/ns']).catch();
+            this.router.navigate(['/instances/ns']).catch((): void => {
+                // Catch Navigation Error
+            });
         }
     }
 }
diff --git a/src/app/instances/InstancesModule.ts b/src/app/instances/InstancesModule.ts
index 18c733c..0d41509 100644
--- a/src/app/instances/InstancesModule.ts
+++ b/src/app/instances/InstancesModule.ts
@@ -138,23 +138,14 @@
         NetsliceInstancesComponent, HistoryOperationsComponent, NSTopologyComponent, NSPrimitiveComponent, OperationalViewComponent,
         OperationalViewAppConfigsComponent, OperationalViewAppActionsComponent, OperationalViewAppExecutedActionsComponent],
     schemas: [CUSTOM_ELEMENTS_SCHEMA],
-    providers: [DataService],
-    entryComponents: [
-        NSPrimitiveComponent,
-        AddPDUInstancesComponent,
-        OperationalViewAppConfigsComponent,
-        OperationalViewAppActionsComponent,
-        OperationalViewAppExecutedActionsComponent
-    ]
+    providers: [DataService]
 })
 /** Exporting a class @exports InstancesModule */
 export class InstancesModule {
-    /** Resolves state-less class */
-    private instancesModule: string;
     /**
      * Lifecyle Hooks the trigger before component is instantiate
      */
-    public ngOnInit(): void {
-        this.instancesModule = '';
-    }
+     constructor() {
+        //Empty
+      }
 }
diff --git a/src/app/instances/netslice-instances/NetsliceInstancesComponent.ts b/src/app/instances/netslice-instances/NetsliceInstancesComponent.ts
index 3b9564a..e04fc20 100644
--- a/src/app/instances/netslice-instances/NetsliceInstancesComponent.ts
+++ b/src/app/instances/netslice-instances/NetsliceInstancesComponent.ts
@@ -138,12 +138,15 @@
 
     /** Instantiate Net Slice using modalservice @public */
     public instantiateNetSlice(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(InstantiateNetSliceTemplateComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.generateData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** Generate smart table row title and filters @public  */
@@ -267,7 +270,9 @@
             }
             this.dataSource.load(this.nstInstanceData).then((data: {}) => {
                 this.isLoadingResults = false;
-            }).catch();
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA) => {
             this.restService.handleError(error, 'get');
             this.isLoadingResults = false;
diff --git a/src/app/instances/ns-history-operations/HistoryOperationsComponent.ts b/src/app/instances/ns-history-operations/HistoryOperationsComponent.ts
index 7f268d1..afbefdb 100644
--- a/src/app/instances/ns-history-operations/HistoryOperationsComponent.ts
+++ b/src/app/instances/ns-history-operations/HistoryOperationsComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file NS History Of Operations Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnInit } from '@angular/core';
 import { ActivatedRoute } from '@angular/router';
 import { Router } from '@angular/router';
@@ -33,7 +34,6 @@
 import { Subscription } from 'rxjs';
 import { SharedService } from 'SharedService';
 import { ShowInfoComponent } from 'ShowInfoComponent';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -130,9 +130,7 @@
 
   /** Lifecyle Hooks the trigger before component is instantiate @public */
   public ngOnInit(): void {
-    // tslint:disable-next-line:no-backbone-get-set-outside-model
     this.paramsID = this.activatedRoute.snapshot.paramMap.get('id');
-    // tslint:disable-next-line:no-backbone-get-set-outside-model
     this.paramsType = this.activatedRoute.snapshot.paramMap.get('type');
     if (this.paramsType === 'ns') {
       this.historyURL = environment.NSHISTORYOPERATIONS_URL + '/?nsInstanceId=' + this.paramsID;
@@ -215,6 +213,7 @@
   }
   /** show information methods modal with ns history info */
   public showInformation(event: MessageEvent): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     this.modalService.open(ShowInfoComponent, { backdrop: 'static' }).componentInstance.params = {
       id: event.data.id,
       page: this.page,
@@ -256,12 +255,16 @@
       }
       this.dataSource.load(this.nsAndnstInstanceData).then((data: {}): void => {
         //empty block
-      }).catch();
+      }).catch((): void => {
+        // Catch Navigation Error
+    });
       this.isLoadingResults = false;
     }, (error: ERRORDATA): void => {
       this.isLoadingResults = false;
       if (error.error.status === HttpStatus.NOT_FOUND || error.error.status === HttpStatus.UNAUTHORIZED) {
-        this.router.navigateByUrl('404', { skipLocationChange: true }).catch();
+        this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
+          // Catch Navigation Error
+      });
       } else {
         this.restService.handleError(error, 'get');
       }
diff --git a/src/app/instances/ns-instances/NSInstancesComponent.ts b/src/app/instances/ns-instances/NSInstancesComponent.ts
index c44fa9b..5cc5519 100644
--- a/src/app/instances/ns-instances/NSInstancesComponent.ts
+++ b/src/app/instances/ns-instances/NSInstancesComponent.ts
@@ -255,7 +255,9 @@
             }
             this.dataSource.load(this.nsInstanceData).then((data: {}): void => {
                 this.isLoadingResults = false;
-            }).catch();
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA): void => {
             this.restService.handleError(error, 'get');
             this.isLoadingResults = false;
@@ -275,12 +277,15 @@
 
     /** Instantiate NS using modalservice @public */
     public instantiateNS(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(InstantiateNsComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA): void => {
             if (result) {
                 this.generateData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /**
diff --git a/src/app/instances/ns-primitive/NSPrimitiveComponent.ts b/src/app/instances/ns-primitive/NSPrimitiveComponent.ts
index bcce057..8f39a20 100644
--- a/src/app/instances/ns-primitive/NSPrimitiveComponent.ts
+++ b/src/app/instances/ns-primitive/NSPrimitiveComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file NS Instance Primitive Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
@@ -30,7 +31,6 @@
 import { NSPrimitiveParams } from 'NSInstanceModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { CONFIGPRIMITIVE, DF, VDUCONFIG, VDUPROFILE, VNFCONFIG, VNFD } from 'VNFDModel';
 import { VNFInstanceDetails } from 'VNFInstanceModel';
 
@@ -217,19 +217,19 @@
             primitive_params: this.objectPrimitiveParams
         };
         if (this.primitiveType === 'VNF_Primitive') {
-            // tslint:disable-next-line: no-string-literal
+            // eslint-disable-next-line @typescript-eslint/dot-notation
             primitiveParamsPayLoads['member_vnf_index'] = this.primitiveForm.value.member_vnf_index;
         }
         if (this.primitiveType === 'VDU_Primitive') {
-            // tslint:disable-next-line: no-string-literal
+            // eslint-disable-next-line @typescript-eslint/dot-notation
             primitiveParamsPayLoads['member_vnf_index'] = this.primitiveForm.value.member_vnf_index;
-            // tslint:disable-next-line: no-string-literal
+            // eslint-disable-next-line @typescript-eslint/dot-notation
             primitiveParamsPayLoads['vdu_id'] = this.primitiveForm.value.vdu_id;
         }
         if (this.primitiveType === 'KDU_Primitive') {
-            // tslint:disable-next-line: no-string-literal
+            // eslint-disable-next-line @typescript-eslint/dot-notation
             primitiveParamsPayLoads['member_vnf_index'] = this.primitiveForm.value.member_vnf_index;
-            // tslint:disable-next-line: no-string-literal
+            // eslint-disable-next-line @typescript-eslint/dot-notation
             primitiveParamsPayLoads['kdu_name'] = this.primitiveForm.value.kdu_name;
         }
         const apiURLHeader: APIURLHEADER = {
@@ -439,6 +439,7 @@
     }
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.primitiveForm.controls[controlName];
     }
 }
diff --git a/src/app/instances/ns-topology/NSTopologyComponent.ts b/src/app/instances/ns-topology/NSTopologyComponent.ts
index 668f251..8981e26 100644
--- a/src/app/instances/ns-topology/NSTopologyComponent.ts
+++ b/src/app/instances/ns-topology/NSTopologyComponent.ts
@@ -18,7 +18,7 @@
 /**
  * @file NS Topology Component
  */
-/* tslint:disable:no-increment-decrement */
+/* eslint-disable */
 import { Component, ElementRef, Injector, ViewChild, ViewEncapsulation } from '@angular/core';
 import { ActivatedRoute } from '@angular/router';
 import { Router } from '@angular/router';
@@ -87,22 +87,22 @@
   /** Holds the NS Id @private */
   private nsIdentifier: string;
   /** Contains SVG attributes @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private svg: any;
   /** Contains forced node animations @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private force: any;
   /** Contains path information of the node */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private path: any;
   /** Contains node network @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private network: any;
   /** Contains node square @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private square: any;
   /** Contains node circle @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private circle: any;
   /** Contains the NS information @private */
   private nsData: NSInstanceDetails;
@@ -123,13 +123,13 @@
   /** Set timeout @private */
   private TIMEOUT: number = 2000;
   /** Rendered nodes represent vnf @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gSquare: any;
   /** Rendered nodes represent network @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gNetwork: any;
   /** Rendered nodes represent network @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gCircle: any;
   /** Service holds the router information @private */
   private router: Router;
@@ -146,7 +146,6 @@
    * Lifecyle Hooks the trigger before component is instantiate @public
    */
   public ngOnInit(): void {
-    // tslint:disable-next-line:no-backbone-get-set-outside-model
     this.nsIdentifier = this.activatedRoute.snapshot.paramMap.get('id');
     this.generateData();
   }
@@ -238,7 +237,9 @@
       }, (error: ERRORDATA): void => {
         this.isLoadingResults = false;
         if (error.error.status === HttpStatus.NOT_FOUND || error.error.status === HttpStatus.UNAUTHORIZED) {
-          this.router.navigateByUrl('404', { skipLocationChange: true }).catch();
+          this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
+            // Catch Navigation Error
+        });
         } else {
           this.restService.handleError(error, 'get');
         }
@@ -411,7 +412,7 @@
     this.square.exit().remove();
     this.network.exit().remove();
     this.circle.exit().remove();
-    // tslint:disable-next-line:no-any
+    // eslint-disable-next-line @typescript-eslint/no-explicit-any
     const gPath: any = this.path.enter().append('svg:path').attr('class', 'link');
     this.getgSquare();
     this.getgNetwork();
@@ -422,12 +423,12 @@
     this.circle = this.gCircle.merge(this.circle);
   }
   /** Events handles when Shift Click to perform create cp @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private singleClick(nodeSelected: any, d: COMPOSERNODES): void {
     this.selectNodeExclusive(nodeSelected, d);
   }
   /** Selected nodes @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private selectNodeExclusive(nodeSelected: any, d: COMPOSERNODES): void {
     const alreadyIsActive: boolean = nodeSelected.select('#' + d.selectorId).classed(this.activeClass);
     this.deselectAllNodes();
@@ -513,7 +514,7 @@
       .text((d: COMPOSERNODES): string => d.name);
   }
   /** drag event @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private onDragDrop(): any {
     return d3.drag().filter(this.dragFilter)
       .on('start', this.dragstarted)
diff --git a/src/app/instances/pdu-instances/PDUInstancesComponent.ts b/src/app/instances/pdu-instances/PDUInstancesComponent.ts
index 20b44df..5c25279 100644
--- a/src/app/instances/pdu-instances/PDUInstancesComponent.ts
+++ b/src/app/instances/pdu-instances/PDUInstancesComponent.ts
@@ -159,7 +159,9 @@
             }
             this.dataSource.load(this.pduInstanceData).then((data: {}) => {
                 this.isLoadingResults = false;
-            }).catch();
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA) => {
             this.restService.handleError(error, 'get');
             this.isLoadingResults = false;
@@ -179,13 +181,16 @@
 
     /** Add PDU Instance modal using modalservice @public */
     public addPDUInstanceModal(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(AddPDUInstancesComponent, { backdrop: 'static' });
         modalRef.componentInstance.title = this.translateService.instant('PAGE.PDUINSTANCE.NEWPDUINSTANCE');
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.generateData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /**
diff --git a/src/app/instances/pdu-instances/add-pdu-instances/AddPDUInstancesComponent.ts b/src/app/instances/pdu-instances/add-pdu-instances/AddPDUInstancesComponent.ts
index 644b83d..2efe244 100644
--- a/src/app/instances/pdu-instances/add-pdu-instances/AddPDUInstancesComponent.ts
+++ b/src/app/instances/pdu-instances/add-pdu-instances/AddPDUInstancesComponent.ts
@@ -145,13 +145,11 @@
 
     /** Handle FormArray Controls @public */
     public getControls(): AbstractControl[] {
-        // tslint:disable-next-line:no-backbone-get-set-outside-model
         return (this.pduInstancesForm.get('interfaces') as FormArray).controls;
     }
 
     /** Push all primitive params on user's action @public */
     public createInterfaces(): void {
-        // tslint:disable-next-line:no-backbone-get-set-outside-model
         this.pduInterfaces = this.pduInstancesForm.get('interfaces') as FormArray;
         this.pduInterfaces.push(this.interfacesBuilder());
     }
diff --git a/src/app/instances/vnf-instances/VNFInstancesComponent.ts b/src/app/instances/vnf-instances/VNFInstancesComponent.ts
index fdfe9fa..90bb6fe 100644
--- a/src/app/instances/vnf-instances/VNFInstancesComponent.ts
+++ b/src/app/instances/vnf-instances/VNFInstancesComponent.ts
@@ -160,7 +160,9 @@
             }
             this.dataSource.load(this.vnfInstanceData).then((data: {}) => {
                 this.isLoadingResults = false;
-            }).catch();
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA) => {
             this.restService.handleError(error, 'get');
             this.isLoadingResults = false;
diff --git a/src/app/instances/vnf-instances/vnf-link/VNFLinkComponent.ts b/src/app/instances/vnf-instances/vnf-link/VNFLinkComponent.ts
index 15ea6ff..b582774 100644
--- a/src/app/instances/vnf-instances/vnf-link/VNFLinkComponent.ts
+++ b/src/app/instances/vnf-instances/vnf-link/VNFLinkComponent.ts
@@ -42,5 +42,4 @@
   public ngOnInit(): void {
     //empty
   }
-
 }
diff --git a/src/app/k8s/K8sComponent.ts b/src/app/k8s/K8sComponent.ts
index 5427a8f..07aa901 100644
--- a/src/app/k8s/K8sComponent.ts
+++ b/src/app/k8s/K8sComponent.ts
@@ -49,8 +49,9 @@
   /** Return to list NS Package List */
   public redirectToList(getURL: string): void {
     if (getURL === '/k8s') {
-      this.router.navigate(['/k8s/cluster']).catch();
+      this.router.navigate(['/k8s/cluster']).catch((): void => {
+        // Catch Navigation Error
+    });
     }
   }
-
 }
diff --git a/src/app/k8s/K8sModule.ts b/src/app/k8s/K8sModule.ts
index 51f27b2..14d8165 100644
--- a/src/app/k8s/K8sModule.ts
+++ b/src/app/k8s/K8sModule.ts
@@ -96,8 +96,7 @@
     K8sAddRepoComponent
   ],
   providers: [DataService],
-  schemas: [CUSTOM_ELEMENTS_SCHEMA],
-  entryComponents: [K8sActionComponent, K8sAddClusterComponent, K8sAddRepoComponent]
+  schemas: [CUSTOM_ELEMENTS_SCHEMA]
 })
 /** Exporting a class @exports K8sModule */
 export class K8sModule {
diff --git a/src/app/k8s/k8s-action/K8sActionComponent.ts b/src/app/k8s/k8s-action/K8sActionComponent.ts
index a524277..f68eff6 100644
--- a/src/app/k8s/k8s-action/K8sActionComponent.ts
+++ b/src/app/k8s/k8s-action/K8sActionComponent.ts
@@ -75,12 +75,15 @@
 
   /** Delete User Account @public */
   public deleteK8s(pageType: string): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** Shows information using modalservice @public */
@@ -94,6 +97,7 @@
       pageName = 'k8s-cluster';
       title = 'PAGE.K8S.K8SCLUSTERDETAILS';
     }
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     this.modalService.open(ShowInfoComponent, { backdrop: 'static' }).componentInstance.params = {
       id: this.instanceID,
       page: pageName,
diff --git a/src/app/k8s/k8s-add-cluster/K8sAddClusterComponent.ts b/src/app/k8s/k8s-add-cluster/K8sAddClusterComponent.ts
index aa33193..bad533f 100644
--- a/src/app/k8s/k8s-add-cluster/K8sAddClusterComponent.ts
+++ b/src/app/k8s/k8s-add-cluster/K8sAddClusterComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file K8sAddClusterComponent.ts.
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -29,7 +30,6 @@
 import * as jsyaml from 'js-yaml';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VimAccountDetails } from 'VimAccountModel';
 /**
  * Creating Component
@@ -209,6 +209,7 @@
     // Transform Map to json object
     const jsonDMObject: {} = {};
     this.deploymentMethodsSubmit.forEach((value: boolean, key: string): void => {
+      // eslint-disable-next-line security/detect-object-injection
       jsonDMObject[key] = value;
     });
 
@@ -232,7 +233,6 @@
     if (files && files.length === 1) {
       this.sharedService.getFileString(files, 'json').then((fileContent: string): void => {
         const getNetsJson: string = jsyaml.load(fileContent, { json: true });
-        // tslint:disable-next-line: no-backbone-get-set-outside-model
         this.k8sclusterForm.get('nets').setValue(JSON.stringify(getNetsJson));
       }).catch((err: string): void => {
         if (err === 'typeError') {
@@ -255,7 +255,6 @@
     if (files && files.length === 1) {
       this.sharedService.getFileString(files, 'yaml').then((fileContent: string): void => {
         const getCredentialsJson: string = jsyaml.load(fileContent, { json: true });
-        // tslint:disable-next-line: no-backbone-get-set-outside-model
         this.k8sclusterForm.get('credentials').setValue(JSON.stringify(getCredentialsJson));
       }).catch((err: string): void => {
         if (err === 'typeError') {
@@ -272,5 +271,4 @@
     this.fileInputCredentialsLabel.nativeElement.innerText = files[0].name;
     this.fileInputCredentials.nativeElement.value = null;
   }
-
 }
diff --git a/src/app/k8s/k8s-add-repo/K8sAddRepoComponent.ts b/src/app/k8s/k8s-add-repo/K8sAddRepoComponent.ts
index c8b96bb..700a0c3 100644
--- a/src/app/k8s/k8s-add-repo/K8sAddRepoComponent.ts
+++ b/src/app/k8s/k8s-add-repo/K8sAddRepoComponent.ts
@@ -130,5 +130,4 @@
       this.restService.handleError(error, 'post');
     });
   }
-
 }
diff --git a/src/app/k8s/k8scluster/K8sClusterComponent.ts b/src/app/k8s/k8scluster/K8sClusterComponent.ts
index 7ab7583..88a4fb6 100644
--- a/src/app/k8s/k8scluster/K8sClusterComponent.ts
+++ b/src/app/k8s/k8scluster/K8sClusterComponent.ts
@@ -180,12 +180,15 @@
 
   /** Compose new K8s Cluster Accounts @public */
   public addK8sCluster(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(K8sAddClusterComponent, { backdrop: 'static' });
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /**
@@ -232,5 +235,4 @@
       this.isLoadingResults = false;
     });
   }
-
 }
diff --git a/src/app/k8s/k8srepository/K8sRepositoryComponent.ts b/src/app/k8s/k8srepository/K8sRepositoryComponent.ts
index 1b6c9f7..a9626d2 100644
--- a/src/app/k8s/k8srepository/K8sRepositoryComponent.ts
+++ b/src/app/k8s/k8srepository/K8sRepositoryComponent.ts
@@ -141,12 +141,15 @@
 
   /** Compose new K8s Repo Accounts @public */
   public addK8sRepo(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(K8sAddRepoComponent, { backdrop: 'static' });
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /**
@@ -157,7 +160,6 @@
   }
 
   /** Generate nsData object from loop and return for the datasource @public */
-  // tslint:disable-next-line: typedef
   public generateK8sRepoData(k8sRepodata: K8SREPODATA): K8SREPODATADISPLAY {
     return {
       name: k8sRepodata.name,
@@ -194,5 +196,4 @@
       this.isLoadingResults = false;
     });
   }
-
 }
diff --git a/src/app/layouts/breadcrumb/BreadcrumbComponent.ts b/src/app/layouts/breadcrumb/BreadcrumbComponent.ts
index e273cda..2b7ca54 100644
--- a/src/app/layouts/breadcrumb/BreadcrumbComponent.ts
+++ b/src/app/layouts/breadcrumb/BreadcrumbComponent.ts
@@ -18,13 +18,13 @@
 /**
  * @file Bread Crumb component.
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnInit } from '@angular/core';
 import { Title } from '@angular/platform-browser';
 import { ActivatedRoute, NavigationEnd, Router, RouterEvent, UrlSegment } from '@angular/router';
 import { TranslateService } from '@ngx-translate/core';
 import { BREADCRUMBITEM } from 'CommonModel';
 import { filter, startWith } from 'rxjs/operators';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -72,6 +72,7 @@
   /** Lifecyle Hooks the trigger before component is instantiate @public */
   public ngOnInit(): void {
     this.router.events
+      // eslint-disable-next-line deprecation/deprecation
       .pipe(filter((event: RouterEvent) => event instanceof NavigationEnd), startWith(undefined))
       .subscribe(() => this.menuItems = this.createBreadcrumbs(this.activatedRoute.root));
   }
@@ -153,5 +154,4 @@
       return this.translateService.instant('PAGE.DASHBOARD.NETSLICEINSTANCE');
     }
   }
-
 }
diff --git a/src/app/layouts/header/HeaderComponent.ts b/src/app/layouts/header/HeaderComponent.ts
index b496ff1..9b4fca6 100644
--- a/src/app/layouts/header/HeaderComponent.ts
+++ b/src/app/layouts/header/HeaderComponent.ts
@@ -120,6 +120,7 @@
 
     /** Implementation of model for UserSettings options.@public */
     public userSettings(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(UserSettingsComponent, { backdrop: 'static' });
     }
 }
diff --git a/src/app/layouts/sidebar/SidebarComponent.ts b/src/app/layouts/sidebar/SidebarComponent.ts
index 9cae634..c328778 100644
--- a/src/app/layouts/sidebar/SidebarComponent.ts
+++ b/src/app/layouts/sidebar/SidebarComponent.ts
@@ -19,10 +19,10 @@
 /**
  * @file Sidebar Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnInit } from '@angular/core';
 import { DeviceCheckService } from 'DeviceCheckService';
 import { MENU_ITEMS, MENUITEMS } from 'src/models/MenuModel';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -133,6 +133,7 @@
     }
     /** Hide / Show Menus based on the clicking in the menus @public */
     public checkAndCloseSideBar(childExists: boolean): void {
+        // eslint-disable-next-line deprecation/deprecation
         event.stopPropagation();
         if (this.isMobile$ && !childExists) {
             this.sideBarOpenClose();
diff --git a/src/app/login/LoginComponent.ts b/src/app/login/LoginComponent.ts
index 8c6f5a3..fae3d20 100644
--- a/src/app/login/LoginComponent.ts
+++ b/src/app/login/LoginComponent.ts
@@ -19,6 +19,7 @@
 /**
  * @file Page for Login component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpErrorResponse } from '@angular/common/http';
 import { Component, Injector, OnInit } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -27,7 +28,6 @@
 import { RestService } from 'RestService';
 import { Observable } from 'rxjs';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
diff --git a/src/app/operational-view/OperationalViewComponent.ts b/src/app/operational-view/OperationalViewComponent.ts
index ae2a13c..edb972a 100644
--- a/src/app/operational-view/OperationalViewComponent.ts
+++ b/src/app/operational-view/OperationalViewComponent.ts
@@ -1,3 +1,4 @@
+/* eslint-disable security/detect-object-injection */
 /*
  Copyright 2020 TATA ELXSI
 
@@ -19,6 +20,7 @@
 /**
  * @file Page for Operational View Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnInit } from '@angular/core';
 import { ActivatedRoute } from '@angular/router';
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
@@ -35,7 +37,6 @@
 import { Subscription } from 'rxjs';
 import { map } from 'rxjs/operators';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 /**
  * Creating component
  * @Component takes OperationalViewComponent.html as template url
@@ -77,19 +78,22 @@
     public timeOutDefaultSeconds: number = CONSTANTNUMBER.timeOutDefaultSeconds;
 
     /** variables contains minimum seconds for the timeout @public */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     public minSeconds: number = 5;
 
     /** variables contains maximum seconds for the timeout @public */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     public maxSeconds: number = 60;
 
     /** variables contains timer calculation value of milliseconds @public */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     public timeDefaultCal: number = 1000;
 
     /** variables contains timeout @public */
     public timeOut: number;
 
     /** Set the timer button @public */
-    // tslint:disable-next-line: no-magic-numbers
+    // eslint-disable-next-line no-magic-numbers
     public setSeconds: SETTIMER[] = SET_TIMER;
 
     /** Instance of subscriptions @private */
@@ -118,7 +122,6 @@
      * Lifecyle Hooks the trigger before component is instantiate
      */
     public ngOnInit(): void {
-        // tslint:disable-next-line:no-backbone-get-set-outside-model
         this.instancesID = this.activatedRoute.snapshot.paramMap.get('id');
         this.generateData();
         this.generateDataSub = this.sharedService.dataEvent.subscribe((): void => { this.generateData(); });
@@ -186,9 +189,7 @@
         if (liveData) {
             NSURL = NSURL + '?vcaStatusRefresh=true';
         }
-        return this.restService.getResource(NSURL).pipe(map((operationalList: VCASTATUS): VCADETAILS => {
-            return this.vcaDetailsData(operationalList, liveData, timeOutSeconds);
-        }));
+        return this.restService.getResource(NSURL).pipe(map((operationalList: VCASTATUS): VCADETAILS => this.vcaDetailsData(operationalList, liveData, timeOutSeconds)));
     }
     /**
      * Form the VCA Details for each NS Instances
@@ -235,7 +236,9 @@
             list.vcaStatus[key].units = vcaUnits;
             list.vcaStatus[key].applications = vcaApplication;
             list.vcaStatus[key].machines = vcaMachines;
+            // eslint-disable-next-line no-self-assign
             list.vcaStatus[key].relations = list.vcaStatus[key].relations;
+            // eslint-disable-next-line no-self-assign
             list.vcaStatus[key].model = list.vcaStatus[key].model;
             const getEachModelData: SETMODELS = this.assignVCAStatusOfEachModel(list.vcaStatus[key]);
             setModels.push(getEachModelData);
@@ -258,7 +261,9 @@
         Object.keys(applicationData).forEach((applicationKey: string): void => {
             const charmSplitlist: string[] = applicationData[applicationKey].charm.split('/');
             const status: string = applicationData[applicationKey].status.status;
+            // eslint-disable-next-line deprecation/deprecation
             const charm: string = charmSplitlist[1].substr(0, charmSplitlist[1].lastIndexOf('-'));
+            // eslint-disable-next-line deprecation/deprecation
             const store: string = charmSplitlist[0].substr(0, charmSplitlist[0].lastIndexOf(':'));
             applicationData[applicationKey].app_id = applicationKey;
             applicationData[applicationKey].charm = charm;
@@ -298,16 +303,19 @@
     }
     /** Show the Config list in modal using modalservice @public */
     public showExecutedActionsList(executeActionsList: EXECUTEDACTIONS[]): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(OperationalViewAppExecutedActionsComponent, { size: 'xl', backdrop: 'static' })
             .componentInstance.params = { executedActions: executeActionsList };
     }
     /** Show the Config list in modal using modalservice @public */
     public showConfigList(configList: object): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(OperationalViewAppConfigsComponent, { size: 'xl', backdrop: 'static' })
             .componentInstance.params = { configs: configList };
     }
     /** Show the Config list in modal using modalservice @public */
     public showActionsList(actionsList: object): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(OperationalViewAppActionsComponent, { size: 'xl', backdrop: 'static' })
             .componentInstance.params = { actions: actionsList };
     }
diff --git a/src/app/operational-view/operational-view-app-actions/OperationalViewAppActionsComponent.ts b/src/app/operational-view/operational-view-app-actions/OperationalViewAppActionsComponent.ts
index 5a4f48e..acee5ed 100644
--- a/src/app/operational-view/operational-view-app-actions/OperationalViewAppActionsComponent.ts
+++ b/src/app/operational-view/operational-view-app-actions/OperationalViewAppActionsComponent.ts
@@ -19,10 +19,10 @@
 /**
  * @file Page for Operational View App actions Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { URLPARAMS } from 'CommonModel';
-import { isNullOrUndefined } from 'util';
 /**
  * Creating component
  * @Component takes OperationalViewAppActionsComponent.html as template url
@@ -60,6 +60,7 @@
       this.actionsData = Object.keys(this.params.actions).map((key: string): Object => (
         {
           actions: key,
+          // eslint-disable-next-line security/detect-object-injection
           description: this.params.actions[key]
         }));
     }
diff --git a/src/app/operational-view/operational-view-app-configs/OperationalViewAppConfigsComponent.ts b/src/app/operational-view/operational-view-app-configs/OperationalViewAppConfigsComponent.ts
index 1e1b453..4d40d2c 100644
--- a/src/app/operational-view/operational-view-app-configs/OperationalViewAppConfigsComponent.ts
+++ b/src/app/operational-view/operational-view-app-configs/OperationalViewAppConfigsComponent.ts
@@ -19,10 +19,10 @@
 /**
  * @file Page for Operational View App configs Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { URLPARAMS } from 'CommonModel';
-import { isNullOrUndefined } from 'util';
 /**
  * Creating component
  * @Component takes OperationalViewAppConfigsComponent.html as template url
@@ -60,10 +60,15 @@
       this.configData = Object.keys(this.params.configs).map((key: string): Object => (
         {
           name: key,
+          // eslint-disable-next-line security/detect-object-injection
           default: this.params.configs[key].default,
+          // eslint-disable-next-line security/detect-object-injection
           description: this.params.configs[key].description,
+          // eslint-disable-next-line security/detect-object-injection
           source: this.params.configs[key].source,
+          // eslint-disable-next-line security/detect-object-injection
           type: this.params.configs[key].type,
+          // eslint-disable-next-line security/detect-object-injection
           value: this.params.configs[key].value
         }));
     }
diff --git a/src/app/operational-view/operational-view-app-executed-actions/OperationalViewAppExecutedActionsComponent.ts b/src/app/operational-view/operational-view-app-executed-actions/OperationalViewAppExecutedActionsComponent.ts
index af39f79..d761653 100644
--- a/src/app/operational-view/operational-view-app-executed-actions/OperationalViewAppExecutedActionsComponent.ts
+++ b/src/app/operational-view/operational-view-app-executed-actions/OperationalViewAppExecutedActionsComponent.ts
@@ -19,11 +19,11 @@
 /**
  * @file Page for Operational View App Executed actions Component
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { URLPARAMS } from 'CommonModel';
 import { EXECUTEDACTIONS } from 'OperationalModel';
-import { isNullOrUndefined } from 'util';
 /**
  * Creating component
  * @Component takes OperationalViewAppExecutedActionsComponent.html as template url
diff --git a/src/app/osm-repositories/OsmRepositoriesComponent.ts b/src/app/osm-repositories/OsmRepositoriesComponent.ts
index 5f42eee..4c85f8c 100644
--- a/src/app/osm-repositories/OsmRepositoriesComponent.ts
+++ b/src/app/osm-repositories/OsmRepositoriesComponent.ts
@@ -49,7 +49,9 @@
   /** Return to osm Repo Details list */
   public redirectToList(getURL: string): void {
     if (getURL === '/repos') {
-      this.router.navigate(['/repos/details']).catch();
+      this.router.navigate(['/repos/details']).catch((): void => {
+        // Catch Navigation Error
+    });
     }
   }
 }
diff --git a/src/app/osm-repositories/OsmRepositoriesModule.ts b/src/app/osm-repositories/OsmRepositoriesModule.ts
index 20901e4..a630f5d 100644
--- a/src/app/osm-repositories/OsmRepositoriesModule.ts
+++ b/src/app/osm-repositories/OsmRepositoriesModule.ts
@@ -62,16 +62,12 @@
 /**
  * Creating @NgModule component for Modules
  */
-// tslint:disable-next-line: no-stateless-class
 @NgModule({
     imports: [FormsModule, ReactiveFormsModule, CommonModule, HttpClientModule, TranslateModule,
         RouterModule.forChild(routes), NgbModule, PagePerRowModule, Ng2SmartTableModule, LoaderModule, PageReloadModule, NgSelectModule],
     declarations: [OsmRepositoriesComponent, OsmRepositoriesDetailsComponent, OsmRepositoriesActionComponent, OsmRepoCreateUpdateComponent],
     providers: [
         DataService
-    ],
-    entryComponents: [
-        OsmRepoCreateUpdateComponent
     ]
 })
 /** Exporting a class @exports OsmRepositoriesModule */
diff --git a/src/app/osm-repositories/osm-repositories-details/OsmRepositoriesDetailsComponent.ts b/src/app/osm-repositories/osm-repositories-details/OsmRepositoriesDetailsComponent.ts
index 3415484..f249470 100644
--- a/src/app/osm-repositories/osm-repositories-details/OsmRepositoriesDetailsComponent.ts
+++ b/src/app/osm-repositories/osm-repositories-details/OsmRepositoriesDetailsComponent.ts
@@ -167,13 +167,16 @@
 
   /** Create a osm repo @public */
   public addOsmrepo(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(OsmRepoCreateUpdateComponent, { backdrop: 'static' });
     modalRef.componentInstance.createupdateType = 'Add';
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.generateData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /**
@@ -194,7 +197,9 @@
       });
       this.dataSource.load(this.osmRepoData).then((data: boolean) => {
         this.isLoadingResults = false;
-      }).catch();
+      }).catch((): void => {
+        // Catch Navigation Error
+    });
     }, (error: ERRORDATA) => {
       this.restService.handleError(error, 'get');
       this.isLoadingResults = false;
diff --git a/src/app/packages/PackagesComponent.ts b/src/app/packages/PackagesComponent.ts
index eb9991d..6dcf10e 100644
--- a/src/app/packages/PackagesComponent.ts
+++ b/src/app/packages/PackagesComponent.ts
@@ -49,7 +49,9 @@
     /** Return to list NS Package List */
     public redirectToList(getURL: string): void {
         if (getURL === '/packages') {
-            this.router.navigate(['/packages/ns']).catch();
+            this.router.navigate(['/packages/ns']).catch((): void => {
+                // Catch Navigation Error
+            });
         }
     }
 }
diff --git a/src/app/packages/PackagesModule.ts b/src/app/packages/PackagesModule.ts
index e6c6628..5a8ea2e 100644
--- a/src/app/packages/PackagesModule.ts
+++ b/src/app/packages/PackagesModule.ts
@@ -117,8 +117,7 @@
     declarations: [PackagesComponent, NSPackagesComponent, VNFPackagesComponent, NetsliceTemplateComponent,
         DragDirective, ShowContentComponent, NSComposerComponent, VNFComposerComponent, EditPackagesComponent, ClonePackageComponent],
     providers: [DataService],
-    schemas: [CUSTOM_ELEMENTS_SCHEMA],
-    entryComponents: [ShowContentComponent, ClonePackageComponent]
+    schemas: [CUSTOM_ELEMENTS_SCHEMA]
 })
 /** Exporting a class @exports PackagesModule */
 export class PackagesModule {
diff --git a/src/app/packages/instantiate-net-slice-template/InstantiateNetSliceTemplateComponent.ts b/src/app/packages/instantiate-net-slice-template/InstantiateNetSliceTemplateComponent.ts
index 330edf8..fb0abda 100644
--- a/src/app/packages/instantiate-net-slice-template/InstantiateNetSliceTemplateComponent.ts
+++ b/src/app/packages/instantiate-net-slice-template/InstantiateNetSliceTemplateComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Instantiate NS Modal Component.
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -33,7 +34,6 @@
 import { NSICREATEPARAMS } from 'NSDModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VimAccountDetails } from 'VimAccountModel';
 /**
  * Creating component
@@ -193,7 +193,6 @@
       delete this.netSliceInstantiateForm.value.ssh_keys;
     } else {
       this.copySSHKey = JSON.parse(JSON.stringify(this.netSliceInstantiateForm.value.ssh_keys));
-      // tslint:disable-next-line: no-backbone-get-set-outside-model
       this.netSliceInstantiateForm.get('ssh_keys').setValue(this.copySSHKey);
     }
     if (isNullOrUndefined(this.netSliceInstantiateForm.value.config) || this.netSliceInstantiateForm.value.config === '') {
@@ -203,12 +202,14 @@
       if (validJSON) {
         this.netSliceInstantiateForm.value.config = JSON.parse(this.netSliceInstantiateForm.value.config);
         Object.keys(this.netSliceInstantiateForm.value.config).forEach((item: string) => {
+          // eslint-disable-next-line security/detect-object-injection
           this.netSliceInstantiateForm.value[item] = this.netSliceInstantiateForm.value.config[item];
         });
         delete this.netSliceInstantiateForm.value.config;
       } else {
         const getConfigJson: string = jsyaml.load(this.netSliceInstantiateForm.value.config, { json: true });
         Object.keys(getConfigJson).forEach((item: string) => {
+          // eslint-disable-next-line security/detect-object-injection
           this.netSliceInstantiateForm.value[item] = getConfigJson[item];
         });
         delete this.netSliceInstantiateForm.value.config;
@@ -225,11 +226,12 @@
         this.isLoadingResults = false;
         this.notifierService.notify('success', this.netSliceInstantiateForm.value.nsiName +
           this.translateService.instant('PAGE.NETSLICE.CREATEDSUCCESSFULLY'));
-        this.router.navigate(['/instances/netslice']).catch();
+        this.router.navigate(['/instances/netslice']).catch((): void => {
+          // Catch Navigation Error
+      });
       }, (error: ERRORDATA) => {
         this.restService.handleError(error, 'post');
         if (!isNullOrUndefined(this.copySSHKey)) {
-          // tslint:disable-next-line: no-backbone-get-set-outside-model
           this.netSliceInstantiateForm.get('ssh_keys').setValue(this.copySSHKey);
         }
         this.isLoadingResults = false;
@@ -241,7 +243,6 @@
     if (files && files.length === 1) {
       this.sharedService.getFileString(files, 'pub').then((fileContent: string): void => {
         const getSSHJson: string = jsyaml.load(fileContent, { json: true });
-        // tslint:disable-next-line: no-backbone-get-set-outside-model
         this.netSliceInstantiateForm.get('ssh_keys').setValue(getSSHJson);
       }).catch((err: string): void => {
         if (err === 'typeError') {
@@ -266,7 +267,6 @@
       if (fileFormat === 'yaml' || fileFormat === 'yml') {
         this.sharedService.getFileString(files, 'yaml').then((fileContent: string): void => {
           const getConfigJson: string = jsyaml.load(fileContent, { json: true });
-          // tslint:disable-next-line: no-backbone-get-set-outside-model
           this.netSliceInstantiateForm.get('config').setValue(JSON.stringify(getConfigJson));
         }).catch((err: string): void => {
           if (err === 'typeError') {
@@ -280,7 +280,6 @@
       } else if (fileFormat === 'json') {
         this.sharedService.getFileString(files, 'json').then((fileContent: string): void => {
           const getConfigJson: string = jsyaml.load(fileContent, { json: true });
-          // tslint:disable-next-line: no-backbone-get-set-outside-model
           this.netSliceInstantiateForm.get('config').setValue(JSON.stringify(getConfigJson));
         }).catch((err: string): void => {
           if (err === 'typeError') {
diff --git a/src/app/packages/instantiate-ns/InstantiateNsComponent.ts b/src/app/packages/instantiate-ns/InstantiateNsComponent.ts
index 1043f9a..e0798d1 100644
--- a/src/app/packages/instantiate-ns/InstantiateNsComponent.ts
+++ b/src/app/packages/instantiate-ns/InstantiateNsComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Instantiate NS Modal Component.
  */
+import { isNullOrUndefined } from 'util';
 import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { Router } from '@angular/router';
@@ -31,7 +32,6 @@
 import { NSCREATEPARAMS, NSData, NSDDetails } from 'NSDModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VimAccountDetails } from 'VimAccountModel';
 
 /**
@@ -186,7 +186,6 @@
       delete this.instantiateForm.value.ssh_keys;
     } else {
       this.copySSHKey = JSON.parse(JSON.stringify(this.instantiateForm.value.ssh_keys));
-      // tslint:disable-next-line: no-backbone-get-set-outside-model
       this.instantiateForm.get('ssh_keys').setValue([this.copySSHKey]);
     }
     if (isNullOrUndefined(this.instantiateForm.value.config) || this.instantiateForm.value.config === '') {
@@ -196,12 +195,14 @@
       if (validJSON) {
         this.instantiateForm.value.config = JSON.parse(this.instantiateForm.value.config);
         Object.keys(this.instantiateForm.value.config).forEach((item: string) => {
+          // eslint-disable-next-line security/detect-object-injection
           this.instantiateForm.value[item] = this.instantiateForm.value.config[item];
         });
         delete this.instantiateForm.value.config;
       } else {
         const getConfigJson: string = jsyaml.load(this.instantiateForm.value.config, { json: true });
         Object.keys(getConfigJson).forEach((item: string) => {
+          // eslint-disable-next-line security/detect-object-injection
           this.instantiateForm.value[item] = getConfigJson[item];
         });
         delete this.instantiateForm.value.config;
@@ -215,12 +216,13 @@
       this.activeModal.close(modalData);
       this.notifierService.notify('success', this.instantiateForm.value.nsName +
         this.translateService.instant('PAGE.NSINSTANCE.CREATEDSUCCESSFULLY'));
-      this.router.navigate(['/instances/ns']).catch();
+      this.router.navigate(['/instances/ns']).catch((): void => {
+        // Catch Navigation Error
+    });
     }, (error: ERRORDATA) => {
       this.isLoadingResults = false;
       this.restService.handleError(error, 'post');
       if (!isNullOrUndefined(this.copySSHKey)) {
-        // tslint:disable-next-line: no-backbone-get-set-outside-model
         this.instantiateForm.get('ssh_keys').setValue(this.copySSHKey);
       }
     });
@@ -231,7 +233,6 @@
     if (files && files.length === 1) {
       this.sharedService.getFileString(files, 'pub').then((fileContent: string): void => {
         const getSSHJson: string = jsyaml.load(fileContent, { json: true });
-        // tslint:disable-next-line: no-backbone-get-set-outside-model
         this.instantiateForm.get('ssh_keys').setValue(getSSHJson);
       }).catch((err: string): void => {
         if (err === 'typeError') {
@@ -255,7 +256,6 @@
       const fileFormat: string = this.sharedService.fetchFileExtension(files).toLocaleLowerCase();
       if (fileFormat === 'yaml' || fileFormat === 'yml') {
         this.sharedService.getFileString(files, 'yaml').then((fileContent: string): void => {
-          // tslint:disable-next-line: no-backbone-get-set-outside-model
           this.instantiateForm.get('config').setValue(fileContent);
         }).catch((err: string): void => {
           if (err === 'typeError') {
@@ -269,7 +269,6 @@
       } else if (fileFormat === 'json') {
         this.sharedService.getFileString(files, 'json').then((fileContent: string): void => {
           const getConfigJson: string = jsyaml.load(fileContent, { json: true });
-          // tslint:disable-next-line: no-backbone-get-set-outside-model
           this.instantiateForm.get('config').setValue(JSON.stringify(getConfigJson));
         }).catch((err: string): void => {
           if (err === 'typeError') {
diff --git a/src/app/packages/ns-packages/NSPackagesComponent.ts b/src/app/packages/ns-packages/NSPackagesComponent.ts
index 7302ea4..8960497 100644
--- a/src/app/packages/ns-packages/NSPackagesComponent.ts
+++ b/src/app/packages/ns-packages/NSPackagesComponent.ts
@@ -246,6 +246,7 @@
     }
     /** Handle compose new ns package method  @public */
     public composeNSPackage(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(ComposePackages, { backdrop: 'static' }).componentInstance.params = { page: 'ns-package' };
     }
 
diff --git a/src/app/packages/ns-packages/ns-composer/NSComposerComponent.ts b/src/app/packages/ns-packages/ns-composer/NSComposerComponent.ts
index d771123..8d28f3a 100644
--- a/src/app/packages/ns-packages/ns-composer/NSComposerComponent.ts
+++ b/src/app/packages/ns-packages/ns-composer/NSComposerComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file NS Compose Component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, ElementRef, Injector, ViewChild, ViewEncapsulation } from '@angular/core';
 import { ActivatedRoute, Router } from '@angular/router';
@@ -43,7 +44,6 @@
 } from 'NSDModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VNFD, VNFData } from 'VNFDModel';
 
 /**
@@ -124,31 +124,31 @@
   /** Contains sidebar open status @public */
   public sideBarOpened: boolean = false;
   /** Contains SVG attributes @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private svg: any;
   /** Contains the Drag line */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private dragLine: any;
   /** Contains VL node @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private vlNode: any;
   /** Contains VNFD node @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private vnfdnode: any;
   /** Contains CP node @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private cpnode: any;
   /** Rendered nodes represent VL @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gvlNode: any;
   /** Rendered nodes represent VL @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gvnfdNode: any;
   /** Rendered nodes represent VL @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gcpNode: any;
   /** Contains forced node animations @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private force: any;
   /** Contains all the selected node @private */
   private selectedNode: COMPOSERNODES[] = [];
@@ -161,7 +161,7 @@
   /** Contains the VNFD copy @private */
   private vnfdCopy: string;
   /** Contains path information of the node */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private path: any;
   /** Contains the node information @private */
   private nodes: COMPOSERNODES[] = [];
@@ -209,7 +209,6 @@
   }
   /** Lifecyle Hooks the trigger before component is instantiated @public */
   public ngOnInit(): void {
-    // tslint:disable-next-line:no-backbone-get-set-outside-model
     this.identifier = this.activatedRoute.snapshot.paramMap.get('id');
     this.generateData();
     this.headers = new HttpHeaders({
@@ -219,7 +218,7 @@
     });
   }
   /** Events handles at drag on D3 region @public */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
   public drag(ev: any): void {
     if (ev.target.id === 'vl') {
       ev.dataTransfer.setData('text', ev.target.id);
@@ -385,6 +384,7 @@
   }
   /** Show Info @public */
   public showInfo(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(ConfirmationTopologyComponent, { backdrop: 'static' });
     modalRef.componentInstance.topologyType = 'Info';
     modalRef.componentInstance.topologytitle = this.translateService.instant('PAGE.TOPOLOGY.INFO');
@@ -392,7 +392,9 @@
       if (result) {
         // empty
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
   /** Event to freeze the animation @public */
   public onFreeze(): void {
@@ -459,7 +461,9 @@
       this.separateAndCreatenode();
     }, (error: ERRORDATA): void => {
       if (error.error.status === HttpStatus.NOT_FOUND || error.error.status === HttpStatus.UNAUTHORIZED) {
-        this.router.navigateByUrl('404', { skipLocationChange: true }).catch();
+        this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
+          // Catch Navigation Error
+      });
       } else {
         this.restService.handleError(error, 'get');
       }
@@ -535,16 +539,20 @@
       resultVLC['constituent-cpd-id'].forEach((resultCCI: CCI): void => {
         this.vnfdCopy = resultVLC['virtual-link-profile-id'];
         this.connectionPoint = resVNF.id + ':' + resultCCI['constituent-base-element-id'] + index + ':' + resultCCI['constituent-cpd-id'];
-        const connectionPointPos: number = this.nodes.map((e: COMPOSERNODES): string => { return e.id; }).indexOf(this.connectionPoint);
-        const nsdPos: number = this.nodes.map((e: COMPOSERNODES): string => { return e.id; }).indexOf(this.nsdCopy);
-        const vnfdPos: number = this.nodes.map((e: COMPOSERNODES): string => { return e.id; }).indexOf(this.vnfdCopy);
+        const connectionPointPos: number = this.nodes.map((e: COMPOSERNODES): string => e.id).indexOf(this.connectionPoint);
+        const nsdPos: number = this.nodes.map((e: COMPOSERNODES): string => e.id).indexOf(this.nsdCopy);
+        const vnfdPos: number = this.nodes.map((e: COMPOSERNODES): string => e.id).indexOf(this.vnfdCopy);
         this.links.push(
           {
+            // eslint-disable-next-line security/detect-object-injection
             source: this.nodes[connectionPointPos],
+            // eslint-disable-next-line security/detect-object-injection
             target: this.nodes[nsdPos]
           },
           {
+            // eslint-disable-next-line security/detect-object-injection
             source: this.nodes[connectionPointPos],
+            // eslint-disable-next-line security/detect-object-injection
             target: this.nodes[vnfdPos]
           });
       });
@@ -681,7 +689,7 @@
       .attr('x', graphContainerAttr.imageX)
       .attr('y', graphContainerAttr.imageY)
       .call(this.onDragDrop())
-      .attr('id', (d: COMPOSERNODES): string => { return d.selectorId; })
+      .attr('id', (d: COMPOSERNODES): string => d.selectorId)
       .attr('class', 'node').attr('width', graphContainerAttr.nodeWidth).attr('height', graphContainerAttr.nodeHeight)
       .attr('xlink:href', 'assets/images/VL.svg')
       .on('mousedown', (d: COMPOSERNODES): void => { this.mouseDown(d); })
@@ -703,7 +711,7 @@
       .attr('x', graphContainerAttr.imageX)
       .attr('y', graphContainerAttr.imageY)
       .call(this.onDragDrop())
-      .attr('id', (d: COMPOSERNODES): string => { return d.selectorId; })
+      .attr('id', (d: COMPOSERNODES): string => d.selectorId)
       .attr('class', 'node').attr('width', graphContainerAttr.nodeWidth).attr('height', graphContainerAttr.nodeHeight)
       .attr('xlink:href', 'assets/images/VNFD.svg')
       .on('mousedown', (d: COMPOSERNODES): void => { this.mouseDown(d); })
@@ -725,7 +733,7 @@
       .attr('x', graphContainerAttr.imageX)
       .attr('y', graphContainerAttr.imageY)
       .call(this.onDragDrop())
-      .attr('id', (d: COMPOSERNODES): string => { return d.selectorId; })
+      .attr('id', (d: COMPOSERNODES): string => d.selectorId)
       .attr('class', 'node').attr('width', graphContainerAttr.nodeWidth).attr('height', graphContainerAttr.nodeHeight)
       .attr('xlink:href', 'assets/images/CP.svg')
       .on('mousedown', (d: COMPOSERNODES): void => { this.mouseDown(d); })
@@ -767,6 +775,7 @@
       });
     }
     if (this.vlName !== undefined && this.setVnfdName !== undefined && this.setVnfdConnectionPointRef !== undefined) {
+      // eslint-disable-next-line security/detect-non-literal-fs-filename
       const modalRef: NgbModalRef = this.modalService.open(ConfirmationTopologyComponent, { backdrop: 'static' });
       modalRef.componentInstance.topologyType = 'Add';
       modalRef.componentInstance.cpDetails = this.getVNFSelectedData['ext-cpd'];
@@ -785,7 +794,9 @@
         } else {
           this.deselectPath();
         }
-      }).catch();
+      }).catch((): void => {
+        // Catch Navigation Error
+    });
     } else {
       this.deselectPath();
       this.notifierService.notify('error', this.translateService.instant('ERROR'));
@@ -819,6 +830,7 @@
   }
   /** Events handles when mousedown click it will capture the selected node data @private */
   private mouseDown(d: COMPOSERNODES): void {
+    // eslint-disable-next-line deprecation/deprecation
     event.preventDefault();
     if (d3.event.ctrlKey) { return; }
     if (d3.event.shiftKey) {
@@ -895,12 +907,12 @@
     this.isShowCPDetails = cpDetails;
   }
   /** Events handles when Shift Click to perform create cp @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private singleClick(nodeSelected: any, d: COMPOSERNODES): void {
     this.selectNodeExclusive(nodeSelected, d);
   }
   /** Selected nodes @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private selectNodeExclusive(nodeSeleced: any, d: COMPOSERNODES): void {
     const alreadyIsActive: boolean = nodeSeleced.select('#' + d.selectorId).classed(this.activeClass);
     this.deselectAllNodes();
@@ -949,6 +961,7 @@
   }
   /** Get confirmation Before Deleting the Link in Topology @private */
   private getDeleteLinkConfirmation(d: Tick): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(ConfirmationTopologyComponent, { backdrop: 'static' });
     modalRef.componentInstance.topologyType = 'Delete';
     modalRef.componentInstance.topologyname = this.translateService.instant('PAGE.TOPOLOGY.LINK') + ' - ' + d.source.id;
@@ -957,7 +970,9 @@
       if (result) {
         this.doubleClickLink(d);
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
   /** Events handles when Double Click to Delete the link @private */
   private doubleClickLink(d: Tick): void {
@@ -995,6 +1010,7 @@
   }
   /** Get confirmation Before Deleting the Node in Topology @private */
   private getDeleteConfirmation(d: COMPOSERNODES): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(ConfirmationTopologyComponent, { backdrop: 'static' });
     modalRef.componentInstance.topologyType = 'Delete';
     modalRef.componentInstance.topologyname = d.name;
@@ -1009,7 +1025,9 @@
       if (result) {
         this.doubleClick(d);
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
   /** Events handles when Double Click to Delete @private */
   private doubleClick(d: COMPOSERNODES): void {
@@ -1018,7 +1036,7 @@
       if (res.id === d.id) {
         if (deletedNode.type === 'vld') {
           /** Remove the virtual-link-desc related to VL */
-          const pos: number = this.nsData['virtual-link-desc'].map((e: VLD): string => { return e.id; }).indexOf(d.id);
+          const pos: number = this.nsData['virtual-link-desc'].map((e: VLD): string => e.id).indexOf(d.id);
           this.nsData['virtual-link-desc'].splice(pos, 1);
           /** Remove the virtual-link-connectivity between VL and VNFD */
           this.nsData.df.forEach((resultDF: DF): void => {
@@ -1032,6 +1050,7 @@
                 if (getVLArray.length > 0) {
                   getVLArray.forEach((removeIndex: number): void => {
                     const index: string = removeIndex.toString();
+                    // eslint-disable-next-line security/detect-object-injection
                     resVNF['virtual-link-connectivity'].splice(resVNF['virtual-link-connectivity'][index], 1);
                   });
                 }
@@ -1043,19 +1062,13 @@
           this.nsData.df.forEach((resultDF: DF): void => {
             if (resultDF['vnf-profile'] !== undefined) {
               /** Remove the vnf-profile related to VNFD */
-              const posVNF: number = resultDF['vnf-profile'].findIndex((e: VNFPROFILE): boolean => {
-                return e['vnfd-id'] === d.name && e.id === d.nodeIndex;
-              });
+              const posVNF: number = resultDF['vnf-profile'].findIndex((e: VNFPROFILE): boolean => e['vnfd-id'] === d.name && e.id === d.nodeIndex);
               resultDF['vnf-profile'].splice(posVNF, 1);
               /** Check the VNFD exists in any vnf-profile */
-              const isVNFDExists: boolean = resultDF['vnf-profile'].some((e: VNFPROFILE): boolean => {
-                return e['vnfd-id'] === d.name;
-              });
+              const isVNFDExists: boolean = resultDF['vnf-profile'].some((e: VNFPROFILE): boolean => e['vnfd-id'] === d.name);
               /** If VNFD not exists in the vnf-profile remove from vnfd-id */
               if (!isVNFDExists) {
-                const posVNFD: number = this.nsData['vnfd-id'].findIndex((e: string): boolean => {
-                  return e === d.name;
-                });
+                const posVNFD: number = this.nsData['vnfd-id'].findIndex((e: string): boolean => e === d.name);
                 this.nsData['vnfd-id'].splice(posVNFD, 1);
               }
             }
@@ -1090,7 +1103,7 @@
     });
   }
   /** drag event @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private onDragDrop(): any {
     return d3.drag().filter(this.dragFilter)
       .on('start', this.dragstarted)
diff --git a/src/app/packages/ns-packages/vnf-composer/VNFComposerComponent.ts b/src/app/packages/ns-packages/vnf-composer/VNFComposerComponent.ts
index 55c5070..eabd2b7 100644
--- a/src/app/packages/ns-packages/vnf-composer/VNFComposerComponent.ts
+++ b/src/app/packages/ns-packages/vnf-composer/VNFComposerComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file VNFComposerComponent
  */
+ import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, ElementRef, Injector, ViewChild, ViewEncapsulation } from '@angular/core';
 import { ActivatedRoute, Router } from '@angular/router';
@@ -73,30 +74,30 @@
   /** Contains sidebar open status @public */
   public sideBarOpened: boolean = false;
   /** Contains SVG attributes @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private svg: any;
   /** Contains forced node animations @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private force: any;
   /** Contains the Drag line */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private dragLine: any;
   /** Contains id of the node @private */
   private identifier: string;
   /** Contains path information of the node */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private path: any;
   /** Contains node network @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private network: any;
   /** Contains node network @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private virutualDeploymentUnit: any;
   /** Contains node connectionPoint @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private connectionPoint: any;
   /** Contains node intConnectionPoint @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private intConnectionPoint: any;
   /** Contains the node information @private */
   private nodes: COMPOSERNODES[] = [];
@@ -117,16 +118,16 @@
   /** Contains tranlsate instance @private */
   private translateService: TranslateService;
   /** Rendered nodes represent network @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gNetwork: any;
   /** Rendered nodes represent VDU @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gVirutualDeploymentUnit: any;
   /** Rendered nodes represent connection point @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gConnectionPoint: any;
   /** Rendered nodes represent internal connection point @private */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private gIntConnectionPoint: any;
   /** Contains all the information about VNF Details @private */
   private vnfdPackageDetails: VNFD;
@@ -172,7 +173,6 @@
    * Lifecyle Hooks the trigger before component is instantiate
    */
   public ngOnInit(): void {
-    // tslint:disable-next-line:no-backbone-get-set-outside-model
     this.identifier = this.activatedRoute.snapshot.paramMap.get('id');
     this.generateData();
     this.headers = new HttpHeaders({
@@ -208,7 +208,9 @@
       }, (error: ERRORDATA): void => {
         error.error = typeof error.error === 'string' ? jsyaml.load(error.error) : error.error;
         if (error.error.status === HttpStatus.NOT_FOUND || error.error.status === HttpStatus.UNAUTHORIZED) {
-          this.router.navigateByUrl('404', { skipLocationChange: true }).catch();
+          this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
+            // Catch Navigation Error
+        });
         } else {
           this.restService.handleError(error, 'get');
         }
@@ -225,7 +227,7 @@
     this.vnfdInfo.provider = vnfdPackageDetails.provider;
   }
   /** Events handles at drag on D3 region @public */
-  // tslint:disable-next-line:no-any
+  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
   public drag(ev: any): void {
     ev.dataTransfer.setData('text', ev.target.id);
   }
@@ -409,10 +411,13 @@
   }
   /** Edit topology @public */
   public onEdit(): void {
-    this.router.navigate(['/packages/vnf/edit/', this.identifier]).catch();
+    this.router.navigate(['/packages/vnf/edit/', this.identifier]).catch((): void => {
+      // Catch Navigation Error
+  });
   }
   /** Show Info @public */
   public showInfo(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(ConfirmationTopologyComponent, { backdrop: 'static' });
     modalRef.componentInstance.topologyType = 'Info';
     modalRef.componentInstance.topologytitle = this.translateService.instant('PAGE.TOPOLOGY.INFO');
@@ -420,7 +425,9 @@
       if (result) {
         // empty
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
   /** Event to freeze the animation @public */
   public onFreeze(): void {
@@ -562,7 +569,7 @@
       .attr('x', graphContainerAttr.imageX)
       .attr('y', graphContainerAttr.imageY)
       .call(this.onDragDrop())
-      .attr('id', (d: COMPOSERNODES): string => { return d.id; })
+      .attr('id', (d: COMPOSERNODES): string => d.id)
       .attr('class', 'node').attr('width', graphContainerAttr.nodeWidth).attr('height', graphContainerAttr.nodeHeight)
       .attr('xlink:href', 'assets/images/INTVL.svg')
       .on('mousedown', (d: COMPOSERNODES): void => { this.mouseDown(d); })
@@ -584,7 +591,7 @@
       .attr('x', graphContainerAttr.imageX)
       .attr('y', graphContainerAttr.imageY)
       .call(this.onDragDrop())
-      .attr('id', (d: COMPOSERNODES): string => { return d.id; })
+      .attr('id', (d: COMPOSERNODES): string => d.id)
       .attr('class', 'node').attr('width', graphContainerAttr.nodeWidth).attr('height', graphContainerAttr.nodeHeight)
       .attr('xlink:href', 'assets/images/VDU.svg')
       .on('mousedown', (d: COMPOSERNODES): void => { this.mouseDown(d); })
@@ -606,7 +613,7 @@
       .attr('x', graphContainerAttr.imageX)
       .attr('y', graphContainerAttr.imageY)
       .call(this.onDragDrop())
-      .attr('id', (d: COMPOSERNODES): string => { return d.id; })
+      .attr('id', (d: COMPOSERNODES): string => d.id)
       .attr('class', 'node').attr('width', graphContainerAttr.nodeWidth).attr('height', graphContainerAttr.nodeHeight)
       .attr('xlink:href', 'assets/images/CP-VNF.svg')
       .on('mousedown', (d: COMPOSERNODES): void => { this.mouseDown(d); })
@@ -628,7 +635,7 @@
       .attr('x', graphContainerAttr.imageX)
       .attr('y', graphContainerAttr.imageY)
       .call(this.onDragDrop())
-      .attr('id', (d: COMPOSERNODES): string => { return d.id; })
+      .attr('id', (d: COMPOSERNODES): string => d.id)
       .attr('class', 'node').attr('width', graphContainerAttr.nodeWidth).attr('height', graphContainerAttr.nodeHeight)
       .attr('xlink:href', 'assets/images/INTCP.svg')
       .on('mousedown', (d: COMPOSERNODES): void => { this.mouseDown(d); })
@@ -716,6 +723,7 @@
   }
   /** Events handles when mousedown click it will capture the selected node data @private */
   private mouseDown(d: COMPOSERNODES): void {
+    // eslint-disable-next-line deprecation/deprecation
     event.preventDefault();
     if (d3.event.ctrlKey) { return; }
     if (d3.event.shiftKey) {
@@ -828,6 +836,7 @@
                     }
                   ]
                 });
+                // eslint-disable-next-line security/detect-object-injection
                 this.vnfdPackageDetails['ext-cpd'][index] = {
                   id: extcpd.id,
                   'int-cpd': {
@@ -882,7 +891,7 @@
     this.mouseupNode = null;
   }
   /** drag event @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private onDragDrop(): any {
     return d3.drag().filter(this.dragFilter)
       .on('start', this.dragstarted)
@@ -915,12 +924,13 @@
     this.dragLine.classed('hidden', true).attr('d', 'M0,0L0,0');
   }
   /** Events handles when Shift Click to perform create cp @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private singleClick(nodeSelected: any, d: COMPOSERNODES): void {
     this.selectedNode(nodeSelected, d);
   }
   /** Get confirmation Before Deleting the Node in Topology @private */
   private getDeleteNodeConfirmation(d: COMPOSERNODES): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(ConfirmationTopologyComponent, { backdrop: 'static' });
     modalRef.componentInstance.topologyType = 'Delete';
     modalRef.componentInstance.topologyname = d.name;
@@ -937,11 +947,12 @@
       if (result) {
         this.deleteNode(d);
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
   /** Delete nodes @private */
   private deleteNode(d: COMPOSERNODES): void {
-    // tslint:disable-next-line: max-func-body-length
     this.nodes.forEach((node: VNFD): void => {
       if (node.id === d.id) {
         if (d.type === 'cp') {
@@ -963,9 +974,7 @@
             if (getRelatedVDUCPD !== undefined && getRelatedVDUID !== undefined) {
               this.vnfdPackageDetails.vdu.forEach((vdu: VDU): void => {
                 if (vdu.id === getRelatedVDUID) {
-                  const posINTCPD: number = vdu['int-cpd'].findIndex((intCPD: VDUINTCPD): boolean => {
-                    return intCPD.id === getRelatedVDUCPD;
-                  });
+                  const posINTCPD: number = vdu['int-cpd'].findIndex((intCPD: VDUINTCPD): boolean => intCPD.id === getRelatedVDUCPD);
                   if (posINTCPD !== -1) {
                     vdu['int-cpd'].splice(posINTCPD, 1);
                   }
@@ -975,26 +984,20 @@
           }
         } else if (d.type === 'intcp') {
           this.vnfdPackageDetails.vdu.forEach((vdu: VDU): void => {
-            const posINTCPD: number = vdu['int-cpd'].findIndex((intCPD: VDUINTCPD): boolean => {
-              return intCPD.id === d.id;
-            });
+            const posINTCPD: number = vdu['int-cpd'].findIndex((intCPD: VDUINTCPD): boolean => intCPD.id === d.id);
             if (posINTCPD !== -1) {
               vdu['int-cpd'].splice(posINTCPD, 1);
             }
           });
         } else if (d.type === 'intvl') {
-          const posINTVLD: number = this.vnfdPackageDetails['int-virtual-link-desc'].findIndex((intVLD: IVLD): boolean => {
-            return intVLD.id === d.id;
-          });
+          const posINTVLD: number = this.vnfdPackageDetails['int-virtual-link-desc'].findIndex((intVLD: IVLD): boolean => intVLD.id === d.id);
           if (posINTVLD !== -1) {
             this.vnfdPackageDetails['int-virtual-link-desc'].splice(posINTVLD, 1);
           }
           if (this.vnfdPackageDetails.vdu !== undefined) {
             this.vnfdPackageDetails.vdu.forEach((vduDetails: VDU): void => {
               if (vduDetails['int-cpd'] !== undefined) {
-                const newVDUintCPDArray: VDUINTCPD[] = vduDetails['int-cpd'].filter((item: VDUINTCPD): boolean => {
-                  return item['int-virtual-link-desc'] !== undefined ? item['int-virtual-link-desc'] !== d.id ? true : false : true;
-                });
+                const newVDUintCPDArray: VDUINTCPD[] = vduDetails['int-cpd'].filter((item: VDUINTCPD): boolean => item['int-virtual-link-desc'] !== undefined ? item['int-virtual-link-desc'] !== d.id ? true : false : true);
                 vduDetails['int-cpd'] = newVDUintCPDArray;
               }
             });
@@ -1039,7 +1042,7 @@
     this.notifierService.notify('warning', this.translateService.instant('PAGE.VNFPACKAGE.VNFCOMPOSE.YOUCANNOTDELETELINK'));
   }
   /** Selected nodes @private */
-  // tslint:disable-next-line: no-any
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   private selectedNode(nodeSeleced: any, d: COMPOSERNODES): void {
     const alreadyIsActive: boolean = nodeSeleced.select('#' + d.id).classed(this.activeNode);
     this.deselectAllNodes();
diff --git a/src/app/packages/vnf-packages/VNFPackagesComponent.ts b/src/app/packages/vnf-packages/VNFPackagesComponent.ts
index 8169782..fc85d71 100644
--- a/src/app/packages/vnf-packages/VNFPackagesComponent.ts
+++ b/src/app/packages/vnf-packages/VNFPackagesComponent.ts
@@ -238,6 +238,7 @@
     }
     /** Handle compose new ns package method  @public */
     public composeVNFPackage(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(ComposePackages, { backdrop: 'static' }).componentInstance.params = { page: 'vnf-package' };
     }
 
diff --git a/src/app/page-not-found/PageNotFoundComponent.ts b/src/app/page-not-found/PageNotFoundComponent.ts
index ef515ec..2842f0e 100644
--- a/src/app/page-not-found/PageNotFoundComponent.ts
+++ b/src/app/page-not-found/PageNotFoundComponent.ts
@@ -38,5 +38,4 @@
     public ngOnInit(): void {
         //donothing
     }
-
 }
diff --git a/src/app/projects/ProjectsComponent.ts b/src/app/projects/ProjectsComponent.ts
index 052e639..982421e 100644
--- a/src/app/projects/ProjectsComponent.ts
+++ b/src/app/projects/ProjectsComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Project details Component.
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnDestroy, OnInit } from '@angular/core';
 import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
 import { TranslateService } from '@ngx-translate/core';
@@ -32,7 +33,6 @@
 import { RestService } from 'RestService';
 import { Subscription } from 'rxjs';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -146,13 +146,16 @@
 
     /** Modal service to initiate the project add @private */
     public projectAdd(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(ProjectCreateUpdateComponent, { size: 'lg', backdrop: 'static' });
         modalRef.componentInstance.projectType = 'Add';
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.generateData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** smart table listing manipulation @private */
@@ -197,7 +200,9 @@
             });
             this.dataSource.load(this.projectData).then((data: boolean) => {
                 this.isLoadingResults = false;
-            }).catch();
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA) => {
             this.restService.handleError(error, 'get');
             this.isLoadingResults = false;
diff --git a/src/app/projects/ProjectsModule.ts b/src/app/projects/ProjectsModule.ts
index 16147b9..22bbc27 100644
--- a/src/app/projects/ProjectsModule.ts
+++ b/src/app/projects/ProjectsModule.ts
@@ -52,7 +52,6 @@
 /**
  * Creating @NgModule component for Modules
  */
-// tslint:disable-next-line: no-stateless-class
 @NgModule({
     imports: [
         FormsModule,
@@ -75,9 +74,6 @@
     ],
     providers: [
         DataService
-    ],
-    entryComponents: [
-        ProjectCreateUpdateComponent
     ]
 })
 /** Exporting a class @exports ProjectsModule */
diff --git a/src/app/projects/project-create-update/ProjectCreateUpdateComponent.ts b/src/app/projects/project-create-update/ProjectCreateUpdateComponent.ts
index bb1207a..9f8cc83 100644
--- a/src/app/projects/project-create-update/ProjectCreateUpdateComponent.ts
+++ b/src/app/projects/project-create-update/ProjectCreateUpdateComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Project Add Modal
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
@@ -30,7 +31,6 @@
 import { ProjectService } from 'ProjectService';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -245,6 +245,7 @@
 
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.projectForm.controls[controlName];
     }
 
diff --git a/src/app/roles/RolesComponent.ts b/src/app/roles/RolesComponent.ts
index 82f20b4..49819b4 100644
--- a/src/app/roles/RolesComponent.ts
+++ b/src/app/roles/RolesComponent.ts
@@ -51,8 +51,9 @@
   /** Return to role datails list */
   public redirectToList(getURL: string): void {
     if (getURL === '/roles') {
-      this.router.navigate(['/roles/details']).catch();
+      this.router.navigate(['/roles/details']).catch((): void => {
+        // Catch Navigation Error
+    });
     }
   }
-
 }
diff --git a/src/app/roles/RolesModule.ts b/src/app/roles/RolesModule.ts
index 88e1225..1e2c7ff 100644
--- a/src/app/roles/RolesModule.ts
+++ b/src/app/roles/RolesModule.ts
@@ -75,8 +75,7 @@
 @NgModule({
     imports: [FormsModule, ReactiveFormsModule, CommonModule, HttpClientModule, TranslateModule,
         RouterModule.forChild(routes), NgbModule, PagePerRowModule, Ng2SmartTableModule, LoaderModule, PageReloadModule],
-    declarations: [RolesComponent, RolesDetailsComponent, RolesActionComponent, RolesCreateEditComponent],
-    entryComponents: [RolesActionComponent]
+    declarations: [RolesComponent, RolesDetailsComponent, RolesActionComponent, RolesCreateEditComponent]
 })
 /**
  * AppModule is the Root module for application
diff --git a/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts b/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts
index 0419c5f..87e1b86 100644
--- a/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts
+++ b/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Roles Create and Edit Component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpClient, HttpHeaders } from '@angular/common/http';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -30,7 +31,6 @@
 import { RestService } from 'RestService';
 import { Permission, PermissionGroup, RoleConfig, RoleData } from 'RolesModel';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -191,7 +191,9 @@
     };
     this.restService.postResource(apiURLHeader, postData).subscribe(() => {
       this.notifierService.notify('success', this.translateService.instant('PAGE.ROLES.CREATEDSUCCESSFULLY'));
-      this.router.navigate(['/roles/details']).catch();
+      this.router.navigate(['/roles/details']).catch((): void => {
+        // Catch Navigation Error
+    });
     }, (error: ERRORDATA) => {
       this.isLoadingResults = false;
       this.restService.handleError(error, 'post');
@@ -229,7 +231,9 @@
     };
     this.restService.patchResource(apiURLHeader, postData).subscribe(() => {
       this.notifierService.notify('success', this.translateService.instant('PAGE.ROLES.UPDATEDSUCCESSFULLY'));
-      this.router.navigate(['/roles/details']).catch();
+      this.router.navigate(['/roles/details']).catch((): void => {
+        // Catch Navigation Error
+    });
     }, (error: ERRORDATA) => {
       this.isLoadingResults = false;
       this.restService.handleError(error, 'patch');
@@ -254,7 +258,6 @@
       }
       this.viewMode = 'text';
     }
-
   }
 
   /** Generate role permission post data @private */
@@ -282,6 +285,7 @@
         this.roleForm.value.permissions = this.roleForm.value.permissions.replace(/'/g, '"');
         const rolePermission: {} = JSON.parse(this.roleForm.value.permissions);
         for (const key of Object.keys(rolePermission)) {
+          // eslint-disable-next-line security/detect-object-injection
           if (typeof rolePermission[key] !== 'boolean') {
             this.notifierService.notify('error', this.translateService.instant('PAGE.ROLES.ROLEKEYERROR', { roleKey: key }));
             return false;
@@ -294,7 +298,6 @@
 
   /** Get role data from NBI based on ID and apply filter @private */
   private getRoleData(): void {
-    // tslint:disable-next-line: no-backbone-get-set-outside-model
     this.roleRef = this.activatedRoute.snapshot.paramMap.get('id');
     if (!isNullOrUndefined(this.roleRef)) {
       this.restService.getResource(environment.ROLES_URL + '/' + this.roleRef).subscribe((data: RoleData) => {
@@ -302,7 +305,9 @@
         this.filterRoleData(data.permissions);
         this.isLoadingResults = false;
       }, (error: ERRORDATA) => {
-        this.router.navigate(['/roles/details']).catch();
+        this.router.navigate(['/roles/details']).catch((): void => {
+          // Catch Navigation Error
+      });
         this.restService.handleError(error, 'get');
       });
     }
@@ -313,6 +318,7 @@
     Object.keys(permissions).forEach((permission: string) => {
       jsonpath.apply(this.rolePermissions, '$..permissions[?(@.operation == "' + permission + '")]', (response: Permission) => {
         if (response.operation === permission) {
+          // eslint-disable-next-line security/detect-object-injection
           response.value = permissions[permission];
         }
         return response;
@@ -331,5 +337,4 @@
       });
     });
   }
-
 }
diff --git a/src/app/roles/roles-details/RolesDetailsComponent.ts b/src/app/roles/roles-details/RolesDetailsComponent.ts
index 89affae..9c2e3e3 100644
--- a/src/app/roles/roles-details/RolesDetailsComponent.ts
+++ b/src/app/roles/roles-details/RolesDetailsComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Roles Deatils component.
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnInit } from '@angular/core';
 import { Router } from '@angular/router';
 import { TranslateService } from '@ngx-translate/core';
@@ -30,7 +31,6 @@
 import { RoleData, RoleDetails } from 'RolesModel';
 import { Subscription } from 'rxjs';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -159,7 +159,9 @@
       });
       this.dataSource.load(this.roleData).then((data: boolean) => {
         this.isLoadingResults = false;
-      }).catch();
+      }).catch((): void => {
+        // Catch Navigation Error
+    });
     }, (error: ERRORDATA) => {
       this.restService.handleError(error, 'get');
       this.isLoadingResults = false;
@@ -188,5 +190,4 @@
   public ngOnDestroy(): void {
     this.generateDataSub.unsubscribe();
   }
-
 }
diff --git a/src/app/sdn-controller/SDNControllerComponent.ts b/src/app/sdn-controller/SDNControllerComponent.ts
index 661882c..247553a 100644
--- a/src/app/sdn-controller/SDNControllerComponent.ts
+++ b/src/app/sdn-controller/SDNControllerComponent.ts
@@ -49,7 +49,9 @@
     /** Return to list NS Package List */
     public redirectToList(getURL: string): void {
         if (getURL === '/sdn') {
-            this.router.navigate(['/sdn/details']).catch();
+            this.router.navigate(['/sdn/details']).catch((): void => {
+                // Catch Navigation Error
+            });
         }
     }
 }
diff --git a/src/app/sdn-controller/SDNControllerModule.ts b/src/app/sdn-controller/SDNControllerModule.ts
index 6da4a5c..9b2f523 100644
--- a/src/app/sdn-controller/SDNControllerModule.ts
+++ b/src/app/sdn-controller/SDNControllerModule.ts
@@ -68,7 +68,6 @@
         PagePerRowModule, LoaderModule, PageReloadModule],
     declarations: [SDNControllerComponent, SDNControllerDetailsComponent, SDNControllerInfoComponent, NewSDNControllerComponent],
     providers: [DataService],
-    entryComponents: [SDNControllerInfoComponent, NewSDNControllerComponent],
     schemas: [CUSTOM_ELEMENTS_SCHEMA]
 })
 /** Exporting a class @exports SDNControllerModule */
@@ -76,7 +75,7 @@
     /**
      * Lifecyle Hooks the trigger before component is instantiate
      */
-    public ngOnInit(): void {
-        //Empty Class
-    }
+     constructor() {
+        //Empty
+      }
 }
diff --git a/src/app/sdn-controller/sdn-controller-details/SDNControllerDetailsComponent.ts b/src/app/sdn-controller/sdn-controller-details/SDNControllerDetailsComponent.ts
index 589f13e..ef2f350 100644
--- a/src/app/sdn-controller/sdn-controller-details/SDNControllerDetailsComponent.ts
+++ b/src/app/sdn-controller/sdn-controller-details/SDNControllerDetailsComponent.ts
@@ -206,12 +206,15 @@
 
     /** Compose new SDN Controller @public */
     public composeSDN(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(NewSDNControllerComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /**
@@ -237,11 +240,12 @@
             }
             this.dataSource.load(this.sdnData).then((data: {}) => {
                 this.isLoadingResults = false;
-            }).catch();
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA) => {
             this.restService.handleError(error, 'get');
             this.isLoadingResults = false;
         });
     }
-
 }
diff --git a/src/app/user-settings/UserSettingsComponent.ts b/src/app/user-settings/UserSettingsComponent.ts
index 19b525f..5212eb5 100644
--- a/src/app/user-settings/UserSettingsComponent.ts
+++ b/src/app/user-settings/UserSettingsComponent.ts
@@ -83,10 +83,8 @@
         });
         const setLanguage: string = localStorage.getItem('languageCode');
         if (setLanguage !== null && this.validateLanguageList(setLanguage)) {
-            // tslint:disable-next-line:no-backbone-get-set-outside-model
             this.usersettingsForm.get('selectedLanguage').setValue(setLanguage);
         } else {
-            // tslint:disable-next-line:no-backbone-get-set-outside-model
             this.usersettingsForm.get('selectedLanguage').setValue('en');
         }
     }
diff --git a/src/app/users/UsersComponent.ts b/src/app/users/UsersComponent.ts
index 178b979..b14c2e7 100644
--- a/src/app/users/UsersComponent.ts
+++ b/src/app/users/UsersComponent.ts
@@ -49,7 +49,9 @@
     /** Return to list NS Package List */
     public redirectToList(getURL: string): void {
         if (getURL === '/users') {
-            this.router.navigate(['/users/details']).catch();
+            this.router.navigate(['/users/details']).catch((): void => {
+                // Catch Navigation Error
+            });
         }
     }
 }
diff --git a/src/app/users/UsersModule.ts b/src/app/users/UsersModule.ts
index 8b5f316..2294886 100644
--- a/src/app/users/UsersModule.ts
+++ b/src/app/users/UsersModule.ts
@@ -63,15 +63,14 @@
         FlexLayoutModule, NgSelectModule, NgbModule, RouterModule.forChild(routes), PagePerRowModule, LoaderModule,
         PageReloadModule, ChangePasswordModule],
     declarations: [UsersComponent, UserDetailsComponent, ProjectRoleComponent],
-    providers: [DataService],
-    entryComponents: [ProjectRoleComponent]
+    providers: [DataService]
 })
 /** Exporting a class @exports UsersModule */
 export class UsersModule {
     /**
      * Lifecyle Hooks the trigger before component is instantiate
      */
-    public ngOnInit(): void {
-        // Empty Block
-    }
+     constructor() {
+        //Empty
+      }
 }
diff --git a/src/app/users/add-user/AddEditUserComponent.ts b/src/app/users/add-user/AddEditUserComponent.ts
index 0e9456a..076cfba 100644
--- a/src/app/users/add-user/AddEditUserComponent.ts
+++ b/src/app/users/add-user/AddEditUserComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Add Edit Component.
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -29,7 +30,6 @@
 import { environment } from 'environment';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -265,6 +265,7 @@
 
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.userForm.controls[controlName];
     }
 
diff --git a/src/app/users/project-role/ProjectRoleComponent.ts b/src/app/users/project-role/ProjectRoleComponent.ts
index 600cecd..3a7e612 100644
--- a/src/app/users/project-role/ProjectRoleComponent.ts
+++ b/src/app/users/project-role/ProjectRoleComponent.ts
@@ -141,7 +141,6 @@
 
     /** Handle FormArray Controls @public */
     public getControls(): AbstractControl[] {
-        // tslint:disable-next-line:no-backbone-get-set-outside-model
         return (this.projectRoleForm.get('project_role_mappings') as FormArray).controls;
     }
 
@@ -185,7 +184,6 @@
     /** Set all roles and project values to the form @public */
     public loadMapping(): void {
         this.userDetails.project_role_mappings.forEach((data: ProjectRoleMappings): void => {
-            // tslint:disable-next-line:no-backbone-get-set-outside-model
             this.projectRoleFormArray = this.projectRoleForm.get('project_role_mappings') as FormArray;
             this.projectRoleFormArray.push(this.projectRoleParamsBuilder);
         });
@@ -229,7 +227,6 @@
 
     /** Add extra mapping and set empty project and roles @public */
     public addMapping(): void {
-        // tslint:disable-next-line:no-backbone-get-set-outside-model
         this.projectRoleFormArray = this.projectRoleForm.get('project_role_mappings') as FormArray;
         this.projectRoleFormArray.push(this.projectRoleParamsBuilder);
     }
diff --git a/src/app/users/user-details/UserDetailsComponent.ts b/src/app/users/user-details/UserDetailsComponent.ts
index aede6e2..ba24454 100644
--- a/src/app/users/user-details/UserDetailsComponent.ts
+++ b/src/app/users/user-details/UserDetailsComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file users details Component.
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnDestroy, OnInit } from '@angular/core';
 import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
 import { TranslateService } from '@ngx-translate/core';
@@ -32,7 +33,6 @@
 import { SharedService } from 'SharedService';
 import { UserData, UserDetail } from 'UserModel';
 import { UsersActionComponent } from 'UsersActionComponent';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -146,6 +146,7 @@
 
   /** on Navigate to Composer Page @public */
   public composeUser(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(AddEditUserComponent, { backdrop: 'static' });
     modalRef.componentInstance.userTitle = this.translateService.instant('PAGE.USERS.NEWUSER');
     modalRef.componentInstance.userType = 'add';
@@ -153,7 +154,9 @@
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+    });
   }
 
   /** smart table listing manipulation @private */
@@ -206,7 +209,9 @@
       }
       this.dataSource.load(this.userData).then((data: {}) => {
         this.isLoadingResults = false;
-      }).catch();
+      }).catch((): void => {
+        // Catch Navigation Error
+      });
     }, (error: ERRORDATA) => {
       this.restService.handleError(error, 'get');
       this.isLoadingResults = false;
diff --git a/src/app/utilities/change-password/ChangePasswordComponent.ts b/src/app/utilities/change-password/ChangePasswordComponent.ts
index a2036ff..4c6aa5a 100644
--- a/src/app/utilities/change-password/ChangePasswordComponent.ts
+++ b/src/app/utilities/change-password/ChangePasswordComponent.ts
@@ -59,6 +59,7 @@
 
     /** Lifecyle Hooks the trigger before component is instantiate @public */
     public ngOnInit(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(AddEditUserComponent, { backdrop: 'static', keyboard: false });
         modalRef.componentInstance.userID = localStorage.getItem('user_id');
         if (this.editType === 'changePassword') {
@@ -72,5 +73,4 @@
         }).catch((err: Error): void => { // catch error
         });
     }
-
 }
diff --git a/src/app/utilities/change-password/ChangePasswordModule.ts b/src/app/utilities/change-password/ChangePasswordModule.ts
index bd64f9e..6c0524a 100644
--- a/src/app/utilities/change-password/ChangePasswordModule.ts
+++ b/src/app/utilities/change-password/ChangePasswordModule.ts
@@ -32,8 +32,7 @@
 @NgModule({
     imports: [CommonModule, TranslateModule, FormsModule, ReactiveFormsModule, NgSelectModule, LoaderModule],
     declarations: [AddEditUserComponent],
-    exports: [AddEditUserComponent],
-    entryComponents: [AddEditUserComponent]
+    exports: [AddEditUserComponent]
 })
 /** Exporting a class @exports ChangePasswordModule */
 export class ChangePasswordModule {
diff --git a/src/app/utilities/clone-package/ClonePackageComponent.ts b/src/app/utilities/clone-package/ClonePackageComponent.ts
index 125a726..02db8d8 100644
--- a/src/app/utilities/clone-package/ClonePackageComponent.ts
+++ b/src/app/utilities/clone-package/ClonePackageComponent.ts
@@ -163,7 +163,6 @@
           url: this.endPoint,
           httpOptions: { headers: apiHeader }
         };
-        // tslint:disable-next-line: completed-docs
         this.restService.postResource(apiURLHeader, content).subscribe((result: { id: string }): void => {
           this.activeModal.close(modalData);
           this.isLoadingResults = false;
diff --git a/src/app/utilities/compose-packages/ComposePackages.ts b/src/app/utilities/compose-packages/ComposePackages.ts
index c621215..6f2a031 100644
--- a/src/app/utilities/compose-packages/ComposePackages.ts
+++ b/src/app/utilities/compose-packages/ComposePackages.ts
@@ -34,7 +34,7 @@
 import { SharedService } from 'SharedService';
 
 /** This is added globally by the tar.js library */
-// tslint:disable-next-line: no-any
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
 declare const Tar: any;
 
 /**
@@ -46,6 +46,7 @@
   styleUrls: ['./ComposePackages.scss']
 })
 /** Exporting a class @exports ComposePackages */
+// eslint-disable-next-line @angular-eslint/component-class-suffix
 export class ComposePackages implements OnInit {
   /** Invoke service injectors @public */
   public injector: Injector;
@@ -148,7 +149,7 @@
       }
       const descriptor: string = this.packageYaml(this.params.page);
       try {
-        // tslint:disable-next-line: no-any
+        // eslint-disable-next-line @typescript-eslint/no-explicit-any
         const tar: any = new Tar();
         const out: Uint8Array = tar.append(this.packagesForm.value.name + '/' + this.packagesForm.value.name + '.yaml',
           descriptor, { type: '0' });
@@ -166,7 +167,6 @@
       url: this.endPoint,
       httpOptions: { headers: this.headers }
     };
-    // tslint:disable-next-line: completed-docs
     this.restService.postResource(apiURLHeader, packageContent).subscribe((result: { id: string }): void => {
       this.isLoadingResults = false;
       this.activeModal.close();
diff --git a/src/app/utilities/confirmation-topology/ConfirmationTopologyComponent.ts b/src/app/utilities/confirmation-topology/ConfirmationTopologyComponent.ts
index a1a79b9..de9dac2 100644
--- a/src/app/utilities/confirmation-topology/ConfirmationTopologyComponent.ts
+++ b/src/app/utilities/confirmation-topology/ConfirmationTopologyComponent.ts
@@ -98,5 +98,4 @@
     };
     this.activeModal.close(modalData);
   }
-
 }
diff --git a/src/app/utilities/dragDropUpload/DragDirective.ts b/src/app/utilities/dragDropUpload/DragDirective.ts
index 735ac7c..d052b3f 100644
--- a/src/app/utilities/dragDropUpload/DragDirective.ts
+++ b/src/app/utilities/dragDropUpload/DragDirective.ts
@@ -31,7 +31,6 @@
  * Creating Directive
  * @Directive for handling the files.
  */
-// tslint:disable-next-line:export-name
 @Directive({
   selector: '[appDrag]'
 })
@@ -77,6 +76,7 @@
     const files: FileHandle[] = [];
     Array.from(evt.dataTransfer.files).forEach((listFiles: File, index: number) => {
       const file: File = listFiles;
+      // eslint-disable-next-line @microsoft/sdl/no-angular-bypass-sanitizer
       const url: SafeUrl = this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(file));
       files.push({ file, url });
     });
diff --git a/src/app/utilities/edit-packages/EditPackagesComponent.ts b/src/app/utilities/edit-packages/EditPackagesComponent.ts
index e38d3cf..42998b8 100644
--- a/src/app/utilities/edit-packages/EditPackagesComponent.ts
+++ b/src/app/utilities/edit-packages/EditPackagesComponent.ts
@@ -90,6 +90,7 @@
 
   /** options @public */
   public options: {} = {
+    // eslint-disable-next-line no-invalid-this
     mode: this.modeDefault,
     showCursorWhenSelecting: true,
     autofocus: true,
@@ -172,9 +173,7 @@
       Accept: 'text/plain',
       'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0'
     });
-    // tslint:disable-next-line: no-backbone-get-set-outside-model
     this.paramsID = this.activatedRoute.snapshot.paramMap.get('id');
-    // tslint:disable-next-line: no-backbone-get-set-outside-model
     this.pacakgeType = this.activatedRoute.snapshot.paramMap.get('type');
     this.generateURLPath();
   }
@@ -254,9 +253,13 @@
         (packageType !== 'netslice') ? 'PAGE.NSPACKAGE.EDITPACKAGES.UPDATEDSUCCESSFULLY' : 'PAGE.NETSLICE.UPDATEDSUCCESSFULLY'));
       if (showgraph) {
         if (packageType === 'nsd') {
-          this.router.navigate(['/packages/ns/compose/' + this.paramsID]).catch();
+          this.router.navigate(['/packages/ns/compose/' + this.paramsID]).catch((): void => {
+            // Catch Navigation Error
+        });
         } else if (packageType === 'vnf') {
-          this.router.navigate(['/packages/vnf/compose/' + this.paramsID]).catch();
+          this.router.navigate(['/packages/vnf/compose/' + this.paramsID]).catch((): void => {
+            // Catch Navigation Error
+        });
         }
       }
       this.getEditFileData();
@@ -301,14 +304,15 @@
     this.restService.getResource(this.getUpdateURL + '/' + this.paramsID + '/' + this.getFileContentType, httpOptions)
       .subscribe((nsData: NSDDetails[]) => {
         const getJson: string = jsyaml.load(nsData.toString(), { json: true });
-        //tslint:disable-next-line:no-string-literal
         this.defaults['text/x-yaml'] = nsData.toString();
         this.defaults['text/json'] = JSON.stringify(getJson, null, '\t');
         this.isLoadingResults = false;
       }, (error: ERRORDATA) => {
         error.error = typeof error.error === 'string' ? jsyaml.load(error.error) : error.error;
         if (error.error.status === HttpStatus.NOT_FOUND || error.error.status === HttpStatus.UNAUTHORIZED  ) {
-          this.router.navigateByUrl('404', { skipLocationChange: true }).catch();
+          this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
+            // Catch Navigation Error
+        });
         } else {
           this.restService.handleError(error, 'get');
         }
diff --git a/src/app/utilities/loader/LoaderComponent.ts b/src/app/utilities/loader/LoaderComponent.ts
index ee8cab8..4190a7d 100644
--- a/src/app/utilities/loader/LoaderComponent.ts
+++ b/src/app/utilities/loader/LoaderComponent.ts
@@ -46,5 +46,4 @@
       this.getMessage = '';
     }
   }
-
 }
diff --git a/src/app/utilities/loader/LoaderModule.ts b/src/app/utilities/loader/LoaderModule.ts
index ba81b6a..e235be0 100644
--- a/src/app/utilities/loader/LoaderModule.ts
+++ b/src/app/utilities/loader/LoaderModule.ts
@@ -35,7 +35,7 @@
   /**
    * Lifecyle Hooks the trigger before component is instantiate
    */
-  public ngOnInit(): void {
-    // Empty Block
+   constructor() {
+    //Empty
   }
 }
diff --git a/src/app/utilities/netslice-instances-action/NetsliceInstancesActionComponent.ts b/src/app/utilities/netslice-instances-action/NetsliceInstancesActionComponent.ts
index 0e528a8..ab7d51f 100644
--- a/src/app/utilities/netslice-instances-action/NetsliceInstancesActionComponent.ts
+++ b/src/app/utilities/netslice-instances-action/NetsliceInstancesActionComponent.ts
@@ -69,6 +69,7 @@
 
     /** Shows information using modalservice @public */
     public infoNetSliceInstance(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(ShowInfoComponent, { backdrop: 'static' }).componentInstance.params = {
             id: this.instanceID,
             page: 'net-slice-instance',
@@ -78,13 +79,16 @@
 
     /** Delete NetSlice Instance packages @public */
     public deleteNetSliceInstance(forceAction: boolean): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
         modalRef.componentInstance.params = {forceDeleteType: forceAction};
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
     /** History of operations for an Instanace @public */
     public historyOfOperations(): void {
diff --git a/src/app/utilities/netslice-packages-action/NetslicePackagesActionComponent.ts b/src/app/utilities/netslice-packages-action/NetslicePackagesActionComponent.ts
index 8be5f50..78e6e51 100644
--- a/src/app/utilities/netslice-packages-action/NetslicePackagesActionComponent.ts
+++ b/src/app/utilities/netslice-packages-action/NetslicePackagesActionComponent.ts
@@ -71,16 +71,20 @@
 
     /** Delete NetSliceTemplate packages @public */
     public deleteNetSliceTemplate(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, {backdrop: 'static'});
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** Shows information using modalservice @public */
     public infoNetSlice(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(ShowInfoComponent, { backdrop: 'static' }).componentInstance.params = {
             id: this.instanceID,
             page: 'net-slice-package',
@@ -97,6 +101,7 @@
 
     /** Instantiate Net Slice using modalservice @public */
     public instantiateNetSlice(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(InstantiateNetSliceTemplateComponent, { backdrop: 'static' });
     }
 }
diff --git a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html
index 3ac6a60..517dbde 100644
--- a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html
+++ b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html
@@ -29,7 +29,7 @@
         <i class="far fa-trash-alt icons"></i>
     </button>
     <div class="btn-group" placement="bottom-right" ngbDropdown display="dynamic" container="body">
-        <button type="button" class="btn btn-primary" ngbDropdownToggle placement="top" container="body" [disabled]="operationalStatus === 'failed' || configStatus === 'failed'" ngbTooltip="{{'VIMACTION' | translate}}">
+        <button type="button" class="btn btn-primary" ngbDropdownToggle placement="top" container="body" [disabled]="operationalStatus === 'failed' || configStatus === 'failed'|| k8sStatus" ngbTooltip="{{'VIMACTION' | translate}}">
             <i class="fas fa-desktop"></i>
         </button>
         <div class="dropdown-menu list-action-dropdown" ngbDropdownMenu>
diff --git a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts
index 5f9d5e3..ea7fa61 100644
--- a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts
+++ b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file NS InstancesAction Component
  */
+import { isNullOrUndefined } from 'util';
 import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core';
 import { Router } from '@angular/router';
 import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
@@ -36,7 +37,6 @@
 import { SharedService } from 'SharedService';
 import { ShowInfoComponent } from 'ShowInfoComponent';
 import { StartStopRebuildComponent } from 'StartStopRebuildComponent';
-import { isNullOrUndefined } from 'util';
 import { VerticalScalingComponent } from 'VerticalScalingComponent';
 import { VmMigrationComponent } from 'VmMigrationComponent';
 import { DF, VDU, VNFD } from 'VNFDModel';
@@ -66,6 +66,9 @@
   /** Operational Status Check @public */
   public operationalStatus: string;
 
+  /** CNF Status Check @public */
+  public k8sStatus: boolean = false;
+
   /** get Admin Details @public */
   public getAdminDetails: {};
 
@@ -106,6 +109,7 @@
   private cd: ChangeDetectorRef;
 
   /** Set timeout @private */
+  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
   private timeOut: number = 100;
 
   constructor(injector: Injector) {
@@ -127,12 +131,27 @@
     this.operationalStatus = this.value.OperationalStatus;
     this.instanceID = this.value.identifier;
     this.getAdminDetails = this.value.adminDetails;
+    for (const key of Object.keys(this.getAdminDetails)) {
+      if (key === 'deployed') {
+        // eslint-disable-next-line security/detect-object-injection
+        const adminData: {} = this.getAdminDetails[key];
+        for (const k8sData of Object.keys(adminData)) {
+          if (k8sData === 'K8s') {
+            // eslint-disable-next-line security/detect-object-injection
+            if (adminData[k8sData].length !== 0) {
+              this.k8sStatus = true;
+            }
+          }
+        }
+      }
+    }
     this.isShowOperationalDashboard = !isNullOrUndefined(this.value.vcaStatus) ?
       Object.keys(this.value.vcaStatus).length === 0 && typeof this.value.vcaStatus === 'object' : true;
   }
 
   /** Shows information using modalservice @public */
   public infoNs(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     this.modalService.open(ShowInfoComponent, { backdrop: 'static' }).componentInstance.params = {
       id: this.instanceID,
       page: 'ns-instance',
@@ -142,13 +161,16 @@
 
   /** Delete NS Instanace @public */
   public deleteNSInstance(forceAction: boolean): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
     modalRef.componentInstance.params = { forceDeleteType: forceAction };
     modalRef.result.then((result: MODALCLOSERESPONSEDATA): void => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** History of operations for an Instanace @public */
@@ -167,6 +189,7 @@
 
   /** Exec NS Primitive @public */
   public execNSPrimitiveModal(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     this.modalService.open(NSPrimitiveComponent, { backdrop: 'static' }).componentInstance.params = {
       memberIndex: this.value.memberIndex,
       nsConfig: this.value.nsConfig,
@@ -186,6 +209,7 @@
               if (vduData['monitoring-parameter'] !== undefined && vduData['monitoring-parameter'].length > 0) {
                 this.isLoadingNSInstanceAction = false;
                 const location: string = environment.GRAFANA_URL + '/' + this.instanceID + '/osm-ns-metrics-metrics';
+                // eslint-disable-next-line security/detect-non-literal-fs-filename
                 window.open(location);
               } else {
                 this.isLoadingNSInstanceAction = false;
@@ -246,6 +270,7 @@
 
   /** Open the scaling pop-up @public */
   public openScaling(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(ScalingComponent, { backdrop: 'static' });
     modalRef.componentInstance.params = {
       id: this.instanceID,
@@ -258,11 +283,14 @@
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** To open VM Migration in NS Instances */
   public openVmMigration(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(VmMigrationComponent, { backdrop: 'static' });
     modalRef.componentInstance.params = {
       id: this.instanceID
@@ -271,11 +299,14 @@
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** To open the Ns Update pop-up */
   public openNsUpdate(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(NsUpdateComponent, { backdrop: 'static' });
     modalRef.componentInstance.params = {
       id: this.instanceID
@@ -284,11 +315,14 @@
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** To open the Start, Stop & Rebuild pop-up */
   public openStart(actionType: string): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(StartStopRebuildComponent, { backdrop: 'static' });
     modalRef.componentInstance.params = {
       id: this.instanceID
@@ -305,11 +339,14 @@
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** To open the vertical Scaling pop-up */
   public openVerticalScaling(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(VerticalScalingComponent, { backdrop: 'static' });
     modalRef.componentInstance.params = {
       id: this.instanceID
@@ -318,7 +355,9 @@
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /**
diff --git a/src/app/utilities/ns-packages-action/NsPackagesActionComponent.ts b/src/app/utilities/ns-packages-action/NsPackagesActionComponent.ts
index 18f3e5a..a673e15 100644
--- a/src/app/utilities/ns-packages-action/NsPackagesActionComponent.ts
+++ b/src/app/utilities/ns-packages-action/NsPackagesActionComponent.ts
@@ -89,6 +89,7 @@
   private cd: ChangeDetectorRef;
 
   /** Set timeout @private */
+  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
   private timeOut: number = 1000;
 
   constructor(injector: Injector) {
@@ -114,17 +115,21 @@
 
   /** Instantiate NS using modalservice @public */
   public instantiateNS(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     this.modalService.open(InstantiateNsComponent, { backdrop: 'static' });
   }
 
   /** Delete NS Package @public */
   public deleteNSPackage(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** Set instance for NSD Edit @public */
@@ -136,6 +141,7 @@
 
   /** list out all the file content of a descriptors @public */
   public showContent(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     this.modalService.open(ShowContentComponent, { backdrop: 'static' }).componentInstance.params = { id: this.nsdID, page: 'nsd' };
   }
 
@@ -182,12 +188,15 @@
 
   /** Clone NS Packages @public */
   public cloneNSPackage(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const cloneModal: NgbModalRef = this.modalService.open(ClonePackageComponent, { backdrop: 'static' });
     cloneModal.componentInstance.params = { id: this.nsdID, page: 'nsd', name: this.nsdName };
     cloneModal.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 }
diff --git a/src/app/utilities/ns-update/NsUpdateComponent.ts b/src/app/utilities/ns-update/NsUpdateComponent.ts
index 80773e2..b33bfc4 100644
--- a/src/app/utilities/ns-update/NsUpdateComponent.ts
+++ b/src/app/utilities/ns-update/NsUpdateComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Ns Update Component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -29,7 +30,6 @@
 import { NSUPDATE, TERMINATEVNF } from 'NSInstanceModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VNFD } from 'VNFDModel';
 import { VNFInstanceDetails } from 'VNFInstanceModel';
 import { WarningComponent } from 'WarningComponent';
@@ -160,12 +160,15 @@
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
+            // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
             this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
                 const memberIndex: string = 'MemberIndex';
                 const vnfinstanceID: string = 'VNFInstanceId';
                 const assignMemberIndex: {} = {
+                    // eslint-disable-next-line security/detect-object-injection
                     id: resVNF[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
                     vnfinstanceId: resVNF[vnfinstanceID]
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
@@ -187,12 +190,15 @@
         let memberIndexFilteredData: {}[] = [];
         const memberIndex: string = 'MemberIndex';
         memberIndexFilteredData = this.nsIdFilteredData.filter((vnfdData: {}[]): boolean =>
+        // eslint-disable-next-line security/detect-object-injection
             vnfdData[memberIndex] === this.memberIndexValue);
         const vnfId: string = 'VNFID';
         const selectedvnfId: string = 'VNFD';
         this.selectedVnf = memberIndexFilteredData;
         for (const data of memberIndexFilteredData) {
+            // eslint-disable-next-line security/detect-object-injection
             this.vnfID = data[vnfId];
+            // eslint-disable-next-line security/detect-object-injection
             this.selectedvnfId = data[selectedvnfId];
         }
     }
@@ -238,6 +244,7 @@
         if (this.nsUpdateForm.value.updateType === 'CHANGE_VNFPKG') {
             this.checkVersion();
         } else {
+            // eslint-disable-next-line security/detect-non-literal-fs-filename
             const modalRef: NgbModalRef = this.modalService.open(WarningComponent, { backdrop: 'static' });
             modalRef.componentInstance.heading = this.translateService.instant('TERMINATEVNF');
             modalRef.componentInstance.confirmationMessage = this.translateService.instant('TERMINATEVNFCONTENT');
@@ -246,8 +253,9 @@
                 if (result.message === CONFIGCONSTANT.done) {
                     this.onSubmit();
                 }
-            }).catch((): void => { //empty
-             });
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }
         this.isLoadingResults = false;
     }
@@ -272,11 +280,14 @@
                 let vnfIdFilteredData: {}[] = [];
                 const vnfID: string = 'VNFID';
                 const version: string = 'version';
+                // eslint-disable-next-line security/detect-object-injection
                 vnfIdFilteredData = vnfDetails.filter((vnfdData: {}[]): boolean => vnfdData[vnfID] === this.vnfID);
                 for (const data of vnfIdFilteredData) {
+                    // eslint-disable-next-line security/detect-object-injection
                     this.vnfversion = data[version];
                 }
                 if (this.version === this.vnfversion) {
+                    // eslint-disable-next-line security/detect-non-literal-fs-filename
                     const modalRef: NgbModalRef = this.modalService.open(WarningComponent, { backdrop: 'static' });
                     modalRef.componentInstance.heading = this.translateService.instant('UPDATENS');
                     modalRef.componentInstance.confirmationMessage = this.translateService.instant('GENERICCONTENT');
@@ -289,6 +300,7 @@
                      }
                     );
                 } else {
+                    // eslint-disable-next-line security/detect-non-literal-fs-filename
                     const modalRef: NgbModalRef = this.modalService.open(WarningComponent, { backdrop: 'static' });
                     modalRef.componentInstance.heading = this.translateService.instant('REDEPLOY');
                     modalRef.componentInstance.confirmationMessage = this.translateService.instant('REDEPLOYCONTENT');
@@ -323,7 +335,9 @@
         };
         this.restService.postResource(apiURLHeader, nsUpdatePayload).subscribe((result: {}): void => {
             this.activeModal.close(modalData);
-            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch();
+            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA): void => {
             this.restService.handleError(error, 'post');
             this.isLoadingResults = false;
@@ -344,6 +358,7 @@
 
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.nsUpdateForm.controls[controlName];
     }
 }
diff --git a/src/app/utilities/osm-repositories-action/OsmRepositoriesActionComponent.ts b/src/app/utilities/osm-repositories-action/OsmRepositoriesActionComponent.ts
index 1f3523d..ed56040 100644
--- a/src/app/utilities/osm-repositories-action/OsmRepositoriesActionComponent.ts
+++ b/src/app/utilities/osm-repositories-action/OsmRepositoriesActionComponent.ts
@@ -68,16 +68,20 @@
 
   /** Delete OSM Repository @public */
   public deleteOsmRepository(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** Edit a osm repo @public */
   public editOsmrepo(id: string): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(OsmRepoCreateUpdateComponent, { backdrop: 'static' });
     modalRef.componentInstance.createupdateType = 'Edit';
     modalRef.componentInstance.osmrepoid = id;
@@ -85,6 +89,8 @@
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 }
diff --git a/src/app/utilities/page-per-row/PagePerRow.ts b/src/app/utilities/page-per-row/PagePerRow.ts
index 6794bfc..4d7f58e 100644
--- a/src/app/utilities/page-per-row/PagePerRow.ts
+++ b/src/app/utilities/page-per-row/PagePerRow.ts
@@ -29,11 +29,13 @@
  * @Component takes PagePerRow.html as template url
  */
 @Component({
+  // eslint-disable-next-line @angular-eslint/component-selector
   selector: 'page-per-row',
   templateUrl: './PagePerRow.html',
   styleUrls: ['./PagePerRow.scss']
 })
 /** Exporting a class @exports PagePerRow */
+// eslint-disable-next-line @angular-eslint/component-class-suffix
 export class PagePerRow {
   /** To inject services @public */
   public injector: Injector;
diff --git a/src/app/utilities/page-per-row/PagePerRowModule.ts b/src/app/utilities/page-per-row/PagePerRowModule.ts
index e5b8a29..66d62cb 100644
--- a/src/app/utilities/page-per-row/PagePerRowModule.ts
+++ b/src/app/utilities/page-per-row/PagePerRowModule.ts
@@ -36,7 +36,7 @@
     /**
      * Lifecyle Hooks the trigger before component is instantiate
      */
-    public ngOnInit(): void {
-        // Empty Block
-    }
+     constructor() {
+        //Empty
+      }
 }
diff --git a/src/app/utilities/page-reload/PageReload.ts b/src/app/utilities/page-reload/PageReload.ts
index 0ea3c3c..f63d59d 100644
--- a/src/app/utilities/page-reload/PageReload.ts
+++ b/src/app/utilities/page-reload/PageReload.ts
@@ -26,11 +26,13 @@
  * @Component takes PageReload.html as template url
  */
 @Component({
+  // eslint-disable-next-line @angular-eslint/component-selector
   selector: 'page-reload',
   templateUrl: './PageReload.html',
   styleUrls: ['./PageReload.scss']
 })
 /** Exporting a class @exports PageReload */
+// eslint-disable-next-line @angular-eslint/component-class-suffix
 export class PageReload {
   /** To inject services @public */
   public injector: Injector;
diff --git a/src/app/utilities/page-reload/PageReloadModule.ts b/src/app/utilities/page-reload/PageReloadModule.ts
index 56c35fd..983f939 100644
--- a/src/app/utilities/page-reload/PageReloadModule.ts
+++ b/src/app/utilities/page-reload/PageReloadModule.ts
@@ -37,7 +37,7 @@
     /**
      * Lifecyle Hooks the trigger before component is instantiate
      */
-    public ngOnInit(): void {
-        // Empty Block
-    }
+     constructor() {
+        //Empty
+      }
 }
diff --git a/src/app/utilities/pdu-instances-action/PDUInstancesActionComponent.ts b/src/app/utilities/pdu-instances-action/PDUInstancesActionComponent.ts
index 8cfb6cf..3c32488 100644
--- a/src/app/utilities/pdu-instances-action/PDUInstancesActionComponent.ts
+++ b/src/app/utilities/pdu-instances-action/PDUInstancesActionComponent.ts
@@ -69,16 +69,20 @@
 
     /** Delete PDU Instances @public */
     public deletePDUInstance(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, {backdrop: 'static'});
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** Shows PDU Instances information using modalservice @public */
     public showInfo(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(ShowInfoComponent, { backdrop: 'static' }).componentInstance.params = {
             id: this.pduInstanceID,
             page: 'pdu-instances',
diff --git a/src/app/utilities/project-link/ProjectLinkComponent.ts b/src/app/utilities/project-link/ProjectLinkComponent.ts
index 35c5b2c..5f956f2 100644
--- a/src/app/utilities/project-link/ProjectLinkComponent.ts
+++ b/src/app/utilities/project-link/ProjectLinkComponent.ts
@@ -47,6 +47,7 @@
   /** Check the project is present for the user @public */
   public isPresent: boolean = false;
   /** Set timeout @private */
+  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
   private timeOut: number = 10;
   /** Instance of the rest service @private */
   private restService: RestService;
@@ -77,5 +78,4 @@
       }, this.timeOut);
     });
   }
-
 }
diff --git a/src/app/utilities/projects-action/ProjectsActionComponent.ts b/src/app/utilities/projects-action/ProjectsActionComponent.ts
index 207d90c..4f9738f 100644
--- a/src/app/utilities/projects-action/ProjectsActionComponent.ts
+++ b/src/app/utilities/projects-action/ProjectsActionComponent.ts
@@ -57,22 +57,28 @@
 
     /** Delete project @public */
     public projectDelete(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** Edit project @public */
     public projectEdit(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(ProjectCreateUpdateComponent, { size: 'lg', backdrop: 'static' });
         modalRef.componentInstance.projectType = 'Edit';
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 }
diff --git a/src/app/utilities/roles-action/RolesActionComponent.ts b/src/app/utilities/roles-action/RolesActionComponent.ts
index 5b4d85b..50eb279 100644
--- a/src/app/utilities/roles-action/RolesActionComponent.ts
+++ b/src/app/utilities/roles-action/RolesActionComponent.ts
@@ -61,12 +61,15 @@
 
   /** Delete Role click handler @public */
   public deleteRole(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** Edit Role click handler @public */
@@ -75,5 +78,4 @@
       // Catch Navigation Error
     });
   }
-
 }
diff --git a/src/app/utilities/scaling/ScalingComponent.ts b/src/app/utilities/scaling/ScalingComponent.ts
index 111c3b8..ff5ec06 100644
--- a/src/app/utilities/scaling/ScalingComponent.ts
+++ b/src/app/utilities/scaling/ScalingComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Scaling Component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -29,7 +30,6 @@
 import { DF as NSDF, VNFPROFILE } from 'NSDModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { DF, SCALING, VNFD } from 'VNFDModel';
 
 /**
@@ -185,7 +185,9 @@
         };
         this.restService.postResource(apiURLHeader, scalingPayload).subscribe((result: {}): void => {
             this.activeModal.close(modalData);
-            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch();
+            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA): void => {
             this.restService.handleError(error, 'post');
             this.isLoadingResults = false;
@@ -194,6 +196,7 @@
 
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.scalingForm.controls[controlName];
     }
 }
diff --git a/src/app/utilities/sdn-controller-action/SDNControllerActionComponent.ts b/src/app/utilities/sdn-controller-action/SDNControllerActionComponent.ts
index cbf3fc1..01796b8 100644
--- a/src/app/utilities/sdn-controller-action/SDNControllerActionComponent.ts
+++ b/src/app/utilities/sdn-controller-action/SDNControllerActionComponent.ts
@@ -65,6 +65,7 @@
 
     /** Show SDN Controller Information @public */
     public showSDNControllerInfo(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(SDNControllerInfoComponent, { backdrop: 'static' }).componentInstance.params = {
             id: this.sdnID,
             page: 'sdn-controller'
@@ -73,11 +74,14 @@
 
     /** Delete SDN Controller @public */
     public deleteSDNController(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 }
diff --git a/src/app/utilities/show-info/ShowInfoComponent.ts b/src/app/utilities/show-info/ShowInfoComponent.ts
index 0fb22e7..015d50c 100644
--- a/src/app/utilities/show-info/ShowInfoComponent.ts
+++ b/src/app/utilities/show-info/ShowInfoComponent.ts
@@ -81,6 +81,7 @@
 
   /** variables to hold options of editor @public */
   public options: {} = {
+    // eslint-disable-next-line no-invalid-this
     mode: this.modeDefault,
     showCursorWhenSelecting: true,
     autofocus: true,
diff --git a/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts b/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts
index 4b0afe0..bde04ba 100644
--- a/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts
+++ b/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file StartStopRebuild Component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -28,7 +29,6 @@
 import { StartStopRebuild } from 'NSInstanceModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { DF, VNFD } from 'VNFDModel';
 import { VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
 
@@ -135,12 +135,15 @@
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
+            // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
             this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
                 const memberIndex: string = 'MemberIndex';
                 const vnfinstanceID: string = 'VNFInstanceId';
                 const assignMemberIndex: {} = {
+                    // eslint-disable-next-line security/detect-object-injection
                     id: resVNF[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
                     vnfinstanceId: resVNF[vnfinstanceID]
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
@@ -164,7 +167,9 @@
                     this.instanceId = id;
                     this.selectedvnfId = vnfInstanceDetail['vnfd-ref'];
                     const VDU: string = 'vdur';
+                    // eslint-disable-next-line security/detect-object-injection
                     if (vnfInstanceDetail[VDU] !== undefined) {
+                        // eslint-disable-next-line security/detect-object-injection
                         vnfInstanceDetail[VDU].forEach((vdu: VDUR): void => {
                             const vnfInstanceDataObj: {} =
                             {
@@ -178,6 +183,7 @@
                         const vduName: string = 'VDU';
                         this.vduId = this.vdu.filter((vdu: {}, index: number, self: {}[]): {} =>
                             index === self.findIndex((t: {}): {} => (
+                                // eslint-disable-next-line security/detect-object-injection
                                 t[vduName] === vdu[vduName]
                             ))
                         );
@@ -193,6 +199,7 @@
     /** Getting count-index by filtering id */
     public getCountIndex(id: string): void {
         const VDU: string = 'VDU';
+        // eslint-disable-next-line security/detect-object-injection
         this.countIndex = this.vdu.filter((vnfdData: {}[]): boolean => vnfdData[VDU] === id);
     }
 
@@ -279,7 +286,9 @@
         };
         this.restService.postResource(apiURLHeader, startPayload).subscribe((result: {}): void => {
             this.activeModal.close(modalData);
-            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch();
+            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA): void => {
             this.restService.handleError(error, 'post');
             this.isLoadingResults = false;
@@ -288,6 +297,7 @@
 
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.startForm.controls[controlName];
     }
 }
diff --git a/src/app/utilities/switch-project/SwitchProjectComponent.ts b/src/app/utilities/switch-project/SwitchProjectComponent.ts
index dffb63a..f3dffcb 100644
--- a/src/app/utilities/switch-project/SwitchProjectComponent.ts
+++ b/src/app/utilities/switch-project/SwitchProjectComponent.ts
@@ -134,7 +134,9 @@
           if (this.router.url.includes('history-operations')) {
             this.router.navigate(['/instances/ns']).then((): void => {
               location.reload();
-            }).catch();
+            }).catch((): void => {
+              // Catch Navigation Error
+          });
           } else {
             location.reload();
           }
diff --git a/src/app/utilities/users-action/UsersActionComponent.ts b/src/app/utilities/users-action/UsersActionComponent.ts
index 1d8e895..cb0b462 100644
--- a/src/app/utilities/users-action/UsersActionComponent.ts
+++ b/src/app/utilities/users-action/UsersActionComponent.ts
@@ -61,16 +61,20 @@
 
     /** Delete User Account @public */
     public deleteUser(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** Edit User Account @public */
     public editUserModal(editType: string): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(AddEditUserComponent, { backdrop: 'static' });
         modalRef.componentInstance.userID = this.value.identifier;
         if (editType === 'editPassword') {
@@ -84,11 +88,14 @@
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** Edit User Account @public */
     public projectRolesModal(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(ProjectRoleComponent, { backdrop: 'static' });
         modalRef.componentInstance.userID = this.value.identifier;
         modalRef.componentInstance.userTitle = this.translateService.instant('PAGE.USERS.EDITPROJECTROLEMAPPING');
@@ -96,6 +103,8 @@
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 }
diff --git a/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts b/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts
index 949506a..4d96f8a 100644
--- a/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts
+++ b/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file VerticalScaling Component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -30,7 +31,6 @@
 import { VerticalScaling } from 'NSInstanceModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
 
 /**
@@ -67,7 +67,7 @@
     public nsIdFilteredData: {}[] = [];
     /** Form valid on submit trigger @public */
     public submitted: boolean = false;
-     /** Contains vduId @public */
+    /** Contains vduId @public */
     public vduId: {};
     /** Items for countIndex @public */
     public countIndex: {}[];
@@ -139,12 +139,15 @@
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
+            // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
             this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
                 const memberIndex: string = 'MemberIndex';
                 const vnfinstanceID: string = 'VNFInstanceId';
                 const assignMemberIndex: {} = {
+                    // eslint-disable-next-line security/detect-object-injection
                     id: resVNF[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
                     vnfinstanceId: resVNF[vnfinstanceID]
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
@@ -168,7 +171,9 @@
                     this.instanceId = id;
                     this.selectedvnfId = vnfInstanceDetail['vnfd-ref'];
                     const VDU: string = 'vdur';
+                    // eslint-disable-next-line security/detect-object-injection
                     if (vnfInstanceDetail[VDU] !== undefined) {
+                        // eslint-disable-next-line security/detect-object-injection
                         vnfInstanceDetail[VDU].forEach((vdu: VDUR): void => {
                             const vnfInstanceDataObj: {} =
                             {
@@ -182,6 +187,7 @@
                         const vduName: string = 'VDU';
                         this.vduId = this.vdu.filter((vdu: {}, index: number, self: {}[]): {} =>
                             index === self.findIndex((t: {}): {} => (
+                                // eslint-disable-next-line security/detect-object-injection
                                 t[vduName] === vdu[vduName]
                             ))
                         );
@@ -196,6 +202,7 @@
     /** Getting count-index by filtering id  */
     public getCountIndex(id: string): void {
         const VDU: string = 'VDU';
+        // eslint-disable-next-line security/detect-object-injection
         this.countIndex = this.vdu.filter((vnfdData: {}[]): boolean => vnfdData[VDU] === id);
     }
 
@@ -235,7 +242,9 @@
         };
         this.restService.postResource(apiURLHeader, scalingPayload).subscribe((result: {}): void => {
             this.activeModal.close(modalData);
-            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch();
+            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA): void => {
             this.restService.handleError(error, 'post');
             this.isLoadingResults = false;
@@ -244,6 +253,7 @@
 
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.scalingForm.controls[controlName];
     }
 }
diff --git a/src/app/utilities/vim-accounts-action/VimAccountsActionComponent.ts b/src/app/utilities/vim-accounts-action/VimAccountsActionComponent.ts
index ffa0340..e3657ad 100644
--- a/src/app/utilities/vim-accounts-action/VimAccountsActionComponent.ts
+++ b/src/app/utilities/vim-accounts-action/VimAccountsActionComponent.ts
@@ -76,12 +76,15 @@
 
     /** Delete VIM Account @public */
     public deleteVIMAccount(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, {backdrop: 'static'});
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** On navigate to Info VimAccount @public */
@@ -105,6 +108,7 @@
 
     /** Show VIM Resources Data @public */
     public showVIMResources(vimDetails: VimAccountDetails): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(ResourcesOverviewComponent, {backdrop: 'static'});
         modalRef.componentInstance.resourcesData = vimDetails;
     }
diff --git a/src/app/utilities/vm-migration/VmMigrationComponent.ts b/src/app/utilities/vm-migration/VmMigrationComponent.ts
index 7ac8af0..e53ea11 100644
--- a/src/app/utilities/vm-migration/VmMigrationComponent.ts
+++ b/src/app/utilities/vm-migration/VmMigrationComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Vm Migration Component
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, Injector, Input, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -28,7 +29,6 @@
 import { VMMIGRATION } from 'NSInstanceModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
 
 /**
@@ -65,7 +65,7 @@
     public instanceId: string;
     /** Form valid on submit trigger @public */
     public submitted: boolean = false;
-     /** Contains vduId @public */
+    /** Contains vduId @public */
     public vduId: {};
     /** Items for countIndex @public */
     public countIndex: {}[];
@@ -129,12 +129,15 @@
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
+            // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
             this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
                 const memberIndex: string = 'MemberIndex';
                 const vnfinstanceID: string = 'VNFInstanceId';
                 const assignMemberIndex: {} = {
+                    // eslint-disable-next-line security/detect-object-injection
                     id: resVNF[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
                     vnfinstanceId: resVNF[vnfinstanceID]
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
@@ -159,7 +162,9 @@
                 subscribe((vnfInstanceDetail: VNFInstanceDetails[]): void => {
                     this.selectedvnfId = vnfInstanceDetail['vnfd-ref'];
                     const VDU: string = 'vdur';
+                    // eslint-disable-next-line security/detect-object-injection
                     if (vnfInstanceDetail[VDU] !== undefined) {
+                        // eslint-disable-next-line security/detect-object-injection
                         vnfInstanceDetail[VDU].forEach((vdu: VDUR): void => {
                             const vnfInstanceDataObj: {} =
                             {
@@ -173,6 +178,7 @@
                         const vduName: string = 'VDU';
                         this.vduId = this.vdu.filter((vdu: {}, index: number, self: {}[]): {} =>
                             index === self.findIndex((t: {}): {} => (
+                                // eslint-disable-next-line security/detect-object-injection
                                 t[vduName] === vdu[vduName]
                             ))
                         );
@@ -187,6 +193,7 @@
     /** Getting count-index by filtering id  */
     public getCountIndex(id: string): void {
         const VDU: string = 'VDU';
+        // eslint-disable-next-line security/detect-object-injection
         this.countIndex = this.vdu.filter((vnfdData: {}[]): boolean => vnfdData[VDU] === id);
     }
 
@@ -217,7 +224,6 @@
             };
         }
         this.migrationInitialization(migrationPayload);
-
     }
 
     /** Initialize the Vm Migration operation @public */
@@ -232,7 +238,9 @@
         };
         this.restService.postResource(apiURLHeader, migrationPayload).subscribe((result: {}): void => {
             this.activeModal.close(modalData);
-            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch();
+            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA): void => {
             this.restService.handleError(error, 'post');
             this.isLoadingResults = false;
@@ -241,6 +249,7 @@
 
     /** Used to get the AbstractControl of controlName passed @private */
     private getFormControl(controlName: string): AbstractControl {
+        // eslint-disable-next-line security/detect-object-injection
         return this.migrationForm.controls[controlName];
     }
 }
diff --git a/src/app/utilities/vnf-instances-action/VNFInstancesActionComponent.ts b/src/app/utilities/vnf-instances-action/VNFInstancesActionComponent.ts
index d3a95f2..0cc2284 100644
--- a/src/app/utilities/vnf-instances-action/VNFInstancesActionComponent.ts
+++ b/src/app/utilities/vnf-instances-action/VNFInstancesActionComponent.ts
@@ -58,6 +58,7 @@
 
     /** Shows information using modalservice @public */
     public infoVNF(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(ShowInfoComponent, { backdrop: 'static' }).componentInstance.params = {
             id: this.instanceID,
             page: 'vnf-instance',
diff --git a/src/app/utilities/vnf-packages-action/VNFPackagesActionComponent.ts b/src/app/utilities/vnf-packages-action/VNFPackagesActionComponent.ts
index cd0d2dc..14b5ec0 100644
--- a/src/app/utilities/vnf-packages-action/VNFPackagesActionComponent.ts
+++ b/src/app/utilities/vnf-packages-action/VNFPackagesActionComponent.ts
@@ -86,6 +86,7 @@
   private cd: ChangeDetectorRef;
 
   /** Set timeout @private */
+  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
   private timeOut: number = 1000;
 
   constructor(injector: Injector) {
@@ -113,12 +114,15 @@
 
   /** Delete VNF packages @public */
   public deleteVNFPackage(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
     modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** Set instance for NSD Edit @public */
@@ -132,6 +136,7 @@
 
   /** list out all the file content of a descriptors @public */
   public showContent(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     this.modalService.open(ShowContentComponent, { backdrop: 'static' }).componentInstance.params = { id: this.vnfID, page: 'vnfd' };
   }
 
@@ -164,7 +169,9 @@
 
   /** Compose VNF Packages @public */
   public composeVNFPackages(): void {
-    this.router.navigate(['/packages/vnf/compose/', this.vnfID]).catch();
+    this.router.navigate(['/packages/vnf/compose/', this.vnfID]).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 
   /** Change the detaction @public */
@@ -176,12 +183,15 @@
 
   /** Clone NS Packages @public */
   public cloneVNFPackage(): void {
+    // eslint-disable-next-line security/detect-non-literal-fs-filename
     const cloneModal: NgbModalRef = this.modalService.open(ClonePackageComponent, { backdrop: 'static' });
     cloneModal.componentInstance.params = { id: this.vnfID, page: 'vnfd', name: this.vnfName };
     cloneModal.result.then((result: MODALCLOSERESPONSEDATA) => {
       if (result) {
         this.sharedService.callData();
       }
-    }).catch();
+    }).catch((): void => {
+      // Catch Navigation Error
+  });
   }
 }
diff --git a/src/app/utilities/wim-accounts-action/WIMAccountsActionComponent.ts b/src/app/utilities/wim-accounts-action/WIMAccountsActionComponent.ts
index 0769863..d5f3ebd 100644
--- a/src/app/utilities/wim-accounts-action/WIMAccountsActionComponent.ts
+++ b/src/app/utilities/wim-accounts-action/WIMAccountsActionComponent.ts
@@ -65,6 +65,7 @@
 
     /** Show WIM account information @public */
     public showWIMAccountInfo(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(WIMAccountInfoComponent, { backdrop: 'static' }).componentInstance.params = {
             id: this.wimID,
             page: 'wim-accounts'
@@ -73,11 +74,14 @@
 
     /** Delete WIM Account @public */
     public deleteWIMAccount(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(DeleteComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 }
diff --git a/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.html b/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.html
index 483fc0b..8c75d25 100644
--- a/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.html
+++ b/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.html
@@ -35,14 +35,14 @@
                 <div class="col-xs-{{12/showData.length}} col-sm-{{12/showData.length}} col-md-{{12/showData.length}} col-lg-{{12/showData.length}} col-xl-{{12/showData.length}}"
                     *ngFor="let list of showData.data;let i = index;">
                     <div class="chartData-card card text-center text-primary">
-                        <canvas class="my-2"
+                        <canvas class="my-2" *ngIf="list.values.total !== 0"
                             baseChart
-                            [data]="list.data"
+                            [datasets]="list.data"
                             [labels]="chartLabels"
-                            [chartType]="chartType"
+                            [type]="chartType"
                             [options]="chartOptions"
                             [legend]="chartLegend"
-                            [colors]="list.colorValues">
+                            [colors]="list.backgroundColor">
                         </canvas>
                          <div class="no-data" *ngIf="list.values.total === 0 || list.values.total === null">
                             <h4><strong>{{'PAGE.VIMDETAILS.NODATA' | translate}}</strong></h4>
diff --git a/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.scss b/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.scss
index 721e8ad..1ffd10c 100644
--- a/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.scss
+++ b/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.scss
@@ -15,8 +15,8 @@
 
  Author: SANDHYA JS (sandhya.j@tataelxsi.co.in)
 */
-@import "../../../assets/scss/mixins/mixin";
-@import "../../../assets/scss/variable";
+@import "../../../assets/scss/mixins/mixin.scss";
+@import "../../../assets/scss/variable.scss";
 .chartData-card {
     word-wrap: break-word;
     @include box-shadow(0px, 1px, 15px, 0px, rgba(69, 90, 100, 0.1));
@@ -29,7 +29,7 @@
     }
     .no-data {
         margin-bottom: 2.5rem;
-        margin-top: -1.5rem;
+        margin-top: 5rem;
     }
 }
 .switch {
diff --git a/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.ts b/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.ts
index 2d21ade..11d48d7 100644
--- a/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.ts
+++ b/src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent.ts
@@ -20,13 +20,13 @@
  */
 import { Component, Injector, Input, OnChanges } from '@angular/core';
 import { TranslateService } from '@ngx-translate/core';
-import { ChartOptions, ChartType } from 'chart.js';
-import 'chartjs-plugin-labels';
+import { ChartOptions, ChartType, Chart } from 'chart.js';
+import ChartDataLabels from 'chartjs-plugin-datalabels';
+Chart.register(ChartDataLabels);
 import { CONSTANTNUMBER } from 'CommonModel';
 import {
     CHARTRANGE,
     CHARTVALUES,
-    Color,
     CONFIGRESOURCESTITLE,
     RANGECOLOR,
     RESOURCESCHARTDATA,
@@ -50,13 +50,7 @@
     public translateService: TranslateService;
     /** Chart Options @public */
     public chartOptions: ChartOptions = {
-        responsive: true,
-        plugins: {
-            labels: {
-                // render 'label', 'value', 'percentage', 'image' or custom function, default is 'percentage'
-                render: 'value'
-            }
-        }
+        responsive: true
     };
     /** Chart Lables @public */
     public chartLabels: String[] = [];
@@ -119,6 +113,7 @@
         const range: CHARTRANGE = { percentage: 100, nearlyFull: 75, full: 100 };
         getCompute.forEach((key: string): void => {
             let usedColor: string = RANGECOLOR.used;
+            // eslint-disable-next-line security/detect-object-injection
             const getValuesUsedFree: number[] = Object.values(compute[key]);
             const total: number = key === keyValidate ? getValuesUsedFree[0] / CONSTANTNUMBER.oneGB : getValuesUsedFree[0];
             const used: number = key === keyValidate ? getValuesUsedFree[1] / CONSTANTNUMBER.oneGB : getValuesUsedFree[1];
@@ -130,7 +125,7 @@
             if (usedPercentage === range.full) {
                 usedColor = RANGECOLOR.full;
             }
-            getData.push(this.generateChartData(key, { total, used, remaining }, [{ backgroundColor: [usedColor, '#b9bcc3'] }]));
+            getData.push(this.generateChartData(key, { total, used, remaining }, [usedColor, '#b9bcc3'] ));
         });
         return getData;
     }
@@ -140,12 +135,13 @@
      * @param setValues CHARTVALUES
      * @returns RESOURCESCHARTDATA
      */
-    public generateChartData(setTitle: string, setValues: CHARTVALUES, setColor: Color[]): RESOURCESCHARTDATA {
+    public generateChartData(setTitle: string, setValues: CHARTVALUES, setColor: string[]): RESOURCESCHARTDATA {
         return {
+            // eslint-disable-next-line security/detect-object-injection
             title: CONFIGRESOURCESTITLE[setTitle],
             values: this.generateChartDataValues(setValues.total, setValues.used, setValues.remaining),
-            data: [setValues.used, setValues.remaining],
-            colorValues: setColor
+            data: [{data: [setValues.used, setValues.remaining], backgroundColor: setColor,
+                 hoverBackgroundColor: setColor, hoverBorderColor: setColor}]
         };
     }
     /**
diff --git a/src/app/vim-accounts/Resources-Overview/SharedModule.ts b/src/app/vim-accounts/Resources-Overview/SharedModule.ts
index 1b365f3..5f4d726 100644
--- a/src/app/vim-accounts/Resources-Overview/SharedModule.ts
+++ b/src/app/vim-accounts/Resources-Overview/SharedModule.ts
@@ -21,16 +21,15 @@
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
 import { TranslateModule } from '@ngx-translate/core';
-import { ChartsModule } from 'ng2-charts';
+import { NgChartsModule } from 'ng2-charts';
 import { ResourcesOverviewComponent } from 'ResourcesOverviewComponent';
 /**
  * Creating @NgModule component for Modules
  */
 @NgModule({
-    imports: [CommonModule, TranslateModule, ChartsModule],
+    imports: [CommonModule, TranslateModule, NgChartsModule],
     declarations: [ResourcesOverviewComponent],
-    exports: [ResourcesOverviewComponent],
-    entryComponents: [ResourcesOverviewComponent]
+    exports: [ResourcesOverviewComponent]
 })
 /** Exporting a class @exports SharedModule */
 export class SharedModule {
diff --git a/src/app/vim-accounts/VimAccountsComponent.ts b/src/app/vim-accounts/VimAccountsComponent.ts
index 9951cfc..b7e930c 100644
--- a/src/app/vim-accounts/VimAccountsComponent.ts
+++ b/src/app/vim-accounts/VimAccountsComponent.ts
@@ -50,7 +50,9 @@
     /** Return to list NS Package List */
     public redirectToList(getURL: string): void {
         if (getURL === '/vim') {
-            this.router.navigate(['/vim/details']).catch();
+            this.router.navigate(['/vim/details']).catch((): void => {
+                // Catch Navigation Error
+            });
         }
     }
 }
diff --git a/src/app/vim-accounts/VimAccountsModule.ts b/src/app/vim-accounts/VimAccountsModule.ts
index c646857..df86659 100644
--- a/src/app/vim-accounts/VimAccountsModule.ts
+++ b/src/app/vim-accounts/VimAccountsModule.ts
@@ -83,8 +83,7 @@
         HttpClientModule, NgSelectModule, Ng2SmartTableModule, TranslateModule, RouterModule.forChild(routes), NgbModule,
         PagePerRowModule, LoaderModule, PageReloadModule, CodemirrorModule],
     declarations: [VimAccountsComponent, InfoVimComponent, VimAccountDetailsComponent, NewVimaccountComponent],
-    providers: [DataService],
-    entryComponents: [InfoVimComponent]
+    providers: [DataService]
 })
 /** Exporting a class @exports VimAccountsModule */
 export class VimAccountsModule {
diff --git a/src/app/vim-accounts/info-vim/InfoVimComponent.ts b/src/app/vim-accounts/info-vim/InfoVimComponent.ts
index 952c1dc..b89a1b9 100644
--- a/src/app/vim-accounts/info-vim/InfoVimComponent.ts
+++ b/src/app/vim-accounts/info-vim/InfoVimComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Info VIM Page
  */
+import { isNullOrUndefined } from 'util';
 import { Component, Injector, OnInit } from '@angular/core';
 import { ActivatedRoute, Router } from '@angular/router';
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
@@ -26,7 +27,6 @@
 import { environment } from 'environment';
 import * as HttpStatus from 'http-status-codes';
 import { RestService } from 'RestService';
-import { isNullOrUndefined } from 'util';
 import { CONFIG, VimAccountDetails, VIMData } from 'VimAccountModel';
 
 /**
@@ -95,7 +95,6 @@
    * Lifecyle Hooks the trigger before component is instantiate
    */
   public ngOnInit(): void {
-    // tslint:disable-next-line:no-backbone-get-set-outside-model
     this.paramsID = this.activatedRoute.snapshot.paramMap.get('id');
     this.dataService.currentMessage.subscribe((data: VIMData) => {
       this.vimId = data.identifier;
@@ -117,29 +116,35 @@
       .subscribe((vimAccountsData: VimAccountDetails) => {
         this.showDetails(vimAccountsData);
         if (!isNullOrUndefined(vimAccountsData.config)) {
-        if (vimAccountsData.config.location !== undefined) {
-          const locationArr: string[] = vimAccountsData.config.location.split(',');
-          if (Array.isArray(locationArr)) {
-            vimAccountsData.config.location = locationArr[0];
+          if (vimAccountsData.config.location !== undefined) {
+            const locationArr: string[] = vimAccountsData.config.location.split(',');
+            if (Array.isArray(locationArr)) {
+              vimAccountsData.config.location = locationArr[0];
+            }
           }
+          Object.keys(vimAccountsData.config).forEach((key: string) => {
+            // eslint-disable-next-line security/detect-object-injection
+            if (Array.isArray(vimAccountsData.config[key]) || typeof vimAccountsData.config[key] === 'object') {
+              // eslint-disable-next-line security/detect-object-injection
+              vimAccountsData.config[key] = JSON.stringify(vimAccountsData.config[key]);
+            }
+            const keyArr: string[] = key.split('_');
+            if (keyArr.length > 1) {
+              // eslint-disable-next-line security/detect-object-injection
+              vimAccountsData.config[key.split('_').join(' ')] = vimAccountsData.config[key];
+              // eslint-disable-next-line @typescript-eslint/no-dynamic-delete, security/detect-object-injection
+              delete vimAccountsData.config[key];
+            }
+          });
+          this.configParams = vimAccountsData.config;
         }
-        Object.keys(vimAccountsData.config).forEach((key: string) => {
-          if (Array.isArray(vimAccountsData.config[key]) || typeof vimAccountsData.config[key] === 'object') {
-            vimAccountsData.config[key] = JSON.stringify(vimAccountsData.config[key]);
-          }
-          const keyArr: string[] = key.split('_');
-          if (keyArr.length > 1 ) {
-            vimAccountsData.config[key.split('_').join(' ')] = vimAccountsData.config[key];
-            delete vimAccountsData.config[key];
-          }
-        });
-        this.configParams = vimAccountsData.config;
-      }
         this.isLoadingResults = false;
       }, (error: ERRORDATA) => {
         this.isLoadingResults = false;
         if (error.error.status === HttpStatus.NOT_FOUND || error.error.status === HttpStatus.UNAUTHORIZED) {
-          this.router.navigateByUrl('404', { skipLocationChange: true }).catch();
+          this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
+            // Catch Navigation Error
+          });
         } else {
           this.restService.handleError(error, 'get');
         }
diff --git a/src/app/vim-accounts/new-vimaccount/NewVimaccountComponent.ts b/src/app/vim-accounts/new-vimaccount/NewVimaccountComponent.ts
index daa9332..a57b782 100644
--- a/src/app/vim-accounts/new-vimaccount/NewVimaccountComponent.ts
+++ b/src/app/vim-accounts/new-vimaccount/NewVimaccountComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file Vim Account Component.
  */
+ import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@@ -47,7 +48,6 @@
 import * as jsyaml from 'js-yaml';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 import { VimAccountDetails } from 'VimAccountModel';
 
 /**
@@ -98,6 +98,7 @@
 
   /** options @public */
   public options: {} = {
+    // eslint-disable-next-line no-invalid-this
     mode: this.modeDefault,
     showCursorWhenSelecting: true,
     autofocus: true,
@@ -208,6 +209,7 @@
       } else {
         Object.keys(this.vimNewAccountForm.value.config).forEach((res: string): void => {
           if (res !== 'location') {
+            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete, security/detect-object-injection
             delete this.vimNewAccountForm.value.config[res];
           }
         });
@@ -223,7 +225,9 @@
       }
 
       Object.keys(this.vimNewAccountForm.value.config).forEach((res: string): void => {
+        // eslint-disable-next-line security/detect-object-injection
         if (isNullOrUndefined(this.vimNewAccountForm.value.config[res]) || this.vimNewAccountForm.value.config[res] === '') {
+          // eslint-disable-next-line @typescript-eslint/no-dynamic-delete, security/detect-object-injection
           delete this.vimNewAccountForm.value.config[res];
         }
       });
diff --git a/src/app/vim-accounts/vim-account-details/VimAccountDetailsComponent.ts b/src/app/vim-accounts/vim-account-details/VimAccountDetailsComponent.ts
index f580e8a..ac0b502 100644
--- a/src/app/vim-accounts/vim-account-details/VimAccountDetailsComponent.ts
+++ b/src/app/vim-accounts/vim-account-details/VimAccountDetailsComponent.ts
@@ -352,7 +352,9 @@
     private arrayOfLocation(): void {
         this.getLocation = [];
         this.locationData.filter((item: VimAccountDetails) => {
+            // eslint-disable-next-line no-prototype-builtins
             if (item.hasOwnProperty('config')) {
+                // eslint-disable-next-line no-prototype-builtins
                 if (item.config.hasOwnProperty('location')) {
                     this.getLocation.push({ name: item.name, location: item.config.location, id: item._id });
                 }
@@ -429,12 +431,10 @@
     }
     /** Add a click handler to the map to render the popup. @private */
     private markerClickEvent(closer: HTMLElement, overlay: Overlay): void {
-        // tslint:disable-next-line: no-any
+        // eslint-disable-next-line @typescript-eslint/no-explicit-any
         this.map.on('singleclick', (evt: any) => {
             const feature: Feature = this.map.forEachFeatureAtPixel(evt.pixel,
-                (f: Feature) => {
-                    return f;
-                });
+                (f: Feature) => f);
             if (feature) {
                 this.setCoordinates(feature, overlay);
             } else {
@@ -449,7 +449,7 @@
         };
     }
     /** Set the coordinates point if the feature is available @private */
-    // tslint:disable-next-line: no-any
+    // eslint-disable-next-line @typescript-eslint/no-explicit-any
     private setCoordinates(feature: any, overlay: Overlay): void {
         this.popupData = '';
         this.popupData += '<h3 class="popover-header">' + feature.values_.vimName + '- (' + feature.values_.location + ')</h3>';
diff --git a/src/app/wim-accounts/WIMAccountsComponent.ts b/src/app/wim-accounts/WIMAccountsComponent.ts
index 5914f30..4a46bd7 100644
--- a/src/app/wim-accounts/WIMAccountsComponent.ts
+++ b/src/app/wim-accounts/WIMAccountsComponent.ts
@@ -49,7 +49,9 @@
     /** Return to list NS Package List */
     public redirectToList(getURL: string): void {
         if (getURL === '/wim') {
-            this.router.navigate(['/wim/details']).catch();
+            this.router.navigate(['/wim/details']).catch((): void => {
+                // Catch Navigation Error
+            });
         }
     }
 }
diff --git a/src/app/wim-accounts/WIMAccountsModule.ts b/src/app/wim-accounts/WIMAccountsModule.ts
index 088502f..407bafd 100644
--- a/src/app/wim-accounts/WIMAccountsModule.ts
+++ b/src/app/wim-accounts/WIMAccountsModule.ts
@@ -67,8 +67,7 @@
         PagePerRowModule, LoaderModule, PageReloadModule],
     declarations: [WIMAccountsComponent, WIMAccountInfoComponent, WIMAccountDetailsComponent, NewWIMAccountComponent],
     providers: [DataService],
-    schemas: [CUSTOM_ELEMENTS_SCHEMA],
-    entryComponents: [WIMAccountInfoComponent, NewWIMAccountComponent]
+    schemas: [CUSTOM_ELEMENTS_SCHEMA]
 })
 /** Exporting a class @exports WIMAccountsModule */
 export class WIMAccountsModule {
diff --git a/src/app/wim-accounts/new-wim-account/NewWIMAccountComponent.ts b/src/app/wim-accounts/new-wim-account/NewWIMAccountComponent.ts
index 5b8e29a..65ae937 100644
--- a/src/app/wim-accounts/new-wim-account/NewWIMAccountComponent.ts
+++ b/src/app/wim-accounts/new-wim-account/NewWIMAccountComponent.ts
@@ -18,6 +18,7 @@
 /**
  * @file WIM Account Component.
  */
+import { isNullOrUndefined } from 'util';
 import { HttpHeaders } from '@angular/common/http';
 import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';
 import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
@@ -29,7 +30,6 @@
 import * as jsyaml from 'js-yaml';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
 
 /**
  * Creating component
@@ -169,7 +169,6 @@
     if (files && files.length === 1) {
       this.sharedService.getFileString(files, 'yaml').then((fileContent: string): void => {
         const getConfigJson: string = jsyaml.load(fileContent, { json: true });
-        // tslint:disable-next-line: no-backbone-get-set-outside-model
         this.wimNewAccountForm.get('config').setValue(JSON.stringify(getConfigJson));
       }).catch((err: string): void => {
         if (err === 'typeError') {
diff --git a/src/app/wim-accounts/wim-account-details/WIMAccountDetailsComponent.ts b/src/app/wim-accounts/wim-account-details/WIMAccountDetailsComponent.ts
index b1d16f7..927e54e 100644
--- a/src/app/wim-accounts/wim-account-details/WIMAccountDetailsComponent.ts
+++ b/src/app/wim-accounts/wim-account-details/WIMAccountDetailsComponent.ts
@@ -195,12 +195,15 @@
 
     /** Compose new WIM Accounts @public */
     public composeWIM(): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         const modalRef: NgbModalRef = this.modalService.open(NewWIMAccountComponent, { backdrop: 'static' });
         modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
             if (result) {
                 this.sharedService.callData();
             }
-        }).catch();
+        }).catch((): void => {
+            // Catch Navigation Error
+        });
     }
 
     /** Generate generateWIMData object from loop and return for the datasource @public */
@@ -237,7 +240,9 @@
             }
             this.dataSource.load(this.wimData).then((data: {}) => {
                 this.isLoadingResults = false;
-            }).catch();
+            }).catch((): void => {
+                // Catch Navigation Error
+            });
         }, (error: ERRORDATA) => {
             this.restService.handleError(error, 'get');
             this.isLoadingResults = false;
